vmm: Increase the vmthread stack size
[akaros.git] / user / vmm / nat.c
index 825136b..01116d7 100644 (file)
@@ -334,7 +334,12 @@ static struct ip_nat_map *create_map(uint8_t protocol, uint16_t guest_port,
        snprintf(dialstring, sizeof(dialstring), "%s!*!%s", proto_str, host_port);
 
        bypass_fd = bypass9(dialstring, conv_dir, 0);
-       parlib_assert_perror(bypass_fd >= 0);
+       if (bypass_fd < 0) {
+               fprintf(stderr, "Failed to clone a conv for %s:%d (%r), won't bypass!\n",
+                       proto_str, guest_port);
+               free(map);
+               return NULL;
+       }
 
        port_check = get_port9(conv_dir, "local", &map->host_port);
        parlib_assert_perror(port_check);
@@ -358,6 +363,8 @@ static struct ip_nat_map *get_map_by_tuple(uint8_t protocol,
        if (map)
                return map;
        map = create_map(protocol, guest_port, "*", FALSE);
+       if (!map)
+               return NULL;
        kref_get(&map->kref, 1);
        add_map(map);
        return map;
@@ -542,20 +549,32 @@ static void get_host_ip_addrs(void)
        register_printf_specifier('M', printf_ipmask, printf_ipmask_info);
 
        lifc = get_first_noloop_iplifc(NULL, &to_free);
-       parlib_assert_perror(lifc);
+       if (!lifc) {
+               fprintf(stderr, "IP addr lookup failed (%r), no VM networking\n");
+               return;
+       }
        snprintf(my_ip_str, sizeof(my_ip_str), "%i", lifc->ip);
        snprintf(buf, sizeof(buf), "%i%M", lifc->ip, lifc->mask);
        v4parsecidr(host_v4_addr, host_v4_mask, buf);
        free_ipifc(to_free);
 
        ret = my_router_addr(router_ip, NULL);
-       parlib_assert_perror(!ret);
+       if (ret) {
+               fprintf(stderr, "Router lookup failed (%r), no VM networking\n");
+               return;
+       }
        v6tov4(host_v4_router, router_ip);
 
        ndb = ndbopen("/net/ndb");
-       parlib_assert_perror(ndb);
+       if (!ndb) {
+               fprintf(stderr, "NDB open failed (%r), no VM networking\n");
+               return;
+       }
        nt = ndbipinfo(ndb, "ip", my_ip_str, &dns, 1);
-       assert(nt);
+       if (!nt) {
+               fprintf(stderr, "DNS server lookup failed (%r), no VM networking\n");
+               return;
+       }
        v4parseip(host_v4_dns, nt->val);
        ndbfree(nt);
        ndbclose(ndb);
@@ -674,6 +693,10 @@ void vnet_port_forward(char *protocol, char *host_port, char *guest_port)
                return;
        }
        map = create_map(proto_nr, atoi(guest_port), host_port, TRUE);
+       if (!map) {
+               fprintf(stderr, "Failed to set up port forward!");
+               exit(-1);
+       }
        add_map(map);
 }
 
@@ -1063,6 +1086,8 @@ static struct ip_nat_map *handle_udp_tx(struct iovec *iov, int iovcnt,
                return NULL;
        }
        map = get_map_by_tuple(IP_UDPPROTO, src_port);
+       if (!map)
+               return NULL;
        xsum_changed_port(iov, iovcnt, udp_off + UDP_OFF_XSUM, src_port,
                          map->host_port);
        iov_put_be16(iov, iovcnt, udp_off + UDP_OFF_SRC_PORT, map->host_port);
@@ -1082,6 +1107,8 @@ static struct ip_nat_map *handle_tcp_tx(struct iovec *iov, int iovcnt,
        src_port = iov_get_be16(iov, iovcnt, tcp_off + TCP_OFF_SRC_PORT);
        dst_port = iov_get_be16(iov, iovcnt, tcp_off + TCP_OFF_DST_PORT);
        map = get_map_by_tuple(IP_TCPPROTO, src_port);
+       if (!map)
+               return NULL;
        xsum_changed_port(iov, iovcnt, tcp_off + TCP_OFF_XSUM, src_port,
                          map->host_port);
        iov_put_be16(iov, iovcnt, tcp_off + TCP_OFF_SRC_PORT, map->host_port);