#include <net/macsec.h>
 #include <linux/netdevice.h>
 #include <linux/mlx5/qp.h>
+#include <linux/if_vlan.h>
 #include "fs_core.h"
 #include "en/fs.h"
 #include "en_accel/macsec_fs.h"
        macsec_fs_tx_ft_put(macsec_fs);
 }
 
+#define MLX5_REFORMAT_PARAM_ADD_MACSEC_OFFSET_4_BYTES 1
+
 static union mlx5e_macsec_rule *
 macsec_fs_tx_add_rule(struct mlx5e_macsec_fs *macsec_fs,
                      const struct macsec_context *macsec_ctx,
        reformat_params.type = MLX5_REFORMAT_TYPE_ADD_MACSEC;
        reformat_params.size = reformat_size;
        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,
                                                           &reformat_params,
                                                           MLX5_FLOW_NAMESPACE_EGRESS_MACSEC);