mirror of
https://github.com/soypat/lneto.git
synced 2026-08-15 12:23:44 +00:00
Merge pull request #11 from ddirect/local-arp-tcp-fixes
local-arp-tcp branch fixes
This commit is contained in:
+2
-2
@@ -51,7 +51,7 @@ func (h *Handler) Reset(cfg HandlerConfig) error {
|
||||
return errors.New("invalid Handler query or pending config")
|
||||
}
|
||||
*h = Handler{
|
||||
connID: h.connID + 1,
|
||||
connID: h.connID,
|
||||
ourHWAddr: h.ourHWAddr[:0],
|
||||
ourProtoAddr: h.ourProtoAddr[:0],
|
||||
htype: cfg.HardwareType,
|
||||
@@ -263,7 +263,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)
|
||||
}
|
||||
}
|
||||
|
||||
+14
-4
@@ -246,7 +246,7 @@ func (conn *Conn) checkPipeOpen() error {
|
||||
if conn.abortErr != nil {
|
||||
return conn.abortErr
|
||||
}
|
||||
state := conn.State()
|
||||
state := conn.h.State()
|
||||
if state.IsClosed() {
|
||||
return net.ErrClosed
|
||||
}
|
||||
@@ -332,11 +332,11 @@ func (conn *Conn) reset(h Handler) {
|
||||
func (conn *Conn) SetDeadline(t time.Time) error {
|
||||
conn.mu.Lock()
|
||||
defer conn.mu.Unlock()
|
||||
err := conn.SetReadDeadline(t)
|
||||
err := conn.setReadDeadline(t)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return conn.SetWriteDeadline(t)
|
||||
return conn.setWriteDeadline(t)
|
||||
}
|
||||
|
||||
// SetReadDeadline sets the deadline for future Read calls
|
||||
@@ -344,7 +344,11 @@ func (conn *Conn) SetDeadline(t time.Time) error {
|
||||
func (conn *Conn) SetReadDeadline(t time.Time) error {
|
||||
conn.mu.Lock()
|
||||
defer conn.mu.Unlock()
|
||||
conn.trace("TCPConn.SetReadDeadline:start")
|
||||
return conn.setReadDeadline(t)
|
||||
}
|
||||
|
||||
func (conn *Conn) setReadDeadline(t time.Time) error {
|
||||
conn.trace("TCPConn.setReadDeadline:start")
|
||||
err := conn.checkPipeOpen()
|
||||
if err == nil {
|
||||
conn.rdead = t
|
||||
@@ -358,6 +362,12 @@ func (conn *Conn) SetReadDeadline(t time.Time) error {
|
||||
// some of the data was successfully written.
|
||||
// A zero value for t means Write will not time out.
|
||||
func (conn *Conn) SetWriteDeadline(t time.Time) error {
|
||||
conn.mu.Lock()
|
||||
defer conn.mu.Unlock()
|
||||
return conn.setWriteDeadline(t)
|
||||
}
|
||||
|
||||
func (conn *Conn) setWriteDeadline(t time.Time) error {
|
||||
conn.trace("TCPConn.SetWriteDeadline:start")
|
||||
err := conn.checkPipeOpen()
|
||||
if err == nil {
|
||||
|
||||
@@ -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
|
||||
@@ -260,7 +260,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
|
||||
@@ -275,7 +275,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
|
||||
|
||||
Reference in New Issue
Block a user