mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-09 02:30:05 +08:00
@@ -73,9 +73,9 @@ func (e *Endpoint) dispatchLoop() {
|
|||||||
|
|
||||||
switch header.IPVersion(packet) {
|
switch header.IPVersion(packet) {
|
||||||
case header.IPv4Version:
|
case header.IPv4Version:
|
||||||
e.dispatcher.DeliverNetworkPacket("", "", header.IPv4ProtocolNumber, pkb)
|
e.dispatcher.DeliverNetworkPacket(header.IPv4ProtocolNumber, pkb)
|
||||||
case header.IPv6Version:
|
case header.IPv6Version:
|
||||||
e.dispatcher.DeliverNetworkPacket("", "", header.IPv6ProtocolNumber, pkb)
|
e.dispatcher.DeliverNetworkPacket(header.IPv6ProtocolNumber, pkb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,13 +89,8 @@ func (e *Endpoint) writePacket(pkt *stack.PacketBuffer) tcpip.Error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WritePacket writes packet back into io.ReadWriter.
|
|
||||||
func (e *Endpoint) WritePacket(_ stack.RouteInfo, _ tcpip.NetworkProtocolNumber, pkt *stack.PacketBuffer) tcpip.Error {
|
|
||||||
return e.writePacket(pkt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WritePackets writes packets back into io.ReadWriter.
|
// WritePackets writes packets back into io.ReadWriter.
|
||||||
func (e *Endpoint) WritePackets(_ stack.RouteInfo, pkts stack.PacketBufferList, _ tcpip.NetworkProtocolNumber) (int, tcpip.Error) {
|
func (e *Endpoint) WritePackets(pkts stack.PacketBufferList) (int, tcpip.Error) {
|
||||||
n := 0
|
n := 0
|
||||||
for pkt := pkts.Front(); pkt != nil; pkt = pkt.Next() {
|
for pkt := pkts.Front(); pkt != nil; pkt = pkt.Next() {
|
||||||
if err := e.writePacket(pkt); err != nil {
|
if err := e.writePacket(pkt); err != nil {
|
||||||
@@ -106,10 +101,6 @@ func (e *Endpoint) WritePackets(_ stack.RouteInfo, pkts stack.PacketBufferList,
|
|||||||
return n, nil
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Endpoint) WriteRawPacket(packetBuffer *stack.PacketBuffer) tcpip.Error {
|
|
||||||
return &tcpip.ErrNotSupported{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MTU implements stack.LinkEndpoint.MTU.
|
// MTU implements stack.LinkEndpoint.MTU.
|
||||||
func (e *Endpoint) MTU() uint32 {
|
func (e *Endpoint) MTU() uint32 {
|
||||||
return e.mtu
|
return e.mtu
|
||||||
@@ -137,8 +128,7 @@ func (*Endpoint) ARPHardwareType() header.ARPHardwareType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddHeader implements stack.LinkEndpoint.AddHeader.
|
// AddHeader implements stack.LinkEndpoint.AddHeader.
|
||||||
func (e *Endpoint) AddHeader(tcpip.LinkAddress, tcpip.LinkAddress, tcpip.NetworkProtocolNumber, *stack.PacketBuffer) {
|
func (e *Endpoint) AddHeader(*stack.PacketBuffer) {}
|
||||||
}
|
|
||||||
|
|
||||||
// Wait implements stack.LinkEndpoint.Wait.
|
// Wait implements stack.LinkEndpoint.Wait.
|
||||||
func (e *Endpoint) Wait() {}
|
func (e *Endpoint) Wait() {}
|
||||||
|
@@ -49,10 +49,18 @@ func Open(name string, mtu uint32) (device.Device, error) {
|
|||||||
t.mtu = _mtu
|
t.mtu = _mtu
|
||||||
|
|
||||||
ep, err := fdbased.New(&fdbased.Options{
|
ep, err := fdbased.New(&fdbased.Options{
|
||||||
MTU: t.mtu,
|
|
||||||
FDs: []int{fd},
|
FDs: []int{fd},
|
||||||
// TUN only
|
MTU: t.mtu,
|
||||||
|
// TUN only, ignore ethernet header.
|
||||||
EthernetHeader: false,
|
EthernetHeader: false,
|
||||||
|
// SYS_READV support only for TUN fd.
|
||||||
|
PacketDispatchMode: fdbased.Readv,
|
||||||
|
// TODO: set this field to zero in the future.
|
||||||
|
// it's a only temporary hack to avoid `socket operation
|
||||||
|
// on non-socket` error caused by SYS_SENDMMSG syscall.
|
||||||
|
//
|
||||||
|
// Ref: https://github.com/google/gvisor/issues/7125
|
||||||
|
MaxSyscallHeaderBytes: 0x40,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("create endpoint: %w", err)
|
return nil, fmt.Errorf("create endpoint: %w", err)
|
2
go.mod
2
go.mod
@@ -17,7 +17,7 @@ require (
|
|||||||
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11
|
||||||
golang.zx2c4.com/wireguard v0.0.0-20220117163742-e0b8f11489c5
|
golang.zx2c4.com/wireguard v0.0.0-20220117163742-e0b8f11489c5
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||||
gvisor.dev/gvisor v0.0.0-20211124014810-d07633871257
|
gvisor.dev/gvisor v0.0.0-20220129032118-ed00636ef990
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
4
go.sum
4
go.sum
@@ -60,5 +60,5 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gvisor.dev/gvisor v0.0.0-20211124014810-d07633871257 h1:WWhBINX/PcQgzjVV/is9b/nClBCXcOUMvMGsgLJx90M=
|
gvisor.dev/gvisor v0.0.0-20220129032118-ed00636ef990 h1:fTgWAYpliP19U3FX8+tI2TZGXnnk45g18frOuZxKay4=
|
||||||
gvisor.dev/gvisor v0.0.0-20211124014810-d07633871257/go.mod h1:Pd3Ini/+F15mWIiBZQM0YFeIYsPYl1cV2PCdoFJVVYU=
|
gvisor.dev/gvisor v0.0.0-20220129032118-ed00636ef990/go.mod h1:vmN0Pug/s8TJmpnt30DvrEfZ5vDl52psGLU04tFuK2U=
|
||||||
|
Reference in New Issue
Block a user