return err;
 }
 
+static int mlxsw_sp_router_netdevice_event(struct notifier_block *nb,
+                                          unsigned long event, void *ptr)
+{
+       int err = 0;
+
+       return notifier_from_errno(err);
+}
+
 static int __mlxsw_sp_rif_macvlan_flush(struct net_device *dev,
                                        struct netdev_nested_priv *priv)
 {
        if (err)
                goto err_register_fib_notifier;
 
+       mlxsw_sp->router->netdevice_nb.notifier_call =
+               mlxsw_sp_router_netdevice_event;
+       err = register_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
+                                             &mlxsw_sp->router->netdevice_nb);
+       if (err)
+               goto err_register_netdev_notifier;
+
        return 0;
 
+err_register_netdev_notifier:
+       unregister_fib_notifier(mlxsw_sp_net(mlxsw_sp),
+                               &mlxsw_sp->router->fib_nb);
 err_register_fib_notifier:
        unregister_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
                                    &mlxsw_sp->router->nexthop_nb);
 
 void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
 {
+       unregister_netdevice_notifier_net(mlxsw_sp_net(mlxsw_sp),
+                                         &mlxsw_sp->router->netdevice_nb);
        unregister_fib_notifier(mlxsw_sp_net(mlxsw_sp),
                                &mlxsw_sp->router->fib_nb);
        unregister_nexthop_notifier(mlxsw_sp_net(mlxsw_sp),
 
        struct notifier_block netevent_nb;
        struct notifier_block inetaddr_nb;
        struct notifier_block inet6addr_nb;
+       struct notifier_block netdevice_nb;
        const struct mlxsw_sp_rif_ops **rif_ops_arr;
        const struct mlxsw_sp_ipip_ops **ipip_ops_arr;
        struct mlxsw_sp_router_nve_decap nve_decap_config;