Commit Graph

475 Commits (9ca0af1a79f7d18f577f4c2727e08a7e1be1ab90)

Author SHA1 Message Date
Alessandro Decina cb57d10d25 aya: rework links
Remove LinkRef and remove the Rc<RefCell<_>> that was used to store
type-erased link values in ProgramData. Among other things, this allows
`Bpf` to be `Send`, which makes it easier to use it with async runtimes.

Change the link API to:

    let link_id = prog.attach(...)?;
    ...
    prog.detach(link_id)?;

Link ids are strongly typed, so it's impossible to eg:

    let link_id = uprobe.attach(...)?;
    xdp.detach(link_id);

As it would result in a compile time error.

Links are still stored inside ProgramData, and unless detached
explicitly, they are automatically detached when the parent program gets
dropped.
3 years ago
Dave Tucker f357be7db4 aya: Support multiple maps in map sections
This commit uses the symbol table to discover all maps inside an ELF
section. Instead of doing what libbpf does - divide the section data
in to equal sized chunks - we read in to section data using the
symbol address and offset, thus allowing us to support definitions
of varying lengths.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina ad1636d2e7 aya: perf_buffer: call BytesMut::reserve() internally
This changes PerfBuffer::read_events() to call BytesMut::reserve()
internally, and deprecates PerfBufferError::MoreSpaceNeeded.

This makes for a more ergonomic API, and allows for a more idiomatic
usage of BytesMut. For example consider:

    let mut buffers = vec![BytesMut::with_capacity(N), ...];
    loop {
        let events = oob_cpu_buf.read_events(&mut buffers).unwrap();
        for buf in &mut buffers[..events.read] {
            let sub: Bytes = buf.split_off(n).into();
            process_sub_buf(sub);
        }
        ...
    }

This is a common way to process perf bufs, where a sub buffer is split
off from the original buffer and then processed. In the next iteration
of the loop when it's time to read again, two things can happen:

- if processing of the sub buffer is complete and `sub` has been
dropped, read_events() will call buf.reserve(sample_size) and hit a fast
path in BytesMut that will just restore the original capacity of the
buffer (assuming sample_size <= N).

- if processing of the sub buffer hasn't ended (eg the buffer has been
stored or is being processed in another thread),
buf.reserve(sample_size) will actually allocate the new memory required
to read the sample.

In other words, calling buf.reserve(sample_size) inside read_events()
simplifies doing zero-copy processing of buffers in many cases.
3 years ago
Alessandro Decina f01497e021 (cargo-release) version 0.10.7 3 years ago
Alessandro Decina 9a642d373f aya: fix lint errors 3 years ago
Alessandro Decina d690710337
Merge pull request #228 from nak3/fix-socket_filter
Fix socket_filter section match
3 years ago
Alessandro Decina 3dc9308c8e
Merge pull request #229 from dave-tucker/fix_cgroup_skb_attach_v2
aya: Fix Loading from cgroup/skb sections
3 years ago
Alessandro Decina 02c376ceb7
Merge pull request #224 from Tuetuopay/pod-arrays
aya: implement Pod for arrays of Pod types
3 years ago
Alessandro Decina 5269ab5b1c
Merge pull request #238 from vadorovsky/fix-doc-set-global
bpf: Improve documentation of set_global method
3 years ago
Michal Rostecki 7dd2e3d1f8 bpf: Improve documentation of set_global method
Use `static` instead of `const` and mention the necessity of using
`core::ptr::read_volatile`.

Signed-off-by: Michal Rostecki <vadorovsky@gmail.com>
3 years ago
Hi120ki ab462533c7 fix typo in aya/src/programs/fentry.rs 3 years ago
Kenjiro Nakayama 5725a97648 Fix unit test 3 years ago
Kenjiro Nakayama 9e41317ca6 Fix socket_filter section match
`BPF_PROG_TYPE_SOCKET_FILTER` program expands the sectionname's kind with `socket` not `socket_filter`.
So current eBPF program with socket filter always fails.

This patch fixes it.

Fix https://github.com/aya-rs/aya/issues/227
3 years ago
Daniil Bondarev 49e998dc7e
Fix typo in aya/README.md 3 years ago
Dave Tucker 5ee1321765 aya: Fix Loading from cgroup/skb sections
fa037a88e2 allowed for cgroup skb programs
that did not specify an attach direction to use the cgroup/skb section
name per the convention established in libbpf. It did not add the
necessary code to load programs from those sections which is added in
this commit

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Tuetuopay 08211f6132 aya: implement Pod for arrays of Pod types
If a type is POD (meaning it can be converted to a byte array), then an
array of such type is POD.

Signed-off-by: Tuetuopay <tuetuopay@me.com>
3 years ago
dependabot[bot] ab7eed2759
build(deps): update parking_lot requirement from 0.11.1 to 0.12.0
Updates the requirements on [parking_lot](https://github.com/Amanieu/parking_lot) to permit the latest version.
- [Release notes](https://github.com/Amanieu/parking_lot/releases)
- [Changelog](https://github.com/Amanieu/parking_lot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Amanieu/parking_lot/compare/0.11.1...0.12.0)

---
updated-dependencies:
- dependency-name: parking_lot
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
3 years ago
Nimrod Shneor c6e66d8080 Fix #128: Add support for BPF_MAP_TYPE_LPM_TRIE map 3 years ago
Alessandro Decina 6316748ec1
Merge pull request #179 from dave-tucker/btf_datasec_name
btf: Replace / in DATASEC before load to kernel
3 years ago
Alessandro Decina f169a3fc6b aya: fix func_info/line_info offsets
Given the new start instruction offset, rebase func_infos and
line_infos.
3 years ago
Alessandro Decina 8202105b7d aya: relocate .text references
Handle relocations against .text symbols in all instructions not just
calls. Makes it so that let x = &some_function triggers linking of
some_function in the current program and handles the resulting
relocation accordingly.

Among other things, enables the use of bpf_for_each_map_elem.
3 years ago
Dave Tucker 825bb3ad20 btf: Replace / in DATASEC before load to kernel
This replaces the / character with a . which is allowed in the kernel
names. Not allowing a forward slash is perhaps a kernel bug, but lets
fix it up here as it's commonly used for Aya

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 99fa85eab8 btf: fix match arms
Don't match on kind and use if let...
Match on the BtfType

Fixes: #178

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 326825aab0 tests: add a test for each BTF fix
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 4efc2061a8 btf: fix borrow check errors 3 years ago
Dave Tucker a1b46ece05 aya: Merge Fixup and Sanitzation to single step
Aya will now perform sanitzation and fixups in a single phase, requiring
only one pass over the BTF. This modifies the parsed BTF in place.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5d8b279265 aya: Fix BTF verifier output
Currently errors can occur if the verifier output is > buffer as we get
ENOMEM. We should only provide a log_buf if initial load failed, then
retry up to 10 times to get full verifier output.

To DRY this logic it has been moved to a function so its shared with
program loading

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>

one verifier loop to rule them all

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker d9496df3a7
Merge pull request #173 from alessandrod/func-proto-fixup
Add fixup for FuncProto
3 years ago
Alessandro Decina 7ad0524283 btf: fix sanitization if BTF_FUNC_GLOBAL is not supported
The lower 16 bits were not actually being cleared.
3 years ago
Alessandro Decina 9ba2e147a1 btf: fixup func protos
If an argument has a type, it must also have a name, see btf_func_check
in the kernel.

Given:

SEC("lsm/syslog")
int BPF_PROG(syslog_audit, int type, int ret_prev)
{
        return 0;
}

Fixes:

error: BTF error: the BPF_BTF_LOAD syscall failed. Verifier output: magic: 0xeb9f
version: 1
flags: 0x0
hdr_len: 24
type_off: 0
type_len: 76
str_off: 76
str_len: 128
btf_total_size: 228
[1] FUNC_PROTO (anon) return=2 args=(3 (anon))
[2] INT int size=4 bits_offset=0 nr_bits=32 encoding=SIGNED
[3] PTR (anon) type_id=4
[4] INT long long unsigned int size=8 bits_offset=0 nr_bits=64 encoding=(none)
[5] FUNC syslog_audit type_id=1
[5] FUNC syslog_audit type_id=1 Invalid arg#1
: Invalid argument (os error 22)
3 years ago
Alessandro Decina 89b5dd32ed btf: run fixup in place 3 years ago
Alessandro Decina b45a160bb0
Merge pull request #168 from dave-tucker/decl_tag
btf: Add support for BTF_TYPE_KIND_{TAG,DECL_TAG}
3 years ago
Dave Tucker 8f9a32ff10 aya: Fix name truncation
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 437432cdd6 aya: Truncate long program names
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5d9ff70498 btf: Add support for BTF_TYPE_KIND_{TAG,DECL_TAG}
Adds support for two new BTF kinds including feature probes and BTF
sanitization

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 1492d85a7b
Merge pull request #169 from dave-tucker/fix_array_relo
aya: Fix BTF type resolution for Arrays and Ints
3 years ago
Alessandro Decina 6a91fdf5a7
Merge pull request #157 from dave-tucker/doc-aya
aya: document the public api
3 years ago
Dave Tucker 686ce45f93 aya: Fix BTF type resolution for Arrays and Ints
The union of `size` and `type` is unused in BTF_KIND_ARRAY.
Type information of elements is in the btf_array struct that follows in
the type_ field while the index type is in the index_type field.

For BTF_KIND_INT, only the offset should be compared and size and
signedness should be ignored.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 324c679a41 Update libbpf to be89b28f96be426e30a2b0c5312d13b30ee518c7 3 years ago
Alessandro Decina 4e9bc32a3d aya: maps: rename from_pinned() to open_pinned() 3 years ago
Alessandro Decina f12054a00d
Merge pull request #165 from dave-tucker/prog_pinned
aya: Retrieve program from pinned path
3 years ago
Dave Tucker abc8d27440 aya: Retrieve program from pinned path
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 0619f80090 Update libbpf to 22411acc4b2c846868fd570b2d9f3b016d2af2cb 3 years ago
Dave Tucker 83cfe56fe7 aya: allocate func/line_info buffers outside if
the pointer isn't valid in the current code!

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker bca01580e7 aya: document the public api
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 877c76043a btf: Add fixup for PTR types from Rust
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 5c6131afba Add BPF_PROG_TYPE_EXT
This requires loading the BTF to kernel when loading all programs as
well as implementing Extension program type

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 379bb313b1 obj: Add Btf::to_bytes
This allows for parsed BTF to be re-encoded such that it could be loaded
in to the kernel. It moves bytes_of to the utils package. We could use
Object::bytes_of, but this requires the impl of the Pod trait on
generated code.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 65a0b83205 Mark .rodata maps as readonly and freeze on load
This commit marks .rodata maps as BPF_F_RDONLY_PROG when loaded to
prevent a BPF program mutating them.

Initial map data is populated by the loader using the new
`BpfLoader::set_global()` API. The loader will mark
is marked as frozen using bpf_map_freeze to prevent map data
being changed from userspace.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 2b7dda766f btf: Fix for rename of BPF_ -> BPF_CORE_
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dave-tucker 05d4bc39ea Update libbpf to 19656636a9b9a2de1f71fa3135709295c16701cc 3 years ago
Michal Rostecki 7e2fcd1d6d Support for fentry and fexit programs
fentry and fexit programs are similar to kprobe and kretprobe, but they
are newer and they have practically zero overhead to call before or
after kernel function. Also, fexit programs are focused on access to
arguments rather than the return value.

Those kind of programs were introduced in the following patchset:

https://lwn.net/Articles/804112/

Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
3 years ago
dependabot[bot] 54b0c67795 build(deps): update object requirement from 0.27 to 0.28
Updates the requirements on [object](https://github.com/gimli-rs/object) to permit the latest version.
- [Release notes](https://github.com/gimli-rs/object/releases)
- [Changelog](https://github.com/gimli-rs/object/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gimli-rs/object/compare/0.27.0...0.28.1)

---
updated-dependencies:
- dependency-name: object
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
3 years ago
Ubuntu 24a292f605 Implement Pod for u128 3 years ago
dave-tucker 17d43cd6f8 Update libbpf to 93e89b34740c509406e948c78a404dd2fba67b8b 3 years ago
Alessandro Decina 26d188c659
Merge pull request #125 from dave-tucker/btf
obj: Improve section detection
3 years ago
Thia Wyrod 18970369e2
aya: Remove unnecessary unsafe markers on map iteration.
Map iteration can yield stale keys and values by virtue of sharing a
data structure with BPF programs which can modify it. However, all
accesses remain perfectly safe and will not cause memory corruption or
data races.
3 years ago
Alessandro Decina 07a6016ebb
Merge pull request #120 from eero-thia/thia/dedup
aya: eliminate name duplication in maps and programs.
3 years ago
Thia Wyrod f56dd0a70b
aya: eliminate name duplication in maps and programs.
Map and ProgramData objects had unnecessarily cloned strings for their
names, despite them being just as easily available to external users via
bpf.maps() and bpf.programs().
3 years ago
Will bb8a813eef aya: use correct program name when relocating 3 years ago
Dave Tucker e4d9774bf7 obj: Improve section detection
This commit improves section detection.
Previously, a section named "xdp_metadata" would be interpretted as a
program section, which is incorrect. This commit first attempts to
identify a BPF section by name, then by section.kind() ==
SectionKind::Text (executable code). The computed section kind is
stored in the Section so variants can be easily matched on later.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Thia Wyrod daa7ea6d0d
aya: remove unnecessary usage of &dyn trait in favor of impl trait.
This should improve performance in most situations by eliminating
unnecessary fat pointer indirection.
3 years ago
Alessandro Decina 98b36b23bc
Merge pull request #116 from eero-thia/thia/close
aya: close file descriptors on Map drop.
3 years ago
Alessandro Decina 2955ca1d1f
Merge pull request #121 from eero-thia/thia/programs_mut
aya: programs_mut iterator to complement programs.
3 years ago
Thia Wyrod c7f8db9a0b
aya: programs_mut iterator to complement programs. 3 years ago
Thia Wyrod 1584bc47bd
aya: close file descriptors on Map drop. 3 years ago
Thia Wyrod f8f17a09fb
aya: expand include_bytes_aligned to accept expressions.
This allows one to this macro with literal expressions involving macros
such as concat! and env!.
3 years ago
Alessandro Decina 6db30fad9c
Merge pull request #108 from deverton/kprobe-debugfs
Support k/uprobes on older kernels.
3 years ago
Dan Everton 0e84610976
Refactoring after feedback. 3 years ago
Rust Plumber 761cb79fe3
aya: fix test warnings (#111) 3 years ago
Dan Everton 606c3267c4
Support pid filtering in debugfs 3 years ago
Dan Everton 1dc75542b4
Handle probe entry offsets 3 years ago
Dan Everton 4e6aeb2e69
Merge branch 'main' into kprobe-debugfs 3 years ago
Dan Everton 3dff6e8555
Updates based on feedback 3 years ago
Dan Everton 4277205e9d
Use current kernel version as default if not specified
When a BPF program doesn't specify the target kernel version, the
most compatible option is to set the program kernel version to match
the currently running kernel.
3 years ago
Dan Everton 42c9737d47
Functional detach of debugfs probes. 3 years ago
Dan Everton a4faabcf93
Fix event_alias comparison when looking in event list 3 years ago
Dan Everton 84fa2197ec
Don't duplicate perf_attach code and formatting 3 years ago
Dan Everton d0321bd1ee
Attempt auto detach of probe for debugfs 3 years ago
Dan Everton 34aa790a91
Support k/uprobes on older kernels.
Prior to kernel 4.17 probes were attached via debugfs and this patch
attempts to make that work.

Tested on kernel 4.14.
3 years ago
Dan Everton 07e3824aa4
chore: formatting 3 years ago
Dan Everton 49f6a8e819
Stub `kernel_version` for tests 3 years ago
Dan Everton d966881e46
Fix lint issues 3 years ago
Dan Everton fc0861105a
fix: make maps compatible with kernel <= 4.14
In kernel 4.15 and additional parameter was added to allow maps to have
names but using this breaks on older kernels.

This change makes it so the name is only added on kernels 4.15 and
newer.
3 years ago
Alessandro Decina 182182d840 (cargo-release) version 0.10.6 3 years ago
Dave Tucker 352e54b724 obj: fix name parsing for sk_skb sections
This commit fixes name parsing of sk_skb sections such that both named
and unnamed variants will work correctly.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
alessandrod 4a7f47d93a Update libbpf to 16dfb4ffe4aed03fafc00e0557b1ce1310a09731 3 years ago
Tobias Klauser 2136f05461 aya: netlink: use NETLINK_EXT_ACK from libc crate
NETLINK_EXT_ACK is available since libc crate version 0.2.105, see
https://github.com/rust-lang/libc/releases/tag/0.2.105
3 years ago
William Findlay 1e6b1afbe4
aya/obj: fix incorrect section size for .bss 3 years ago
William Findlay 27d803b634
aya/maps: improve map errors to be more descriptive 3 years ago
William Findlay 6b6d4af932
aya/programs/lsm: pass Btf by reference instead of loading new Btf in Lsm::load 3 years ago
William Findlay 6539cbb555
aya/aya-bpf: implement btf tracepoint programs 3 years ago
Alessandro Decina 140005d9e3
Merge pull request #68 from vadorovsky/lsm
Add support for raw tracepoint and LSM programs
3 years ago
William Findlay 169478c863 Add support for raw tracepoint and LSM programs
This change adds support for the following program types:

* raw tracepoint
* LSM

Supporting LSM programs involved a necessity of supporting more
load_attrs for the BPF_PROG_LOAD operation, concretely:

* expected_attach_type - for LSM programs, it has always to be set to
  BPF_LSM_MAC
* attach_btf_obj_fd - it's often used to reference the file descriptor of
  program's BTF info, altough in case of LSM programs, it only has to
  contain the value 0, which means the vmlinux object file (usually
  /sys/kernel/btf/vmlinux)
* attach_btf_id - ID of the BTF object, which in case of LSM programs is
  the ID of the function (the LSM hook)

The example of LSM program using that functionality can be found here:

https://github.com/vadorovsky/aya-example-lsm

Fixes: #9
Signed-off-by: William Findlay <william@williamfindlay.com>
Signed-off-by: Michal Rostecki <mrostecki@opensuse.org>
3 years ago
William Findlay 99f6f9e14d
aya: fix include_bytes_aligned! macro to work in some corner cases
I found a corner case in my own development workflow that caused the existing macro to not
work properly. The following changes appear to fix things. Ideally, we could add some test
cases to CI to prevent regressions.  This would require creating a dedicated directory to
hold test cases so that we can "include" them at compile time.
3 years ago
Alessandro Decina a94774755f
Merge pull request #76 from willfindlay/load_include_bytes
aya: introduce include_bytes_aligned!() macro
3 years ago
William Findlay 4df4e9c14e
aya: introduce include_bytes_aligned!() macro
This is a helper macro that can be used to include bytes at compile-time that can then be
used in Bpf::load(). Unlike std's include_bytes!(), this macro also ensures that the
resulting byte array is correctly aligned so that it can be parsed as an ELF binary.

Signed-off-by: William Findlay <william@williamfindlay.com>
3 years ago
alessandrod 03e9935358 Bump libbpf to 92c1e61a605410b16d6330fdd4a7a4e03add86d4
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
dependabot[bot] c99dcfb9d3 build(deps): update object requirement from 0.26 to 0.27
Updates the requirements on [object](https://github.com/gimli-rs/object) to permit the latest version.
- [Release notes](https://github.com/gimli-rs/object/releases)
- [Changelog](https://github.com/gimli-rs/object/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gimli-rs/object/compare/0.26.0...0.27.0)

---
updated-dependencies:
- dependency-name: object
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
3 years ago
Alessandro Decina 4152e8b1a4 (cargo-release) version 0.10.5 3 years ago
Alessandro Decina 59a1854a6b aya: fix call relocation bug
Take the section offset into account when looking up relocation entries
3 years ago
Dave Tucker dc4b928ec5 miri: Disable Stacked Borrows and skip some tests
The perf_buffer code fails due to stacked borrows, skip this for now.
munmap isn't supported by miri.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 52c51895ba aya: fix clippy 3 years ago
Alessandro Decina 64e3fb4cc8 aya: improve docs a bit and make BpfLoader default to loading BTF if available 3 years ago
Alessandro Decina 5f8f18e3a1 aya: loader: take BTF info as reference
Allows sharing the same BTF info across many loaders
3 years ago
Dave Tucker 9426f36f79 Implement Pinning For Programs and Maps
This commit adds 2 new methods to aya::sys
- bpf_pin_object
- bpf_get_object

Which allow the pinning and retrieval of programs/maps to bpffs.

It adds a `Program.pin` API, such that a loaded program can be pinned.
For map pinning, the user must ensure the `pinning u32` in the
`bpf_map_def` is set to 1, maps will be pinned using a new builder API.

BpfLoader::new().map_pin_path("/sys/fs/bpf/myapp").load_file("myapp.o")

This will pin all maps whose definition requests pinning to path + name.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina a7f5b3775d (cargo-release) version 0.10.4 3 years ago
Dave Tucker a10a7b3bf2 bump obj to 0.26
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 98361a4c93 aya: minor PerfEvent API tweaks 3 years ago
Alessandro Decina b0a05e759e aya: run xtask codegen aya 3 years ago
Markus Stange c39dff6025 Add support for PerfEvent programs. 3 years ago
Alessandro Decina c56a6b16aa aya: only consider Text symbols as relocatable functions 3 years ago
Alessandro Decina d9fc0f484f aya: fix bug with nested call relocations
Use the correct offset when looking up relocation entries while doing
nested call relocations.
3 years ago
Dave Tucker e9bad0b61d Make Clippy Happy
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina 9c27910f76 aya: update authors and repository link 3 years ago
Dave Tucker 8acb92d61c Remove docs. Update URLs to aya-rs
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 4e1ce2534c obj/btf: Fix size of Unknown variant
The size of Unknown should be ty_size, otherwise when it is encountered,
we never advance the cursor and it creates an infinite loop.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 569b8ca39e obj/btf: Add some tests for reading btf data
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Dave Tucker 753a683704 btf: Add bindings for BTF_KIND_FLOAT
Fixes: #34

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 years ago
Alessandro Decina f30abca15e (cargo-release) version 0.10.3 4 years ago
Alessandro Decina 66a12ffcf7 aya: programs: tweak LircMode2::query doc. 4 years ago
Alessandro Decina 8c03ba052a aya: netlink: fix clippy lint 4 years ago
Sean Young 81e07e9661
Implement query for lirc programs (#32)
Signed-off-by: Sean Young <sean@mess.org>
4 years ago
Alessandro Decina fa2cbe2f82 aya: fix clippy warnings 4 years ago
Alessandro Decina c2a90c2c01 aya: tc: add qdisc_detach_program
qdisc_detach_program can be used to detach all the programs that have
the given name. It's useful when you want to detach programs that were
attached by some other process (eg. iproute2), or when you want to
detach programs that were previously left attached because the program
that attached them was killed.
4 years ago
Alessandro Decina 0a9d02140a aya: netlink: fix alignment when writing attributes 4 years ago
Alessandro Decina abb199e6f4 aya: netlink: fix handling of multipart messages 4 years ago
Alessandro Decina 9185f32f6f aya: tc: clean up netlink code a bit 4 years ago
Simone Margaritelli b4b019e447
fix: pass BTF object by reference in order to allow multiple eBPF programs to share it and save memory (closes #30). (#31) 4 years ago
Alessandro Decina d996a88de4 aya: fix formatting 4 years ago
Alessandro Decina 0878c4505a aya: fix clippy warnings 4 years ago
Alessandro Decina 21e01df242 aya: obj: improve parse_map_def tests
Add a test that checks that we handle ELF section padding correctly and
simplify the other tests.
4 years ago
Alessandro Decina b657930a3e aya: don't error out parsing padded map sections
Fixes #28
4 years ago
Simone Margaritelli 8311abfdcb
added support for armv7-unknown-linux-gnueabi and armv7-unknown-linux-gnueabihf
* new: added support for armv7-unknown-linux-gnueabi (closes alessandrod/aya/issues/22)

* fix: replaced custom type defintions with proper libc types

* fix: fixed pointless parameter binding

* new: added linker for armv7-unknown-linux-gnueabihf to cargo config
4 years ago
Alessandro Decina 9c8e78b7d4 aya: tc: make qdisc_add_clsact return io::Error 4 years ago
Alessandro Decina 122a5306e7 aya, aya-bpf-bindings: regenerate bindings 4 years ago
Alessandro Decina 08c71dfeb1 aya: kprobe: remove pid argument
Kprobes can only be attached globally. Per-pid logic needs to be
implemented on the BPF side with bpf_get_current_pid_tgid.
4 years ago
Arnabjyoti Kalita 35f15f70e0
aya: add minimum kernel version for each map and program type (#18) 4 years ago
Alessandro Decina bb15e82c1d aya: add missing load() in kprobe example
Fixes #17
4 years ago
Rafael Ortiz d8d311738c
aya: support both bpf_map_def layout variants
Libbpf and iproute2 use two slightly different `bpf_map_def` layouts. This change implements support for loading both.

Refs: #10, #14
4 years ago
Alessandro Decina 5f0ff1698a aya: netlink: tc: use ptr::read_unaligned instead of deferencing a potentially unaligned ptr 4 years ago
Alessandro Decina 7f2ceaf12e aya: netlink: port TC code to using new nlattr utils 4 years ago
Alessandro Decina d9b5ab575f aya: netlink: refactor nlattr writing code 4 years ago
Alessandro Decina c240a2c733 aya: netlink: introduce NestedAttrs builder and switch XDP to it
NestedAttrs is a safe interface for writing nlattrs. This is the first
step towards making the netlink code safer and easier to maintain.
4 years ago
Alessandro Decina bb595c4e69 aya: refactor program section parsing
This renames aya::obj::ProgramKind to aya::obj::ProgramSection and moves
all the program section parsing to ProgramSection::from_str.
4 years ago
Alessandro Decina 0188622580 aya: fix tracepoint prefix in a couple more places 4 years ago
Alessandro Decina a0151dd485 aya: fix trace point section name
Trace points have prefix "tracepoint" not "trace_point".
4 years ago
Alessandro Decina 521ef09463
Merge pull request #4 from seanyoung/doctest
Fix doctest and run them during CI
4 years ago
Alessandro Decina d70e291580 (cargo-release) version 0.10.2 4 years ago
Alessandro Decina fee71b42f1 aya: tc: fix QdiscRequest layout 4 years ago
Sean Young 1196ba1dcc Fix doctest and run them during CI
Signed-off-by: Sean Young <sean@mess.org>
4 years ago
Sean Young b49ba69d09 Add support for lirc programs
Signed-off-by: Sean Young <sean@mess.org>
4 years ago
Alessandro Decina 304abfbfeb (cargo-release) version 0.10.1 4 years ago
LOU Xun f1fc30411d
Fix Bpf::load_file when BTF doesn't exist 4 years ago
Alessandro Decina 94b5e2e4e6 Copy readme into aya/ 4 years ago
Alessandro Decina 7694bacf04 aya: add more fields to Cargo.toml 4 years ago
Alessandro Decina be0b7bbd83 Doc fixes 4 years ago
Alessandro Decina 9f7b017d5d aya: bump version to 0.10 4 years ago
Alessandro Decina 768640dd46 aya: add doc aliases for maps and programs 4 years ago
Alessandro Decina 293e66af65 More docs 4 years ago
Alessandro Decina ad58e171ff aya: refactor tc code a bit and add docs 4 years ago
Alessandro Decina 11e21e83be More docs 4 years ago
Alessandro Decina 6c7df27bd0 More doc fixes 4 years ago
Alessandro Decina 28158e6028 aya: improve async perf map docs 4 years ago
Alessandro Decina 6ecf7dabf3 aya: tweak PerfEventArray docs 4 years ago
Alessandro Decina 6772595f3e aya: ProgramArray: more doc fixes 4 years ago
Alessandro Decina 4bde0c54bd aya: ProgramArray: tweak docs 4 years ago
Alessandro Decina 2cda5dbbe7 aya: implement ProgramFd for CgroupSkb 4 years ago
Alessandro Decina 2d7b9b2e90 aya: fix CgroupSkb docs 4 years ago
Alessandro Decina 08a68faf8a aya: programs: add support for BPF_PROG_TYPE_CGROUP_SKB programs 4 years ago
Alessandro Decina fb3e2f7f9d aya: programs: fix detaching programs attached with bpf_prog_attach 4 years ago
Alessandro Decina 665802594c aya: programs: fix syscall name in errors 4 years ago
Alessandro Decina 81a0b61164 aya: handle reordered functions
LLVM will split .text into .text.hot .text.unlikely etc and move the
content around in order to improve locality. We need to parse all the
text sections or relocations can potentially fail.
4 years ago
Alessandro Decina b92b1e18a9 aya: improve call relocation error messages 4 years ago
Alessandro Decina 20b2d4c77d aya: BpfError: set the #[source] attribute for RelocationErrors 4 years ago
Arnabjyoti Kalita 6974d349e8
programs: add support for attaching and detaching TC programs
This change adds support for attaching TC programs directly from aya, without
having to use iproute2/tc.
4 years ago
Alessandro Decina 31f8d71604 aya: add support for Stack and Queue maps 4 years ago
Alessandro Decina 40b7da6655 aya: add id and pinning fields to bpf_map_def 4 years ago
Alessandro Decina dc4e020f29 aya: netlink: improve error messages 4 years ago
Alessandro Decina 5effc972ac aya: add support for BPF_PROG_TYPE_SCHED_CLS programs 4 years ago
Alessandro Decina 4222b140ec aya: perf_map: fix bug when max_entries=0
When a perf map has max_entries=0, max_entries is dynamically set at
load time to the number of possible cpus as reported by
/sys/devices/system/cpu/possible.

This change fixes a bug where instead of setting max_entries to the
number of possible cpus, we were setting it to the cpu index of the last
possible cpu.
4 years ago
Alessandro Decina 3b7ffd0048 aya: update generated bindings
Update generated bindings with kernel headers from libbpf 4ccc1f0
4 years ago
Alessandro Decina 30d2b25f11 aya: xdp: fix detaching on kernels older than 5.7
XDP_FLAGS_REPLACE was added in 5.7. Now for kernels >= 5.7 whenever we
detach an XDP program we pass along the program fd we expect to be
detaching. For older kernels, we just detach whatever is attached, which
is not great but it's the way the API worked pre XDP_FLAGS_REPLACE.
4 years ago
Alessandro Decina 607cf68a69 aya: xdp: set flags when attaching with netlink 4 years ago
Alessandro Decina bb7728a2c5 aya: fix BpfError display strings 4 years ago
Alessandro Decina 9e12c9324c aya: fix warnings 4 years ago
Alessandro Decina 9a24f20e6f aya: programs: rework load_program() retry code a bit 4 years ago
Alessandro Decina 144175434f aya: programs: add support for SkMsg programs 4 years ago
Alessandro Decina dad300c88b aya: maps: add SockHash 4 years ago
Alessandro Decina ca4b3bfc04 aya: add support for SockOps programs 4 years ago
Alessandro Decina b57cace941 aya: add support BPF_PROG_TYPE_SK_SKB programs and SockMaps 4 years ago
Alessandro Decina b6cd813af5 aya: fix program array key size 4 years ago
Alessandro Decina 0b3e532d7a aya: small doc fixes 4 years ago
Alessandro Decina 79f1b385a5 aya: more docs 4 years ago
Alessandro Decina 683a58ea6d aya: consolidate errors into ProgramError::SyscallError 4 years ago
Alessandro Decina ae863bc663 aya: split aya::programs::probe into ::kprobe and ::uprobe & add docs 4 years ago
Alessandro Decina d9634ae945 aya: add maps::StackTraceMap
Map type for BPF_MAP_TYPE_STACK_TRACE.
4 years ago
Alessandro Decina 67c9cc0359 aya: add util::kernel_symbols()
kernel_symbols() can be used to load /proc/kallsyms in a BTreeMap.
Useful for looking up symbols from stack addresses.
4 years ago
Alessandro Decina 2cdb10e7f2 aya: add bpf_map_lookup_elem_ptr 4 years ago
Alessandro Decina ad6d0596ab aya: tweak docs 4 years ago
Alessandro Decina f464279740 aya: rename ProgramArray::unset to ProgramArray::clear_index 4 years ago
Alessandro Decina 9ad2a5e72d aya: rename ProgramArray::keys to ProgramArray::indices 4 years ago
Alessandro Decina b0364f76ab aya: maps: add PerCpuArray 4 years ago
Alessandro Decina 74d5f17559 aya: rework IterableMap and ProgramArray
Make MapKeys not use IterableMap. Leave only ProgramArray::get,
ProgramArray::set and ProgramArray::unset exposed as the other syscalls
don't work consistently for program arrays.
4 years ago
Alessandro Decina aa3a30d196 aya: PerCpuKernelMem doesn't need to be public 4 years ago
Alessandro Decina 1746bbf5b8 aya: add aya::maps::Array 4 years ago
Alessandro Decina c3b902137b aya: add aya::maps::array and move ProgramArray under it 4 years ago
Alessandro Decina 6cec8be564 aya: hash_map: add doc aliases for HASH and LRU_HASH 4 years ago
Alessandro Decina 7a989b43b9 aya: per_cpu_hash_map: add support for BPF_MAP_TYPE_LRU_PERCPU_HASH 4 years ago
Alessandro Decina 635dcd44b9 aya: maps: introduce MapError::KeyNotFound
Change get() from -> Result<Option<V>, MapError> to -> Result<V,
MapError> where MapError::KeyNotFound is returned instead of Ok(None) to
signify that the key is not present.
4 years ago
Alessandro Decina fd142e467c aya: rename MapError::NotFound to MapError::MapNotFound 4 years ago
Alessandro Decina 3a5b289163 aya: add PerCpuHashMap 4 years ago
Alessandro Decina d5098c9e57 aya: move hash_map.rs to hash_map/hash_map.rs 4 years ago
Alessandro Decina 6a12a48f03 aya: hash_map: factor out common hash code
This is in preparation of adding new hash map types
4 years ago
Alessandro Decina ac83273da8 aya: fix warnings 4 years ago
Alessandro Decina 46e0a2ede4 aya: don't export VerifierLog 4 years ago
Alessandro Decina 7c6ae76975 aya: HashMap: add support for LRU maps 4 years ago
Alessandro Decina 04fde46855 aya: more docs 4 years ago
Alessandro Decina eea27f52f3 aya: tweak docs 4 years ago
Alessandro Decina 5aa9cb12ad aya: rename perf map and add docs
Rename the perf_map module to just perf, and rename PerfMap to
PerfEventArray.
4 years ago
Alessandro Decina d94bfde295 aya: maps: add docs and make the hash_map and program_array modules public 4 years ago
Alessandro Decina ce3f83acb1 aya: add HashMap docs 4 years ago
Alessandro Decina e28da8812e aya: make HashMap::new private 4 years ago
Alessandro Decina 24f7c37158 aya: add ProgramArray docs 4 years ago
Alessandro Decina 3fddc8165c aya: make ProgramArray::new private 4 years ago
Alessandro Decina 6682a5ff39 aya: remove pop()
lookup_and_delete_elem is only supported for QUEUE and STACK maps at the
moment.
4 years ago
Alessandro Decina 1bbbf616b6 aya: add some docs for the crate and `Bpf` 4 years ago
Alessandro Decina 563ce46118 aya: maps: group syscall errors into MapError::SyscallError 4 years ago
Alessandro Decina f9554d6db5 aya: fix bindings for PERF_EVENT_IOC_{ENABLE|DISABLE|SET_BPF} 4 years ago
Alessandro Decina a92bfebf50 aya: remove TryInto magic from program()/program_mut() too
For programs it's actually useful being able to get the underlying
Program enum, for example when iterating/loading all the programs
4 years ago
Alessandro Decina 42e0a659b2 aya: remove TryInto cleverness from map() and map_mut()
Require callers to call try_into() explicitly. It's more characters, but
it's easier to understand/document.

Also introduce MapError::NotFound instead of returning Result<Option<_>>.
4 years ago
Alessandro Decina d3482c063c aya: fix some badly completed match arms 4 years ago
Alessandro Decina ee05f9d949 aya: fix verifier log handling 4 years ago
Alessandro Decina 92b4ed2664 aya: add support for function calls 4 years ago
Alessandro Decina 8b0eee317d aya: section: collecting relocations can't fail anymore 4 years ago
Alessandro Decina 318c16cea3 aya: obj: rename symbol_table to symbols_by_index 4 years ago
Alessandro Decina 286e117fe0 aya: add Program::name() and make ::prog_type() public 4 years ago
Alessandro Decina 0199e4b297 aya: bpf: Add Bpf::programs() 4 years ago
Alessandro Decina dcb5121985 aya: bpf: remove lifetime param from previous signature 4 years ago
Alessandro Decina ed53f7470b aya: maps: add Map::name() and Map::map_type() 4 years ago
Alessandro Decina 0a493baed6 aya: add Bpf::maps() to get all the maps 4 years ago
Alessandro Decina 29f2d9b2d9 aya: switch to rustified enums 4 years ago
Alessandro Decina 59ed237343 aya: generate code with xtask 4 years ago
Alessandro Decina 8327ffbb8d xdp: xdp BPF_LINK_CREATE was added in 5.9 4 years ago
Alessandro Decina 1e779c520a aya: obj: implement sane defaults for license and kernel version
Default to license=GPL and kernel_version=any
4 years ago
Alessandro Decina f11df77f85 aya: implement missing bit of retprobes 4 years ago
Alessandro Decina b7369d2763 aya: sys: fix warning 4 years ago
Alessandro Decina 82bcef3790 aya: rename gen-bindings to gen-bindings.sh 4 years ago
Alessandro Decina 245cd46bab aya: tweak error display 4 years ago
Alessandro Decina 3e8a279a59 Fix build with musl 4 years ago