diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile index 64e2ca0cd..6bc6747fe 100644 --- a/test/zdtm/static/Makefile +++ b/test/zdtm/static/Makefile @@ -152,6 +152,7 @@ TST_NOFILE := \ cgroupns \ helper_zombie_child \ clone_fs \ + macvlan \ # jobctl00 \ ifneq ($(SRCARCH),arm) diff --git a/test/zdtm/static/macvlan.c b/test/zdtm/static/macvlan.c new file mode 100644 index 000000000..018dffd93 --- /dev/null +++ b/test/zdtm/static/macvlan.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "zdtmtst.h" + +const char *test_doc = "check that macvlan interfaces are c/r'd correctly"; +const char *test_author = "Tycho Andersen "; + +#define BRIDGE_NAME "zdtmbr0" +#define IF_NAME "zdtmmvlan0" + +static bool wait_for_macvlan(void) +{ + int i; + + for (i = 0; i < 10; i++) { + if (system("ip addr list dev " IF_NAME) == 0) + return true; + + sleep(1); + } + + return false; +} + +int main(int argc, char **argv) +{ + int ret = 1; + + test_init(argc, argv); + + if (!wait_for_macvlan()) { + fail("failed to inject macvlan device\n"); + return 1; + } + + if (system("ip addr list dev " IF_NAME " > macvlan.dump.test")) { + fail("can't save net config"); + goto out; + } + + test_daemon(); + test_waitsig(); + + if (system("ip addr list dev " IF_NAME " > macvlan.rst.test")) { + fail("can't get net config"); + goto out; + } + + if (system("diff macvlan.rst.test macvlan.dump.test")) { + fail("Net config differs after restore"); + goto out; + } + + pass(); + ret = 0; + +out: + return ret; +} diff --git a/test/zdtm/static/macvlan.desc b/test/zdtm/static/macvlan.desc new file mode 100644 index 000000000..f7b15e443 --- /dev/null +++ b/test/zdtm/static/macvlan.desc @@ -0,0 +1 @@ +{'flavor': 'ns uns', 'deps': [ '/bin/sh', '/usr/bin/sort', '/bin/grep', '/sbin/ip', '/usr/bin/diff'], 'flags': 'suid', 'ropts': '--external macvlan[zdtmmvlan0]:zdtmbr0', 'feature': 'nsid_manip'} diff --git a/test/zdtm/static/macvlan.hook b/test/zdtm/static/macvlan.hook new file mode 100755 index 000000000..0dea7d1cd --- /dev/null +++ b/test/zdtm/static/macvlan.hook @@ -0,0 +1,30 @@ +#!/bin/bash + +[ "$1" == "--clean" -o "$1" == "--pre-restore" -o "$1" == "--post-start" ] || exit 0 + +if [ "$1" == "--post-start" ]; then + set -e + + i=0 + while [ -z "$(pidof -s macvlan)" ]; do + i=$(($i+1)) + if [ "$i" -eq "10" ]; then + echo "failed to create macvlan test" + exit 1 + fi + sleep 1 + done + + ip link add zdtmbr0 type bridge + ip addr add 10.0.55.55/32 dev zdtmbr0 + ip link set zdtmbr0 up + ip link add zdtmmvlan0 link zdtmbr0 type macvlan mode bridge + ip addr add 10.0.55.56/32 dev zdtmmvlan0 + ip link set zdtmmvlan0 netns $(pidof -s macvlan) +else + ip link del zdtmmvlan0 || true + + [ "$1" == "--clean" ] || exit 0 + + ip link del zdtmbr0 || true +fi