All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
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.
WriteTuBuf
to these types.Ipv4Formatter
and Ipv6Formatter
.DisplayHint::Ip
.[u8; 4]
, to be able to handle
Ipv4Addr::octets
.c3f0c7d
`](https://github.com/aya-rs/aya/commit/c3f0c7dc3f
))
- Allow logging `core::net::Ipv4Addr` and `core::net::Ipv6Addr` ([`a75fc2f
`](https://github.com/aya-rs/aya/commit/a75fc2f769
))
- Appease clippy ([`09442c2
`](https://github.com/aya-rs/aya/commit/09442c2cbe
))
Use the cargo workspace package table This allows for inheritance of common fields from the workspace root. The following fields have been made common:
Option<NonZeroUsize>
is guaranteed to have the same size as usize
,
which is not guarnateed for Result
. This is a minor optimization, but
also results in simpler code.
Before deciding on this approach I tried various ways of making all these functions #[inline(never)] to save instructions but I ran into blockers:
We can eventually overcome these problems by "lying" in our BTF once support for it matures in the bpf-linker repo (e.g. Option should be perfectly legal as it is guaranteed to be word-sized), but we aren't there yet, and this is the safest thing we can do for now.
TagLenValue
; this type has a single method, which is now a
function.TagLenValue::write
(now write
). The tag is
always u8
, and the value is always a sequence of bytes.get
which
explicit check bounds.avoid requiring Copy Before this change:
error[E0382]: use of moved value: `no_copy`
--> test/integration-ebpf/src/log.rs:35:9
|
33 | let no_copy = NoCopy {};
| ------- move occurs because `no_copy` has type `NoCopy`, which does not implement the `Copy` trait
34 |
35 | debug!(&ctx, "{:x}", no_copy.consume());
| ^^^^^^^^^^^^^^^^^^^^^-------^---------^
| | | |
| | | `no_copy` moved due to this method call
| | use occurs due to use in closure
| value used here after move
|
note: `NoCopy::consume` takes ownership of the receiver `self`, which moves `no_copy`
--> test/integration-ebpf/src/log.rs:28:24
|
28 | fn consume(self) -> u64 {
| ^^^^
= note: this error originates in the macro `debug` (in Nightly builds, run with -Z macro-backtrace for more info)
For more information about this error, try `rustc --explain E0382`.
error: could not compile `integration-ebpf` (bin "log") due to previous error
fix compile errors
aya-log-ebpf-macros was failing to compile because it was referencing
a couple of DisplayHint
variants that no longer exist. These were
removed in #599.
Compiling aya-log-ebpf-macros v0.1.0 (/home/robert/aya/aya-log-ebpf-macros)
error[E0599]: no variant or associated item named `Ipv4` found for enum `DisplayHint` in the current scope
--> aya-log-ebpf-macros/src/expand.rs:93:22
|
93 | DisplayHint::Ipv4 => parse_str("::aya_log_ebpf::macro_support::check_impl_ipv4"),
| ^^^^ variant or associated item not found in `DisplayHint`
- <csr-id-84e5e2894f226f4b2c7cb637a6f44d5773b927e6/> 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
- <csr-id-d9f966ec9e49f4439710559cac852bde62810975/> support logging byte slices
These only support LowerHex and UpperHex hints for now.
- <csr-id-9a1a720a74fd458b4865e1139dd2f4ca84994ef2/> generalize TagLenValue
This allows logging values backed by generators.
- <csr-id-5603d7248a51a16233c249b645e30ea3f6804744/> Move the `Pod` implementations from aya-log-common to aya-log
Keeping the `Pod` implementations and optional dependency on aya in
aya-log-common breaks the clippy checks (which are made on the entire
workspace).
The reason is that when different crates inside the workspace have the
same dependency with different features, that dependency is built only
once with the sum of features needed by all crates. It's **not** being
built separately with different feature sets.
That's why, before this change, aya-log-common was built once for the
entire workspace with `userspace` feature enabled. That made importing
aya-log-ebpf inside integration-ebpf impossible. The aya-log-common
build, with `userspace` feature enabled, was pulling std as a
dependency. Therefore, importing aya-log-ebpf inside integration-ebpf
resulted in including std and errors like:
error[E0152]: found duplicate lang item panic_impl
--> test/integration-ebpf/src/log.rs:23:1
|
23 | fn panic(_info: &core::panic::PanicInfo) -> ! {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: the lang item is first defined in crate `std` (which `aya` depends on)
```
This change fixes the problem by removing the userspace
feature from
aya-log-common and moving the Pod
implementations to aya-log.
updated-dependencies:
b6a84b6
`](https://github.com/aya-rs/aya/commit/b6a84b658a
))
- Add CHANGELOG ([`4f0f095
`](https://github.com/aya-rs/aya/commit/4f0f095775
))
- Release aya-log-common v0.1.14, aya-log v0.2.0 ([`c22a696
`](https://github.com/aya-rs/aya/commit/c22a6963d4
))
- Merge pull request #882 from dave-tucker/metadata ([`0fadd69
`](https://github.com/aya-rs/aya/commit/0fadd69537
))
- Use the cargo workspace package table ([`b3e7ef7
`](https://github.com/aya-rs/aya/commit/b3e7ef741c
))
- Merge pull request #738 from aya-rs/kill-qemu-better ([`fbbf191
`](https://github.com/aya-rs/aya/commit/fbbf191bd3
))
- Update comments ([`b54a106
`](https://github.com/aya-rs/aya/commit/b54a106584
))
- Merge pull request #735 from aya-rs/log-option-not-result ([`ecf0dd9
`](https://github.com/aya-rs/aya/commit/ecf0dd9739
))
- S/Result/Option/ ([`ca3f70b
`](https://github.com/aya-rs/aya/commit/ca3f70b16a
))
- Merge pull request #729 from aya-rs/logs-inline-always ([`84d5791
`](https://github.com/aya-rs/aya/commit/84d5791d4e
))
- Annotate logging functions inlining ([`3cfd886
`](https://github.com/aya-rs/aya/commit/3cfd886dc5
))
- Simplify ([`fe047d7
`](https://github.com/aya-rs/aya/commit/fe047d79a3
))
- Merge pull request #667 from vadorovsky/workspace-dependencies ([`f554d42
`](https://github.com/aya-rs/aya/commit/f554d42105
))
- Define dependencies on the workspace level ([`96fa08b
`](https://github.com/aya-rs/aya/commit/96fa08bd82
))
- Merge pull request #666 from aya-rs/toml-fmt ([`dc3b0b8
`](https://github.com/aya-rs/aya/commit/dc3b0b8730
))
- Add formatter and check in CI ([`c8bf646
`](https://github.com/aya-rs/aya/commit/c8bf646ef0
))
- Merge pull request #650 from aya-rs/test-cleanup ([`61608e6
`](https://github.com/aya-rs/aya/commit/61608e6458
))
- Include ~all crates in default members ([`6d06e2b
`](https://github.com/aya-rs/aya/commit/6d06e2bf3a
))
- Merge pull request #641 from aya-rs/logger-messages-plz ([`4c0983b
`](https://github.com/aya-rs/aya/commit/4c0983bca9
))
- Add missing test annotation ([`7f25956
`](https://github.com/aya-rs/aya/commit/7f25956aea
))
- Merge pull request #611 from probulate/check-refs-not-values ([`3f1a469
`](https://github.com/aya-rs/aya/commit/3f1a469f06
))
- Simplify argument validation ([`6feebef
`](https://github.com/aya-rs/aya/commit/6feebef9e5
))
- Avoid requiring Copy ([`de79724
`](https://github.com/aya-rs/aya/commit/de7972483b
))
- Fix compile errors ([`47a2f25
`](https://github.com/aya-rs/aya/commit/47a2f25fca
))
- Unify IP format hints into one, repsesent it by `:i` token ([`84e5e28
`](https://github.com/aya-rs/aya/commit/84e5e2894f
))
- Merge pull request #606 from Hanaasagi/check-format-in-log ([`58f1ecb
`](https://github.com/aya-rs/aya/commit/58f1ecbf00
))
- Remove some useless code ([`d999a95
`](https://github.com/aya-rs/aya/commit/d999a95b41
))
- Check format and value type in proc macro ([`0970300`](https://github.com/aya-rs/aya/commit/0970300d1f
))
- Merge pull request #585 from probulate/tag-len-value ([`5165bf2
`](https://github.com/aya-rs/aya/commit/5165bf2f99
))
- Support logging byte slices ([`d9f966e
`](https://github.com/aya-rs/aya/commit/d9f966ec9e
))
- Generalize TagLenValue ([`9a1a720
`](https://github.com/aya-rs/aya/commit/9a1a720a74
))
- Aya-log, aya-log-common: economize bytes ([`a4a69a6
`](https://github.com/aya-rs/aya/commit/a4a69a6bcf
))
- Merge pull request #591 from vadorovsky/aya-log-impl-pod ([`3d3ce8b
`](https://github.com/aya-rs/aya/commit/3d3ce8bfa2
))
- Move the `Pod` implementations from aya-log-common to aya-log ([`5603d72
`](https://github.com/aya-rs/aya/commit/5603d7248a
))
- Merge branch 'aya-rs:main' into lsm_sleepable ([`1f2006b
`](https://github.com/aya-rs/aya/commit/1f2006bfde
))
- Merge pull request #570 from aya-rs/dependabot/cargo/num_enum-0.6 ([`fcc8a0d
`](https://github.com/aya-rs/aya/commit/fcc8a0d50d
))
- Update num_enum requirement from 0.5 to 0.6 ([`b10a311
`](https://github.com/aya-rs/aya/commit/b10a31183b
))
- Revert "aya-log, aya-log-common: temporarily revert to old map API so we can release" ([`0b41018
`](https://github.com/aya-rs/aya/commit/0b41018ee2
))
{: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
832bdd2
`](https://github.com/aya-rs/aya/commit/832bdd280c
))
- Aya-log, aya-log-common: temporarily revert to old map API so we can release ([`0d040d2
`](https://github.com/aya-rs/aya/commit/0d040d2290
))
- Merge pull request #436 from vadorovsky/aya-log-mac-addr ([`3adb9b0
`](https://github.com/aya-rs/aya/commit/3adb9b049f
))
- Add format hints for MAC addresses ([`2223ab8
`](https://github.com/aya-rs/aya/commit/2223ab828d
))
- Aya-log, aya-log-common: start next development iteration 0.1.12-dev.0 ([`6f0637a
`](https://github.com/aya-rs/aya/commit/6f0637a6c8
))
- Aya-log, aya-log-common: release version 0.1.11 ([`ba927ac
`](https://github.com/aya-rs/aya/commit/ba927ac204
))
- Add display hints ([`83ec27f
`](https://github.com/aya-rs/aya/commit/83ec27f06b
))
- Change from Rust edition 2018 to 2021 ([`944d6b8
`](https://github.com/aya-rs/aya/commit/944d6b8a16
))
- Merge pull request #353 from vadorovsky/log-remove-u128 ([`d968094
`](https://github.com/aya-rs/aya/commit/d968094b66
))
- Remove i128 and u128 types ([`611f967
`](https://github.com/aya-rs/aya/commit/611f967cd1
))
- Merge pull request #350 from dave-tucker/monorepo ([`f37a514
`](https://github.com/aya-rs/aya/commit/f37a51433f
))
- Re-organize into a single workspace ([`dc31e11
`](https://github.com/aya-rs/aya/commit/dc31e11691
))