Commit Graph

1258 Commits (9f0e83726ff3a03724e82a3e68e4ecb6398c8f28)
 

Author SHA1 Message Date
Alessandro Decina 3e8a279a59 Fix build with musl 4 years ago
Alessandro Decina 68a633fe51 perf_map: support max_entries=0
When a PerfMap has max_entries=0, set max_entries to the number of
available CPUs.
4 years ago
Alessandro Decina f56c32b46b util: add possible_cpus() 4 years ago
Alessandro Decina d6f299065d Add rustfmt.toml 4 years ago
Alessandro Decina a3ab2eff57 Format fixes 4 years ago
Alessandro Decina 0cf5d17e38 deps: enable only the std feature for the futures crate 4 years ago
Alessandro Decina 3abe9bb859 Fix RawFd import paths 4 years ago
Alessandro Decina 2cec04c578 bpf: add explicit BTF argument to the load API
Add a `target_btf: Option<Btf>` argument to Bpf::load. None can be
passed to indicate to skip BTF relocation, for example for kernels that
don't support it. Some(btf) can be used to pass BTF parsed with
Btf::from_sys_fs() or Btf::parse/parse_file.

Finally, add a simpler Bpf::load_file(path) that uses from_sys_fs()
internally to simplify the common case.
4 years ago
Alessandro Decina 01e9f81043 Add license files 4 years ago
Alessandro Decina 55d8bcf386 xdp: add support for attaching with custom xdp flags 4 years ago
Alessandro Decina d326038cf4 programs: rework ProgramError a bit
Move type specific errors to XdpError SocketFilterError etc.

Annotate all source errors with #[source]
4 years ago
Alessandro Decina f88ca1f1f1 programs: add internal API to create links 4 years ago
Alessandro Decina ba992a2414 maps: fail new() for high level wrappers if the underlying map hasn't been created 4 years ago
Alessandro Decina 873691d050 Trim deps a bit more 4 years ago
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