diff options
Diffstat (limited to 'net/bridge/br_input.c')
| -rw-r--r-- | net/bridge/br_input.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 30b88777c3df..5ee1a3682bf2 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
| @@ -134,6 +134,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
| 134 | if (skb->protocol == htons(ETH_P_PAUSE)) | 134 | if (skb->protocol == htons(ETH_P_PAUSE)) |
| 135 | goto drop; | 135 | goto drop; |
| 136 | 136 | ||
| 137 | /* If STP is turned off, then forward */ | ||
| 138 | if (p->br->stp_enabled == BR_NO_STP && dest[5] == 0) | ||
| 139 | goto forward; | ||
| 140 | |||
| 137 | if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev, | 141 | if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev, |
| 138 | NULL, br_handle_local_finish)) | 142 | NULL, br_handle_local_finish)) |
| 139 | return NULL; /* frame consumed by filter */ | 143 | return NULL; /* frame consumed by filter */ |
| @@ -141,6 +145,7 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | |||
| 141 | return skb; /* continue processing */ | 145 | return skb; /* continue processing */ |
| 142 | } | 146 | } |
| 143 | 147 | ||
| 148 | forward: | ||
| 144 | switch (p->state) { | 149 | switch (p->state) { |
| 145 | case BR_STATE_FORWARDING: | 150 | case BR_STATE_FORWARDING: |
| 146 | rhook = rcu_dereference(br_should_route_hook); | 151 | rhook = rcu_dereference(br_should_route_hook); |
