diff options
author | Patrick McHardy <kaber@trash.net> | 2013-04-18 22:04:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-19 14:45:27 -0400 |
commit | 1fd9b1fc310314911f66d2f14a8e4f0ef37bf47b (patch) | |
tree | 20422146c46fb38a5cdd0d14e671a0793c3389b4 /drivers | |
parent | 80d5c3689b886308247da295a228a54df49a44f6 (diff) |
net: vlan: prepare for 802.1ad support
Make the encapsulation protocol value a property of VLAN devices and change
the device lookup functions to take the protocol value into account.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 2 |
3 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 35e89e12a1f7..1e79a7643f08 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -782,7 +782,7 @@ static void bond_resend_igmp_join_requests(struct bonding *bond) | |||
782 | 782 | ||
783 | /* rejoin all groups on vlan devices */ | 783 | /* rejoin all groups on vlan devices */ |
784 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { | 784 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { |
785 | vlan_dev = __vlan_find_dev_deep(bond_dev, | 785 | vlan_dev = __vlan_find_dev_deep(bond_dev, htons(ETH_P_8021Q), |
786 | vlan->vlan_id); | 786 | vlan->vlan_id); |
787 | if (vlan_dev) | 787 | if (vlan_dev) |
788 | __bond_resend_igmp_join_requests(vlan_dev); | 788 | __bond_resend_igmp_join_requests(vlan_dev); |
@@ -2512,7 +2512,8 @@ static int bond_has_this_ip(struct bonding *bond, __be32 ip) | |||
2512 | 2512 | ||
2513 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { | 2513 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { |
2514 | rcu_read_lock(); | 2514 | rcu_read_lock(); |
2515 | vlan_dev = __vlan_find_dev_deep(bond->dev, vlan->vlan_id); | 2515 | vlan_dev = __vlan_find_dev_deep(bond->dev, htons(ETH_P_8021Q), |
2516 | vlan->vlan_id); | ||
2516 | rcu_read_unlock(); | 2517 | rcu_read_unlock(); |
2517 | if (vlan_dev && ip == bond_confirm_addr(vlan_dev, 0, ip)) | 2518 | if (vlan_dev && ip == bond_confirm_addr(vlan_dev, 0, ip)) |
2518 | return 1; | 2519 | return 1; |
@@ -2541,7 +2542,7 @@ static void bond_arp_send(struct net_device *slave_dev, int arp_op, __be32 dest_ | |||
2541 | return; | 2542 | return; |
2542 | } | 2543 | } |
2543 | if (vlan_id) { | 2544 | if (vlan_id) { |
2544 | skb = vlan_put_tag(skb, vlan_id); | 2545 | skb = vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_id); |
2545 | if (!skb) { | 2546 | if (!skb) { |
2546 | pr_err("failed to insert VLAN tag\n"); | 2547 | pr_err("failed to insert VLAN tag\n"); |
2547 | return; | 2548 | return; |
@@ -2603,6 +2604,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave) | |||
2603 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { | 2604 | list_for_each_entry(vlan, &bond->vlan_list, vlan_list) { |
2604 | rcu_read_lock(); | 2605 | rcu_read_lock(); |
2605 | vlan_dev = __vlan_find_dev_deep(bond->dev, | 2606 | vlan_dev = __vlan_find_dev_deep(bond->dev, |
2607 | htons(ETH_P_8021Q), | ||
2606 | vlan->vlan_id); | 2608 | vlan->vlan_id); |
2607 | rcu_read_unlock(); | 2609 | rcu_read_unlock(); |
2608 | if (vlan_dev == rt->dst.dev) { | 2610 | if (vlan_dev == rt->dst.dev) { |
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c index 4232767862b5..0c96e5fe99cc 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c | |||
@@ -185,7 +185,7 @@ static struct net_device *get_iff_from_mac(struct adapter *adapter, | |||
185 | if (!memcmp(dev->dev_addr, mac, ETH_ALEN)) { | 185 | if (!memcmp(dev->dev_addr, mac, ETH_ALEN)) { |
186 | rcu_read_lock(); | 186 | rcu_read_lock(); |
187 | if (vlan && vlan != VLAN_VID_MASK) { | 187 | if (vlan && vlan != VLAN_VID_MASK) { |
188 | dev = __vlan_find_dev_deep(dev, vlan); | 188 | dev = __vlan_find_dev_deep(dev, htons(ETH_P_8021Q), vlan); |
189 | } else if (netif_is_bond_slave(dev)) { | 189 | } else if (netif_is_bond_slave(dev)) { |
190 | struct net_device *upper_dev; | 190 | struct net_device *upper_dev; |
191 | 191 | ||
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index e88e01312c67..d132765f92af 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -3346,7 +3346,7 @@ void qlcnic_restore_indev_addr(struct net_device *netdev, unsigned long event) | |||
3346 | 3346 | ||
3347 | rcu_read_lock(); | 3347 | rcu_read_lock(); |
3348 | for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) { | 3348 | for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) { |
3349 | dev = __vlan_find_dev_deep(netdev, vid); | 3349 | dev = __vlan_find_dev_deep(netdev, htons(ETH_P_8021Q), vid); |
3350 | if (!dev) | 3350 | if (!dev) |
3351 | continue; | 3351 | continue; |
3352 | qlcnic_config_indev_addr(adapter, dev, event); | 3352 | qlcnic_config_indev_addr(adapter, dev, event); |