diff --git a/client/internal/dns/server_test.go b/client/internal/dns/server_test.go index 208007236..56f254475 100644 --- a/client/internal/dns/server_test.go +++ b/client/internal/dns/server_test.go @@ -3,6 +3,7 @@ package dns import ( "context" "fmt" + "github.com/netbirdio/netbird/client/internal/stdnet" "net" "net/netip" "strings" @@ -199,7 +200,11 @@ func TestUpdateDNSServer(t *testing.T) { for n, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - wgIface, err := iface.NewWGIFace(fmt.Sprintf("utun230%d", n), fmt.Sprintf("100.66.100.%d/32", n+1), iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet(nil, nil) + if err != nil { + t.Fatal(err) + } + wgIface, err := iface.NewWGIFace(fmt.Sprintf("utun230%d", n), fmt.Sprintf("100.66.100.%d/32", n+1), iface.DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } diff --git a/client/internal/engine.go b/client/internal/engine.go index 67a20f69f..f73a8e4b9 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -177,18 +177,15 @@ func (e *Engine) Start() error { wgAddr := e.config.WgAddr myPrivateKey := e.config.WgPrivateKey var err error - - e.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, e.config.TunAdapter) - if err != nil { - log.Errorf("failed creating wireguard interface instance %s: [%s]", wgIfaceName, err.Error()) - return err - } - transportNet, err := e.newStdNet() if err != nil { log.Warnf("failed to create pion's stdnet: %s", err) } - fmt.Sprint(transportNet) + e.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, e.config.TunAdapter, transportNet) + if err != nil { + log.Errorf("failed creating wireguard interface instance %s: [%s]", wgIfaceName, err.Error()) + return err + } err = e.wgInterface.Create() if err != nil { diff --git a/client/internal/engine_test.go b/client/internal/engine_test.go index f46fcf78e..63fcbc553 100644 --- a/client/internal/engine_test.go +++ b/client/internal/engine_test.go @@ -3,6 +3,7 @@ package internal import ( "context" "fmt" + "github.com/pion/transport/v2/stdnet" "net" "net/netip" "os" @@ -207,7 +208,11 @@ func TestEngine_UpdateNetworkMap(t *testing.T) { WgPrivateKey: key, WgPort: 33100, }, peer.NewRecorder("https://mgm")) - engine.wgInterface, err = iface.NewWGIFace("utun102", "100.64.0.1/24", iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + engine.wgInterface, err = iface.NewWGIFace("utun102", "100.64.0.1/24", iface.DefaultMTU, nil, newNet) engine.routeManager = routemanager.NewManager(ctx, key.PublicKey().String(), engine.wgInterface, engine.statusRecorder) engine.dnsServer = &dns.MockServer{ UpdateDNSServerFunc: func(serial uint64, update nbdns.Config) error { return nil }, @@ -549,7 +554,11 @@ func TestEngine_UpdateNetworkMapWithRoutes(t *testing.T) { WgPrivateKey: key, WgPort: 33100, }, peer.NewRecorder("https://mgm")) - engine.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + engine.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, nil, newNet) assert.NoError(t, err, "shouldn't return error") input := struct { inputSerial uint64 @@ -714,7 +723,11 @@ func TestEngine_UpdateNetworkMapWithDNSUpdate(t *testing.T) { WgPrivateKey: key, WgPort: 33100, }, peer.NewRecorder("https://mgm")) - engine.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + engine.wgInterface, err = iface.NewWGIFace(wgIfaceName, wgAddr, iface.DefaultMTU, nil, newNet) assert.NoError(t, err, "shouldn't return error") mockRouteManager := &routemanager.MockManager{ diff --git a/client/internal/routemanager/manager_test.go b/client/internal/routemanager/manager_test.go index 47b43b396..8bfc48bf4 100644 --- a/client/internal/routemanager/manager_test.go +++ b/client/internal/routemanager/manager_test.go @@ -3,6 +3,7 @@ package routemanager import ( "context" "fmt" + "github.com/pion/transport/v2/stdnet" "net/netip" "runtime" "testing" @@ -391,7 +392,11 @@ func TestManagerUpdateRoutes(t *testing.T) { for n, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - wgInterface, err := iface.NewWGIFace(fmt.Sprintf("utun43%d", n), "100.65.65.2/24", iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + wgInterface, err := iface.NewWGIFace(fmt.Sprintf("utun43%d", n), "100.65.65.2/24", iface.DefaultMTU, nil, newNet) require.NoError(t, err, "should create testing WGIface interface") defer wgInterface.Close() diff --git a/client/internal/routemanager/systemops_test.go b/client/internal/routemanager/systemops_test.go index fe0c861da..59d4cb72c 100644 --- a/client/internal/routemanager/systemops_test.go +++ b/client/internal/routemanager/systemops_test.go @@ -3,6 +3,7 @@ package routemanager import ( "fmt" "github.com/netbirdio/netbird/iface" + "github.com/pion/transport/v2/stdnet" "github.com/stretchr/testify/require" "net" "net/netip" @@ -32,7 +33,11 @@ func TestAddRemoveRoutes(t *testing.T) { for n, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - wgInterface, err := iface.NewWGIFace(fmt.Sprintf("utun53%d", n), "100.65.75.2/24", iface.DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + wgInterface, err := iface.NewWGIFace(fmt.Sprintf("utun53%d", n), "100.65.75.2/24", iface.DefaultMTU, nil, newNet) require.NoError(t, err, "should create testing WGIface interface") defer wgInterface.Close() diff --git a/go.mod b/go.mod index 043b7a6d6..64e0fbdc9 100644 --- a/go.mod +++ b/go.mod @@ -131,7 +131,6 @@ require ( golang.org/x/mod v0.8.0 // indirect golang.org/x/text v0.8.0 // indirect golang.org/x/tools v0.6.0 // indirect - golang.zx2c4.com/go118/netip v0.0.0-20211111135330-a4a02eeacf9d // indirect golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 // indirect google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect diff --git a/go.sum b/go.sum index 79b5cbd44..6bcc6bff8 100644 --- a/go.sum +++ b/go.sum @@ -881,13 +881,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.zx2c4.com/go118/netip v0.0.0-20211111135330-a4a02eeacf9d h1:9+v0G0naRhLPOJEeJOL6NuXTtAHHwmkyZlgQJ0XcQ8I= golang.zx2c4.com/go118/netip v0.0.0-20211111135330-a4a02eeacf9d/go.mod h1:5yyfuiqVIJ7t+3MqrpTQ+QqRkMWiESiyDvPNvKYCecg= golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 h1:Ug9qvr1myri/zFN6xL17LSCBGFDnphBBhzmILHsM5TY= golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= golang.zx2c4.com/wireguard v0.0.0-20211129173154-2dd424e2d808/go.mod h1:TjUWrnD5ATh7bFvmm/ALEJZQ4ivKbETb6pmyj1vUoNI= -golang.zx2c4.com/wireguard v0.0.0-20211209221555-9c9e7e272434 h1:3zl8RkJNQ8wfPRomwv/6DBbH2Ut6dgMaWTxM0ZunWnE= -golang.zx2c4.com/wireguard v0.0.0-20211209221555-9c9e7e272434/go.mod h1:TjUWrnD5ATh7bFvmm/ALEJZQ4ivKbETb6pmyj1vUoNI= golang.zx2c4.com/wireguard v0.0.0-20230223181233-21636207a675 h1:/J/RVnr7ng4fWPRH3xa4WtBJ1Jp+Auu4YNLmGiPv5QU= golang.zx2c4.com/wireguard v0.0.0-20230223181233-21636207a675/go.mod h1:whfbyDBt09xhCYQWtO2+3UVjlaq6/9hDZrjg2ZE6SyA= golang.zx2c4.com/wireguard/wgctrl v0.0.0-20211215182854-7a385b3431de h1:qDZ+lyO5jC9RNJ7ANJA0GWXk3pSn0Fu5SlcAIlgw+6w= diff --git a/iface/bind/bind.go b/iface/bind/bind.go index a81a35c84..a0813be69 100644 --- a/iface/bind/bind.go +++ b/iface/bind/bind.go @@ -26,7 +26,7 @@ type ICEBind struct { // NewICEBind create a new instance of ICEBind with a given transportNet and an interfaceFilter function. // The interfaceFilter function is used to exclude interfaces from hole punching (the IPs of that interfaces won't be used as connection candidates) // The transportNet can be nil. -func NewICEBind(transportNet transport.Net, interfaceFilter func(interfaceName string) bool) *ICEBind { +func NewICEBind(transportNet transport.Net) *ICEBind { return &ICEBind{ transportNet: transportNet, mu: sync.Mutex{}, diff --git a/iface/iface_android.go b/iface/iface_android.go index f8d3be5c0..292cf58cf 100644 --- a/iface/iface_android.go +++ b/iface/iface_android.go @@ -1,9 +1,12 @@ package iface -import "sync" +import ( + "github.com/pion/transport/v2" + "sync" +) // NewWGIFace Creates a new Wireguard interface instance -func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter) (*WGIface, error) { +func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter, transportNet transport.Net) (*WGIface, error) { wgIface := &WGIface{ mu: sync.Mutex{}, } @@ -13,7 +16,7 @@ func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter return wgIface, err } - tun := newTunDevice(wgAddress, mtu, tunAdapter) + tun := newTunDevice(wgAddress, mtu, tunAdapter, transportNet) wgIface.tun = tun wgIface.configurer = newWGConfigurer(tun) diff --git a/iface/iface_nonandroid.go b/iface/iface_nonandroid.go index 13bbe184b..774a7bf3d 100644 --- a/iface/iface_nonandroid.go +++ b/iface/iface_nonandroid.go @@ -2,10 +2,13 @@ package iface -import "sync" +import ( + "github.com/pion/transport/v2" + "sync" +) // NewWGIFace Creates a new Wireguard interface instance -func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter) (*WGIface, error) { +func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter, transportNet transport.Net) (*WGIface, error) { wgIface := &WGIface{ mu: sync.Mutex{}, } @@ -15,7 +18,7 @@ func NewWGIFace(ifaceName string, address string, mtu int, tunAdapter TunAdapter return wgIface, err } - wgIface.tun = newTunDevice(ifaceName, wgAddress, mtu) + wgIface.tun = newTunDevice(ifaceName, wgAddress, mtu, transportNet) wgIface.configurer = newWGConfigurer(ifaceName) return wgIface, nil diff --git a/iface/iface_test.go b/iface/iface_test.go index ec1ea114a..5a200caa6 100644 --- a/iface/iface_test.go +++ b/iface/iface_test.go @@ -2,6 +2,7 @@ package iface import ( "fmt" + "github.com/pion/transport/v2/stdnet" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "golang.zx2c4.com/wireguard/wgctrl" @@ -32,7 +33,12 @@ func init() { func TestWGIface_UpdateAddr(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+4) addr := "100.64.0.1/8" - iface, err := NewWGIFace(ifaceName, addr, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + + iface, err := NewWGIFace(ifaceName, addr, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -92,7 +98,11 @@ func getIfaceAddrs(ifaceName string) ([]net.Addr, error) { func Test_CreateInterface(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+1) wgIP := "10.99.99.1/32" - iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -121,7 +131,11 @@ func Test_CreateInterface(t *testing.T) { func Test_Close(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+2) wgIP := "10.99.99.2/32" - iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -149,7 +163,11 @@ func Test_Close(t *testing.T) { func Test_ConfigureInterface(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+3) wgIP := "10.99.99.5/30" - iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -196,7 +214,11 @@ func Test_ConfigureInterface(t *testing.T) { func Test_UpdatePeer(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+4) wgIP := "10.99.99.9/30" - iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -255,7 +277,11 @@ func Test_UpdatePeer(t *testing.T) { func Test_RemovePeer(t *testing.T) { ifaceName := fmt.Sprintf("utun%d", WgIntNumber+4) wgIP := "10.99.99.13/30" - iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface, err := NewWGIFace(ifaceName, wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -304,8 +330,11 @@ func Test_ConnectPeers(t *testing.T) { peer2Key, _ := wgtypes.GeneratePrivateKey() keepAlive := 1 * time.Second - - iface1, err := NewWGIFace(peer1ifaceName, peer1wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface1, err := NewWGIFace(peer1ifaceName, peer1wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } @@ -322,7 +351,11 @@ func Test_ConnectPeers(t *testing.T) { t.Fatal(err) } - iface2, err := NewWGIFace(peer2ifaceName, peer2wgIP, DefaultMTU, nil) + newNet, err := stdnet.NewNet() + if err != nil { + t.Fatal(err) + } + iface2, err := NewWGIFace(peer2ifaceName, peer2wgIP, DefaultMTU, nil, newNet) if err != nil { t.Fatal(err) } diff --git a/iface/tun_android.go b/iface/tun_android.go index 44e7f51c3..67be5797b 100644 --- a/iface/tun_android.go +++ b/iface/tun_android.go @@ -2,6 +2,7 @@ package iface import ( "github.com/netbirdio/netbird/iface/bind" + "github.com/pion/transport/v2" "net" log "github.com/sirupsen/logrus" @@ -23,12 +24,12 @@ type tunDevice struct { iceBind *bind.ICEBind } -func newTunDevice(address WGAddress, mtu int, tunAdapter TunAdapter) *tunDevice { +func newTunDevice(address WGAddress, mtu int, tunAdapter TunAdapter, transportNet transport.Net) *tunDevice { return &tunDevice{ address: address, mtu: mtu, tunAdapter: tunAdapter, - iceBind: &bind.ICEBind{}, + iceBind: bind.NewICEBind(transportNet), } } diff --git a/iface/tun_unix.go b/iface/tun_unix.go index 9a57ad8e3..9d219c450 100644 --- a/iface/tun_unix.go +++ b/iface/tun_unix.go @@ -4,6 +4,7 @@ package iface import ( "github.com/netbirdio/netbird/iface/bind" + "github.com/pion/transport/v2" "net" "os" @@ -21,12 +22,12 @@ type tunDevice struct { iceBind *bind.ICEBind } -func newTunDevice(name string, address WGAddress, mtu int) *tunDevice { +func newTunDevice(name string, address WGAddress, mtu int, transportNet transport.Net) *tunDevice { return &tunDevice{ name: name, address: address, mtu: mtu, - iceBind: &bind.ICEBind{}, + iceBind: bind.NewICEBind(transportNet), } } diff --git a/iface/tun_windows.go b/iface/tun_windows.go index cd4589df9..f1b2b6ac7 100644 --- a/iface/tun_windows.go +++ b/iface/tun_windows.go @@ -2,6 +2,7 @@ package iface import ( "fmt" + "github.com/netbirdio/netbird/iface/bind" "net" log "github.com/sirupsen/logrus" @@ -16,8 +17,8 @@ type tunDevice struct { iceBind *bind.ICEBind } -func newTunDevice(name string, address WGAddress, mtu int) *tunDevice { - return &tunDevice{name: name, address: address, iceBind: &bind.ICEBind{}} +func newTunDevice(name string, address WGAddress, mtu int, transportNet transport.Net) *tunDevice { + return &tunDevice{name: name, address: address, iceBind: bind.NewICEBind(transportNet)} } func (c *tunDevice) Create() error {