mirror of
				https://github.com/xdp-project/bpf-examples.git
				synced 2024-05-06 15:54:53 +00:00 
			
		
		
		
	AF_XDP-interaction: Improve comments explaning attributes
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
		@@ -21,22 +21,25 @@ struct {
 | 
				
			|||||||
} xdp_stats_map SEC(".maps");
 | 
					} xdp_stats_map SEC(".maps");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This struct is stored in the XDP 'data_meta' area, which is located
 | 
					 * The xdp_hints_xxx struct's are stored in the XDP 'data_meta' area,
 | 
				
			||||||
 * just in-front-of the raw packet payload data.
 | 
					 * which is located just in-front-of the raw packet payload data.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Explaining the struct attribute's:
 | 
				
			||||||
 | 
					 * ----------------------------------
 | 
				
			||||||
 | 
					 * The struct must be 4 byte aligned (kernel requirement), which here
 | 
				
			||||||
 | 
					 * is enforced by the struct __attribute__((aligned(4))).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * To avoid any C-struct padding attribute "packed" is used.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The struct must be 4 byte aligned, which here is enforced by the
 | 
					 | 
				
			||||||
 * struct __attribute__((aligned(4))).
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct xdp_hints_mark {
 | 
					 | 
				
			||||||
	__u32 mark;
 | 
					 | 
				
			||||||
	__u32 btf_id;
 | 
					 | 
				
			||||||
} __attribute__((aligned(4))) __attribute__((packed));
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * NOTICE: Do NOT define __attribute__((preserve_access_index)) here,
 | 
					 * NOTICE: Do NOT define __attribute__((preserve_access_index)) here,
 | 
				
			||||||
 * as libbpf will try to find a matching kernel data-structure,
 | 
					 * as libbpf will try to find a matching kernel data-structure,
 | 
				
			||||||
 * e.g. it will cause BPF-prog loading step to fail (with invalid func
 | 
					 * e.g. it will cause BPF-prog loading step to fail (with invalid func
 | 
				
			||||||
 * unknown#195896080 which is 0xbad2310 in hex for "bad relo").
 | 
					 * unknown#195896080 which is 0xbad2310 in hex for "bad relo").
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					struct xdp_hints_mark {
 | 
				
			||||||
 | 
						__u32 mark;
 | 
				
			||||||
 | 
						__u32 btf_id;
 | 
				
			||||||
 | 
					} __attribute__((aligned(4))) __attribute__((packed));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct xdp_hints_rx_time {
 | 
					struct xdp_hints_rx_time {
 | 
				
			||||||
	__u64 rx_ktime;
 | 
						__u64 rx_ktime;
 | 
				
			||||||
@@ -68,6 +71,7 @@ int meta_add_rx_time(struct xdp_md *ctx)
 | 
				
			|||||||
		return -2;
 | 
							return -2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta->rx_ktime = bpf_ktime_get_ns();
 | 
						meta->rx_ktime = bpf_ktime_get_ns();
 | 
				
			||||||
 | 
						/* Userspace can identify struct used by BTF id */
 | 
				
			||||||
	meta->btf_id = bpf_core_type_id_local(struct xdp_hints_rx_time);
 | 
						meta->btf_id = bpf_core_type_id_local(struct xdp_hints_rx_time);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
@@ -100,7 +104,6 @@ int xdp_sock_prog(struct xdp_md *ctx)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int index = ctx->rx_queue_index;
 | 
						int index = ctx->rx_queue_index;
 | 
				
			||||||
	__u32 *pkt_count;
 | 
						__u32 *pkt_count;
 | 
				
			||||||
	void *data;
 | 
					 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pkt_count = bpf_map_lookup_elem(&xdp_stats_map, &index);
 | 
						pkt_count = bpf_map_lookup_elem(&xdp_stats_map, &index);
 | 
				
			||||||
@@ -108,6 +111,7 @@ int xdp_sock_prog(struct xdp_md *ctx)
 | 
				
			|||||||
		return XDP_ABORTED;
 | 
							return XDP_ABORTED;
 | 
				
			||||||
	__u64 cnt = (*pkt_count)++;
 | 
						__u64 cnt = (*pkt_count)++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Notice how two different xdp_hints meta-data are used */
 | 
				
			||||||
	if ((cnt % 2) == 0) {
 | 
						if ((cnt % 2) == 0) {
 | 
				
			||||||
		err = meta_add_rx_time(ctx);
 | 
							err = meta_add_rx_time(ctx);
 | 
				
			||||||
		if (err < 0)
 | 
							if (err < 0)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user