aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2013-04-18 22:04:29 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-19 14:45:27 -0400
commit1fd9b1fc310314911f66d2f14a8e4f0ef37bf47b (patch)
tree20422146c46fb38a5cdd0d14e671a0793c3389b4 /drivers
parent80d5c3689b886308247da295a228a54df49a44f6 (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.c8
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c2
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c2
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);