Skip to content

Commit b181a61

Browse files
committed
Merge branch 'dev' of https://github.com/SagerNet/sing-tun into meta
2 parents d78d1d3 + b6d3230 commit b181a61

File tree

3 files changed

+5
-51
lines changed

3 files changed

+5
-51
lines changed

stack_gvisor.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"context"
77
"net/netip"
88
"time"
9-
"unsafe"
109

1110
"github.com/sagernet/sing/common/bufio"
1211
"github.com/sagernet/sing/common/canceler"
@@ -130,7 +129,7 @@ func (t *GVisor) Start() error {
130129
endpoint.Abort()
131130
return
132131
}
133-
gConn := &gUDPConn{UDPConn: udpConn, stack: ipStack, packet: (*gRequest)(unsafe.Pointer(request)).pkt.IncRef()}
132+
gConn := &gUDPConn{UDPConn: udpConn}
134133
go func() {
135134
var metadata M.Metadata
136135
metadata.Source = M.SocksaddrFromNet(lAddr)

stack_gvisor_udp.go

+3-47
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@ type UDPForwarder struct {
3131
udpNat *udpnat.Service[netip.AddrPort]
3232

3333
// cache
34-
cacheProto tcpip.NetworkProtocolNumber
35-
cacheID stack.TransportEndpointID
36-
cachePacket stack.PacketBufferPtr
34+
cacheProto tcpip.NetworkProtocolNumber
35+
cacheID stack.TransportEndpointID
3736
}
3837

3938
func NewUDPForwarder(ctx context.Context, stack *stack.Stack, handler Handler, udpTimeout int64) *UDPForwarder {
@@ -59,7 +58,6 @@ func (f *UDPForwarder) HandlePacket(id stack.TransportEndpointID, pkt stack.Pack
5958
sBuffer.Write(view.AsSlice())
6059
})
6160
f.cacheID = id
62-
f.cachePacket = pkt
6361
f.udpNat.NewPacket(
6462
f.ctx,
6563
upstreamMetadata.Source.AddrPort(),
@@ -76,7 +74,6 @@ func (f *UDPForwarder) newUDPConn(natConn N.PacketConn) N.PacketWriter {
7674
source: f.cacheID.RemoteAddress,
7775
sourcePort: f.cacheID.RemotePort,
7876
sourceNetwork: f.cacheProto,
79-
packet: f.cachePacket.IncRef(),
8077
}
8178
}
8279

@@ -89,17 +86,6 @@ type UDPBackWriter struct {
8986
packet stack.PacketBufferPtr
9087
}
9188

92-
func (w *UDPBackWriter) Close() error {
93-
w.access.Lock()
94-
defer w.access.Unlock()
95-
if w.packet == nil {
96-
return os.ErrClosed
97-
}
98-
w.packet.DecRef()
99-
w.packet = nil
100-
return nil
101-
}
102-
10389
func (w *UDPBackWriter) WritePacket(packetBuffer *buf.Buffer, destination M.Socksaddr) error {
10490
if !destination.IsIP() {
10591
return E.Cause(os.ErrInvalid, "invalid destination")
@@ -164,16 +150,6 @@ func (w *UDPBackWriter) WritePacket(packetBuffer *buf.Buffer, destination M.Sock
164150
return nil
165151
}
166152

167-
func (w *UDPBackWriter) HandshakeFailure(err error) error {
168-
if w.packet == nil {
169-
return os.ErrClosed
170-
}
171-
err = gWriteUnreachable(w.stack, w.packet, err)
172-
w.packet.DecRef()
173-
w.packet = nil
174-
return err
175-
}
176-
177153
type gRequest struct {
178154
stack *stack.Stack
179155
id stack.TransportEndpointID
@@ -182,9 +158,6 @@ type gRequest struct {
182158

183159
type gUDPConn struct {
184160
*gonet.UDPConn
185-
access sync.Mutex
186-
stack *stack.Stack
187-
packet stack.PacketBufferPtr
188161
}
189162

190163
func (c *gUDPConn) Read(b []byte) (n int, err error) {
@@ -206,27 +179,10 @@ func (c *gUDPConn) Write(b []byte) (n int, err error) {
206179
}
207180

208181
func (c *gUDPConn) Close() error {
209-
c.access.Lock()
210-
defer c.access.Unlock()
211-
if c.packet == nil {
212-
return os.ErrClosed
213-
}
214-
c.packet.DecRef()
215-
c.packet = nil
216182
return c.UDPConn.Close()
217183
}
218184

219-
func (c *gUDPConn) HandshakeFailure(err error) error {
220-
if c.packet == nil {
221-
return os.ErrClosed
222-
}
223-
err = gWriteUnreachable(c.stack, c.packet, err)
224-
c.packet.DecRef()
225-
c.packet = nil
226-
return err
227-
}
228-
229-
func gWriteUnreachable(gStack *stack.Stack, packet stack.PacketBufferPtr, err error) error {
185+
func gWriteUnreachable(gStack *stack.Stack, packet stack.PacketBufferPtr, err error) (retErr error) {
230186
if errors.Is(err, syscall.ENETUNREACH) {
231187
if packet.NetworkProtocolNumber == header.IPv4ProtocolNumber {
232188
return gWriteUnreachable4(gStack, packet, stack.RejectIPv4WithICMPNetUnreachable)

stack_mixed.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package tun
44

55
import (
66
"time"
7-
"unsafe"
87

98
"github.com/sagernet/sing/common"
109
"github.com/sagernet/sing/common/bufio"
@@ -69,7 +68,7 @@ func (m *Mixed) Start() error {
6968
endpoint.Abort()
7069
return
7170
}
72-
gConn := &gUDPConn{UDPConn: udpConn, stack: ipStack, packet: (*gRequest)(unsafe.Pointer(request)).pkt.IncRef()}
71+
gConn := &gUDPConn{UDPConn: udpConn}
7372
go func() {
7473
var metadata M.Metadata
7574
metadata.Source = M.SocksaddrFromNet(lAddr)

0 commit comments

Comments
 (0)