do not increment ARP connectionID on IP addr update

This commit is contained in:
Patricio Whittingslow
2025-12-28 15:42:10 -03:00
parent a2886423a2
commit 890fd33b22
2 changed files with 12 additions and 7 deletions
+8
View File
@@ -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 {
+4 -7
View File
@@ -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
}