diff options
Diffstat (limited to 'src/picoTCP.cpp')
| -rw-r--r-- | src/picoTCP.cpp | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/src/picoTCP.cpp b/src/picoTCP.cpp index e0295a0..66d9a76 100644 --- a/src/picoTCP.cpp +++ b/src/picoTCP.cpp @@ -81,48 +81,47 @@ namespace ZeroTier { std::sort(tap->_ips.begin(),tap->_ips.end()); if(ip.isV4()) { + tap->picodev = new struct pico_device; struct pico_ip4 ipaddr, netmask; ipaddr.addr = *((uint32_t *)ip.rawIpData()); netmask.addr = *((uint32_t *)ip.netmask().rawIpData()); + tap->picodev->send = pico_eth_send; // tx + tap->picodev->poll = pico_eth_poll; // rx + tap->picodev->mtu = tap->_mtu; + tap->picodev->tap = tap; uint8_t mac[PICO_SIZE_ETH]; tap->_mac.copyTo(mac, PICO_SIZE_ETH); - // DEBUG_ATTN("mac = %s", tap->_mac.toString().c_str()); - tap->picodev.send = pico_eth_send; // tx - tap->picodev.poll = pico_eth_poll; // rx - DEBUG_INFO("tap->picodev.poll = %p", tap->picodev.poll); - tap->picodev.mtu = tap->_mtu; - tap->picodev.tap = tap; - if(pico_device_init(&(tap->picodev), "p4", mac) != 0) { + if(pico_device_init(tap->picodev, "p4", mac) != 0) { DEBUG_ERROR("dev init failed"); + delete tap->picodev; return false; } - pico_ipv4_link_add(&(tap->picodev), ipaddr, netmask); + pico_ipv4_link_add(tap->picodev, ipaddr, netmask); DEBUG_INFO("addr = %s", ip.toString().c_str()); return true; } if(ip.isV6()) { - struct pico_ip6 ipaddr, netmask; char ipv6_str[INET6_ADDRSTRLEN], nm_str[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, ip.rawIpData(), ipv6_str, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, ip.netmask().rawIpData(), nm_str, INET6_ADDRSTRLEN); - DEBUG_ERROR("ipv6_str = %s", ipv6_str); - DEBUG_ERROR("nm_str = %s", nm_str); + + tap->picodev6 = new struct pico_device; + struct pico_ip6 ipaddr, netmask; pico_string_to_ipv6(ipv6_str, ipaddr.addr); pico_string_to_ipv6(nm_str, netmask.addr); - pico_ipv6_link_add(&(tap->picodev6), ipaddr, netmask); - tap->picodev6.send = pico_eth_send; // tx - tap->picodev6.poll = pico_eth_poll; // rx - tap->picodev6.tap = tap; + tap->picodev6->send = pico_eth_send; // tx + tap->picodev6->poll = pico_eth_poll; // rx + tap->picodev6->mtu = tap->_mtu; + tap->picodev6->tap = tap; uint8_t mac[PICO_SIZE_ETH]; tap->_mac.copyTo(mac, PICO_SIZE_ETH); - //mac[3]=9; - //mac[0]='b'; - // DEBUG_ATTN("mac = %s", tap->_mac.toString().c_str()); - if(pico_device_init(&(tap->picodev6), "p6", mac) != 0) { + if(pico_device_init(tap->picodev6, "p6", mac) != 0) { DEBUG_ERROR("dev init failed"); + delete tap->picodev6; return false; } + pico_ipv6_link_add(tap->picodev6, ipaddr, netmask); DEBUG_INFO("addr6 = %s", ip.toString().c_str()); return true; } |
