Commit 568a3f33 authored by Guillaume Nault's avatar Guillaume Nault Committed by Jakub Kicinski
Browse files

ipv4: Use dscp_t in struct fib_entry_notifier_info



Use the new dscp_t type to replace the tos field of struct
fib_entry_notifier_info. This ensures ECN bits are ignored and makes it
compatible with the dscp field of struct fib_rt_info.

This also allows sparse to flag potential incorrect uses of DSCP and
ECN bits.

Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 888ade8f
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ prestera_kern_fib_cache_destroy(struct prestera_switch *sw,
static struct prestera_kern_fib_cache *
prestera_kern_fib_cache_create(struct prestera_switch *sw,
			       struct prestera_kern_fib_cache_key *key,
			       struct fib_info *fi, u8 tos, u8 type)
			       struct fib_info *fi, dscp_t dscp, u8 type)
{
	struct prestera_kern_fib_cache *fib_cache;
	int err;
@@ -101,7 +101,7 @@ prestera_kern_fib_cache_create(struct prestera_switch *sw,
	memcpy(&fib_cache->key, key, sizeof(*key));
	fib_info_hold(fi);
	fib_cache->fi = fi;
	fib_cache->kern_tos = tos;
	fib_cache->kern_tos = inet_dscp_to_dsfield(dscp);
	fib_cache->kern_type = type;

	err = rhashtable_insert_fast(&sw->router->kern_fib_cache_ht,
@@ -306,7 +306,7 @@ prestera_k_arb_fib_evt(struct prestera_switch *sw,
	if (replace) {
		fib_cache = prestera_kern_fib_cache_create(sw, &fc_key,
							   fen_info->fi,
							   fen_info->tos,
							   fen_info->dscp,
							   fen_info->type);
		if (!fib_cache) {
			dev_err(sw->dev->dev, "fib_cache == NULL");
+3 −3
Original line number Diff line number Diff line
@@ -5621,7 +5621,7 @@ mlxsw_sp_fib4_offload_failed_flag_set(struct mlxsw_sp *mlxsw_sp,
	fri.tb_id = fen_info->tb_id;
	fri.dst = cpu_to_be32(*p_dst);
	fri.dst_len = fen_info->dst_len;
	fri.dscp = inet_dsfield_to_dscp(fen_info->tos);
	fri.dscp = fen_info->dscp;
	fri.type = fen_info->type;
	fri.offload = false;
	fri.trap = false;
@@ -6251,7 +6251,7 @@ mlxsw_sp_fib4_entry_create(struct mlxsw_sp *mlxsw_sp,
	fib_info_hold(fib4_entry->fi);
	fib4_entry->tb_id = fen_info->tb_id;
	fib4_entry->type = fen_info->type;
	fib4_entry->tos = fen_info->tos;
	fib4_entry->tos = inet_dscp_to_dsfield(fen_info->dscp);

	fib_entry->fib_node = fib_node;

@@ -6305,7 +6305,7 @@ mlxsw_sp_fib4_entry_lookup(struct mlxsw_sp *mlxsw_sp,
	fib4_entry = container_of(fib_node->fib_entry,
				  struct mlxsw_sp_fib4_entry, common);
	if (fib4_entry->tb_id == fen_info->tb_id &&
	    fib4_entry->tos == fen_info->tos &&
	    fib4_entry->tos == inet_dscp_to_dsfield(fen_info->dscp) &&
	    fib4_entry->type == fen_info->type &&
	    fib4_entry->fi == fen_info->fi)
		return fib4_entry;
+2 −2
Original line number Diff line number Diff line
@@ -284,7 +284,7 @@ nsim_fib4_rt_create(struct nsim_fib_data *data,

	fib4_rt->fi = fen_info->fi;
	fib_info_hold(fib4_rt->fi);
	fib4_rt->tos = fen_info->tos;
	fib4_rt->tos = inet_dscp_to_dsfield(fen_info->dscp);
	fib4_rt->type = fen_info->type;

	return fib4_rt;
@@ -323,7 +323,7 @@ nsim_fib4_rt_offload_failed_flag_set(struct net *net,
	fri.tb_id = fen_info->tb_id;
	fri.dst = cpu_to_be32(*p_dst);
	fri.dst_len = fen_info->dst_len;
	fri.dscp = inet_dsfield_to_dscp(fen_info->tos);
	fri.dscp = fen_info->dscp;
	fri.type = fen_info->type;
	fri.offload = false;
	fri.trap = false;
+1 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ struct fib_entry_notifier_info {
	u32 dst;
	int dst_len;
	struct fib_info *fi;
	u8 tos;
	dscp_t dscp;
	u8 type;
	u32 tb_id;
};
+2 −2
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ static int call_fib_entry_notifier(struct notifier_block *nb,
		.dst = dst,
		.dst_len = dst_len,
		.fi = fa->fa_info,
		.tos = inet_dscp_to_dsfield(fa->fa_dscp),
		.dscp = fa->fa_dscp,
		.type = fa->fa_type,
		.tb_id = fa->tb_id,
	};
@@ -99,7 +99,7 @@ static int call_fib_entry_notifiers(struct net *net,
		.dst = dst,
		.dst_len = dst_len,
		.fi = fa->fa_info,
		.tos = inet_dscp_to_dsfield(fa->fa_dscp),
		.dscp = fa->fa_dscp,
		.type = fa->fa_type,
		.tb_id = fa->tb_id,
	};