batman-adv: set up network coding packet handlers during module init
batman-adv saves its table of packet handlers as a global state, so handlers must be set up only once (and setting them up a second time will fail). The recently-added network coding support tries to set up its handler each time a new softif is registered, which obviously fails when more that one softif is used (and in consequence, the softif creation fails). Fix this by splitting up batadv_nc_init into batadv_nc_init (which is called only once) and batadv_nc_mesh_init (which is called for each softif); in addition batadv_nc_free is renamed to batadv_nc_mesh_free to keep naming consistent. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
This commit is contained in:

committed by
Antonio Quartulli

parent
c31eeaced2
commit
6c519bad7b
@@ -65,6 +65,7 @@ static int __init batadv_init(void)
|
||||
batadv_recv_handler_init();
|
||||
|
||||
batadv_iv_init();
|
||||
batadv_nc_init();
|
||||
|
||||
batadv_event_workqueue = create_singlethread_workqueue("bat_events");
|
||||
|
||||
@@ -142,7 +143,7 @@ int batadv_mesh_init(struct net_device *soft_iface)
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
ret = batadv_nc_init(bat_priv);
|
||||
ret = batadv_nc_mesh_init(bat_priv);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
@@ -167,7 +168,7 @@ void batadv_mesh_free(struct net_device *soft_iface)
|
||||
batadv_vis_quit(bat_priv);
|
||||
|
||||
batadv_gw_node_purge(bat_priv);
|
||||
batadv_nc_free(bat_priv);
|
||||
batadv_nc_mesh_free(bat_priv);
|
||||
batadv_dat_free(bat_priv);
|
||||
batadv_bla_free(bat_priv);
|
||||
|
||||
|
Reference in New Issue
Block a user