smoke.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. use procfs::KernelVersion;
  2. use aya::{
  3. include_bytes_aligned,
  4. programs::{Extension, Xdp, XdpFlags},
  5. Bpf, BpfLoader,
  6. };
  7. #[test]
  8. fn xdp() {
  9. let bytes = include_bytes_aligned!("../../../target/bpfel-unknown-none/release/pass");
  10. let mut bpf = Bpf::load(bytes).unwrap();
  11. let dispatcher: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  12. dispatcher.load().unwrap();
  13. dispatcher.attach("lo", XdpFlags::default()).unwrap();
  14. }
  15. #[test]
  16. fn extension() {
  17. if KernelVersion::current().unwrap() < KernelVersion::new(5, 9, 0) {
  18. eprintln!("skipping test, XDP uses netlink");
  19. return;
  20. }
  21. let main_bytes =
  22. include_bytes_aligned!("../../../target/bpfel-unknown-none/release/main.bpf.o");
  23. let mut bpf = Bpf::load(main_bytes).unwrap();
  24. let pass: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
  25. pass.load().unwrap();
  26. pass.attach("lo", XdpFlags::default()).unwrap();
  27. let ext_bytes = include_bytes_aligned!("../../../target/bpfel-unknown-none/release/ext.bpf.o");
  28. let mut bpf = BpfLoader::new().extension("drop").load(ext_bytes).unwrap();
  29. let drop_: &mut Extension = bpf.program_mut("drop").unwrap().try_into().unwrap();
  30. drop_.load(pass.fd().unwrap(), "xdp_pass").unwrap();
  31. }