Skip to content

Releases: aya-rs/aya

aya v0.13.1

01 Nov 15:31
Compare
Choose a tag to compare

What's Changed

Full Changelog: aya-v0.13.0...aya-v0.13.1

aya-v0.13.0

09 Oct 10:23
Compare
Choose a tag to compare

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 of Bpf

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 and expect
    • Option<NonZero*> => Option with 0 mapping to None
  • 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.
  • 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.

  • 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 in TryFrom for bpf_map_type.

  • improve integration tests for info API
    Improves the existing integraiton tests for loaded_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 because check_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
    returns E2BIG, 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
  • 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 expose run_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 the Drop trait
    instead. Having separate functions causes some complications when
    needing ownership/moving of the inner value OwnedFd when Drop 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...
    
Read more

aya-obj v0.1.0

09 Oct 11:15
Compare
Choose a tag to compare

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 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.
  • 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.

  • 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 in TryFrom for bpf_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)

aya-log-v0.2.1

09 Oct 11:11
Compare
Choose a tag to compare

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 and expect
    • Option<NonZero*> => Option with 0 mapping to None
  • 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.
  • 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.

  • Allow logging core::net::Ipv4Addr and core::net::Ipv6Addr
    IP address types are available in core, 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 and Ipv6Formatter.
    • Support them with DisplayHint::Ip.
    • Add support for formatting [u8; 4], to be able to handle
      Ipv4Addr::octets.
  • 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)
  • 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 and core::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)

aya-log-common v0.1.15

09 Oct 10:57
Compare
Choose a tag to compare

Other

  • Allow logging core::net::Ipv4Addr and core::net::Ipv6Addr
    IP address types are available in core, 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 and Ipv6Formatter.
    • Support them with DisplayHint::Ip.
    • Add support for formatting [u8; 4], to be able to handle
      Ipv4Addr::octets.

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

view details
  • Uncategorized
    • Prepare for aya-log-ebpf release (c3f0c7d)
    • Allow logging core::net::Ipv4Addr and core::net::Ipv6Addr (a75fc2f)
    • Appease clippy (09442c2)

aya-ebpf v0.1.1

09 Oct 11:17
Compare
Choose a tag to compare

New Features

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

09 Oct 11:18
Compare
Choose a tag to compare

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

09 Oct 11:20
Compare
Choose a tag to compare

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

view details
  • Uncategorized
    • Merge pull request #974 from Billy99/billy99-arch-ppc64-s390x (ab5e688)
    • Add archs powerpc64 and s390x to aya (b513af1)
    • Allowlist expected cfgs (e4f9ed8)

aya-ebpf-bindings v0.1.1

09 Oct 11:21
Compare
Choose a tag to compare

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

12 Apr 13:38
Compare
Choose a tag to compare

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]. The type token, which is mapped to formatting traits, usually
    consists of one letter[1] (and optional ? for Debug 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)