xref: /linux/include/uapi/linux/xdp_diag.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1a36b38aaSBjörn Töpel /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2a36b38aaSBjörn Töpel /*
3a36b38aaSBjörn Töpel  * xdp_diag: interface for query/monitor XDP sockets
4a36b38aaSBjörn Töpel  * Copyright(c) 2019 Intel Corporation.
5a36b38aaSBjörn Töpel  */
6a36b38aaSBjörn Töpel 
7a36b38aaSBjörn Töpel #ifndef _LINUX_XDP_DIAG_H
8a36b38aaSBjörn Töpel #define _LINUX_XDP_DIAG_H
9a36b38aaSBjörn Töpel 
10a36b38aaSBjörn Töpel #include <linux/types.h>
11a36b38aaSBjörn Töpel 
12a36b38aaSBjörn Töpel struct xdp_diag_req {
13a36b38aaSBjörn Töpel 	__u8	sdiag_family;
14a36b38aaSBjörn Töpel 	__u8	sdiag_protocol;
15a36b38aaSBjörn Töpel 	__u16	pad;
16a36b38aaSBjörn Töpel 	__u32	xdiag_ino;
17a36b38aaSBjörn Töpel 	__u32	xdiag_show;
18a36b38aaSBjörn Töpel 	__u32	xdiag_cookie[2];
19a36b38aaSBjörn Töpel };
20a36b38aaSBjörn Töpel 
21a36b38aaSBjörn Töpel struct xdp_diag_msg {
22a36b38aaSBjörn Töpel 	__u8	xdiag_family;
23a36b38aaSBjörn Töpel 	__u8	xdiag_type;
24a36b38aaSBjörn Töpel 	__u16	pad;
25a36b38aaSBjörn Töpel 	__u32	xdiag_ino;
26a36b38aaSBjörn Töpel 	__u32	xdiag_cookie[2];
27a36b38aaSBjörn Töpel };
28a36b38aaSBjörn Töpel 
29a36b38aaSBjörn Töpel #define XDP_SHOW_INFO		(1 << 0) /* Basic information */
30a36b38aaSBjörn Töpel #define XDP_SHOW_RING_CFG	(1 << 1)
31a36b38aaSBjörn Töpel #define XDP_SHOW_UMEM		(1 << 2)
32a36b38aaSBjörn Töpel #define XDP_SHOW_MEMINFO	(1 << 3)
33*0d80cb46SCiara Loftus #define XDP_SHOW_STATS		(1 << 4)
34a36b38aaSBjörn Töpel 
35a36b38aaSBjörn Töpel enum {
36a36b38aaSBjörn Töpel 	XDP_DIAG_NONE,
37a36b38aaSBjörn Töpel 	XDP_DIAG_INFO,
38a36b38aaSBjörn Töpel 	XDP_DIAG_UID,
39a36b38aaSBjörn Töpel 	XDP_DIAG_RX_RING,
40a36b38aaSBjörn Töpel 	XDP_DIAG_TX_RING,
41a36b38aaSBjörn Töpel 	XDP_DIAG_UMEM,
42a36b38aaSBjörn Töpel 	XDP_DIAG_UMEM_FILL_RING,
43a36b38aaSBjörn Töpel 	XDP_DIAG_UMEM_COMPLETION_RING,
44a36b38aaSBjörn Töpel 	XDP_DIAG_MEMINFO,
45*0d80cb46SCiara Loftus 	XDP_DIAG_STATS,
46a36b38aaSBjörn Töpel 	__XDP_DIAG_MAX,
47a36b38aaSBjörn Töpel };
48a36b38aaSBjörn Töpel 
49a36b38aaSBjörn Töpel #define XDP_DIAG_MAX (__XDP_DIAG_MAX - 1)
50a36b38aaSBjörn Töpel 
51a36b38aaSBjörn Töpel struct xdp_diag_info {
52a36b38aaSBjörn Töpel 	__u32	ifindex;
53a36b38aaSBjörn Töpel 	__u32	queue_id;
54a36b38aaSBjörn Töpel };
55a36b38aaSBjörn Töpel 
56a36b38aaSBjörn Töpel struct xdp_diag_ring {
57a36b38aaSBjörn Töpel 	__u32	entries; /*num descs */
58a36b38aaSBjörn Töpel };
59a36b38aaSBjörn Töpel 
60a36b38aaSBjörn Töpel #define XDP_DU_F_ZEROCOPY (1 << 0)
61a36b38aaSBjörn Töpel 
62a36b38aaSBjörn Töpel struct xdp_diag_umem {
63a36b38aaSBjörn Töpel 	__u64	size;
64a36b38aaSBjörn Töpel 	__u32	id;
65a36b38aaSBjörn Töpel 	__u32	num_pages;
66a36b38aaSBjörn Töpel 	__u32	chunk_size;
67a36b38aaSBjörn Töpel 	__u32	headroom;
68a36b38aaSBjörn Töpel 	__u32	ifindex;
69a36b38aaSBjörn Töpel 	__u32	queue_id;
70a36b38aaSBjörn Töpel 	__u32	flags;
71a36b38aaSBjörn Töpel 	__u32	refs;
72a36b38aaSBjörn Töpel };
73a36b38aaSBjörn Töpel 
74*0d80cb46SCiara Loftus struct xdp_diag_stats {
75*0d80cb46SCiara Loftus 	__u64	n_rx_dropped;
76*0d80cb46SCiara Loftus 	__u64	n_rx_invalid;
77*0d80cb46SCiara Loftus 	__u64	n_rx_full;
78*0d80cb46SCiara Loftus 	__u64	n_fill_ring_empty;
79*0d80cb46SCiara Loftus 	__u64	n_tx_invalid;
80*0d80cb46SCiara Loftus 	__u64	n_tx_ring_empty;
81*0d80cb46SCiara Loftus };
82*0d80cb46SCiara Loftus 
83a36b38aaSBjörn Töpel #endif /* _LINUX_XDP_DIAG_H */
84