helpers.rs 861 B

123456789101112131415161718192021222324252627282930313233343536
  1. use core::mem::{self, MaybeUninit};
  2. use aya_bpf_bindings::helpers as gen;
  3. pub use gen::*;
  4. use crate::cty::{c_char, c_long, c_void};
  5. #[inline]
  6. pub unsafe fn bpf_probe_read<T>(src: *const T) -> Result<T, c_long> {
  7. let mut v: MaybeUninit<T> = MaybeUninit::uninit();
  8. let ret = gen::bpf_probe_read(
  9. v.as_mut_ptr() as *mut c_void,
  10. mem::size_of::<T>() as u32,
  11. src as *const c_void,
  12. );
  13. if ret < 0 {
  14. return Err(ret);
  15. }
  16. Ok(v.assume_init())
  17. }
  18. #[inline]
  19. pub fn bpf_get_current_comm() -> Result<[c_char; 16], ()> {
  20. let mut comm: [c_char; 16usize] = [0; 16];
  21. if unsafe { gen::bpf_get_current_comm(&mut comm as *mut _ as *mut c_void, 16u32) } == 0 {
  22. Ok(comm)
  23. } else {
  24. Err(())
  25. }
  26. }
  27. #[inline]
  28. pub fn bpf_get_current_pid_tgid() -> u64 {
  29. unsafe { gen::bpf_get_current_pid_tgid() }
  30. }