mirror of
				https://github.com/SagerNet/sing-tun.git
				synced 2025-11-01 04:12:50 +08:00 
			
		
		
		
	Update gVisor to 20220801.0
This commit is contained in:
		
							
								
								
									
										6
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.mod
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ go 1.18 | |||||||
| require ( | require ( | ||||||
| 	github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805 | 	github.com/sagernet/netlink v0.0.0-20220803045538-bdac49abf805 | ||||||
| 	github.com/sagernet/sing v0.0.0-20220801112236-1bb95f9661fc | 	github.com/sagernet/sing v0.0.0-20220801112236-1bb95f9661fc | ||||||
| 	golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b | 	golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 | ||||||
| 	golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 | 	golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 | ||||||
| 	gvisor.dev/gvisor v0.0.0-20220711011657-cecae2f4234d | 	gvisor.dev/gvisor v0.0.0-20220801010827-addd1f7b3e97 | ||||||
| ) | ) | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								go.sum
									
									
									
									
									
								
							| @@ -6,12 +6,12 @@ github.com/sagernet/sing v0.0.0-20220801112236-1bb95f9661fc h1:x7H64IiqyrpxPWl/K | |||||||
| github.com/sagernet/sing v0.0.0-20220801112236-1bb95f9661fc/go.mod h1:GbtQfZSpmtD3cXeD1qX2LCMwY8dH+bnnInDTqd92IsM= | github.com/sagernet/sing v0.0.0-20220801112236-1bb95f9661fc/go.mod h1:GbtQfZSpmtD3cXeD1qX2LCMwY8dH+bnnInDTqd92IsM= | ||||||
| github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= | github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 h1:gga7acRE695APm9hlsSMoOoE65U4/TcqNj90mc69Rlg= | ||||||
| github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= | github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= | ||||||
| golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b h1:3ogNYyK4oIQdIKzTu68hQrr4iuVxF3AxKl9Aj/eDrw0= | golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 h1:N9Vc/rorQUDes6B9CNdIxAn5jODGj2wzfrei2x4wNj4= | ||||||
| golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | ||||||
| golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 h1:Y7NOhdqIOU8kYI7BxsgL38d0ot0raxvcW+EMQU2QrT4= | golang.org/x/sys v0.0.0-20220804214406-8e32c043e418 h1:9vYwv7OjYaky/tlAeD7C4oC9EsPTlaFl1H2jS++V+ME= | ||||||
| golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20220804214406-8e32c043e418/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= | golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= | ||||||
| golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||||
| gvisor.dev/gvisor v0.0.0-20220711011657-cecae2f4234d h1:KjI6i6P1ib9DiNdNIN8pb2TXfBewpKHf3O58cjj9vw4= | gvisor.dev/gvisor v0.0.0-20220801010827-addd1f7b3e97 h1:zncudP85ZlJelPsgxZXN00Rl5M5j7QuDK27L35Ez01M= | ||||||
| gvisor.dev/gvisor v0.0.0-20220711011657-cecae2f4234d/go.mod h1:TIvkJD0sxe8pIob3p6T8IzxXunlp6yfgktvTNp+DGNM= | gvisor.dev/gvisor v0.0.0-20220801010827-addd1f7b3e97/go.mod h1:TIvkJD0sxe8pIob3p6T8IzxXunlp6yfgktvTNp+DGNM= | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ import ( | |||||||
| 	N "github.com/sagernet/sing/common/network" | 	N "github.com/sagernet/sing/common/network" | ||||||
| 	"github.com/sagernet/sing/common/udpnat" | 	"github.com/sagernet/sing/common/udpnat" | ||||||
|  |  | ||||||
| 	gBuffer "gvisor.dev/gvisor/pkg/buffer" | 	"gvisor.dev/gvisor/pkg/bufferv2" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip" | 	"gvisor.dev/gvisor/pkg/tcpip" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/header" | 	"gvisor.dev/gvisor/pkg/tcpip/header" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/stack" | 	"gvisor.dev/gvisor/pkg/tcpip/stack" | ||||||
| @@ -43,7 +43,7 @@ func (f *UDPForwarder) HandlePacket(id stack.TransportEndpointID, pkt *stack.Pac | |||||||
| 	f.udpNat.NewPacket( | 	f.udpNat.NewPacket( | ||||||
| 		f.ctx, | 		f.ctx, | ||||||
| 		upstreamMetadata.Source.AddrPort(), | 		upstreamMetadata.Source.AddrPort(), | ||||||
| 		buf.As(pkt.Data().AsRange().AsView()), | 		buf.As(pkt.Data().AsRange().ToSlice()), | ||||||
| 		upstreamMetadata, | 		upstreamMetadata, | ||||||
| 		func(natConn N.PacketConn) N.PacketWriter { | 		func(natConn N.PacketConn) N.PacketWriter { | ||||||
| 			return &UDPBackWriter{f.stack, id.RemoteAddress, id.RemotePort} | 			return &UDPBackWriter{f.stack, id.RemoteAddress, id.RemotePort} | ||||||
| @@ -58,9 +58,6 @@ type UDPBackWriter struct { | |||||||
| 	sourcePort uint16 | 	sourcePort uint16 | ||||||
| } | } | ||||||
|  |  | ||||||
| func (w *UDPBackWriter) WriteIsThreadUnsafe() { |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (w *UDPBackWriter) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error { | func (w *UDPBackWriter) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) error { | ||||||
| 	defer buffer.Release() | 	defer buffer.Release() | ||||||
|  |  | ||||||
| @@ -85,8 +82,7 @@ func (w *UDPBackWriter) WritePacket(buffer *buf.Buffer, destination M.Socksaddr) | |||||||
|  |  | ||||||
| 	packet := stack.NewPacketBuffer(stack.PacketBufferOptions{ | 	packet := stack.NewPacketBuffer(stack.PacketBufferOptions{ | ||||||
| 		ReserveHeaderBytes: header.UDPMinimumSize + int(route.MaxHeaderLength()), | 		ReserveHeaderBytes: header.UDPMinimumSize + int(route.MaxHeaderLength()), | ||||||
| 		Payload:            gBuffer.NewWithData(buffer.Bytes()), | 		Payload:            bufferv2.MakeWithData(buffer.Bytes()), | ||||||
| 		OnRelease:          buffer.Release, |  | ||||||
| 	}) | 	}) | ||||||
| 	defer packet.DecRef() | 	defer packet.DecRef() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ import ( | |||||||
|  |  | ||||||
| 	"golang.org/x/net/route" | 	"golang.org/x/net/route" | ||||||
| 	"golang.org/x/sys/unix" | 	"golang.org/x/sys/unix" | ||||||
| 	gBuffer "gvisor.dev/gvisor/pkg/buffer" | 	"gvisor.dev/gvisor/pkg/bufferv2" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip" | 	"gvisor.dev/gvisor/pkg/tcpip" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/header" | 	"gvisor.dev/gvisor/pkg/tcpip/header" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/stack" | 	"gvisor.dev/gvisor/pkg/tcpip/stack" | ||||||
| @@ -109,42 +109,36 @@ func (e *DarwinEndpoint) dispatchLoop() { | |||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		packet := buf.NewSize(n - 4) | 		packet := data[4:n] | ||||||
| 		common.Must1(packet.Write(data[4:n])) | 		var networkProtocol tcpip.NetworkProtocolNumber | ||||||
| 		pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{ | 		switch header.IPVersion(packet) { | ||||||
| 			Payload:           gBuffer.NewWithData(packet.Bytes()), |  | ||||||
| 			IsForwardedPacket: true, |  | ||||||
| 			OnRelease:         packet.Release, |  | ||||||
| 		}) |  | ||||||
| 		var p tcpip.NetworkProtocolNumber |  | ||||||
| 		ipHeader, ok := pkt.Data().PullUp(1) |  | ||||||
| 		if !ok { |  | ||||||
| 			pkt.DecRef() |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		switch header.IPVersion(ipHeader) { |  | ||||||
| 		case header.IPv4Version: | 		case header.IPv4Version: | ||||||
| 			p = header.IPv4ProtocolNumber | 			networkProtocol = header.IPv4ProtocolNumber | ||||||
| 			if header.IPv4(packet.Bytes()).DestinationAddress() == e.tun.inet4Address { | 			if header.IPv4(packet).DestinationAddress() == e.tun.inet4Address { | ||||||
| 				_, err = e.tun.tunFile.Write(data[:n]) | 				e.tun.tunFile.Write(data[:n]) | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 		case header.IPv6Version: | 		case header.IPv6Version: | ||||||
| 			p = header.IPv6ProtocolNumber | 			networkProtocol = header.IPv6ProtocolNumber | ||||||
| 			if header.IPv6(packet.Bytes()).DestinationAddress() == e.tun.inet6Address { | 			if header.IPv6(packet).DestinationAddress() == e.tun.inet6Address { | ||||||
| 				_, err = e.tun.tunFile.Write(data[:n]) | 				e.tun.tunFile.Write(data[:n]) | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 		default: | 		default: | ||||||
|  | 			e.tun.tunFile.Write(data[:n]) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | 		pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{ | ||||||
|  | 			Payload:           bufferv2.MakeWithData(data[4:n]), | ||||||
|  | 			IsForwardedPacket: true, | ||||||
|  | 		}) | ||||||
|  | 		pkt.NetworkProtocolNumber = networkProtocol | ||||||
| 		dispatcher := e.dispatcher | 		dispatcher := e.dispatcher | ||||||
| 		if dispatcher == nil { | 		if dispatcher == nil { | ||||||
| 			pkt.DecRef() | 			pkt.DecRef() | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		dispatcher.DeliverNetworkPacket(p, pkt) | 		dispatcher.DeliverNetworkPacket(networkProtocol, pkt) | ||||||
| 		pkt.DecRef() | 		pkt.DecRef() | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -163,22 +157,22 @@ func (e *DarwinEndpoint) ARPHardwareType() header.ARPHardwareType { | |||||||
| func (e *DarwinEndpoint) AddHeader(buffer *stack.PacketBuffer) { | func (e *DarwinEndpoint) AddHeader(buffer *stack.PacketBuffer) { | ||||||
| } | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	packetHeader4 = [4]byte{0x00, 0x00, 0x00, unix.AF_INET} | ||||||
|  | 	packetHeader6 = [4]byte{0x00, 0x00, 0x00, unix.AF_INET6} | ||||||
|  | ) | ||||||
|  |  | ||||||
| func (e *DarwinEndpoint) WritePackets(packetBufferList stack.PacketBufferList) (int, tcpip.Error) { | func (e *DarwinEndpoint) WritePackets(packetBufferList stack.PacketBufferList) (int, tcpip.Error) { | ||||||
| 	_packetHeader := buf.StackNewSize(4) |  | ||||||
| 	defer common.KeepAlive(_packetHeader) |  | ||||||
| 	packetHeader := common.Dup(_packetHeader) |  | ||||||
| 	defer packetHeader.Release() |  | ||||||
| 	var n int | 	var n int | ||||||
| 	for _, packet := range packetBufferList.AsSlice() { | 	for _, packet := range packetBufferList.AsSlice() { | ||||||
| 		packetHeader.FullReset() | 		var packetHeader []byte | ||||||
| 		packetHeader.WriteZeroN(3) |  | ||||||
| 		switch packet.NetworkProtocolNumber { | 		switch packet.NetworkProtocolNumber { | ||||||
| 		case header.IPv4ProtocolNumber: | 		case header.IPv4ProtocolNumber: | ||||||
| 			packetHeader.WriteByte(unix.AF_INET) | 			packetHeader = packetHeader4[:] | ||||||
| 		case header.IPv6ProtocolNumber: | 		case header.IPv6ProtocolNumber: | ||||||
| 			packetHeader.WriteByte(unix.AF_INET6) | 			packetHeader = packetHeader6[:] | ||||||
| 		} | 		} | ||||||
| 		_, err := rw.WriteV(e.tun.tunFd, append([][]byte{packetHeader.Bytes()}, packet.Slices()...)) | 		_, err := rw.WriteV(e.tun.tunFd, append([][]byte{packetHeader}, packet.AsSlices()...)) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return n, &tcpip.ErrAborted{} | 			return n, &tcpip.ErrAborted{} | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ import ( | |||||||
| 	E "github.com/sagernet/sing/common/exceptions" | 	E "github.com/sagernet/sing/common/exceptions" | ||||||
|  |  | ||||||
| 	"golang.org/x/sys/windows" | 	"golang.org/x/sys/windows" | ||||||
| 	gBuffer "gvisor.dev/gvisor/pkg/buffer" | 	"gvisor.dev/gvisor/pkg/bufferv2" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip" | 	"gvisor.dev/gvisor/pkg/tcpip" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/header" | 	"gvisor.dev/gvisor/pkg/tcpip/header" | ||||||
| 	"gvisor.dev/gvisor/pkg/tcpip/stack" | 	"gvisor.dev/gvisor/pkg/tcpip/stack" | ||||||
| @@ -318,33 +318,27 @@ func (e *WintunEndpoint) dispatchLoop() { | |||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		packet := buf.NewSize(n) | 		packet := data[:n] | ||||||
| 		common.Must1(packet.Write(data[:n])) | 		var networkProtocol tcpip.NetworkProtocolNumber | ||||||
| 		pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{ | 		switch header.IPVersion(packet) { | ||||||
| 			Payload:           gBuffer.NewWithData(packet.Bytes()), |  | ||||||
| 			IsForwardedPacket: true, |  | ||||||
| 			OnRelease:         packet.Release, |  | ||||||
| 		}) |  | ||||||
| 		var p tcpip.NetworkProtocolNumber |  | ||||||
| 		ipHeader, ok := pkt.Data().PullUp(1) |  | ||||||
| 		if !ok { |  | ||||||
| 			pkt.DecRef() |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		switch header.IPVersion(ipHeader) { |  | ||||||
| 		case header.IPv4Version: | 		case header.IPv4Version: | ||||||
| 			p = header.IPv4ProtocolNumber | 			networkProtocol = header.IPv4ProtocolNumber | ||||||
| 		case header.IPv6Version: | 		case header.IPv6Version: | ||||||
| 			p = header.IPv6ProtocolNumber | 			networkProtocol = header.IPv6ProtocolNumber | ||||||
| 		default: | 		default: | ||||||
|  | 			e.tun.Write([][]byte{packet}) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | 		pkt := stack.NewPacketBuffer(stack.PacketBufferOptions{ | ||||||
|  | 			Payload:           bufferv2.MakeWithData(packet), | ||||||
|  | 			IsForwardedPacket: true, | ||||||
|  | 		}) | ||||||
| 		dispatcher := e.dispatcher | 		dispatcher := e.dispatcher | ||||||
| 		if dispatcher == nil { | 		if dispatcher == nil { | ||||||
| 			pkt.DecRef() | 			pkt.DecRef() | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		dispatcher.DeliverNetworkPacket(p, pkt) | 		dispatcher.DeliverNetworkPacket(networkProtocol, pkt) | ||||||
| 		pkt.DecRef() | 		pkt.DecRef() | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -366,7 +360,7 @@ func (e *WintunEndpoint) AddHeader(buffer *stack.PacketBuffer) { | |||||||
| func (e *WintunEndpoint) WritePackets(packetBufferList stack.PacketBufferList) (int, tcpip.Error) { | func (e *WintunEndpoint) WritePackets(packetBufferList stack.PacketBufferList) (int, tcpip.Error) { | ||||||
| 	var n int | 	var n int | ||||||
| 	for _, packet := range packetBufferList.AsSlice() { | 	for _, packet := range packetBufferList.AsSlice() { | ||||||
| 		_, err := e.tun.Write(packet.Slices()) | 		_, err := e.tun.Write(packet.AsSlices()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return n, &tcpip.ErrAborted{} | 			return n, &tcpip.ErrAborted{} | ||||||
| 		} | 		} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 世界
					世界