Crates.io | abpfiff |
lib.rs | abpfiff |
version | 0.1.1-alpha.with.debug |
source | src |
created_at | 2023-01-18 18:59:07.540701 |
updated_at | 2024-02-19 21:41:23.365807 |
description | Interaction with Linux BPF(2). No libbpf-sys. |
homepage | |
repository | https://github.com/HeroicKatora/abpfiff |
max_upload_size | |
id | 761953 |
size | 70,612 |
A library to interact with BPF kernel state.
Just simple, pure idiomatic Rust-based bindings to manage user-space state necessary for interacting with the kernel system. Some little helpers are added but not beyond the minimalism (avoids generics or extra dependencies).
The name is bacronym for:
A BPF InterFace Foundation
In decreasing order of priority.
Non-Goals:
libbpf
async
style of implementation. It should be possible to achieve all
functionality with synchronous code. However, optional concurrency may be
introduced with async
where efficient.Note that the implementation does not need link directly against any libc
functions. Rather, it defines an expected interface in terms of free C
functions (sys::SysVTable
). The caller can fill it with functions loaded
statically or dynamically from a linker but also with another equivalent
implementation. Unfortunately, the data type definitions will have to be
compatible with the platform libc
in both cases, but it is a start to avoid
the hell of LD_PRELOAD
as a stupid, global mechanism for overwriting them.
Depending on libbpf
is quite heavy when only a fraction of it is needed. In
particular, connecting together networking functionality does not depend on
writing BPF. Also, the library is riddled with C-isms:
unknown or highly implicit thread-safety
synchronous resources opened and closed in rapid succession just to hide that
resource management complexity from the caller. No really, a new netlink
socket is created, configured, loop polled and closed for literally each
libbpf_netlink_send_recv
that's hidden in a lot of operations.
Code that looks like so:
static int libbpf_netlink_send_recv(...) {
/* ... */
req->nh.nlmsg_seq = time(NULL);
They are fucking with us, no?