aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4/port.c
diff options
context:
space:
mode:
authorEli Cohen <eli@dev.mellanox.co.il>2010-08-26 10:19:22 -0400
committerRoland Dreier <rolandd@cisco.com>2010-10-25 13:20:39 -0400
commit4c3eb3ca13966508bcb64f39dcdef48be22f1731 (patch)
tree67fde746d256e38421c682501974868971507680 /drivers/net/mlx4/port.c
parentaf7bd463761c6abd8ca8d831f9cc0ac19f3b7d4b (diff)
IB/mlx4: Add VLAN support for IBoE
This patch allows IBoE traffic to be encapsulated in 802.1Q tagged VLAN frames. The VLAN tag is encoded in the GID and derived from it by a simple computation. The netdev notifier callback is modified to catch VLAN device addition/removal and the port's GID table is updated to reflect the change, so that for each netdevice there is an entry in the GID table. When the port's GID table is exhausted, GID entries will not be added. Only children of the main interfaces can add to the GID table; if a VLAN interface is added on another VLAN interface (e.g. "vconfig add eth2.6 8"), then that interfaces will not add an entry to the GID table. Signed-off-by: Eli Cohen <eli@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/net/mlx4/port.c')
-rw-r--r--drivers/net/mlx4/port.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/mlx4/port.c b/drivers/net/mlx4/port.c
index 606aa58afdea..56371ef328ef 100644
--- a/drivers/net/mlx4/port.c
+++ b/drivers/net/mlx4/port.c
@@ -182,6 +182,25 @@ static int mlx4_set_port_vlan_table(struct mlx4_dev *dev, u8 port,
182 return err; 182 return err;
183} 183}
184 184
185int mlx4_find_cached_vlan(struct mlx4_dev *dev, u8 port, u16 vid, int *idx)
186{
187 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table;
188 int i;
189
190 for (i = 0; i < MLX4_MAX_VLAN_NUM; ++i) {
191 if (table->refs[i] &&
192 (vid == (MLX4_VLAN_MASK &
193 be32_to_cpu(table->entries[i])))) {
194 /* VLAN already registered, increase reference count */
195 *idx = i;
196 return 0;
197 }
198 }
199
200 return -ENOENT;
201}
202EXPORT_SYMBOL_GPL(mlx4_find_cached_vlan);
203
185int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index) 204int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index)
186{ 205{
187 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table; 206 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table;