aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/rdma/rdma_doc.md51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/plugins/rdma/rdma_doc.md b/src/plugins/rdma/rdma_doc.md
new file mode 100644
index 00000000000..e41839eb595
--- /dev/null
+++ b/src/plugins/rdma/rdma_doc.md
@@ -0,0 +1,51 @@
+# RDMA (ibverb) Ethernet driver {#rdma_doc}
+
+This driver relies on Linux rdma-core (libibverb) userspace poll-mode driver
+to rx/tx Ethernet packets. Despite using the RDMA APIs, this is **not** about
+RDMA (no Infiniband, no RoCE, no iWARP), just pure traditional Ethernet
+packets.
+
+## Maturity level
+Under development: it should work, but has not been thoroughly tested.
+
+## Supported Hardware
+ - Mellanox ConnectX-4
+ - Mellanox ConnectX-5
+
+## Features
+ - bifurcation: MAC based flow steering for transparent sharing of a single
+physical port between multiple virtual interfaces including Linux netdev
+ - multiqueue
+
+## Security considerations
+When creating a rdma interface, it will receive all packets to the MAC address
+attributed to the interface plus a copy of all broadcast and multicast
+traffic.
+The MAC address is under the control of VPP: **the user controlling VPP can
+divert all traffic of any MAC address to the VPP process, including the Linux
+netdev MAC address as long as it can create a rdma interface**.
+The rights to create a rdma interface are controlled by the access rights of
+the `/dev/infiniband/uverbs[0-9]+`device nodes.
+
+## Quickstart
+1. Make sure the `ib_uverbs` module is loaded:
+```
+~# modprobe ib_uverbs
+```
+2. In VPP, create a new rdma virtual interface tied to the Linux netdev of the
+physical port you want to use (`enp94s0f0` in this example):
+```
+vpp# create int rdma host-if enp94s0f0 name rdma-0
+```
+3. Use the interface as usual, eg.:
+```
+vpp# set int ip addr rdma-0 1.1.1.1/24
+vpp# set int st rdma-0 up
+vpp# ping 1.1.1.100`
+```
+
+### Containers support
+It should work in containers as long as:
+ - the `ib_uverbs` module is loaded
+ - the device nodes `/dev/infiniband/uverbs[0-9]+` are usable from the
+ container (but see [security considerations](#Security considerations))