diff --git a/arp/handler.go b/arp/handler.go index 4ba5a86..45748bf 100644 --- a/arp/handler.go +++ b/arp/handler.go @@ -255,7 +255,7 @@ func (h *Handler) Demux(ethFrame []byte, frameOffset int) error { } func trySetEthernetDst(ethFrame []byte, dst []byte) { - if len(ethFrame) > 14 { + if len(ethFrame) >= 14 { copy(ethFrame[:6], dst) } } diff --git a/x/xnet/stack-async.go b/x/xnet/stack-async.go index 9a3c5b6..6be8eaa 100644 --- a/x/xnet/stack-async.go +++ b/x/xnet/stack-async.go @@ -28,7 +28,7 @@ type StackAsync struct { ip internet.StackIP arp arp.Handler udps internet.StackPorts - tcps internet.StackPorts + tcps internet.StackPortsMACFiltered dhcpUDP internet.StackUDPPort dhcp dhcpv4.Client @@ -250,7 +250,7 @@ func (s *StackAsync) DialTCP(conn *tcp.Conn, localPort uint16, addrp netip.AddrP if err != nil { return err } - err = s.tcps.Register(conn) // MAC is set later on by ARP response arriving to our network. + err = s.tcps.Register(conn, mac) // MAC is set later on by ARP response arriving to our network. if err != nil { conn.Abort() return err @@ -265,7 +265,7 @@ func (s *StackAsync) ListenTCP(conn *tcp.Conn, localPort uint16) (err error) { if err != nil { return err } - err = s.tcps.Register(conn) + err = s.tcps.Register(conn, nil) if err != nil { conn.Abort() return err