mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-27 19:59:06 +08:00
libbpf: Add libbpf support to batch ops
Added four libbpf API functions to support map batch operations: . int bpf_map_delete_batch( ... ) . int bpf_map_lookup_batch( ... ) . int bpf_map_lookup_and_delete_batch( ... ) . int bpf_map_update_batch( ... ) Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200115184308.162644-8-brianvv@google.com
This commit is contained in:
committed by
Andrii Nakryiko
parent
1e51491d05
commit
d91f681d3b
58
src/bpf.c
58
src/bpf.c
@@ -452,6 +452,64 @@ int bpf_map_freeze(int fd)
|
||||
return sys_bpf(BPF_MAP_FREEZE, &attr, sizeof(attr));
|
||||
}
|
||||
|
||||
static int bpf_map_batch_common(int cmd, int fd, void *in_batch,
|
||||
void *out_batch, void *keys, void *values,
|
||||
__u32 *count,
|
||||
const struct bpf_map_batch_opts *opts)
|
||||
{
|
||||
union bpf_attr attr = {};
|
||||
int ret;
|
||||
|
||||
if (!OPTS_VALID(opts, bpf_map_batch_opts))
|
||||
return -EINVAL;
|
||||
|
||||
memset(&attr, 0, sizeof(attr));
|
||||
attr.batch.map_fd = fd;
|
||||
attr.batch.in_batch = ptr_to_u64(in_batch);
|
||||
attr.batch.out_batch = ptr_to_u64(out_batch);
|
||||
attr.batch.keys = ptr_to_u64(keys);
|
||||
attr.batch.values = ptr_to_u64(values);
|
||||
attr.batch.count = *count;
|
||||
attr.batch.elem_flags = OPTS_GET(opts, elem_flags, 0);
|
||||
attr.batch.flags = OPTS_GET(opts, flags, 0);
|
||||
|
||||
ret = sys_bpf(cmd, &attr, sizeof(attr));
|
||||
*count = attr.batch.count;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int bpf_map_delete_batch(int fd, void *keys, __u32 *count,
|
||||
const struct bpf_map_batch_opts *opts)
|
||||
{
|
||||
return bpf_map_batch_common(BPF_MAP_DELETE_BATCH, fd, NULL,
|
||||
NULL, keys, NULL, count, opts);
|
||||
}
|
||||
|
||||
int bpf_map_lookup_batch(int fd, void *in_batch, void *out_batch, void *keys,
|
||||
void *values, __u32 *count,
|
||||
const struct bpf_map_batch_opts *opts)
|
||||
{
|
||||
return bpf_map_batch_common(BPF_MAP_LOOKUP_BATCH, fd, in_batch,
|
||||
out_batch, keys, values, count, opts);
|
||||
}
|
||||
|
||||
int bpf_map_lookup_and_delete_batch(int fd, void *in_batch, void *out_batch,
|
||||
void *keys, void *values, __u32 *count,
|
||||
const struct bpf_map_batch_opts *opts)
|
||||
{
|
||||
return bpf_map_batch_common(BPF_MAP_LOOKUP_AND_DELETE_BATCH,
|
||||
fd, in_batch, out_batch, keys, values,
|
||||
count, opts);
|
||||
}
|
||||
|
||||
int bpf_map_update_batch(int fd, void *keys, void *values, __u32 *count,
|
||||
const struct bpf_map_batch_opts *opts)
|
||||
{
|
||||
return bpf_map_batch_common(BPF_MAP_UPDATE_BATCH, fd, NULL, NULL,
|
||||
keys, values, count, opts);
|
||||
}
|
||||
|
||||
int bpf_obj_pin(int fd, const char *pathname)
|
||||
{
|
||||
union bpf_attr attr;
|
||||
|
||||
Reference in New Issue
Block a user