aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_input.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2010-02-27 14:41:39 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-28 03:48:42 -0500
commit87557c18ac36241b596984589a0889c5c4bf916c (patch)
treedf4fc6baad28e65e29cfdc8ffc258d665d9119da /net/bridge/br_input.c
parent4181b2c8bc29bb756ac1816678104b528377b656 (diff)
bridge: Do br_pass_frame_up after other ports
At the moment we deliver to the local bridge port via the function br_pass_frame_up before all other ports. There is no requirement for this. For the purpose of IGMP snooping, it would be more convenient if we did the local port last. Therefore this patch rearranges the bridge input processing so that the local bridge port gets to see the packet last (if at all). Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r--net/bridge/br_input.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 5ee1a3682bf2..9589937e1c0a 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -73,9 +73,6 @@ int br_handle_frame_finish(struct sk_buff *skb)
73 if (skb2 == skb) 73 if (skb2 == skb)
74 skb2 = skb_clone(skb, GFP_ATOMIC); 74 skb2 = skb_clone(skb, GFP_ATOMIC);
75 75
76 if (skb2)
77 br_pass_frame_up(br, skb2);
78
79 if (skb) { 76 if (skb) {
80 if (dst) 77 if (dst)
81 br_forward(dst->dst, skb); 78 br_forward(dst->dst, skb);
@@ -83,6 +80,9 @@ int br_handle_frame_finish(struct sk_buff *skb)
83 br_flood_forward(br, skb); 80 br_flood_forward(br, skb);
84 } 81 }
85 82
83 if (skb2)
84 br_pass_frame_up(br, skb2);
85
86out: 86out:
87 return 0; 87 return 0;
88drop: 88drop: