Releases: aya-rs/aya
aya v0.13.1
What's Changed
- fix(aya): BSS Sections must be filled with zeros by @dave-tucker in #1073
Full Changelog: aya-v0.13.0...aya-v0.13.1
aya-v0.13.0
Chore
- Add comments in
*_wrong_map
tests - Rename bpf -> ebpf
- Fix unused_qualifications lints
This was failing the docs build.
Documentation
- fix typo
- Use
Ebpf
instead ofBpf
New Features
- 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. - Provide a deprecated
BpfError
alias - Rename Bpf to Ebpf
And BpfLoader to EbpfLoader.
This also adds type aliases to preserve the use of the old names, making
updating to a new Aya release less of a burden. These aliases are marked
as deprecated since we'll likely remove them in a later release.
Bug Fixes
-
Fix PerfEventArray resize logic
There was a logic bug in the previously merged patch where we
set the correctly calculated max_entries size with the original.To fix this and prevent regressions a unit test was added.
This highlighted that the original map definition needs to be
mutated in order for the max_entries change to be properly applied.As such, this resize logic moved out of aya::sys into aya::maps
-
Set PerfEventArray max_entries to nCPUs
Both libbpf and cilium/ebpf have will set the max_entries of a
BPF_MAP_TYPE_PERF_EVENT_ARRAY to the number of online CPUs if
it was omitted at map definition time. This adds that same
logic to Aya. -
fix panic when creating map on custom ubuntu kernel
-
fix rustdocs-args ordering in taplo to -D warnings
This fixes the current rustdoc build error by correcting the ordering of
rustdoc-args
to-D warnings
. Additionally, this also removes the
recorder_arrays
field (defaults to false) so that the order is not
modified, which is what caused the error in the first place.
Other
-
use FdLink in SockOps programs
-
remove unwrap and NonZero* in info
Addresses the feedback from #1007:- remove panic from
unwrap
andexpect
- Option<NonZero*> => Option with
0
mapping toNone
- remove panic from
-
revamp MapInfo be more friendly with older kernels
Adds detection for whether a field is available inMapInfo
:- For
map_type()
, we treturn new enumMapType
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 probebpf_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.
- For
-
revamp ProgramInfo be more friendly with older kernels
Purpose of this commit is to add detections for whether a field is
available inProgramInfo
.- For
program_type()
, we return the new enumProgramType
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 probebpf_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()
fieldprog_info_gpl_compatible()
probe ->gpl_compatible()
field
With the
prog_info_map_ids()
probe, the previous implementation that
I had forbpf_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. - For
-
add conversion u32 to enum type for prog, link, & attach type
Add conversion from u32 to program type, link type, and attach type.
Additionally, remove duplicate match statement for u32 conversion to
BPF_MAP_TYPE_BLOOM_FILTER
&BPF_MAP_TYPE_CGRP_STORAGE
.New error
InvalidTypeBinding<T>
is created to represent when a
parsed/received value binding to a type is invalid.
This is used in the new conversions added here, and also replaces
InvalidMapTypeError
inTryFrom
forbpf_map_type
. -
improve integration tests for info API
Improves the existing integraiton tests forloaded_programs()
and
loaded_maps()
in consideration for older kernels:- Opt for
SocketFilter
program in tests since XDP requires v4.8 and
fragments requires v5.18. - For assertion tests, first perform the assertion, if the assertion
fails, then it checks the host kernel version to see if it is above
the minimum version requirement. If not, then continue with test,
otherwise fail.
For assertions that are skipped, they're logged in stderr which can
be observed with-- --nocapture
.
This also fixes the
bpf_prog_get_info_by_fd()
call for kernels below
v4.15. If calling syscall on kernels below v4.15, it can produce an
E2BIG
error becausecheck_uarg_tail_zero()
expects the entire
struct to all-zero bytes (which is caused from the map info).Instead, we first attempt the syscall with the map info filled, if it
returnsE2BIG
, then perform syscall again with empty closure.Also adds doc for which version a kernel feature was introduced for
better awareness.The tests have been verified kernel versions:
- 4.13.0
- 4.15.0
- 6.1.0
- Opt for
-
adjust bpf programs for big endian
In aya/src/sys/bpf.rs, there are several simple bpf programs written as
byte arrays. These need to be adjusted to account for big endian. -
expose run_time_ns and run_cnt fields in ProgramInfo
Added functions to exposerun_time_ns
&run_cnt
statistics from
ProgramInfo/bpf_prog_info. -
add BPF_ENABLE_STATS syscall function
Add bpf syscall function for BPF_ENABLE_STATS to enable stats tracking
for benchmarking purposes.Additionally, move
#[cfg(test)]
annotation around theDrop
trait
instead. Having separate functions causes some complications when
needing ownership/moving of the inner valueOwnedFd
whenDrop
is
manually implemented. -
:programs::uprobe: fix bad variable name
The variable fn_name was very much not the fn_name, but rather the
object file path. -
adjust symbol lookup tests for object crate alignment requirements
The object::File::parse API requires parameter to be aligned with 8 bytes.
Adjusted the Vec in the tests with miri to meet this requirement. -
add symbol lookup in associated debug files
This change enhances the logic for symbol lookup in uprobe or uretprobe.
If the symbol is not found in the original binary, the search continues
in the debug file associated through the debuglink section. Before
searching the symbol table, it compares the build IDs of the two files.
The symbol lookup will only be terminated if both build IDs exist and do
not match. This modification does not affect the existing symbol lookup
logic. -
Generate new bindings
-
include license in crate workspace
This PR includes the licenses files in the crate workspace subdirectory.
Without this, they won't be showing on crates.io and would be giving out
errors on tooling such as rust2rpm. -
appease new nightly clippy lints
error: unnecessary qualification --> aya/src/maps/ring_buf.rs:434:22 | 434 | ptr: ptr::NonNull::new(ptr).ok_or( | ^^^^^^^^^^^^^^^^^ | note: the lint level is defined here --> aya/src/lib.rs:72:5 | 72 | unused_qualifications, | ^^^^^^^^^^^^^^^^^^^^^ help: remove the unnecessary path segments | 434 - ptr: ptr::NonNull::new(ptr).ok_or( 434 + ptr: NonNull::new(ptr).ok_or( | error: unnecessary qualification --> aya/src/maps/mod.rs:225:21 | 225 | let mut limit = std::mem::MaybeUninit::<rlimit>::uninit(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | help: remove the unnecessary path segments | 225 - let mut limit = std::mem::MaybeUninit::<rlimit>::uninit(); 225 + let mut limit = mem::MaybeUninit::<rlimit>::uninit(); | error: unnecessary qualification --> aya/src/programs/m...
aya-obj v0.1.0
New Features
- Rename Bpf to Ebpf
And BpfLoader to EbpfLoader.
This also adds type aliases to preserve the use of the old names, making
updating to a new Aya release less of a burden. These aliases are marked
as deprecated since we'll likely remove them in a later release.
Other
-
revamp MapInfo be more friendly with older kernels
Adds detection for whether a field is available inMapInfo
:- For
map_type()
, we treturn new enumMapType
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 probebpf_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.
- For
-
revamp ProgramInfo be more friendly with older kernels
Purpose of this commit is to add detections for whether a field is
available inProgramInfo
.- For
program_type()
, we return the new enumProgramType
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 probebpf_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()
fieldprog_info_gpl_compatible()
probe ->gpl_compatible()
field
With the
prog_info_map_ids()
probe, the previous implementation that
I had forbpf_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. - For
-
add conversion u32 to enum type for prog, link, & attach type
Add conversion from u32 to program type, link type, and attach type.
Additionally, remove duplicate match statement for u32 conversion to
BPF_MAP_TYPE_BLOOM_FILTER
&BPF_MAP_TYPE_CGRP_STORAGE
.New error
InvalidTypeBinding<T>
is created to represent when a
parsed/received value binding to a type is invalid.
This is used in the new conversions added here, and also replaces
InvalidMapTypeError
inTryFrom
forbpf_map_type
. -
add archs powerpc64 and s390x to aya
bpfman, a project using aya, has a requirement to support powerpc64 and
s390x architectures. Adding these two architectures to aya. -
Generate new bindings
Test
- adjust test to not use byte arrays
Where possible, replace the hardcoded byte arrays in the tests with the
structs they represent, then convert the structs to byte arrays. - adjust test byte arrays for big endian
Adding support for s390x (big endian architecture) and found that some
of the unit tests have structures and files implemented as byte arrays.
They are all coded as little endian and need a bug endian version to
work properly.
New Features (BREAKING)
- Rename BpfRelocationError -> EbpfRelocationError
- Rename BpfSectionKind to EbpfSectionKind
Commit Statistics
- 19 commits contributed to the release.
- 223 days passed between releases.
- 10 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
- Uncategorized
- Appease clippy (
aa240ba
) - Merge pull request #1007 from tyrone-wu/aya/info-api (
15eb935
) - Revamp MapInfo be more friendly with older kernels (
fbb0930
) - Revamp ProgramInfo be more friendly with older kernels (
88f5ac3
) - Add conversion u32 to enum type for prog, link, & attach type (
1634fa7
) - Merge pull request #974 from Billy99/billy99-arch-ppc64-s390x (
ab5e688
) - Adjust test to not use byte arrays (
4dc4b5c
) - Add archs powerpc64 and s390x to aya (
b513af1
) - Adjust test byte arrays for big endian (
eef7346
) - Merge pull request #989 from aya-rs/codegen (
8015e10
) - [codegen] Update libbpf to 686f600bca59e107af4040d0838ca2b02c14ff50 (
8d7446e
) - Merge pull request #978 from aya-rs/codegen (
06aa5c8
) - [codegen] Update libbpf to c1a6c770c46c6e78ad6755bf596c23a4e6f6b216 (
8b50a6a
) - Document miri skip reasons (
35962a4
) - Generate new bindings (
b06ff40
) - Merge pull request #528 from dave-tucker/rename-all-the-things (
63d8d4d
) - Rename Bpf to Ebpf (
8c79b71
) - Rename BpfRelocationError -> EbpfRelocationError (
fd48c55
) - Rename BpfSectionKind to EbpfSectionKind (
cf3e2ca
)
- Appease clippy (
aya-log-v0.2.1
Chore
- Rename bpf -> ebpf
Documentation
- reword rustdocs a bit
New Features
- Rename Bpf to Ebpf
And BpfLoader to EbpfLoader.
This also adds type aliases to preserve the use of the old names, making
updating to a new Aya release less of a burden. These aliases are marked
as deprecated since we'll likely remove them in a later release. - Rename BpfLogger to EbpfLogger
Bug Fixes
- print &[u8] using full width
Otherwise&[1u8, 0u8]
cannot be distinguished from&[0x10u8]
(they both become 10)
Other
-
remove unwrap and NonZero* in info
Addresses the feedback from #1007:- remove panic from
unwrap
andexpect
- Option<NonZero*> => Option with
0
mapping toNone
- remove panic from
-
revamp MapInfo be more friendly with older kernels
Adds detection for whether a field is available inMapInfo
:- For
map_type()
, we treturn new enumMapType
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 probebpf_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.
- For
-
revamp ProgramInfo be more friendly with older kernels
Purpose of this commit is to add detections for whether a field is
available inProgramInfo
.- For
program_type()
, we return the new enumProgramType
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 probebpf_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()
fieldprog_info_gpl_compatible()
probe ->gpl_compatible()
field
With the
prog_info_map_ids()
probe, the previous implementation that
I had forbpf_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. - For
-
Allow logging
core::net::Ipv4Addr
andcore::net::Ipv6Addr
IP address types are available incore
, so they can be used also in
eBPF programs. This change adds support of these types in aya-log.- Add implementation of
WriteTuBuf
to these types. - Support these types in
Ipv4Formatter
andIpv6Formatter
. - Support them with
DisplayHint::Ip
. - Add support for formatting
[u8; 4]
, to be able to handle
Ipv4Addr::octets
.
- Add implementation of
-
allow re-attach and read previously created logs
This feature is useful if someone wants to view the log contents
of a program that is already running. For e.g. a pinned program
or an XDP program attached to a net interface.
Test
- adjust test byte arrays for big endian
Adding support for s390x (big endian architecture) and found that some
of the unit tests have structures and files implemented as byte arrays.
They are all coded as little endian and need a bug endian version to
work properly.
Commit Statistics
- 20 commits contributed to the release.
- 223 days passed between releases.
- 11 commits were understood as conventional.
- 1 unique issue was worked on: #1008
Commit Details
view details
- #1008
- Print &[u8] using full width (
55ed9e0
)
- Print &[u8] using full width (
- Uncategorized
- Release aya-log-common v0.1.15, aya-log-ebpf v0.1.1 (
04bbbcc
) - Release aya-obj v0.2.0, aya v0.13.0, safety bump aya v0.13.0 (
c169b72
) - Reduce duplication in
{nr,possible}_cpus
(f3b2744
) - Remove unwrap and NonZero* in info (
02d1db5
) - Merge pull request #1007 from tyrone-wu/aya/info-api (
15eb935
) - Revamp MapInfo be more friendly with older kernels (
fbb0930
) - Revamp ProgramInfo be more friendly with older kernels (
88f5ac3
) - Merge pull request #974 from Billy99/billy99-arch-ppc64-s390x (
ab5e688
) - Adjust test byte arrays for big endian (
eef7346
) - Revert "Remove unused
allow(dead_code)
" (4161993
) - Remove unused
allow(dead_code)
(5397c1c
) - Allow logging
core::net::Ipv4Addr
andcore::net::Ipv6Addr
(a75fc2f
) - Merge pull request #900 from catalin-h/log_init_from_program_id (
e5d107d
) - Reword rustdocs a bit (
8830c0b
) - Allow re-attach and read previously created logs (
e66f954
) - Merge pull request #528 from dave-tucker/rename-all-the-things (
63d8d4d
) - Rename Bpf to Ebpf (
8c79b71
) - Rename BpfLogger to EbpfLogger (
a93e354
) - Rename bpf -> ebpf (
41c6156
)
- Release aya-log-common v0.1.15, aya-log-ebpf v0.1.1 (
aya-log-common v0.1.15
Other
-
Allow logging
core::net::Ipv4Addr
andcore::net::Ipv6Addr
IP address types are available incore
, so they can be used also in
eBPF programs. This change adds support of these types in aya-log.- Add implementation of
WriteTuBuf
to these types. - Support these types in
Ipv4Formatter
andIpv6Formatter
. - Support them with
DisplayHint::Ip
. - Add support for formatting
[u8; 4]
, to be able to handle
Ipv4Addr::octets
.
- Add implementation of
Chore
- Prepare for aya-log-ebpf release
Commit Statistics
- 3 commits contributed to the release.
- 223 days passed between releases.
- 2 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
aya-ebpf v0.1.1
New Features
-
Implement memmove
The compiler will emit this function for certain operations, but aya
currently does not provide an implementation.
This leads to ebpf loading failures as the kernel can't find the symbol when
loading the program.The implementation is based on https://github.com/rust-lang/compiler-builtins/blob/master/src/mem/mod.rs#L29-L40
and https://github.com/rust-lang/compiler-builtins/blob/master/src/mem/impls.rs#L128-L135
Only the simplest case has been implemented, none of the word optimizations,
since memcpy also doesn't seem to have them.
Bug Fixes
- Remove PerfEventArray::with_max_entries
This API doesn't make sense as the max_entries needs to be set to the
number of online CPUs by the loader.
Other
- Add set_reply accessor to SockOpsContext
- add archs powerpc64 and s390x to aya
bpfman, a project using aya, has a requirement to support powerpc64 and
s390x architectures. Adding these two architectures to aya. - moved ret from ProbeContext into new RetProbeContext
Created retprobe.rs to hold RetProbeContext and moved the ret from
ProbeContext in probe.rs into RetProbeContext. Now, only kprobe (which
uses ProbeContext) can access args, and kretprobe (which uses
RetProbeContext) can access ret.
Commit Statistics
- 11 commits contributed to the release.
- 185 days passed between releases.
- 5 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
aya-ebpf-macros v0.1.1
Chore
- aya-ebpf-macros: uncomment aya-ebpf dev-dep
This wasn't meant to be committed, cargo-smart-release. Commenting is
needed to fix the cyclic dep aya-ebpf-macros -> aya-ebpf ->
aya-ebpf-macros. See
rust-lang/cargo#4242 (comment)
Other
- separate probe to probe ctx & retprobe to retprobe ctx
Added logic in expand function in both kprobe.rs and uprobe.rs for valid
macros. Now, kprobe & uprobe proc macros only accept ProbeContext, and
kretprobe & uretprobe only accept RetProbeContext.
Commit Statistics
- 2 commits contributed to the release.
- 185 days passed between releases.
- 2 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
aya-ebpf-cty v0.2.2
Other
- add archs powerpc64 and s390x to aya
bpfman, a project using aya, has a requirement to support powerpc64 and
s390x architectures. Adding these two architectures to aya.
Commit Statistics
- 3 commits contributed to the release.
- 185 days passed between releases.
- 1 commit was understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
aya-ebpf-bindings v0.1.1
Other
- add archs powerpc64 and s390x to aya
bpfman, a project using aya, has a requirement to support powerpc64 and
s390x architectures. Adding these two architectures to aya.
Commit Statistics
- 8 commits contributed to the release.
- 185 days passed between releases.
- 1 commit was understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
aya-log-parser v0.1.13
Chore
-
Don't use path deps in workspace
This moves the path dependencies back into the per-crate Cargo.toml.
It is required such that the release tooling can correctly calculate
which version constraints require changing when we perform a release. -
Use the cargo workspace package table
This allows for inheritance of common fields from the workspace root.
The following fields have been made common:- authors
- license
- repository
- homepage
- edition
Chore
- add missing changelogs
Other
-
add support of :p format
-
Define dependencies on the workspace level
This way we will avoid version mismatches and make differences in
features across our crates clearer. -
suppress resolver warning on nightly
warning: some crates are on edition 2021 which defaults to `resolver = "2"`, but virtual workspaces default to `resolver = "1"`
-
Unify IP format hints into one, repsesent it by
:i
token
Having separate format hints and tokens per IP address family is
unnecessary, since they are represented by different types and we handle
format hints for each type separately. So we can just have one format
hint.Also, we should be consistent with the format strings grammar in
Rust[0]. Thetype
token, which is mapped to formatting traits, usually
consists of one letter[1] (and optional?
forDebug
trait, but that
doesn't matter for us). It shouldn't consist of multiple letters. Our
:ipv4
and:ipv6
tokens were clearly breaking that convention, so we
should rather switch to something with one letter - hence:i
.[0] https://doc.rust-lang.org/std/fmt/#syntax
[1] https://doc.rust-lang.org/std/fmt/#formatting-traits -
Add format hints for MAC addresses
Add{:mac}
(for lower-case hex representation) and{:MAC}
(for
upper-case hex representation) format hints for the[u8; 6]
type,
which is the standard one in Linux to store physical addresses in.Tested with: https://github.com/vadorovsky/aya-examples/tree/main/xdp-mac
-
Add display hints
This change adds optional display hints:{:x}
,{:X}
- for hex representation of numbers{:ipv4}
,{:IPv4}
- for IPv4 addresses{:ipv6}
,{:IPv6}
- for IPv6 addresses
It also gets rid of dyn-fmt and instead comes with our own parser
implementation.Tested on: https://github.com/vadorovsky/aya-examples/tree/main/tc
Commit Statistics
- 18 commits contributed to the release over the course of 591 calendar days.
- 9 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Commit Details
view details
- Uncategorized
- Add missing changelogs (1d515fe)
- Release aya-log-common v0.1.14, aya-log v0.2.0 (c22a696)
- Don't use path deps in workspace (13b1fc6)
- Merge pull request #882 from dave-tucker/metadata (0fadd69)
- Use the cargo workspace package table (b3e7ef7)
- Add support of :p format (8e485bc)
- Merge pull request #667 from vadorovsky/workspace-dependencies (f554d42)
- Define dependencies on the workspace level (96fa08b)
- Merge pull request #650 from aya-rs/test-cleanup (61608e6)
- Include ~all crates in default members (6d06e2b)
- Merge pull request #640 from aya-rs/lossy-conversions (ed70a47)
- Suppress resolver warning on nightly (e08c647)
- Unify IP format hints into one, repsesent it by
:i
token (84e5e28) - Merge pull request #456 from dmitris/uninlined_format_args (16b029e)
- Fix uninlined_format_args clippy issues (055d94f)
- Merge pull request #436 from vadorovsky/aya-log-mac-addr (3adb9b0)
- Add format hints for MAC addresses (2223ab8)
- Add display hints (83ec27f)