diff options
author | Eli Britstein | 2018-11-18 13:21:46 +0100 |
---|---|---|
committer | Saeed Mahameed | 2018-12-11 23:52:20 +0100 |
commit | 8c4dc42bf6e4ffeda49cf5e26bfc991b548fc0aa (patch) | |
tree | e90164d7dc5d82b5b4377d06984889951898dfc3 /drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | |
parent | net/mlx5e: Allow association of a flow to multiple encaps (diff) | |
download | kernel-qcow2-linux-8c4dc42bf6e4ffeda49cf5e26bfc991b548fc0aa.tar.gz kernel-qcow2-linux-8c4dc42bf6e4ffeda49cf5e26bfc991b548fc0aa.tar.xz kernel-qcow2-linux-8c4dc42bf6e4ffeda49cf5e26bfc991b548fc0aa.zip |
net/mlx5e: Support multiple encapsulations for a TC flow
Currently a flow is associated with a single encap structure. The FW
extended destination features enables the driver to associate a flow
with multiple encap instances.
Change the encap id field from a flow scope to a per destination value
in the flow attributes struct. Use the encaps array to associate a flow
table entry with multiple encap entries.
Update the neigh logic to offload only if all encapsulations used in a
flow are connected, and un-offload upon the first one disconnected.
Note that the driver can now support up to two encap destinations.
Signed-off-by: Eli Britstein <elibr@mellanox.com>
Reviewed-by: Oz Shlomo <ozsh@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c index b0652e44a68d..bde1fb8c284b 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c @@ -130,9 +130,10 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw, MLX5_FLOW_DEST_VPORT_VHCA_ID; if (attr->dests[j].flags & MLX5_ESW_DEST_ENCAP) { flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT; - flow_act.reformat_id = attr->encap_id; + flow_act.reformat_id = attr->dests[j].encap_id; dest[i].vport.flags |= MLX5_FLOW_DEST_VPORT_REFORMAT_ID; - dest[i].vport.reformat_id = attr->encap_id; + dest[i].vport.reformat_id = + attr->dests[j].encap_id; } i++; } @@ -228,7 +229,7 @@ mlx5_eswitch_add_fwd_rule(struct mlx5_eswitch *esw, dest[i].vport.flags |= MLX5_FLOW_DEST_VPORT_VHCA_ID; if (attr->dests[i].flags & MLX5_ESW_DEST_ENCAP) { dest[i].vport.flags |= MLX5_FLOW_DEST_VPORT_REFORMAT_ID; - dest[i].vport.reformat_id = attr->encap_id; + dest[i].vport.reformat_id = attr->dests[i].encap_id; } } dest[i].type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE; |