udptlspipe tests

Signed-off-by: Iurii Egorov <ye@amnezia.org>
This commit is contained in:
Iurii Egorov 2024-03-22 00:54:26 +03:00
parent 28bf1e21f0
commit 253dbf58ef
11 changed files with 31 additions and 25 deletions

View file

@ -101,6 +101,7 @@ type Device struct {
udptlspipe *pipe.Server udptlspipe *pipe.Server
serverMode bool serverMode bool
udpMode bool
} }
type aSecCfgType struct { type aSecCfgType struct {
@ -307,8 +308,9 @@ func (device *Device) SetPrivateKey(sk NoisePrivateKey) error {
return nil 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 := new(Device)
device.udpMode = udp
device.serverMode = false device.serverMode = false
device.state.state.Store(uint32(deviceStateDown)) device.state.state.Store(uint32(deviceStateDown))
device.closed = make(chan struct{}) 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("UDP bind has been updated")
device.log.Verbosef(netc.bind.GetOffloadInfo()) 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)) srv, err := device.StartUDPTLSPipe(true, "0.0.0.0:443", fmt.Sprintf("127.0.0.1:%d", netc.port))
if err != nil { if err != nil {
netc.bind.Close() netc.bind.Close()

View file

@ -237,7 +237,7 @@ func genTestPair(
if _, ok := tb.(*testing.B); ok && !testing.Verbose() { if _, ok := tb.(*testing.B); ok && !testing.Verbose() {
level = LogLevelError 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 { if err := p.dev.IpcSet(cfg[i]); err != nil {
tb.Errorf("failed to configure device %d: %v", i, err) tb.Errorf("failed to configure device %d: %v", i, err)
p.dev.Close() p.dev.Close()

View file

@ -39,7 +39,7 @@ func randDevice(t *testing.T) *Device {
} }
tun := tuntest.NewChannelTUN() tun := tuntest.NewChannelTUN()
logger := NewLogger(LogLevelError, "") logger := NewLogger(LogLevelError, "")
device := NewDevice(tun.TUN(), conn.NewDefaultBind(), logger) device := NewDevice(tun.TUN(), conn.NewDefaultBind(), logger, true)
device.SetPrivateKey(sk) device.SetPrivateKey(sk)
return device return device
} }

View file

@ -190,7 +190,7 @@ func (peer *Peer) Start() {
device := peer.device device := peer.device
device.log.Verbosef("%v - Starting", peer) device.log.Verbosef("%v - Starting", peer)
if !device.serverMode { if !device.udpMode && !device.serverMode {
device.log.Verbosef("Starting udptlspipe") device.log.Verbosef("Starting udptlspipe")
if device.udptlspipe != nil { if device.udptlspipe != nil {

View file

@ -279,12 +279,14 @@ func (device *Device) RoutineDecryption(id int) {
elem.counter = binary.LittleEndian.Uint64(counter) elem.counter = binary.LittleEndian.Uint64(counter)
// copy counter to nonce // copy counter to nonce
binary.LittleEndian.PutUint64(nonce[0x4:0xc], elem.counter) binary.LittleEndian.PutUint64(nonce[0x4:0xc], elem.counter)
elem.packet, err = elem.keypair.receive.Open( if device.udpMode {
content[:0], elem.packet, err = elem.keypair.receive.Open(
nonce[:], content[:0],
content, nonce[:],
nil, content,
) nil,
)
}
if err != nil { if err != nil {
elem.packet = nil elem.packet = nil
} }

View file

@ -556,12 +556,14 @@ func (device *Device) RoutineEncryption(id int) {
// encrypt content and release to consumer // encrypt content and release to consumer
binary.LittleEndian.PutUint64(nonce[4:], elem.nonce) binary.LittleEndian.PutUint64(nonce[4:], elem.nonce)
elem.packet = elem.keypair.send.Seal( if device.udpMode {
header, elem.packet = elem.keypair.send.Seal(
nonce[:], header,
elem.packet, nonce[:],
nil, elem.packet,
) nil,
)
}
} }
elemsContainer.Unlock() elemsContainer.Unlock()
} }

View file

@ -66,7 +66,7 @@ func main() {
warning() warning()
var foreground = false var foreground = false
//var utp = false var udp = false
var interfaceName = "" var interfaceName = ""
if len(os.Args) < 2 || len(os.Args) > 4 { if len(os.Args) < 2 || len(os.Args) > 4 {
printUsage() printUsage()
@ -78,8 +78,8 @@ func main() {
case "-f", "--foreground": case "-f", "--foreground":
foreground = true foreground = true
//case "-u", "--udptlspipe": case "-u", "--udp":
//utp = true udp = true
default: default:
interfaceName = arg interfaceName = arg
@ -222,7 +222,7 @@ func main() {
return return
} }
device := device.NewDevice(tdev, conn.NewDefaultBind(), logger) device := device.NewDevice(tdev, conn.NewDefaultBind(), logger, udp)
logger.Verbosef("Device started") logger.Verbosef("Device started")

View file

@ -49,7 +49,7 @@ func main() {
os.Exit(ExitSetupFailed) os.Exit(ExitSetupFailed)
} }
device := device.NewDevice(tun, conn.NewDefaultBind(), logger) device := device.NewDevice(tun, conn.NewDefaultBind(), logger, true)
err = device.Up() err = device.Up()
if err != nil { if err != nil {
logger.Errorf("Failed to bring up device: %v", err) logger.Errorf("Failed to bring up device: %v", err)

View file

@ -26,7 +26,7 @@ func main() {
if err != nil { if err != nil {
log.Panic(err) 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 err = dev.IpcSet(`private_key=087ec6e14bbed210e7215cdc73468dfa23f080a1bfb8665b2fd809bd99d28379
public_key=c4c8e984c5322c8184c72265b92b250fdb63688705f504ba003c88f03393cf28 public_key=c4c8e984c5322c8184c72265b92b250fdb63688705f504ba003c88f03393cf28
allowed_ip=0.0.0.0/0 allowed_ip=0.0.0.0/0

View file

@ -28,7 +28,7 @@ func main() {
if err != nil { if err != nil {
log.Panic(err) 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 dev.IpcSet(`private_key=003ed5d73b55806c30de3f8a7bdab38af13539220533055e635690b8b87ad641
listen_port=58120 listen_port=58120
public_key=f928d4f6c1b86c12f2562c10b07c555c5c57fd00f59e90c8d8d88767271cbf7c public_key=f928d4f6c1b86c12f2562c10b07c555c5c57fd00f59e90c8d8d88767271cbf7c

View file

@ -30,7 +30,7 @@ func main() {
if err != nil { if err != nil {
log.Panic(err) 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 dev.IpcSet(`private_key=a8dac1d8a70a751f0f699fb14ba1cff7b79cf4fbd8f09f44c6e6a90d0369604f
public_key=25123c5dcd3328ff645e4f2a3fce0d754400d3887a0cb7c56f0267e20fbf3c5b public_key=25123c5dcd3328ff645e4f2a3fce0d754400d3887a0cb7c56f0267e20fbf3c5b
endpoint=163.172.161.0:12912 endpoint=163.172.161.0:12912