diff --git a/aya-obj/src/obj.rs b/aya-obj/src/obj.rs index 450b8e90..eb16ba47 100644 --- a/aya-obj/src/obj.rs +++ b/aya-obj/src/obj.rs @@ -188,35 +188,6 @@ pub struct Function { /// /// [Program Types and ELF Sections]: https://docs.kernel.org/bpf/libbpf/program_types.html /// -/// ## Program Name -/// -/// Each section name is parsed into a section type and a program name. -/// -/// Generally speaking, -/// - if the section name does not contain any slashes, -/// then the program name is just that section name; -/// - if there are some slashes, the name is `section_name.rsplitn(2, '/')[0]`, -/// - except for tracepoint programs, for which the name is -/// `section_name.splitn(2, '/')[1]`. -/// -/// ```rust -/// use aya_obj::ProgramSection; -/// use std::str::FromStr; -/// -/// assert_eq!( -/// ProgramSection::from_str("kprobe/do_unlinkat") -/// .unwrap().name(), -/// "do_unlinkat", -/// ); -/// assert_eq!( -/// ProgramSection::from_str("tracepoint/syscalls/sys_enter_openat") -/// .unwrap().name(), -/// "syscalls/sys_enter_openat", -/// ); -/// ``` -/// -/// The program name will be used in [Object] as references to each program. -/// /// # Unsupported Sections /// /// Currently, the following section names are not supported yet: @@ -238,139 +209,53 @@ pub struct Function { #[derive(Debug, Clone)] #[allow(missing_docs)] pub enum ProgramSection { - KRetProbe { - name: String, - }, - KProbe { - name: String, - }, + KRetProbe, + KProbe, UProbe { - name: String, sleepable: bool, }, URetProbe { - name: String, sleepable: bool, }, - TracePoint { - name: String, - }, - SocketFilter { - name: String, - }, + TracePoint, + SocketFilter, Xdp { - name: String, frags: bool, }, - SkMsg { - name: String, - }, - SkSkbStreamParser { - name: String, - }, - SkSkbStreamVerdict { - name: String, - }, - SockOps { - name: String, - }, - SchedClassifier { - name: String, - }, - CgroupSkb { - name: String, - }, - CgroupSkbIngress { - name: String, - }, - CgroupSkbEgress { - name: String, - }, + SkMsg, + SkSkbStreamParser, + SkSkbStreamVerdict, + SockOps, + SchedClassifier, + CgroupSkb, + CgroupSkbIngress, + CgroupSkbEgress, CgroupSockAddr { - name: String, attach_type: CgroupSockAddrAttachType, }, - CgroupSysctl { - name: String, - }, + CgroupSysctl, CgroupSockopt { - name: String, attach_type: CgroupSockoptAttachType, }, - LircMode2 { - name: String, - }, - PerfEvent { - name: String, - }, - RawTracePoint { - name: String, - }, + LircMode2, + PerfEvent, + RawTracePoint, Lsm { - name: String, sleepable: bool, }, - BtfTracePoint { - name: String, - }, + BtfTracePoint, FEntry { - name: String, sleepable: bool, }, FExit { - name: String, sleepable: bool, }, - Extension { - name: String, - }, - SkLookup { - name: String, - }, + Extension, + SkLookup, CgroupSock { - name: String, attach_type: CgroupSockAttachType, }, - CgroupDevice { - name: String, - }, -} - -impl ProgramSection { - /// Returns the program name - pub fn name(&self) -> &str { - match self { - ProgramSection::KRetProbe { name } => name, - ProgramSection::KProbe { name } => name, - ProgramSection::UProbe { name, .. } => name, - ProgramSection::URetProbe { name, .. } => name, - ProgramSection::TracePoint { name } => name, - ProgramSection::SocketFilter { name } => name, - ProgramSection::Xdp { name, .. } => name, - ProgramSection::SkMsg { name } => name, - ProgramSection::SkSkbStreamParser { name } => name, - ProgramSection::SkSkbStreamVerdict { name } => name, - ProgramSection::SockOps { name } => name, - ProgramSection::SchedClassifier { name } => name, - ProgramSection::CgroupSkb { name, .. } => name, - ProgramSection::CgroupSkbIngress { name, .. } => name, - ProgramSection::CgroupSkbEgress { name, .. } => name, - ProgramSection::CgroupSockAddr { name, .. } => name, - ProgramSection::CgroupSysctl { name } => name, - ProgramSection::CgroupSockopt { name, .. } => name, - ProgramSection::LircMode2 { name } => name, - ProgramSection::PerfEvent { name } => name, - ProgramSection::RawTracePoint { name } => name, - ProgramSection::Lsm { name, .. } => name, - ProgramSection::BtfTracePoint { name, .. } => name, - ProgramSection::FEntry { name, .. } => name, - ProgramSection::FExit { name, .. } => name, - ProgramSection::Extension { name } => name, - ProgramSection::SkLookup { name } => name, - ProgramSection::CgroupSock { name, .. } => name, - ProgramSection::CgroupDevice { name } => name, - } - } + CgroupDevice, } impl FromStr for ProgramSection { @@ -385,84 +270,63 @@ impl FromStr for ProgramSection { None => (section, section), Some((kind, name)) => (kind, name), }; - let name = name.to_owned(); Ok(match kind { - "kprobe" => KProbe { name }, - "kretprobe" => KRetProbe { name }, - "uprobe" => UProbe { - name, - sleepable: false, - }, - "uprobe.s" => UProbe { - name, - sleepable: true, - }, - "uretprobe" => URetProbe { - name, - sleepable: false, - }, - "uretprobe.s" => URetProbe { - name, - sleepable: true, - }, - "xdp" => Xdp { name, frags: false }, - "xdp.frags" => Xdp { name, frags: true }, - "tp_btf" => BtfTracePoint { name }, - _ if kind.starts_with("tracepoint") || kind.starts_with("tp") => { - // tracepoint sections are named `tracepoint/category/event_name`, - // and we want to parse the name as "category/event_name" - let name = section.splitn(2, '/').last().unwrap().to_owned(); - TracePoint { name } - } - "socket" => SocketFilter { name }, - "sk_msg" => SkMsg { name }, - "sk_skb" => match &*name { - "stream_parser" => SkSkbStreamParser { name }, - "stream_verdict" => SkSkbStreamVerdict { name }, + "kprobe" => KProbe, + "kretprobe" => KRetProbe, + "uprobe" => UProbe { sleepable: false }, + "uprobe.s" => UProbe { sleepable: true }, + "uretprobe" => URetProbe { sleepable: false }, + "uretprobe.s" => URetProbe { sleepable: true }, + "xdp" => Xdp { frags: false }, + "xdp.frags" => Xdp { frags: true }, + "tp_btf" => BtfTracePoint, + kind if kind.starts_with("tracepoint") || kind.starts_with("tp") => TracePoint, + "socket" => SocketFilter, + "sk_msg" => SkMsg, + "sk_skb" => match name { + "stream_parser" => SkSkbStreamParser, + "stream_verdict" => SkSkbStreamVerdict, _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), }) } }, - "sk_skb/stream_parser" => SkSkbStreamParser { name }, - "sk_skb/stream_verdict" => SkSkbStreamVerdict { name }, - "sockops" => SockOps { name }, - "classifier" => SchedClassifier { name }, - "cgroup_skb" => match &*name { - "ingress" => CgroupSkbIngress { name }, - "egress" => CgroupSkbEgress { name }, + "sk_skb/stream_parser" => SkSkbStreamParser, + "sk_skb/stream_verdict" => SkSkbStreamVerdict, + "sockops" => SockOps, + "classifier" => SchedClassifier, + "cgroup_skb" => match name { + "ingress" => CgroupSkbIngress, + "egress" => CgroupSkbEgress, _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), }) } }, - "cgroup_skb/ingress" => CgroupSkbIngress { name }, - "cgroup_skb/egress" => CgroupSkbEgress { name }, - "cgroup/skb" => CgroupSkb { name }, + "cgroup_skb/ingress" => CgroupSkbIngress, + "cgroup_skb/egress" => CgroupSkbEgress, + "cgroup/skb" => CgroupSkb, "cgroup/sock" => CgroupSock { - name, attach_type: CgroupSockAttachType::default(), }, - "cgroup/sysctl" => CgroupSysctl { name }, - "cgroup/dev" => CgroupDevice { name }, + "cgroup/sysctl" => CgroupSysctl, + "cgroup/dev" => CgroupDevice, "cgroup/getsockopt" => CgroupSockopt { - name, attach_type: CgroupSockoptAttachType::Get, }, "cgroup/setsockopt" => CgroupSockopt { - name, attach_type: CgroupSockoptAttachType::Set, }, - "cgroup" => match &*name { - "skb" => CgroupSkb { name }, - "sysctl" => CgroupSysctl { name }, - "dev" => CgroupDevice { name }, + "cgroup" => match name { + "skb" => CgroupSkb, + "sysctl" => CgroupSysctl, + "dev" => CgroupDevice, "getsockopt" | "setsockopt" => { - if let Ok(attach_type) = CgroupSockoptAttachType::try_from(name.as_str()) { - CgroupSockopt { name, attach_type } + if let Ok(attach_type) = CgroupSockoptAttachType::try_from(name) { + CgroupSockopt { attach_type } } else { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), @@ -470,21 +334,20 @@ impl FromStr for ProgramSection { } } "sock" => CgroupSock { - name, attach_type: CgroupSockAttachType::default(), }, "post_bind4" | "post_bind6" | "sock_create" | "sock_release" => { - if let Ok(attach_type) = CgroupSockAttachType::try_from(name.as_str()) { - CgroupSock { name, attach_type } + if let Ok(attach_type) = CgroupSockAttachType::try_from(name) { + CgroupSock { attach_type } } else { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), }); } } - _ => { - if let Ok(attach_type) = CgroupSockAddrAttachType::try_from(name.as_str()) { - CgroupSockAddr { name, attach_type } + name => { + if let Ok(attach_type) = CgroupSockAddrAttachType::try_from(name) { + CgroupSockAddr { attach_type } } else { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), @@ -493,98 +356,64 @@ impl FromStr for ProgramSection { } }, "cgroup/post_bind4" => CgroupSock { - name, attach_type: CgroupSockAttachType::PostBind4, }, "cgroup/post_bind6" => CgroupSock { - name, attach_type: CgroupSockAttachType::PostBind6, }, "cgroup/sock_create" => CgroupSock { - name, attach_type: CgroupSockAttachType::SockCreate, }, "cgroup/sock_release" => CgroupSock { - name, attach_type: CgroupSockAttachType::SockRelease, }, "cgroup/bind4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::Bind4, }, "cgroup/bind6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::Bind6, }, "cgroup/connect4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::Connect4, }, "cgroup/connect6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::Connect6, }, "cgroup/getpeername4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::GetPeerName4, }, "cgroup/getpeername6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::GetPeerName6, }, "cgroup/getsockname4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::GetSockName4, }, "cgroup/getsockname6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::GetSockName6, }, "cgroup/sendmsg4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::UDPSendMsg4, }, "cgroup/sendmsg6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::UDPSendMsg6, }, "cgroup/recvmsg4" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::UDPRecvMsg4, }, "cgroup/recvmsg6" => CgroupSockAddr { - name, attach_type: CgroupSockAddrAttachType::UDPRecvMsg6, }, - "lirc_mode2" => LircMode2 { name }, - "perf_event" => PerfEvent { name }, - "raw_tp" | "raw_tracepoint" => RawTracePoint { name }, - "lsm" => Lsm { - name, - sleepable: false, - }, - "lsm.s" => Lsm { - name, - sleepable: true, - }, - "fentry" => FEntry { - name, - sleepable: false, - }, - "fentry.s" => FEntry { - name, - sleepable: true, - }, - "fexit" => FExit { - name, - sleepable: false, - }, - "fexit.s" => FExit { - name, - sleepable: true, - }, - "freplace" => Extension { name }, - "sk_lookup" => SkLookup { name }, + "lirc_mode2" => LircMode2, + "perf_event" => PerfEvent, + "raw_tp" | "raw_tracepoint" => RawTracePoint, + "lsm" => Lsm { sleepable: false }, + "lsm.s" => Lsm { sleepable: true }, + "fentry" => FEntry { sleepable: false }, + "fentry.s" => FEntry { sleepable: true }, + "fexit" => FExit { sleepable: false }, + "fexit.s" => FExit { sleepable: true }, + "freplace" => Extension, + "sk_lookup" => SkLookup, _ => { return Err(ParseError::InvalidProgramSection { section: section.to_owned(), diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index ac3a21e3..d768770c 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -400,37 +400,37 @@ impl<'a> BpfLoader<'a> { Err(err) => { for program in obj.programs.values() { match program.section { - ProgramSection::Extension { .. } - | ProgramSection::FEntry { .. } - | ProgramSection::FExit { .. } - | ProgramSection::Lsm { .. } - | ProgramSection::BtfTracePoint { .. } => { + ProgramSection::Extension + | ProgramSection::FEntry { sleepable: _ } + | ProgramSection::FExit { sleepable: _ } + | ProgramSection::Lsm { sleepable: _ } + | ProgramSection::BtfTracePoint => { return Err(BpfError::BtfError(err)) } - ProgramSection::KRetProbe { .. } - | ProgramSection::KProbe { .. } - | ProgramSection::UProbe { .. } - | ProgramSection::URetProbe { .. } - | ProgramSection::TracePoint { .. } - | ProgramSection::SocketFilter { .. } - | ProgramSection::Xdp { .. } - | ProgramSection::SkMsg { .. } - | ProgramSection::SkSkbStreamParser { .. } - | ProgramSection::SkSkbStreamVerdict { .. } - | ProgramSection::SockOps { .. } - | ProgramSection::SchedClassifier { .. } - | ProgramSection::CgroupSkb { .. } - | ProgramSection::CgroupSkbIngress { .. } - | ProgramSection::CgroupSkbEgress { .. } - | ProgramSection::CgroupSockAddr { .. } - | ProgramSection::CgroupSysctl { .. } - | ProgramSection::CgroupSockopt { .. } - | ProgramSection::LircMode2 { .. } - | ProgramSection::PerfEvent { .. } - | ProgramSection::RawTracePoint { .. } - | ProgramSection::SkLookup { .. } - | ProgramSection::CgroupSock { .. } - | ProgramSection::CgroupDevice { .. } => {} + ProgramSection::KRetProbe + | ProgramSection::KProbe + | ProgramSection::UProbe { sleepable: _ } + | ProgramSection::URetProbe { sleepable: _ } + | ProgramSection::TracePoint + | ProgramSection::SocketFilter + | ProgramSection::Xdp { frags: _ } + | ProgramSection::SkMsg + | ProgramSection::SkSkbStreamParser + | ProgramSection::SkSkbStreamVerdict + | ProgramSection::SockOps + | ProgramSection::SchedClassifier + | ProgramSection::CgroupSkb + | ProgramSection::CgroupSkbIngress + | ProgramSection::CgroupSkbEgress + | ProgramSection::CgroupSockAddr { attach_type: _ } + | ProgramSection::CgroupSysctl + | ProgramSection::CgroupSockopt { attach_type: _ } + | ProgramSection::LircMode2 + | ProgramSection::PerfEvent + | ProgramSection::RawTracePoint + | ProgramSection::SkLookup + | ProgramSection::CgroupSock { attach_type: _ } + | ProgramSection::CgroupDevice => {} } } @@ -558,15 +558,15 @@ impl<'a> BpfLoader<'a> { }) } else { match §ion { - ProgramSection::KProbe { .. } => Program::KProbe(KProbe { + ProgramSection::KProbe => Program::KProbe(KProbe { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), kind: ProbeKind::KProbe, }), - ProgramSection::KRetProbe { .. } => Program::KProbe(KProbe { + ProgramSection::KRetProbe => Program::KProbe(KProbe { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), kind: ProbeKind::KRetProbe, }), - ProgramSection::UProbe { sleepable, name: _ } => { + ProgramSection::UProbe { sleepable } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); if *sleepable { @@ -577,7 +577,7 @@ impl<'a> BpfLoader<'a> { kind: ProbeKind::UProbe, }) } - ProgramSection::URetProbe { sleepable, name: _ } => { + ProgramSection::URetProbe { sleepable } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); if *sleepable { @@ -588,14 +588,12 @@ impl<'a> BpfLoader<'a> { kind: ProbeKind::URetProbe, }) } - ProgramSection::TracePoint { .. } => Program::TracePoint(TracePoint { + ProgramSection::TracePoint => Program::TracePoint(TracePoint { + data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), + }), + ProgramSection::SocketFilter => Program::SocketFilter(SocketFilter { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::SocketFilter { .. } => { - Program::SocketFilter(SocketFilter { - data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), - }) - } ProgramSection::Xdp { frags, .. } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); @@ -604,32 +602,30 @@ impl<'a> BpfLoader<'a> { } Program::Xdp(Xdp { data }) } - ProgramSection::SkMsg { .. } => Program::SkMsg(SkMsg { + ProgramSection::SkMsg => Program::SkMsg(SkMsg { + data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), + }), + ProgramSection::CgroupSysctl => Program::CgroupSysctl(CgroupSysctl { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::CgroupSysctl { .. } => { - Program::CgroupSysctl(CgroupSysctl { - data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), - }) - } ProgramSection::CgroupSockopt { attach_type, .. } => { Program::CgroupSockopt(CgroupSockopt { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), attach_type: *attach_type, }) } - ProgramSection::SkSkbStreamParser { .. } => Program::SkSkb(SkSkb { + ProgramSection::SkSkbStreamParser => Program::SkSkb(SkSkb { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), kind: SkSkbKind::StreamParser, }), - ProgramSection::SkSkbStreamVerdict { .. } => Program::SkSkb(SkSkb { + ProgramSection::SkSkbStreamVerdict => Program::SkSkb(SkSkb { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), kind: SkSkbKind::StreamVerdict, }), - ProgramSection::SockOps { .. } => Program::SockOps(SockOps { + ProgramSection::SockOps => Program::SockOps(SockOps { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::SchedClassifier { .. } => { + ProgramSection::SchedClassifier => { Program::SchedClassifier(SchedClassifier { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), name: unsafe { @@ -638,15 +634,15 @@ impl<'a> BpfLoader<'a> { }, }) } - ProgramSection::CgroupSkb { .. } => Program::CgroupSkb(CgroupSkb { + ProgramSection::CgroupSkb => Program::CgroupSkb(CgroupSkb { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), expected_attach_type: None, }), - ProgramSection::CgroupSkbIngress { .. } => Program::CgroupSkb(CgroupSkb { + ProgramSection::CgroupSkbIngress => Program::CgroupSkb(CgroupSkb { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), expected_attach_type: Some(CgroupSkbAttachType::Ingress), }), - ProgramSection::CgroupSkbEgress { .. } => Program::CgroupSkb(CgroupSkb { + ProgramSection::CgroupSkbEgress => Program::CgroupSkb(CgroupSkb { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), expected_attach_type: Some(CgroupSkbAttachType::Egress), }), @@ -656,18 +652,16 @@ impl<'a> BpfLoader<'a> { attach_type: *attach_type, }) } - ProgramSection::LircMode2 { .. } => Program::LircMode2(LircMode2 { + ProgramSection::LircMode2 => Program::LircMode2(LircMode2 { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::PerfEvent { .. } => Program::PerfEvent(PerfEvent { + ProgramSection::PerfEvent => Program::PerfEvent(PerfEvent { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::RawTracePoint { .. } => { - Program::RawTracePoint(RawTracePoint { - data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), - }) - } - ProgramSection::Lsm { sleepable, name: _ } => { + ProgramSection::RawTracePoint => Program::RawTracePoint(RawTracePoint { + data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), + }), + ProgramSection::Lsm { sleepable } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); if *sleepable { @@ -675,12 +669,10 @@ impl<'a> BpfLoader<'a> { } Program::Lsm(Lsm { data }) } - ProgramSection::BtfTracePoint { .. } => { - Program::BtfTracePoint(BtfTracePoint { - data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), - }) - } - ProgramSection::FEntry { sleepable, name: _ } => { + ProgramSection::BtfTracePoint => Program::BtfTracePoint(BtfTracePoint { + data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), + }), + ProgramSection::FEntry { sleepable } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); if *sleepable { @@ -688,7 +680,7 @@ impl<'a> BpfLoader<'a> { } Program::FEntry(FEntry { data }) } - ProgramSection::FExit { sleepable, name: _ } => { + ProgramSection::FExit { sleepable } => { let mut data = ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level); if *sleepable { @@ -696,10 +688,10 @@ impl<'a> BpfLoader<'a> { } Program::FExit(FExit { data }) } - ProgramSection::Extension { .. } => Program::Extension(Extension { + ProgramSection::Extension => Program::Extension(Extension { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), - ProgramSection::SkLookup { .. } => Program::SkLookup(SkLookup { + ProgramSection::SkLookup => Program::SkLookup(SkLookup { data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), }), ProgramSection::CgroupSock { attach_type, .. } => { @@ -708,11 +700,9 @@ impl<'a> BpfLoader<'a> { attach_type: *attach_type, }) } - ProgramSection::CgroupDevice { .. } => { - Program::CgroupDevice(CgroupDevice { - data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), - }) - } + ProgramSection::CgroupDevice => Program::CgroupDevice(CgroupDevice { + data: ProgramData::new(prog_name, obj, btf_fd, *verifier_log_level), + }), } }; (name, program) diff --git a/test/integration-test/src/tests/rbpf.rs b/test/integration-test/src/tests/rbpf.rs index 4e5314c3..44e648d1 100644 --- a/test/integration-test/src/tests/rbpf.rs +++ b/test/integration-test/src/tests/rbpf.rs @@ -9,8 +9,10 @@ fn run_with_rbpf() { let object = Object::parse(crate::PASS).unwrap(); assert_eq!(object.programs.len(), 1); - assert_matches!(object.programs["pass"].section, ProgramSection::Xdp { .. }); - assert_eq!(object.programs["pass"].section.name(), "xdp.frags"); + assert_matches!( + object.programs["pass"].section, + ProgramSection::Xdp { frags: true } + ); let instructions = &object .functions @@ -40,7 +42,6 @@ fn use_map_with_rbpf() { object.programs["bpf_prog"].section, ProgramSection::TracePoint { .. } ); - assert_eq!(object.programs["bpf_prog"].section.name(), "tracepoint"); // Initialize maps: // - fd: 0xCAFE00 or 0xCAFE01 (the 0xCAFE00 part is used to distinguish fds from indices), diff --git a/xtask/public-api/aya-obj.txt b/xtask/public-api/aya-obj.txt index 20527b54..398df4d8 100644 --- a/xtask/public-api/aya-obj.txt +++ b/xtask/public-api/aya-obj.txt @@ -5813,74 +5813,43 @@ impl core::convert::From for aya_obj::ParseError pub fn aya_obj::ParseError::from(t: T) -> T pub enum aya_obj::obj::ProgramSection pub aya_obj::obj::ProgramSection::BtfTracePoint -pub aya_obj::obj::ProgramSection::BtfTracePoint::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupDevice -pub aya_obj::obj::ProgramSection::CgroupDevice::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSkb -pub aya_obj::obj::ProgramSection::CgroupSkb::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSkbEgress -pub aya_obj::obj::ProgramSection::CgroupSkbEgress::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSkbIngress -pub aya_obj::obj::ProgramSection::CgroupSkbIngress::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSock pub aya_obj::obj::ProgramSection::CgroupSock::attach_type: aya_obj::programs::cgroup_sock::CgroupSockAttachType -pub aya_obj::obj::ProgramSection::CgroupSock::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSockAddr pub aya_obj::obj::ProgramSection::CgroupSockAddr::attach_type: aya_obj::programs::cgroup_sock_addr::CgroupSockAddrAttachType -pub aya_obj::obj::ProgramSection::CgroupSockAddr::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSockopt pub aya_obj::obj::ProgramSection::CgroupSockopt::attach_type: aya_obj::programs::cgroup_sockopt::CgroupSockoptAttachType -pub aya_obj::obj::ProgramSection::CgroupSockopt::name: alloc::string::String pub aya_obj::obj::ProgramSection::CgroupSysctl -pub aya_obj::obj::ProgramSection::CgroupSysctl::name: alloc::string::String pub aya_obj::obj::ProgramSection::Extension -pub aya_obj::obj::ProgramSection::Extension::name: alloc::string::String pub aya_obj::obj::ProgramSection::FEntry -pub aya_obj::obj::ProgramSection::FEntry::name: alloc::string::String pub aya_obj::obj::ProgramSection::FEntry::sleepable: bool pub aya_obj::obj::ProgramSection::FExit -pub aya_obj::obj::ProgramSection::FExit::name: alloc::string::String pub aya_obj::obj::ProgramSection::FExit::sleepable: bool pub aya_obj::obj::ProgramSection::KProbe -pub aya_obj::obj::ProgramSection::KProbe::name: alloc::string::String pub aya_obj::obj::ProgramSection::KRetProbe -pub aya_obj::obj::ProgramSection::KRetProbe::name: alloc::string::String pub aya_obj::obj::ProgramSection::LircMode2 -pub aya_obj::obj::ProgramSection::LircMode2::name: alloc::string::String pub aya_obj::obj::ProgramSection::Lsm -pub aya_obj::obj::ProgramSection::Lsm::name: alloc::string::String pub aya_obj::obj::ProgramSection::Lsm::sleepable: bool pub aya_obj::obj::ProgramSection::PerfEvent -pub aya_obj::obj::ProgramSection::PerfEvent::name: alloc::string::String pub aya_obj::obj::ProgramSection::RawTracePoint -pub aya_obj::obj::ProgramSection::RawTracePoint::name: alloc::string::String pub aya_obj::obj::ProgramSection::SchedClassifier -pub aya_obj::obj::ProgramSection::SchedClassifier::name: alloc::string::String pub aya_obj::obj::ProgramSection::SkLookup -pub aya_obj::obj::ProgramSection::SkLookup::name: alloc::string::String pub aya_obj::obj::ProgramSection::SkMsg -pub aya_obj::obj::ProgramSection::SkMsg::name: alloc::string::String pub aya_obj::obj::ProgramSection::SkSkbStreamParser -pub aya_obj::obj::ProgramSection::SkSkbStreamParser::name: alloc::string::String pub aya_obj::obj::ProgramSection::SkSkbStreamVerdict -pub aya_obj::obj::ProgramSection::SkSkbStreamVerdict::name: alloc::string::String pub aya_obj::obj::ProgramSection::SockOps -pub aya_obj::obj::ProgramSection::SockOps::name: alloc::string::String pub aya_obj::obj::ProgramSection::SocketFilter -pub aya_obj::obj::ProgramSection::SocketFilter::name: alloc::string::String pub aya_obj::obj::ProgramSection::TracePoint -pub aya_obj::obj::ProgramSection::TracePoint::name: alloc::string::String pub aya_obj::obj::ProgramSection::UProbe -pub aya_obj::obj::ProgramSection::UProbe::name: alloc::string::String pub aya_obj::obj::ProgramSection::UProbe::sleepable: bool pub aya_obj::obj::ProgramSection::URetProbe -pub aya_obj::obj::ProgramSection::URetProbe::name: alloc::string::String pub aya_obj::obj::ProgramSection::URetProbe::sleepable: bool pub aya_obj::obj::ProgramSection::Xdp pub aya_obj::obj::ProgramSection::Xdp::frags: bool -pub aya_obj::obj::ProgramSection::Xdp::name: alloc::string::String -impl aya_obj::ProgramSection -pub fn aya_obj::ProgramSection::name(&self) -> &str impl core::str::traits::FromStr for aya_obj::ProgramSection pub type aya_obj::ProgramSection::Err = aya_obj::ParseError pub fn aya_obj::ProgramSection::from_str(section: &str) -> core::result::Result @@ -6565,74 +6534,43 @@ impl core::convert::From for aya_obj::ParseError pub fn aya_obj::ParseError::from(t: T) -> T pub enum aya_obj::ProgramSection pub aya_obj::ProgramSection::BtfTracePoint -pub aya_obj::ProgramSection::BtfTracePoint::name: alloc::string::String pub aya_obj::ProgramSection::CgroupDevice -pub aya_obj::ProgramSection::CgroupDevice::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSkb -pub aya_obj::ProgramSection::CgroupSkb::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSkbEgress -pub aya_obj::ProgramSection::CgroupSkbEgress::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSkbIngress -pub aya_obj::ProgramSection::CgroupSkbIngress::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSock pub aya_obj::ProgramSection::CgroupSock::attach_type: aya_obj::programs::cgroup_sock::CgroupSockAttachType -pub aya_obj::ProgramSection::CgroupSock::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSockAddr pub aya_obj::ProgramSection::CgroupSockAddr::attach_type: aya_obj::programs::cgroup_sock_addr::CgroupSockAddrAttachType -pub aya_obj::ProgramSection::CgroupSockAddr::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSockopt pub aya_obj::ProgramSection::CgroupSockopt::attach_type: aya_obj::programs::cgroup_sockopt::CgroupSockoptAttachType -pub aya_obj::ProgramSection::CgroupSockopt::name: alloc::string::String pub aya_obj::ProgramSection::CgroupSysctl -pub aya_obj::ProgramSection::CgroupSysctl::name: alloc::string::String pub aya_obj::ProgramSection::Extension -pub aya_obj::ProgramSection::Extension::name: alloc::string::String pub aya_obj::ProgramSection::FEntry -pub aya_obj::ProgramSection::FEntry::name: alloc::string::String pub aya_obj::ProgramSection::FEntry::sleepable: bool pub aya_obj::ProgramSection::FExit -pub aya_obj::ProgramSection::FExit::name: alloc::string::String pub aya_obj::ProgramSection::FExit::sleepable: bool pub aya_obj::ProgramSection::KProbe -pub aya_obj::ProgramSection::KProbe::name: alloc::string::String pub aya_obj::ProgramSection::KRetProbe -pub aya_obj::ProgramSection::KRetProbe::name: alloc::string::String pub aya_obj::ProgramSection::LircMode2 -pub aya_obj::ProgramSection::LircMode2::name: alloc::string::String pub aya_obj::ProgramSection::Lsm -pub aya_obj::ProgramSection::Lsm::name: alloc::string::String pub aya_obj::ProgramSection::Lsm::sleepable: bool pub aya_obj::ProgramSection::PerfEvent -pub aya_obj::ProgramSection::PerfEvent::name: alloc::string::String pub aya_obj::ProgramSection::RawTracePoint -pub aya_obj::ProgramSection::RawTracePoint::name: alloc::string::String pub aya_obj::ProgramSection::SchedClassifier -pub aya_obj::ProgramSection::SchedClassifier::name: alloc::string::String pub aya_obj::ProgramSection::SkLookup -pub aya_obj::ProgramSection::SkLookup::name: alloc::string::String pub aya_obj::ProgramSection::SkMsg -pub aya_obj::ProgramSection::SkMsg::name: alloc::string::String pub aya_obj::ProgramSection::SkSkbStreamParser -pub aya_obj::ProgramSection::SkSkbStreamParser::name: alloc::string::String pub aya_obj::ProgramSection::SkSkbStreamVerdict -pub aya_obj::ProgramSection::SkSkbStreamVerdict::name: alloc::string::String pub aya_obj::ProgramSection::SockOps -pub aya_obj::ProgramSection::SockOps::name: alloc::string::String pub aya_obj::ProgramSection::SocketFilter -pub aya_obj::ProgramSection::SocketFilter::name: alloc::string::String pub aya_obj::ProgramSection::TracePoint -pub aya_obj::ProgramSection::TracePoint::name: alloc::string::String pub aya_obj::ProgramSection::UProbe -pub aya_obj::ProgramSection::UProbe::name: alloc::string::String pub aya_obj::ProgramSection::UProbe::sleepable: bool pub aya_obj::ProgramSection::URetProbe -pub aya_obj::ProgramSection::URetProbe::name: alloc::string::String pub aya_obj::ProgramSection::URetProbe::sleepable: bool pub aya_obj::ProgramSection::Xdp pub aya_obj::ProgramSection::Xdp::frags: bool -pub aya_obj::ProgramSection::Xdp::name: alloc::string::String -impl aya_obj::ProgramSection -pub fn aya_obj::ProgramSection::name(&self) -> &str impl core::str::traits::FromStr for aya_obj::ProgramSection pub type aya_obj::ProgramSection::Err = aya_obj::ParseError pub fn aya_obj::ProgramSection::from_str(section: &str) -> core::result::Result