Commit 765f974c authored by Emeel Hakim's avatar Emeel Hakim Committed by David S. Miller

net/mlx5: Consider VLAN interface in MACsec TX steering rules

Offloading MACsec when its configured over VLAN with current MACsec
TX steering rules will wrongly insert MACsec sec tag after inserting
the VLAN header leading to a ETHERNET | SECTAG | VLAN packet when
ETHERNET | VLAN | SECTAG is configured.

The above issue is due to adding the SECTAG by HW which is a later
stage compared to the VLAN header insertion stage.

Detect such a case and adjust TX steering rules to insert the
SECTAG in the correct place by using reformat_param_0 field in
the packet reformat to indicate the offset of SECTAG from end of
the MAC header to account for VLANs in granularity of 4Bytes.
Signed-off-by: default avatarEmeel Hakim <ehakim@nvidia.com>
Reviewed-by: default avatarSubbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4bba492b
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <net/macsec.h> #include <net/macsec.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/mlx5/qp.h> #include <linux/mlx5/qp.h>
#include <linux/if_vlan.h>
#include "fs_core.h" #include "fs_core.h"
#include "en/fs.h" #include "en/fs.h"
#include "en_accel/macsec_fs.h" #include "en_accel/macsec_fs.h"
...@@ -508,6 +509,8 @@ static void macsec_fs_tx_del_rule(struct mlx5e_macsec_fs *macsec_fs, ...@@ -508,6 +509,8 @@ static void macsec_fs_tx_del_rule(struct mlx5e_macsec_fs *macsec_fs,
macsec_fs_tx_ft_put(macsec_fs); macsec_fs_tx_ft_put(macsec_fs);
} }
#define MLX5_REFORMAT_PARAM_ADD_MACSEC_OFFSET_4_BYTES 1
static union mlx5e_macsec_rule * static union mlx5e_macsec_rule *
macsec_fs_tx_add_rule(struct mlx5e_macsec_fs *macsec_fs, macsec_fs_tx_add_rule(struct mlx5e_macsec_fs *macsec_fs,
const struct macsec_context *macsec_ctx, const struct macsec_context *macsec_ctx,
...@@ -553,6 +556,10 @@ macsec_fs_tx_add_rule(struct mlx5e_macsec_fs *macsec_fs, ...@@ -553,6 +556,10 @@ macsec_fs_tx_add_rule(struct mlx5e_macsec_fs *macsec_fs,
reformat_params.type = MLX5_REFORMAT_TYPE_ADD_MACSEC; reformat_params.type = MLX5_REFORMAT_TYPE_ADD_MACSEC;
reformat_params.size = reformat_size; reformat_params.size = reformat_size;
reformat_params.data = reformatbf; reformat_params.data = reformatbf;
if (is_vlan_dev(macsec_ctx->netdev))
reformat_params.param_0 = MLX5_REFORMAT_PARAM_ADD_MACSEC_OFFSET_4_BYTES;
flow_act.pkt_reformat = mlx5_packet_reformat_alloc(macsec_fs->mdev, flow_act.pkt_reformat = mlx5_packet_reformat_alloc(macsec_fs->mdev,
&reformat_params, &reformat_params,
MLX5_FLOW_NAMESPACE_EGRESS_MACSEC); MLX5_FLOW_NAMESPACE_EGRESS_MACSEC);
......
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