X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=blobdiff_plain;f=src%2Fyggdrasil%2Ftcpip.go;h=a1a71acd3eab4fae041ad22e5a16d9c764bd4b4c;hp=b602dc12422a02311ce672fc87166f2f12be2c52;hb=284db1303dc4993a95d6f6ba3da5ea522af275b0;hpb=c2b17fd0fc439e420710f53602604e8823c2fb1d diff --git a/src/yggdrasil/tcpip.go b/src/yggdrasil/tcpip.go index b602dc1..a1a71ac 100644 --- a/src/yggdrasil/tcpip.go +++ b/src/yggdrasil/tcpip.go @@ -31,13 +31,13 @@ import ( iwt "github.com/Arceliar/ironwood/types" yaddr "github.com/yggdrasil-network/yggdrasil-go/src/address" "golang.org/x/crypto/ed25519" - "inet.af/netstack/tcpip" - "inet.af/netstack/tcpip/adapters/gonet" - "inet.af/netstack/tcpip/buffer" - "inet.af/netstack/tcpip/header" - "inet.af/netstack/tcpip/network/ipv6" - "inet.af/netstack/tcpip/stack" - "inet.af/netstack/tcpip/transport/tcp" + "gvisor.dev/gvisor/pkg/bufferv2" + "gvisor.dev/gvisor/pkg/tcpip" + "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" + "gvisor.dev/gvisor/pkg/tcpip/header" + "gvisor.dev/gvisor/pkg/tcpip/network/ipv6" + "gvisor.dev/gvisor/pkg/tcpip/stack" + "gvisor.dev/gvisor/pkg/tcpip/transport/tcp" ) const IPv6HdrSize = 40 @@ -68,13 +68,9 @@ func (*TCPIPEndpoint) LinkAddress() tcpip.LinkAddress { return "" } func (*TCPIPEndpoint) Wait() {} -func (e *TCPIPEndpoint) WritePacket( - _ stack.RouteInfo, - _ tcpip.NetworkProtocolNumber, - pkt *stack.PacketBuffer, -) tcpip.Error { - vv := buffer.NewVectorisedView(pkt.Size(), pkt.Views()) - n, err := vv.Read(e.writeBuf) +func (e *TCPIPEndpoint) WritePacket(pkt *stack.PacketBuffer) tcpip.Error { + v := pkt.ToView() + n, err := v.Read(e.writeBuf) if err != nil { log.Println(err) return &tcpip.ErrAborted{} @@ -93,12 +89,14 @@ func (e *TCPIPEndpoint) WritePacket( return nil } -func (e *TCPIPEndpoint) WritePackets( - stack.RouteInfo, - stack.PacketBufferList, - tcpip.NetworkProtocolNumber, -) (int, tcpip.Error) { - panic("not implemented") +func (e *TCPIPEndpoint) WritePackets(pbs stack.PacketBufferList) (int, tcpip.Error) { + for i, pb := range pbs.AsSlice() { + err := e.WritePacket(pb) + if err != nil { + return i + 1, err + } + } + return len(pbs.AsSlice()), nil } func (e *TCPIPEndpoint) WriteRawPacket(*stack.PacketBuffer) tcpip.Error { @@ -107,13 +105,7 @@ func (e *TCPIPEndpoint) WriteRawPacket(*stack.PacketBuffer) tcpip.Error { func (*TCPIPEndpoint) ARPHardwareType() header.ARPHardwareType { return header.ARPHardwareNone } -func (e *TCPIPEndpoint) AddHeader( - tcpip.LinkAddress, - tcpip.LinkAddress, - tcpip.NetworkProtocolNumber, - *stack.PacketBuffer, -) { -} +func (e *TCPIPEndpoint) AddHeader(*stack.PacketBuffer) {} func convertToFullAddr(ip net.IP, port int) (tcpip.FullAddress, tcpip.NetworkProtocolNumber) { return tcpip.FullAddress{ @@ -193,11 +185,9 @@ func NewTCPIPEndpoint( e.ipToAddr[ip] = from } pkb := stack.NewPacketBuffer(stack.PacketBufferOptions{ - Data: buffer.NewVectorisedView(n, []buffer.View{ - buffer.NewViewFromBytes(e.readBuf[:n]), - }), + Payload: bufferv2.MakeWithData(e.readBuf[:n]), }) - e.d.DeliverNetworkPacket("", "", ipv6.ProtocolNumber, pkb) + e.d.DeliverNetworkPacket(ipv6.ProtocolNumber, pkb) } }() return &e, nil