net/mlx5e: Helper function to set ethertype
authorEli Britstein <elibr@mellanox.com>
Mon, 11 May 2020 19:20:29 +0000 (19:20 +0000)
committerSaeed Mahameed <saeedm@mellanox.com>
Thu, 28 May 2020 01:13:50 +0000 (18:13 -0700)
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>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.h

index 995b2ef..ba72410 100644 (file)
@@ -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,
index e99382f..6d7fded 100644 (file)
@@ -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);
                }
        }
 
index 58f797d..680b9e0 100644 (file)
@@ -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;
index 037aa73..144b71f 100644 (file)
@@ -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);