Skip to content

Commit 94d78a9

Browse files
committed
update/add missing AF_XDP structs & constants
1 parent d8ff07b commit 94d78a9

File tree

5 files changed

+100
-2
lines changed

5 files changed

+100
-2
lines changed

libc-test/build.rs

+34-2
Original file line numberDiff line numberDiff line change
@@ -3785,12 +3785,25 @@ fn test_linux(target: &str) {
37853785

37863786
// FIXME: Requires >= 5.4 kernel headers.
37873787
// Everything that uses install-musl.sh has 4.19 kernel headers.
3788-
"xdp_umem_reg" | "xdp_ring_offset" | "xdp_mmap_offsets" if musl => true,
3788+
"xdp_ring_offset" | "xdp_mmap_offsets" if musl => true,
3789+
3790+
// FIXME: Requires >= 6.8 kernel headers.
3791+
// A field was added in 6.8.
3792+
// https://github.com/torvalds/linux/commit/341ac980eab90ac1f6c22ee9f9da83ed9604d899
3793+
// The previous version of the struct was removed in 6.11 due to a bug.
3794+
// https://github.com/torvalds/linux/commit/32654bbd6313b4cfc82297e6634fa9725c3c900f
3795+
"xdp_umem_reg" => true,
37893796

37903797
// FIXME: Requires >= 5.9 kernel headers.
37913798
// Everything that uses install-musl.sh has 4.19 kernel headers.
37923799
"xdp_statistics" if musl => true,
37933800

3801+
// FIXME: Requires >= 6.8 kernel headers.
3802+
"xsk_tx_metadata"
3803+
| "__c_anonymous_xsk_tx_metadata_union"
3804+
| "xsk_tx_metadata_request"
3805+
| "xsk_tx_metadata_completion" => true,
3806+
37943807
// A new field was added in kernel 5.4, this is the old version for backwards compatibility.
37953808
// https://github.com/torvalds/linux/commit/77cd0d7b3f257fd0e3096b4fdcff1a7d38e99e10
37963809
"xdp_ring_offset_v1" | "xdp_mmap_offsets_v1" => true,
@@ -4216,6 +4229,23 @@ fn test_linux(target: &str) {
42164229
true
42174230
}
42184231

4232+
// FIXME: Requires >= 6.8 kernel headers.
4233+
"XDP_UMEM_TX_SW_CSUM"
4234+
| "XDP_TXMD_FLAGS_TIMESTAMP"
4235+
| "XDP_TXMD_FLAGS_CHECKSUM"
4236+
| "XDP_TX_METADATA"
4237+
=>
4238+
{
4239+
true
4240+
}
4241+
4242+
// FIXME: Requires >= 6.11 kernel headers.
4243+
"XDP_UMEM_TX_METADATA_LEN"
4244+
=>
4245+
{
4246+
true
4247+
}
4248+
42194249
// FIXME: Requires >= 6.6 kernel headers.
42204250
"SYS_fchmodat2" => true,
42214251

@@ -4458,7 +4488,9 @@ fn test_linux(target: &str) {
44584488
// either fsid_t or int[2] type
44594489
(struct_ == "fanotify_event_info_fid" && field == "fsid") ||
44604490
// `handle` is a VLA
4461-
(struct_ == "fanotify_event_info_fid" && field == "handle")
4491+
(struct_ == "fanotify_event_info_fid" && field == "handle") ||
4492+
// the `xsk_tx_metadata_union` field is an anonymous union
4493+
(struct_ == "xsk_tx_metadata" && field == "xsk_tx_metadata_union")
44624494
});
44634495

44644496
cfg.skip_roundtrip(move |s| match s {

libc-test/semver/linux-gnu.txt

+5
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,8 @@ XDP_TX_RING
489489
XDP_UMEM_REG
490490
XDP_UMEM_FILL_RING
491491
XDP_UMEM_COMPLETION_RING
492+
XDP_UMEM_TX_SW_CSUM
493+
XDP_UMEM_TX_METADATA_LEN
492494
XDP_STATISTICS
493495
XDP_OPTIONS
494496
XDP_OPTIONS_ZEROCOPY
@@ -498,7 +500,10 @@ XDP_UMEM_PGOFF_FILL_RING
498500
XDP_UMEM_PGOFF_COMPLETION_RING
499501
XSK_UNALIGNED_BUF_OFFSET_SHIFT
500502
XSK_UNALIGNED_BUF_ADDR_MASK
503+
XDP_TXMD_FLAGS_TIMESTAMP
504+
XDP_TXMD_FLAGS_CHECKSUM
501505
XDP_PKT_CONTD
506+
XDP_TX_METADATA
502507
XENFS_SUPER_MAGIC
503508
XFS_SUPER_MAGIC
504509
_CS_GNU_LIBC_VERSION

libc-test/semver/linux-musl.txt

+5
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@ XDP_RX_RING
4141
XDP_SHARED_UMEM
4242
XDP_STATISTICS
4343
XDP_TX_RING
44+
XDP_TX_METADATA
45+
XDP_TXMD_FLAGS_CHECKSUM
46+
XDP_TXMD_FLAGS_TIMESTAMP
4447
XDP_UMEM_COMPLETION_RING
4548
XDP_UMEM_FILL_RING
4649
XDP_UMEM_PGOFF_COMPLETION_RING
4750
XDP_UMEM_PGOFF_FILL_RING
4851
XDP_UMEM_REG
52+
XDP_UMEM_TX_METADATA_LEN
53+
XDP_UMEM_TX_SW_CSUM
4954
XDP_UMEM_UNALIGNED_CHUNK_FLAG
5055
XDP_USE_NEED_WAKEUP
5156
XDP_USE_SG

src/unix/linux_like/linux/gnu/mod.rs

+28
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ s! {
399399
pub chunk_size: ::__u32,
400400
pub headroom: ::__u32,
401401
pub flags: ::__u32,
402+
pub tx_metadata_len: ::__u32,
402403
}
403404

404405
pub struct xdp_umem_reg_v1 {
@@ -433,6 +434,15 @@ s! {
433434
pub options: ::__u32,
434435
}
435436

437+
pub struct xsk_tx_metadata_completion {
438+
pub tx_timestamp: ::__u64,
439+
}
440+
441+
pub struct xsk_tx_metadata_request {
442+
pub csum_start: ::__u16,
443+
pub csum_offset: ::__u16,
444+
}
445+
436446
pub struct iocb {
437447
pub aio_data: ::__u64,
438448
#[cfg(target_endian = "little")]
@@ -640,6 +650,18 @@ s_no_extra_traits! {
640650
pub ut_addr_v6: [i32; 4],
641651
__glibc_reserved: [::c_char; 20],
642652
}
653+
654+
#[allow(missing_debug_implementations)]
655+
pub struct xsk_tx_metadata {
656+
pub flags: ::__u64,
657+
pub xsk_tx_metadata_union: __c_anonymous_xsk_tx_metadata_union,
658+
}
659+
660+
#[allow(missing_debug_implementations)]
661+
pub union __c_anonymous_xsk_tx_metadata_union {
662+
pub request: xsk_tx_metadata_request,
663+
pub completion: xsk_tx_metadata_completion,
664+
}
643665
}
644666

645667
cfg_if! {
@@ -1070,6 +1092,8 @@ pub const XDP_USE_NEED_WAKEUP: ::__u16 = 1 << 3;
10701092
pub const XDP_USE_SG: ::__u16 = 1 << 4;
10711093

10721094
pub const XDP_UMEM_UNALIGNED_CHUNK_FLAG: ::__u32 = 1 << 0;
1095+
pub const XDP_UMEM_TX_SW_CSUM: ::__u32 = 1 << 1;
1096+
pub const XDP_UMEM_TX_METADATA_LEN: ::__u32 = 1 << 2;
10731097

10741098
pub const XDP_RING_NEED_WAKEUP: ::__u32 = 1 << 0;
10751099

@@ -1092,7 +1116,11 @@ pub const XDP_UMEM_PGOFF_COMPLETION_RING: ::c_ulonglong = 0x180000000;
10921116
pub const XSK_UNALIGNED_BUF_OFFSET_SHIFT: ::c_int = 48;
10931117
pub const XSK_UNALIGNED_BUF_ADDR_MASK: ::c_ulonglong = (1 << XSK_UNALIGNED_BUF_OFFSET_SHIFT) - 1;
10941118

1119+
pub const XDP_TXMD_FLAGS_TIMESTAMP: ::__u32 = 1 << 0;
1120+
pub const XDP_TXMD_FLAGS_CHECKSUM: ::__u32 = 1 << 1;
1121+
10951122
pub const XDP_PKT_CONTD: ::__u32 = 1 << 0;
1123+
pub const XDP_TX_METADATA: ::__u32 = 1 << 1;
10961124

10971125
pub const ELFOSABI_ARM_AEABI: u8 = 64;
10981126

src/unix/linux_like/linux/musl/mod.rs

+28
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ s! {
311311
pub chunk_size: ::__u32,
312312
pub headroom: ::__u32,
313313
pub flags: ::__u32,
314+
pub tx_metadata_len: ::__u32,
314315
}
315316

316317
pub struct xdp_umem_reg_v1 {
@@ -345,6 +346,15 @@ s! {
345346
pub options: ::__u32,
346347
}
347348

349+
pub struct xsk_tx_metadata_completion {
350+
pub tx_timestamp: ::__u64,
351+
}
352+
353+
pub struct xsk_tx_metadata_request {
354+
pub csum_start: ::__u16,
355+
pub csum_offset: ::__u16,
356+
}
357+
348358
// netinet/tcp.h
349359

350360
pub struct tcp_info {
@@ -469,6 +479,18 @@ s_no_extra_traits! {
469479
pub ut_addr_v6: [::c_uint; 4],
470480
__unused: [::c_char; 20],
471481
}
482+
483+
#[allow(missing_debug_implementations)]
484+
pub struct xsk_tx_metadata {
485+
pub flags: ::__u64,
486+
pub xsk_tx_metadata_union: __c_anonymous_xsk_tx_metadata_union,
487+
}
488+
489+
#[allow(missing_debug_implementations)]
490+
pub union __c_anonymous_xsk_tx_metadata_union {
491+
pub request: xsk_tx_metadata_request,
492+
pub completion: xsk_tx_metadata_completion,
493+
}
472494
}
473495

474496
cfg_if! {
@@ -859,6 +881,8 @@ pub const XDP_USE_NEED_WAKEUP: ::__u16 = 1 << 3;
859881
pub const XDP_USE_SG: ::__u16 = 1 << 4;
860882

861883
pub const XDP_UMEM_UNALIGNED_CHUNK_FLAG: ::__u32 = 1 << 0;
884+
pub const XDP_UMEM_TX_SW_CSUM: ::__u32 = 1 << 1;
885+
pub const XDP_UMEM_TX_METADATA_LEN: ::__u32 = 1 << 2;
862886

863887
pub const XDP_RING_NEED_WAKEUP: ::__u32 = 1 << 0;
864888

@@ -881,7 +905,11 @@ pub const XDP_UMEM_PGOFF_COMPLETION_RING: ::c_ulonglong = 0x180000000;
881905
pub const XSK_UNALIGNED_BUF_OFFSET_SHIFT: ::c_int = 48;
882906
pub const XSK_UNALIGNED_BUF_ADDR_MASK: ::c_ulonglong = (1 << XSK_UNALIGNED_BUF_OFFSET_SHIFT) - 1;
883907

908+
pub const XDP_TXMD_FLAGS_TIMESTAMP: ::__u32 = 1 << 0;
909+
pub const XDP_TXMD_FLAGS_CHECKSUM: ::__u32 = 1 << 1;
910+
884911
pub const XDP_PKT_CONTD: ::__u32 = 1 << 0;
912+
pub const XDP_TX_METADATA: ::__u32 = 1 << 1;
885913

886914
cfg_if! {
887915
if #[cfg(target_arch = "s390x")] {

0 commit comments

Comments
 (0)