diff --git a/src/lwIP.cpp b/src/lwIP.cpp index c76355e..7b33212 100644 --- a/src/lwIP.cpp +++ b/src/lwIP.cpp @@ -78,8 +78,8 @@ bool virt_can_provision_new_socket(int socket_type); #include "lwIP.h" // lwIP netif interfaces used by virtual taps -struct netif lwip_interfaces[10]; -static int num_lwip_interfaces = 0; +struct netif lwipInterfaces[10]; +static int lwipInterfacesCount = 0; bool lwip_driver_initialized = false; ZeroTier::Mutex driver_m; @@ -201,10 +201,9 @@ void lwip_init_interface(void *tapref, const ZeroTier::MAC &mac, const ZeroTier: { char ipbuf[INET6_ADDRSTRLEN], nmbuf[INET6_ADDRSTRLEN]; char macbuf[ZT_MAC_ADDRSTRLEN]; - - DEBUG_INFO("num_lwip_interfaces=%d", num_lwip_interfaces); - struct netif *lwipdev = &lwip_interfaces[num_lwip_interfaces]; - DEBUG_INFO("lwipdev=%p", lwipdev); + DEBUG_EXTRA("lwipInterfacesCount=%d", lwipInterfacesCount); + struct netif *lwipdev = &lwipInterfaces[lwipInterfacesCount]; + DEBUG_EXTRA("netif=%p", lwipdev); if (ip.isV4()) { static ip4_addr_t ipaddr, netmask, gw; @@ -216,7 +215,7 @@ void lwip_init_interface(void *tapref, const ZeroTier::MAC &mac, const ZeroTier: lwipdev->output = etharp_output; lwipdev->mtu = ZT_MAX_MTU; lwipdev->name[0] = 'l'; - lwipdev->name[1] = (char)('A' + num_lwip_interfaces); //'4'; + lwipdev->name[1] = (char)lwipInterfacesCount; lwipdev->linkoutput = lwip_eth_tx; lwipdev->hwaddr_len = 6; mac.copyTo(lwipdev->hwaddr, lwipdev->hwaddr_len); @@ -231,24 +230,21 @@ void lwip_init_interface(void *tapref, const ZeroTier::MAC &mac, const ZeroTier: netif_set_up(lwipdev); mac2str(macbuf, ZT_MAC_ADDRSTRLEN, lwipdev->hwaddr); DEBUG_INFO("initialized netif as [mac=%s, addr=%s, nm=%s]", macbuf, ip.toString(ipbuf), ip.netmask().toString(nmbuf)); - num_lwip_interfaces++; + lwipInterfacesCount++; } if (ip.isV6()) { static ip6_addr_t ipaddr; memcpy(&(ipaddr.addr), ip.rawIpData(), sizeof(ipaddr.addr)); - lwipdev->mtu = ZT_MAX_MTU; lwipdev->name[0] = 'l'; - lwipdev->name[1] = '6'; + lwipdev->name[1] = (char)lwipInterfacesCount; lwipdev->hwaddr_len = 6; lwipdev->linkoutput = lwip_eth_tx; lwipdev->ip6_autoconfig_enabled = 1; - mac.copyTo(lwipdev->hwaddr, lwipdev->hwaddr_len); netif_add(lwipdev, NULL, NULL, NULL, NULL, tapif_init, ethernet_input); lwipdev->output_ip6 = ethip6_output; lwipdev->state = tapref; - netif_create_ip6_linklocal_address(lwipdev, 1); s8_t idx = 1; netif_add_ip6_address(lwipdev, &ipaddr, &idx); @@ -259,7 +255,7 @@ void lwip_init_interface(void *tapref, const ZeroTier::MAC &mac, const ZeroTier: mac2str(macbuf, ZT_MAC_ADDRSTRLEN, lwipdev->hwaddr); DEBUG_INFO("initialized netif as [mac=%s, addr=%s]", macbuf, ip.toString(ipbuf)); } - num_lwip_interfaces++; + lwipInterfacesCount++; } void lwip_eth_rx(VirtualTap *tap, const ZeroTier::MAC &from, const ZeroTier::MAC &to, unsigned int etherType, @@ -306,8 +302,7 @@ void lwip_eth_rx(VirtualTap *tap, const ZeroTier::MAC &from, const ZeroTier::MAC return; } - - if (num_lwip_interfaces <= 0) { + if (lwipInterfacesCount <= 0) { DEBUG_ERROR("there are no netifs set up to handle this packet. ignoring."); return; } @@ -317,46 +312,37 @@ void lwip_eth_rx(VirtualTap *tap, const ZeroTier::MAC &from, const ZeroTier::MAC ip_addr_t iphdr_dest; switch (((struct eth_hdr *)p->payload)->type) { - case PP_HTONS(ETHTYPE_IPV6): - { - DEBUG_INFO("ETHTYPE_IPV6"); + case PP_HTONS(ETHTYPE_IPV6): { iphdr = (struct ip_hdr *)((char *)p->payload + SIZEOF_ETH_HDR); - for (int i=0; ipayload + SIZEOF_ETH_HDR); - for (int i=0; idest.addr || ip4_addr_isbroadcast_u32(iphdr->dest.addr, &lwip_interfaces[i])) { - if (lwip_interfaces[i].input(p, &lwip_interfaces[i]) != ERR_OK) { - DEBUG_ERROR("packet input error (ipv4)"); + for (int i=0; idest.addr || ip4_addr_isbroadcast_u32(iphdr->dest.addr, &lwipInterfaces[i])) { + if (lwipInterfaces[i].input(p, &lwipInterfaces[i]) != ERR_OK) { + DEBUG_ERROR("packet input error (ipv4, p=%p, netif=%p)", p, &lwipInterfaces[i]); break; } } } } } break; - case PP_HTONS(ETHTYPE_ARP): - { - DEBUG_INFO("ETHTYPE_ARP"); - for (int i=0; i