• B
    xsk: remove explicit ring structure from uapi · b3a9e0be
    Björn Töpel 提交于
    In this commit we remove the explicit ring structure from the the
    uapi. It is tricky for an uapi to depend on a certain L1 cache line
    size, since it can differ for variants of the same architecture. Now,
    we let the user application determine the offsets of the producer,
    consumer and descriptors by asking the socket via getsockopt.
    
    A typical flow would be (Rx ring):
    
      struct xdp_mmap_offsets off;
      struct xdp_desc *ring;
      u32 *prod, *cons;
      void *map;
      ...
    
      getsockopt(fd, SOL_XDP, XDP_MMAP_OFFSETS, &off, &optlen);
    
      map = mmap(NULL, off.rx.desc +
    		   NUM_DESCS * sizeof(struct xdp_desc),
    		   PROT_READ | PROT_WRITE,
    		   MAP_SHARED | MAP_POPULATE, sfd,
    		   XDP_PGOFF_RX_RING);
      prod = map + off.rx.producer;
      cons = map + off.rx.consumer;
      ring = map + off.rx.desc;
    Signed-off-by: NBjörn Töpel <bjorn.topel@intel.com>
    Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
    b3a9e0be
xsk_queue.h 5.5 KB