diff --git a/src/VirtualTap.cpp b/src/VirtualTap.cpp index a13dcbd7..357df5b4 100644 --- a/src/VirtualTap.cpp +++ b/src/VirtualTap.cpp @@ -572,7 +572,20 @@ void zts_lwip_init_interface(void* tapref, const InetAddress& ip) LOCK_TCPIP_CORE(); if (isNewNetif) { vtap->netif6 = (void*)n; - netif_add(n, NULL, NULL, NULL, (void*)vtap, zts_netif_init6, ethernet_input); + + // + // was: + // netif_add(n, NULL, NULL, NULL, (void*)vtap, zts_netif_init6, ethernet_input); + // + // but there is this documentation: + // > With NO_SYS=0, this must be set to tcpip_input for all netif types (whether ethernet, PPP, slipif, etc.) + // https://lwip.fandom.com/wiki/Writing_a_device_driver + // + // and also with ethernet_input and lwIP asserts turned on, we get: + // Assertion "Function called without core lock" failed at line 236 in /Users/brenton/development/github/libzt/ext/lwip-contrib/ports/unix/port/sys_arch.c + // + netif_add(n, NULL, NULL, NULL, (void*)vtap, zts_netif_init6, tcpip_input); + n->ip6_autoconfig_enabled = 1; vtap->_mac.copyTo(n->hwaddr, n->hwaddr_len); netif_create_ip6_linklocal_address(n, 1);