Alessandro Decina
f1da541234
The futures crate is only needed when async is enabled
4 years ago
Alessandro Decina
14c98455a9
btf: remove unused methods
4 years ago
Alessandro Decina
a5e19fc4ac
Fix warnings
4 years ago
Alessandro Decina
fdc4dad5ff
maps: add AsyncPerfMap
...
When the async_tokio or async_std features are enabled, AsyncPerfMap
provides an async version of PerfMap which returns a future from
read_events()
4 years ago
Alessandro Decina
4be0c45305
perf_map: split in sub modules
4 years ago
Alessandro Decina
95a24c6f8b
perf_map: implement AsRawFd
4 years ago
Alessandro Decina
5d6fe8bdf4
Add IOError variants to PerfMapError and PerfBufferError
4 years ago
Alessandro Decina
b9be2f1a9b
Make aya::maps::perf_map public
4 years ago
Alessandro Decina
160e0be6d6
Change the suffix of errors from *Failed to *Error
4 years ago
Alessandro Decina
d4e282535b
bpf, perf_map: make maps usable from multiple threads
...
Change PerfMap API so that individual buffers can be read from multiple
threads.
Change the way maps are stored in the `Bpf` struct from RefCell to a
custom RwLock.
4 years ago
Alessandro Decina
d7c91efb2d
Make online_cpus() util public
4 years ago
Alessandro Decina
2215e202f4
Generate arch specific bindings
...
Currently x86_64 and aarch64 are supported
4 years ago
Alessandro Decina
1de392964b
Add src/generated/netlink_bindings.rs to repo
4 years ago
Alessandro Decina
af8f769b50
Turn the project into a workspace, move code under aya/
4 years ago
Alessandro Decina
c110394aaa
xdp: add netlink based implementation for kernels < 5.7
...
bpf_link_create was introduced in linux 5.7, so use netlink to configure
XDP on older kernels.
4 years ago
Alessandro Decina
9614132724
Implement detaching from socket filters
4 years ago
Alessandro Decina
4bd0cde199
sys: add kernel_version() util to get the running kernel version
4 years ago
Alessandro Decina
8f5a17b542
Rename the syscalls module to sys
4 years ago
Alessandro Decina
e83a26b307
probe: sysfs helpers don't need to be public
4 years ago
Alessandro Decina
54637eab04
Improve relocation errors
...
Use BpfError::RelocationError for both maps and BTF relocations. The
error includes the name of the program that failed, and the source error
stored as Box<dyn Error>.
This hides the implementation details of the source errors - which are
unrecoverable anyway - while still allowing fine grained error messages.
4 years ago
Alessandro Decina
37c3a198c4
Rework the error hierarchy
...
Add BpfError::IO and BpfError::BtfError and remove the nested IO and
BtfError variants inside ParseError and RelocationError
4 years ago
Alessandro Decina
96db24e285
Untangle map relocation from BTF relocation
4 years ago
Alessandro Decina
88d49927c2
btf: rename BtfRelocationError to RelocationError
4 years ago
Alessandro Decina
3b668d9274
Fix some warnings
4 years ago
Alessandro Decina
65d520bbd7
Support non-native endianness
4 years ago
Alessandro Decina
5b8def7b69
Refactor ELF parser a bit and add more tests
4 years ago
Alessandro Decina
fd0ba2355d
btf: remove object::pod usage
4 years ago
Alessandro Decina
4b65da66ea
btf: check array bounds while doing candidate matching
4 years ago
Alessandro Decina
b49a627cac
btf: implement candidate matching for enums
4 years ago
Alessandro Decina
08d5fa6059
Initial BTF support
...
Still missing a couple of things but the bulk is there
4 years ago
Alessandro Decina
b75efc8efe
bpf: fix loading socket filters from obj files
4 years ago
Alessandro Decina
a8c212377f
bpf: make program() and program_mut() return inner program types
...
program() and program_mut() are now generic and can return the inner
program type, which is what you want 99.999% of the time, eg:
let prog = bpf.program_mut::<&mut Xdp>("foo")?.unwrap();
prog.load()?;
prog.attach("eth0")?;
The methods will fail if the requested program is not of the expected
type (eg if you try to retrieve a kprobe as an xdp program).
4 years ago
Alessandro Decina
4dc01f64dd
bpf: make map() and map_mut() optionally return concrete map types
...
map() and map_mut() used to return Ref<Map>, then to convert to a concrete
type you had to:
let mut perf_map: PerfMap<_> = bpf.map_mut("PERF_MAP").unwrap().try_into()?;;
But the base Map type is pretty much only useful internally. This change
makes map() and map_mut() use TryInto internally, so that now
conversions can can be done with:
let mut perf_map: PerfMap<_> = bpf.map_mut("PERF_MAP")?.unwrap();
4 years ago
Alessandro Decina
a41edbca2c
maps: add ProgramArray
...
ProgramArray is a wrapper around BPF_MAP_TYPE_PROG_ARRAY maps. Can be
used to setup jump tables for bpf_tail_call().
4 years ago
Alessandro Decina
f7cdd2e059
maps: move maps inside RefCells
4 years ago
Alessandro Decina
77fa7d857c
syscalls: add Pod bound on keys
4 years ago
Alessandro Decina
83f57447dc
maps: move MapsIter/MapsKeys from hash_map.rs to the parent module
4 years ago
Alessandro Decina
72e43aae1a
maps: hash_map: make MapKeys and MapIter generic
...
Introduce IterableMap trait and make MapKeys/MapIter use that.
4 years ago
Alessandro Decina
70fab20193
maps: hash map: remove Clone bound
4 years ago
Alessandro Decina
b0b83cbd8c
Use own Pod trait
4 years ago
Alessandro Decina
561b0015bb
programs: xdp: support detaching with FdLink
4 years ago
Alessandro Decina
0f0bc795e3
programs: add FdLink
...
FdLink is a generic Link impl that calls close() on the given fd.
4 years ago
Alessandro Decina
84afa318c8
Formatting fixes
4 years ago
Alessandro Decina
15be301f8c
Initial commit
4 years ago