Merge pull request #252 from zerotier/bugfix/211

Fix #211: Use tcpip_input for IPv6 instead of ethernet_input
This commit is contained in:
Joseph Henry
2023-08-21 14:21:42 -07:00
committed by GitHub

View File

@@ -576,7 +576,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);