From 9261554e3c6ca37e401ec23a287a1ddf9cb1f26d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 00:26:06 +0000 Subject: [PATCH 1/8] build(deps): bump the cargo-crates group with 2 updates Updates the requirements on [dialoguer](https://github.com/console-rs/dialoguer) and [network-types](https://github.com/vadorovsky/network-types) to permit the latest version. Updates `dialoguer` to 0.11.0 - [Changelog](https://github.com/console-rs/dialoguer/blob/main/CHANGELOG.md) - [Commits](https://github.com/console-rs/dialoguer/compare/v0.11.0...v0.11.0) Updates `network-types` to 0.0.8 - [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.8...v0.0.8) --- updated-dependencies: - dependency-name: dialoguer dependency-version: 0.11.0 dependency-type: direct:production dependency-group: cargo-crates - dependency-name: network-types dependency-version: 0.0.8 dependency-type: direct:production dependency-group: cargo-crates ... Signed-off-by: dependabot[bot] --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 16825e1f..79130680 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,7 +70,7 @@ bytes = { version = "1", default-features = false } cargo_metadata = { version = "0.22.0", default-features = false } clap = { version = "4", default-features = false } const-assert = { version = "1.0.1", default-features = false } -dialoguer = { version = "0.11", default-features = false } +dialoguer = { version = "0.12", default-features = false } diff = { version = "0.1.13", default-features = false } env_logger = { version = "0.11", default-features = false } epoll = { version = "4.3.3", default-features = false } @@ -81,7 +81,7 @@ indoc = { version = "2.0", default-features = false } libc = { version = "0.2.105", default-features = false } log = { version = "0.4", default-features = false } netns-rs = { version = "0.1", default-features = false } -network-types = { version = "0.0.8", default-features = false } +network-types = { version = "0.1.0", default-features = false } nix = { version = "0.30.1", default-features = false } num_enum = { version = "0.7", default-features = false } object = { version = "0.37", default-features = false } From 23cbab571ce49073cd128f2ad79e4dadac536cb3 Mon Sep 17 00:00:00 2001 From: tamird <1535036+tamird@users.noreply.github.com> Date: Mon, 1 Sep 2025 04:24:30 +0000 Subject: [PATCH 2/8] aya-obj, aya-ebpf-bindings: regenerate libbpf commit: 20ea95b4505c477af3b6ff6ce9d19cee868ddc5d --- aya-obj/src/generated/btf_internal_bindings.rs | 2 +- aya-obj/src/generated/linux_bindings_aarch64.rs | 2 +- aya-obj/src/generated/linux_bindings_armv7.rs | 2 +- aya-obj/src/generated/linux_bindings_loongarch64.rs | 2 +- aya-obj/src/generated/linux_bindings_mips.rs | 2 +- aya-obj/src/generated/linux_bindings_powerpc64.rs | 2 +- aya-obj/src/generated/linux_bindings_riscv64.rs | 2 +- aya-obj/src/generated/linux_bindings_s390x.rs | 2 +- aya-obj/src/generated/linux_bindings_x86_64.rs | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aya-obj/src/generated/btf_internal_bindings.rs b/aya-obj/src/generated/btf_internal_bindings.rs index 09864b5d..e82dd8d0 100644 --- a/aya-obj/src/generated/btf_internal_bindings.rs +++ b/aya-obj/src/generated/btf_internal_bindings.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ pub type __u8 = ::core::ffi::c_uchar; pub type __u16 = ::core::ffi::c_ushort; diff --git a/aya-obj/src/generated/linux_bindings_aarch64.rs b/aya-obj/src/generated/linux_bindings_aarch64.rs index 2708ecfa..b76ed850 100644 --- a/aya-obj/src/generated/linux_bindings_aarch64.rs +++ b/aya-obj/src/generated/linux_bindings_aarch64.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_armv7.rs b/aya-obj/src/generated/linux_bindings_armv7.rs index 3a8a249a..08b3a162 100644 --- a/aya-obj/src/generated/linux_bindings_armv7.rs +++ b/aya-obj/src/generated/linux_bindings_armv7.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_loongarch64.rs b/aya-obj/src/generated/linux_bindings_loongarch64.rs index 2708ecfa..b76ed850 100644 --- a/aya-obj/src/generated/linux_bindings_loongarch64.rs +++ b/aya-obj/src/generated/linux_bindings_loongarch64.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_mips.rs b/aya-obj/src/generated/linux_bindings_mips.rs index 555185e2..349653d7 100644 --- a/aya-obj/src/generated/linux_bindings_mips.rs +++ b/aya-obj/src/generated/linux_bindings_mips.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_powerpc64.rs b/aya-obj/src/generated/linux_bindings_powerpc64.rs index 90ab9f21..50d01b86 100644 --- a/aya-obj/src/generated/linux_bindings_powerpc64.rs +++ b/aya-obj/src/generated/linux_bindings_powerpc64.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_riscv64.rs b/aya-obj/src/generated/linux_bindings_riscv64.rs index 2708ecfa..b76ed850 100644 --- a/aya-obj/src/generated/linux_bindings_riscv64.rs +++ b/aya-obj/src/generated/linux_bindings_riscv64.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_s390x.rs b/aya-obj/src/generated/linux_bindings_s390x.rs index 2708ecfa..b76ed850 100644 --- a/aya-obj/src/generated/linux_bindings_s390x.rs +++ b/aya-obj/src/generated/linux_bindings_s390x.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] diff --git a/aya-obj/src/generated/linux_bindings_x86_64.rs b/aya-obj/src/generated/linux_bindings_x86_64.rs index 2708ecfa..b76ed850 100644 --- a/aya-obj/src/generated/linux_bindings_x86_64.rs +++ b/aya-obj/src/generated/linux_bindings_x86_64.rs @@ -1,4 +1,4 @@ -/* automatically generated by rust-bindgen 0.72.0 */ +/* automatically generated by rust-bindgen 0.72.1 */ #[repr(C)] #[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] From a0b63b8811450f6add2adb40faee627453fe95c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 10:34:23 +0000 Subject: [PATCH 3/8] build(deps): bump the cargo-crates group with 2 updates (#1333) --- Cargo.toml | 4 +- xtask/public-api/aya.txt | 126 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 79130680..ec959eab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,7 +76,7 @@ env_logger = { version = "0.11", default-features = false } epoll = { version = "4.3.3", default-features = false } futures = { version = "0.3.28", default-features = false } glob = { version = "0.3.0", default-features = false } -hashbrown = { version = "0.15.0", default-features = false } +hashbrown = { version = "0.16.0", default-features = false } indoc = { version = "2.0", default-features = false } libc = { version = "0.2.105", default-features = false } log = { version = "0.4", default-features = false } @@ -88,7 +88,7 @@ object = { version = "0.37", default-features = false } once_cell = { version = "1.20.1", default-features = false } proc-macro2 = { version = "1", default-features = false } proc-macro2-diagnostics = { version = "0.10.1", default-features = false } -procfs = { version = "0.17.0", default-features = false } +procfs = { version = "0.18.0", default-features = false } public-api = { version = "0.50.0", default-features = false } quote = { version = "1", default-features = false } rand = { version = "0.9", default-features = false } diff --git a/xtask/public-api/aya.txt b/xtask/public-api/aya.txt index a0d9277f..25480b40 100644 --- a/xtask/public-api/aya.txt +++ b/xtask/public-api/aya.txt @@ -413,6 +413,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::maps::perf::Events impl core::panic::unwind_safe::UnwindSafe for aya::maps::perf::Events impl equivalent::Equivalent for aya::maps::perf::Events where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::maps::perf::Events::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::maps::perf::Events where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::maps::perf::Events::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::maps::perf::Events where U: core::convert::From pub fn aya::maps::perf::Events::into(self) -> U impl core::convert::TryFrom for aya::maps::perf::Events where U: core::convert::Into @@ -2504,6 +2506,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_device::C impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_device::CgroupDeviceLink impl equivalent::Equivalent for aya::programs::cgroup_device::CgroupDeviceLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_device::CgroupDeviceLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_device::CgroupDeviceLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_device::CgroupDeviceLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_device::CgroupDeviceLink where U: core::convert::From pub fn aya::programs::cgroup_device::CgroupDeviceLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_device::CgroupDeviceLink where U: core::convert::Into @@ -2539,6 +2543,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_device::C impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_device::CgroupDeviceLinkId impl equivalent::Equivalent for aya::programs::cgroup_device::CgroupDeviceLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_device::CgroupDeviceLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_device::CgroupDeviceLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_device::CgroupDeviceLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_device::CgroupDeviceLinkId where U: core::convert::From pub fn aya::programs::cgroup_device::CgroupDeviceLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_device::CgroupDeviceLinkId where U: core::convert::Into @@ -2672,6 +2678,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_skb::Cgro impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_skb::CgroupSkbLink impl equivalent::Equivalent for aya::programs::cgroup_skb::CgroupSkbLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_skb::CgroupSkbLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_skb::CgroupSkbLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_skb::CgroupSkbLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_skb::CgroupSkbLink where U: core::convert::From pub fn aya::programs::cgroup_skb::CgroupSkbLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_skb::CgroupSkbLink where U: core::convert::Into @@ -2707,6 +2715,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_skb::Cgro impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_skb::CgroupSkbLinkId impl equivalent::Equivalent for aya::programs::cgroup_skb::CgroupSkbLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_skb::CgroupSkbLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_skb::CgroupSkbLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_skb::CgroupSkbLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_skb::CgroupSkbLinkId where U: core::convert::From pub fn aya::programs::cgroup_skb::CgroupSkbLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_skb::CgroupSkbLinkId where U: core::convert::Into @@ -2802,6 +2812,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sock::Cgr impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sock::CgroupSockLink impl equivalent::Equivalent for aya::programs::cgroup_sock::CgroupSockLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sock::CgroupSockLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sock::CgroupSockLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sock::CgroupSockLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sock::CgroupSockLink where U: core::convert::From pub fn aya::programs::cgroup_sock::CgroupSockLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sock::CgroupSockLink where U: core::convert::Into @@ -2837,6 +2849,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sock::Cgr impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sock::CgroupSockLinkId impl equivalent::Equivalent for aya::programs::cgroup_sock::CgroupSockLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sock::CgroupSockLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sock::CgroupSockLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sock::CgroupSockLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sock::CgroupSockLinkId where U: core::convert::From pub fn aya::programs::cgroup_sock::CgroupSockLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sock::CgroupSockLinkId where U: core::convert::Into @@ -2932,6 +2946,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sock_addr impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sock_addr::CgroupSockAddrLink impl equivalent::Equivalent for aya::programs::cgroup_sock_addr::CgroupSockAddrLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sock_addr::CgroupSockAddrLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sock_addr::CgroupSockAddrLink where U: core::convert::From pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sock_addr::CgroupSockAddrLink where U: core::convert::Into @@ -2967,6 +2983,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sock_addr impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId impl equivalent::Equivalent for aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId where U: core::convert::From pub fn aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sock_addr::CgroupSockAddrLinkId where U: core::convert::Into @@ -3061,6 +3079,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sockopt:: impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sockopt::CgroupSockoptLink impl equivalent::Equivalent for aya::programs::cgroup_sockopt::CgroupSockoptLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sockopt::CgroupSockoptLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sockopt::CgroupSockoptLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sockopt::CgroupSockoptLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sockopt::CgroupSockoptLink where U: core::convert::From pub fn aya::programs::cgroup_sockopt::CgroupSockoptLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sockopt::CgroupSockoptLink where U: core::convert::Into @@ -3096,6 +3116,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sockopt:: impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sockopt::CgroupSockoptLinkId impl equivalent::Equivalent for aya::programs::cgroup_sockopt::CgroupSockoptLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sockopt::CgroupSockoptLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sockopt::CgroupSockoptLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sockopt::CgroupSockoptLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sockopt::CgroupSockoptLinkId where U: core::convert::From pub fn aya::programs::cgroup_sockopt::CgroupSockoptLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sockopt::CgroupSockoptLinkId where U: core::convert::Into @@ -3190,6 +3212,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sysctl::C impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sysctl::CgroupSysctlLink impl equivalent::Equivalent for aya::programs::cgroup_sysctl::CgroupSysctlLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sysctl::CgroupSysctlLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sysctl::CgroupSysctlLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sysctl::CgroupSysctlLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sysctl::CgroupSysctlLink where U: core::convert::From pub fn aya::programs::cgroup_sysctl::CgroupSysctlLink::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sysctl::CgroupSysctlLink where U: core::convert::Into @@ -3225,6 +3249,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::cgroup_sysctl::C impl core::panic::unwind_safe::UnwindSafe for aya::programs::cgroup_sysctl::CgroupSysctlLinkId impl equivalent::Equivalent for aya::programs::cgroup_sysctl::CgroupSysctlLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::cgroup_sysctl::CgroupSysctlLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::cgroup_sysctl::CgroupSysctlLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::cgroup_sysctl::CgroupSysctlLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::cgroup_sysctl::CgroupSysctlLinkId where U: core::convert::From pub fn aya::programs::cgroup_sysctl::CgroupSysctlLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::cgroup_sysctl::CgroupSysctlLinkId where U: core::convert::Into @@ -3357,6 +3383,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::extension::Exten impl core::panic::unwind_safe::UnwindSafe for aya::programs::extension::ExtensionLink impl equivalent::Equivalent for aya::programs::extension::ExtensionLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::extension::ExtensionLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::extension::ExtensionLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::extension::ExtensionLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::extension::ExtensionLink where U: core::convert::From pub fn aya::programs::extension::ExtensionLink::into(self) -> U impl core::convert::TryFrom for aya::programs::extension::ExtensionLink where U: core::convert::Into @@ -3392,6 +3420,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::extension::Exten impl core::panic::unwind_safe::UnwindSafe for aya::programs::extension::ExtensionLinkId impl equivalent::Equivalent for aya::programs::extension::ExtensionLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::extension::ExtensionLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::extension::ExtensionLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::extension::ExtensionLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::extension::ExtensionLinkId where U: core::convert::From pub fn aya::programs::extension::ExtensionLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::extension::ExtensionLinkId where U: core::convert::Into @@ -3490,6 +3520,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::fentry::FEntryLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::fentry::FEntryLink impl equivalent::Equivalent for aya::programs::fentry::FEntryLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::fentry::FEntryLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::fentry::FEntryLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::fentry::FEntryLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::fentry::FEntryLink where U: core::convert::From pub fn aya::programs::fentry::FEntryLink::into(self) -> U impl core::convert::TryFrom for aya::programs::fentry::FEntryLink where U: core::convert::Into @@ -3525,6 +3557,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::fentry::FEntryLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::fentry::FEntryLinkId impl equivalent::Equivalent for aya::programs::fentry::FEntryLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::fentry::FEntryLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::fentry::FEntryLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::fentry::FEntryLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::fentry::FEntryLinkId where U: core::convert::From pub fn aya::programs::fentry::FEntryLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::fentry::FEntryLinkId where U: core::convert::Into @@ -3623,6 +3657,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::fexit::FExitLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::fexit::FExitLink impl equivalent::Equivalent for aya::programs::fexit::FExitLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::fexit::FExitLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::fexit::FExitLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::fexit::FExitLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::fexit::FExitLink where U: core::convert::From pub fn aya::programs::fexit::FExitLink::into(self) -> U impl core::convert::TryFrom for aya::programs::fexit::FExitLink where U: core::convert::Into @@ -3658,6 +3694,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::fexit::FExitLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::fexit::FExitLinkId impl equivalent::Equivalent for aya::programs::fexit::FExitLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::fexit::FExitLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::fexit::FExitLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::fexit::FExitLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::fexit::FExitLinkId where U: core::convert::From pub fn aya::programs::fexit::FExitLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::fexit::FExitLinkId where U: core::convert::Into @@ -3750,6 +3788,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector:: impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissectorLink impl equivalent::Equivalent for aya::programs::flow_dissector::FlowDissectorLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::flow_dissector::FlowDissectorLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::flow_dissector::FlowDissectorLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::flow_dissector::FlowDissectorLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::flow_dissector::FlowDissectorLink where U: core::convert::From pub fn aya::programs::flow_dissector::FlowDissectorLink::into(self) -> U impl core::convert::TryFrom for aya::programs::flow_dissector::FlowDissectorLink where U: core::convert::Into @@ -3785,6 +3825,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::flow_dissector:: impl core::panic::unwind_safe::UnwindSafe for aya::programs::flow_dissector::FlowDissectorLinkId impl equivalent::Equivalent for aya::programs::flow_dissector::FlowDissectorLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::flow_dissector::FlowDissectorLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::flow_dissector::FlowDissectorLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::flow_dissector::FlowDissectorLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::flow_dissector::FlowDissectorLinkId where U: core::convert::From pub fn aya::programs::flow_dissector::FlowDissectorLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::flow_dissector::FlowDissectorLinkId where U: core::convert::Into @@ -3914,6 +3956,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::iter::IterLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::iter::IterLink impl equivalent::Equivalent for aya::programs::iter::IterLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::iter::IterLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::iter::IterLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::iter::IterLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::iter::IterLink where U: core::convert::From pub fn aya::programs::iter::IterLink::into(self) -> U impl core::convert::TryFrom for aya::programs::iter::IterLink where U: core::convert::Into @@ -3949,6 +3993,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::iter::IterLinkId impl core::panic::unwind_safe::UnwindSafe for aya::programs::iter::IterLinkId impl equivalent::Equivalent for aya::programs::iter::IterLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::iter::IterLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::iter::IterLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::iter::IterLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::iter::IterLinkId where U: core::convert::From pub fn aya::programs::iter::IterLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::iter::IterLinkId where U: core::convert::Into @@ -4085,6 +4131,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::kprobe::KProbeLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::kprobe::KProbeLink impl equivalent::Equivalent for aya::programs::kprobe::KProbeLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::kprobe::KProbeLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::kprobe::KProbeLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::kprobe::KProbeLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::kprobe::KProbeLink where U: core::convert::From pub fn aya::programs::kprobe::KProbeLink::into(self) -> U impl core::convert::TryFrom for aya::programs::kprobe::KProbeLink where U: core::convert::Into @@ -4120,6 +4168,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::kprobe::KProbeLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::kprobe::KProbeLinkId impl equivalent::Equivalent for aya::programs::kprobe::KProbeLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::kprobe::KProbeLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::kprobe::KProbeLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::kprobe::KProbeLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::kprobe::KProbeLinkId where U: core::convert::From pub fn aya::programs::kprobe::KProbeLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::kprobe::KProbeLinkId where U: core::convert::Into @@ -4380,6 +4430,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::links::FdLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::links::FdLink impl equivalent::Equivalent for aya::programs::links::FdLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::links::FdLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::links::FdLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::links::FdLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::links::FdLink where U: core::convert::From pub fn aya::programs::links::FdLink::into(self) -> U impl core::convert::TryFrom for aya::programs::links::FdLink where U: core::convert::Into @@ -4415,6 +4467,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::links::FdLinkId impl core::panic::unwind_safe::UnwindSafe for aya::programs::links::FdLinkId impl equivalent::Equivalent for aya::programs::links::FdLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::links::FdLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::links::FdLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::links::FdLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::links::FdLinkId where U: core::convert::From pub fn aya::programs::links::FdLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::links::FdLinkId where U: core::convert::Into @@ -4554,6 +4608,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::links::ProgAttac impl core::panic::unwind_safe::UnwindSafe for aya::programs::links::ProgAttachLink impl equivalent::Equivalent for aya::programs::links::ProgAttachLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::links::ProgAttachLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::links::ProgAttachLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::links::ProgAttachLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::links::ProgAttachLink where U: core::convert::From pub fn aya::programs::links::ProgAttachLink::into(self) -> U impl core::convert::TryFrom for aya::programs::links::ProgAttachLink where U: core::convert::Into @@ -4589,6 +4645,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::links::ProgAttac impl core::panic::unwind_safe::UnwindSafe for aya::programs::links::ProgAttachLinkId impl equivalent::Equivalent for aya::programs::links::ProgAttachLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::links::ProgAttachLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::links::ProgAttachLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::links::ProgAttachLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::links::ProgAttachLinkId where U: core::convert::From pub fn aya::programs::links::ProgAttachLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::links::ProgAttachLinkId where U: core::convert::Into @@ -4750,6 +4808,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::lirc_mode2::Lirc impl core::panic::unwind_safe::UnwindSafe for aya::programs::lirc_mode2::LircLink impl equivalent::Equivalent for aya::programs::lirc_mode2::LircLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::lirc_mode2::LircLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::lirc_mode2::LircLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::lirc_mode2::LircLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::lirc_mode2::LircLink where U: core::convert::From pub fn aya::programs::lirc_mode2::LircLink::into(self) -> U impl core::convert::TryFrom for aya::programs::lirc_mode2::LircLink where U: core::convert::Into @@ -4785,6 +4845,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::lirc_mode2::Lirc impl core::panic::unwind_safe::UnwindSafe for aya::programs::lirc_mode2::LircLinkId impl equivalent::Equivalent for aya::programs::lirc_mode2::LircLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::lirc_mode2::LircLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::lirc_mode2::LircLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::lirc_mode2::LircLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::lirc_mode2::LircLinkId where U: core::convert::From pub fn aya::programs::lirc_mode2::LircLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::lirc_mode2::LircLinkId where U: core::convert::Into @@ -4936,6 +4998,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::lsm::LsmLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::lsm::LsmLink impl equivalent::Equivalent for aya::programs::lsm::LsmLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::lsm::LsmLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::lsm::LsmLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::lsm::LsmLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::lsm::LsmLink where U: core::convert::From pub fn aya::programs::lsm::LsmLink::into(self) -> U impl core::convert::TryFrom for aya::programs::lsm::LsmLink where U: core::convert::Into @@ -4971,6 +5035,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::lsm::LsmLinkId impl core::panic::unwind_safe::UnwindSafe for aya::programs::lsm::LsmLinkId impl equivalent::Equivalent for aya::programs::lsm::LsmLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::lsm::LsmLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::lsm::LsmLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::lsm::LsmLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::lsm::LsmLinkId where U: core::convert::From pub fn aya::programs::lsm::LsmLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::lsm::LsmLinkId where U: core::convert::Into @@ -5010,6 +5076,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_attach::Per impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_attach::PerfLink impl equivalent::Equivalent for aya::programs::perf_attach::PerfLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::perf_attach::PerfLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::perf_attach::PerfLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::perf_attach::PerfLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::perf_attach::PerfLink where U: core::convert::From pub fn aya::programs::perf_attach::PerfLink::into(self) -> U impl core::convert::TryFrom for aya::programs::perf_attach::PerfLink where U: core::convert::Into @@ -5045,6 +5113,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_attach::Per impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_attach::PerfLinkId impl equivalent::Equivalent for aya::programs::perf_attach::PerfLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::perf_attach::PerfLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::perf_attach::PerfLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::perf_attach::PerfLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::perf_attach::PerfLinkId where U: core::convert::From pub fn aya::programs::perf_attach::PerfLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::perf_attach::PerfLinkId where U: core::convert::Into @@ -5267,6 +5337,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::Perf impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::PerfEventLink impl equivalent::Equivalent for aya::programs::perf_event::PerfEventLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::perf_event::PerfEventLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::perf_event::PerfEventLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::perf_event::PerfEventLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::perf_event::PerfEventLink where U: core::convert::From pub fn aya::programs::perf_event::PerfEventLink::into(self) -> U impl core::convert::TryFrom for aya::programs::perf_event::PerfEventLink where U: core::convert::Into @@ -5302,6 +5374,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::Perf impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::PerfEventLinkId impl equivalent::Equivalent for aya::programs::perf_event::PerfEventLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::perf_event::PerfEventLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::perf_event::PerfEventLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::perf_event::PerfEventLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::perf_event::PerfEventLinkId where U: core::convert::From pub fn aya::programs::perf_event::PerfEventLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::perf_event::PerfEventLinkId where U: core::convert::Into @@ -5400,6 +5474,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::raw_trace_point: impl core::panic::unwind_safe::UnwindSafe for aya::programs::raw_trace_point::RawTracePointLink impl equivalent::Equivalent for aya::programs::raw_trace_point::RawTracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::raw_trace_point::RawTracePointLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::raw_trace_point::RawTracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::raw_trace_point::RawTracePointLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::raw_trace_point::RawTracePointLink where U: core::convert::From pub fn aya::programs::raw_trace_point::RawTracePointLink::into(self) -> U impl core::convert::TryFrom for aya::programs::raw_trace_point::RawTracePointLink where U: core::convert::Into @@ -5435,6 +5511,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::raw_trace_point: impl core::panic::unwind_safe::UnwindSafe for aya::programs::raw_trace_point::RawTracePointLinkId impl equivalent::Equivalent for aya::programs::raw_trace_point::RawTracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::raw_trace_point::RawTracePointLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::raw_trace_point::RawTracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::raw_trace_point::RawTracePointLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::raw_trace_point::RawTracePointLinkId where U: core::convert::From pub fn aya::programs::raw_trace_point::RawTracePointLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::raw_trace_point::RawTracePointLinkId where U: core::convert::Into @@ -5533,6 +5611,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_lookup::SkLoo impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_lookup::SkLookupLink impl equivalent::Equivalent for aya::programs::sk_lookup::SkLookupLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_lookup::SkLookupLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_lookup::SkLookupLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_lookup::SkLookupLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_lookup::SkLookupLink where U: core::convert::From pub fn aya::programs::sk_lookup::SkLookupLink::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_lookup::SkLookupLink where U: core::convert::Into @@ -5568,6 +5648,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_lookup::SkLoo impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_lookup::SkLookupLinkId impl equivalent::Equivalent for aya::programs::sk_lookup::SkLookupLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_lookup::SkLookupLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_lookup::SkLookupLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_lookup::SkLookupLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_lookup::SkLookupLinkId where U: core::convert::From pub fn aya::programs::sk_lookup::SkLookupLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_lookup::SkLookupLinkId where U: core::convert::Into @@ -5666,6 +5748,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_msg::SkMsgLin impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_msg::SkMsgLink impl equivalent::Equivalent for aya::programs::sk_msg::SkMsgLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_msg::SkMsgLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_msg::SkMsgLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_msg::SkMsgLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_msg::SkMsgLink where U: core::convert::From pub fn aya::programs::sk_msg::SkMsgLink::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_msg::SkMsgLink where U: core::convert::Into @@ -5701,6 +5785,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_msg::SkMsgLin impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_msg::SkMsgLinkId impl equivalent::Equivalent for aya::programs::sk_msg::SkMsgLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_msg::SkMsgLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_msg::SkMsgLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_msg::SkMsgLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_msg::SkMsgLinkId where U: core::convert::From pub fn aya::programs::sk_msg::SkMsgLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_msg::SkMsgLinkId where U: core::convert::Into @@ -5834,6 +5920,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_skb::SkSkbLin impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_skb::SkSkbLink impl equivalent::Equivalent for aya::programs::sk_skb::SkSkbLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_skb::SkSkbLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_skb::SkSkbLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_skb::SkSkbLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_skb::SkSkbLink where U: core::convert::From pub fn aya::programs::sk_skb::SkSkbLink::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_skb::SkSkbLink where U: core::convert::Into @@ -5869,6 +5957,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sk_skb::SkSkbLin impl core::panic::unwind_safe::UnwindSafe for aya::programs::sk_skb::SkSkbLinkId impl equivalent::Equivalent for aya::programs::sk_skb::SkSkbLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sk_skb::SkSkbLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sk_skb::SkSkbLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sk_skb::SkSkbLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sk_skb::SkSkbLinkId where U: core::convert::From pub fn aya::programs::sk_skb::SkSkbLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::sk_skb::SkSkbLinkId where U: core::convert::Into @@ -5966,6 +6056,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sock_ops::SockOp impl core::panic::unwind_safe::UnwindSafe for aya::programs::sock_ops::SockOpsLink impl equivalent::Equivalent for aya::programs::sock_ops::SockOpsLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sock_ops::SockOpsLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sock_ops::SockOpsLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sock_ops::SockOpsLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sock_ops::SockOpsLink where U: core::convert::From pub fn aya::programs::sock_ops::SockOpsLink::into(self) -> U impl core::convert::TryFrom for aya::programs::sock_ops::SockOpsLink where U: core::convert::Into @@ -6001,6 +6093,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::sock_ops::SockOp impl core::panic::unwind_safe::UnwindSafe for aya::programs::sock_ops::SockOpsLinkId impl equivalent::Equivalent for aya::programs::sock_ops::SockOpsLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::sock_ops::SockOpsLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::sock_ops::SockOpsLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::sock_ops::SockOpsLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::sock_ops::SockOpsLinkId where U: core::convert::From pub fn aya::programs::sock_ops::SockOpsLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::sock_ops::SockOpsLinkId where U: core::convert::Into @@ -6125,6 +6219,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::socket_filter::S impl core::panic::unwind_safe::UnwindSafe for aya::programs::socket_filter::SocketFilterLink impl equivalent::Equivalent for aya::programs::socket_filter::SocketFilterLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::socket_filter::SocketFilterLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::socket_filter::SocketFilterLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::socket_filter::SocketFilterLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::socket_filter::SocketFilterLink where U: core::convert::From pub fn aya::programs::socket_filter::SocketFilterLink::into(self) -> U impl core::convert::TryFrom for aya::programs::socket_filter::SocketFilterLink where U: core::convert::Into @@ -6160,6 +6256,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::socket_filter::S impl core::panic::unwind_safe::UnwindSafe for aya::programs::socket_filter::SocketFilterLinkId impl equivalent::Equivalent for aya::programs::socket_filter::SocketFilterLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::socket_filter::SocketFilterLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::socket_filter::SocketFilterLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::socket_filter::SocketFilterLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::socket_filter::SocketFilterLinkId where U: core::convert::From pub fn aya::programs::socket_filter::SocketFilterLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::socket_filter::SocketFilterLinkId where U: core::convert::Into @@ -6227,6 +6325,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tc::TcAttachType impl core::panic::unwind_safe::UnwindSafe for aya::programs::tc::TcAttachType impl equivalent::Equivalent for aya::programs::tc::TcAttachType where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tc::TcAttachType::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tc::TcAttachType where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tc::TcAttachType::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tc::TcAttachType where U: core::convert::From pub fn aya::programs::tc::TcAttachType::into(self) -> U impl core::convert::TryFrom for aya::programs::tc::TcAttachType where U: core::convert::Into @@ -6313,6 +6413,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tc::NlOptions impl core::panic::unwind_safe::UnwindSafe for aya::programs::tc::NlOptions impl equivalent::Equivalent for aya::programs::tc::NlOptions where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tc::NlOptions::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tc::NlOptions where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tc::NlOptions::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tc::NlOptions where U: core::convert::From pub fn aya::programs::tc::NlOptions::into(self) -> U impl core::convert::TryFrom for aya::programs::tc::NlOptions where U: core::convert::Into @@ -6426,6 +6528,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tc::SchedClassif impl core::panic::unwind_safe::UnwindSafe for aya::programs::tc::SchedClassifierLink impl equivalent::Equivalent for aya::programs::tc::SchedClassifierLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tc::SchedClassifierLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tc::SchedClassifierLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tc::SchedClassifierLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tc::SchedClassifierLink where U: core::convert::From pub fn aya::programs::tc::SchedClassifierLink::into(self) -> U impl core::convert::TryFrom for aya::programs::tc::SchedClassifierLink where U: core::convert::Into @@ -6461,6 +6565,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tc::SchedClassif impl core::panic::unwind_safe::UnwindSafe for aya::programs::tc::SchedClassifierLinkId impl equivalent::Equivalent for aya::programs::tc::SchedClassifierLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tc::SchedClassifierLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tc::SchedClassifierLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tc::SchedClassifierLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tc::SchedClassifierLinkId where U: core::convert::From pub fn aya::programs::tc::SchedClassifierLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::tc::SchedClassifierLinkId where U: core::convert::Into @@ -6561,6 +6667,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tp_btf::BtfTrace impl core::panic::unwind_safe::UnwindSafe for aya::programs::tp_btf::BtfTracePointLink impl equivalent::Equivalent for aya::programs::tp_btf::BtfTracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tp_btf::BtfTracePointLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tp_btf::BtfTracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tp_btf::BtfTracePointLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tp_btf::BtfTracePointLink where U: core::convert::From pub fn aya::programs::tp_btf::BtfTracePointLink::into(self) -> U impl core::convert::TryFrom for aya::programs::tp_btf::BtfTracePointLink where U: core::convert::Into @@ -6596,6 +6704,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tp_btf::BtfTrace impl core::panic::unwind_safe::UnwindSafe for aya::programs::tp_btf::BtfTracePointLinkId impl equivalent::Equivalent for aya::programs::tp_btf::BtfTracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tp_btf::BtfTracePointLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tp_btf::BtfTracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tp_btf::BtfTracePointLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tp_btf::BtfTracePointLinkId where U: core::convert::From pub fn aya::programs::tp_btf::BtfTracePointLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::tp_btf::BtfTracePointLinkId where U: core::convert::Into @@ -6732,6 +6842,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::trace_point::Tra impl core::panic::unwind_safe::UnwindSafe for aya::programs::trace_point::TracePointLink impl equivalent::Equivalent for aya::programs::trace_point::TracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::trace_point::TracePointLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::trace_point::TracePointLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::trace_point::TracePointLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::trace_point::TracePointLink where U: core::convert::From pub fn aya::programs::trace_point::TracePointLink::into(self) -> U impl core::convert::TryFrom for aya::programs::trace_point::TracePointLink where U: core::convert::Into @@ -6767,6 +6879,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::trace_point::Tra impl core::panic::unwind_safe::UnwindSafe for aya::programs::trace_point::TracePointLinkId impl equivalent::Equivalent for aya::programs::trace_point::TracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::trace_point::TracePointLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::trace_point::TracePointLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::trace_point::TracePointLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::trace_point::TracePointLinkId where U: core::convert::From pub fn aya::programs::trace_point::TracePointLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::trace_point::TracePointLinkId where U: core::convert::Into @@ -6979,6 +7093,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::uprobe::UProbeLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::uprobe::UProbeLink impl equivalent::Equivalent for aya::programs::uprobe::UProbeLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::uprobe::UProbeLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::uprobe::UProbeLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::uprobe::UProbeLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::uprobe::UProbeLink where U: core::convert::From pub fn aya::programs::uprobe::UProbeLink::into(self) -> U impl core::convert::TryFrom for aya::programs::uprobe::UProbeLink where U: core::convert::Into @@ -7014,6 +7130,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::uprobe::UProbeLi impl core::panic::unwind_safe::UnwindSafe for aya::programs::uprobe::UProbeLinkId impl equivalent::Equivalent for aya::programs::uprobe::UProbeLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::uprobe::UProbeLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::uprobe::UProbeLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::uprobe::UProbeLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::uprobe::UProbeLinkId where U: core::convert::From pub fn aya::programs::uprobe::UProbeLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::uprobe::UProbeLinkId where U: core::convert::Into @@ -7262,6 +7380,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::xdp::XdpLink impl core::panic::unwind_safe::UnwindSafe for aya::programs::xdp::XdpLink impl equivalent::Equivalent for aya::programs::xdp::XdpLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::xdp::XdpLink::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::xdp::XdpLink where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::xdp::XdpLink::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::xdp::XdpLink where U: core::convert::From pub fn aya::programs::xdp::XdpLink::into(self) -> U impl core::convert::TryFrom for aya::programs::xdp::XdpLink where U: core::convert::Into @@ -7297,6 +7417,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::xdp::XdpLinkId impl core::panic::unwind_safe::UnwindSafe for aya::programs::xdp::XdpLinkId impl equivalent::Equivalent for aya::programs::xdp::XdpLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::xdp::XdpLinkId::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::xdp::XdpLinkId where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::xdp::XdpLinkId::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::xdp::XdpLinkId where U: core::convert::From pub fn aya::programs::xdp::XdpLinkId::into(self) -> U impl core::convert::TryFrom for aya::programs::xdp::XdpLinkId where U: core::convert::Into @@ -8074,6 +8196,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::tc::TcAttachType impl core::panic::unwind_safe::UnwindSafe for aya::programs::tc::TcAttachType impl equivalent::Equivalent for aya::programs::tc::TcAttachType where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::programs::tc::TcAttachType::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::programs::tc::TcAttachType where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::programs::tc::TcAttachType::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::programs::tc::TcAttachType where U: core::convert::From pub fn aya::programs::tc::TcAttachType::into(self) -> U impl core::convert::TryFrom for aya::programs::tc::TcAttachType where U: core::convert::Into @@ -10113,6 +10237,8 @@ impl core::panic::unwind_safe::RefUnwindSafe for aya::util::KernelVersion impl core::panic::unwind_safe::UnwindSafe for aya::util::KernelVersion impl equivalent::Equivalent for aya::util::KernelVersion where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized pub fn aya::util::KernelVersion::equivalent(&self, key: &K) -> bool +impl hashbrown::Equivalent for aya::util::KernelVersion where Q: core::cmp::Eq + ?core::marker::Sized, K: core::borrow::Borrow + ?core::marker::Sized +pub fn aya::util::KernelVersion::equivalent(&self, key: &K) -> bool impl core::convert::Into for aya::util::KernelVersion where U: core::convert::From pub fn aya::util::KernelVersion::into(self) -> U impl core::convert::TryFrom for aya::util::KernelVersion where U: core::convert::Into From b36cbc3eb8413d4fba4f2d820fec8176751457ac Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Thu, 4 Sep 2025 22:16:42 +0000 Subject: [PATCH 4/8] implement load-time log level mask --- aya-log-ebpf-macros/src/expand.rs | 68 ++++++++++++++------------ aya-log/CHANGELOG.md | 7 +++ aya-log/README.md | 30 ++++++++++++ aya-log/src/lib.rs | 4 +- ebpf/aya-log-ebpf/src/lib.rs | 14 ++++++ test/integration-test/src/tests/log.rs | 53 +++++++++++++++++++- xtask/public-api/aya-log.txt | 2 + 7 files changed, 144 insertions(+), 34 deletions(-) diff --git a/aya-log-ebpf-macros/src/expand.rs b/aya-log-ebpf-macros/src/expand.rs index 890ffdc7..9d81d6a7 100644 --- a/aya-log-ebpf-macros/src/expand.rs +++ b/aya-log-ebpf-macros/src/expand.rs @@ -68,11 +68,11 @@ impl Parse for LogArgs { } } -pub(crate) fn log(args: LogArgs, level: Option) -> Result { +pub(crate) fn log(args: LogArgs, level_expr: Option) -> Result { let LogArgs { ctx, target, - level: level_expr, + level, format_string, formatting_args, } = args; @@ -80,14 +80,14 @@ pub(crate) fn log(args: LogArgs, level: Option) -> Result quote! { #t }, None => quote! { module_path!() }, }; - let level = match level { - Some(l) => l, + let level_expr = match level_expr { + Some(level_expr) => level_expr, None => { - let l = level_expr.ok_or(Error::new( + let level_expr = level.ok_or(Error::new( format_string.span(), "missing `level` argument: try passing an `aya_log_ebpf::Level` value", ))?; - quote! { #l } + quote! { #level_expr } } }; @@ -146,37 +146,41 @@ pub(crate) fn log(args: LogArgs, level: Option) -> Result {}, - Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { - // Silence unused variable warning; we may need ctx in the future. - let _ = #ctx; - let _: Option<()> = (|| { - let #size = ::aya_log_ebpf::macro_support::write_record_header( - #buf, - #target, - #level, - module_path!(), - file!(), - line!(), - #num_args, - )?; - let mut #size = #size.get(); - #( - { - let #buf = #buf.get_mut(#size..)?; - let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; - #size += #len.get(); - } - )* - let #record = #buf.get(..#size)?; - Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) - })(); + let #level = #level_expr; + if ::aya_log_ebpf::macro_support::level_enabled(#level) { + match ::aya_log_ebpf::macro_support::AYA_LOG_BUF.get_ptr_mut(0).and_then(|ptr| unsafe { ptr.as_mut() }) { + None => {}, + Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { + // Silence unused variable warning; we may need ctx in the future. + let _ = #ctx; + let _: Option<()> = (|| { + let #size = ::aya_log_ebpf::macro_support::write_record_header( + #buf, + #target, + #level, + module_path!(), + file!(), + line!(), + #num_args, + )?; + let mut #size = #size.get(); + #( + { + let #buf = #buf.get_mut(#size..)?; + let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; + #size += #len.get(); + } + )* + let #record = #buf.get(..#size)?; + Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) + })(); + } } } }) diff --git a/aya-log/CHANGELOG.md b/aya-log/CHANGELOG.md index 5eb0e76d..5508046d 100644 --- a/aya-log/CHANGELOG.md +++ b/aya-log/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### New Features + +- Add eBPF-side log level `AYA_LOG_LEVEL` allowing selective disabling of log + levels at load-time. Disabled levels are eliminated by the verifier, reducing + instruction count and avoiding program size limits when extensive logging is + present. + ### Breaking Changes - The implementation is now backed by a ring buffer rather than a perf event array. This should diff --git a/aya-log/README.md b/aya-log/README.md index 765247c9..1eefa995 100644 --- a/aya-log/README.md +++ b/aya-log/README.md @@ -69,3 +69,33 @@ fn try_xdp_firewall(ctx: XdpContext) -> Result { [aya]: https://github.com/aya-rs/aya [log]: https://docs.rs/log [env_logger]: https://docs.rs/env_logger + +## Disabling log levels at load-time + +eBPF instruction budgets are tight. Even if a log statement never executes at +runtime, the verifier must still evaluate its instructions unless it can prove +they're unreachable. `aya-log` now exposes a global `AYA_LOG_LEVEL` inside the +eBPF object allowing you to selectively enable levels before the program is +loaded. + +By default all bits are set (all logging enabled). To disable all logging: + +```rust +let mut bpf = aya::EbpfLoader::new() + .set_global(aya_log::LEVEL, &0, false /* must_exist */) + .load_file("prog.bpf.o")?; +# Ok::<(), aya::EbpfError>(()) +``` + +Enable only Error and Warn: + +```rust +let level = aya_log::Level::Warn as u8; +let mut bpf = EbpfLoader::new() + .set_global(aya_log::LEVEL, &level, false /* must_exist */) + .load_file("prog.bpf.o")?; +``` + +Because the level is placed in global read-only data, the verifier sees the +disabled branch as unreachable and prunes the logging instructions, reducing +overall instruction count and avoiding potential instruction limit issues. diff --git a/aya-log/src/lib.rs b/aya-log/src/lib.rs index 333ddcc9..7560f6aa 100644 --- a/aya-log/src/lib.rs +++ b/aya-log/src/lib.rs @@ -67,12 +67,14 @@ use std::{ const MAP_NAME: &str = "AYA_LOGS"; +pub const LEVEL: &str = "AYA_LOG_LEVEL"; use aya::{ Ebpf, Pod, maps::{Map, MapData, MapError, MapInfo, RingBuf}, programs::{ProgramError, loaded_programs}, }; -use aya_log_common::{Argument, DisplayHint, LOG_FIELDS, Level, LogValueLength, RecordField}; +pub use aya_log_common::Level; +use aya_log_common::{Argument, DisplayHint, LOG_FIELDS, LogValueLength, RecordField}; use log::{Log, Record, error}; use thiserror::Error; diff --git a/ebpf/aya-log-ebpf/src/lib.rs b/ebpf/aya-log-ebpf/src/lib.rs index 0a3f1421..f2398626 100644 --- a/ebpf/aya-log-ebpf/src/lib.rs +++ b/ebpf/aya-log-ebpf/src/lib.rs @@ -34,4 +34,18 @@ pub mod macro_support { // test/integration-test/Cargo.toml. #[cfg_attr(target_arch = "bpf", map)] pub static AYA_LOGS: RingBuf = RingBuf::with_byte_size((LOG_BUF_CAPACITY as u32) << 4, 0); + + /// Global log level controlling which log statements are active. + /// + /// Userspace may patch this symbol before load via `EbpfLoader::set_global`. + #[unsafe(no_mangle)] + pub static mut AYA_LOG_LEVEL: u8 = 0xff; + + /// Returns `true` if the provided level is enabled according to [`AYA_LOG_LEVEL`]. + #[inline(always)] + pub fn level_enabled(level: Level) -> bool { + #[expect(static_mut_refs)] + let current_level = unsafe { core::ptr::read_volatile(&AYA_LOG_LEVEL) }; + level as u8 <= current_level + } } diff --git a/test/integration-test/src/tests/log.rs b/test/integration-test/src/tests/log.rs index 987ec23b..91841f03 100644 --- a/test/integration-test/src/tests/log.rs +++ b/test/integration-test/src/tests/log.rs @@ -1,6 +1,6 @@ use std::{borrow::Cow, sync::Mutex}; -use aya::{Ebpf, programs::UProbe}; +use aya::{Ebpf, EbpfLoader, programs::UProbe}; use aya_log::EbpfLogger; use log::{Level, Log, Record}; @@ -173,3 +173,54 @@ fn log() { assert_eq!(records.next(), None); } + +#[test_log::test] +fn log_level_only_error_warn() { + let level = aya_log::Level::Warn as u8; + let mut bpf = EbpfLoader::new() + .set_global(aya_log::LEVEL, &level, true /* must_exist */) + .load(crate::LOG) + .unwrap(); + + let mut captured_logs = Vec::new(); + let logger = TestingLogger { + log: Mutex::new(|record: &Record| { + captured_logs.push(CapturedLog { + body: format!("{}", record.args()).into(), + level: record.level(), + target: record.target().to_string().into(), + }); + }), + }; + let mut logger = EbpfLogger::init_with_logger(&mut bpf, &logger).unwrap(); + + let prog: &mut UProbe = bpf.program_mut("test_log").unwrap().try_into().unwrap(); + prog.load().unwrap(); + prog.attach("trigger_ebpf_program", "/proc/self/exe", None, None) + .unwrap(); + + trigger_ebpf_program(); + logger.flush(); + + let mut records = captured_logs.iter(); + + assert_eq!( + records.next(), + Some(&CapturedLog { + body: "69, 420, wao, 77616f".into(), + level: Level::Error, + target: "log".into(), + }) + ); + + assert_eq!( + records.next(), + Some(&CapturedLog { + body: "hex lc: 2f, hex uc: 2F".into(), + level: Level::Warn, + target: "log".into(), + }) + ); + + assert_eq!(records.next(), None); +} diff --git a/xtask/public-api/aya-log.txt b/xtask/public-api/aya-log.txt index 47e000d8..3583315e 100644 --- a/xtask/public-api/aya-log.txt +++ b/xtask/public-api/aya-log.txt @@ -1,4 +1,5 @@ pub mod aya_log +pub use aya_log::Level pub enum aya_log::Error pub aya_log::Error::MapError(aya::maps::MapError) pub aya_log::Error::MapNotFound @@ -297,6 +298,7 @@ impl core::borrow::BorrowMut for aya_log::UpperMacFormatter where T: ?core pub fn aya_log::UpperMacFormatter::borrow_mut(&mut self) -> &mut T impl core::convert::From for aya_log::UpperMacFormatter pub fn aya_log::UpperMacFormatter::from(t: T) -> T +pub const aya_log::LEVEL: &str pub trait aya_log::Formatter pub fn aya_log::Formatter::format(v: T) -> alloc::string::String impl aya_log::Formatter<&[u8]> for aya_log::LowerHexBytesFormatter From f6606473af43090190337dd42f593df2f907ac0a Mon Sep 17 00:00:00 2001 From: Addison Crump Date: Fri, 5 Sep 2025 12:43:13 +0200 Subject: [PATCH 5/8] aya-log: properly hint log level to verifier The log level implementation in b36cbc3eb8413d4fba4f2d820fec8176751457ac was incomplete as the verifier could reject programs which exceeded their instruction limits within logging statements. This commit addresses this issue by making the log level static variable immutable (s.t. the compiler puts it in a read-only section) and adds an additional test which the verifier will reject as an infinite loop iff it is unable to detect that the static variable would otherwise allow the logging. --- ebpf/aya-log-ebpf/src/lib.rs | 3 +-- test/integration-ebpf/src/log.rs | 14 +++++++++- test/integration-test/src/tests/log.rs | 37 ++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/ebpf/aya-log-ebpf/src/lib.rs b/ebpf/aya-log-ebpf/src/lib.rs index f2398626..7d93f478 100644 --- a/ebpf/aya-log-ebpf/src/lib.rs +++ b/ebpf/aya-log-ebpf/src/lib.rs @@ -39,12 +39,11 @@ pub mod macro_support { /// /// Userspace may patch this symbol before load via `EbpfLoader::set_global`. #[unsafe(no_mangle)] - pub static mut AYA_LOG_LEVEL: u8 = 0xff; + pub static AYA_LOG_LEVEL: u8 = 0xff; /// Returns `true` if the provided level is enabled according to [`AYA_LOG_LEVEL`]. #[inline(always)] pub fn level_enabled(level: Level) -> bool { - #[expect(static_mut_refs)] let current_level = unsafe { core::ptr::read_volatile(&AYA_LOG_LEVEL) }; level as u8 <= current_level } diff --git a/test/integration-ebpf/src/log.rs b/test/integration-ebpf/src/log.rs index 67228b53..bff63e1e 100644 --- a/test/integration-ebpf/src/log.rs +++ b/test/integration-ebpf/src/log.rs @@ -1,7 +1,10 @@ #![no_std] #![no_main] -use core::net::{IpAddr, Ipv4Addr, Ipv6Addr}; +use core::{ + hint::black_box, + net::{IpAddr, Ipv4Addr, Ipv6Addr}, +}; use aya_ebpf::{macros::uprobe, programs::ProbeContext}; use aya_log_ebpf::{debug, error, info, trace, warn}; @@ -83,3 +86,12 @@ pub fn test_log(ctx: ProbeContext) { debug!(&ctx, "{:x}", no_copy.consume()); } } + +#[uprobe] +pub fn test_log_omission(ctx: ProbeContext) { + debug!( + &ctx, + "This is the last u32: {}", + black_box(0u32..).last().unwrap_or(u32::MAX) + ); +} diff --git a/test/integration-test/src/tests/log.rs b/test/integration-test/src/tests/log.rs index 91841f03..c7a8976a 100644 --- a/test/integration-test/src/tests/log.rs +++ b/test/integration-test/src/tests/log.rs @@ -224,3 +224,40 @@ fn log_level_only_error_warn() { assert_eq!(records.next(), None); } + +#[test_log::test] +fn log_level_prevents_verif_fail() { + let level = aya_log::Level::Warn as u8; + let mut bpf = EbpfLoader::new() + .set_global(aya_log::LEVEL, &level, true /* must_exist */) + .load(crate::LOG) + .unwrap(); + + let mut captured_logs = Vec::new(); + let logger = TestingLogger { + log: Mutex::new(|record: &Record| { + captured_logs.push(CapturedLog { + body: format!("{}", record.args()).into(), + level: record.level(), + target: record.target().to_string().into(), + }); + }), + }; + let mut logger = EbpfLogger::init_with_logger(&mut bpf, &logger).unwrap(); + + let prog: &mut UProbe = bpf + .program_mut("test_log_omission") + .unwrap() + .try_into() + .unwrap(); + prog.load().unwrap(); + prog.attach("trigger_ebpf_program", "/proc/self/exe", None, None) + .unwrap(); + + trigger_ebpf_program(); + logger.flush(); + + let mut records = captured_logs.iter(); + + assert_eq!(records.next(), None); +} From 53ec6164114bba84be145dc9659aaac917dd7a15 Mon Sep 17 00:00:00 2001 From: Xiaobo Liu Date: Tue, 12 Aug 2025 20:36:21 +0800 Subject: [PATCH 6/8] ebpf: add peak() method to Queue and Stack Add integration tests covering push,pop,peek for both types. Signed-off-by: Xiaobo Liu Signed-off-by: Tamir Duberstein --- ebpf/aya-ebpf/src/maps/queue.rs | 10 +- ebpf/aya-ebpf/src/maps/stack.rs | 21 ++++- test/integration-common/src/lib.rs | 5 + test/integration-ebpf/Cargo.toml | 4 + .../src/linear_data_structures.rs | 71 ++++++++++++++ test/integration-test/src/lib.rs | 1 + test/integration-test/src/tests.rs | 1 + .../src/tests/linear_data_structures.rs | 94 +++++++++++++++++++ xtask/public-api/aya-ebpf.txt | 12 ++- 9 files changed, 209 insertions(+), 10 deletions(-) create mode 100644 test/integration-ebpf/src/linear_data_structures.rs create mode 100644 test/integration-test/src/tests/linear_data_structures.rs diff --git a/ebpf/aya-ebpf/src/maps/queue.rs b/ebpf/aya-ebpf/src/maps/queue.rs index 8c8f0bb1..961ee8a1 100644 --- a/ebpf/aya-ebpf/src/maps/queue.rs +++ b/ebpf/aya-ebpf/src/maps/queue.rs @@ -2,7 +2,7 @@ use core::{cell::UnsafeCell, marker::PhantomData, mem}; use crate::{ bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_QUEUE}, - helpers::{bpf_map_pop_elem, bpf_map_push_elem}, + helpers::{bpf_map_peek_elem, bpf_map_pop_elem, bpf_map_push_elem}, maps::PinningType, }; @@ -63,4 +63,12 @@ impl Queue { (ret == 0).then_some(value.assume_init()) } } + + pub fn peek(&self) -> Option { + unsafe { + let mut value = mem::MaybeUninit::uninit(); + let ret = bpf_map_peek_elem(self.def.get() as *mut _, value.as_mut_ptr() as *mut _); + (ret == 0).then_some(value.assume_init()) + } + } } diff --git a/ebpf/aya-ebpf/src/maps/stack.rs b/ebpf/aya-ebpf/src/maps/stack.rs index 6328693d..05cbc2ee 100644 --- a/ebpf/aya-ebpf/src/maps/stack.rs +++ b/ebpf/aya-ebpf/src/maps/stack.rs @@ -2,7 +2,7 @@ use core::{marker::PhantomData, mem}; use crate::{ bindings::{bpf_map_def, bpf_map_type::BPF_MAP_TYPE_STACK}, - helpers::{bpf_map_pop_elem, bpf_map_push_elem}, + helpers::{bpf_map_peek_elem, bpf_map_pop_elem, bpf_map_push_elem}, maps::PinningType, }; @@ -43,10 +43,10 @@ impl Stack { } } - pub fn push(&mut self, value: &T, flags: u64) -> Result<(), i64> { + pub fn push(&self, value: &T, flags: u64) -> Result<(), i64> { let ret = unsafe { bpf_map_push_elem( - &mut self.def as *mut _ as *mut _, + &self.def as *const _ as *mut _, value as *const _ as *const _, flags, ) @@ -54,11 +54,22 @@ impl Stack { (ret == 0).then_some(()).ok_or(ret) } - pub fn pop(&mut self) -> Option { + pub fn pop(&self) -> Option { unsafe { let mut value = mem::MaybeUninit::uninit(); let ret = bpf_map_pop_elem( - &mut self.def as *mut _ as *mut _, + &self.def as *const _ as *mut _, + value.as_mut_ptr() as *mut _, + ); + (ret == 0).then_some(value.assume_init()) + } + } + + pub fn peek(&self) -> Option { + unsafe { + let mut value = mem::MaybeUninit::uninit(); + let ret = bpf_map_peek_elem( + &self.def as *const _ as *mut _, value.as_mut_ptr() as *mut _, ); (ret == 0).then_some(value.assume_init()) diff --git a/test/integration-common/src/lib.rs b/test/integration-common/src/lib.rs index f75a3939..8efed81d 100644 --- a/test/integration-common/src/lib.rs +++ b/test/integration-common/src/lib.rs @@ -64,3 +64,8 @@ pub mod strncmp { #[cfg(feature = "user")] unsafe impl aya::Pod for TestResult {} } + +pub mod linear_data_structures { + pub const PEEK_INDEX: u32 = 0; + pub const POP_INDEX: u32 = 1; +} diff --git a/test/integration-ebpf/Cargo.toml b/test/integration-ebpf/Cargo.toml index b0573882..78c8b89e 100644 --- a/test/integration-ebpf/Cargo.toml +++ b/test/integration-ebpf/Cargo.toml @@ -28,6 +28,10 @@ xtask = { path = "../../xtask" } name = "bpf_probe_read" path = "src/bpf_probe_read.rs" +[[bin]] +name = "linear_data_structures" +path = "src/linear_data_structures.rs" + [[bin]] name = "log" path = "src/log.rs" diff --git a/test/integration-ebpf/src/linear_data_structures.rs b/test/integration-ebpf/src/linear_data_structures.rs new file mode 100644 index 00000000..d8f01709 --- /dev/null +++ b/test/integration-ebpf/src/linear_data_structures.rs @@ -0,0 +1,71 @@ +#![no_std] +#![no_main] + +#[cfg(not(test))] +extern crate ebpf_panic; + +use aya_ebpf::{ + cty::c_long, + macros::{map, uprobe}, + maps::{Array, Queue, Stack}, + programs::ProbeContext, +}; +use integration_common::linear_data_structures::{PEEK_INDEX, POP_INDEX}; + +#[map] +static RESULT: Array = Array::::with_max_entries(2, 0); + +#[inline(always)] +fn result_set(index: u32, value: u64) -> Result<(), c_long> { + let ptr = RESULT.get_ptr_mut(index).ok_or(-1)?; + let dst = unsafe { ptr.as_mut() }; + let dst_res = dst.ok_or(-1)?; + *dst_res = value; + Ok(()) +} + +macro_rules! define_linear_ds_test { + ($Type:ident, $map_ident:ident, + push_fn: $push_fn:ident, + pop_fn: $pop_fn:ident, + peek_fn: $peek_fn:ident, + ) => { + #[map] + static $map_ident: $Type = $Type::with_max_entries(10, 0); + + #[uprobe] + pub fn $push_fn(ctx: ProbeContext) -> Result<(), c_long> { + let value = ctx.arg(0).ok_or(-1)?; + $map_ident.push(&value, 0)?; + Ok(()) + } + + #[uprobe] + pub fn $pop_fn(_: ProbeContext) -> Result<(), c_long> { + let value = $map_ident.pop().ok_or(-1)?; + result_set(POP_INDEX, value)?; + Ok(()) + } + + #[uprobe] + pub fn $peek_fn(_: ProbeContext) -> Result<(), c_long> { + let value = $map_ident.peek().ok_or(-1)?; + result_set(PEEK_INDEX, value)?; + Ok(()) + } + }; +} + +use define_linear_ds_test; + +define_linear_ds_test!(Stack, TEST_STACK, + push_fn: test_stack_push, + pop_fn: test_stack_pop, + peek_fn: test_stack_peek, +); + +define_linear_ds_test!(Queue, TEST_QUEUE, + push_fn: test_queue_push, + pop_fn: test_queue_pop, + peek_fn: test_queue_peek, +); diff --git a/test/integration-test/src/lib.rs b/test/integration-test/src/lib.rs index f7cc30c6..9dbb4d18 100644 --- a/test/integration-test/src/lib.rs +++ b/test/integration-test/src/lib.rs @@ -39,6 +39,7 @@ bpf_file!( VARIABLES_RELOC => "variables_reloc.bpf.o", BPF_PROBE_READ => "bpf_probe_read", + LINEAR_DATA_STRUCTURES => "linear_data_structures", LOG => "log", MAP_TEST => "map_test", MEMMOVE_TEST => "memmove_test", diff --git a/test/integration-test/src/tests.rs b/test/integration-test/src/tests.rs index 43894366..deaa63a5 100644 --- a/test/integration-test/src/tests.rs +++ b/test/integration-test/src/tests.rs @@ -4,6 +4,7 @@ mod elf; mod feature_probe; mod info; mod iter; +mod linear_data_structures; mod load; mod log; mod raw_tracepoint; diff --git a/test/integration-test/src/tests/linear_data_structures.rs b/test/integration-test/src/tests/linear_data_structures.rs new file mode 100644 index 00000000..49ddbfdb --- /dev/null +++ b/test/integration-test/src/tests/linear_data_structures.rs @@ -0,0 +1,94 @@ +use aya::{EbpfLoader, maps::Array, programs::UProbe}; +use integration_common::linear_data_structures::{PEEK_INDEX, POP_INDEX}; + +enum Order { + Lifo, + Fifo, +} + +macro_rules! define_linear_ds_host_test { + ( + push_prog: $push_prog:literal, + pop_prog: $pop_prog:literal, + peek_prog: $peek_prog:literal, + push_fn: $push_fn:ident, + pop_fn: $pop_fn:ident, + peek_fn: $peek_fn:ident, + test_fn: $test_fn:ident, + order: $order:expr, + ) => { + #[unsafe(no_mangle)] + #[inline(never)] + pub extern "C" fn $push_fn(arg: u64) { + core::hint::black_box(arg); + } + #[unsafe(no_mangle)] + #[inline(never)] + pub extern "C" fn $peek_fn(marker: u64) -> u64 { + core::hint::black_box($peek_fn); + marker + 1 + } + #[unsafe(no_mangle)] + #[inline(never)] + pub extern "C" fn $pop_fn(marker: u64) -> u64 { + core::hint::black_box($pop_fn); + marker + 2 + } + + #[test_log::test] + fn $test_fn() { + let mut bpf = EbpfLoader::new() + .load(crate::LINEAR_DATA_STRUCTURES) + .unwrap(); + for (prog_name, symbol) in [ + ($push_prog, stringify!($push_fn)), + ($peek_prog, stringify!($peek_fn)), + ($pop_prog, stringify!($pop_fn)), + ] { + let prog: &mut UProbe = bpf.program_mut(prog_name).unwrap().try_into().unwrap(); + prog.load().unwrap(); + prog.attach(symbol, "/proc/self/exe", None, None).unwrap(); + } + let array_map = bpf.map("RESULT").unwrap(); + let array = Array::<_, u64>::try_from(array_map).unwrap(); + let seq = 0..9; + for i in seq.clone() { + $push_fn(i); + } + let mut rev = seq.clone().rev(); + let mut seq = seq; + let iter: &mut dyn Iterator = match $order { + Order::Lifo => &mut rev, + Order::Fifo => &mut seq, + }; + for i in iter { + $peek_fn(i); + assert_eq!(array.get(&PEEK_INDEX, 0).unwrap(), i); + $pop_fn(i); + assert_eq!(array.get(&POP_INDEX, 0).unwrap(), i); + } + } + }; +} + +define_linear_ds_host_test!( + push_prog: "test_stack_push", + pop_prog: "test_stack_pop", + peek_prog: "test_stack_peek", + push_fn: trigger_stack_push, + pop_fn: trigger_stack_pop, + peek_fn: trigger_stack_peek, + test_fn: stack_basic, + order: Order::Lifo, +); + +define_linear_ds_host_test!( + push_prog: "test_queue_push", + pop_prog: "test_queue_pop", + peek_prog: "test_queue_peek", + push_fn: trigger_queue_push, + pop_fn: trigger_queue_pop, + peek_fn: trigger_queue_peek, + test_fn: queue_basic, + order: Order::Fifo, +); diff --git a/xtask/public-api/aya-ebpf.txt b/xtask/public-api/aya-ebpf.txt index 2d70495b..b70493ba 100644 --- a/xtask/public-api/aya-ebpf.txt +++ b/xtask/public-api/aya-ebpf.txt @@ -438,6 +438,7 @@ pub fn aya_ebpf::maps::program_array::ProgramArray::from(t: T) -> T pub mod aya_ebpf::maps::queue #[repr(transparent)] pub struct aya_ebpf::maps::queue::Queue impl aya_ebpf::maps::queue::Queue +pub fn aya_ebpf::maps::queue::Queue::peek(&self) -> core::option::Option pub const fn aya_ebpf::maps::queue::Queue::pinned(max_entries: u32, flags: u32) -> aya_ebpf::maps::queue::Queue pub fn aya_ebpf::maps::queue::Queue::pop(&self) -> core::option::Option pub fn aya_ebpf::maps::queue::Queue::push(&self, value: &T, flags: u64) -> core::result::Result<(), i64> @@ -592,9 +593,10 @@ pub fn aya_ebpf::maps::sock_map::SockMap::from(t: T) -> T pub mod aya_ebpf::maps::stack #[repr(transparent)] pub struct aya_ebpf::maps::stack::Stack impl aya_ebpf::maps::stack::Stack +pub fn aya_ebpf::maps::stack::Stack::peek(&self) -> core::option::Option pub const fn aya_ebpf::maps::stack::Stack::pinned(max_entries: u32, flags: u32) -> aya_ebpf::maps::stack::Stack -pub fn aya_ebpf::maps::stack::Stack::pop(&mut self) -> core::option::Option -pub fn aya_ebpf::maps::stack::Stack::push(&mut self, value: &T, flags: u64) -> core::result::Result<(), i64> +pub fn aya_ebpf::maps::stack::Stack::pop(&self) -> core::option::Option +pub fn aya_ebpf::maps::stack::Stack::push(&self, value: &T, flags: u64) -> core::result::Result<(), i64> pub const fn aya_ebpf::maps::stack::Stack::with_max_entries(max_entries: u32, flags: u32) -> aya_ebpf::maps::stack::Stack impl core::marker::Freeze for aya_ebpf::maps::stack::Stack impl core::marker::Send for aya_ebpf::maps::stack::Stack where T: core::marker::Send @@ -1166,6 +1168,7 @@ impl core::convert::From for aya_ebpf::maps::program_array::ProgramArray pub fn aya_ebpf::maps::program_array::ProgramArray::from(t: T) -> T #[repr(transparent)] pub struct aya_ebpf::maps::Queue impl aya_ebpf::maps::queue::Queue +pub fn aya_ebpf::maps::queue::Queue::peek(&self) -> core::option::Option pub const fn aya_ebpf::maps::queue::Queue::pinned(max_entries: u32, flags: u32) -> aya_ebpf::maps::queue::Queue pub fn aya_ebpf::maps::queue::Queue::pop(&self) -> core::option::Option pub fn aya_ebpf::maps::queue::Queue::push(&self, value: &T, flags: u64) -> core::result::Result<(), i64> @@ -1283,9 +1286,10 @@ impl core::convert::From for aya_ebpf::maps::sock_map::SockMap pub fn aya_ebpf::maps::sock_map::SockMap::from(t: T) -> T #[repr(transparent)] pub struct aya_ebpf::maps::Stack impl aya_ebpf::maps::stack::Stack +pub fn aya_ebpf::maps::stack::Stack::peek(&self) -> core::option::Option pub const fn aya_ebpf::maps::stack::Stack::pinned(max_entries: u32, flags: u32) -> aya_ebpf::maps::stack::Stack -pub fn aya_ebpf::maps::stack::Stack::pop(&mut self) -> core::option::Option -pub fn aya_ebpf::maps::stack::Stack::push(&mut self, value: &T, flags: u64) -> core::result::Result<(), i64> +pub fn aya_ebpf::maps::stack::Stack::pop(&self) -> core::option::Option +pub fn aya_ebpf::maps::stack::Stack::push(&self, value: &T, flags: u64) -> core::result::Result<(), i64> pub const fn aya_ebpf::maps::stack::Stack::with_max_entries(max_entries: u32, flags: u32) -> aya_ebpf::maps::stack::Stack impl core::marker::Freeze for aya_ebpf::maps::stack::Stack impl core::marker::Send for aya_ebpf::maps::stack::Stack where T: core::marker::Send From 222b2cb88f2f1848bc936b85cb41befabde0dd2b Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sat, 6 Sep 2025 07:01:29 -0400 Subject: [PATCH 7/8] .github: avoid spurious CI failures in forks This spams my email every day. --- .github/workflows/ci.yml | 11 ++++++----- .github/workflows/gen.yml | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2cf076a4..d9cc54c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,14 +41,15 @@ jobs: - run: ./clippy.sh + # On the `aya-rs/aya` repository, regenerate the public API on a schedule. + # + # On all other events and repositories assert the public API is up to date. - run: cargo xtask public-api - if: github.event_name != 'schedule' - + if: ${{ !(github.event_name == 'schedule' && github.repository == 'aya-rs/aya') }} - run: cargo xtask public-api --bless - if: github.event_name == 'schedule' - + if: ${{ (github.event_name == 'schedule' && github.repository == 'aya-rs/aya') }} - uses: peter-evans/create-pull-request@v7 - if: github.event_name == 'schedule' + if: ${{ (github.event_name == 'schedule' && github.repository == 'aya-rs/aya') }} with: # GitHub actions aren't allowed to trigger other actions to prevent # abuse; the canonical workaround is to use a sufficiently authorized diff --git a/.github/workflows/gen.yml b/.github/workflows/gen.yml index 416f72ef..e63ccc1b 100644 --- a/.github/workflows/gen.yml +++ b/.github/workflows/gen.yml @@ -2,7 +2,8 @@ name: codegen on: push: - branches-ignore: 'create-pull-request/**' + branches-ignore: + - 'create-pull-request/**' schedule: - cron: 00 4 * * * @@ -40,6 +41,7 @@ jobs: run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" - uses: peter-evans/create-pull-request@v7 + if: ${{ github.repository == 'aya-rs/aya' }} with: # GitHub actions aren't allowed to trigger other actions to prevent # abuse; the canonical workaround is to use a sufficiently authorized From aa47acc5074ac1507a72ea14d1172d6ed6d59294 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sat, 6 Sep 2025 08:10:16 -0400 Subject: [PATCH 8/8] aya-log-ebpf: allow macros in expr position This is load-bearing in aya-template. --- aya-log-ebpf-macros/src/expand.rs | 58 ++++++++++++++++--------------- test/integration-ebpf/src/log.rs | 3 +- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/aya-log-ebpf-macros/src/expand.rs b/aya-log-ebpf-macros/src/expand.rs index 9d81d6a7..45d5b41e 100644 --- a/aya-log-ebpf-macros/src/expand.rs +++ b/aya-log-ebpf-macros/src/expand.rs @@ -152,34 +152,36 @@ pub(crate) fn log(args: LogArgs, level_expr: Option) -> Result {}, - Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { - // Silence unused variable warning; we may need ctx in the future. - let _ = #ctx; - let _: Option<()> = (|| { - let #size = ::aya_log_ebpf::macro_support::write_record_header( - #buf, - #target, - #level, - module_path!(), - file!(), - line!(), - #num_args, - )?; - let mut #size = #size.get(); - #( - { - let #buf = #buf.get_mut(#size..)?; - let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; - #size += #len.get(); - } - )* - let #record = #buf.get(..#size)?; - Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) - })(); + { + let #level = #level_expr; + if ::aya_log_ebpf::macro_support::level_enabled(#level) { + match ::aya_log_ebpf::macro_support::AYA_LOG_BUF.get_ptr_mut(0).and_then(|ptr| unsafe { ptr.as_mut() }) { + None => {}, + Some(::aya_log_ebpf::macro_support::LogBuf { buf: #buf }) => { + // Silence unused variable warning; we may need ctx in the future. + let _ = #ctx; + let _: Option<()> = (|| { + let #size = ::aya_log_ebpf::macro_support::write_record_header( + #buf, + #target, + #level, + module_path!(), + file!(), + line!(), + #num_args, + )?; + let mut #size = #size.get(); + #( + { + let #buf = #buf.get_mut(#size..)?; + let #len = ::aya_log_ebpf::macro_support::WriteToBuf::write(#values_iter, #buf)?; + #size += #len.get(); + } + )* + let #record = #buf.get(..#size)?; + Result::<_, i64>::ok(::aya_log_ebpf::macro_support::AYA_LOGS.output(#record, 0)) + })(); + } } } } diff --git a/test/integration-ebpf/src/log.rs b/test/integration-ebpf/src/log.rs index bff63e1e..d2cc1fc4 100644 --- a/test/integration-ebpf/src/log.rs +++ b/test/integration-ebpf/src/log.rs @@ -83,7 +83,8 @@ pub fn test_log(ctx: ProbeContext) { let no_copy = NoCopy {}; - debug!(&ctx, "{:x}", no_copy.consume()); + // Check usage in expression position. + let () = debug!(&ctx, "{:x}", no_copy.consume()); } }