mirror of
https://github.com/soypat/lneto.git
synced 2026-09-10 00:29:34 +00:00
do not increment ARP connectionID on IP addr update
This commit is contained in:
@@ -35,6 +35,14 @@ func (h *Handler) Protocol() uint64 { return uint64(ethernet.TypeARP) }
|
|||||||
|
|
||||||
func (h *Handler) ConnectionID() *uint64 { return &h.connID }
|
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 {
|
func (h *Handler) Reset(cfg HandlerConfig) error {
|
||||||
if len(cfg.HardwareAddr) == 0 || len(cfg.HardwareAddr) > 255 ||
|
if len(cfg.HardwareAddr) == 0 || len(cfg.HardwareAddr) > 255 ||
|
||||||
len(cfg.ProtocolAddr) == 0 || len(cfg.ProtocolAddr) > 255 {
|
len(cfg.ProtocolAddr) == 0 || len(cfg.ProtocolAddr) > 255 {
|
||||||
|
|||||||
@@ -205,7 +205,9 @@ func (s *StackAsync) SetIPAddr(addr netip.Addr) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return s.resetARP()
|
ip := addr.As4()
|
||||||
|
err = s.arp.UpdateProtoAddr(ip[:])
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StackAsync) Addr() netip.Addr {
|
func (s *StackAsync) Addr() netip.Addr {
|
||||||
@@ -456,12 +458,7 @@ func (stack *StackAsync) AssimilateDHCPResults(results *DHCPResults) error {
|
|||||||
stack.mu.Lock()
|
stack.mu.Lock()
|
||||||
defer stack.mu.Unlock()
|
defer stack.mu.Unlock()
|
||||||
if results.AssignedAddr.IsValid() {
|
if results.AssignedAddr.IsValid() {
|
||||||
err := stack.ip.SetAddr(results.AssignedAddr)
|
err := stack.SetIPAddr(results.AssignedAddr)
|
||||||
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user