Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/old_kernel_headers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Old Kernel Headers
on:
pull_request:
concurrency:
group: old-kernel-headers_${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
check:
timeout-minutes: 5
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- name: Install old kernel headers
run: |
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
curl -sSfL --retry 3 -o "$tmp/libc-dev.deb" \
"https://archive.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.19.249-2_amd64.deb"
( cd "$tmp" && ar x libc-dev.deb && tar -xf data.tar.* )
rm -rf kernel-headers && mkdir kernel-headers
mv "$tmp/usr/include" kernel-headers/include
mv kernel-headers/include/x86_64-linux-gnu/asm kernel-headers/include/asm

- name: make check
run: make check -j EXTRA_CPPFLAGS="-isystem $PWD/kernel-headers/include"
6 changes: 3 additions & 3 deletions src/waltz/xdp/fd_xsk.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ fd_xsk_mmap_ring( fd_xdp_ring_t * ring,
long map_off,
ulong elem_sz,
ulong depth,
struct xdp_ring_offset const * ring_offset ) {
fd_xdp_ring_offset_t const * ring_offset ) {
/* TODO what is ring_offset->desc ? */

/* sanity check */
Expand Down Expand Up @@ -140,7 +140,7 @@ fd_xsk_fini( fd_xsk_t * xsk ) {

if( FD_LIKELY( xsk->xsk_fd>=0 ) ) {
/* Clear XSK descriptors */
fd_memset( &xsk->offsets, 0, sizeof(struct xdp_mmap_offsets) );
fd_memset( &xsk->offsets, 0, sizeof(fd_xdp_mmap_offsets_t) );
/* Close XSK */
close( xsk->xsk_fd );
xsk->xsk_fd = -1;
Expand Down Expand Up @@ -191,7 +191,7 @@ fd_xsk_setup_umem( fd_xsk_t * xsk,
# undef FD_SET_XSK_RING_DEPTH

/* Request ring offsets */
socklen_t offsets_sz = sizeof(struct xdp_mmap_offsets);
socklen_t offsets_sz = sizeof(fd_xdp_mmap_offsets_t);
res = getsockopt( xsk->xsk_fd, SOL_XDP, XDP_MMAP_OFFSETS,
&xsk->offsets, &offsets_sz );
if( FD_UNLIKELY( res!=0 ) ) {
Expand Down
23 changes: 22 additions & 1 deletion src/waltz/xdp/fd_xsk.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,27 @@

#include "../../util/fd_util_base.h"

#ifndef XDP_USE_NEED_WAKEUP
#define XDP_USE_NEED_WAKEUP (1<<3)
#endif

#ifndef XDP_RING_NEED_WAKEUP
#define XDP_RING_NEED_WAKEUP (1u<<0)
#endif

struct fd_xdp_ring_offset {
ulong producer;
ulong consumer;
ulong desc;
ulong flags;
};
typedef struct fd_xdp_ring_offset fd_xdp_ring_offset_t;

struct fd_xdp_mmap_offsets {
fd_xdp_ring_offset_t rx, tx, fr, cr;
};
typedef struct fd_xdp_mmap_offsets fd_xdp_mmap_offsets_t;

/* FD_XSK_UMEM_ALIGN: byte alignment of UMEM area within fd_xsk_t.
This requirement is set by the kernel as of Linux 4.18. */
#define FD_XSK_UMEM_ALIGN (4096UL)
Expand Down Expand Up @@ -242,7 +263,7 @@ struct fd_xsk {

/* Kernel descriptor of XSK rings in local address space
returned by getsockopt(SOL_XDP, XDP_MMAP_OFFSETS) */
struct xdp_mmap_offsets offsets;
fd_xdp_mmap_offsets_t offsets;

/* AF_XDP socket file descriptor */
int xsk_fd;
Expand Down
Loading