Browse Source

programs: allow program names to be static strings

Tamir Duberstein 3 weeks ago
parent
commit
22c8f783e7
2 changed files with 6 additions and 9 deletions
  1. 1 5
      aya/src/bpf.rs
  2. 5 4
      aya/src/programs/mod.rs

+ 1 - 5
aya/src/bpf.rs

@@ -519,11 +519,7 @@ impl<'a> EbpfLoader<'a> {
             .map(|(name, prog_obj)| {
                 let function_obj = obj.functions.get(&prog_obj.function_key()).unwrap().clone();
 
-                let prog_name = if FEATURES.bpf_name() {
-                    Some(name.clone())
-                } else {
-                    None
-                };
+                let prog_name = FEATURES.bpf_name().then(|| name.clone().into());
                 let section = prog_obj.section.clone();
                 let obj = (prog_obj, function_obj);
 

+ 5 - 4
aya/src/programs/mod.rs

@@ -71,6 +71,7 @@ pub mod uprobe;
 pub mod xdp;
 
 use std::{
+    borrow::Cow,
     ffi::CString,
     io,
     os::fd::{AsFd, BorrowedFd},
@@ -493,7 +494,7 @@ impl Program {
 
 #[derive(Debug)]
 pub(crate) struct ProgramData<T: Link> {
-    pub(crate) name: Option<String>,
+    pub(crate) name: Option<Cow<'static, str>>,
     pub(crate) obj: Option<(aya_obj::Program, aya_obj::Function)>,
     pub(crate) fd: Option<ProgramFd>,
     pub(crate) links: Links<T>,
@@ -509,7 +510,7 @@ pub(crate) struct ProgramData<T: Link> {
 
 impl<T: Link> ProgramData<T> {
     pub(crate) fn new(
-        name: Option<String>,
+        name: Option<Cow<'static, str>>,
         obj: (aya_obj::Program, aya_obj::Function),
         btf_fd: Option<Arc<crate::MockableFd>>,
         verifier_log_level: VerifierLogLevel,
@@ -531,7 +532,7 @@ impl<T: Link> ProgramData<T> {
     }
 
     pub(crate) fn from_bpf_prog_info(
-        name: Option<String>,
+        name: Option<Cow<'static, str>>,
         fd: crate::MockableFd,
         path: &Path,
         info: bpf_prog_info,
@@ -576,7 +577,7 @@ impl<T: Link> ProgramData<T> {
         })?;
 
         let info = ProgramInfo::new_from_fd(fd.as_fd())?;
-        let name = info.name_as_str().map(|s| s.to_string());
+        let name = info.name_as_str().map(ToOwned::to_owned).map(Into::into);
         Self::from_bpf_prog_info(name, fd, path.as_ref(), info.0, verifier_log_level)
     }
 }