mirror of https://gitee.com/openkylin/linux.git
net/mlx5e: Helper function to set ethertype
Set ethertype match in a helper function as a pre-step towards optimizing it. Signed-off-by: Eli Britstein <elibr@mellanox.com> Reviewed-by: Roi Dayan <roid@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
810cbb2554
commit
4a5d5d7392
|
@ -134,10 +134,7 @@ mlx5_tc_ct_set_tuple_match(struct mlx5_flow_spec *spec,
|
||||||
|
|
||||||
flow_rule_match_basic(rule, &match);
|
flow_rule_match_basic(rule, &match);
|
||||||
|
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
|
mlx5e_tc_set_ethertype(headers_c, headers_v, &match);
|
||||||
ntohs(match.mask->n_proto));
|
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
|
|
||||||
ntohs(match.key->n_proto));
|
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_c, ip_protocol,
|
MLX5_SET(fte_match_set_lyr_2_4, headers_c, ip_protocol,
|
||||||
match.mask->ip_proto);
|
match.mask->ip_proto);
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
|
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
|
||||||
|
|
|
@ -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)) {
|
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;
|
struct flow_match_control match;
|
||||||
u16 addr_type;
|
u16 addr_type;
|
||||||
|
|
||||||
|
@ -537,10 +544,9 @@ int mlx5e_tc_tun_parse(struct net_device *filter_dev,
|
||||||
dst_ipv4_dst_ipv6.ipv4_layout.ipv4,
|
dst_ipv4_dst_ipv6.ipv4_layout.ipv4,
|
||||||
ntohl(match.key->dst));
|
ntohl(match.key->dst));
|
||||||
|
|
||||||
MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c,
|
key_basic.n_proto = htons(ETH_P_IP);
|
||||||
ethertype);
|
mlx5e_tc_set_ethertype(headers_c, headers_v,
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
|
&match_basic);
|
||||||
ETH_P_IP);
|
|
||||||
} else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
|
} else if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
|
||||||
struct flow_match_ipv6_addrs match;
|
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,
|
&match.key->dst, MLX5_FLD_SZ_BYTES(ipv6_layout,
|
||||||
ipv6));
|
ipv6));
|
||||||
|
|
||||||
MLX5_SET_TO_ONES(fte_match_set_lyr_2_4, headers_c,
|
key_basic.n_proto = htons(ETH_P_IPV6);
|
||||||
ethertype);
|
mlx5e_tc_set_ethertype(headers_c, headers_v,
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
|
&match_basic);
|
||||||
ETH_P_IPV6);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2020,6 +2020,15 @@ u32 mlx5e_tc_get_flow_tun_id(struct mlx5e_tc_flow *flow)
|
||||||
return flow->tunnel_id;
|
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,
|
static int parse_tunnel_attr(struct mlx5e_priv *priv,
|
||||||
struct mlx5e_tc_flow *flow,
|
struct mlx5e_tc_flow *flow,
|
||||||
struct mlx5_flow_spec *spec,
|
struct mlx5_flow_spec *spec,
|
||||||
|
@ -2241,10 +2250,7 @@ static int __parse_cls_flower(struct mlx5e_priv *priv,
|
||||||
struct flow_match_basic match;
|
struct flow_match_basic match;
|
||||||
|
|
||||||
flow_rule_match_basic(rule, &match);
|
flow_rule_match_basic(rule, &match);
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_c, ethertype,
|
mlx5e_tc_set_ethertype(headers_c, headers_v, &match);
|
||||||
ntohs(match.mask->n_proto));
|
|
||||||
MLX5_SET(fte_match_set_lyr_2_4, headers_v, ethertype,
|
|
||||||
ntohs(match.key->n_proto));
|
|
||||||
|
|
||||||
if (match.mask->n_proto)
|
if (match.mask->n_proto)
|
||||||
*match_level = MLX5_MATCH_L2;
|
*match_level = MLX5_MATCH_L2;
|
||||||
|
|
|
@ -170,6 +170,9 @@ void dealloc_mod_hdr_actions(struct mlx5e_tc_mod_hdr_acts *mod_hdr_acts);
|
||||||
struct mlx5e_tc_flow;
|
struct mlx5e_tc_flow;
|
||||||
u32 mlx5e_tc_get_flow_tun_id(struct mlx5e_tc_flow *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)
|
#if IS_ENABLED(CONFIG_MLX5_CLS_ACT)
|
||||||
|
|
||||||
int mlx5e_tc_nic_init(struct mlx5e_priv *priv);
|
int mlx5e_tc_nic_init(struct mlx5e_priv *priv);
|
||||||
|
|
Loading…
Reference in New Issue