4
0

test.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //! ```cargo
  2. //! [dependencies]
  3. //! aya = { path = "../../../../aya" }
  4. //! ```
  5. use aya::{
  6. programs::{Xdp, XdpFlags},
  7. Bpf,
  8. };
  9. use std::convert::TryInto;
  10. use std::process::Command;
  11. fn is_loaded() -> bool {
  12. let output = Command::new("bpftool").args(&["prog"]).output().unwrap();
  13. let stdout = String::from_utf8(output.stdout).unwrap();
  14. stdout.contains("test_unload")
  15. }
  16. fn assert_loaded(loaded: bool) {
  17. let state = is_loaded();
  18. if state == loaded {
  19. return;
  20. }
  21. panic!("Expected loaded: {} but was loaded: {}", loaded, state);
  22. }
  23. fn main() {
  24. println!("Loading XDP program");
  25. let mut bpf = Bpf::load_file("test.o").unwrap();
  26. let dispatcher: &mut Xdp = bpf.program_mut("test_unload").unwrap().try_into().unwrap();
  27. dispatcher.load().unwrap();
  28. let link = dispatcher.attach("eth0", XdpFlags::default()).unwrap();
  29. {
  30. let link_owned = dispatcher.take_link(link);
  31. dispatcher.unload().unwrap();
  32. assert_loaded(true);
  33. };
  34. assert_loaded(false);
  35. dispatcher.load().unwrap();
  36. assert_loaded(true);
  37. dispatcher.attach("eth0", XdpFlags::default()).unwrap();
  38. assert_loaded(true);
  39. dispatcher.unload().unwrap();
  40. assert_loaded(false);
  41. }