From 25723e9b07f0b3f12b40e4962ede5c1dd48f59a3 Mon Sep 17 00:00:00 2001 From: Zoltan Papp Date: Sat, 22 Jun 2024 15:33:10 +0200 Subject: [PATCH] Do not use eBPF proxy in case of USP mode (#2180) --- client/internal/engine.go | 5 +++-- client/internal/peer/conn_test.go | 10 +++++----- client/internal/wgproxy/factory_linux.go | 6 +++++- client/internal/wgproxy/factory_nonlinux.go | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/internal/engine.go b/client/internal/engine.go index 5e1e46916..29e4969c6 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -282,8 +282,6 @@ func (e *Engine) Start() error { } e.ctx, e.cancel = context.WithCancel(e.clientCtx) - e.wgProxyFactory = wgproxy.NewFactory(e.ctx, e.config.WgPort) - wgIface, err := e.newWgIface() if err != nil { log.Errorf("failed creating wireguard interface instance %s: [%s]", e.config.WgIfaceName, err) @@ -291,6 +289,9 @@ func (e *Engine) Start() error { } e.wgInterface = wgIface + userspace := e.wgInterface.IsUserspaceBind() + e.wgProxyFactory = wgproxy.NewFactory(e.ctx, userspace, e.config.WgPort) + if e.config.RosenpassEnabled { log.Infof("rosenpass is enabled") if e.config.RosenpassPermissive { diff --git a/client/internal/peer/conn_test.go b/client/internal/peer/conn_test.go index c16134808..b608a5929 100644 --- a/client/internal/peer/conn_test.go +++ b/client/internal/peer/conn_test.go @@ -36,7 +36,7 @@ func TestNewConn_interfaceFilter(t *testing.T) { } func TestConn_GetKey(t *testing.T) { - wgProxyFactory := wgproxy.NewFactory(context.Background(), connConf.LocalWgPort) + wgProxyFactory := wgproxy.NewFactory(context.Background(), false, connConf.LocalWgPort) defer func() { _ = wgProxyFactory.Free() }() @@ -51,7 +51,7 @@ func TestConn_GetKey(t *testing.T) { } func TestConn_OnRemoteOffer(t *testing.T) { - wgProxyFactory := wgproxy.NewFactory(context.Background(), connConf.LocalWgPort) + wgProxyFactory := wgproxy.NewFactory(context.Background(), false, connConf.LocalWgPort) defer func() { _ = wgProxyFactory.Free() }() @@ -88,7 +88,7 @@ func TestConn_OnRemoteOffer(t *testing.T) { } func TestConn_OnRemoteAnswer(t *testing.T) { - wgProxyFactory := wgproxy.NewFactory(context.Background(), connConf.LocalWgPort) + wgProxyFactory := wgproxy.NewFactory(context.Background(), false, connConf.LocalWgPort) defer func() { _ = wgProxyFactory.Free() }() @@ -124,7 +124,7 @@ func TestConn_OnRemoteAnswer(t *testing.T) { wg.Wait() } func TestConn_Status(t *testing.T) { - wgProxyFactory := wgproxy.NewFactory(context.Background(), connConf.LocalWgPort) + wgProxyFactory := wgproxy.NewFactory(context.Background(), false, connConf.LocalWgPort) defer func() { _ = wgProxyFactory.Free() }() @@ -154,7 +154,7 @@ func TestConn_Status(t *testing.T) { } func TestConn_Close(t *testing.T) { - wgProxyFactory := wgproxy.NewFactory(context.Background(), connConf.LocalWgPort) + wgProxyFactory := wgproxy.NewFactory(context.Background(), false, connConf.LocalWgPort) defer func() { _ = wgProxyFactory.Free() }() diff --git a/client/internal/wgproxy/factory_linux.go b/client/internal/wgproxy/factory_linux.go index 0262994d7..d01ae7e74 100644 --- a/client/internal/wgproxy/factory_linux.go +++ b/client/internal/wgproxy/factory_linux.go @@ -8,9 +8,13 @@ import ( log "github.com/sirupsen/logrus" ) -func NewFactory(ctx context.Context, wgPort int) *Factory { +func NewFactory(ctx context.Context, userspace bool, wgPort int) *Factory { f := &Factory{wgPort: wgPort} + if userspace { + return f + } + ebpfProxy := NewWGEBPFProxy(ctx, wgPort) err := ebpfProxy.listen() if err != nil { diff --git a/client/internal/wgproxy/factory_nonlinux.go b/client/internal/wgproxy/factory_nonlinux.go index 33a235c4a..d1640c97d 100644 --- a/client/internal/wgproxy/factory_nonlinux.go +++ b/client/internal/wgproxy/factory_nonlinux.go @@ -4,6 +4,6 @@ package wgproxy import "context" -func NewFactory(ctx context.Context, wgPort int) *Factory { +func NewFactory(ctx context.Context, _ bool, wgPort int) *Factory { return &Factory{wgPort: wgPort} }