xsk: document ability to redirect to any socket bound to the same umem

Document the ability to redirect to any socket bound to the same umem.

Signed-off-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/r/20240205123553.22180-3-magnus.karlsson@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Magnus Karlsson 2024-02-05 13:35:51 +01:00 committed by Alexei Starovoitov
parent 2863d665ea
commit 968595a936

View File

@ -329,23 +329,24 @@ XDP_SHARED_UMEM option and provide the initial socket's fd in the
sxdp_shared_umem_fd field as you registered the UMEM on that sxdp_shared_umem_fd field as you registered the UMEM on that
socket. These two sockets will now share one and the same UMEM. socket. These two sockets will now share one and the same UMEM.
There is no need to supply an XDP program like the one in the previous In this case, it is possible to use the NIC's packet steering
case where sockets were bound to the same queue id and capabilities to steer the packets to the right queue. This is not
device. Instead, use the NIC's packet steering capabilities to steer possible in the previous example as there is only one queue shared
the packets to the right queue. In the previous example, there is only among sockets, so the NIC cannot do this steering as it can only steer
one queue shared among sockets, so the NIC cannot do this steering. It between queues.
can only steer between queues.
In libbpf, you need to use the xsk_socket__create_shared() API as it In libxdp (or libbpf prior to version 1.0), you need to use the
takes a reference to a FILL ring and a COMPLETION ring that will be xsk_socket__create_shared() API as it takes a reference to a FILL ring
created for you and bound to the shared UMEM. You can use this and a COMPLETION ring that will be created for you and bound to the
function for all the sockets you create, or you can use it for the shared UMEM. You can use this function for all the sockets you create,
second and following ones and use xsk_socket__create() for the first or you can use it for the second and following ones and use
one. Both methods yield the same result. xsk_socket__create() for the first one. Both methods yield the same
result.
Note that a UMEM can be shared between sockets on the same queue id Note that a UMEM can be shared between sockets on the same queue id
and device, as well as between queues on the same device and between and device, as well as between queues on the same device and between
devices at the same time. devices at the same time. It is also possible to redirect to any
socket as long as it is bound to the same umem with XDP_SHARED_UMEM.
XDP_USE_NEED_WAKEUP bind flag XDP_USE_NEED_WAKEUP bind flag
----------------------------- -----------------------------
@ -822,6 +823,10 @@ A: The short answer is no, that is not supported at the moment. The
switch, or other distribution mechanism, in your NIC to direct switch, or other distribution mechanism, in your NIC to direct
traffic to the correct queue id and socket. traffic to the correct queue id and socket.
Note that if you are using the XDP_SHARED_UMEM option, it is
possible to switch traffic between any socket bound to the same
umem.
Q: My packets are sometimes corrupted. What is wrong? Q: My packets are sometimes corrupted. What is wrong?
A: Care has to be taken not to feed the same buffer in the UMEM into A: Care has to be taken not to feed the same buffer in the UMEM into