Messages in this thread | | | Date | Tue, 14 Feb 2023 16:01:41 +0100 | Subject | Re: [PATCH net-next v1 2/3] net/mlx5e: Add helper for encap_info_equal for tunnels with options | From | Alexander Lobakin <> |
| |
From: Gavin Li <gavinl@nvidia.com> Date: Tue, 14 Feb 2023 15:41:36 +0200
(dropping non-existent nikolay@nvidia.com)
> For tunnels with options, eg, geneve and vxlan with gbp, they share the > same way to compare the headers and options. Extract the code as a common > function for them > > Change-Id: I3ea697293c8d5d66c0c20080dbde88f60bcbd62f > Signed-off-by: Gavin Li <gavinl@nvidia.com> > Reviewed-by: Roi Dayan <roid@nvidia.com> > Reviewed-by: Maor Dickman <maord@nvidia.com> > Acked-by: Saeed Mahameed <saeedm@nvidia.com>
[...]
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c > index 780224fd67a1..4df9d27a63ad 100644 > --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c > @@ -571,6 +571,35 @@ bool mlx5e_tc_tun_encap_info_equal_generic(struct mlx5e_encap_key *a, > a->tc_tunnel->tunnel_type == b->tc_tunnel->tunnel_type; > } > > +bool mlx5e_tc_tun_encap_info_equal_options(struct mlx5e_encap_key *a, > + struct mlx5e_encap_key *b, > + __be16 tun_flags) > +{ > + struct ip_tunnel_info *a_info; > + struct ip_tunnel_info *b_info; > + bool a_has_opts, b_has_opts; > + > + if (!mlx5e_tc_tun_encap_info_equal_generic(a, b)) > + return false; > + > + a_has_opts = !!(a->ip_tun_key->tun_flags & tun_flags); > + b_has_opts = !!(b->ip_tun_key->tun_flags & tun_flags); > + > + /* keys are equal when both don't have any options attached */ > + if (!a_has_opts && !b_has_opts) > + return true; > + > + if (a_has_opts != b_has_opts) > + return false; > + > + /* options stored in memory next to ip_tunnel_info struct */ > + a_info = container_of(a->ip_tun_key, struct ip_tunnel_info, key); > + b_info = container_of(b->ip_tun_key, struct ip_tunnel_info, key); > + > + return a_info->options_len == b_info->options_len && > + memcmp(a_info + 1, b_info + 1, a_info->options_len) == 0;
1. memcmp() is not aligned to the first expr (off-by-one to the right). 2. `!expr` is preferred over `expr == 0`.
> +} > + > static int cmp_decap_info(struct mlx5e_decap_key *a, > struct mlx5e_decap_key *b) > { [...]
Thanks, Olek
| |