From fe9c473428ab2824c560329db62f410ebe14b4e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Sun, 6 Jun 2010 21:28:17 +0200 Subject: [PATCH] --- yaml --- r: 205663 b: refs/heads/master c: 96d592ed599434d2d5f339a1d282871bc6377d2c h: refs/heads/master i: 205661: f1cc9dec200b8475d2fc5b31a3c076283bd512ff 205659: 03ceb841232932dc516fd47f1f372fbf1cff1e5d 205655: 01a71d9115a0922b0a2b95b35b766bb084412b94 205647: 3429ac9893159251e2268a83f1ef84d26c3cc66d 205631: ac8b4be664273a14a9bbc5c641e72719e388ecca v: v3 --- [refs] | 2 +- trunk/drivers/staging/batman-adv/hard-interface.c | 14 +++++++++++++- trunk/drivers/staging/batman-adv/send.c | 9 +++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 27c314946d75..e5e7261606ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 186305aa1284ac0cae88e18b837c33d5a4a84afc +refs/heads/master: 96d592ed599434d2d5f339a1d282871bc6377d2c diff --git a/trunk/drivers/staging/batman-adv/hard-interface.c b/trunk/drivers/staging/batman-adv/hard-interface.c index 7a582e80de18..6939b8d4ec80 100644 --- a/trunk/drivers/staging/batman-adv/hard-interface.c +++ b/trunk/drivers/staging/batman-adv/hard-interface.c @@ -30,6 +30,7 @@ #include "hash.h" #include +#include #define MIN(x, y) ((x) < (y) ? (x) : (y)) @@ -432,6 +433,11 @@ static int hard_if_event(struct notifier_block *this, return NOTIFY_DONE; } +static int batman_skb_recv_finish(struct sk_buff *skb) +{ + return NF_ACCEPT; +} + /* receive a packet with the batman ethertype coming on a hard * interface */ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, @@ -451,6 +457,13 @@ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, if (atomic_read(&module_state) != MODULE_ACTIVE) goto err_free; + /* if netfilter/ebtables wants to block incoming batman + * packets then give them a chance to do so here */ + ret = NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, dev, NULL, + batman_skb_recv_finish); + if (ret != 1) + goto err_out; + /* packet should hold at least type and version */ if (unlikely(skb_headlen(skb) < 2)) goto err_free; @@ -530,7 +543,6 @@ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, return NET_RX_DROP; } - struct notifier_block hard_if_notifier = { .notifier_call = hard_if_event, }; diff --git a/trunk/drivers/staging/batman-adv/send.c b/trunk/drivers/staging/batman-adv/send.c index ac69ed871a76..7365f6dbcb6b 100644 --- a/trunk/drivers/staging/batman-adv/send.c +++ b/trunk/drivers/staging/batman-adv/send.c @@ -29,6 +29,8 @@ #include "vis.h" #include "aggregation.h" +#include + /* apply hop penalty for a normal link */ static uint8_t hop_penalty(const uint8_t tq) { @@ -90,9 +92,12 @@ int send_skb_packet(struct sk_buff *skb, /* dev_queue_xmit() returns a negative result on error. However on * congestion and traffic shaping, it drops and returns NET_XMIT_DROP - * (which is > 0). This will not be treated as an error. */ + * (which is > 0). This will not be treated as an error. + * Also, if netfilter/ebtables wants to block outgoing batman + * packets then giving them a chance to do so here */ - return dev_queue_xmit(skb); + return NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, + dev_queue_xmit); send_skb_err: kfree_skb(skb); return NET_XMIT_DROP;