@ -95,6 +95,39 @@ fn parse_kernel_symbols(reader: impl BufRead) -> Result<BTreeMap<u64, String>, i
Ok ( syms )
}
/// Returns the prefix used by syscalls.
///
/// # Example
///
/// ```no_run
/// use aya::util::syscall_prefix;
/// let prefix = syscall_prefix().unwrap();
/// let syscall_fname = format!("{prefix}exec");
/// ```
///
/// # Errors
///
/// Returns [`std::io::ErrorKind::NotFound`] if the prefix can't be guessed. Returns other [`std::io::Error`] kinds if `/proc/kallsyms` can't be opened or is somehow invalid.
pub fn syscall_prefix ( ) -> Result < & ' static str , io ::Error > {
const PREFIXES : [ & str ; 7 ] = [
"sys_" ,
"__x64_sys_" ,
"__x32_compat_sys_" ,
"__ia32_compat_sys_" ,
"__arm64_sys_" ,
"__s390x_sys_" ,
"__s390_sys_" ,
] ;
let ksym = kernel_symbols ( ) ? ;
for p in PREFIXES {
let prefixed_syscall = format! ( "{}bpf" , p ) ;
if ksym . values ( ) . any ( | el | * el = = prefixed_syscall ) {
return Ok ( p ) ;
}
}
Err ( io ::ErrorKind ::NotFound . into ( ) )
}
pub ( crate ) fn ifindex_from_ifname ( if_name : & str ) -> Result < u32 , io ::Error > {
let c_str_if_name = CString ::new ( if_name ) ? ;
let c_if_name = c_str_if_name . as_ptr ( ) ;