pull/1365/merge
Friday Ortiz 3 weeks ago committed by GitHub
commit 47129a9ad6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -25,6 +25,25 @@ for VERSION in "${VERSIONS[@]}"; do
exit 1
}
FILES+=("$match")
# The debug package contains the actual System.map. Debian has transitioned
# between -dbg and -dbgsym suffixes, so match either for the specific kernel
# we just selected.
kernel_basename=$(basename "$match")
kernel_prefix=${kernel_basename%%_*}
kernel_suffix=${kernel_basename#${kernel_prefix}_}
base_prefix=${kernel_prefix%-unsigned}
base_prefix_regex=$(printf '%s\n' "$base_prefix" | sed 's/[][(){}.^$*+?|\\-]/\\&/g')
kernel_suffix_regex=$(printf '%s\n' "$kernel_suffix" | sed 's/[][(){}.^$*+?|\\-]/\\&/g')
DEBUG_REGEX="${base_prefix_regex}-dbg(sym)?_${kernel_suffix_regex}"
debug_match=$(printf '%s\n' "$URLS" | grep -E "$DEBUG_REGEX" | sort -V | tail -n1) || {
printf 'Failed to locate debug package matching %s\n%s\nVERSION=%s\nREGEX=%s\n' \
"$kernel_basename" "$URLS" "$VERSION" "$DEBUG_REGEX" >&2
exit 1
}
FILES+=("$debug_match")
done
# Note: `--etag-{compare,save}` are not idempotent until curl 8.9.0 which included

@ -1,9 +1,10 @@
#include <linux/bpf.h>
#include <linux/btf.h>
#include <linux/hw_breakpoint.h>
#include <linux/if_link.h>
#include <linux/netfilter.h>
#include <linux/perf_event.h>
#include <linux/pkt_cls.h>
#include <linux/pkt_sched.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>
#include <sys/socket.h>

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -2105,6 +2105,22 @@ pub struct btf_var_secinfo {
pub struct btf_decl_tag {
pub component_idx: __s32,
}
pub const HW_BREAKPOINT_LEN_1: _bindgen_ty_44 = 1;
pub const HW_BREAKPOINT_LEN_2: _bindgen_ty_44 = 2;
pub const HW_BREAKPOINT_LEN_3: _bindgen_ty_44 = 3;
pub const HW_BREAKPOINT_LEN_4: _bindgen_ty_44 = 4;
pub const HW_BREAKPOINT_LEN_5: _bindgen_ty_44 = 5;
pub const HW_BREAKPOINT_LEN_6: _bindgen_ty_44 = 6;
pub const HW_BREAKPOINT_LEN_7: _bindgen_ty_44 = 7;
pub const HW_BREAKPOINT_LEN_8: _bindgen_ty_44 = 8;
pub type _bindgen_ty_44 = ::core::ffi::c_uint;
pub const HW_BREAKPOINT_EMPTY: _bindgen_ty_45 = 0;
pub const HW_BREAKPOINT_R: _bindgen_ty_45 = 1;
pub const HW_BREAKPOINT_W: _bindgen_ty_45 = 2;
pub const HW_BREAKPOINT_RW: _bindgen_ty_45 = 3;
pub const HW_BREAKPOINT_X: _bindgen_ty_45 = 4;
pub const HW_BREAKPOINT_INVALID: _bindgen_ty_45 = 7;
pub type _bindgen_ty_45 = ::core::ffi::c_uint;
impl nlmsgerr_attrs {
pub const NLMSGERR_ATTR_MAX: nlmsgerr_attrs = nlmsgerr_attrs::NLMSGERR_ATTR_COOKIE;
}
@ -2117,17 +2133,17 @@ pub enum nlmsgerr_attrs {
NLMSGERR_ATTR_COOKIE = 3,
__NLMSGERR_ATTR_MAX = 4,
}
pub const IFLA_XDP_UNSPEC: _bindgen_ty_92 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_92 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_92 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_92 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_92 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_92 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_92 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_92 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_92 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_92 = 9;
pub type _bindgen_ty_92 = ::core::ffi::c_uint;
pub const IFLA_XDP_UNSPEC: _bindgen_ty_94 = 0;
pub const IFLA_XDP_FD: _bindgen_ty_94 = 1;
pub const IFLA_XDP_ATTACHED: _bindgen_ty_94 = 2;
pub const IFLA_XDP_FLAGS: _bindgen_ty_94 = 3;
pub const IFLA_XDP_PROG_ID: _bindgen_ty_94 = 4;
pub const IFLA_XDP_DRV_PROG_ID: _bindgen_ty_94 = 5;
pub const IFLA_XDP_SKB_PROG_ID: _bindgen_ty_94 = 6;
pub const IFLA_XDP_HW_PROG_ID: _bindgen_ty_94 = 7;
pub const IFLA_XDP_EXPECTED_FD: _bindgen_ty_94 = 8;
pub const __IFLA_XDP_MAX: _bindgen_ty_94 = 9;
pub type _bindgen_ty_94 = ::core::ffi::c_uint;
impl nf_inet_hooks {
pub const NF_INET_INGRESS: nf_inet_hooks = nf_inet_hooks::NF_INET_NUMHOOKS;
}
@ -2141,16 +2157,16 @@ pub enum nf_inet_hooks {
NF_INET_POST_ROUTING = 4,
NF_INET_NUMHOOKS = 5,
}
pub const NFPROTO_UNSPEC: _bindgen_ty_99 = 0;
pub const NFPROTO_INET: _bindgen_ty_99 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_99 = 2;
pub const NFPROTO_ARP: _bindgen_ty_99 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_99 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_99 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_99 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_99 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_99 = 13;
pub type _bindgen_ty_99 = ::core::ffi::c_uint;
pub const NFPROTO_UNSPEC: _bindgen_ty_101 = 0;
pub const NFPROTO_INET: _bindgen_ty_101 = 1;
pub const NFPROTO_IPV4: _bindgen_ty_101 = 2;
pub const NFPROTO_ARP: _bindgen_ty_101 = 3;
pub const NFPROTO_NETDEV: _bindgen_ty_101 = 5;
pub const NFPROTO_BRIDGE: _bindgen_ty_101 = 7;
pub const NFPROTO_IPV6: _bindgen_ty_101 = 10;
pub const NFPROTO_DECNET: _bindgen_ty_101 = 12;
pub const NFPROTO_NUMPROTO: _bindgen_ty_101 = 13;
pub type _bindgen_ty_101 = ::core::ffi::c_uint;
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum perf_type_id {
@ -4111,20 +4127,20 @@ pub enum perf_event_type {
PERF_RECORD_AUX_OUTPUT_HW_ID = 21,
PERF_RECORD_MAX = 22,
}
pub const TCA_BPF_UNSPEC: _bindgen_ty_154 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_154 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_154 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_154 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_154 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_154 = 5;
pub const TCA_BPF_FD: _bindgen_ty_154 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_154 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_154 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_154 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_154 = 10;
pub const TCA_BPF_ID: _bindgen_ty_154 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_154 = 12;
pub type _bindgen_ty_154 = ::core::ffi::c_uint;
pub const TCA_BPF_UNSPEC: _bindgen_ty_156 = 0;
pub const TCA_BPF_ACT: _bindgen_ty_156 = 1;
pub const TCA_BPF_POLICE: _bindgen_ty_156 = 2;
pub const TCA_BPF_CLASSID: _bindgen_ty_156 = 3;
pub const TCA_BPF_OPS_LEN: _bindgen_ty_156 = 4;
pub const TCA_BPF_OPS: _bindgen_ty_156 = 5;
pub const TCA_BPF_FD: _bindgen_ty_156 = 6;
pub const TCA_BPF_NAME: _bindgen_ty_156 = 7;
pub const TCA_BPF_FLAGS: _bindgen_ty_156 = 8;
pub const TCA_BPF_FLAGS_GEN: _bindgen_ty_156 = 9;
pub const TCA_BPF_TAG: _bindgen_ty_156 = 10;
pub const TCA_BPF_ID: _bindgen_ty_156 = 11;
pub const __TCA_BPF_MAX: _bindgen_ty_156 = 12;
pub type _bindgen_ty_156 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct ifinfomsg {
@ -4146,22 +4162,22 @@ pub struct tcmsg {
pub tcm_parent: __u32,
pub tcm_info: __u32,
}
pub const TCA_UNSPEC: _bindgen_ty_174 = 0;
pub const TCA_KIND: _bindgen_ty_174 = 1;
pub const TCA_OPTIONS: _bindgen_ty_174 = 2;
pub const TCA_STATS: _bindgen_ty_174 = 3;
pub const TCA_XSTATS: _bindgen_ty_174 = 4;
pub const TCA_RATE: _bindgen_ty_174 = 5;
pub const TCA_FCNT: _bindgen_ty_174 = 6;
pub const TCA_STATS2: _bindgen_ty_174 = 7;
pub const TCA_STAB: _bindgen_ty_174 = 8;
pub const TCA_PAD: _bindgen_ty_174 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_174 = 10;
pub const TCA_CHAIN: _bindgen_ty_174 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_174 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_174 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_174 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_174 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_174 = 16;
pub const __TCA_MAX: _bindgen_ty_174 = 17;
pub type _bindgen_ty_174 = ::core::ffi::c_uint;
pub const TCA_UNSPEC: _bindgen_ty_176 = 0;
pub const TCA_KIND: _bindgen_ty_176 = 1;
pub const TCA_OPTIONS: _bindgen_ty_176 = 2;
pub const TCA_STATS: _bindgen_ty_176 = 3;
pub const TCA_XSTATS: _bindgen_ty_176 = 4;
pub const TCA_RATE: _bindgen_ty_176 = 5;
pub const TCA_FCNT: _bindgen_ty_176 = 6;
pub const TCA_STATS2: _bindgen_ty_176 = 7;
pub const TCA_STAB: _bindgen_ty_176 = 8;
pub const TCA_PAD: _bindgen_ty_176 = 9;
pub const TCA_DUMP_INVISIBLE: _bindgen_ty_176 = 10;
pub const TCA_CHAIN: _bindgen_ty_176 = 11;
pub const TCA_HW_OFFLOAD: _bindgen_ty_176 = 12;
pub const TCA_INGRESS_BLOCK: _bindgen_ty_176 = 13;
pub const TCA_EGRESS_BLOCK: _bindgen_ty_176 = 14;
pub const TCA_DUMP_FLAGS: _bindgen_ty_176 = 15;
pub const TCA_EXT_WARN_MSG: _bindgen_ty_176 = 16;
pub const __TCA_MAX: _bindgen_ty_176 = 17;
pub type _bindgen_ty_176 = ::core::ffi::c_uint;

@ -3,6 +3,7 @@
use std::os::fd::AsFd as _;
use aya_obj::generated::{
HW_BREAKPOINT_LEN_1, HW_BREAKPOINT_LEN_2, HW_BREAKPOINT_LEN_4, HW_BREAKPOINT_LEN_8,
bpf_link_type,
bpf_prog_type::BPF_PROG_TYPE_PERF_EVENT,
perf_hw_cache_id, perf_hw_cache_op_id, perf_hw_cache_op_result_id, perf_hw_id, perf_sw_ids,
@ -17,8 +18,8 @@ use crate::{
programs::{
FdLink, LinkError, ProgramData, ProgramError, ProgramType, impl_try_into_fdlink,
links::define_link_wrapper,
load_program, perf_attach,
perf_attach::{PerfLinkIdInner, PerfLinkInner},
load_program,
perf_attach::{PerfLinkIdInner, PerfLinkInner, perf_attach},
},
sys::{SyscallError, bpf_link_get_info_by_fd, perf_event_open},
};
@ -58,12 +59,8 @@ pub enum PerfEventConfig {
event_id: u64,
},
/// A hardware breakpoint.
///
/// Note: this variant is not fully implemented at the moment.
// TODO: Variant not fully implemented due to additional `perf_event_attr` fields like
// `bp_type`, `bp_addr`, etc.
#[doc(alias = "PERF_TYPE_BREAKPOINT")]
Breakpoint,
Breakpoint(BreakpointConfig),
/// The dynamic PMU (Performance Monitor Unit) event to report.
///
/// Available PMU's may be found under `/sys/bus/event_source/devices`.
@ -282,6 +279,85 @@ impl HwCacheResult {
}
}
/// Type of hardware breakpoint, determines if we break on read, write, or
/// execute, or if there should be no breakpoint on the given address.
#[derive(Debug, Clone, Copy)]
pub enum BreakpointConfig {
/// HW_BREAKPOINT_EMPTY, no breakpoint.
#[doc(alias = "HW_BREAKPOINT_EMPTY")]
Empty {
/// The size of the breakpoint being measured.
size: PerfBreakpointSize,
/// The address of the breakpoint.
address: u64,
},
/// HW_BREAKPOINT_R, count when we read the memory location.
#[doc(alias = "HW_BREAKPOINT_R")]
Read {
/// The size of the breakpoint being measured.
size: PerfBreakpointSize,
/// The address of the breakpoint.
address: u64,
},
/// HW_BREAKPOINT_W, count when we write the memory location.
#[doc(alias = "HW_BREAKPOINT_W")]
Write {
/// The size of the breakpoint being measured.
size: PerfBreakpointSize,
/// The address of the breakpoint.
address: u64,
},
/// HW_BREAKPOINT_RW, count when we read or write the memory location.
#[doc(alias = "HW_BREAKPOINT_RW")]
ReadWrite {
/// The size of the breakpoint being measured.
size: PerfBreakpointSize,
/// The address of the breakpoint.
address: u64,
},
/// HW_BREAKPOINT_X, count when we execute code at the memory location.
#[doc(alias = "HW_BREAKPOINT_X")]
Execute {
/// The address of the breakpoint.
address: u64,
},
}
/// The size of the breakpoint being observed in bytes.
#[repr(u64)]
#[derive(Debug, Clone, Copy)]
pub enum PerfBreakpointSize {
/// HW_BREAKPOINT_LEN_1
#[doc(alias = "HW_BREAKPOINT_LEN_1")]
HwBreakpointLen1 = HW_BREAKPOINT_LEN_1 as u64,
/// HW_BREAKPOINT_LEN_2
#[doc(alias = "HW_BREAKPOINT_LEN_2")]
HwBreakpointLen2 = HW_BREAKPOINT_LEN_2 as u64,
/// HW_BREAKPOINT_LEN_4
#[doc(alias = "HW_BREAKPOINT_LEN_4")]
HwBreakpointLen4 = HW_BREAKPOINT_LEN_4 as u64,
/// HW_BREAKPOINT_LEN_8
#[doc(alias = "HW_BREAKPOINT_LEN_8")]
HwBreakpointLen8 = HW_BREAKPOINT_LEN_8 as u64,
}
impl PerfBreakpointSize {
pub(crate) const fn into_primitive(self) -> u64 {
const _: [(); 8] = [(); std::mem::size_of::<PerfBreakpointSize>()];
self as u64
}
pub(crate) const fn from_primitive(size: u64) -> Self {
match size {
n if n == Self::HwBreakpointLen1.into_primitive() => Self::HwBreakpointLen1,
n if n == Self::HwBreakpointLen2.into_primitive() => Self::HwBreakpointLen2,
n if n == Self::HwBreakpointLen4.into_primitive() => Self::HwBreakpointLen4,
n if n == Self::HwBreakpointLen8.into_primitive() => Self::HwBreakpointLen8,
_ => panic!("invalid hardware breakpoint size"),
}
}
}
/// Sample Policy
#[derive(Debug, Clone)]
pub enum SamplePolicy {
@ -379,16 +455,17 @@ impl PerfEvent {
/// Attaches to the given perf event.
///
/// [`perf_type`](PerfEventConfig) defines the event `type` and `config` of interest.
/// [`perf_config`](PerfEventConfig) defines the event `type` and `config` of
/// interest.
///
/// [`scope`](PerfEventScope) determines which processes are sampled. If `inherit` is
/// `true`, any new processes spawned by those processes will also automatically be
/// sampled.
/// [`scope`](PerfEventScope) determines which processes are sampled. If
/// `inherit` is `true`, any new processes spawned by those processes will
/// also automatically be sampled.
///
/// The returned value can be used to detach, see [PerfEvent::detach].
pub fn attach(
&mut self,
perf_type: PerfEventConfig,
perf_config: PerfEventConfig,
scope: PerfEventScope,
sample_policy: SamplePolicy,
inherit: bool,
@ -396,7 +473,8 @@ impl PerfEvent {
let prog_fd = self.fd()?;
let prog_fd = prog_fd.as_fd();
let (perf_type, config) = match perf_type {
let mut breakpoint = None;
let (perf_type, config) = match perf_config {
PerfEventConfig::Pmu { pmu_type, config } => (pmu_type, config),
PerfEventConfig::Hardware(hw_event) => (
perf_type_id_to_u32(PERF_TYPE_HARDWARE),
@ -420,7 +498,10 @@ impl PerfEvent {
| (u64::from(result.into_primitive()) << 16),
),
PerfEventConfig::Raw { event_id } => (perf_type_id_to_u32(PERF_TYPE_RAW), event_id),
PerfEventConfig::Breakpoint => (perf_type_id_to_u32(PERF_TYPE_BREAKPOINT), 0),
PerfEventConfig::Breakpoint(config) => {
breakpoint = Some(config);
(perf_type_id_to_u32(PERF_TYPE_BREAKPOINT), 0)
}
};
let (sample_period, sample_frequency) = match sample_policy {
SamplePolicy::Period(period) => (period, None),
@ -440,9 +521,9 @@ impl PerfEvent {
cpu,
sample_period,
sample_frequency,
false,
inherit,
0,
breakpoint,
)
.map_err(|io_error| SyscallError {
call: "perf_event_open",

@ -5,6 +5,7 @@ use std::{
};
use aya_obj::generated::{
HW_BREAKPOINT_EMPTY, HW_BREAKPOINT_R, HW_BREAKPOINT_RW, HW_BREAKPOINT_W, HW_BREAKPOINT_X,
PERF_FLAG_FD_CLOEXEC, perf_event_attr,
perf_event_sample_format::PERF_SAMPLE_RAW,
perf_sw_ids::PERF_COUNT_SW_BPF_OUTPUT,
@ -13,6 +14,7 @@ use aya_obj::generated::{
use libc::pid_t;
use super::{PerfEventIoctlRequest, Syscall, syscall};
use crate::programs::perf_event::{BreakpointConfig, PerfBreakpointSize};
#[expect(clippy::too_many_arguments)]
pub(crate) fn perf_event_open(
@ -22,9 +24,9 @@ pub(crate) fn perf_event_open(
cpu: c_int,
sample_period: u64,
sample_frequency: Option<u64>,
wakeup: bool,
inherit: bool,
flags: u32,
breakpoint: Option<BreakpointConfig>,
) -> io::Result<crate::MockableFd> {
let mut attr = unsafe { mem::zeroed::<perf_event_attr>() };
@ -33,7 +35,6 @@ pub(crate) fn perf_event_open(
attr.type_ = perf_type;
attr.sample_type = PERF_SAMPLE_RAW as u64;
attr.set_inherit(if inherit { 1 } else { 0 });
attr.__bindgen_anon_2.wakeup_events = u32::from(wakeup);
if let Some(frequency) = sample_frequency {
attr.set_freq(1);
@ -42,6 +43,27 @@ pub(crate) fn perf_event_open(
attr.__bindgen_anon_1.sample_period = sample_period;
}
if let Some(bp) = breakpoint {
let (type_, length, address) = match bp {
BreakpointConfig::Empty { size, address } => (HW_BREAKPOINT_EMPTY, size, address),
BreakpointConfig::Read { size, address } => (HW_BREAKPOINT_R, size, address),
BreakpointConfig::Write { size, address } => (HW_BREAKPOINT_W, size, address),
BreakpointConfig::ReadWrite { size, address } => (HW_BREAKPOINT_RW, size, address),
BreakpointConfig::Execute { address } => (
HW_BREAKPOINT_X,
PerfBreakpointSize::from_primitive(std::mem::size_of::<libc::c_long>() as u64),
address,
),
};
attr.bp_type = type_;
attr.__bindgen_anon_3.bp_addr = address;
attr.__bindgen_anon_4.bp_len = length.into_primitive();
attr.set_precise_ip(2);
attr.__bindgen_anon_2.wakeup_events = u32::from(true);
} else {
attr.__bindgen_anon_2.wakeup_events = u32::from(false);
}
perf_event_sys(attr, pid, cpu, flags)
}
@ -54,8 +76,8 @@ pub(crate) fn perf_event_open_bpf(cpu: c_int) -> io::Result<crate::MockableFd> {
1,
None,
true,
false,
PERF_FLAG_FD_CLOEXEC,
None,
)
}

@ -6,6 +6,7 @@ typedef __u32 __bitwise __wsum;
#include <bpf/bpf_helpers.h>
#include <linux/bpf.h>
#include <linux/bpf_perf_event.h>
// needed for TC_ACT_*
#include <linux/pkt_cls.h>
#include <linux/ptrace.h>

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2887,6 +2882,14 @@ pub struct user_pt_regs {
pub pc: __u64,
pub pstate: __u64,
}
pub type bpf_user_pt_regs_t = user_pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2896,6 +2891,14 @@ pub struct bpf_iter_num {
pub struct pt_regs {
pub uregs: [::aya_ebpf_cty::c_long; 18usize],
}
pub type bpf_user_pt_regs_t = pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2888,6 +2883,14 @@ pub struct user_pt_regs {
pub csr_badv: ::aya_ebpf_cty::c_ulong,
pub reserved: [::aya_ebpf_cty::c_ulong; 10usize],
}
pub type bpf_user_pt_regs_t = user_pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -366,11 +366,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2903,6 +2898,14 @@ pub struct pt_regs {
pub cp0_status: __u64,
pub cp0_cause: __u64,
}
pub type bpf_user_pt_regs_t = pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2891,6 +2886,14 @@ pub struct pt_regs {
pub dsisr: ::aya_ebpf_cty::c_ulong,
pub result: ::aya_ebpf_cty::c_ulong,
}
pub type bpf_user_pt_regs_t = pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2915,6 +2910,14 @@ pub struct user_regs_struct {
pub t5: ::aya_ebpf_cty::c_ulong,
pub t6: ::aya_ebpf_cty::c_ulong,
}
pub type bpf_user_pt_regs_t = user_regs_struct;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -3848,6 +3843,14 @@ pub struct user_regs_struct {
pub per_info: per_struct,
pub ieee_instruction_pointer: ::aya_ebpf_cty::c_ulong,
}
pub type bpf_user_pt_regs_t = user_pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -365,11 +365,6 @@ pub type __be32 = __u32;
pub type __wsum = __u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
_unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct linux_binprm {
_unused: [u8; 0],
}
@ -2899,6 +2894,14 @@ pub struct pt_regs {
pub rsp: ::aya_ebpf_cty::c_ulong,
pub ss: ::aya_ebpf_cty::c_ulong,
}
pub type bpf_user_pt_regs_t = pt_regs;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct bpf_perf_event_data {
pub regs: bpf_user_pt_regs_t,
pub sample_period: __u64,
pub addr: __u64,
}
pub type sa_family_t = ::aya_ebpf_cty::c_ushort;
#[repr(C)]
#[derive(Debug, Copy, Clone)]

@ -1,19 +1,21 @@
use core::ffi::c_void;
use aya_ebpf_bindings::bindings::bpf_perf_event_data;
use crate::EbpfContext;
pub struct PerfEventContext {
ctx: *mut c_void,
pub ctx: *mut bpf_perf_event_data,
}
impl PerfEventContext {
pub fn new(ctx: *mut c_void) -> Self {
Self { ctx }
Self { ctx: ctx.cast() }
}
}
impl EbpfContext for PerfEventContext {
fn as_ptr(&self) -> *mut c_void {
self.ctx
self.ctx.cast()
}
}

@ -103,3 +103,7 @@ path = "src/xdp_sec.rs"
[[bin]]
name = "uprobe_cookie"
path = "src/uprobe_cookie.rs"
[[bin]]
name = "perf_event_bp"
path = "src/perf_event_bp.rs"

@ -0,0 +1,24 @@
#![no_std]
#![no_main]
#![expect(unused_crate_dependencies, reason = "used in other bins")]
use aya_ebpf::{
EbpfContext as _,
macros::{map, perf_event},
maps::HashMap,
programs::PerfEventContext,
};
#[cfg(not(test))]
extern crate ebpf_panic;
#[map]
static READERS: HashMap<u32, u64> = HashMap::with_max_entries(1, 0);
#[perf_event]
fn perf_event_bp(ctx: PerfEventContext) -> u32 {
let tgid = ctx.tgid();
let addr = unsafe { (*ctx.ctx).addr };
let _ = READERS.insert(tgid, addr, 0);
0
}

@ -23,6 +23,7 @@ aya-log = { path = "../../aya-log", version = "^0.2.1", default-features = false
aya-obj = { path = "../../aya-obj", version = "^0.2.1", default-features = false }
epoll = { workspace = true }
futures = { workspace = true, features = ["alloc"] }
glob = { workspace = true }
integration-common = { path = "../integration-common", features = ["user"] }
libc = { workspace = true }
log = { workspace = true }

@ -46,6 +46,7 @@ bpf_file!(
MEMMOVE_TEST => "memmove_test",
NAME_TEST => "name_test",
PASS => "pass",
PERF_EVENT_BP => "perf_event_bp",
RAW_TRACEPOINT => "raw_tracepoint",
REDIRECT => "redirect",
RELOCATIONS => "relocations",

@ -10,6 +10,7 @@ mod load;
mod log;
mod lsm;
mod map_pin;
mod perf_event_bp;
mod raw_tracepoint;
mod rbpf;
mod relocations;

@ -0,0 +1,122 @@
use std::{
fs::{self, File},
io::{BufRead as _, BufReader},
};
use aya::{
Ebpf,
programs::{
PerfEventScope, SamplePolicy,
perf_event::{BreakpointConfig, PerfBreakpointSize::HwBreakpointLen1, PerfEventConfig},
},
util::online_cpus,
};
use glob::glob;
use log::{debug, info};
fn find_system_map_symbol(sym: &str) -> Option<u64> {
for e in fs::read_dir("/boot").unwrap() {
let e = e.unwrap();
debug!("found /boot/{:}", e.path().to_str().unwrap());
}
let map = glob("/boot/System.map*")
.expect("failed to read /boot/System.map*")
.next()
.expect("no matching System.map-* file found")
.unwrap();
let file = File::open(&map).expect("failed to open System.map");
let reader = BufReader::new(file);
for line in reader.lines().map_while(Result::ok) {
// Format: "<addr> <type> <symbol> [<module>]"
let mut parts = line.split_whitespace();
let addr_str = parts.next()?;
let _type = parts.next()?;
let name = parts.next()?;
if name == sym
&& let Ok(addr) = u64::from_str_radix(addr_str, 16)
{
debug!("found symbol {sym} at address {addr:#x}");
return Some(addr);
}
}
None
}
// Parse /proc/kallsyms and return the address for the given symbol name, if
// found.
fn find_kallsyms_symbol(sym: &str) -> Option<u64> {
let file = File::open("/proc/kallsyms").expect("failed to open /proc/kallsyms");
let reader = BufReader::new(file);
for line in reader.lines().map_while(Result::ok) {
// Format: "<addr> <type> <symbol> [<module>]"
let mut parts = line.split_whitespace();
let addr_str = parts.next()?;
let _type = parts.next()?;
let name = parts.next()?;
if name == sym
&& let Ok(addr) = u64::from_str_radix(addr_str, 16)
{
return Some(addr);
}
}
None
}
#[test_log::test]
fn perf_event_bp() {
let mut bpf = Ebpf::load(crate::PERF_EVENT_BP).unwrap();
// Search for the address of modprobe_path. Prefer to grab it directly from
// kallsyms, but if it's not there we can grab it from System.map and apply
// the kaslr offset.
let attach_addr = if let Some(addr) = find_kallsyms_symbol("modprobe_path") {
addr
} else {
let kaslr_offset: i64 = (i128::from(find_kallsyms_symbol("gunzip").unwrap())
- (i128::from(find_system_map_symbol("gunzip").unwrap())))
.try_into()
.unwrap();
find_system_map_symbol("modprobe_path")
.unwrap()
.wrapping_add_signed(kaslr_offset)
};
let prog: &mut aya::programs::PerfEvent = bpf
.program_mut("perf_event_bp")
.unwrap()
.try_into()
.unwrap();
prog.load().unwrap();
for cpu in online_cpus().unwrap() {
info!("attaching to cpu {cpu}");
prog.attach(
PerfEventConfig::Breakpoint(BreakpointConfig::ReadWrite {
address: attach_addr,
size: HwBreakpointLen1,
}),
PerfEventScope::AllProcessesOneCpu { cpu },
SamplePolicy::Period(1),
true,
)
.unwrap();
}
// Trigger the hardware breakpoint by reading /proc/sys/kernel/modprobe, the
// sysctl connected to modprobe_path.
//
// See: https://elixir.bootlin.com/linux/v6.1.155/source/kernel/sysctl.c#L1770
fs::read_to_string("/proc/sys/kernel/modprobe").expect("failed to read modprobe");
// Assert that the map contains an entry for this process, and that we read
// the address we expected to.
let map: aya::maps::HashMap<_, u32, u64> =
aya::maps::HashMap::try_from(bpf.map_mut("READERS").unwrap()).unwrap();
let tgid = std::process::id();
let read_addr = map.get(&tgid, 0).unwrap();
assert_eq!(read_addr, attach_addr);
}

@ -4972,6 +4972,9 @@ pub unsafe fn aya_ebpf_bindings::bindings::bpf_map_info::clone_to_uninit(&self,
impl<T> core::convert::From<T> for aya_ebpf_bindings::bindings::bpf_map_info
pub fn aya_ebpf_bindings::bindings::bpf_map_info::from(t: T) -> T
#[repr(C)] pub struct aya_ebpf_bindings::bindings::bpf_perf_event_data
pub aya_ebpf_bindings::bindings::bpf_perf_event_data::addr: aya_ebpf_bindings::bindings::__u64
pub aya_ebpf_bindings::bindings::bpf_perf_event_data::regs: aya_ebpf_bindings::bindings::bpf_user_pt_regs_t
pub aya_ebpf_bindings::bindings::bpf_perf_event_data::sample_period: aya_ebpf_bindings::bindings::__u64
impl core::clone::Clone for aya_ebpf_bindings::bindings::bpf_perf_event_data
pub fn aya_ebpf_bindings::bindings::bpf_perf_event_data::clone(&self) -> aya_ebpf_bindings::bindings::bpf_perf_event_data
impl core::fmt::Debug for aya_ebpf_bindings::bindings::bpf_perf_event_data
@ -7057,6 +7060,7 @@ pub type aya_ebpf_bindings::bindings::_bindgen_ty_6 = aya_ebpf_cty::ad::c_uint
pub type aya_ebpf_bindings::bindings::_bindgen_ty_7 = aya_ebpf_cty::ad::c_uint
pub type aya_ebpf_bindings::bindings::_bindgen_ty_8 = aya_ebpf_cty::ad::c_uint
pub type aya_ebpf_bindings::bindings::_bindgen_ty_9 = aya_ebpf_cty::ad::c_uint
pub type aya_ebpf_bindings::bindings::bpf_user_pt_regs_t = aya_ebpf_bindings::bindings::pt_regs
pub type aya_ebpf_bindings::bindings::sa_family_t = aya_ebpf_cty::c_ushort
pub mod aya_ebpf_bindings::helpers
pub unsafe fn aya_ebpf_bindings::helpers::bpf_bind(ctx: *mut aya_ebpf_bindings::bindings::bpf_sock_addr, addr: *mut aya_ebpf_bindings::bindings::sockaddr, addr_len: aya_ebpf_cty::ad::c_int) -> aya_ebpf_cty::od::c_long

@ -1721,6 +1721,7 @@ impl<T> core::convert::From<T> for aya_ebpf::programs::lsm::LsmContext
pub fn aya_ebpf::programs::lsm::LsmContext::from(t: T) -> T
pub mod aya_ebpf::programs::perf_event
pub struct aya_ebpf::programs::perf_event::PerfEventContext
pub aya_ebpf::programs::perf_event::PerfEventContext::ctx: *mut aya_ebpf_bindings::x86_64::bindings::bpf_perf_event_data
impl aya_ebpf::programs::perf_event::PerfEventContext
pub fn aya_ebpf::programs::perf_event::PerfEventContext::new(ctx: *mut core::ffi::c_void) -> Self
impl aya_ebpf::EbpfContext for aya_ebpf::programs::perf_event::PerfEventContext
@ -2459,6 +2460,7 @@ pub fn aya_ebpf::programs::lsm::LsmContext::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya_ebpf::programs::lsm::LsmContext
pub fn aya_ebpf::programs::lsm::LsmContext::from(t: T) -> T
pub struct aya_ebpf::programs::PerfEventContext
pub aya_ebpf::programs::PerfEventContext::ctx: *mut aya_ebpf_bindings::x86_64::bindings::bpf_perf_event_data
impl aya_ebpf::programs::perf_event::PerfEventContext
pub fn aya_ebpf::programs::perf_event::PerfEventContext::new(ctx: *mut core::ffi::c_void) -> Self
impl aya_ebpf::EbpfContext for aya_ebpf::programs::perf_event::PerfEventContext

@ -8057,24 +8057,38 @@ pub const aya_obj::generated::BTF_KIND_VOLATILE: aya_obj::generated::_bindgen_ty
pub const aya_obj::generated::BTF_VAR_GLOBAL_ALLOCATED: aya_obj::generated::_bindgen_ty_43
pub const aya_obj::generated::BTF_VAR_GLOBAL_EXTERN: aya_obj::generated::_bindgen_ty_43
pub const aya_obj::generated::BTF_VAR_STATIC: aya_obj::generated::_bindgen_ty_43
pub const aya_obj::generated::IFLA_XDP_ATTACHED: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_DRV_PROG_ID: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_EXPECTED_FD: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_FD: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_FLAGS: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_HW_PROG_ID: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_PROG_ID: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_SKB_PROG_ID: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::IFLA_XDP_UNSPEC: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::NFPROTO_ARP: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_BRIDGE: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_DECNET: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_INET: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_IPV4: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_IPV6: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_NETDEV: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_NUMPROTO: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::NFPROTO_UNSPEC: aya_obj::generated::_bindgen_ty_99
pub const aya_obj::generated::HW_BREAKPOINT_EMPTY: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::HW_BREAKPOINT_INVALID: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::HW_BREAKPOINT_LEN_1: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_2: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_3: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_4: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_5: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_6: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_7: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_LEN_8: aya_obj::generated::_bindgen_ty_44
pub const aya_obj::generated::HW_BREAKPOINT_R: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::HW_BREAKPOINT_RW: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::HW_BREAKPOINT_W: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::HW_BREAKPOINT_X: aya_obj::generated::_bindgen_ty_45
pub const aya_obj::generated::IFLA_XDP_ATTACHED: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_DRV_PROG_ID: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_EXPECTED_FD: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_FD: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_FLAGS: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_HW_PROG_ID: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_PROG_ID: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_SKB_PROG_ID: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::IFLA_XDP_UNSPEC: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::NFPROTO_ARP: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_BRIDGE: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_DECNET: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_INET: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_IPV4: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_IPV6: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_NETDEV: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_NUMPROTO: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NFPROTO_UNSPEC: aya_obj::generated::_bindgen_ty_101
pub const aya_obj::generated::NLMSG_ALIGNTO: u32
pub const aya_obj::generated::NR_BTF_KINDS: aya_obj::generated::_bindgen_ty_42
pub const aya_obj::generated::PERF_EVENT_IOC_DISABLE: u32
@ -8097,36 +8111,36 @@ pub const aya_obj::generated::PERF_MAX_CONTEXTS_PER_STACK: u32
pub const aya_obj::generated::PERF_MAX_STACK_DEPTH: u32
pub const aya_obj::generated::SO_ATTACH_BPF: u32
pub const aya_obj::generated::SO_DETACH_BPF: u32
pub const aya_obj::generated::TCA_BPF_ACT: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_CLASSID: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_FD: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_FLAGS: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_FLAGS_GEN: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_ACT: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_CLASSID: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_FD: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_FLAGS: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_FLAGS_GEN: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_FLAG_ACT_DIRECT: u32
pub const aya_obj::generated::TCA_BPF_ID: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_NAME: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_OPS: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_OPS_LEN: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_POLICE: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_TAG: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_BPF_UNSPEC: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::TCA_CHAIN: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_DUMP_FLAGS: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_DUMP_INVISIBLE: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_EGRESS_BLOCK: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_EXT_WARN_MSG: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_FCNT: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_HW_OFFLOAD: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_INGRESS_BLOCK: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_KIND: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_OPTIONS: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_PAD: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_RATE: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_STAB: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_STATS: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_STATS2: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_UNSPEC: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_XSTATS: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::TCA_BPF_ID: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_NAME: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_OPS: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_OPS_LEN: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_POLICE: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_TAG: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_BPF_UNSPEC: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::TCA_CHAIN: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_DUMP_FLAGS: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_DUMP_INVISIBLE: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_EGRESS_BLOCK: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_EXT_WARN_MSG: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_FCNT: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_HW_OFFLOAD: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_INGRESS_BLOCK: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_KIND: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_OPTIONS: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_PAD: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_RATE: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_STAB: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_STATS: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_STATS2: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_UNSPEC: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TCA_XSTATS: aya_obj::generated::_bindgen_ty_176
pub const aya_obj::generated::TC_H_CLSACT: u32
pub const aya_obj::generated::TC_H_INGRESS: u32
pub const aya_obj::generated::TC_H_MAJ_MASK: u32
@ -8143,10 +8157,10 @@ pub const aya_obj::generated::XDP_FLAGS_MODES: u32
pub const aya_obj::generated::XDP_FLAGS_REPLACE: u32
pub const aya_obj::generated::XDP_FLAGS_SKB_MODE: u32
pub const aya_obj::generated::XDP_FLAGS_UPDATE_IF_NOEXIST: u32
pub const aya_obj::generated::__IFLA_XDP_MAX: aya_obj::generated::_bindgen_ty_92
pub const aya_obj::generated::__IFLA_XDP_MAX: aya_obj::generated::_bindgen_ty_94
pub const aya_obj::generated::__MAX_BPF_REG: aya_obj::generated::_bindgen_ty_1
pub const aya_obj::generated::__TCA_BPF_MAX: aya_obj::generated::_bindgen_ty_154
pub const aya_obj::generated::__TCA_MAX: aya_obj::generated::_bindgen_ty_174
pub const aya_obj::generated::__TCA_BPF_MAX: aya_obj::generated::_bindgen_ty_156
pub const aya_obj::generated::__TCA_MAX: aya_obj::generated::_bindgen_ty_176
pub type aya_obj::generated::__s16 = core::ffi::primitives::c_short
pub type aya_obj::generated::__s32 = core::ffi::primitives::c_int
pub type aya_obj::generated::__s64 = core::ffi::primitives::c_longlong
@ -8155,14 +8169,15 @@ pub type aya_obj::generated::__u32 = core::ffi::primitives::c_uint
pub type aya_obj::generated::__u64 = core::ffi::primitives::c_ulonglong
pub type aya_obj::generated::__u8 = core::ffi::primitives::c_uchar
pub type aya_obj::generated::_bindgen_ty_10 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_101 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_11 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_12 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_13 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_14 = core::ffi::primitives::c_ulong
pub type aya_obj::generated::_bindgen_ty_15 = core::ffi::primitives::c_int
pub type aya_obj::generated::_bindgen_ty_154 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_156 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_17 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_174 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_176 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_19 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_2 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_21 = core::ffi::primitives::c_uint
@ -8174,13 +8189,14 @@ pub type aya_obj::generated::_bindgen_ty_4 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_41 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_42 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_43 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_44 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_45 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_5 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_6 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_7 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_8 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_9 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_92 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_99 = core::ffi::primitives::c_uint
pub type aya_obj::generated::_bindgen_ty_94 = core::ffi::primitives::c_uint
pub mod aya_obj::links
pub mod aya_obj::maps
pub enum aya_obj::maps::Map

@ -5299,6 +5299,54 @@ pub fn aya::programs::perf_attach::PerfLinkId::borrow_mut(&mut self) -> &mut T
impl<T> core::convert::From<T> for aya::programs::perf_attach::PerfLinkId
pub fn aya::programs::perf_attach::PerfLinkId::from(t: T) -> T
pub mod aya::programs::perf_event
pub enum aya::programs::perf_event::BreakpointConfig
pub aya::programs::perf_event::BreakpointConfig::Empty
pub aya::programs::perf_event::BreakpointConfig::Empty::address: u64
pub aya::programs::perf_event::BreakpointConfig::Empty::size: aya::programs::perf_event::PerfBreakpointSize
pub aya::programs::perf_event::BreakpointConfig::Execute
pub aya::programs::perf_event::BreakpointConfig::Execute::address: u64
pub aya::programs::perf_event::BreakpointConfig::Read
pub aya::programs::perf_event::BreakpointConfig::Read::address: u64
pub aya::programs::perf_event::BreakpointConfig::Read::size: aya::programs::perf_event::PerfBreakpointSize
pub aya::programs::perf_event::BreakpointConfig::ReadWrite
pub aya::programs::perf_event::BreakpointConfig::ReadWrite::address: u64
pub aya::programs::perf_event::BreakpointConfig::ReadWrite::size: aya::programs::perf_event::PerfBreakpointSize
pub aya::programs::perf_event::BreakpointConfig::Write
pub aya::programs::perf_event::BreakpointConfig::Write::address: u64
pub aya::programs::perf_event::BreakpointConfig::Write::size: aya::programs::perf_event::PerfBreakpointSize
impl core::clone::Clone for aya::programs::perf_event::BreakpointConfig
pub fn aya::programs::perf_event::BreakpointConfig::clone(&self) -> aya::programs::perf_event::BreakpointConfig
impl core::fmt::Debug for aya::programs::perf_event::BreakpointConfig
pub fn aya::programs::perf_event::BreakpointConfig::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Copy for aya::programs::perf_event::BreakpointConfig
impl core::marker::Freeze for aya::programs::perf_event::BreakpointConfig
impl core::marker::Send for aya::programs::perf_event::BreakpointConfig
impl core::marker::Sync for aya::programs::perf_event::BreakpointConfig
impl core::marker::Unpin for aya::programs::perf_event::BreakpointConfig
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::BreakpointConfig
impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::BreakpointConfig
impl<T, U> core::convert::Into<U> for aya::programs::perf_event::BreakpointConfig where U: core::convert::From<T>
pub fn aya::programs::perf_event::BreakpointConfig::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::perf_event::BreakpointConfig where U: core::convert::Into<T>
pub type aya::programs::perf_event::BreakpointConfig::Error = core::convert::Infallible
pub fn aya::programs::perf_event::BreakpointConfig::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::perf_event::BreakpointConfig where U: core::convert::TryFrom<T>
pub type aya::programs::perf_event::BreakpointConfig::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::perf_event::BreakpointConfig::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> alloc::borrow::ToOwned for aya::programs::perf_event::BreakpointConfig where T: core::clone::Clone
pub type aya::programs::perf_event::BreakpointConfig::Owned = T
pub fn aya::programs::perf_event::BreakpointConfig::clone_into(&self, target: &mut T)
pub fn aya::programs::perf_event::BreakpointConfig::to_owned(&self) -> T
impl<T> core::any::Any for aya::programs::perf_event::BreakpointConfig where T: 'static + ?core::marker::Sized
pub fn aya::programs::perf_event::BreakpointConfig::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::perf_event::BreakpointConfig where T: ?core::marker::Sized
pub fn aya::programs::perf_event::BreakpointConfig::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::perf_event::BreakpointConfig where T: ?core::marker::Sized
pub fn aya::programs::perf_event::BreakpointConfig::borrow_mut(&mut self) -> &mut T
impl<T> core::clone::CloneToUninit for aya::programs::perf_event::BreakpointConfig where T: core::clone::Clone
pub unsafe fn aya::programs::perf_event::BreakpointConfig::clone_to_uninit(&self, dest: *mut u8)
impl<T> core::convert::From<T> for aya::programs::perf_event::BreakpointConfig
pub fn aya::programs::perf_event::BreakpointConfig::from(t: T) -> T
#[repr(u32)] pub enum aya::programs::perf_event::HardwareEvent
pub aya::programs::perf_event::HardwareEvent::BranchInstructions = 4
pub aya::programs::perf_event::HardwareEvent::BranchMisses = 5
@ -5457,8 +5505,46 @@ impl<T> core::clone::CloneToUninit for aya::programs::perf_event::HwCacheResult
pub unsafe fn aya::programs::perf_event::HwCacheResult::clone_to_uninit(&self, dest: *mut u8)
impl<T> core::convert::From<T> for aya::programs::perf_event::HwCacheResult
pub fn aya::programs::perf_event::HwCacheResult::from(t: T) -> T
#[repr(u64)] pub enum aya::programs::perf_event::PerfBreakpointSize
pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen1 = 1
pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen2 = 2
pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen4 = 4
pub aya::programs::perf_event::PerfBreakpointSize::HwBreakpointLen8 = 8
impl core::clone::Clone for aya::programs::perf_event::PerfBreakpointSize
pub fn aya::programs::perf_event::PerfBreakpointSize::clone(&self) -> aya::programs::perf_event::PerfBreakpointSize
impl core::fmt::Debug for aya::programs::perf_event::PerfBreakpointSize
pub fn aya::programs::perf_event::PerfBreakpointSize::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
impl core::marker::Copy for aya::programs::perf_event::PerfBreakpointSize
impl core::marker::Freeze for aya::programs::perf_event::PerfBreakpointSize
impl core::marker::Send for aya::programs::perf_event::PerfBreakpointSize
impl core::marker::Sync for aya::programs::perf_event::PerfBreakpointSize
impl core::marker::Unpin for aya::programs::perf_event::PerfBreakpointSize
impl core::panic::unwind_safe::RefUnwindSafe for aya::programs::perf_event::PerfBreakpointSize
impl core::panic::unwind_safe::UnwindSafe for aya::programs::perf_event::PerfBreakpointSize
impl<T, U> core::convert::Into<U> for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::From<T>
pub fn aya::programs::perf_event::PerfBreakpointSize::into(self) -> U
impl<T, U> core::convert::TryFrom<U> for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::Into<T>
pub type aya::programs::perf_event::PerfBreakpointSize::Error = core::convert::Infallible
pub fn aya::programs::perf_event::PerfBreakpointSize::try_from(value: U) -> core::result::Result<T, <T as core::convert::TryFrom<U>>::Error>
impl<T, U> core::convert::TryInto<U> for aya::programs::perf_event::PerfBreakpointSize where U: core::convert::TryFrom<T>
pub type aya::programs::perf_event::PerfBreakpointSize::Error = <U as core::convert::TryFrom<T>>::Error
pub fn aya::programs::perf_event::PerfBreakpointSize::try_into(self) -> core::result::Result<U, <U as core::convert::TryFrom<T>>::Error>
impl<T> alloc::borrow::ToOwned for aya::programs::perf_event::PerfBreakpointSize where T: core::clone::Clone
pub type aya::programs::perf_event::PerfBreakpointSize::Owned = T
pub fn aya::programs::perf_event::PerfBreakpointSize::clone_into(&self, target: &mut T)
pub fn aya::programs::perf_event::PerfBreakpointSize::to_owned(&self) -> T
impl<T> core::any::Any for aya::programs::perf_event::PerfBreakpointSize where T: 'static + ?core::marker::Sized
pub fn aya::programs::perf_event::PerfBreakpointSize::type_id(&self) -> core::any::TypeId
impl<T> core::borrow::Borrow<T> for aya::programs::perf_event::PerfBreakpointSize where T: ?core::marker::Sized
pub fn aya::programs::perf_event::PerfBreakpointSize::borrow(&self) -> &T
impl<T> core::borrow::BorrowMut<T> for aya::programs::perf_event::PerfBreakpointSize where T: ?core::marker::Sized
pub fn aya::programs::perf_event::PerfBreakpointSize::borrow_mut(&mut self) -> &mut T
impl<T> core::clone::CloneToUninit for aya::programs::perf_event::PerfBreakpointSize where T: core::clone::Clone
pub unsafe fn aya::programs::perf_event::PerfBreakpointSize::clone_to_uninit(&self, dest: *mut u8)
impl<T> core::convert::From<T> for aya::programs::perf_event::PerfBreakpointSize
pub fn aya::programs::perf_event::PerfBreakpointSize::from(t: T) -> T
pub enum aya::programs::perf_event::PerfEventConfig
pub aya::programs::perf_event::PerfEventConfig::Breakpoint
pub aya::programs::perf_event::PerfEventConfig::Breakpoint(aya::programs::perf_event::BreakpointConfig)
pub aya::programs::perf_event::PerfEventConfig::Hardware(aya::programs::perf_event::HardwareEvent)
pub aya::programs::perf_event::PerfEventConfig::HwCache
pub aya::programs::perf_event::PerfEventConfig::HwCache::event: aya::programs::perf_event::HwCacheEvent
@ -5632,7 +5718,7 @@ pub fn aya::programs::perf_event::SoftwareEvent::from(t: T) -> T
pub struct aya::programs::perf_event::PerfEvent
impl aya::programs::perf_event::PerfEvent
pub const aya::programs::perf_event::PerfEvent::PROGRAM_TYPE: aya::programs::ProgramType
pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_type: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result<aya::programs::perf_event::PerfEventLinkId, aya::programs::ProgramError>
pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_config: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result<aya::programs::perf_event::PerfEventLinkId, aya::programs::ProgramError>
pub fn aya::programs::perf_event::PerfEvent::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
impl aya::programs::perf_event::PerfEvent
pub fn aya::programs::perf_event::PerfEvent::detach(&mut self, link_id: aya::programs::perf_event::PerfEventLinkId) -> core::result::Result<(), aya::programs::ProgramError>
@ -9582,7 +9668,7 @@ pub fn aya::programs::lsm_cgroup::LsmCgroup::from(t: T) -> T
pub struct aya::programs::PerfEvent
impl aya::programs::perf_event::PerfEvent
pub const aya::programs::perf_event::PerfEvent::PROGRAM_TYPE: aya::programs::ProgramType
pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_type: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result<aya::programs::perf_event::PerfEventLinkId, aya::programs::ProgramError>
pub fn aya::programs::perf_event::PerfEvent::attach(&mut self, perf_config: aya::programs::perf_event::PerfEventConfig, scope: aya::programs::perf_event::PerfEventScope, sample_policy: aya::programs::perf_event::SamplePolicy, inherit: bool) -> core::result::Result<aya::programs::perf_event::PerfEventLinkId, aya::programs::ProgramError>
pub fn aya::programs::perf_event::PerfEvent::load(&mut self) -> core::result::Result<(), aya::programs::ProgramError>
impl aya::programs::perf_event::PerfEvent
pub fn aya::programs::perf_event::PerfEvent::detach(&mut self, link_id: aya::programs::perf_event::PerfEventLinkId) -> core::result::Result<(), aya::programs::ProgramError>

@ -67,6 +67,8 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> {
.constified_enum("IFLA_.*")
.constified_enum("TCA_.*")
.constified_enum("BPF_RINGBUF_.*")
// PERF
.constified_enum("HW_BREAKPOINT_.*")
// NETFILTER
.constified_enum("NFPROTO_.*");
@ -141,6 +143,7 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> {
"PERF_FLAG_.*",
"PERF_EVENT_.*",
"PERF_MAX_.*",
"HW_BREAKPOINT_.*",
// NETLINK
"NLMSG_ALIGNTO",
"IFLA_XDP_FD",

@ -1,4 +1,5 @@
use std::{
collections::BTreeMap,
ffi::{OsStr, OsString},
fmt::Write as _,
fs::{self, OpenOptions},
@ -18,6 +19,42 @@ use xtask::{AYA_BUILD_INTEGRATION_BPF, Errors};
const GEN_INIT_CPIO_PATCH: &str = include_str!("../patches/gen_init_cpio.c.macos.diff");
#[derive(Default)]
struct KernelPackageGroup {
kernel: Option<PathBuf>,
debug: Option<PathBuf>,
}
fn extract_deb(archive: &Path, dest: &Path) -> Result<()> {
fs::create_dir_all(dest).with_context(|| format!("failed to create {}", dest.display()))?;
let mut dpkg = Command::new("dpkg-deb");
dpkg.arg("--fsys-tarfile")
.arg(archive)
.stdout(Stdio::piped());
let mut dpkg_child = dpkg
.spawn()
.with_context(|| format!("failed to spawn {dpkg:?}"))?;
let Child { stdout, .. } = &mut dpkg_child;
let stdout = stdout.take().unwrap();
let mut archive_reader = tar::Archive::new(stdout);
archive_reader.unpack(dest).with_context(|| {
format!(
"failed to unpack archive {} to {}",
archive.display(),
dest.display()
)
})?;
let status = dpkg_child
.wait()
.with_context(|| format!("failed to wait for {dpkg:?}"))?;
if !status.success() {
bail!("{dpkg:?} exited with {status}");
}
Ok(())
}
#[derive(Parser)]
enum Environment {
/// Runs the integration tests locally.
@ -292,40 +329,88 @@ pub(crate) fn run(opts: Options) -> Result<()> {
}
let extraction_root = tempfile::tempdir().context("tempdir failed")?;
let mut errors = Vec::new();
for (index, archive) in kernel_archives.iter().enumerate() {
let archive_dir = extraction_root
.path()
.join(format!("kernel-archive-{index}"));
fs::create_dir_all(&archive_dir)
.with_context(|| format!("failed to create {}", archive_dir.display()))?;
let mut dpkg = Command::new("dpkg-deb");
dpkg.arg("--fsys-tarfile")
.arg(archive)
.stdout(Stdio::piped());
let mut dpkg_child = dpkg
.spawn()
.with_context(|| format!("failed to spawn {dpkg:?}"))?;
let Child { stdout, .. } = &mut dpkg_child;
let stdout = stdout.take().unwrap();
let mut archive_reader = tar::Archive::new(stdout);
archive_reader.unpack(&archive_dir).with_context(|| {
format!(
"failed to unpack archive {} to {}",
archive.display(),
archive_dir.display()
)
let mut package_groups: BTreeMap<OsString, KernelPackageGroup> = BTreeMap::new();
for archive in &kernel_archives {
let file_name = archive.file_name().ok_or_else(|| {
anyhow!("archive path missing filename: {}", archive.display())
})?;
let status = dpkg_child
.wait()
.with_context(|| format!("failed to wait for {dpkg:?}"))?;
if !status.success() {
bail!("{dpkg:?} exited with {status}");
let file_name = file_name.to_string_lossy();
let (package_name, _) = file_name
.split_once('_')
.ok_or_else(|| anyhow!("unexpected archive filename: {file_name}"))?;
let (base, is_debug) = if let Some(base) = package_name.strip_suffix("-dbg") {
(base, true)
} else if let Some(base) = package_name.strip_suffix("-dbgsym") {
(base, true)
} else if let Some(base) = package_name.strip_suffix("-unsigned") {
(base, false)
} else {
(package_name, false)
};
let entry = package_groups.entry(OsString::from(base)).or_default();
if is_debug {
entry.debug = Some(archive.clone());
} else {
entry.kernel = Some(archive.clone());
}
}
let mut errors = Vec::new();
for (index, (base, group)) in package_groups.into_iter().enumerate() {
let KernelPackageGroup { kernel, debug } = group;
let base_display = base.to_string_lossy();
let kernel_archive =
kernel.ok_or_else(|| anyhow!("missing kernel package for {base_display}"))?;
let archive_dir = extraction_root
.path()
.join(format!("kernel-archive-{index}-image"));
extract_deb(&kernel_archive, &archive_dir)?;
let debug_maps = if let Some(debug_archive) = debug {
let debug_dir = extraction_root
.path()
.join(format!("kernel-archive-{index}-debug"));
extract_deb(&debug_archive, &debug_dir)?;
WalkDir::new(&debug_dir)
.into_iter()
.filter_map(|entry| entry.ok())
.filter(|entry| entry.file_type().is_file())
.filter_map(|entry| {
let path = entry.into_path();
let is_system_map = path
.file_name()
.map(|file_name| {
matches!(
file_name.as_encoded_bytes(),
[
b'S',
b'y',
b's',
b't',
b'e',
b'm',
b'.',
b'm',
b'a',
b'p',
b'-',
..
]
)
})
.unwrap_or(false);
if is_system_map { Some(path) } else { None }
})
.collect::<Vec<_>>()
} else {
Vec::new()
};
let mut kernel_images = Vec::new();
let mut configs = Vec::new();
let mut kernel_maps = Vec::new();
for entry in WalkDir::new(&archive_dir) {
let entry = entry.with_context(|| {
format!("failed to read entry in {}", archive_dir.display())
@ -357,22 +442,59 @@ pub(crate) fn run(opts: Options) -> Result<()> {
[b'c', b'o', b'n', b'f', b'i', b'g', b'-', ..] => {
configs.push(path);
}
// "System.map-"
[
b'S',
b'y',
b's',
b't',
b'e',
b'm',
b'.',
b'm',
b'a',
b'p',
b'-',
..,
] => {
kernel_maps.push(path);
}
_ => {}
}
}
}
let (kernel_image, kernel_version) = match kernel_images.as_slice() {
[kernel_image] => kernel_image,
[] => bail!("no kernel images in {}", archive.display()),
[] => bail!("no kernel images in {}", kernel_archive.display()),
kernel_images => bail!(
"multiple kernel images in {}: {:?}",
archive.display(),
kernel_archive.display(),
kernel_images
),
};
let config = match configs.as_slice() {
[config] => config,
configs => bail!("multiple configs in {}: {:?}", archive.display(), configs),
configs => bail!(
"multiple configs in {}: {:?}",
kernel_archive.display(),
configs
),
};
let system_map = match debug_maps.as_slice() {
[system_map] => system_map,
[] => match kernel_maps.as_slice() {
[system_map] => system_map,
kernel_maps => bail!(
"multiple kernel System.maps in {}: {:?}",
kernel_archive.display(),
kernel_maps
),
},
system_maps => bail!(
"multiple debug System.maps in {}: {:?}",
kernel_archive.display(),
system_maps
),
};
let mut modules_dirs = Vec::new();
@ -395,10 +517,10 @@ pub(crate) fn run(opts: Options) -> Result<()> {
}
let modules_dir = match modules_dirs.as_slice() {
[modules_dir] => modules_dir,
[] => bail!("no modules directories in {}", archive.display()),
[] => bail!("no modules directories in {}", kernel_archive.display()),
modules_dirs => bail!(
"multiple modules directories in {}: {:?}",
archive.display(),
kernel_archive.display(),
modules_dirs
),
};
@ -512,6 +634,11 @@ pub(crate) fn run(opts: Options) -> Result<()> {
write_file(&Path::new("/boot").join(name), config, "644 0 0");
}
write_file(Path::new("/boot/System.map"), system_map, "644 0 0");
if let Some(name) = system_map.file_name() {
write_file(&Path::new("/boot").join(name), system_map, "644 0 0");
}
test_distro.iter().for_each(|(name, path)| {
if name == "init" {
write_file(Path::new("/init"), path, "755 0 0");

Loading…
Cancel
Save