diff options
Diffstat (limited to 'executor/common_linux.h')
| -rw-r--r-- | executor/common_linux.h | 64 |
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]); } |
