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:
parent
2863d665ea
commit
968595a936
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user