mirror of https://gitee.com/openkylin/linux.git
Included change:
- fix multi soft-interfaces setups with Network Coding enabled by registering the CODED packet type once only (instead of once per soft-if) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (GNU/Linux) iQIcBAABCAAGBQJSTHvQAAoJEADl0hg6qKeOBl8P/jDJhnH65p+zsXlK5RQ1bOmq F9cY7nY1cESQ0V4j9BGGqPcvy3ltCbVnaPGvrYKQ78CIVYFIlA0ZwmnjnXzkxi4a XWgG10Znx8yUOPllFoRp7r7yJht2FVprWnEN1aVCwbflpHxD5jI+L3C8JWULEfbI 7Gm3CcHQWzQSOv8u00XeoBmAo3Q+N0gaEAXl+vogKW4RP59GU4QSCstahyRuPmme l1C9SrLqi+KJjpvgxEdjHmGD8K0yLYJVw/6iMYlYpKbraU793madj0JNT+LwwAmE dMTOp83yKy+n8k4XRKYRnvOElAJVVvEjU81V/4ompVHzIfu/7f1xSWyAQpecbhFG srd/QLqIszScx7ELDQ3IVMacTLs2tMaEotvrymYIooRLz3ecgeAyXth3aBQErSD2 SoDliIpx8+D45c04ri9Hcwu2k1g100VYG0QiJMUC0berYGDyjPnbEdpnmYTioJ6J 4s4Qs3ve70lo0yc2ODDZxYN6n6Rk0PXuxJwj5PeBR6RswEo1izdelOXEcAevVjZE SRJn0niZmtYlS5gD/6aohkVKnKti9Rd2DrgOU7qCWJ/wLUiFSL5L7Lj9megKbmeG f4qxD9rC3wKQdX1TtU/ED7IfMWMBY0tcSEnbCYs+otI8kCbtvr0490h1JtNJALHb po2HXXIMEjqmbhkgsz29 =pqD/ -----END PGP SIGNATURE----- Merge tag 'batman-adv-fix-for-davem' of git://git.open-mesh.org/linux-merge Included change: - fix multi soft-interfaces setups with Network Coding enabled by registering the CODED packet type once only (instead of once per soft-if) Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
196896d4bb
|
@ -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);
|
||||
|
||||
|
|
|
@ -34,6 +34,20 @@ static void batadv_nc_worker(struct work_struct *work);
|
|||
static int batadv_nc_recv_coded_packet(struct sk_buff *skb,
|
||||
struct batadv_hard_iface *recv_if);
|
||||
|
||||
/**
|
||||
* batadv_nc_init - one-time initialization for network coding
|
||||
*/
|
||||
int __init batadv_nc_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Register our packet type */
|
||||
ret = batadv_recv_handler_register(BATADV_CODED,
|
||||
batadv_nc_recv_coded_packet);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_nc_start_timer - initialise the nc periodic worker
|
||||
* @bat_priv: the bat priv with all the soft interface information
|
||||
|
@ -45,10 +59,10 @@ static void batadv_nc_start_timer(struct batadv_priv *bat_priv)
|
|||
}
|
||||
|
||||
/**
|
||||
* batadv_nc_init - initialise coding hash table and start house keeping
|
||||
* batadv_nc_mesh_init - initialise coding hash table and start house keeping
|
||||
* @bat_priv: the bat priv with all the soft interface information
|
||||
*/
|
||||
int batadv_nc_init(struct batadv_priv *bat_priv)
|
||||
int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
|
||||
{
|
||||
bat_priv->nc.timestamp_fwd_flush = jiffies;
|
||||
bat_priv->nc.timestamp_sniffed_purge = jiffies;
|
||||
|
@ -70,11 +84,6 @@ int batadv_nc_init(struct batadv_priv *bat_priv)
|
|||
batadv_hash_set_lock_class(bat_priv->nc.coding_hash,
|
||||
&batadv_nc_decoding_hash_lock_class_key);
|
||||
|
||||
/* Register our packet type */
|
||||
if (batadv_recv_handler_register(BATADV_CODED,
|
||||
batadv_nc_recv_coded_packet) < 0)
|
||||
goto err;
|
||||
|
||||
INIT_DELAYED_WORK(&bat_priv->nc.work, batadv_nc_worker);
|
||||
batadv_nc_start_timer(bat_priv);
|
||||
|
||||
|
@ -1721,12 +1730,11 @@ static int batadv_nc_recv_coded_packet(struct sk_buff *skb,
|
|||
}
|
||||
|
||||
/**
|
||||
* batadv_nc_free - clean up network coding memory
|
||||
* batadv_nc_mesh_free - clean up network coding memory
|
||||
* @bat_priv: the bat priv with all the soft interface information
|
||||
*/
|
||||
void batadv_nc_free(struct batadv_priv *bat_priv)
|
||||
void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
|
||||
{
|
||||
batadv_recv_handler_unregister(BATADV_CODED);
|
||||
cancel_delayed_work_sync(&bat_priv->nc.work);
|
||||
|
||||
batadv_nc_purge_paths(bat_priv, bat_priv->nc.coding_hash, NULL);
|
||||
|
|
|
@ -22,8 +22,9 @@
|
|||
|
||||
#ifdef CONFIG_BATMAN_ADV_NC
|
||||
|
||||
int batadv_nc_init(struct batadv_priv *bat_priv);
|
||||
void batadv_nc_free(struct batadv_priv *bat_priv);
|
||||
int batadv_nc_init(void);
|
||||
int batadv_nc_mesh_init(struct batadv_priv *bat_priv);
|
||||
void batadv_nc_mesh_free(struct batadv_priv *bat_priv);
|
||||
void batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
|
||||
struct batadv_orig_node *orig_node,
|
||||
struct batadv_orig_node *orig_neigh_node,
|
||||
|
@ -46,12 +47,17 @@ int batadv_nc_init_debugfs(struct batadv_priv *bat_priv);
|
|||
|
||||
#else /* ifdef CONFIG_BATMAN_ADV_NC */
|
||||
|
||||
static inline int batadv_nc_init(struct batadv_priv *bat_priv)
|
||||
static inline int batadv_nc_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void batadv_nc_free(struct batadv_priv *bat_priv)
|
||||
static inline int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue