Fix(core): update gVisor (#82, #95)

This commit is contained in:
xjasonlyu
2022-02-01 17:16:39 +08:00
parent b581c2e877
commit c2ec509cfa
4 changed files with 17 additions and 19 deletions

View File

@@ -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() {}

View File

@@ -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
View File

@@ -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
View File

@@ -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=