From 890fd33b22b98c80b3da9c4140b689dae8c3a60c Mon Sep 17 00:00:00 2001 From: Patricio Whittingslow Date: Sun, 28 Dec 2025 15:42:10 -0300 Subject: [PATCH] do not increment ARP connectionID on IP addr update --- arp/handler.go | 8 ++++++++ x/xnet/stack-async.go | 11 ++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/arp/handler.go b/arp/handler.go index 4796735..adaae36 100644 --- a/arp/handler.go +++ b/arp/handler.go @@ -35,6 +35,14 @@ func (h *Handler) Protocol() uint64 { return uint64(ethernet.TypeARP) } func (h *Handler) ConnectionID() *uint64 { return &h.connID } +func (h *Handler) UpdateProtoAddr(protoAddr []byte) error { + if len(protoAddr) != len(h.ourProtoAddr) { + return errors.New("mismatch ARP proto size") + } + copy(h.ourProtoAddr, protoAddr) + return nil +} + func (h *Handler) Reset(cfg HandlerConfig) error { if len(cfg.HardwareAddr) == 0 || len(cfg.HardwareAddr) > 255 || len(cfg.ProtocolAddr) == 0 || len(cfg.ProtocolAddr) > 255 { diff --git a/x/xnet/stack-async.go b/x/xnet/stack-async.go index 016d883..6e89363 100644 --- a/x/xnet/stack-async.go +++ b/x/xnet/stack-async.go @@ -205,7 +205,9 @@ func (s *StackAsync) SetIPAddr(addr netip.Addr) error { if err != nil { return err } - return s.resetARP() + ip := addr.As4() + err = s.arp.UpdateProtoAddr(ip[:]) + return err } func (s *StackAsync) Addr() netip.Addr { @@ -456,12 +458,7 @@ func (stack *StackAsync) AssimilateDHCPResults(results *DHCPResults) error { stack.mu.Lock() defer stack.mu.Unlock() if results.AssignedAddr.IsValid() { - err := stack.ip.SetAddr(results.AssignedAddr) - if err != nil { - return err - } - // Reset ARP handler with new IP address so it can respond to ARP requests. - err = stack.resetARP() + err := stack.SetIPAddr(results.AssignedAddr) if err != nil { return err }