提交 97989ee0 编写于 作者: I Ido Schimmel 提交者: David S. Miller

mlxsw: spectrum_router: Allow more route types to be programmed

Allow 'unreachable', 'blackhole' and 'prohibit' route types to be
programmed into the device by sending any packet hitting them to the
CPU.

This is needed so that users will be able to program a default route
into the VRF's table, thereby preventing lookup from leaking to other
tables.

Audit the code paths to make sure we don't rely on the presence of a
nexthop netdev, as it doesn't exist for above mentioned route types.
Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
Signed-off-by: NJiri Pirko <jiri@mellanox.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 f4a761d2
......@@ -1514,6 +1514,9 @@ static int mlxsw_sp_nexthop_init(struct mlxsw_sp *mlxsw_sp,
if (err)
return err;
if (!dev)
return 0;
in_dev = __in_dev_get_rtnl(dev);
if (in_dev && IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN(in_dev) &&
fib_nh->nh_flags & RTNH_F_LINKDOWN)
......@@ -1877,17 +1880,29 @@ mlxsw_sp_fib4_entry_type_set(struct mlxsw_sp *mlxsw_sp,
{
struct fib_info *fi = fen_info->fi;
if (fen_info->type == RTN_LOCAL || fen_info->type == RTN_BROADCAST) {
switch (fen_info->type) {
case RTN_BROADCAST: /* fall through */
case RTN_LOCAL:
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_TRAP;
return 0;
}
if (fen_info->type != RTN_UNICAST)
return -EINVAL;
if (fi->fib_nh->nh_scope != RT_SCOPE_LINK)
case RTN_UNREACHABLE: /* fall through */
case RTN_BLACKHOLE: /* fall through */
case RTN_PROHIBIT:
/* Packets hitting these routes need to be trapped, but
* can do so with a lower priority than packets directed
* at the host, so use action type local instead of trap.
*/
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
else
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_REMOTE;
return 0;
return 0;
case RTN_UNICAST:
if (fi->fib_nh->nh_scope != RT_SCOPE_LINK)
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
else
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_REMOTE;
return 0;
default:
return -EINVAL;
}
}
static struct mlxsw_sp_fib_entry *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册