diff options
author | Patrick McHardy <kaber@trash.net> | 2013-04-18 22:04:28 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-19 14:45:27 -0400 |
commit | 80d5c3689b886308247da295a228a54df49a44f6 (patch) | |
tree | ce7b1e6898c3f9fea945e67fd06b125dfcc61fe7 /net/bridge | |
parent | f646968f8f7c624587de729115d802372b9063dd (diff) |
net: vlan: prepare for 802.1ad VLAN filtering offload
Change the rx_{add,kill}_vid callbacks to take a protocol argument in
preparation of 802.1ad support. The protocol argument used so far is
always htons(ETH_P_8021Q).
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_vlan.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 0b3dbbec80d0..c3076e2c4294 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c | |||
@@ -34,6 +34,7 @@ static void __vlan_add_flags(struct net_port_vlans *v, u16 vid, u16 flags) | |||
34 | 34 | ||
35 | static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) | 35 | static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) |
36 | { | 36 | { |
37 | const struct net_device_ops *ops; | ||
37 | struct net_bridge_port *p = NULL; | 38 | struct net_bridge_port *p = NULL; |
38 | struct net_bridge *br; | 39 | struct net_bridge *br; |
39 | struct net_device *dev; | 40 | struct net_device *dev; |
@@ -53,6 +54,7 @@ static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) | |||
53 | br = v->parent.br; | 54 | br = v->parent.br; |
54 | dev = br->dev; | 55 | dev = br->dev; |
55 | } | 56 | } |
57 | ops = dev->netdev_ops; | ||
56 | 58 | ||
57 | if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) { | 59 | if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) { |
58 | /* Add VLAN to the device filter if it is supported. | 60 | /* Add VLAN to the device filter if it is supported. |
@@ -61,7 +63,8 @@ static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) | |||
61 | * that ever changes this code will allow tagged | 63 | * that ever changes this code will allow tagged |
62 | * traffic to enter the bridge. | 64 | * traffic to enter the bridge. |
63 | */ | 65 | */ |
64 | err = dev->netdev_ops->ndo_vlan_rx_add_vid(dev, vid); | 66 | err = ops->ndo_vlan_rx_add_vid(dev, htons(ETH_P_8021Q), |
67 | vid); | ||
65 | if (err) | 68 | if (err) |
66 | return err; | 69 | return err; |
67 | } | 70 | } |
@@ -83,7 +86,7 @@ static int __vlan_add(struct net_port_vlans *v, u16 vid, u16 flags) | |||
83 | 86 | ||
84 | out_filt: | 87 | out_filt: |
85 | if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) | 88 | if (p && (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) |
86 | dev->netdev_ops->ndo_vlan_rx_kill_vid(dev, vid); | 89 | ops->ndo_vlan_rx_kill_vid(dev, htons(ETH_P_8021Q), vid); |
87 | return err; | 90 | return err; |
88 | } | 91 | } |
89 | 92 | ||
@@ -97,9 +100,10 @@ static int __vlan_del(struct net_port_vlans *v, u16 vid) | |||
97 | 100 | ||
98 | if (v->port_idx && vid) { | 101 | if (v->port_idx && vid) { |
99 | struct net_device *dev = v->parent.port->dev; | 102 | struct net_device *dev = v->parent.port->dev; |
103 | const struct net_device_ops *ops = dev->netdev_ops; | ||
100 | 104 | ||
101 | if (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER) | 105 | if (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER) |
102 | dev->netdev_ops->ndo_vlan_rx_kill_vid(dev, vid); | 106 | ops->ndo_vlan_rx_kill_vid(dev, htons(ETH_P_8021Q), vid); |
103 | } | 107 | } |
104 | 108 | ||
105 | clear_bit(vid, v->vlan_bitmap); | 109 | clear_bit(vid, v->vlan_bitmap); |