diff options
Diffstat (limited to 'src/plugins/rdma/rdma_doc.md')
-rw-r--r-- | src/plugins/rdma/rdma_doc.md | 51 |
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)) |