Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 240ae00e authored by Matan Barak's avatar Matan Barak Committed by Roland Dreier
Browse files

IB/core: Add support for IB L2 device-managed steering



This patch adds preliminary support for IB L2 device-managed steering,
currently exposed only in the kernel.

This flow spec can be used by low-level drivers that need to indicate
the link layer type when creating device-managed flow rules.

Signed-off-by: default avatarMatan Barak <matanb@mellanox.com>
Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 90f1d1b4
Loading
Loading
Loading
Loading
+15 −1
Original line number Original line Diff line number Diff line
@@ -1100,13 +1100,14 @@ enum ib_flow_attr_type {
enum ib_flow_spec_type {
enum ib_flow_spec_type {
	/* L2 headers*/
	/* L2 headers*/
	IB_FLOW_SPEC_ETH	= 0x20,
	IB_FLOW_SPEC_ETH	= 0x20,
	IB_FLOW_SPEC_IB		= 0x22,
	/* L3 header*/
	/* L3 header*/
	IB_FLOW_SPEC_IPV4	= 0x30,
	IB_FLOW_SPEC_IPV4	= 0x30,
	/* L4 headers*/
	/* L4 headers*/
	IB_FLOW_SPEC_TCP	= 0x40,
	IB_FLOW_SPEC_TCP	= 0x40,
	IB_FLOW_SPEC_UDP	= 0x41
	IB_FLOW_SPEC_UDP	= 0x41
};
};

#define IB_FLOW_SPEC_LAYER_MASK	0xF0
#define IB_FLOW_SPEC_SUPPORT_LAYERS 4
#define IB_FLOW_SPEC_SUPPORT_LAYERS 4


/* Flow steering rule priority is set according to it's domain.
/* Flow steering rule priority is set according to it's domain.
@@ -1134,6 +1135,18 @@ struct ib_flow_spec_eth {
	struct ib_flow_eth_filter mask;
	struct ib_flow_eth_filter mask;
};
};


struct ib_flow_ib_filter {
	__be16 dlid;
	__u8   sl;
};

struct ib_flow_spec_ib {
	enum ib_flow_spec_type	 type;
	u16			 size;
	struct ib_flow_ib_filter val;
	struct ib_flow_ib_filter mask;
};

struct ib_flow_ipv4_filter {
struct ib_flow_ipv4_filter {
	__be32	src_ip;
	__be32	src_ip;
	__be32	dst_ip;
	__be32	dst_ip;
@@ -1164,6 +1177,7 @@ union ib_flow_spec {
		u16			size;
		u16			size;
	};
	};
	struct ib_flow_spec_eth		eth;
	struct ib_flow_spec_eth		eth;
	struct ib_flow_spec_ib		ib;
	struct ib_flow_spec_ipv4        ipv4;
	struct ib_flow_spec_ipv4        ipv4;
	struct ib_flow_spec_tcp_udp	tcp_udp;
	struct ib_flow_spec_tcp_udp	tcp_udp;
};
};