Add udp.PacketConn (#112)

* update README table and begin planning udp.PacketConn

* first attempt at packetconn implementation

* add udp.PacketConn to StackAsync and implement SocketNetip iface

* add tests for PacketConn
This commit is contained in:
Pat Whittingslow
2026-05-14 12:48:07 -03:00
committed by GitHub
parent b95eb03aa5
commit 9fcb7e9b52
6 changed files with 647 additions and 17 deletions
+8 -8
View File
@@ -34,10 +34,8 @@ type StackAsync struct {
link internet.StackEthernet
ip4 internet.StackIPv4
// ip6 internet.StackIPv6
arp arp.Handler
icmp icmpv4.Client
// icmp6 icmpv6.Client
arp arp.Handler
icmp icmpv4.Client
icmp6buf []byte
udps internet.StackPortsMACFiltered
tcps internet.StackPortsMACFiltered
@@ -496,10 +494,6 @@ func (s *StackAsync) RegisterListener(listener *tcp.Listener) (err error) {
// Can try changing listener to inspect carrierData on demux and get the IPversion to know which tcp.Conns match the IP version.
s.mu.Lock()
defer s.mu.Unlock()
lport := listener.LocalPort()
if lport == 0 {
return lneto.ErrZeroSource
}
return s.tcps.RegisterMACFiltered(listener, nil)
}
@@ -518,6 +512,12 @@ func (s *StackAsync) RegisterUDP4(node lneto.StackNode, remoteAddr []byte, remot
return s.udps.RegisterMACFiltered(&s.userUDPs[idx], nil)
}
func (s *StackAsync) RegisterListenerUDP(pktconn *udp.PacketConn) (err error) {
s.mu.Lock()
defer s.mu.Unlock()
return s.udps.RegisterMACFiltered(pktconn, nil)
}
var errNoDNSServer = errors.New("no DNS server- did DHCP complete? You can set a predetermined DNS server in Stack configuration")
func (s *StackAsync) StartLookupIP(host string) error {