lib.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #![no_std]
  2. #![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
  3. #[cfg(bpf_target_arch = "x86_64")]
  4. mod x86_64;
  5. #[cfg(bpf_target_arch = "arm")]
  6. mod armv7;
  7. #[cfg(bpf_target_arch = "aarch64")]
  8. mod aarch64;
  9. mod gen {
  10. #[cfg(bpf_target_arch = "x86_64")]
  11. pub use super::x86_64::*;
  12. #[cfg(bpf_target_arch = "arm")]
  13. pub use super::armv7::*;
  14. #[cfg(bpf_target_arch = "aarch64")]
  15. pub use super::aarch64::*;
  16. }
  17. pub use gen::{getters, helpers};
  18. pub mod bindings {
  19. pub use crate::gen::bindings::*;
  20. pub const TC_ACT_OK: i32 = crate::gen::bindings::TC_ACT_OK as i32;
  21. pub const TC_ACT_RECLASSIFY: i32 = crate::gen::bindings::TC_ACT_RECLASSIFY as i32;
  22. pub const TC_ACT_SHOT: i32 = crate::gen::bindings::TC_ACT_SHOT as i32;
  23. pub const TC_ACT_PIPE: i32 = crate::gen::bindings::TC_ACT_PIPE as i32;
  24. pub const TC_ACT_STOLEN: i32 = crate::gen::bindings::TC_ACT_STOLEN as i32;
  25. pub const TC_ACT_QUEUED: i32 = crate::gen::bindings::TC_ACT_QUEUED as i32;
  26. pub const TC_ACT_REPEAT: i32 = crate::gen::bindings::TC_ACT_REPEAT as i32;
  27. pub const TC_ACT_REDIRECT: i32 = crate::gen::bindings::TC_ACT_REDIRECT as i32;
  28. pub const TC_ACT_TRAP: i32 = crate::gen::bindings::TC_ACT_TRAP as i32;
  29. pub const TC_ACT_VALUE_MAX: i32 = crate::gen::bindings::TC_ACT_VALUE_MAX as i32;
  30. pub const TC_ACT_EXT_VAL_MASK: i32 = 268435455;
  31. #[repr(C)]
  32. #[derive(Debug, Copy, Clone)]
  33. pub struct bpf_map_def {
  34. pub type_: ::aya_bpf_cty::c_uint,
  35. pub key_size: ::aya_bpf_cty::c_uint,
  36. pub value_size: ::aya_bpf_cty::c_uint,
  37. pub max_entries: ::aya_bpf_cty::c_uint,
  38. pub map_flags: ::aya_bpf_cty::c_uint,
  39. pub id: ::aya_bpf_cty::c_uint,
  40. pub pinning: ::aya_bpf_cty::c_uint,
  41. }
  42. }
  43. use aya_bpf_cty::{c_long, c_void};
  44. use core::mem::{self, MaybeUninit};
  45. #[inline]
  46. unsafe fn bpf_probe_read<T>(src: *const T) -> Result<T, c_long> {
  47. let mut v: MaybeUninit<T> = MaybeUninit::uninit();
  48. let ret = helpers::bpf_probe_read(
  49. v.as_mut_ptr() as *mut c_void,
  50. mem::size_of::<T>() as u32,
  51. src as *const c_void,
  52. );
  53. if ret < 0 {
  54. return Err(ret);
  55. }
  56. Ok(v.assume_init())
  57. }