Commit ee534d7f authored by Lior Nahmanson's avatar Lior Nahmanson Committed by David S. Miller
Browse files

net/mlx5: Add MACsec Tx tables support to fs_core



Changed EGRESS_KERNEL namespace to EGRESS_IPSEC and add new
namespace for MACsec TX.
This namespace should be the last namespace for transmitted packets.

Signed-off-by: default avatarLior Nahmanson <liorna@nvidia.com>
Reviewed-by: default avatarRaed Salem <raeds@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8ff0ac5b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -577,7 +577,7 @@ int mlx5e_accel_ipsec_fs_init(struct mlx5e_ipsec *ipsec)
	int err = -ENOMEM;

	ns = mlx5_get_flow_namespace(ipsec->mdev,
				     MLX5_FLOW_NAMESPACE_EGRESS_KERNEL);
				     MLX5_FLOW_NAMESPACE_EGRESS_IPSEC);
	if (!ns)
		return -EOPNOTSUPP;

+2 −1
Original line number Diff line number Diff line
@@ -928,7 +928,8 @@ static int mlx5_cmd_modify_header_alloc(struct mlx5_flow_root_namespace *ns,
		table_type = FS_FT_NIC_RX;
		break;
	case MLX5_FLOW_NAMESPACE_EGRESS:
	case MLX5_FLOW_NAMESPACE_EGRESS_KERNEL:
	case MLX5_FLOW_NAMESPACE_EGRESS_IPSEC:
	case MLX5_FLOW_NAMESPACE_EGRESS_MACSEC:
		max_actions = MLX5_CAP_FLOWTABLE_NIC_TX(dev, max_modify_header_actions);
		table_type = FS_FT_NIC_TX;
		break;
+14 −4
Original line number Diff line number Diff line
@@ -130,7 +130,11 @@

#define KERNEL_TX_IPSEC_NUM_PRIOS  1
#define KERNEL_TX_IPSEC_NUM_LEVELS 1
#define KERNEL_TX_MIN_LEVEL        (KERNEL_TX_IPSEC_NUM_LEVELS)
#define KERNEL_TX_IPSEC_MIN_LEVEL        (KERNEL_TX_IPSEC_NUM_LEVELS)

#define KERNEL_TX_MACSEC_NUM_PRIOS  1
#define KERNEL_TX_MACSEC_NUM_LEVELS 2
#define KERNEL_TX_MACSEC_MIN_LEVEL       (KERNEL_TX_IPSEC_MIN_LEVEL + KERNEL_TX_MACSEC_NUM_PRIOS)

struct node_caps {
	size_t	arr_sz;
@@ -186,18 +190,23 @@ static struct init_tree_node {

static struct init_tree_node egress_root_fs = {
	.type = FS_TYPE_NAMESPACE,
	.ar_size = 2,
	.ar_size = 3,
	.children = (struct init_tree_node[]) {
		ADD_PRIO(0, MLX5_BY_PASS_NUM_PRIOS, 0,
			 FS_CHAINING_CAPS_EGRESS,
			 ADD_NS(MLX5_FLOW_TABLE_MISS_ACTION_DEF,
				ADD_MULTIPLE_PRIO(MLX5_BY_PASS_NUM_PRIOS,
						  BY_PASS_PRIO_NUM_LEVELS))),
		ADD_PRIO(0, KERNEL_TX_MIN_LEVEL, 0,
		ADD_PRIO(0, KERNEL_TX_IPSEC_MIN_LEVEL, 0,
			 FS_CHAINING_CAPS_EGRESS,
			 ADD_NS(MLX5_FLOW_TABLE_MISS_ACTION_DEF,
				ADD_MULTIPLE_PRIO(KERNEL_TX_IPSEC_NUM_PRIOS,
						  KERNEL_TX_IPSEC_NUM_LEVELS))),
		ADD_PRIO(0, KERNEL_TX_MACSEC_MIN_LEVEL, 0,
			 FS_CHAINING_CAPS_EGRESS,
			 ADD_NS(MLX5_FLOW_TABLE_MISS_ACTION_DEF,
				ADD_MULTIPLE_PRIO(KERNEL_TX_MACSEC_NUM_PRIOS,
						  KERNEL_TX_MACSEC_NUM_LEVELS))),
	}
};

@@ -2315,7 +2324,8 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
		prio =  FDB_BYPASS_PATH;
		break;
	case MLX5_FLOW_NAMESPACE_EGRESS:
	case MLX5_FLOW_NAMESPACE_EGRESS_KERNEL:
	case MLX5_FLOW_NAMESPACE_EGRESS_IPSEC:
	case MLX5_FLOW_NAMESPACE_EGRESS_MACSEC:
		root_ns = steering->egress_root_ns;
		prio = type - MLX5_FLOW_NAMESPACE_EGRESS;
		break;
+2 −1
Original line number Diff line number Diff line
@@ -92,7 +92,8 @@ enum mlx5_flow_namespace_type {
	MLX5_FLOW_NAMESPACE_SNIFFER_RX,
	MLX5_FLOW_NAMESPACE_SNIFFER_TX,
	MLX5_FLOW_NAMESPACE_EGRESS,
	MLX5_FLOW_NAMESPACE_EGRESS_KERNEL,
	MLX5_FLOW_NAMESPACE_EGRESS_IPSEC,
	MLX5_FLOW_NAMESPACE_EGRESS_MACSEC,
	MLX5_FLOW_NAMESPACE_RDMA_RX,
	MLX5_FLOW_NAMESPACE_RDMA_RX_KERNEL,
	MLX5_FLOW_NAMESPACE_RDMA_TX,