diff options
Diffstat (limited to 'net/bridge/br_forward.c')
-rw-r--r-- | net/bridge/br_forward.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 56f3aa47e758..0dca027ceb80 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c | |||
@@ -20,14 +20,11 @@ | |||
20 | #include <linux/netfilter_bridge.h> | 20 | #include <linux/netfilter_bridge.h> |
21 | #include "br_private.h" | 21 | #include "br_private.h" |
22 | 22 | ||
23 | /* Don't forward packets to originating port or forwarding diasabled */ | ||
23 | static inline int should_deliver(const struct net_bridge_port *p, | 24 | static inline int should_deliver(const struct net_bridge_port *p, |
24 | const struct sk_buff *skb) | 25 | const struct sk_buff *skb) |
25 | { | 26 | { |
26 | if (skb->dev == p->dev || | 27 | return (skb->dev != p->dev && p->state == BR_STATE_FORWARDING); |
27 | p->state != BR_STATE_FORWARDING) | ||
28 | return 0; | ||
29 | |||
30 | return 1; | ||
31 | } | 28 | } |
32 | 29 | ||
33 | static inline unsigned packet_length(const struct sk_buff *skb) | 30 | static inline unsigned packet_length(const struct sk_buff *skb) |
@@ -55,10 +52,9 @@ int br_dev_queue_push_xmit(struct sk_buff *skb) | |||
55 | 52 | ||
56 | int br_forward_finish(struct sk_buff *skb) | 53 | int br_forward_finish(struct sk_buff *skb) |
57 | { | 54 | { |
58 | NF_HOOK(PF_BRIDGE, NF_BR_POST_ROUTING, skb, NULL, skb->dev, | 55 | return NF_HOOK(PF_BRIDGE, NF_BR_POST_ROUTING, skb, NULL, skb->dev, |
59 | br_dev_queue_push_xmit); | 56 | br_dev_queue_push_xmit); |
60 | 57 | ||
61 | return 0; | ||
62 | } | 58 | } |
63 | 59 | ||
64 | static void __br_deliver(const struct net_bridge_port *to, struct sk_buff *skb) | 60 | static void __br_deliver(const struct net_bridge_port *to, struct sk_buff *skb) |