From 76d86b16e617e761300a6de97f41f36bf091ef65 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 3 Jan 2020 19:00:53 +0100 Subject: executor: setup vlan/macvlan/ipvlan devices --- executor/common_linux.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++--- executor/defs.h | 12 ++++----- 2 files changed, 70 insertions(+), 9 deletions(-) (limited to 'executor') diff --git a/executor/common_linux.h b/executor/common_linux.h index 21560886b..30abfd6c7 100644 --- a/executor/common_linux.h +++ b/executor/common_linux.h @@ -284,6 +284,54 @@ static void netlink_add_virt_wifi(struct nlmsg* nlmsg, int sock, const char* nam name, link, strerror(err)); (void)err; } + +static void netlink_add_vlan(struct nlmsg* nlmsg, int sock, const char* name, const char* link, uint16 id, uint16 proto) +{ + netlink_add_device_impl(nlmsg, "vlan", name); + netlink_nest(nlmsg, IFLA_INFO_DATA); + netlink_attr(nlmsg, IFLA_VLAN_ID, &id, sizeof(id)); + netlink_attr(nlmsg, IFLA_VLAN_PROTOCOL, &proto, sizeof(proto)); + netlink_done(nlmsg); + netlink_done(nlmsg); + int ifindex = if_nametoindex(link); + netlink_attr(nlmsg, IFLA_LINK, &ifindex, sizeof(ifindex)); + int err = netlink_send(nlmsg, sock); + debug("netlink: add %s type vlan link %s id %d: %s\n", + name, link, id, strerror(err)); + (void)err; +} + +static void netlink_add_macvlan(struct nlmsg* nlmsg, int sock, const char* name, const char* link) +{ + netlink_add_device_impl(nlmsg, "macvlan", name); + netlink_nest(nlmsg, IFLA_INFO_DATA); + uint32 mode = MACVLAN_MODE_BRIDGE; + netlink_attr(nlmsg, IFLA_MACVLAN_MODE, &mode, sizeof(mode)); + netlink_done(nlmsg); + netlink_done(nlmsg); + int ifindex = if_nametoindex(link); + netlink_attr(nlmsg, IFLA_LINK, &ifindex, sizeof(ifindex)); + int err = netlink_send(nlmsg, sock); + debug("netlink: add %s type macvlan link %s mode %d: %s\n", + name, link, mode, strerror(err)); + (void)err; +} + +static void netlink_add_ipvlan(struct nlmsg* nlmsg, int sock, const char* name, const char* link, uint16 mode, uint16 flags) +{ + netlink_add_device_impl(nlmsg, "ipvlan", name); + netlink_nest(nlmsg, IFLA_INFO_DATA); + netlink_attr(nlmsg, IFLA_IPVLAN_MODE, &mode, sizeof(mode)); + netlink_attr(nlmsg, IFLA_IPVLAN_FLAGS, &flags, sizeof(flags)); + netlink_done(nlmsg); + netlink_done(nlmsg); + int ifindex = if_nametoindex(link); + netlink_attr(nlmsg, IFLA_LINK, &ifindex, sizeof(ifindex)); + int err = netlink_send(nlmsg, sock); + debug("netlink: add %s type ipvlan link %s mode %d: %s\n", + name, link, mode, strerror(err)); + (void)err; +} #endif #if SYZ_EXECUTOR || SYZ_NET_DEVICES || SYZ_NET_INJECTION || SYZ_DEVLINK_PCI @@ -684,10 +732,7 @@ static void initialize_netdevices(void) return; #endif // TODO: add the following devices: - // - vlan // - vxlan - // - macvlan - // - ipvlan // - macsec // - ipip // - lowpan @@ -772,6 +817,14 @@ static void initialize_netdevices(void) {"veth0_virt_wifi", ETH_ALEN}, {"veth1_virt_wifi", ETH_ALEN}, {"virt_wifi0", ETH_ALEN}, + {"veth0_vlan", ETH_ALEN}, + {"veth1_vlan", ETH_ALEN}, + {"vlan0", ETH_ALEN}, + {"vlan1", ETH_ALEN}, + {"macvlan0", ETH_ALEN}, + {"macvlan1", ETH_ALEN}, + {"ipvlan0", ETH_ALEN}, + {"ipvlan1", ETH_ALEN}, }; int sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (sock == -1) @@ -810,6 +863,14 @@ static void initialize_netdevices(void) netlink_add_veth(&nlmsg, sock, "veth0_virt_wifi", "veth1_virt_wifi"); netlink_add_virt_wifi(&nlmsg, sock, "virt_wifi0", "veth1_virt_wifi"); + netlink_add_veth(&nlmsg, sock, "veth0_vlan", "veth1_vlan"); + netlink_add_vlan(&nlmsg, sock, "vlan0", "veth0_vlan", 0, htons(ETH_P_8021Q)); + netlink_add_vlan(&nlmsg, sock, "vlan1", "veth0_vlan", 1, htons(ETH_P_8021AD)); + netlink_add_macvlan(&nlmsg, sock, "macvlan0", "veth1_vlan"); + netlink_add_macvlan(&nlmsg, sock, "macvlan1", "veth1_vlan"); + netlink_add_ipvlan(&nlmsg, sock, "ipvlan0", "veth0_vlan", IPVLAN_MODE_L2, 0); + netlink_add_ipvlan(&nlmsg, sock, "ipvlan1", "veth0_vlan", IPVLAN_MODE_L3S, IPVLAN_F_VEPA); + netdevsim_add((int)procid, 4); // Number of port is in sync with value in sys/linux/socket_netlink_generic_devlink.txt for (i = 0; i < sizeof(devices) / (sizeof(devices[0])); i++) { diff --git a/executor/defs.h b/executor/defs.h index 60a045d9c..ba87cc772 100644 --- a/executor/defs.h +++ b/executor/defs.h @@ -70,7 +70,7 @@ #if GOARCH_386 #define GOARCH "386" -#define SYZ_REVISION "4d2b73eb002f4c5491c727a7834d3e7a9096b9ed" +#define SYZ_REVISION "4f9363ce72dcd1fe8bd5bff0030b4386c3541e9d" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -80,7 +80,7 @@ #if GOARCH_amd64 #define GOARCH "amd64" -#define SYZ_REVISION "9993c6dd9acaaf05bbb41489db422dfcf1fad8b7" +#define SYZ_REVISION "56640492f2e97e28ebf07ad3f747411f1109be70" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -90,7 +90,7 @@ #if GOARCH_arm #define GOARCH "arm" -#define SYZ_REVISION "06e1e4cac6e4b973223134604a09b24ef9062121" +#define SYZ_REVISION "50c3858c23a97dbfe21bfa269e7f216961278c25" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -100,7 +100,7 @@ #if GOARCH_arm64 #define GOARCH "arm64" -#define SYZ_REVISION "e42de32d95a2229db2cee28ba0143582e9897739" +#define SYZ_REVISION "efd758e940b4ce23b67f5b53f315a4e9dbea4572" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -110,7 +110,7 @@ #if GOARCH_mips64le #define GOARCH "mips64le" -#define SYZ_REVISION "8c368e4bfc551bfbd80ead3309904221dbb80267" +#define SYZ_REVISION "63ee941aae29de3d1444f8da5683f094387e9775" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -120,7 +120,7 @@ #if GOARCH_ppc64le #define GOARCH "ppc64le" -#define SYZ_REVISION "f694eade2e0b4fdc6cbcb93ce49fd2da09bd9b75" +#define SYZ_REVISION "845fe68e33ae9fd611655bffcc6d732a0acf1eb0" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 -- cgit mrf-deployment