diff options
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 3f0071cfe56b..6a42a1453afa 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -2615,6 +2615,17 @@ static int bond_arp_rcv(struct sk_buff *skb, struct net_device *dev, struct pack | |||
2615 | unsigned char *arp_ptr; | 2615 | unsigned char *arp_ptr; |
2616 | __be32 sip, tip; | 2616 | __be32 sip, tip; |
2617 | 2617 | ||
2618 | if (dev->priv_flags & IFF_802_1Q_VLAN) { | ||
2619 | /* | ||
2620 | * When using VLANS and bonding, dev and oriv_dev may be | ||
2621 | * incorrect if the physical interface supports VLAN | ||
2622 | * acceleration. With this change ARP validation now | ||
2623 | * works for hosts only reachable on the VLAN interface. | ||
2624 | */ | ||
2625 | dev = vlan_dev_real_dev(dev); | ||
2626 | orig_dev = dev_get_by_index_rcu(dev_net(skb->dev),skb->skb_iif); | ||
2627 | } | ||
2628 | |||
2618 | if (!(dev->priv_flags & IFF_BONDING) || !(dev->flags & IFF_MASTER)) | 2629 | if (!(dev->priv_flags & IFF_BONDING) || !(dev->flags & IFF_MASTER)) |
2619 | goto out; | 2630 | goto out; |
2620 | 2631 | ||