@@ -5001,15 +5001,6 @@ static void mlxsw_sp_router_fib4_del(struct mlxsw_sp *mlxsw_sp,
50015001
50025002static bool mlxsw_sp_fib6_rt_should_ignore (const struct fib6_info * rt )
50035003{
5004- /* Packets with link-local destination IP arriving to the router
5005- * are trapped to the CPU, so no need to program specific routes
5006- * for them. Only allow prefix routes (usually one fe80::/64) so
5007- * that packets are trapped for the right reason.
5008- */
5009- if ((ipv6_addr_type (& rt -> fib6_dst .addr ) & IPV6_ADDR_LINKLOCAL ) &&
5010- (rt -> fib6_flags & (RTF_LOCAL | RTF_ANYCAST )))
5011- return true;
5012-
50135004 /* Multicast routes aren't supported, so ignore them. Neighbour
50145005 * Discovery packets are specifically trapped.
50155006 */
@@ -8078,16 +8069,6 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
80788069 mlxsw_sp -> router = router ;
80798070 router -> mlxsw_sp = mlxsw_sp ;
80808071
8081- router -> inetaddr_nb .notifier_call = mlxsw_sp_inetaddr_event ;
8082- err = register_inetaddr_notifier (& router -> inetaddr_nb );
8083- if (err )
8084- goto err_register_inetaddr_notifier ;
8085-
8086- router -> inet6addr_nb .notifier_call = mlxsw_sp_inet6addr_event ;
8087- err = register_inet6addr_notifier (& router -> inet6addr_nb );
8088- if (err )
8089- goto err_register_inet6addr_notifier ;
8090-
80918072 INIT_LIST_HEAD (& mlxsw_sp -> router -> nexthop_neighs_list );
80928073 err = __mlxsw_sp_router_init (mlxsw_sp );
80938074 if (err )
@@ -8128,12 +8109,6 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
81288109 if (err )
81298110 goto err_neigh_init ;
81308111
8131- mlxsw_sp -> router -> netevent_nb .notifier_call =
8132- mlxsw_sp_router_netevent_event ;
8133- err = register_netevent_notifier (& mlxsw_sp -> router -> netevent_nb );
8134- if (err )
8135- goto err_register_netevent_notifier ;
8136-
81378112 err = mlxsw_sp_mp_hash_init (mlxsw_sp );
81388113 if (err )
81398114 goto err_mp_hash_init ;
@@ -8142,6 +8117,22 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
81428117 if (err )
81438118 goto err_dscp_init ;
81448119
8120+ router -> inetaddr_nb .notifier_call = mlxsw_sp_inetaddr_event ;
8121+ err = register_inetaddr_notifier (& router -> inetaddr_nb );
8122+ if (err )
8123+ goto err_register_inetaddr_notifier ;
8124+
8125+ router -> inet6addr_nb .notifier_call = mlxsw_sp_inet6addr_event ;
8126+ err = register_inet6addr_notifier (& router -> inet6addr_nb );
8127+ if (err )
8128+ goto err_register_inet6addr_notifier ;
8129+
8130+ mlxsw_sp -> router -> netevent_nb .notifier_call =
8131+ mlxsw_sp_router_netevent_event ;
8132+ err = register_netevent_notifier (& mlxsw_sp -> router -> netevent_nb );
8133+ if (err )
8134+ goto err_register_netevent_notifier ;
8135+
81458136 mlxsw_sp -> router -> fib_nb .notifier_call = mlxsw_sp_router_fib_event ;
81468137 err = register_fib_notifier (mlxsw_sp_net (mlxsw_sp ),
81478138 & mlxsw_sp -> router -> fib_nb ,
@@ -8152,10 +8143,15 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
81528143 return 0 ;
81538144
81548145err_register_fib_notifier :
8155- err_dscp_init :
8156- err_mp_hash_init :
81578146 unregister_netevent_notifier (& mlxsw_sp -> router -> netevent_nb );
81588147err_register_netevent_notifier :
8148+ unregister_inet6addr_notifier (& router -> inet6addr_nb );
8149+ err_register_inet6addr_notifier :
8150+ unregister_inetaddr_notifier (& router -> inetaddr_nb );
8151+ err_register_inetaddr_notifier :
8152+ mlxsw_core_flush_owq ();
8153+ err_dscp_init :
8154+ err_mp_hash_init :
81598155 mlxsw_sp_neigh_fini (mlxsw_sp );
81608156err_neigh_init :
81618157 mlxsw_sp_vrs_fini (mlxsw_sp );
@@ -8174,10 +8170,6 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp,
81748170err_rifs_init :
81758171 __mlxsw_sp_router_fini (mlxsw_sp );
81768172err_router_init :
8177- unregister_inet6addr_notifier (& router -> inet6addr_nb );
8178- err_register_inet6addr_notifier :
8179- unregister_inetaddr_notifier (& router -> inetaddr_nb );
8180- err_register_inetaddr_notifier :
81818173 mutex_destroy (& mlxsw_sp -> router -> lock );
81828174 kfree (mlxsw_sp -> router );
81838175 return err ;
@@ -8188,6 +8180,9 @@ void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
81888180 unregister_fib_notifier (mlxsw_sp_net (mlxsw_sp ),
81898181 & mlxsw_sp -> router -> fib_nb );
81908182 unregister_netevent_notifier (& mlxsw_sp -> router -> netevent_nb );
8183+ unregister_inet6addr_notifier (& mlxsw_sp -> router -> inet6addr_nb );
8184+ unregister_inetaddr_notifier (& mlxsw_sp -> router -> inetaddr_nb );
8185+ mlxsw_core_flush_owq ();
81918186 mlxsw_sp_neigh_fini (mlxsw_sp );
81928187 mlxsw_sp_vrs_fini (mlxsw_sp );
81938188 mlxsw_sp_mr_fini (mlxsw_sp );
@@ -8197,8 +8192,6 @@ void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp)
81978192 mlxsw_sp_ipips_fini (mlxsw_sp );
81988193 mlxsw_sp_rifs_fini (mlxsw_sp );
81998194 __mlxsw_sp_router_fini (mlxsw_sp );
8200- unregister_inet6addr_notifier (& mlxsw_sp -> router -> inet6addr_nb );
8201- unregister_inetaddr_notifier (& mlxsw_sp -> router -> inetaddr_nb );
82028195 mutex_destroy (& mlxsw_sp -> router -> lock );
82038196 kfree (mlxsw_sp -> router );
82048197}
0 commit comments