smoke.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use aya::{
  2. include_bytes_aligned,
  3. programs::{Extension, Xdp, XdpFlags},
  4. Bpf, BpfLoader,
  5. };
  6. use log::info;
  7. use super::{integration_test, kernel_version};
  8. #[integration_test]
  9. fn xdp() {
  10. let bytes = include_bytes_aligned!("../../../../target/bpfel-unknown-none/release/pass");
  11. let mut bpf = Bpf::load(bytes).unwrap();
  12. let dispatcher: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  13. dispatcher.load().unwrap();
  14. dispatcher.attach("lo", XdpFlags::default()).unwrap();
  15. }
  16. #[integration_test]
  17. fn extension() {
  18. let (major, minor, _) = kernel_version().unwrap();
  19. if major < 5 || (minor == 5 && minor < 9) {
  20. info!(
  21. "skipping as {}.{} does not meet version requirement of 5.9",
  22. major, minor
  23. );
  24. return;
  25. }
  26. // TODO: Check kernel version == 5.9 or later
  27. let main_bytes =
  28. include_bytes_aligned!("../../../../target/bpfel-unknown-none/release/main.bpf.o");
  29. let mut bpf = Bpf::load(main_bytes).unwrap();
  30. let pass: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  31. pass.load().unwrap();
  32. pass.attach("lo", XdpFlags::default()).unwrap();
  33. let ext_bytes =
  34. include_bytes_aligned!("../../../../target/bpfel-unknown-none/release/ext.bpf.o");
  35. let mut bpf = BpfLoader::new().extension("drop").load(ext_bytes).unwrap();
  36. let drop_: &mut Extension = bpf.program_mut("drop").unwrap().try_into().unwrap();
  37. drop_.load(pass.fd().unwrap(), "xdp_pass").unwrap();
  38. }