diff --git a/common/consts/net.go b/common/consts/net.go new file mode 100644 index 0000000000..43e3c963f3 --- /dev/null +++ b/common/consts/net.go @@ -0,0 +1,5 @@ +package consts + +const ( + EthernetMtu = 1500 +) diff --git a/common/netutils/dns.go b/common/netutils/dns.go index 9b9383841e..5aff98420f 100644 --- a/common/netutils/dns.go +++ b/common/netutils/dns.go @@ -15,6 +15,7 @@ import ( "sync" "time" + "github.com/daeuniverse/dae/common/consts" dnsmessage "github.com/miekg/dns" "github.com/mzz2017/softwind/netproxy" "github.com/mzz2017/softwind/pkg/fastrand" @@ -240,8 +241,8 @@ func resolve(ctx context.Context, d netproxy.Dialer, dns netip.AddrPort, host st }() } go func() { - buf := pool.Get(512) - defer pool.Put(buf) + buf := pool.GetFullCap(consts.EthernetMtu) + defer buf.Put() if magicNetwork.Network == "tcp" { // Read DNS response length _, err := io.ReadFull(c, buf[:2]) @@ -250,7 +251,7 @@ func resolve(ctx context.Context, d netproxy.Dialer, dns netip.AddrPort, host st return } n := binary.BigEndian.Uint16(buf) - if n > 512 { + if int(n) > cap(buf) { ch <- fmt.Errorf("too big dns resp") return } diff --git a/control/control_plane.go b/control/control_plane.go index 8c0857831c..587969ad50 100644 --- a/control/control_plane.go +++ b/control/control_plane.go @@ -705,15 +705,16 @@ func (c *ControlPlane) Serve(readyChan chan<- bool, listener *Listener) (err err } }() go func() { + buf := pool.GetFullCap(consts.EthernetMtu) + var oob [120]byte // Size for original dest + defer buf.Put() for { select { case <-c.ctx.Done(): return default: } - var buf [EthernetMtu]byte - var oob [120]byte // Size for original dest - n, oobn, _, src, err := udpConn.ReadMsgUDPAddrPort(buf[:], oob[:]) + n, oobn, _, src, err := udpConn.ReadMsgUDPAddrPort(buf, oob[:]) if err != nil { if !strings.Contains(err.Error(), "use of closed network connection") { c.log.Errorf("ReadFromUDPAddrPort: %v, %v", src.String(), err) @@ -722,8 +723,8 @@ func (c *ControlPlane) Serve(readyChan chan<- bool, listener *Listener) (err err } newBuf := pool.Get(n) copy(newBuf, buf[:n]) - go func(data []byte, src netip.AddrPort) { - defer pool.Put(data) + go func(data pool.PB, src netip.AddrPort) { + defer data.Put() var realDst netip.AddrPort var routingResult *bpfRoutingResult pktDst := RetrieveOriginalDest(oob[:oobn]) diff --git a/control/dns_control.go b/control/dns_control.go index 849a3948cc..31f7362fa4 100644 --- a/control/dns_control.go +++ b/control/dns_control.go @@ -639,7 +639,7 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte }() // We can block here because we are in a coroutine. - respBuf := pool.Get(512) + respBuf := pool.GetFullCap(consts.EthernetMtu) defer pool.Put(respBuf) for { // Wait for response. diff --git a/control/udp_endpoint.go b/control/udp_endpoint.go index 2e15123201..90452cab27 100644 --- a/control/udp_endpoint.go +++ b/control/udp_endpoint.go @@ -11,15 +11,12 @@ import ( "sync" "time" + "github.com/daeuniverse/dae/common/consts" "github.com/daeuniverse/dae/component/outbound/dialer" "github.com/mzz2017/softwind/netproxy" "github.com/mzz2017/softwind/pool" ) -const ( - EthernetMtu = 1500 -) - type UdpHandler func(data []byte, from netip.AddrPort) error type UdpEndpoint struct { @@ -34,8 +31,7 @@ type UdpEndpoint struct { } func (ue *UdpEndpoint) start() { - buf := pool.Get(EthernetMtu) - buf = buf[:cap(buf)] + buf := pool.GetFullCap(consts.EthernetMtu) defer pool.Put(buf) for { n, from, err := ue.conn.ReadFrom(buf[:]) diff --git a/go.mod b/go.mod index 5609a53517..cda013e60f 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/json-iterator/go v1.1.12 github.com/miekg/dns v1.1.55 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 - github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573 + github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4 github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd github.com/safchain/ethtool v0.3.0 github.com/sirupsen/logrus v1.9.3 diff --git a/go.sum b/go.sum index eb4ac0fb3c..bc30b0d67a 100644 --- a/go.sum +++ b/go.sum @@ -91,8 +91,8 @@ github.com/mzz2017/disk-bloom v1.0.1 h1:rEF9MiXd9qMW3ibRpqcerLXULoTgRlM21yqqJl1B github.com/mzz2017/disk-bloom v1.0.1/go.mod h1:JLHETtUu44Z6iBmsqzkOtFlRvXSlKnxjwiBRDapizDI= github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7 h1:9zmZilN02x3byMB2X3x+B4iyKHkucv70WA4hsyZkjo8= github.com/mzz2017/quic-go v0.0.0-20230706143320-cc858d4932b7/go.mod h1:3H6d55CEofIWWr3gQThiB27+hA3WG5tATtPovzEYPAA= -github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573 h1:fDndoUP5FyJKZM0LJ9nqZJhZF9eLhgfG46xwxO4UHww= -github.com/mzz2017/softwind v0.0.0-20230708102709-26ff44839573/go.mod h1:Fz8fgR7/dbnfR6RLpeOMkUDyebq4xShdmjj+cE5jnJ4= +github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4 h1:U6oSJf+dwVXpBZGi73l77igid+sOy4jgJucjSrfowFU= +github.com/mzz2017/softwind v0.0.0-20230710142544-73a557cea4a4/go.mod h1:Fz8fgR7/dbnfR6RLpeOMkUDyebq4xShdmjj+cE5jnJ4= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=