samples/bpf/xdp_sample_user.c

Source file repositories/reference/linux-study-clean/samples/bpf/xdp_sample_user.c

File Facts

System
Linux kernel
Corpus path
samples/bpf/xdp_sample_user.c
Extension
.c
Size
43387 bytes
Lines
1674
Domain
Support Tooling And Documentation
Bucket
samples
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct record {
	__u64 timestamp;
	struct datarec total;
	struct datarec *cpu;
};

struct map_entry {
	struct hlist_node node;
	__u64 pair;
	struct record val;
};

struct stats_record {
	struct record rx_cnt;
	struct record redir_err[XDP_REDIRECT_ERR_MAX];
	struct record kthread;
	struct record exception[XDP_ACTION_MAX];
	struct record devmap_xmit;
	DECLARE_HASHTABLE(xmit_map, 5);
	struct record enq[];
};

struct sample_output {
	struct {
		__u64 rx;
		__u64 redir;
		__u64 drop;
		__u64 drop_xmit;
		__u64 err;
		__u64 xmit;
	} totals;
	struct {
		union {
			__u64 pps;
			__u64 num;
		};
		__u64 drop;
		__u64 err;
	} rx_cnt;
	struct {
		__u64 suc;
		__u64 err;
	} redir_cnt;
	struct {
		__u64 hits;
	} except_cnt;
	struct {
		__u64 pps;
		__u64 drop;
		__u64 err;
		double bavg;
	} xmit_cnt;
};

struct xdp_desc {
	int ifindex;
	__u32 prog_id;
	int flags;
} sample_xdp_progs[32];

struct datarec *sample_mmap[NUM_MAP];
struct bpf_map *sample_map[NUM_MAP];
size_t sample_map_count[NUM_MAP];
enum log_level sample_log_level;
struct sample_output sample_out;
unsigned long sample_interval;
bool sample_err_exp;
int sample_xdp_cnt;
int sample_n_cpus;
int sample_sig_fd;
int sample_mask;

static const char *xdp_redirect_err_names[XDP_REDIRECT_ERR_MAX] = {
	/* Key=1 keeps unknown errors */
	"Success",
	"Unknown",
	"EINVAL",
	"ENETDOWN",
	"EMSGSIZE",
	"EOPNOTSUPP",
	"ENOSPC",
};

/* Keyed from Unknown */
static const char *xdp_redirect_err_help[XDP_REDIRECT_ERR_MAX - 1] = {
	"Unknown error",
	"Invalid redirection",
	"Device being redirected to is down",
	"Packet length too large for device",
	"Operation not supported",

Annotation

Implementation Notes