From 284db1303dc4993a95d6f6ba3da5ea522af275b0 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 4 Sep 2022 16:30:31 +0300 Subject: [PATCH] Use gvisor.dev/gvisor again instead of inet.af/netstack Latter one is abandoned project now, because Go 1.17 has lazy module loading support: https://github.com/inetaf/netstack/issues/4 So there is no need in huge amount of dependencies anymore with gvisor. Moreover inet.af contains dependencies that are explicitly marked as unbuildable under Go 1.19, so it anyway needs some altering. According to gvisor's commit messages, it is tested to work under 32-bit systems. --- doc/download.texi | 2 +- doc/install.texi | 2 +- doc/news.ru.texi | 12 ++++++++++ doc/news.texi | 14 +++++++++++- src/go.mod | 14 ++++++++---- src/go.sum | 8 ++----- src/nncp.go | 2 +- src/yggdrasil/tcpip.go | 52 +++++++++++++++++------------------------- 8 files changed, 60 insertions(+), 46 deletions(-) diff --git a/doc/download.texi b/doc/download.texi index 03e9838..e88a98c 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -43,7 +43,7 @@ And additional ones for Yggdrasil support: @item @code{github.com/huandu/xstrings} @tab Expat @item @code{github.com/yggdrasil-network/yggdrasil-go} @tab GNU LGPLv3 @item @code{golang.org/x/term} @tab BSD 3-Clause -@item @code{inet.af/netstack} @tab Apache 2.0 +@item @code{gvisor.dev/gvisor} @tab Apache 2.0 @end multitable @multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {meta4 link sig} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} diff --git a/doc/install.texi b/doc/install.texi index e948d81..6850354 100644 --- a/doc/install.texi +++ b/doc/install.texi @@ -40,7 +40,7 @@ NNCP should run on any POSIX-compatible operating system. @pindex go @pindex texinfo NNCP is written on @url{https://go.dev/, Go} programming language -and you have to install Go compiler 1.13+ version. +and you have to install Go compiler 1.17+ version. @url{http://cr.yp.to/redo.html, redo} build system is recommended for convenience. @url{https://www.gnu.org/software/texinfo/, Texinfo} is used for building documentation (although tarballs already include it). diff --git a/doc/news.ru.texi b/doc/news.ru.texi index bfc287c..cb382df 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,18 @@ @node Новости @section Новости +@node Релиз 8.8.0 +@subsection Релиз 8.8.0 +@itemize + +@item +Исправлена невозможность сборки под Go 1.19. + +@item +Минимальная требуемая версия Go 1.17. + +@end itemize + @node Релиз 8.7.2 @subsection Релиз 8.7.2 @itemize diff --git a/doc/news.texi b/doc/news.texi index 326308a..fe59117 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -4,6 +4,18 @@ See also this page @ref{Новости, on russian}. +@node Release 8_8_0 +@section Release 8.8.0 +@itemize + +@item +Fixed buildability under Go 1.19. + +@item +Minimal required Go version is 1.17. + +@end itemize + @node Release 8_7_2 @section Release 8.7.2 @itemize @@ -412,7 +424,7 @@ the check in infinite cycle. @itemize @item -Minimal required Go version 1.13. +Minimal required Go version is 1.13. @item Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b. diff --git a/src/go.mod b/src/go.mod index fb0eb03..221b1eb 100644 --- a/src/go.mod +++ b/src/go.mod @@ -7,11 +7,9 @@ require ( github.com/flynn/noise v1.0.0 github.com/fsnotify/fsnotify v1.5.1 github.com/gologme/log v1.3.0 - github.com/google/btree v1.0.1 // indirect github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 github.com/hjson/hjson-go v3.1.0+incompatible github.com/klauspost/compress v1.14.4 - github.com/klauspost/cpuid/v2 v2.0.11 // indirect github.com/yggdrasil-network/yggdrasil-go v0.4.2 go.cypherpunks.ru/balloon v1.1.1 go.cypherpunks.ru/recfile v0.4.3 @@ -19,9 +17,15 @@ require ( golang.org/x/net v0.0.0-20220225172249-27dd8689420f golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect - inet.af/netstack v0.0.0-20211120045802-8aa80cf23d3c + gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c lukechampine.com/blake3 v1.1.7 ) -go 1.13 +require ( + github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 // indirect + github.com/google/btree v1.0.1 // indirect + github.com/klauspost/cpuid/v2 v2.0.11 // indirect + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect +) + +go 1.17 diff --git a/src/go.sum b/src/go.sum index b6fc52d..71b65f3 100644 --- a/src/go.sum +++ b/src/go.sum @@ -68,7 +68,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -85,9 +84,7 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -98,7 +95,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -107,7 +103,7 @@ golang.zx2c4.com/wireguard v0.0.0-20210604143328-f9b48a961cd2/go.mod h1:laHzsbfM golang.zx2c4.com/wireguard/windows v0.3.14/go.mod h1:3P4IEAsb+BjlKZmpUXgy74c0iX9AVwwr3WcVJ8nPgME= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -inet.af/netstack v0.0.0-20211120045802-8aa80cf23d3c h1:nr31qYr+91rWD8klUkPx3eGTZzumCC414UJG1QRKZTc= -inet.af/netstack v0.0.0-20211120045802-8aa80cf23d3c/go.mod h1:KOJdAzQzMLKzwFEdOOnrnSrLIhaFVB+NQoME/e5wllA= +gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c h1:m5lcgWnL3OElQNVyp3qcncItJ2c0sQlSGjYK2+nJTA4= +gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c/go.mod h1:TIvkJD0sxe8pIob3p6T8IzxXunlp6yfgktvTNp+DGNM= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= diff --git a/src/nncp.go b/src/nncp.go index e51f925..31ba33b 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ along with this program. If not, see .` const Base32Encoded32Len = 52 var ( - Version string = "8.7.2" + Version string = "8.8.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) 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 -- 2.44.0