From 253dbf58eff56478325875a035a760d4d44a168c Mon Sep 17 00:00:00 2001 From: Iurii Egorov Date: Fri, 22 Mar 2024 00:54:26 +0300 Subject: [PATCH] udptlspipe tests Signed-off-by: Iurii Egorov --- device/device.go | 6 ++++-- device/device_test.go | 2 +- device/noise_test.go | 2 +- device/peer.go | 2 +- device/receive.go | 14 ++++++++------ device/send.go | 14 ++++++++------ main.go | 8 ++++---- main_windows.go | 2 +- tun/netstack/examples/http_client.go | 2 +- tun/netstack/examples/http_server.go | 2 +- tun/netstack/examples/ping_client.go | 2 +- 11 files changed, 31 insertions(+), 25 deletions(-) diff --git a/device/device.go b/device/device.go index b1b07b9..f2c1797 100644 --- a/device/device.go +++ b/device/device.go @@ -101,6 +101,7 @@ type Device struct { udptlspipe *pipe.Server serverMode bool + udpMode bool } type aSecCfgType struct { @@ -307,8 +308,9 @@ func (device *Device) SetPrivateKey(sk NoisePrivateKey) error { return nil } -func NewDevice(tunDevice tun.Device, bind conn.Bind, logger *Logger) *Device { +func NewDevice(tunDevice tun.Device, bind conn.Bind, logger *Logger, udp bool) *Device { device := new(Device) + device.udpMode = udp device.serverMode = false device.state.state.Store(uint32(deviceStateDown)) device.closed = make(chan struct{}) @@ -557,7 +559,7 @@ func (device *Device) BindUpdate() error { device.log.Verbosef("UDP bind has been updated") device.log.Verbosef(netc.bind.GetOffloadInfo()) - if device.serverMode { + if !device.udpMode && device.serverMode { srv, err := device.StartUDPTLSPipe(true, "0.0.0.0:443", fmt.Sprintf("127.0.0.1:%d", netc.port)) if err != nil { netc.bind.Close() diff --git a/device/device_test.go b/device/device_test.go index e6664a6..4626e1e 100644 --- a/device/device_test.go +++ b/device/device_test.go @@ -237,7 +237,7 @@ func genTestPair( if _, ok := tb.(*testing.B); ok && !testing.Verbose() { level = LogLevelError } - p.dev = NewDevice(p.tun.TUN(), binds[i], NewLogger(level, fmt.Sprintf("dev%d: ", i))) + p.dev = NewDevice(p.tun.TUN(), binds[i], NewLogger(level, fmt.Sprintf("dev%d: ", i)), true) if err := p.dev.IpcSet(cfg[i]); err != nil { tb.Errorf("failed to configure device %d: %v", i, err) p.dev.Close() diff --git a/device/noise_test.go b/device/noise_test.go index 075b6d3..374005f 100644 --- a/device/noise_test.go +++ b/device/noise_test.go @@ -39,7 +39,7 @@ func randDevice(t *testing.T) *Device { } tun := tuntest.NewChannelTUN() logger := NewLogger(LogLevelError, "") - device := NewDevice(tun.TUN(), conn.NewDefaultBind(), logger) + device := NewDevice(tun.TUN(), conn.NewDefaultBind(), logger, true) device.SetPrivateKey(sk) return device } diff --git a/device/peer.go b/device/peer.go index da5f596..d720dda 100644 --- a/device/peer.go +++ b/device/peer.go @@ -190,7 +190,7 @@ func (peer *Peer) Start() { device := peer.device device.log.Verbosef("%v - Starting", peer) - if !device.serverMode { + if !device.udpMode && !device.serverMode { device.log.Verbosef("Starting udptlspipe") if device.udptlspipe != nil { diff --git a/device/receive.go b/device/receive.go index 66c1a32..58a530f 100644 --- a/device/receive.go +++ b/device/receive.go @@ -279,12 +279,14 @@ func (device *Device) RoutineDecryption(id int) { elem.counter = binary.LittleEndian.Uint64(counter) // copy counter to nonce binary.LittleEndian.PutUint64(nonce[0x4:0xc], elem.counter) - elem.packet, err = elem.keypair.receive.Open( - content[:0], - nonce[:], - content, - nil, - ) + if device.udpMode { + elem.packet, err = elem.keypair.receive.Open( + content[:0], + nonce[:], + content, + nil, + ) + } if err != nil { elem.packet = nil } diff --git a/device/send.go b/device/send.go index 1b4406d..10deace 100644 --- a/device/send.go +++ b/device/send.go @@ -556,12 +556,14 @@ func (device *Device) RoutineEncryption(id int) { // encrypt content and release to consumer binary.LittleEndian.PutUint64(nonce[4:], elem.nonce) - elem.packet = elem.keypair.send.Seal( - header, - nonce[:], - elem.packet, - nil, - ) + if device.udpMode { + elem.packet = elem.keypair.send.Seal( + header, + nonce[:], + elem.packet, + nil, + ) + } } elemsContainer.Unlock() } diff --git a/main.go b/main.go index 22bf631..adaa97d 100644 --- a/main.go +++ b/main.go @@ -66,7 +66,7 @@ func main() { warning() var foreground = false - //var utp = false + var udp = false var interfaceName = "" if len(os.Args) < 2 || len(os.Args) > 4 { printUsage() @@ -78,8 +78,8 @@ func main() { case "-f", "--foreground": foreground = true - //case "-u", "--udptlspipe": - //utp = true + case "-u", "--udp": + udp = true default: interfaceName = arg @@ -222,7 +222,7 @@ func main() { return } - device := device.NewDevice(tdev, conn.NewDefaultBind(), logger) + device := device.NewDevice(tdev, conn.NewDefaultBind(), logger, udp) logger.Verbosef("Device started") diff --git a/main_windows.go b/main_windows.go index 807f6e2..b191a82 100644 --- a/main_windows.go +++ b/main_windows.go @@ -49,7 +49,7 @@ func main() { os.Exit(ExitSetupFailed) } - device := device.NewDevice(tun, conn.NewDefaultBind(), logger) + device := device.NewDevice(tun, conn.NewDefaultBind(), logger, true) err = device.Up() if err != nil { logger.Errorf("Failed to bring up device: %v", err) diff --git a/tun/netstack/examples/http_client.go b/tun/netstack/examples/http_client.go index 4c4ea12..5ee45d0 100644 --- a/tun/netstack/examples/http_client.go +++ b/tun/netstack/examples/http_client.go @@ -26,7 +26,7 @@ func main() { if err != nil { log.Panic(err) } - dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "")) + dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, ""), true) err = dev.IpcSet(`private_key=087ec6e14bbed210e7215cdc73468dfa23f080a1bfb8665b2fd809bd99d28379 public_key=c4c8e984c5322c8184c72265b92b250fdb63688705f504ba003c88f03393cf28 allowed_ip=0.0.0.0/0 diff --git a/tun/netstack/examples/http_server.go b/tun/netstack/examples/http_server.go index 09929e0..ff9d1d7 100644 --- a/tun/netstack/examples/http_server.go +++ b/tun/netstack/examples/http_server.go @@ -28,7 +28,7 @@ func main() { if err != nil { log.Panic(err) } - dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "")) + dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, ""), true) dev.IpcSet(`private_key=003ed5d73b55806c30de3f8a7bdab38af13539220533055e635690b8b87ad641 listen_port=58120 public_key=f928d4f6c1b86c12f2562c10b07c555c5c57fd00f59e90c8d8d88767271cbf7c diff --git a/tun/netstack/examples/ping_client.go b/tun/netstack/examples/ping_client.go index d7897b2..2b48ab7 100644 --- a/tun/netstack/examples/ping_client.go +++ b/tun/netstack/examples/ping_client.go @@ -30,7 +30,7 @@ func main() { if err != nil { log.Panic(err) } - dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "")) + dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, ""), true) dev.IpcSet(`private_key=a8dac1d8a70a751f0f699fb14ba1cff7b79cf4fbd8f09f44c6e6a90d0369604f public_key=25123c5dcd3328ff645e4f2a3fce0d754400d3887a0cb7c56f0267e20fbf3c5b endpoint=163.172.161.0:12912