|
@@ -134,6 +134,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
|
|
if (skb->protocol == htons(ETH_P_PAUSE))
|
|
if (skb->protocol == htons(ETH_P_PAUSE))
|
|
goto drop;
|
|
goto drop;
|
|
|
|
|
|
|
|
+ /* If STP is turned off, then forward */
|
|
|
|
+ if (p->br->stp_enabled == BR_NO_STP && dest[5] == 0)
|
|
|
|
+ goto forward;
|
|
|
|
+
|
|
if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
|
|
if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
|
|
NULL, br_handle_local_finish))
|
|
NULL, br_handle_local_finish))
|
|
return NULL; /* frame consumed by filter */
|
|
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)
|
|
return skb; /* continue processing */
|
|
return skb; /* continue processing */
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+forward:
|
|
switch (p->state) {
|
|
switch (p->state) {
|
|
case BR_STATE_FORWARDING:
|
|
case BR_STATE_FORWARDING:
|
|
rhook = rcu_dereference(br_should_route_hook);
|
|
rhook = rcu_dereference(br_should_route_hook);
|