Skip to content

Commit 6bc41c9

Browse files
committed
update/add missing AF_XDP structs & constants
1 parent 93b49b1 commit 6bc41c9

File tree

5 files changed

+100
-2
lines changed

5 files changed

+100
-2
lines changed

Diff for: libc-test/build.rs

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

38183818
// FIXME: Requires >= 5.4 kernel headers.
38193819
// Everything that uses install-musl.sh has 4.19 kernel headers.
3820-
"xdp_umem_reg" | "xdp_ring_offset" | "xdp_mmap_offsets" if musl => true,
3820+
"xdp_ring_offset" | "xdp_mmap_offsets" if musl => true,
3821+
3822+
// FIXME: Requires >= 6.8 kernel headers.
3823+
// A field was added in 6.8.
3824+
// https://github.com/torvalds/linux/commit/341ac980eab90ac1f6c22ee9f9da83ed9604d899
3825+
// The previous version of the struct was removed in 6.11 due to a bug.
3826+
// https://github.com/torvalds/linux/commit/32654bbd6313b4cfc82297e6634fa9725c3c900f
3827+
"xdp_umem_reg" => true,
38213828

38223829
// FIXME: Requires >= 5.9 kernel headers.
38233830
// Everything that uses install-musl.sh has 4.19 kernel headers.
38243831
"xdp_statistics" if musl => true,
38253832

3833+
// FIXME: Requires >= 6.8 kernel headers.
3834+
"xsk_tx_metadata"
3835+
| "__c_anonymous_xsk_tx_metadata_union"
3836+
| "xsk_tx_metadata_request"
3837+
| "xsk_tx_metadata_completion" => true,
3838+
38263839
// A new field was added in kernel 5.4, this is the old version for backwards compatibility.
38273840
// https://github.com/torvalds/linux/commit/77cd0d7b3f257fd0e3096b4fdcff1a7d38e99e10
38283841
"xdp_ring_offset_v1" | "xdp_mmap_offsets_v1" => true,
@@ -4267,6 +4280,23 @@ fn test_linux(target: &str) {
42674280
true
42684281
}
42694282

4283+
// FIXME: Requires >= 6.8 kernel headers.
4284+
"XDP_UMEM_TX_SW_CSUM"
4285+
| "XDP_TXMD_FLAGS_TIMESTAMP"
4286+
| "XDP_TXMD_FLAGS_CHECKSUM"
4287+
| "XDP_TX_METADATA"
4288+
=>
4289+
{
4290+
true
4291+
}
4292+
4293+
// FIXME: Requires >= 6.11 kernel headers.
4294+
"XDP_UMEM_TX_METADATA_LEN"
4295+
=>
4296+
{
4297+
true
4298+
}
4299+
42704300
// FIXME: Requires >= 6.6 kernel headers.
42714301
"SYS_fchmodat2" => true,
42724302

@@ -4524,7 +4554,9 @@ fn test_linux(target: &str) {
45244554
(musl && struct_ == "mcontext_t" && field == "__extcontext" && loongarch64) ||
45254555
// FIXME(#4121): a new field was added from `f_spare`
45264556
(struct_ == "statvfs" && field == "__f_spare") ||
4527-
(struct_ == "statvfs64" && field == "__f_spare")
4557+
(struct_ == "statvfs64" && field == "__f_spare") ||
4558+
// the `xsk_tx_metadata_union` field is an anonymous union
4559+
(struct_ == "xsk_tx_metadata" && field == "xsk_tx_metadata_union")
45284560
});
45294561

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

Diff for: libc-test/semver/linux-gnu.txt

+5
Original file line numberDiff line numberDiff line change
@@ -489,12 +489,17 @@ XDP_RING_NEED_WAKEUP
489489
XDP_RX_RING
490490
XDP_SHARED_UMEM
491491
XDP_STATISTICS
492+
XDP_TXMD_FLAGS_CHECKSUM
493+
XDP_TXMD_FLAGS_TIMESTAMP
494+
XDP_TX_METADATA
492495
XDP_TX_RING
493496
XDP_UMEM_COMPLETION_RING
494497
XDP_UMEM_FILL_RING
495498
XDP_UMEM_PGOFF_COMPLETION_RING
496499
XDP_UMEM_PGOFF_FILL_RING
497500
XDP_UMEM_REG
501+
XDP_UMEM_TX_METADATA_LEN
502+
XDP_UMEM_TX_SW_CSUM
498503
XDP_UMEM_UNALIGNED_CHUNK_FLAG
499504
XDP_USE_NEED_WAKEUP
500505
XDP_USE_SG

Diff for: libc-test/semver/linux-musl.txt

+5
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,17 @@ XDP_RING_NEED_WAKEUP
4848
XDP_RX_RING
4949
XDP_SHARED_UMEM
5050
XDP_STATISTICS
51+
XDP_TXMD_FLAGS_CHECKSUM
52+
XDP_TXMD_FLAGS_TIMESTAMP
53+
XDP_TX_METADATA
5154
XDP_TX_RING
5255
XDP_UMEM_COMPLETION_RING
5356
XDP_UMEM_FILL_RING
5457
XDP_UMEM_PGOFF_COMPLETION_RING
5558
XDP_UMEM_PGOFF_FILL_RING
5659
XDP_UMEM_REG
60+
XDP_UMEM_TX_METADATA_LEN
61+
XDP_UMEM_TX_SW_CSUM
5762
XDP_UMEM_UNALIGNED_CHUNK_FLAG
5863
XDP_USE_NEED_WAKEUP
5964
XDP_USE_SG

Diff for: src/unix/linux_like/linux/gnu/mod.rs

+28
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ s! {
401401
pub chunk_size: ::__u32,
402402
pub headroom: ::__u32,
403403
pub flags: ::__u32,
404+
pub tx_metadata_len: ::__u32,
404405
}
405406

406407
pub struct xdp_umem_reg_v1 {
@@ -435,6 +436,15 @@ s! {
435436
pub options: ::__u32,
436437
}
437438

439+
pub struct xsk_tx_metadata_completion {
440+
pub tx_timestamp: ::__u64,
441+
}
442+
443+
pub struct xsk_tx_metadata_request {
444+
pub csum_start: ::__u16,
445+
pub csum_offset: ::__u16,
446+
}
447+
438448
pub struct iocb {
439449
pub aio_data: ::__u64,
440450
#[cfg(target_endian = "little")]
@@ -656,6 +666,18 @@ s_no_extra_traits! {
656666
pub ut_addr_v6: [i32; 4],
657667
__glibc_reserved: [::c_char; 20],
658668
}
669+
670+
#[allow(missing_debug_implementations)]
671+
pub struct xsk_tx_metadata {
672+
pub flags: ::__u64,
673+
pub xsk_tx_metadata_union: __c_anonymous_xsk_tx_metadata_union,
674+
}
675+
676+
#[allow(missing_debug_implementations)]
677+
pub union __c_anonymous_xsk_tx_metadata_union {
678+
pub request: xsk_tx_metadata_request,
679+
pub completion: xsk_tx_metadata_completion,
680+
}
659681
}
660682

661683
cfg_if! {
@@ -1087,6 +1109,8 @@ pub const XDP_USE_NEED_WAKEUP: ::__u16 = 1 << 3;
10871109
pub const XDP_USE_SG: ::__u16 = 1 << 4;
10881110

10891111
pub const XDP_UMEM_UNALIGNED_CHUNK_FLAG: ::__u32 = 1 << 0;
1112+
pub const XDP_UMEM_TX_SW_CSUM: ::__u32 = 1 << 1;
1113+
pub const XDP_UMEM_TX_METADATA_LEN: ::__u32 = 1 << 2;
10901114

10911115
pub const XDP_RING_NEED_WAKEUP: ::__u32 = 1 << 0;
10921116

@@ -1109,7 +1133,11 @@ pub const XDP_UMEM_PGOFF_COMPLETION_RING: ::c_ulonglong = 0x180000000;
11091133
pub const XSK_UNALIGNED_BUF_OFFSET_SHIFT: ::c_int = 48;
11101134
pub const XSK_UNALIGNED_BUF_ADDR_MASK: ::c_ulonglong = (1 << XSK_UNALIGNED_BUF_OFFSET_SHIFT) - 1;
11111135

1136+
pub const XDP_TXMD_FLAGS_TIMESTAMP: ::__u32 = 1 << 0;
1137+
pub const XDP_TXMD_FLAGS_CHECKSUM: ::__u32 = 1 << 1;
1138+
11121139
pub const XDP_PKT_CONTD: ::__u32 = 1 << 0;
1140+
pub const XDP_TX_METADATA: ::__u32 = 1 << 1;
11131141

11141142
pub const ELFOSABI_ARM_AEABI: u8 = 64;
11151143

Diff for: 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 {
@@ -482,6 +492,18 @@ s_no_extra_traits! {
482492
pub ut_addr_v6: [::c_uint; 4],
483493
__unused: [::c_char; 20],
484494
}
495+
496+
#[allow(missing_debug_implementations)]
497+
pub struct xsk_tx_metadata {
498+
pub flags: ::__u64,
499+
pub xsk_tx_metadata_union: __c_anonymous_xsk_tx_metadata_union,
500+
}
501+
502+
#[allow(missing_debug_implementations)]
503+
pub union __c_anonymous_xsk_tx_metadata_union {
504+
pub request: xsk_tx_metadata_request,
505+
pub completion: xsk_tx_metadata_completion,
506+
}
485507
}
486508

487509
cfg_if! {
@@ -887,6 +909,8 @@ pub const XDP_USE_NEED_WAKEUP: ::__u16 = 1 << 3;
887909
pub const XDP_USE_SG: ::__u16 = 1 << 4;
888910

889911
pub const XDP_UMEM_UNALIGNED_CHUNK_FLAG: ::__u32 = 1 << 0;
912+
pub const XDP_UMEM_TX_SW_CSUM: ::__u32 = 1 << 1;
913+
pub const XDP_UMEM_TX_METADATA_LEN: ::__u32 = 1 << 2;
890914

891915
pub const XDP_RING_NEED_WAKEUP: ::__u32 = 1 << 0;
892916

@@ -909,7 +933,11 @@ pub const XDP_UMEM_PGOFF_COMPLETION_RING: ::c_ulonglong = 0x180000000;
909933
pub const XSK_UNALIGNED_BUF_OFFSET_SHIFT: ::c_int = 48;
910934
pub const XSK_UNALIGNED_BUF_ADDR_MASK: ::c_ulonglong = (1 << XSK_UNALIGNED_BUF_OFFSET_SHIFT) - 1;
911935

936+
pub const XDP_TXMD_FLAGS_TIMESTAMP: ::__u32 = 1 << 0;
937+
pub const XDP_TXMD_FLAGS_CHECKSUM: ::__u32 = 1 << 1;
938+
912939
pub const XDP_PKT_CONTD: ::__u32 = 1 << 0;
940+
pub const XDP_TX_METADATA: ::__u32 = 1 << 1;
913941

914942
pub const _CS_V6_ENV: ::c_int = 1148;
915943
pub const _CS_V7_ENV: ::c_int = 1149;

0 commit comments

Comments
 (0)