blob: 7201e06a83e020a7ed83ea8a10ebf97e039c4bc8 [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Christopher Ferris9ce28842018-10-25 12:11:39 -07007#ifndef _LINUX_IF_XDP_H
8#define _LINUX_IF_XDP_H
9#include <linux/types.h>
10#define XDP_SHARED_UMEM (1 << 0)
11#define XDP_COPY (1 << 1)
12#define XDP_ZEROCOPY (1 << 2)
Christopher Ferris9584fa42019-12-09 15:36:13 -080013#define XDP_USE_NEED_WAKEUP (1 << 3)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070014#define XDP_USE_SG (1 << 4)
Christopher Ferris9584fa42019-12-09 15:36:13 -080015#define XDP_UMEM_UNALIGNED_CHUNK_FLAG (1 << 0)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070016#define XDP_UMEM_TX_SW_CSUM (1 << 1)
Christopher Ferris63fcca42024-09-26 01:12:10 +000017#define XDP_UMEM_TX_METADATA_LEN (1 << 2)
Christopher Ferris9ce28842018-10-25 12:11:39 -070018struct sockaddr_xdp {
19 __u16 sxdp_family;
20 __u16 sxdp_flags;
21 __u32 sxdp_ifindex;
22 __u32 sxdp_queue_id;
23 __u32 sxdp_shared_umem_fd;
24};
Christopher Ferris9584fa42019-12-09 15:36:13 -080025#define XDP_RING_NEED_WAKEUP (1 << 0)
Christopher Ferris9ce28842018-10-25 12:11:39 -070026struct xdp_ring_offset {
27 __u64 producer;
28 __u64 consumer;
29 __u64 desc;
Christopher Ferris9584fa42019-12-09 15:36:13 -080030 __u64 flags;
Christopher Ferris9ce28842018-10-25 12:11:39 -070031};
32struct xdp_mmap_offsets {
33 struct xdp_ring_offset rx;
34 struct xdp_ring_offset tx;
35 struct xdp_ring_offset fr;
36 struct xdp_ring_offset cr;
37};
38#define XDP_MMAP_OFFSETS 1
39#define XDP_RX_RING 2
40#define XDP_TX_RING 3
41#define XDP_UMEM_REG 4
42#define XDP_UMEM_FILL_RING 5
43#define XDP_UMEM_COMPLETION_RING 6
44#define XDP_STATISTICS 7
Christopher Ferrisb8a95e22019-10-02 18:29:20 -070045#define XDP_OPTIONS 8
Christopher Ferris9ce28842018-10-25 12:11:39 -070046struct xdp_umem_reg {
47 __u64 addr;
48 __u64 len;
49 __u32 chunk_size;
50 __u32 headroom;
Christopher Ferris9584fa42019-12-09 15:36:13 -080051 __u32 flags;
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070052 __u32 tx_metadata_len;
Christopher Ferris9ce28842018-10-25 12:11:39 -070053};
54struct xdp_statistics {
55 __u64 rx_dropped;
56 __u64 rx_invalid_descs;
57 __u64 tx_invalid_descs;
Christopher Ferris25c18d42020-10-14 17:42:58 -070058 __u64 rx_ring_full;
59 __u64 rx_fill_ring_empty_descs;
60 __u64 tx_ring_empty_descs;
Christopher Ferris9ce28842018-10-25 12:11:39 -070061};
Christopher Ferrisb8a95e22019-10-02 18:29:20 -070062struct xdp_options {
63 __u32 flags;
64};
65#define XDP_OPTIONS_ZEROCOPY (1 << 0)
Christopher Ferris9ce28842018-10-25 12:11:39 -070066#define XDP_PGOFF_RX_RING 0
67#define XDP_PGOFF_TX_RING 0x80000000
68#define XDP_UMEM_PGOFF_FILL_RING 0x100000000ULL
69#define XDP_UMEM_PGOFF_COMPLETION_RING 0x180000000ULL
Christopher Ferris9584fa42019-12-09 15:36:13 -080070#define XSK_UNALIGNED_BUF_OFFSET_SHIFT 48
71#define XSK_UNALIGNED_BUF_ADDR_MASK ((1ULL << XSK_UNALIGNED_BUF_OFFSET_SHIFT) - 1)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070072#define XDP_TXMD_FLAGS_TIMESTAMP (1 << 0)
73#define XDP_TXMD_FLAGS_CHECKSUM (1 << 1)
74struct xsk_tx_metadata {
75 __u64 flags;
76 union {
77 struct {
78 __u16 csum_start;
79 __u16 csum_offset;
80 } request;
81 struct {
82 __u64 tx_timestamp;
83 } completion;
84 };
85};
Christopher Ferris9ce28842018-10-25 12:11:39 -070086struct xdp_desc {
87 __u64 addr;
88 __u32 len;
89 __u32 options;
90};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070091#define XDP_PKT_CONTD (1 << 0)
Christopher Ferrisb830ddf2024-03-28 11:48:08 -070092#define XDP_TX_METADATA (1 << 1)
Christopher Ferris9ce28842018-10-25 12:11:39 -070093#endif