aboutsummaryrefslogtreecommitdiffstats
path: root/executor/common_linux.h
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-02-26 16:48:31 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-02-26 16:48:31 +0100
commitb37b65b0e69a4d22551aa6a207856ad7b3801e69 (patch)
tree1d94aca2c30561fc00b490a8af87f326701bf9ae /executor/common_linux.h
parent67f0e5ba11d8226e59fdd33923961e0b4db9f66f (diff)
sys/linux: remove proc type from network descriptions
We now always create net namespace for testing, so socket ports and other IDs do not overlap between different test processes. Proc types play badly with squashing packets to ANYBLOB. To squash into a block we need concrete value, but it depends on process id. Removing proc also makes tun setup and address descriptions simpler.
Diffstat (limited to 'executor/common_linux.h')
-rw-r--r--executor/common_linux.h64
1 files changed, 23 insertions, 41 deletions
diff --git a/executor/common_linux.h b/executor/common_linux.h
index f74effbba..faa35877e 100644
--- a/executor/common_linux.h
+++ b/executor/common_linux.h
@@ -276,16 +276,16 @@ static int tun_frags_enabled;
// sysgen knowns about this constant (maxPids)
#define MAX_PIDS 32
-#define ADDR_MAX_LEN 32
+#define TUN_IFACE "syz_tun"
-#define LOCAL_MAC "aa:aa:aa:aa:%02hx:aa"
-#define REMOTE_MAC "aa:aa:aa:aa:%02hx:bb"
+#define LOCAL_MAC "aa:aa:aa:aa:aa:aa"
+#define REMOTE_MAC "aa:aa:aa:aa:aa:bb"
-#define LOCAL_IPV4 "172.20.%d.170"
-#define REMOTE_IPV4 "172.20.%d.187"
+#define LOCAL_IPV4 "172.20.20.170"
+#define REMOTE_IPV4 "172.20.20.187"
-#define LOCAL_IPV6 "fe80::%02hx:aa"
-#define REMOTE_IPV6 "fe80::%02hx:bb"
+#define LOCAL_IPV6 "fe80::aa"
+#define REMOTE_IPV6 "fe80::bb"
#ifndef IFF_NAPI
#define IFF_NAPI 0x0010
@@ -317,12 +317,9 @@ static void initialize_tun(int id)
close(tunfd);
tunfd = kTunFd;
- char iface[IFNAMSIZ];
- snprintf_check(iface, sizeof(iface), "syz%d", id);
-
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, iface, IFNAMSIZ);
+ strncpy(ifr.ifr_name, TUN_IFACE, IFNAMSIZ);
ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_NAPI | IFF_NAPI_FRAGS;
if (ioctl(tunfd, TUNSETIFF, (void*)&ifr) < 0) {
// IFF_NAPI_FRAGS requires root, so try without it.
@@ -337,42 +334,27 @@ static void initialize_tun(int id)
tun_frags_enabled = (ifr.ifr_flags & IFF_NAPI_FRAGS) != 0;
debug("tun_frags_enabled=%d\n", tun_frags_enabled);
- char local_mac[ADDR_MAX_LEN];
- snprintf_check(local_mac, sizeof(local_mac), LOCAL_MAC, id);
- char remote_mac[ADDR_MAX_LEN];
- snprintf_check(remote_mac, sizeof(remote_mac), REMOTE_MAC, id);
-
- char local_ipv4[ADDR_MAX_LEN];
- snprintf_check(local_ipv4, sizeof(local_ipv4), LOCAL_IPV4, id);
- char remote_ipv4[ADDR_MAX_LEN];
- snprintf_check(remote_ipv4, sizeof(remote_ipv4), REMOTE_IPV4, id);
-
- char local_ipv6[ADDR_MAX_LEN];
- snprintf_check(local_ipv6, sizeof(local_ipv6), LOCAL_IPV6, id);
- char remote_ipv6[ADDR_MAX_LEN];
- snprintf_check(remote_ipv6, sizeof(remote_ipv6), REMOTE_IPV6, id);
-
// Disable IPv6 DAD, otherwise the address remains unusable until DAD completes.
- execute_command(1, "sysctl -w net.ipv6.conf.%s.accept_dad=0", iface);
+ execute_command(1, "sysctl -w net.ipv6.conf.%s.accept_dad=0", TUN_IFACE);
// Disable IPv6 router solicitation to prevent IPv6 spam.
- execute_command(1, "sysctl -w net.ipv6.conf.%s.router_solicitations=0", iface);
+ execute_command(1, "sysctl -w net.ipv6.conf.%s.router_solicitations=0", TUN_IFACE);
// There seems to be no way to disable IPv6 MTD to prevent more IPv6 spam.
- execute_command(1, "ip link set dev %s address %s", iface, local_mac);
- execute_command(1, "ip addr add %s/24 dev %s", local_ipv4, iface);
- execute_command(1, "ip -6 addr add %s/120 dev %s", local_ipv6, iface);
+ execute_command(1, "ip link set dev %s address %s", TUN_IFACE, LOCAL_MAC);
+ execute_command(1, "ip addr add %s/24 dev %s", LOCAL_IPV4, TUN_IFACE);
+ execute_command(1, "ip -6 addr add %s/120 dev %s", LOCAL_IPV6, TUN_IFACE);
execute_command(1, "ip neigh add %s lladdr %s dev %s nud permanent",
- remote_ipv4, remote_mac, iface);
+ REMOTE_IPV4, REMOTE_MAC, TUN_IFACE);
execute_command(1, "ip -6 neigh add %s lladdr %s dev %s nud permanent",
- remote_ipv6, remote_mac, iface);
- execute_command(1, "ip link set dev %s up", iface);
+ REMOTE_IPV6, REMOTE_MAC, TUN_IFACE);
+ execute_command(1, "ip link set dev %s up", TUN_IFACE);
}
// Addresses are chosen to be in the same subnet as tun addresses.
-#define DEV_IPV4 "172.20.%d.%d"
-#define DEV_IPV6 "fe80::%02hx:%02hx"
-#define DEV_MAC "aa:aa:aa:aa:%02hx:%02hx"
+#define DEV_IPV4 "172.20.20.%d"
+#define DEV_IPV6 "fe80::%02hx"
+#define DEV_MAC "aa:aa:aa:aa:aa:%02hx"
// We test in a separate namespace, which does not have any network devices initially (even lo).
// Create/up as many as we can.
@@ -389,15 +371,15 @@ static void initialize_netdevices(int id)
execute_command(0, "ip link add dev %s0 type %s", devtypes[i], devtypes[i]);
execute_command(0, "ip link add dev veth1 type veth");
for (i = 0; i < sizeof(devnames) / (sizeof(devnames[0])); i++) {
- char addr[ADDR_MAX_LEN];
+ char addr[32];
// Assign some unique address to devices. Some devices won't up without this.
// Devices that don't need these addresses will simply ignore them.
// Shift addresses by 10 because 0 subnet address can mean special things.
- snprintf_check(addr, sizeof(addr), DEV_IPV4, id, id + 10);
+ snprintf_check(addr, sizeof(addr), DEV_IPV4, i + 10);
execute_command(0, "ip -4 addr add %s/24 dev %s", addr, devnames[i]);
- snprintf_check(addr, sizeof(addr), DEV_IPV6, id, id + 10);
+ snprintf_check(addr, sizeof(addr), DEV_IPV6, i + 10);
execute_command(0, "ip -6 addr add %s/120 dev %s", addr, devnames[i]);
- snprintf_check(addr, sizeof(addr), DEV_MAC, id, id + 10);
+ snprintf_check(addr, sizeof(addr), DEV_MAC, i + 10);
execute_command(0, "ip link set dev %s address %s", devnames[i], addr);
execute_command(0, "ip link set dev %s up", devnames[i]);
}