mirror of
https://git.zx2c4.com/wireguard-go
synced 2024-11-15 09:15:14 +01:00
87 lines
1.5 KiB
Go
87 lines
1.5 KiB
Go
|
/* SPDX-License-Identifier: MIT
|
||
|
*
|
||
|
* Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
|
||
|
*/
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"git.zx2c4.com/wireguard-go/tun"
|
||
|
"os"
|
||
|
"os/signal"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
ExitSetupSuccess = 0
|
||
|
ExitSetupFailed = 1
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
if len(os.Args) != 1 {
|
||
|
os.Exit(ExitSetupFailed)
|
||
|
}
|
||
|
//configFile := os.Args[1]
|
||
|
interfaceName := "TODO"
|
||
|
|
||
|
logger := NewLogger(
|
||
|
LogLevelDebug,
|
||
|
fmt.Sprintf("(%s) ", interfaceName),
|
||
|
)
|
||
|
logger.Info.Println("Starting wireguard-go version", WireGuardGoVersion)
|
||
|
logger.Debug.Println("Debug log enabled")
|
||
|
|
||
|
tun, err := tun.CreateTUN(interfaceName)
|
||
|
if err == nil {
|
||
|
realInterfaceName, err2 := tun.Name()
|
||
|
if err2 == nil {
|
||
|
interfaceName = realInterfaceName
|
||
|
}
|
||
|
} else {
|
||
|
logger.Error.Println("Failed to create TUN device:", err)
|
||
|
os.Exit(ExitSetupFailed)
|
||
|
}
|
||
|
|
||
|
device := NewDevice(tun, logger)
|
||
|
logger.Info.Println("Device started")
|
||
|
|
||
|
uapi, err := UAPIListen(interfaceName)
|
||
|
if err != nil {
|
||
|
logger.Error.Println("Failed to listen on uapi socket:", err)
|
||
|
os.Exit(ExitSetupFailed)
|
||
|
}
|
||
|
|
||
|
errs := make(chan error)
|
||
|
term := make(chan os.Signal, 1)
|
||
|
|
||
|
go func() {
|
||
|
for {
|
||
|
conn, err := uapi.Accept()
|
||
|
if err != nil {
|
||
|
errs <- err
|
||
|
return
|
||
|
}
|
||
|
go ipcHandle(device, conn)
|
||
|
}
|
||
|
}()
|
||
|
logger.Info.Println("UAPI listener started")
|
||
|
|
||
|
// wait for program to terminate
|
||
|
|
||
|
signal.Notify(term, os.Interrupt)
|
||
|
|
||
|
select {
|
||
|
case <-term:
|
||
|
case <-errs:
|
||
|
case <-device.Wait():
|
||
|
}
|
||
|
|
||
|
// clean up
|
||
|
|
||
|
uapi.Close()
|
||
|
device.Close()
|
||
|
|
||
|
logger.Info.Println("Shutting down")
|
||
|
}
|