mirror of https://gitee.com/openkylin/linux.git
mlxsw: spectrum_router: Extract mlxsw_sp_fi_is_gateway()
For IPv4 IP-in-IP offload, routes that direct traffic to IP-in-IP devices need to be considered gateway routes as well. That involves a bit more logic, so extract the current test to a separate function, where the logic can be later added. Signed-off-by: Petr Machata <petrm@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6ddb7426a7
commit
9b01451ad5
|
@ -2382,6 +2382,12 @@ static void mlxsw_sp_nexthop_rif_gone_sync(struct mlxsw_sp *mlxsw_sp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool mlxsw_sp_fi_is_gateway(const struct mlxsw_sp *mlxsw_sp,
|
||||||
|
const struct fib_info *fi)
|
||||||
|
{
|
||||||
|
return fi->fib_nh->nh_scope == RT_SCOPE_LINK;
|
||||||
|
}
|
||||||
|
|
||||||
static struct mlxsw_sp_nexthop_group *
|
static struct mlxsw_sp_nexthop_group *
|
||||||
mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi)
|
mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi)
|
||||||
{
|
{
|
||||||
|
@ -2401,7 +2407,7 @@ mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi)
|
||||||
INIT_LIST_HEAD(&nh_grp->fib_list);
|
INIT_LIST_HEAD(&nh_grp->fib_list);
|
||||||
nh_grp->neigh_tbl = &arp_tbl;
|
nh_grp->neigh_tbl = &arp_tbl;
|
||||||
|
|
||||||
nh_grp->gateway = fi->fib_nh->nh_scope == RT_SCOPE_LINK;
|
nh_grp->gateway = mlxsw_sp_fi_is_gateway(mlxsw_sp, fi);
|
||||||
nh_grp->count = fi->fib_nhs;
|
nh_grp->count = fi->fib_nhs;
|
||||||
fib_info_hold(fi);
|
fib_info_hold(fi);
|
||||||
for (i = 0; i < nh_grp->count; i++) {
|
for (i = 0; i < nh_grp->count; i++) {
|
||||||
|
@ -2801,10 +2807,10 @@ mlxsw_sp_fib4_entry_type_set(struct mlxsw_sp *mlxsw_sp,
|
||||||
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
|
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
|
||||||
return 0;
|
return 0;
|
||||||
case RTN_UNICAST:
|
case RTN_UNICAST:
|
||||||
if (fi->fib_nh->nh_scope != RT_SCOPE_LINK)
|
if (mlxsw_sp_fi_is_gateway(mlxsw_sp, fi))
|
||||||
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
|
|
||||||
else
|
|
||||||
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_REMOTE;
|
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_REMOTE;
|
||||||
|
else
|
||||||
|
fib_entry->type = MLXSW_SP_FIB_ENTRY_TYPE_LOCAL;
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Reference in New Issue