add lock to tcp.Conn; claude Fix ARP handler not responding after DHCP

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Patricio Whittingslow
2025-11-09 14:16:23 -03:00
parent e3c6d68288
commit 7042a653a6
3 changed files with 85 additions and 14 deletions
+11 -2
View File
@@ -135,11 +135,11 @@ func (s *StackAsync) Reset(cfg StackConfig) error {
}
// Now setup stacks.
err = s.link.Register(&s.ip) // IPv4 | IPv6
err = s.link.Register(&s.arp) // ARP.
if err != nil {
return err
}
err = s.link.Register(&s.arp) // ARP.
err = s.link.Register(&s.ip) // IPv4 | IPv6
if err != nil {
return err
}
@@ -232,6 +232,8 @@ func (s *StackAsync) Gateway6() [6]byte {
}
func (s *StackAsync) DialTCP(conn *tcp.Conn, localPort uint16, addrp netip.AddrPort) (err error) {
s.mu.Lock()
defer s.mu.Unlock()
err = conn.OpenActive(localPort, addrp, tcp.Value(s.Prand32()))
if err != nil {
return err
@@ -245,6 +247,8 @@ func (s *StackAsync) DialTCP(conn *tcp.Conn, localPort uint16, addrp netip.AddrP
}
func (s *StackAsync) ListenTCP(conn *tcp.Conn, localPort uint16) (err error) {
s.mu.Lock()
defer s.mu.Unlock()
err = conn.OpenListen(localPort, tcp.Value(s.Prand32()))
if err != nil {
return err
@@ -436,6 +440,11 @@ func (stack *StackAsync) AssimilateDHCPResults(results *DHCPResults) error {
if err != nil {
return err
}
// Reset ARP handler with new IP address so it can respond to ARP requests.
err = stack.resetARP()
if err != nil {
return err
}
}
if len(results.DNSServers) > 0 {
if !results.DNSServers[0].IsValid() || !results.DNSServers[0].Is4() {