* [patch net 0/2] mlxsw: couple of fixes
@ 2016-08-24 9:18 Jiri Pirko
2016-08-24 9:18 ` [patch net 1/2] mlxsw: spectrum: Add missing flood to router port Jiri Pirko
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jiri Pirko @ 2016-08-24 9:18 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, eladr, yotamg, nogahf, ogerlitz
From: Jiri Pirko <jiri@mellanox.com>
Ido Schimmel (1):
mlxsw: spectrum: Add missing flood to router port
Yotam Gigi (1):
mlxsw: router: Enable neighbors to be created on stacked devices
drivers/net/ethernet/mellanox/mlxsw/port.h | 1 +
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 43 +++++++++++++++++++++-
.../net/ethernet/mellanox/mlxsw/spectrum_router.c | 2 +-
3 files changed, 44 insertions(+), 2 deletions(-)
--
2.5.5
^ permalink raw reply [flat|nested] 4+ messages in thread
* [patch net 1/2] mlxsw: spectrum: Add missing flood to router port
2016-08-24 9:18 [patch net 0/2] mlxsw: couple of fixes Jiri Pirko
@ 2016-08-24 9:18 ` Jiri Pirko
2016-08-24 9:18 ` [patch net 2/2] mlxsw: router: Enable neighbors to be created on stacked devices Jiri Pirko
2016-08-24 16:39 ` [patch net 0/2] mlxsw: couple of fixes David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Jiri Pirko @ 2016-08-24 9:18 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, eladr, yotamg, nogahf, ogerlitz
From: Ido Schimmel <idosch@mellanox.com>
In case we have a layer 3 interface on top of a bridge (VLAN / FID RIF),
then we should flood the following packet types to the router:
* Broadcast: If DIP is the broadcast address of the interface, then we
need to be able to get it to CPU by trapping it following route lookup.
* Reserved IP multicast (224.0.0.X): Some control packets (e.g. OSPF)
use this range and are trapped in the router block.
Fixes: 99f44bb3527b ("mlxsw: spectrum: Enable L3 interfaces on top of bridge devices")
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/mellanox/mlxsw/port.h | 1 +
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 43 +++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/port.h b/drivers/net/ethernet/mellanox/mlxsw/port.h
index f33b997..af371a8 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/port.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/port.h
@@ -56,6 +56,7 @@
#define MLXSW_PORT_PHY_BITS_MASK (MLXSW_PORT_MAX_PHY_PORTS - 1)
#define MLXSW_PORT_CPU_PORT 0x0
+#define MLXSW_PORT_ROUTER_PORT (MLXSW_PORT_MAX_PHY_PORTS + 2)
#define MLXSW_PORT_DONT_CARE (MLXSW_PORT_MAX_PORTS)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 1f81689..7291f2c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -3324,6 +3324,39 @@ static struct mlxsw_sp_fid *mlxsw_sp_bridge_fid_get(struct mlxsw_sp *mlxsw_sp,
return mlxsw_sp_fid_find(mlxsw_sp, fid);
}
+static enum mlxsw_flood_table_type mlxsw_sp_flood_table_type_get(u16 fid)
+{
+ return mlxsw_sp_fid_is_vfid(fid) ? MLXSW_REG_SFGC_TABLE_TYPE_FID :
+ MLXSW_REG_SFGC_TABLE_TYPE_FID_OFFEST;
+}
+
+static u16 mlxsw_sp_flood_table_index_get(u16 fid)
+{
+ return mlxsw_sp_fid_is_vfid(fid) ? mlxsw_sp_fid_to_vfid(fid) : fid;
+}
+
+static int mlxsw_sp_router_port_flood_set(struct mlxsw_sp *mlxsw_sp, u16 fid,
+ bool set)
+{
+ enum mlxsw_flood_table_type table_type;
+ char *sftr_pl;
+ u16 index;
+ int err;
+
+ sftr_pl = kmalloc(MLXSW_REG_SFTR_LEN, GFP_KERNEL);
+ if (!sftr_pl)
+ return -ENOMEM;
+
+ table_type = mlxsw_sp_flood_table_type_get(fid);
+ index = mlxsw_sp_flood_table_index_get(fid);
+ mlxsw_reg_sftr_pack(sftr_pl, MLXSW_SP_FLOOD_TABLE_BM, index, table_type,
+ 1, MLXSW_PORT_ROUTER_PORT, set);
+ err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sftr), sftr_pl);
+
+ kfree(sftr_pl);
+ return err;
+}
+
static enum mlxsw_reg_ritr_if_type mlxsw_sp_rif_type_get(u16 fid)
{
if (mlxsw_sp_fid_is_vfid(fid))
@@ -3360,10 +3393,14 @@ static int mlxsw_sp_rif_bridge_create(struct mlxsw_sp *mlxsw_sp,
if (rif == MLXSW_SP_RIF_MAX)
return -ERANGE;
- err = mlxsw_sp_rif_bridge_op(mlxsw_sp, l3_dev, f->fid, rif, true);
+ err = mlxsw_sp_router_port_flood_set(mlxsw_sp, f->fid, true);
if (err)
return err;
+ err = mlxsw_sp_rif_bridge_op(mlxsw_sp, l3_dev, f->fid, rif, true);
+ if (err)
+ goto err_rif_bridge_op;
+
err = mlxsw_sp_rif_fdb_op(mlxsw_sp, l3_dev->dev_addr, f->fid, true);
if (err)
goto err_rif_fdb_op;
@@ -3385,6 +3422,8 @@ err_rif_alloc:
mlxsw_sp_rif_fdb_op(mlxsw_sp, l3_dev->dev_addr, f->fid, false);
err_rif_fdb_op:
mlxsw_sp_rif_bridge_op(mlxsw_sp, l3_dev, f->fid, rif, false);
+err_rif_bridge_op:
+ mlxsw_sp_router_port_flood_set(mlxsw_sp, f->fid, false);
return err;
}
@@ -3404,6 +3443,8 @@ void mlxsw_sp_rif_bridge_destroy(struct mlxsw_sp *mlxsw_sp,
mlxsw_sp_rif_bridge_op(mlxsw_sp, l3_dev, f->fid, rif, false);
+ mlxsw_sp_router_port_flood_set(mlxsw_sp, f->fid, false);
+
netdev_dbg(l3_dev, "RIF=%d destroyed\n", rif);
}
--
2.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [patch net 2/2] mlxsw: router: Enable neighbors to be created on stacked devices
2016-08-24 9:18 [patch net 0/2] mlxsw: couple of fixes Jiri Pirko
2016-08-24 9:18 ` [patch net 1/2] mlxsw: spectrum: Add missing flood to router port Jiri Pirko
@ 2016-08-24 9:18 ` Jiri Pirko
2016-08-24 16:39 ` [patch net 0/2] mlxsw: couple of fixes David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Jiri Pirko @ 2016-08-24 9:18 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, eladr, yotamg, nogahf, ogerlitz
From: Yotam Gigi <yotamg@mellanox.com>
Make the function mlxsw_router_neigh_construct search the rif according
to the neighbour dev other than the dev that was passed to the ndo, thus
allowing creating neigbhours upon stacked devices.
Fixes: 6cf3c971dc84 ("mlxsw: spectrum_router: Add private neigh table")
Signed-off-by: Yotam Gigi <yotamg@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index 90bb93b..917ddd1 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -657,7 +657,7 @@ int mlxsw_sp_router_neigh_construct(struct net_device *dev,
return 0;
}
- r = mlxsw_sp_rif_find_by_dev(mlxsw_sp, dev);
+ r = mlxsw_sp_rif_find_by_dev(mlxsw_sp, n->dev);
if (WARN_ON(!r))
return -EINVAL;
--
2.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [patch net 0/2] mlxsw: couple of fixes
2016-08-24 9:18 [patch net 0/2] mlxsw: couple of fixes Jiri Pirko
2016-08-24 9:18 ` [patch net 1/2] mlxsw: spectrum: Add missing flood to router port Jiri Pirko
2016-08-24 9:18 ` [patch net 2/2] mlxsw: router: Enable neighbors to be created on stacked devices Jiri Pirko
@ 2016-08-24 16:39 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2016-08-24 16:39 UTC (permalink / raw)
To: jiri; +Cc: netdev, idosch, eladr, yotamg, nogahf, ogerlitz
From: Jiri Pirko <jiri@resnulli.us>
Date: Wed, 24 Aug 2016 11:18:50 +0200
> Ido Schimmel (1):
> mlxsw: spectrum: Add missing flood to router port
>
> Yotam Gigi (1):
> mlxsw: router: Enable neighbors to be created on stacked devices
Both applied, thanks Jiri.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-08-24 16:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-24 9:18 [patch net 0/2] mlxsw: couple of fixes Jiri Pirko
2016-08-24 9:18 ` [patch net 1/2] mlxsw: spectrum: Add missing flood to router port Jiri Pirko
2016-08-24 9:18 ` [patch net 2/2] mlxsw: router: Enable neighbors to be created on stacked devices Jiri Pirko
2016-08-24 16:39 ` [patch net 0/2] mlxsw: couple of fixes David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).