• Cristian Dumitrescu's avatar
    samples/bpf: Add new sample xsk_fwd.c · 35149b2c
    Cristian Dumitrescu authored
    This sample code illustrates the packet forwarding between multiple
    AF_XDP sockets in multi-threading environment. All the threads and
    sockets are sharing a common buffer pool, with each socket having
    its own private buffer cache. The sockets are created with the
    xsk_socket__create_shared() function, which allows multiple AF_XDP
    sockets to share the same UMEM object.
    
    Example 1: Single thread handling two sockets. Packets received
    from socket A (on top of interface IFA, queue QA) are forwarded
    to socket B (on top of interface IFB, queue QB) and vice-versa.
    The thread is affinitized to CPU core C:
    
    ./xsk_fwd -i IFA -q QA -i IFB -q QB -c C
    
    Example 2: Two threads, each handling two sockets. Packets from
    socket A are sent to socket B (by thread X), packets
    from socket B are sent to socket A (by thread X); packets from
    socket C are sent to socket D (by thread Y), packets from socket
    D are sent to socket C (by thread Y). The two threads are bound
    to CPU cores CX and CY:
    
    ./xdp_fwd -i IFA -q QA -i IFB -q QB -i IFC -q QC -i IFD -q QD -c CX -c CY
    Signed-off-by: default avatarCristian Dumitrescu <cristian.dumitrescu@intel.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarBjörn Töpel <bjorn.topel@intel.com>
    Link: https://lore.kernel.org/bpf/1598603189-32145-15-git-send-email-magnus.karlsson@intel.com
    35149b2c
xsk_fwd.c 25.1 KB