Renamed identifiers in lwIP driver

This commit is contained in:
Joseph Henry
2017-11-13 15:42:07 -08:00
parent 4588b5a1df
commit e9ea60b189

View File

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