use std::ffi::CString;
use aya_obj::generated::bpf_prog_type::BPF_PROG_TYPE_RAW_TRACEPOINT;
use crate::programs::{
FdLink, FdLinkId, ProgramData, ProgramError, ProgramType, define_link_wrapper,
load_program_without_attach_type, utils::attach_raw_tracepoint,
};
#[derive(Debug)]
#[doc(alias = "BPF_PROG_TYPE_RAW_TRACEPOINT")]
pub struct RawTracePoint {
pub(crate) data: ProgramData<RawTracePointLink>,
}
impl RawTracePoint {
pub const PROGRAM_TYPE: ProgramType = ProgramType::RawTracePoint;
pub fn load(&mut self) -> Result<(), ProgramError> {
let Self { data } = self;
load_program_without_attach_type(BPF_PROG_TYPE_RAW_TRACEPOINT, data)
}
pub fn attach(&mut self, tp_name: &str) -> Result<RawTracePointLinkId, ProgramError> {
let tp_name_c = CString::new(tp_name).unwrap();
attach_raw_tracepoint(&mut self.data, Some(&tp_name_c))
}
}
define_link_wrapper!(
RawTracePointLink,
RawTracePointLinkId,
FdLink,
FdLinkId,
RawTracePoint,
);