Commit 4a5d5d73 authored by Eli Britstein's avatar Eli Britstein Committed by Saeed Mahameed
Browse files

net/mlx5e: Helper function to set ethertype



Set ethertype match in a helper function as a pre-step towards
optimizing it.

Signed-off-by: default avatarEli Britstein <elibr@mellanox.com>
Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 810cbb25
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -134,10 +134,7 @@ mlx5_tc_ct_set_tuple_match(struct mlx5_flow_spec *spec,

		flow_rule_match_basic(rule, &match);

		MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
			 ntohs(match.mask->n_proto));
		MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
			 ntohs(match.key->n_proto));
		mlx5e_tc_set_ethertype(headers_c, headers_v, &match);
		MLX5_SET(fte_match_set_lyr_2_4, headers_c, ip_protocol,
			 match.mask->ip_proto);
		MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
+13 −8
Original line number Diff line number Diff line
@@ -512,6 +512,13 @@ int mlx5e_tc_tun_parse(struct net_device *filter_dev,
	}

	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ENC_CONTROL)) {
		struct flow_dissector_key_basic key_basic = {};
		struct flow_dissector_key_basic mask_basic = {
			.n_proto = htons(0xFFFF),
		};
		struct flow_match_basic match_basic = {
			.key = &key_basic, .mask = &mask_basic,
		};
		struct flow_match_control match;
		u16 addr_type;

@@ -537,10 +544,9 @@ int mlx5e_tc_tun_parse(struct net_device *filter_dev,
				 dst_ipv4_dst_ipv6.ipv4_layout.ipv4,
				 ntohl(match.key->dst));

			MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c,
					 ethertype);
			MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
				 ETH_P_IP);
			key_basic.n_proto = htons(ETH_P_IP);
			mlx5e_tc_set_ethertype(headers_c, headers_v,
					       &match_basic);
		} else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
			struct flow_match_ipv6_addrs match;

@@ -563,10 +569,9 @@ int mlx5e_tc_tun_parse(struct net_device *filter_dev,
			       &match.key->dst, MLX5_FLD_SZ_BYTES(ipv6_layout,
								  ipv6));

			MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c,
					 ethertype);
			MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
				 ETH_P_IPV6);
			key_basic.n_proto = htons(ETH_P_IPV6);
			mlx5e_tc_set_ethertype(headers_c, headers_v,
					       &match_basic);
		}
	}

+10 −4
Original line number Diff line number Diff line
@@ -2020,6 +2020,15 @@ u32 mlx5e_tc_get_flow_tun_id(struct mlx5e_tc_flow *flow)
	return flow->tunnel_id;
}

void mlx5e_tc_set_ethertype(void *headers_c, void *headers_v,
			    struct flow_match_basic *match)
{
	MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
		 ntohs(match->mask->n_proto));
	MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
		 ntohs(match->key->n_proto));
}

static int parse_tunnel_attr(struct mlx5e_priv *priv,
			     struct mlx5e_tc_flow *flow,
			     struct mlx5_flow_spec *spec,
@@ -2241,10 +2250,7 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
		struct flow_match_basic match;

		flow_rule_match_basic(rule, &match);
		MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
			 ntohs(match.mask->n_proto));
		MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
			 ntohs(match.key->n_proto));
		mlx5e_tc_set_ethertype(headers_c, headers_v, &match);

		if (match.mask->n_proto)
			*match_level = MLX5_MATCH_L2;
+3 −0
Original line number Diff line number Diff line
@@ -170,6 +170,9 @@ void dealloc_mod_hdr_actions(struct mlx5e_tc_mod_hdr_acts *mod_hdr_acts);
struct mlx5e_tc_flow;
u32 mlx5e_tc_get_flow_tun_id(struct mlx5e_tc_flow *flow);

void mlx5e_tc_set_ethertype(void *headers_c, void *headers_v,
			    struct flow_match_basic *match);

#if IS_ENABLED(CONFIG_MLX5_CLS_ACT)

int mlx5e_tc_nic_init(struct mlx5e_priv *priv);