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