[ewg] RAW_ETH support [PATCH 1/1]

Alekseys Senin alekseys at voltaire.com
Sun Jun 13 00:35:52 PDT 2010


Vlad,
apply this patch. It will add new RAW_ETH enum and used by NES/Intel driver in their code.

This patch add RAW_ETH QP type to verbs layer.

Signed-off-by: Aleksey Senin <alekseys at voltaire.com>
---
 kernel_patches/fixes/core_0560_raw_eth.patch |   63 ++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)
 create mode 100644 kernel_patches/fixes/core_0560_raw_eth.patch

diff --git a/kernel_patches/fixes/core_0560_raw_eth.patch b/kernel_patches/fixes/core_0560_raw_eth.patch
new file mode 100644
index 0000000..2a8b30f
--- /dev/null
+++ b/kernel_patches/fixes/core_0560_raw_eth.patch
@@ -0,0 +1,63 @@
+ Add new RAW_ETY QP type in order to build RAW Ethernet packets
+ over iWARP and RDMAOE protocols.
+
+
+Signed-off-by: Aleksey Senin <alekseys at voltaire.com>
+---
+ drivers/infiniband/core/verbs.c |   13 +++++++++++--
+ include/rdma/ib_verbs.h         |    1 +
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
+index 881850e..bb4dcd5 100644
+--- a/drivers/infiniband/core/verbs.c
++++ b/drivers/infiniband/core/verbs.c
+@@ -382,6 +382,7 @@ static const struct {
+ 				[IB_QPT_UD]  = (IB_QP_PKEY_INDEX		|
+ 						IB_QP_PORT			|
+ 						IB_QP_QKEY),
++				[IB_QPT_RAW_ETH] = IB_QP_PORT,
+ 				[IB_QPT_UC]  = (IB_QP_PKEY_INDEX		|
+ 						IB_QP_PORT			|
+ 						IB_QP_ACCESS_FLAGS),
+@@ -1004,7 +1005,11 @@ int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
+
+ 	switch (rdma_node_get_transport(qp->device->node_type)) {
+ 	case RDMA_TRANSPORT_IB:
+-		if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
++		if (qp->qp_type == IB_QPT_RAW_ETH) {
++			/* In raw Etherent mgids the 63 msb's should be 0 */
++			if (gid->global.subnet_prefix & cpu_to_be64(~1ULL))
++				return -EINVAL;
++		} else if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
+ 			return -EINVAL;
+ 		break;
+ 	case RDMA_TRANSPORT_IWARP:
+@@ -1023,7 +1028,11 @@ int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
+
+ 	switch (rdma_node_get_transport(qp->device->node_type)) {
+ 	case RDMA_TRANSPORT_IB:
+-		if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
++		if (qp->qp_type == IB_QPT_RAW_ETH) {
++			/* In raw Etherent mgids the 63 msb's should be 0 */
++			if (gid->global.subnet_prefix & cpu_to_be64(~1ULL))
++				return -EINVAL;
++		} else if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD)
+ 			return -EINVAL;
+ 		break;
+ 	case RDMA_TRANSPORT_IWARP:
+diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
+index 3a5a40f..2162253 100644
+--- a/include/rdma/ib_verbs.h
++++ b/include/rdma/ib_verbs.h
+@@ -571,6 +571,7 @@ enum ib_qp_type {
+ 	IB_QPT_UD,
+ 	IB_QPT_XRC,
+ 	IB_QPT_RAW_IPV6,
++	IB_QPT_RAW_ETH,
+ 	IB_QPT_RAW_ETY
+ };
+
+--
+1.6.5.2
+
-- 
1.6.4.2





More information about the ewg mailing list