Skip to content

Helper function bpf_ringbuf_reserve

v5.8

Definition

Copyright (c) 2015 The Libbpf Authors. All rights reserved.

Reserve size bytes of payload in a ring buffer ringbuf. flags must be 0.

Returns

Valid pointer with size bytes of memory available; NULL, otherwise.

static void *(* const bpf_ringbuf_reserve)(void *ringbuf, __u64 size, __u64 flags) = (void *) 131;

Usage

The rinfbuf argument must be a pointer to a ring buffer definition. The size argument specifies the number of bytes to be reserved in the ring buffer. And the flags argument must be set to 0.

This function is generally used in combination with a struct that defines the structure of the data stored in the ring buffer. Hence, in this case, the size argument would be set to the size of the struct. The function returns a pointer to the reserved memory, which can be used to write data to the ring buffer. See the example below for more details.

The verifier enforces the constraint that for every call to bpf_ringbuf_reserve, a subsequent bpf_ringbuf_submit or bpf_ringbuf_discard must be called. Check bpf_ringbuf_submit and bpf_ringbuf_discard for more information.

Program types

This helper call can be used in the following program types:

Example

struct ringbuf_data *rb_data = bpf_ringbuf_reserve(&my_ringbuf, sizeof(struct ringbuf_data), 0);
if (! rb_data) {
    // if bpf_ringbuf_reserve fails, print an error message and return
    bpf_printk("bpf_ringbuf_reserve failed\n");
    return 1;
}

Where my_ringbuf is the pointer to the ring buffer, and ringbuf_data is a struct that defines the structure of the data to be stored in the ring buffer.