Commit 2741f223 authored by Chris Mi's avatar Chris Mi Committed by Saeed Mahameed

net/mlx5e: TC, Support sample offload action for tunneled traffic

Currently the sample offload actions send the encapsulated packet
to software. This commit decapsulates the packet before performing
the sampling and set the tunnel properties on the skb metadata
fields to make the behavior consistent with OVS sFlow.

If decapsulating first, we can't use the same match like before in
default table. So instantiate a post action instance to continue
processing the action list. If HW can preserve reg_c, also use the
post action instance.
Signed-off-by: default avatarChris Mi <cmi@nvidia.com>
Reviewed-by: default avatarOz Shlomo <ozsh@nvidia.com>
Reviewed-by: default avatarRoi Dayan <roid@nvidia.com>
Reviewed-by: default avatarMark Bloch <mbloch@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent ee950e5d
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
struct mlx5_flow_attr; struct mlx5_flow_attr;
struct mlx5e_tc_psample; struct mlx5e_tc_psample;
struct mlx5e_post_act;
struct mlx5e_sample_attr { struct mlx5e_sample_attr {
u32 group_num; u32 group_num;
...@@ -15,7 +16,6 @@ struct mlx5e_sample_attr { ...@@ -15,7 +16,6 @@ struct mlx5e_sample_attr {
u32 trunc_size; u32 trunc_size;
u32 restore_obj_id; u32 restore_obj_id;
u32 sampler_id; u32 sampler_id;
struct mlx5_flow_table *sample_default_tbl;
struct mlx5e_sample_flow *sample_flow; struct mlx5e_sample_flow *sample_flow;
}; };
...@@ -33,7 +33,7 @@ mlx5e_tc_sample_unoffload(struct mlx5e_tc_psample *sample_priv, ...@@ -33,7 +33,7 @@ mlx5e_tc_sample_unoffload(struct mlx5e_tc_psample *sample_priv,
struct mlx5_flow_attr *attr); struct mlx5_flow_attr *attr);
struct mlx5e_tc_psample * struct mlx5e_tc_psample *
mlx5e_tc_sample_init(struct mlx5_eswitch *esw); mlx5e_tc_sample_init(struct mlx5_eswitch *esw, struct mlx5e_post_act *post_act);
void void
mlx5e_tc_sample_cleanup(struct mlx5e_tc_psample *tc_psample); mlx5e_tc_sample_cleanup(struct mlx5e_tc_psample *tc_psample);
......
...@@ -4989,7 +4989,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht) ...@@ -4989,7 +4989,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
uplink_priv->post_act); uplink_priv->post_act);
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
uplink_priv->tc_psample = mlx5e_tc_sample_init(esw); uplink_priv->tc_psample = mlx5e_tc_sample_init(esw, uplink_priv->post_act);
#endif #endif
mapping_id = mlx5_query_nic_system_image_guid(esw->dev); mapping_id = mlx5_query_nic_system_image_guid(esw->dev);
......
...@@ -540,10 +540,7 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw, ...@@ -540,10 +540,7 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR) if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
flow_act.modify_hdr = attr->modify_hdr; flow_act.modify_hdr = attr->modify_hdr;
/* sample_attr is allocated only when there is a sample action */ if (split) {
if (attr->sample_attr && attr->sample_attr->sample_default_tbl) {
fdb = attr->sample_attr->sample_default_tbl;
} else if (split) {
fwd_attr.chain = attr->chain; fwd_attr.chain = attr->chain;
fwd_attr.prio = attr->prio; fwd_attr.prio = attr->prio;
fwd_attr.vport = esw_attr->in_rep->vport; fwd_attr.vport = esw_attr->in_rep->vport;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment