4
0

smoke.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. use aya::{
  2. programs::{Extension, Xdp, XdpFlags},
  3. util::KernelVersion,
  4. Bpf, BpfLoader,
  5. };
  6. #[test]
  7. fn xdp() {
  8. let kernel_version = KernelVersion::current().unwrap();
  9. if kernel_version < KernelVersion::new(5, 18, 0) {
  10. eprintln!("skipping test on kernel {kernel_version:?}, support for BPF_F_XDP_HAS_FRAGS was added in 5.18.0; see https://github.com/torvalds/linux/commit/c2f2cdb");
  11. return;
  12. }
  13. let mut bpf = Bpf::load(integration_test::PASS).unwrap();
  14. let dispatcher: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  15. dispatcher.load().unwrap();
  16. dispatcher.attach("lo", XdpFlags::default()).unwrap();
  17. }
  18. #[test]
  19. fn extension() {
  20. let kernel_version = KernelVersion::current().unwrap();
  21. if kernel_version < KernelVersion::new(5, 9, 0) {
  22. eprintln!("skipping test on kernel {kernel_version:?}, XDP uses netlink");
  23. return;
  24. }
  25. let mut bpf = Bpf::load(integration_test::MAIN).unwrap();
  26. let pass: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  27. pass.load().unwrap();
  28. pass.attach("lo", XdpFlags::default()).unwrap();
  29. let mut bpf = BpfLoader::new()
  30. .extension("drop")
  31. .load(integration_test::EXT)
  32. .unwrap();
  33. let drop_: &mut Extension = bpf.program_mut("drop").unwrap().try_into().unwrap();
  34. drop_.load(pass.fd().unwrap(), "xdp_pass").unwrap();
  35. }