From 7051f0c83765ca737942d2404e3c9626180f3d70 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Sun, 5 Sep 2010 01:58:27 +0200 Subject: [PATCH] --- yaml --- r: 219751 b: refs/heads/master c: 15cf5523d2e42f755b3b1d8ea0fa601ffcf8b9e7 h: refs/heads/master i: 219749: 2af98351d45b76b8582b0c0e8c8fac0216f6bbce 219747: 0dcdc31ec668d3200cf6cad2d28e78e00f2cd8d8 219743: 791f06ed1655d337a66013d2654b4e2a6887604b v: v3 --- [refs] | 2 +- trunk/drivers/staging/batman-adv/hard-interface.c | 12 ++++++++---- trunk/drivers/staging/batman-adv/main.c | 10 ---------- trunk/drivers/staging/batman-adv/types.h | 2 +- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index c5670e17a3c6..70cf6452322b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d52e90aeaf93d62cc1a7f9a8a9f3a6f68c475cf5 +refs/heads/master: 15cf5523d2e42f755b3b1d8ea0fa601ffcf8b9e7 diff --git a/trunk/drivers/staging/batman-adv/hard-interface.c b/trunk/drivers/staging/batman-adv/hard-interface.c index 82d3d554467b..f33c73f72d59 100644 --- a/trunk/drivers/staging/batman-adv/hard-interface.c +++ b/trunk/drivers/staging/batman-adv/hard-interface.c @@ -265,6 +265,11 @@ int hardif_enable_interface(struct batman_if *batman_if) batman_if->if_status = IF_INACTIVE; orig_hash_add_if(batman_if, bat_priv->num_ifaces); + batman_if->batman_adv_ptype.type = __constant_htons(ETH_P_BATMAN); + batman_if->batman_adv_ptype.func = batman_skb_recv; + batman_if->batman_adv_ptype.dev = batman_if->net_dev; + dev_add_pack(&batman_if->batman_adv_ptype); + atomic_set(&batman_if->seqno, 1); atomic_set(&batman_if->frag_seqno, 1); bat_info(soft_device, "Adding interface: %s\n", batman_if->dev); @@ -319,6 +324,8 @@ void hardif_disable_interface(struct batman_if *batman_if) return; bat_info(soft_device, "Removing interface: %s\n", batman_if->dev); + dev_remove_pack(&batman_if->batman_adv_ptype); + bat_priv->num_ifaces--; orig_hash_del_if(batman_if, bat_priv->num_ifaces); @@ -468,6 +475,7 @@ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, struct batman_if *batman_if; int ret; + batman_if = container_of(ptype, struct batman_if, batman_adv_ptype); skb = skb_share_check(skb, GFP_ATOMIC); /* skb was released by skb_share_check() */ @@ -486,10 +494,6 @@ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, || !skb_mac_header(skb))) goto err_free; - batman_if = get_batman_if_by_netdev(skb->dev); - if (!batman_if) - goto err_free; - /* discard frames on not active interfaces */ if (batman_if->if_status != IF_ACTIVE) goto err_free; diff --git a/trunk/drivers/staging/batman-adv/main.c b/trunk/drivers/staging/batman-adv/main.c index c0a3373a08a0..eb0bfbe50e35 100644 --- a/trunk/drivers/staging/batman-adv/main.c +++ b/trunk/drivers/staging/batman-adv/main.c @@ -49,11 +49,6 @@ struct net_device *soft_device; unsigned char broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; atomic_t module_state; -static struct packet_type batman_adv_packet_type __read_mostly = { - .type = __constant_htons(ETH_P_BATMAN), - .func = batman_skb_recv, -}; - struct workqueue_struct *bat_event_workqueue; static int __init batman_init(void) @@ -103,7 +98,6 @@ static int __init batman_init(void) goto unreg_sysfs; register_netdevice_notifier(&hard_if_notifier); - dev_add_pack(&batman_adv_packet_type); pr_info("B.A.T.M.A.N. advanced %s%s (compatibility version %i) " "loaded\n", SOURCE_VERSION, REVISION_VERSION_STR, @@ -140,8 +134,6 @@ static void __exit batman_exit(void) soft_device = NULL; } - dev_remove_pack(&batman_adv_packet_type); - destroy_workqueue(bat_event_workqueue); bat_event_workqueue = NULL; } @@ -185,8 +177,6 @@ void deactivate_module(void) vis_quit(); - /* TODO: unregister BATMAN pack */ - originator_free(); hna_local_free(); diff --git a/trunk/drivers/staging/batman-adv/types.h b/trunk/drivers/staging/batman-adv/types.h index ac165753e848..2b06944a56b5 100644 --- a/trunk/drivers/staging/batman-adv/types.h +++ b/trunk/drivers/staging/batman-adv/types.h @@ -46,7 +46,7 @@ struct batman_if { int packet_len; struct kobject *hardif_obj; struct rcu_head rcu; - + struct packet_type batman_adv_ptype; }; /**