xdp_prog_func
The main function in the program is xdp_prog_func, which is the actual XDP hook function.
This function is executed whenever a packet passes through the XDP hook.
The function first retrieves the data record associated with the XDP_PASS action from the xdp_stats_map using the
bpf_map_lookup_elem()function.If the lookup is successful, the function increments the packet counter associated with the
XDP_PASSaction using an atomic add operation(lock_xadd()).
common_kern_user.h
The common_kern_user.h header file is used by both the kernel-side BPF programs and userspace programs to share common structures and definitions.
struct datarec
In this specific case, the struct datarec is defined in common_kern_user.h as a data record that will be stored in a BPF map.
- It has a single field
rx_packetsof type__u64, which is an unsigned 64-bit integer that represents the number of received packets.
XDP_ACTION_MAX
The XDP_ACTION_MAX is also defined in common_kern_user.h and represents the maximum number of actions that can be performed by an XDP (eXpress Data Path) program.
- It is defined as
XDP_REDIRECT + 1, whereXDP_REDIRECT. XDP_REDIRECTis a predefined constant that represents the maximum value of the enum xdp_action enumeration, which is an enum used to define different actions that can be taken by an XDP (eXpress Data Path) program in the Linux kernel.
enum xdp_action {
XDP_ABORTED = 0,
XDP_DROP,
XDP_PASS,
XDP_TX,
XDP_REDIRECT,
};
- In the provided code, the value of
XDP_REDIRECTis used as the maximum number of entries in thexdp_stats_mapBPF array map, which is used to store statistics for each possible XDP action. - By setting
XDP_REDIRECT + 1as the maximum number of entries, thexdp_stats_maparray map will have enough space to store statistics for all possible XDP actions, includingXDP_REDIRECT. - Therefore, the value of
XDP_REDIRECTis used to determine the size of the array map and ensure that it has enough entries to accommodate all possible actions.