fixed error related to the veth name lenght

added tokio runtime to integraito  tests

Signed-off-by: raffaelespazzoli <raffaele.spazzoli@gmail.com>
pull/434/head
raffaelespazzoli 3 years ago
parent cc07a5e9f5
commit efc8b9989c

@ -18,3 +18,4 @@ object = { version = "0.29", default-features = false, features = ["std", "read_
regex = "1" regex = "1"
rtnetlink = "0.11.0" rtnetlink = "0.11.0"
futures = "0.3" futures = "0.3"
tokio = { version = "^1.0.1", features = ["full"] }

@ -42,7 +42,8 @@ macro_rules! exec_all_tests {
}}; }};
} }
fn main() -> anyhow::Result<()> { #[tokio::main]
async fn main() -> anyhow::Result<()> {
env_logger::init(); env_logger::init();
let cli = Cli::parse(); let cli = Cli::parse();

@ -19,6 +19,8 @@ use rtnetlink::Error::RequestFailed;
const MAX_RETRIES: u32 = 100; const MAX_RETRIES: u32 = 100;
const RETRY_DURATION_MS: u64 = 10; const RETRY_DURATION_MS: u64 = 10;
// veth names can be mac 15 char long
const TEST_VETH_NAME: &str = "aya-veth1";
#[integration_test] #[integration_test]
fn long_name() { fn long_name() {
@ -31,18 +33,19 @@ fn long_name() {
.unwrap(); .unwrap();
name_prog.load().unwrap(); name_prog.load().unwrap();
// create veth interface pair // Create veth interface pair
let veth_name="aya-test-veth1"; create_veth_pair(TEST_VETH_NAME).unwrap();
create_veth_pair(veth_name).unwrap();
name_prog.attach(veth_name, XdpFlags::default()).unwrap(); name_prog
.attach(TEST_VETH_NAME, XdpFlags::default())
.unwrap();
// We used to be able to assert with bpftool that the program name was short. // We used to be able to assert with bpftool that the program name was short.
// It seem though that it now uses the name from the ELF symbol table instead. // It seem though that it now uses the name from the ELF symbol table instead.
// Therefore, as long as we were able to load the program, this is good enough. // Therefore, as long as we were able to load the program, this is good enough.
//delete veth interface pait // Delete veth interface pait
delete_veth_pair(veth_name).unwrap(); delete_veth_pair(TEST_VETH_NAME).unwrap();
} }
#[integration_test] #[integration_test]
@ -100,11 +103,10 @@ fn unload() {
let prog: &mut Xdp = bpf.program_mut("test_unload").unwrap().try_into().unwrap(); let prog: &mut Xdp = bpf.program_mut("test_unload").unwrap().try_into().unwrap();
prog.load().unwrap(); prog.load().unwrap();
// create veth interface pair // Create veth interface pair
let veth_name="aya-test-veth1"; create_veth_pair(TEST_VETH_NAME).unwrap();
create_veth_pair(veth_name).unwrap();
let link = prog.attach(veth_name, XdpFlags::default()).unwrap(); let link = prog.attach(TEST_VETH_NAME, XdpFlags::default()).unwrap();
{ {
let _link_owned = prog.take_link(link); let _link_owned = prog.take_link(link);
prog.unload().unwrap(); prog.unload().unwrap();
@ -115,15 +117,15 @@ fn unload() {
prog.load().unwrap(); prog.load().unwrap();
assert_loaded!("test_unload", true); assert_loaded!("test_unload", true);
prog.attach(veth_name, XdpFlags::default()).unwrap(); prog.attach(TEST_VETH_NAME, XdpFlags::default()).unwrap();
assert_loaded!("test_unload", true); assert_loaded!("test_unload", true);
prog.unload().unwrap(); prog.unload().unwrap();
assert_loaded!("test_unload", false); assert_loaded!("test_unload", false);
//delete veth interface pait // Delete veth interface pait
delete_veth_pair(veth_name).unwrap(); delete_veth_pair(TEST_VETH_NAME).unwrap();
} }
#[integration_test] #[integration_test]
@ -132,11 +134,10 @@ fn pin_link() {
let mut bpf = Bpf::load(bytes).unwrap(); let mut bpf = Bpf::load(bytes).unwrap();
let prog: &mut Xdp = bpf.program_mut("test_unload").unwrap().try_into().unwrap(); let prog: &mut Xdp = bpf.program_mut("test_unload").unwrap().try_into().unwrap();
prog.load().unwrap(); prog.load().unwrap();
// create veth interface pair // Create veth interface pair
let veth_name="aya-test-veth1"; create_veth_pair(TEST_VETH_NAME).unwrap();
create_veth_pair(veth_name).unwrap();
let link_id = prog.attach(veth_name, XdpFlags::default()).unwrap(); let link_id = prog.attach(TEST_VETH_NAME, XdpFlags::default()).unwrap();
let link = prog.take_link(link_id).unwrap(); let link = prog.take_link(link_id).unwrap();
assert_loaded!("test_unload", true); assert_loaded!("test_unload", true);
@ -155,8 +156,8 @@ fn pin_link() {
drop(new_link); drop(new_link);
assert_loaded!("test_unload", false); assert_loaded!("test_unload", false);
//delete veth interface pait // Delete veth interface pait
delete_veth_pair(veth_name).unwrap(); delete_veth_pair(TEST_VETH_NAME).unwrap();
} }
#[integration_test] #[integration_test]
@ -164,8 +165,7 @@ fn pin_lifecycle() {
let bytes = include_bytes_aligned!("../../../../target/bpfel-unknown-none/debug/pass"); let bytes = include_bytes_aligned!("../../../../target/bpfel-unknown-none/debug/pass");
// create veth interface pair // create veth interface pair
let veth_name="aya-test-veth1"; create_veth_pair(TEST_VETH_NAME).unwrap();
create_veth_pair(veth_name).unwrap();
// 1. Load Program and Pin // 1. Load Program and Pin
{ {
@ -173,7 +173,7 @@ fn pin_lifecycle() {
let prog: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap(); let prog: &mut Xdp = bpf.program_mut("pass").unwrap().try_into().unwrap();
prog.load().unwrap(); prog.load().unwrap();
let link_id = prog.attach(veth_name, XdpFlags::default()).unwrap(); let link_id = prog.attach(TEST_VETH_NAME, XdpFlags::default()).unwrap();
let link = prog.take_link(link_id).unwrap(); let link = prog.take_link(link_id).unwrap();
let fd_link: FdLink = link.try_into().unwrap(); let fd_link: FdLink = link.try_into().unwrap();
fd_link.pin("/sys/fs/bpf/aya-xdp-test-lo").unwrap(); fd_link.pin("/sys/fs/bpf/aya-xdp-test-lo").unwrap();
@ -199,17 +199,18 @@ fn pin_lifecycle() {
// program should be unloaded // program should be unloaded
assert_loaded!("pass", false); assert_loaded!("pass", false);
//delete veth interface pait // Delete veth interface pait
delete_veth_pair(veth_name).unwrap(); delete_veth_pair(TEST_VETH_NAME).unwrap();
} }
fn create_veth_pair(veth_name: &str) -> Result<(), rtnetlink::Error> { fn create_veth_pair(veth_name: &str) -> Result<(), rtnetlink::Error> {
let (_, handle, _) = new_connection().unwrap(); let (connection, handle, _) = new_connection().unwrap();
tokio::spawn(connection);
block_on(async { block_on(async {
handle handle
.link() .link()
.add() .add()
.veth(veth_name.to_string(), veth_name.to_string()+"-pair") .veth(veth_name.to_string(), veth_name.to_string() + "-p")
// Execute the request, and wait for it to finish // Execute the request, and wait for it to finish
.execute() .execute()
.await?; .await?;
@ -218,7 +219,8 @@ fn create_veth_pair(veth_name: &str) -> Result<(), rtnetlink::Error> {
} }
fn delete_veth_pair(veth_name: &str) -> Result<(), rtnetlink::Error> { fn delete_veth_pair(veth_name: &str) -> Result<(), rtnetlink::Error> {
let (_, handle, _) = new_connection().unwrap(); let (connection, handle, _) = new_connection().unwrap();
tokio::spawn(connection);
block_on(async { block_on(async {
let index = match handle let index = match handle
.link() .link()

Loading…
Cancel
Save