Commit Graph

1816 Commits (2791badd947e3abb459e5339a23a66d0a56c42d0)
 

Author SHA1 Message Date
Dave Tucker 2791badd94 Release aya v0.13.1
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker c6a34cade1 Release aya-obj v0.2.1
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker b2ac9fe85d
Merge pull request #1073 from dave-tucker/reloc-bug
fix(aya): BSS Sections must be filled with zeros
3 months ago
Dave Tucker ca0c32d107 fix(aya): Fill bss maps with zeros
The loader should fill bss maps with zeros according to the size of the
ELF section.
Failure to do so yields weird verifier messages as follows:

```
cannot access ptr member ops with moff 0 in struct bpf_map with off 0 size 4
```

Reference to this in the cilium/ebpf code is here [1].
I could not find a reference in libbpf.

1: d0c8fc1937/elf_reader.go (L1159-L1165)

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker 3aa2745972 test(init): run test with debug logs
This provides more useful failure messages when integration tests fail

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker adf16e2102 test: Reproduce relocation bug
Users have reported issues with programs failing the verifier when they
are attempting to read or write to variables that the compiler places in
the .bss section. Add a test that places variables in each section and
exercises read and write operations on them.

Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Tamir Duberstein f9b34fe76f qemu: remove bios argument
I did this for arm64 because we'd get a black screen without it but I
have now confirmed that console=ttyAMA0 solves that problem.

I don't remember why I did it for x86.
3 months ago
Tamir Duberstein 298e2a751c Update public-api to 0.40.0 3 months ago
Tamir Duberstein 240291ab81 Update public-api to 0.39.0 3 months ago
Tamir Duberstein 758a4f9d1e Remove workspace members from workspace.dependencies
Doesn't make much sense to have them here.
3 months ago
Dave Tucker 59b3873a92
Merge pull request #1055 from aya-rs/codegen
Update libbpf to 80b16457cb23db4d633b17ba0305f29daa2eb307
3 months ago
dave-tucker f8ad84c3d3 [codegen] Update libbpf to 80b16457cb23db4d633b17ba0305f29daa2eb307
Update libbpf to 80b16457cb23db4d633b17ba0305f29daa2eb307

Files changed:
M	aya-obj/src/generated/btf_internal_bindings.rs
M	aya-obj/src/generated/linux_bindings_aarch64.rs
M	aya-obj/src/generated/linux_bindings_armv7.rs
M	aya-obj/src/generated/linux_bindings_powerpc64.rs
M	aya-obj/src/generated/linux_bindings_riscv64.rs
M	aya-obj/src/generated/linux_bindings_s390x.rs
M	aya-obj/src/generated/linux_bindings_x86_64.rs
3 months ago
Tyrone Wu 366c599c20 codegen: cgroup_iter_order NFPROTO* nf_inet_hooks
Adds the following to codegen:
- `bpf_cgroup_iter_order`: used in `bpf_link_info.iter.group.order`
- `NFPROTO_*`: used in `bpf_link_info.netfilter.pf`
- `nf_inet_hooks`: used in `bpf_link_info.netfilter.hooknum`

Include `linux/netfilter.h` in `linux_wrapper.h` for `NFPROTO_*` and
`nf_inet_hooks` to generate.
3 months ago
Dave Tucker 0e70838b0f Release aya-log v0.2.1
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker 04bbbccffa Release aya-log-common v0.1.15, aya-log-ebpf v0.1.1 3 months ago
Dave Tucker c3f0c7dc3f chore: Prepare for aya-log-ebpf release
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker 59082f572c Release aya-ebpf-cty v0.2.2, aya-ebpf-bindings v0.1.1, aya-ebpf-macros v0.1.1, aya-ebpf v0.1.1
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
Dave Tucker c169b727e6 Release aya-obj v0.2.0, aya v0.13.0, safety bump aya v0.13.0
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>
3 months ago
astoycos 5478cac008 feat(aya): Implement TCX
This commit adds the initial support for TCX
bpf links. This is a new, multi-program, attachment
type allows for the caller to specify where
they would like to be attached relative to other
programs at the attachment point using the LinkOrder
type.

Signed-off-by: astoycos <astoycos@redhat.com>
Co-authored-by: Andre Fredette <afredette@redhat.com>
Co-authored-by: Dave Tucker <dave@dtucker.co.uk>
Co-authored-by: Tamir Duberstein <tamird@gmail.com>
3 months ago
dependabot[bot] 1d272f38bd build(deps): update hashbrown requirement in the cargo-crates group
Updates the requirements on [hashbrown](https://github.com/rust-lang/hashbrown) to permit the latest version.

Updates `hashbrown` to 0.15.0
- [Changelog](https://github.com/rust-lang/hashbrown/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/hashbrown/compare/v0.14.3...v0.15.0)

---
updated-dependencies:
- dependency-name: hashbrown
  dependency-type: direct:production
  dependency-group: cargo-crates
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months ago
Tamir Duberstein aa240baadf Appease clippy
```
error: the following explicit lifetimes could be elided: 'data, 'file
    --> aya-obj/src/obj.rs:1083:6
     |
1083 | impl<'data, 'file, 'a> TryFrom<&'a ObjSection<'data, 'file>> for Section<'a> {
     |      ^^^^^  ^^^^^                             ^^^^^  ^^^^^
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes
```
4 months ago
GrigorenkoPV 55ed9e0546
fix(aya-log): print &[u8] using full width (#1008)
Otherwise `&[1u8, 0u8]` cannot be distinguished from `&[0x10u8]` (they both become 10)
4 months ago
Vladimir Petrzhikovskii d05110fd86 perf: cache `nr_cpus` in a thread_local 4 months ago
Tamir Duberstein afd777b705 Clarify `Arc` usage
Absent this it's easy to miss that there's an `Arc` being cloned here.
4 months ago
Tamir Duberstein e992c280cb Replace `Arc` with `&'static` 4 months ago
Tamir Duberstein 0e867572ff Avoid intermediate allocations in parse_cpu_ranges 4 months ago
Tamir Duberstein f3b2744072 Reduce duplication in `{nr,possible}_cpus` 4 months ago
Tamir Duberstein 2b299d4fba Replace `lazy_static` with `std::sync::LazyLock` 4 months ago
Tamir Duberstein 0f163633e3 Appease clippy
See https://github.com/rust-lang/rust/pull/130778.

```
warning: empty line after doc comment
  --> test/integration-ebpf/build.rs:16:1
   |
16 | / /// [bindeps]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html?highlight=feature#artifact-dependencies
17 | |
   | |_
18 |   fn main() {
   |   --------- the comment documents this function
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments
   = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default
   = help: if the empty line is unintentional remove it

error: empty line after doc comment
  --> aya/src/maps/bloom_filter.rs:34:1
   |
34 | / /// ```
35 | |
   | |_
...
38 |   pub struct BloomFilter<T, V: Pod> {
   |   --------------------------------- the comment documents this struct
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments
note: the lint level is defined here
  --> aya/src/lib.rs:41:5
   |
41 |     clippy::all,
   |     ^^^^^^^^^^^
   = note: `#[deny(clippy::empty_line_after_doc_comments)]` implied by `#[deny(clippy::all)]`
   = help: if the empty line is unintentional remove it

error: empty line after doc comment
  --> aya/src/maps/lpm_trie.rs:46:1
   |
46 | / /// ```
47 | |
   | |_
...
50 |   pub struct LpmTrie<T, K, V> {
   |   --------------------------- the comment documents this struct
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments
   = help: if the empty line is unintentional remove it

warning: empty line after doc comment
  --> test/integration-test/build.rs:38:1
   |
38 | / /// [bindeps]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html?highlight=feature#artifact-dependencies
39 | |
   | |_
40 |   fn main() {
   |   --------- the comment documents this function
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_doc_comments
   = note: `#[warn(clippy::empty_line_after_doc_comments)]` on by default
   = help: if the empty line is unintentional remove it

warning: calling `CStr::new` with a byte string literal
  --> test/integration-test/src/tests/xdp.rs:45:20
   |
45 |         .from_name(CStr::from_bytes_with_nul(b"lo\0").unwrap())
   |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use a `c""` literal: `c"lo"`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_c_str_literals
   = note: `#[warn(clippy::manual_c_str_literals)]` on by default
```
4 months ago
Michal Rostecki 045032bff0 ci: Use libLLVM from Rust CI tarball
Instead of relying on Homebrew for macOS (which ships older LLVM
versions) and `apt.llvm.org` for Linux (which often has bugs at the
packaging level), we now use the tarball from Rust CI to provide
`libLLVM`. This ensures it always matches the version used by the latest
Rust nightly.

This removes our reliance on homebrew shipping LLVM versions matching
those used by rustc.
4 months ago
Tamir Duberstein f498a1b7a9 Remove assertion that doesn't work in macOS HVF 4 months ago
Tamir Duberstein 59a153076a ci: use {clang,llvm}-15 on ubuntu-22.04
These come preinstalled, we just need to add them to $GITHUB_PATH.
4 months ago
Tamir Duberstein 5b29008691 Appease `static_mut_refs`
Made stricter in https://github.com/rust-lang/rust/commit/5ba6db1b648d9.
4 months ago
Tamir Duberstein 48ca623a1f Update public-api to 0.38.0 4 months ago
dependabot[bot] 5f91efdf43 build(deps): bump DavidAnson/markdownlint-cli2-action
Bumps the github-actions group with 1 update: [DavidAnson/markdownlint-cli2-action](https://github.com/davidanson/markdownlint-cli2-action).


Updates `DavidAnson/markdownlint-cli2-action` from 16 to 17
- [Release notes](https://github.com/davidanson/markdownlint-cli2-action/releases)
- [Commits](https://github.com/davidanson/markdownlint-cli2-action/compare/v16...v17)

---
updated-dependencies:
- dependency-name: DavidAnson/markdownlint-cli2-action
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
4 months ago
dependabot[bot] 11d953fee8 build(deps): bump the cargo-crates group with 2 updates
Updates the requirements on [rbpf](https://github.com/qmonnet/rbpf) and [network-types](https://github.com/vadorovsky/network-types) to permit the latest version.

Updates `rbpf` to 0.2.0
- [Commits](https://github.com/qmonnet/rbpf/compare/v0.2.0...v0.2.0)

Updates `network-types` to 0.0.7
- [Release notes](https://github.com/vadorovsky/network-types/releases)
- [Changelog](https://github.com/vadorovsky/network-types/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vadorovsky/network-types/compare/v0.0.6...v0.0.7)

---
updated-dependencies:
- dependency-name: rbpf
  dependency-type: direct:production
  dependency-group: cargo-crates
- dependency-name: network-types
  dependency-type: direct:production
  dependency-group: cargo-crates
...

Signed-off-by: dependabot[bot] <support@github.com>
4 months ago
Alessandro Decina b87f4b9642
Merge pull request #1029 from aya-rs/fix/ci-linux-kernel-version
Fix linux kernel version in gh ci runners
4 months ago
Davide Bertola e775f8329b Fix linux kernel version in gh ci runners 4 months ago
Alessandro Decina 2cd35769dc
Merge pull request #1023 from l2dy/fdlink/sockops
aya: use FdLink in SockOps programs
4 months ago
Zero King c44f8b0f5b aya: use FdLink in SockOps programs
See: https://github.com/aya-rs/aya/issues/987
4 months ago
tyrone-wu 02d1db5fc0 aya: remove unwrap and NonZero* in info
Addresses the feedback from #1007:
- remove panic from `unwrap` and `expect`
- Option<NonZero*> => Option<int> with `0` mapping to `None`

Refs: #1007
4 months ago
Alessandro Decina 635ed3baed
Merge pull request #1020 from l2dy/sockops-ctx
aya-ebpf: Add set_reply accessor to SockOpsContext
5 months ago
Zero King 95e1763e30 aya-ebpf: Add set_reply accessor to SockOpsContext 5 months ago
Alessandro Decina 40f303205f
Merge pull request #985 from reyzell/main
Add the option to support multiple and overrideable programs per cgroup
5 months ago
Harvo Jones f790685d75 Add the option to support multiple and overrideable programs per cgroup
This change allows multiple BPF programs to attach to a cgroup (via the option
`CgroupAttachMode::AllowMultiple`), and allows a program to specify that it can be
overridden by one in a sub-cgroup (via the option `CgroupAttachMode::AllowOverride`).
5 months ago
Alessandro Decina 9406601cf9
Merge pull request #1018 from tyrone-wu/codegen/bpf_perf_event_type
codegen: add `bpf_perf_event_type` enum bindings
5 months ago
tyrone-wu ea1130449b
codegen: add `bpf_perf_event_type` enum bindings
Adds the `bpf_perf_event_type` enum to FFI bindings, which is being used
in the `perf_event.type` field in `bpf_link_info`.
5 months ago
Alessandro Decina 15eb935bce
Merge pull request #1007 from tyrone-wu/aya/info-api
aya,aya-obj,integration-test: add better support in `ProgramInfo` & `MapInfo` for old kernels
5 months ago
tyrone-wu fbb09304a2
aya,int-test: revamp MapInfo be more friendly with older kernels
Adds detection for whether a field is available in `MapInfo`:
- For `map_type()`, we treturn new enum `MapType` instead of the integer
  representation.
- For fields that can't be zero, we return `Option<NonZero*>` type.
- For `name_as_str()`, it now uses the feature probe `bpf_name()` to
  detect if field is available.
  Although the feature probe checks for program name, it can also be
  used for map name since they were both introduced in the same commit.
5 months ago
tyrone-wu 88f5ac3114
aya,obj,int-test: revamp ProgramInfo be more friendly with older kernels
Purpose of this commit is to add detections for whether a field is
available in `ProgramInfo`.
- For `program_type()`, we return the new enum `ProgramType` instead of
  the integer representation.
- For fields that we know cannot be zero, we return `Option<NonZero*>`
  type.
- For `name_as_str()`, it now also uses the feature probe `bpf_name()`
  to detect if field is available or not.
- Two additional feature probes are added for the fields:
  - `prog_info_map_ids()` probe -> `map_ids()` field
  - `prog_info_gpl_compatible()` probe -> `gpl_compatible()` field

With the `prog_info_map_ids()` probe, the previous implementation that
I had for `bpf_prog_get_info_by_fd()` is shortened to use the probe
instead of having to make 2 potential syscalls.

The `test_loaded_at()` test is also moved into info tests since it is
better related to the info tests.

`aya::programs::Programs::prog_type(&self)` now returns `ProgramType`
instead of the generated FFI from aya-obj.

Also previously, `loaded_programs()` could be accessed either through
`aya` or `aya::programs`. To avoid confusion and duplicate export of
the item, the function should now only be exposed through
`aya::programs`.
5 months ago