--- zzzz-none-000/linux-2.6.39.4/net/bridge/br_forward.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-arm-6490-729/linux-2.6.39.4/net/bridge/br_forward.c 2021-11-10 13:23:11.000000000 +0000 @@ -10,6 +10,10 @@ * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ +/* + * Includes Intel Corporation's changes/modifications dated: [11/07/2011]. +* Changed/modified portions - Copyright © [2011], Intel Corporation. +*/ #include #include @@ -19,6 +23,7 @@ #include #include #include +#include #include "br_private.h" static int deliver_clone(const struct net_bridge_port *prev, @@ -31,7 +36,8 @@ const struct sk_buff *skb) { return (((p->flags & BR_HAIRPIN_MODE) || skb->dev != p->dev) && - p->state == BR_STATE_FORWARDING); + p->state == BR_STATE_FORWARDING) && + !br_skb_isolated(p, skb); } static inline unsigned packet_length(const struct sk_buff *skb) @@ -98,7 +104,12 @@ /* called with rcu_read_lock */ void br_deliver(const struct net_bridge_port *to, struct sk_buff *skb) { - if (should_deliver(to, skb)) { + /* + * 'to' may be null, when called from br_dev_xmit with dest mac is local. + * this can happen if there is a physical loop between two ports + * of the bridge + */ + if (to && should_deliver(to, skb)) { __br_deliver(to, skb); return; } @@ -195,6 +206,9 @@ /* called with rcu_read_lock */ void br_flood_deliver(struct net_bridge *br, struct sk_buff *skb) { +#ifdef CONFIG_AVM_PA + avm_pa_do_not_accelerate(skb); +#endif br_flood(br, skb, NULL, __br_deliver); } @@ -202,6 +216,12 @@ void br_flood_forward(struct net_bridge *br, struct sk_buff *skb, struct sk_buff *skb2) { +#ifdef CONFIG_AVM_PA + avm_pa_do_not_accelerate(skb); +#endif +#ifdef CONFIG_TI_PACKET_PROCESSOR + ti_hil_pp_event (TI_BRIDGE_PACKET_FLOODED, (void*)skb); +#endif// CONFIG_TI_PACKET_PROCESSOR br_flood(br, skb, skb2, __br_forward); }