Skip to content

Helper function bpf_ringbuf_output

v5.8

Definition

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

Copy size bytes from data into a ring buffer ringbuf. If BPF_RB_NO_WAKEUP is specified in flags, no notification of new data availability is sent. If BPF_RB_FORCE_WAKEUP is specified in flags, notification of new data availability is sent unconditionally. If 0 is specified in flags, an adaptive notification of new data availability is sent.

An adaptive notification is a notification sent whenever the user-space process has caught up and consumed all available payloads. In case the user-space process is still processing a previous payload, then no notification is needed as it will process the newly added payload automatically.

Returns

0 on success, or a negative error in case of failure.

static long (* const bpf_ringbuf_output)(void *ringbuf, void *data, __u64 size, __u64 flags) = (void *) 130;

Usage

The ringbuf must be a pointer to the ring buffer map. data is a pointer to the data that needs to be copied into the ring buffer. The size argument specifies the number of bytes to be copied. The flags argument defines how the notification of the new data availability should be handled.

This function incurs an extra memory copy operation in comparison to using bpf_ringbuf_reserve/bpf_ringbuf_submit/bpf_ringbuf_discard, but allows submitting records of lengths unknown to the verifier.

Program types

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

Example

// Copy data into the ring buffer
bpf_ringbuf_output(&my_ringbuf, &my_data, sizeof(my_data), 0);