X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fyggdrasil%2Ftcpip.go;h=9796686a3c6f58463a2dd634231134c5cfe4595c;hb=cf9363f956cb2d93a581c11ed65c5b02910d10d5;hp=b602dc12422a02311ce672fc87166f2f12be2c52;hpb=e50957330b9a28419cb8ecb67a38b34e8ba845fd;p=nncp.git diff --git a/src/yggdrasil/tcpip.go b/src/yggdrasil/tcpip.go index b602dc1..9796686 100644 --- a/src/yggdrasil/tcpip.go +++ b/src/yggdrasil/tcpip.go @@ -3,7 +3,7 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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.PacketBufferPtr) tcpip.Error { + v := pkt.ToView() + n, err := v.Read(e.writeBuf) if err != nil { log.Println(err) return &tcpip.ErrAborted{} @@ -93,27 +89,19 @@ 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) WriteRawPacket(*stack.PacketBuffer) 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 (*TCPIPEndpoint) ARPHardwareType() header.ARPHardwareType { return header.ARPHardwareNone } -func (e *TCPIPEndpoint) AddHeader( - tcpip.LinkAddress, - tcpip.LinkAddress, - tcpip.NetworkProtocolNumber, - *stack.PacketBuffer, -) { -} +func (e *TCPIPEndpoint) AddHeader(stack.PacketBufferPtr) {} func convertToFullAddr(ip net.IP, port int) (tcpip.FullAddress, tcpip.NetworkProtocolNumber) { return tcpip.FullAddress{ @@ -193,11 +181,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