Helper function bpf_ringbuf_query
Definition
Copyright (c) 2015 The Libbpf Authors. All rights reserved.
Query various characteristics of provided ring buffer. What exactly is queries is determined by flags:
- BPF_RB_AVAIL_DATA: Amount of data not yet consumed.
- BPF_RB_RING_SIZE: The size of ring buffer.
- BPF_RB_CONS_POS: Consumer position (can wrap around).
- BPF_RB_PROD_POS: Producer(s) position (can wrap around).
Data returned is just a momentary snapshot of actual values and could be inaccurate, so this facility should be used to power heuristics and for reporting, not to make 100% correct calculation.
Returns
Requested value, or 0, if flags are not recognized.
static __u64 (* const bpf_ringbuf_query)(void *ringbuf, __u64 flags) = (void *) 134;
Usage
The ringbuf
must be a pointer to the ring buffer map. The flags
argument defines what is being queried. This function can be used to query the amount of data not yet consumed, the size of the ring buffer, the logical position of the consumer, and the logical position of the producer.
Program types
This helper call can be used in the following program types:
- BPF_PROG_TYPE_CGROUP_DEVICE
- BPF_PROG_TYPE_CGROUP_SKB
- BPF_PROG_TYPE_CGROUP_SOCK
- BPF_PROG_TYPE_CGROUP_SOCKOPT
- BPF_PROG_TYPE_CGROUP_SOCK_ADDR
- BPF_PROG_TYPE_CGROUP_SYSCTL
- BPF_PROG_TYPE_FLOW_DISSECTOR
- BPF_PROG_TYPE_KPROBE
- BPF_PROG_TYPE_LSM
- BPF_PROG_TYPE_LWT_IN
- BPF_PROG_TYPE_LWT_OUT
- BPF_PROG_TYPE_LWT_SEG6LOCAL
- BPF_PROG_TYPE_LWT_XMIT
- BPF_PROG_TYPE_PERF_EVENT
- BPF_PROG_TYPE_RAW_TRACEPOINT
- BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
- BPF_PROG_TYPE_SCHED_ACT
- BPF_PROG_TYPE_SCHED_CLS
- BPF_PROG_TYPE_SK_LOOKUP
- BPF_PROG_TYPE_SK_MSG
- BPF_PROG_TYPE_SK_REUSEPORT
- BPF_PROG_TYPE_SK_SKB
- BPF_PROG_TYPE_SOCKET_FILTER
- BPF_PROG_TYPE_SOCK_OPS
- BPF_PROG_TYPE_STRUCT_OPS
- BPF_PROG_TYPE_SYSCALL
- BPF_PROG_TYPE_TRACEPOINT
- BPF_PROG_TYPE_TRACING
- BPF_PROG_TYPE_XDP
Example
long avail_data = 0;
long ring_size = 0;
long cons_pos = 0;
long prod_pos = 0;
avail_data = bpf_ringbuf_query(&my_ringbuf, BPF_RB_AVAIL_DATA);
ring_size = bpf_ringbuf_query(&my_ringbuf, BPF_RB_RING_SIZE);
cons_pos = bpf_ringbuf_query(&my_ringbuf, BPF_RB_CONS_POS);
prod_pos = bpf_ringbuf_query(&my_ringbuf, BPF_RB_PROD_POS);