ipv4: Convert several tos fields to dscp_t
Subsystems (6)
cover ipv4: Convert several tos fields to dscp_t
Continue the work started with commit a410a0cf9885 ("ipv6: Define dscp_t and stop taking ECN bits into account in fib6-rules") and convert more structure fields and variables to dscp_t. This series focuses on struct fib_rt_info, struct fib_entry_notifier_info and their users (networking drivers).
The purpose of dscp_t is to ensure that ECN bits don't influence IP route lookups. It does so by ensuring that dscp_t variables have the ECN bits cleared.
Notes:
* This series is entirely about type annotation and isn't supposed
to have any user visible effect.
* The first two patches have to introduce a few dsfield <-> dscp
conversions in the affected drivers, but those are then removed when converting the internal driver structures (patches 3-5). In the end, drivers don't have to handle any conversion.
Guillaume Nault (5):
ipv4: Use dscp_t in struct fib_rt_info
ipv4: Use dscp_t in struct fib_entry_notifier_info
netdevsim: Use dscp_t in struct nsim_fib4_rt
mlxsw: Use dscp_t in struct mlxsw_sp_fib4_entry
net: marvell: prestera: Use dscp_t in struct prestera_kern_fib_cache
.../ethernet/marvell/prestera/prestera_router.c | 11 ++++++----- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 15 ++++++++------- drivers/net/netdevsim/fib.c | 9 +++++---- include/net/ip_fib.h | 4 ++-- net/ipv4/fib_semantics.c | 4 ++-- net/ipv4/fib_trie.c | 10 +++++----- net/ipv4/route.c | 4 ++-- 7 files changed, 30 insertions(+), 27 deletions(-)
Signature · 1 line
2.21.3
PATCH 1/5 ipv4: Use dscp_t in struct fib_rt_info
Use the new dscp_t type to replace the tos field of struct fib_rt_info. This ensures ECN bits are ignored and makes it compatible with the fa_dscp field of struct fib_alias.
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 3 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 7 ++++--- drivers/net/netdevsim/fib.c | 5 +++-- include/net/ip_fib.h | 2 +- net/ipv4/fib_semantics.c | 4 ++-- net/ipv4/fib_trie.c | 6 +++--- net/ipv4/route.c | 4 ++-- 7 files changed, 17 insertions(+), 14 deletions(-)
drivers/net/ethernet/marvell/prestera/prestera_router.c +2 -1
@@ -4,6 +4,7 @@#include <linux/kernel.h> #include <linux/types.h> #include <linux/inetdevice.h> +#include <net/inet_dscp.h> #include <net/switchdev.h> #include <linux/rhashtable.h>
@@ -132,7 +133,7 @@ __prestera_k_arb_fib_lpm_offload_set(struct prestera_switch *sw, fri.tb_id = fc->key.kern_tb_id; fri.dst = fc->key.addr.u.ipv4; fri.dst_len = fc->key.prefix_len; - fri.tos = fc->kern_tos; + fri.dscp =inet_dsfield_to_dscp (fc->kern_tos); fri.type = fc->kern_type;/* flags begin */ fri.offload = offload;
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +4 -3
@@ -21,6 +21,7 @@#include <net/netevent.h> #include <net/neighbour.h> #include <net/arp.h> +#include <net/inet_dscp.h> #include <net/ip_fib.h> #include <net/ip6_fib.h> #include <net/nexthop.h>
@@ -5620,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.tos = fen_info->tos; + fri.dscp =inet_dsfield_to_dscp (fen_info->tos); fri.type = fen_info->type; fri.offload = false; fri.trap = false;
@@ -5645,7 +5646,7 @@ mlxsw_sp_fib4_entry_hw_flags_set(struct mlxsw_sp *mlxsw_sp, fri.tb_id = fib4_entry->tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.tos = fib4_entry->tos; + fri.dscp =inet_dsfield_to_dscp (fib4_entry->tos); fri.type = fib4_entry->type; fri.offload = should_offload; fri.trap = !should_offload;
@@ -5668,7 +5669,7 @@ mlxsw_sp_fib4_entry_hw_flags_clear(struct mlxsw_sp *mlxsw_sp, fri.tb_id = fib4_entry->tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.tos = fib4_entry->tos; + fri.dscp =inet_dsfield_to_dscp (fib4_entry->tos); fri.type = fib4_entry->type; fri.offload = false; fri.trap = false;
drivers/net/netdevsim/fib.c +3 -2
@@ -22,6 +22,7 @@#include <linux/spinlock_types.h> #include <linux/types.h> #include <net/fib_notifier.h> +#include <net/inet_dscp.h> #include <net/ip_fib.h> #include <net/ip6_fib.h> #include <net/fib_rules.h>
@@ -322,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.tos = fen_info->tos; + fri.dscp =inet_dsfield_to_dscp (fen_info->tos); fri.type = fen_info->type; fri.offload = false; fri.trap = false;
@@ -342,7 +343,7 @@ static void nsim_fib4_rt_hw_flags_set(struct net *net, fri.tb_id = fib4_rt->common.key.tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.tos = fib4_rt->tos; + fri.dscp =inet_dsfield_to_dscp (fib4_rt->tos); fri.type = fib4_rt->type; fri.offload = false; fri.trap = trap;
include/net/ip_fib.h +1 -1
@@ -212,7 +212,7 @@ struct fib_rt_info {u32 tb_id;__be32 dst;int dst_len; -u8 tos; +dscp_t dscp;u8 type; u8 offload:1, trap:1,
net/ipv4/fib_semantics.c +2 -2
@@ -524,7 +524,7 @@ void rtmsg_fib(int event, __be32 key, struct fib_alias *fa, fri.tb_id = tb_id; fri.dst = key; fri.dst_len = dst_len; - fri.tos =inet_dscp_to_dsfield (fa->fa_dscp); + fri.dscp = fa->fa_dscp; fri.type = fa->fa_type; fri.offload =READ_ONCE (fa->offload); fri.trap =READ_ONCE (fa->trap);
@@ -1781,7 +1781,7 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event, rtm->rtm_family =AF_INET ; rtm->rtm_dst_len = fri->dst_len; rtm->rtm_src_len =0 ; - rtm->rtm_tos = fri->tos; + rtm->rtm_tos =inet_dscp_to_dsfield (fri->dscp);if (tb_id <256 ) rtm->rtm_table = tb_id;else
net/ipv4/fib_trie.c +3 -3
@@ -1032,8 +1032,8 @@ fib_find_matching_alias(struct net *net, const struct fib_rt_info *fri)hlist_for_each_entry_rcu (fa, &l->leaf, fa_list) {if (fa->fa_slen == slen && fa->tb_id == fri->tb_id && - fa->fa_dscp ==inet_dsfield_to_dscp (fri->tos) && - fa->fa_info == fri->fi && fa->fa_type == fri->type) + fa->fa_dscp == fri->dscp && fa->fa_info == fri->fi && + fa->fa_type == fri->type)return fa; }
@@ -2305,7 +2305,7 @@ static int fn_trie_dump_leaf(struct key_vector *l, struct fib_table *tb, fri.tb_id = tb->tb_id; fri.dst = xkey; fri.dst_len =KEYLENGTH - fa->fa_slen; - fri.tos =inet_dscp_to_dsfield (fa->fa_dscp); + fri.dscp = fa->fa_dscp; fri.type = fa->fa_type; fri.offload =READ_ONCE (fa->offload); fri.trap =READ_ONCE (fa->trap);
net/ipv4/route.c +2 -2
@@ -3394,7 +3394,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, fri.tb_id = table_id; fri.dst = res.prefix; fri.dst_len = res.prefixlen; - fri.tos = fl4.flowi4_tos; + fri.dscp =inet_dsfield_to_dscp (fl4.flowi4_tos); fri.type = rt->rt_type; fri.offload =0 ; fri.trap =0 ;
@@ -3407,7 +3407,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,if (fa->fa_slen == slen && fa->tb_id == fri.tb_id && - fa->fa_dscp ==inet_dsfield_to_dscp (fri.tos) && + fa->fa_dscp == fri.dscp && fa->fa_info == res.fi && fa->fa_type == fri.type) { fri.offload =READ_ONCE (fa->offload);
Signature · 1 line
2.21.3
Re: [PATCH net-next 1/5] ipv4: Use dscp_t in struct fib_rt_info
Quoted 8 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structfib_rt_info. This ensures ECN bits are ignored and makes it compatible with thefa_dscpfield of structfib_alias.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
Re: [PATCH net-next 1/5] ipv4: Use dscp_t in struct fib_rt_info
In reply to Guillaume NaultQuoted 8 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structfib_rt_info. This ensures ECN bits are ignored and makes it compatible with thefa_dscpfield of structfib_alias.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
Quoted 10 lines
--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 3 ++- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 7 ++++--- drivers/net/netdevsim/fib.c | 5 +++-- include/net/ip_fib.h | 2 +- net/ipv4/fib_semantics.c | 4 ++-- net/ipv4/fib_trie.c | 6 +++--- net/ipv4/route.c | 4 ++-- 7 files changed, 17 insertions(+), 14 deletions(-)
PATCH 2/5 ipv4: Use dscp_t in struct fib_entry_notifier_info
In reply to Guillaume NaultUse 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.
--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 +++--- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 6 +++--- drivers/net/netdevsim/fib.c | 4 ++-- include/net/ip_fib.h | 2 +- net/ipv4/fib_trie.c | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-)
drivers/net/ethernet/marvell/prestera/prestera_router.c +3 -3
@@ -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" );
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +3 -3
@@ -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;
drivers/net/netdevsim/fib.c +2 -2
@@ -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;
include/net/ip_fib.h +1 -1
@@ -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; };
net/ipv4/fib_trie.c +2 -2
@@ -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, };
Signature · 1 line
2.21.3
Re: [PATCH net-next 2/5] ipv4: Use dscp_t in struct fib_entry_notifier_info
Quoted 8 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structfib_entry_notifier_info. This ensures ECN bits are ignored and makes it compatible with the dscp field of structfib_rt_info.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
Re: [PATCH net-next 2/5] ipv4: Use dscp_t in struct fib_entry_notifier_info
In reply to Guillaume NaultQuoted 7 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structfib_entry_notifier_info. This ensures ECN bits are ignored and makes it compatible with the dscp field of structfib_rt_info.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Quoted 9 lines
Signed-off-by Guillaume Nault <[email protected]>--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 +++--- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 6 +++--- drivers/net/netdevsim/fib.c | 4 ++-- include/net/ip_fib.h | 2 +- net/ipv4/fib_trie.c | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-)
PATCH 3/5 netdevsim: Use dscp_t in struct nsim_fib4_rt
In reply to Guillaume NaultUse the new dscp_t type to replace the tos field of struct nsim_fib4_rt. This ensures ECN bits are ignored and makes it compatible with the dscp fields of struct fib_entry_notifier_info and struct fib_rt_info.
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
--- drivers/net/netdevsim/fib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/netdevsim/fib.c +3 -3
@@ -79,7 +79,7 @@ struct nsim_fib_rt {struct nsim_fib4_rt {struct nsim_fib_rt common;struct fib_info *fi; -u8 tos; +dscp_t dscp;u8 type; };
@@ -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 =inet_dscp_to_dsfield (fen_info->dscp); + fib4_rt->dscp = fen_info->dscp; fib4_rt->type = fen_info->type;return fib4_rt;
@@ -343,7 +343,7 @@ static void nsim_fib4_rt_hw_flags_set(struct net *net, fri.tb_id = fib4_rt->common.key.tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.dscp =inet_dsfield_to_dscp (fib4_rt->tos); + fri.dscp = fib4_rt->dscp; fri.type = fib4_rt->type; fri.offload = false; fri.trap = trap;
Signature · 1 line
2.21.3
Re: [PATCH net-next 3/5] netdevsim: Use dscp_t in struct nsim_fib4_rt
Quoted 9 lines · On Fri, 8 Apr 2022 22:08:43 +0200 Guillaume Nault wrote:
Use the new
dscp_ttype to replace the tos field of structnsim_fib4_rt. This ensures ECN bits are ignored and makes it compatible with the dscp fields of structfib_entry_notifier_infoand structfib_rt_info.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
Re: [PATCH net-next 3/5] netdevsim: Use dscp_t in struct nsim_fib4_rt
In reply to Guillaume NaultQuoted 9 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structnsim_fib4_rt. This ensures ECN bits are ignored and makes it compatible with the dscp fields of structfib_entry_notifier_infoand structfib_rt_info.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
Re: [PATCH net-next 3/5] netdevsim: Use dscp_t in struct nsim_fib4_rt
In reply to Guillaume NaultQuoted 5 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structnsim_fib4_rt. This ensures ECN bits are ignored and makes it compatible with the dscp fields of structfib_entry_notifier_infoand structfib_rt_info.
Quoted 8 lines
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>--- drivers/net/netdevsim/fib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
PATCH 4/5 mlxsw: Use dscp_t in struct mlxsw_sp_fib4_entry
In reply to Guillaume NaultUse the new dscp_t type to replace the tos field of struct mlxsw_sp_fib4_entry. This ensures ECN bits are ignored and makes it compatible with the dscp fields of fib_entry_notifier_info and fib_rt_info.
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
--- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +6 -6
@@ -508,7 +508,7 @@ struct mlxsw_sp_fib4_entry {struct mlxsw_sp_fib_entry common;struct fib_info *fi;u32 tb_id; -u8 tos; +dscp_t dscp;u8 type; };
@@ -5560,7 +5560,7 @@ mlxsw_sp_fib4_entry_should_offload(const struct mlxsw_sp_fib_entry *fib_entry) fib4_entry = container_of(fib_entry, struct mlxsw_sp_fib4_entry, common); -return !fib4_entry->tos; +return !fib4_entry->dscp; } static bool
@@ -5646,7 +5646,7 @@ mlxsw_sp_fib4_entry_hw_flags_set(struct mlxsw_sp *mlxsw_sp, fri.tb_id = fib4_entry->tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.dscp =inet_dsfield_to_dscp (fib4_entry->tos); + fri.dscp = fib4_entry->dscp; fri.type = fib4_entry->type; fri.offload = should_offload; fri.trap = !should_offload;
@@ -5669,7 +5669,7 @@ mlxsw_sp_fib4_entry_hw_flags_clear(struct mlxsw_sp *mlxsw_sp, fri.tb_id = fib4_entry->tb_id; fri.dst =cpu_to_be32 (*p_dst); fri.dst_len = dst_len; - fri.dscp =inet_dsfield_to_dscp (fib4_entry->tos); + fri.dscp = fib4_entry->dscp; fri.type = fib4_entry->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 =inet_dscp_to_dsfield (fen_info->dscp); + fib4_entry->dscp = 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 ==inet_dscp_to_dsfield (fen_info->dscp) && + fib4_entry->dscp == fen_info->dscp && fib4_entry->type == fen_info->type && fib4_entry->fi == fen_info->fi)return fib4_entry;
Signature · 1 line
2.21.3
Re: [PATCH net-next 4/5] mlxsw: Use dscp_t in struct mlxsw_sp_fib4_entry
Quoted 9 lines · Guillaume Nault
Use the new
dscp_ttype to replace the tos field of structmlxsw_sp_fib4_entry. This ensures ECN bits are ignored and makes it compatible with the dscp fields offib_entry_notifier_infoandfib_rt_info.This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>
PATCH 5/5 net: marvell: prestera: Use dscp_t in struct prestera_kern_fib_cache
In reply to Guillaume NaultUse the new dscp_t type to replace the kern_tos field of struct prestera_kern_fib_cache. This ensures ECN bits are ignored and makes it compatible with the dscp fields of struct fib_entry_notifier_info and struct fib_rt_info.
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/ethernet/marvell/prestera/prestera_router.c +3 -3
@@ -27,7 +27,7 @@ struct prestera_kern_fib_cache {/* Indicate if route is not overlapped by another table */ struct rhash_head ht_node;/* node of prestera_router */ struct fib_info *fi; -u8 kern_tos; +dscp_t kern_dscp;u8 kern_type;bool reachable; };
@@ -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 =inet_dscp_to_dsfield (dscp); + fib_cache->kern_dscp = dscp; fib_cache->kern_type = type; err = rhashtable_insert_fast(&sw->router->kern_fib_cache_ht,
@@ -133,7 +133,7 @@ __prestera_k_arb_fib_lpm_offload_set(struct prestera_switch *sw, fri.tb_id = fc->key.kern_tb_id; fri.dst = fc->key.addr.u.ipv4; fri.dst_len = fc->key.prefix_len; - fri.dscp =inet_dsfield_to_dscp (fc->kern_tos); + fri.dscp = fc->kern_dscp; fri.type = fc->kern_type;/* flags begin */ fri.offload = offload;
Signature · 1 line
2.21.3
Re: [PATCH net-next 5/5] net: marvell: prestera: Use dscp_t in struct prestera_kern_fib_cache
Quoted 5 lines · Guillaume Nault
Use the new
dscp_ttype to replace thekern_tosfield of structprestera_kern_fib_cache. This ensures ECN bits are ignored and makes it compatible with the dscp fields of structfib_entry_notifier_infoand structfib_rt_info.
Quoted 8 lines
This also allows sparse to flag potential incorrect uses of DSCP and ECN bits.
Signed-off-by Guillaume Nault <[email protected]>--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
This series was applied to netdev/net-next.git (master) by Jakub Kicinski <[email protected]>:
Hello:
This series was applied to netdev/net-next.git (master) by Jakub Kicinski <[email protected]>:
Quoted 11 lines · On Fri, 8 Apr 2022 22:08:34 +0200 you wrote:
Continue the work started with commit
a410a0cf9885("ipv6: Definedscp_tand stop taking ECN bits into account in fib6-rules") and convert more structure fields and variables todscp_t. This series focuses on structfib_rt_info, structfib_entry_notifier_infoand their users (networking drivers).The purpose of
dscp_tis to ensure that ECN bits don't influence IP route lookups. It does so by ensuring thatdscp_tvariables have the ECN bits cleared.[...]
Here is the summary with links:
- [net-next,1/5] ipv4: Use dscp_t in struct fib_rt_info
https://git.kernel.org/netdev/net-next/c/888ade8f90d7 - [net-next,2/5] ipv4: Use dscp_t in struct fib_entry_notifier_info https://git.kernel.org/netdev/net-next/c/568a3f33b427 - [net-next,3/5] netdevsim: Use dscp_t in struct nsim_fib4_rt https://git.kernel.org/netdev/net-next/c/20bbf32efe1e - [net-next,4/5] mlxsw: Use dscp_t in struct mlxsw_sp_fib4_entry https://git.kernel.org/netdev/net-next/c/046eabbf1991 - [net-next,5/5] net: marvell: prestera: Use dscp_t in struct prestera_kern_fib_cache https://git.kernel.org/netdev/net-next/c/9f6982e9a3c2
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html