summaryrefslogtreecommitdiff
path: root/src/picoTCP.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/picoTCP.cpp')
-rw-r--r--src/picoTCP.cpp37
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;
}