mirror of
https://github.com/soypat/lneto.git
synced 2026-09-07 15:29:05 +00:00
+13
-7
@@ -358,14 +358,20 @@ func (s *StackAsync) DialTCP(conn *tcp.Conn, localPort uint16, addrp netip.AddrP
|
||||
defer s.mu.Unlock()
|
||||
var mac []byte
|
||||
if s.subnet.Contains(addrp.Addr()) {
|
||||
mac = make([]byte, 6)
|
||||
ip := addrp.Addr().As4()
|
||||
// StartQuery starts an ARP query for addresses in this network.
|
||||
// On finishing query MAC is set and thus the StackPort will allow encapsulating
|
||||
// data on that connection.
|
||||
err = s.arp.StartQuery(mac, ip[:])
|
||||
if err != nil {
|
||||
return err
|
||||
hw, err := s.arp.QueryResult(ip[:])
|
||||
mac = make([]byte, 6)
|
||||
if err == nil {
|
||||
// Query exists, use pre-existing result.
|
||||
copy(mac, hw)
|
||||
} else {
|
||||
// StartQuery starts an ARP query for addresses in this network.
|
||||
// On finishing query MAC is set and thus the StackPort will allow encapsulating
|
||||
// data on that connection.
|
||||
err = s.arp.StartQuery(mac, ip[:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
err = conn.OpenActive(localPort, addrp, tcp.Value(s.prand32()))
|
||||
|
||||
+2
-3
@@ -587,9 +587,8 @@ func (tst *tester) ARPExchangeOnly(querying, target *StackAsync) {
|
||||
// === PHASE 3: Verify querying stack learned target's MAC ===
|
||||
resolvedHw, err := querying.ResultResolveHardwareAddress6(tgtIP)
|
||||
if err != nil {
|
||||
t.Fatalf("ARP query result failed: %v", err)
|
||||
}
|
||||
if resolvedHw != tgtHw {
|
||||
t.Errorf("ARP query result failed: %v", err)
|
||||
} else if resolvedHw != tgtHw {
|
||||
t.Errorf("ARP resolved wrong MAC: got %x, want %x", resolvedHw, tgtHw)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user