summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-08-15 02:08:36 +0200
committerDavid S. Miller <davem@sunset.davemloft.net>2006-08-18 01:29:46 +0200
commit7ea49ed73c8d0d0bdf7c11fc18c61572d2d22176 (patch)
tree09cf48c5f48bdee89b7a2579ba4c7b072ca842e9 /net
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-2.6.18 (diff)
downloadlinux-7ea49ed73c8d0d0bdf7c11fc18c61572d2d22176.tar.xz
linux-7ea49ed73c8d0d0bdf7c11fc18c61572d2d22176.zip
[VLAN]: Make sure bonding packet drop checks get done in hwaccel RX path.
Since __vlan_hwaccel_rx() is essentially bypassing the netif_receive_skb() call that would have occurred if we did the VLAN decapsulation in software, we are missing the skb_bond() call and the assosciated checks it does. Export those checks via an inline function, skb_bond_should_drop(), and use this in __vlan_hwaccel_rx(). Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/dev.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index d95e2626d944..9fe96cde3e19 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1619,26 +1619,10 @@ static inline struct net_device *skb_bond(struct sk_buff *skb)
struct net_device *dev = skb->dev;
if (dev->master) {
- /*
- * On bonding slaves other than the currently active
- * slave, suppress duplicates except for 802.3ad
- * ETH_P_SLOW and alb non-mcast/bcast.
- */
- if (dev->priv_flags & IFF_SLAVE_INACTIVE) {
- if (dev->master->priv_flags & IFF_MASTER_ALB) {
- if (skb->pkt_type != PACKET_BROADCAST &&
- skb->pkt_type != PACKET_MULTICAST)
- goto keep;
- }
-
- if (dev->master->priv_flags & IFF_MASTER_8023AD &&
- skb->protocol == __constant_htons(ETH_P_SLOW))
- goto keep;
-
+ if (skb_bond_should_drop(skb)) {
kfree_skb(skb);
return NULL;
}
-keep:
skb->dev = dev->master;
}