Commit c938a616 authored by Or Gerlitz's avatar Or Gerlitz Committed by Roland Dreier

IB/core: Add raw packet QP type

IB_QPT_RAW_PACKET allows applications to build a complete packet,
including L2 headers, when sending; on the receive side, the HW will
not strip any headers.

This QP type is designed for userspace direct access to Ethernet; for
example by applications that do TCP/IP themselves.  Only processes
with the NET_RAW capability are allowed to create raw packet QPs (the
name "raw packet QP" is supposed to suggest an analogy to AF_PACKET /
SOL_RAW sockets).
Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Reviewed-by: default avatarSean Hefty <sean.hefty@intel.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent d48b97b4
...@@ -1399,6 +1399,9 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file, ...@@ -1399,6 +1399,9 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
if (copy_from_user(&cmd, buf, sizeof cmd)) if (copy_from_user(&cmd, buf, sizeof cmd))
return -EFAULT; return -EFAULT;
if (cmd.qp_type == IB_QPT_RAW_PACKET && !capable(CAP_NET_RAW))
return -EPERM;
INIT_UDATA(&udata, buf + sizeof cmd, INIT_UDATA(&udata, buf + sizeof cmd,
(unsigned long) cmd.response + sizeof resp, (unsigned long) cmd.response + sizeof resp,
in_len - sizeof cmd, out_len - sizeof resp); in_len - sizeof cmd, out_len - sizeof resp);
......
...@@ -479,6 +479,7 @@ static const struct { ...@@ -479,6 +479,7 @@ static const struct {
[IB_QPT_UD] = (IB_QP_PKEY_INDEX | [IB_QPT_UD] = (IB_QP_PKEY_INDEX |
IB_QP_PORT | IB_QP_PORT |
IB_QP_QKEY), IB_QP_QKEY),
[IB_QPT_RAW_PACKET] = IB_QP_PORT,
[IB_QPT_UC] = (IB_QP_PKEY_INDEX | [IB_QPT_UC] = (IB_QP_PKEY_INDEX |
IB_QP_PORT | IB_QP_PORT |
IB_QP_ACCESS_FLAGS), IB_QP_ACCESS_FLAGS),
......
...@@ -605,7 +605,7 @@ enum ib_qp_type { ...@@ -605,7 +605,7 @@ enum ib_qp_type {
IB_QPT_UD, IB_QPT_UD,
IB_QPT_RAW_IPV6, IB_QPT_RAW_IPV6,
IB_QPT_RAW_ETHERTYPE, IB_QPT_RAW_ETHERTYPE,
/* Save 8 for RAW_PACKET */ IB_QPT_RAW_PACKET = 8,
IB_QPT_XRC_INI = 9, IB_QPT_XRC_INI = 9,
IB_QPT_XRC_TGT, IB_QPT_XRC_TGT,
IB_QPT_MAX IB_QPT_MAX
......
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