From 7242029e43f407d82f6cc6ae8787159b53d07b27 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Mon, 31 Jan 2022 11:44:39 +0000 Subject: [PATCH] Wrap conn in Yggdrasil instead, so not necessary to do so in Ironwood --- go.mod | 2 -- go.sum | 14 ++------------ src/core/api.go | 9 ++++++--- src/core/link.go | 28 ++++++++++++++++++++++++++-- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index 3570f175..ac3ca589 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/yggdrasil-network/yggdrasil-go go 1.16 -replace github.com/Arceliar/ironwood => github.com/neilalexander/ironwood v0.0.0-20220130210920-48e68101c869 - require ( github.com/Arceliar/ironwood v0.0.0-20210619124114-6ad55cae5031 github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 diff --git a/go.sum b/go.sum index 508fbb30..c295eacc 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/Arceliar/ironwood v0.0.0-20210619124114-6ad55cae5031 h1:DZVDfYhVdu+0wAiRHoY1olyNkKxIot9UjBnbQFzuUlM= +github.com/Arceliar/ironwood v0.0.0-20210619124114-6ad55cae5031/go.mod h1:RP72rucOFm5udrnEzTmIWLRVGQiV/fSUAQXJ0RST/nk= github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 h1:WndgpSW13S32VLQ3ugUxx2EnnWmgba1kCqPkd4Gk1yQ= github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979/go.mod h1:6Lkn+/zJilRMsKmbmG1RPoamiArC6HS73xbwRyp3UyI= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -6,9 +8,6 @@ github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1o github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.12.0 h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -32,24 +31,15 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/neilalexander/ironwood v0.0.0-20220130210920-48e68101c869 h1:YLBjFf0shdkRdqvNDAe7NnJeImGUBxUJUz03EWxMo3g= -github.com/neilalexander/ironwood v0.0.0-20220130210920-48e68101c869/go.mod h1:tToy83o7pWQ23NxJVyROFwVDvp1BkIruTuD3MrXqkDE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= diff --git a/src/core/api.go b/src/core/api.go index 37b05f27..fabd7439 100644 --- a/src/core/api.go +++ b/src/core/api.go @@ -2,6 +2,7 @@ package core import ( "crypto/ed25519" + "sync/atomic" "time" //"encoding/hex" @@ -80,9 +81,11 @@ func (c *Core) GetPeers() []Peer { if name := names[p.Conn]; name != "" { info.Remote = name } - info.RXBytes = p.RXBytes - info.TXBytes = p.TXBytes - info.Uptime = p.Uptime + if linkconn, ok := p.Conn.(*linkConn); ok { + info.RXBytes = atomic.LoadUint64(&linkconn.rx) + info.TXBytes = atomic.LoadUint64(&linkconn.tx) + info.Uptime = time.Since(linkconn.up) + } peers = append(peers, info) } return peers diff --git a/src/core/link.go b/src/core/link.go index 8797b886..14a32cb3 100644 --- a/src/core/link.go +++ b/src/core/link.go @@ -14,6 +14,8 @@ import ( //"sync/atomic" "time" + "sync/atomic" + "github.com/yggdrasil-network/yggdrasil-go/src/address" "github.com/yggdrasil-network/yggdrasil-go/src/util" "golang.org/x/net/proxy" @@ -40,7 +42,7 @@ type linkInfo struct { type link struct { lname string links *links - conn net.Conn + conn *linkConn options linkOptions info linkInfo incoming bool @@ -124,7 +126,10 @@ func (l *links) call(u *url.URL, sintf string) error { func (l *links) create(conn net.Conn, name, linkType, local, remote string, incoming, force bool, options linkOptions) (*link, error) { // Technically anything unique would work for names, but let's pick something human readable, just for debugging intf := link{ - conn: conn, + conn: &linkConn{ + Conn: conn, + up: time.Now(), + }, lname: name, links: l, options: options, @@ -265,3 +270,22 @@ func (intf *link) close() { func (intf *link) name() string { return intf.lname } + +type linkConn struct { + net.Conn + rx uint64 + tx uint64 + up time.Time +} + +func (c *linkConn) Read(p []byte) (n int, err error) { + n, err = c.Conn.Read(p) + atomic.AddUint64(&c.rx, uint64(n)) + return +} + +func (c *linkConn) Write(p []byte) (n int, err error) { + n, err = c.Conn.Write(p) + atomic.AddUint64(&c.tx, uint64(n)) + return +}