aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.go')
-rw-r--r--src/main.go73
1 files changed, 48 insertions, 25 deletions
diff --git a/src/main.go b/src/main.go
index dc27472..74e7ec9 100644
--- a/src/main.go
+++ b/src/main.go
@@ -1,23 +1,45 @@
package main
import (
- "fmt"
"log"
- "net"
"os"
"runtime"
)
-/* TODO: Fix logging
- * TODO: Fix daemon
- */
-
func main() {
- if len(os.Args) != 2 {
+ // parse arguments
+
+ var foreground bool
+ var interfaceName string
+ if len(os.Args) < 2 || len(os.Args) > 3 {
+ return
+ }
+
+ switch os.Args[1] {
+ case "-f", "--foreground":
+ foreground = true
+ if len(os.Args) != 3 {
+ return
+ }
+ interfaceName = os.Args[2]
+ default:
+ foreground = false
+ if len(os.Args) != 2 {
+ return
+ }
+ interfaceName = os.Args[1]
+ }
+
+ // daemonize the process
+
+ if !foreground {
+ err := Daemonize()
+ if err != nil {
+ log.Println("Failed to daemonize:", err)
+ }
return
}
- deviceName := os.Args[1]
// increase number of go workers (for Go <1.5)
@@ -25,32 +47,33 @@ func main() {
// open TUN device
- tun, err := CreateTUN(deviceName)
+ tun, err := CreateTUN(interfaceName)
log.Println(tun, err)
if err != nil {
return
}
+ // create wireguard device
+
device := NewDevice(tun, LogLevelDebug)
- device.log.Info.Println("Starting device")
+
+ logInfo := device.log.Info
+ logError := device.log.Error
+ logInfo.Println("Starting device")
// start configuration lister
- go func() {
- socketPath := fmt.Sprintf("/var/run/wireguard/%s.sock", deviceName)
- l, err := net.Listen("unix", socketPath)
- if err != nil {
- log.Fatal("listen error:", err)
- }
+ uapi, err := NewUAPIListener(interfaceName)
+ if err != nil {
+ logError.Fatal("UAPI listen error:", err)
+ }
+ defer uapi.Close()
- for {
- conn, err := l.Accept()
- if err != nil {
- log.Fatal("accept error:", err)
- }
- go ipcHandle(device, conn)
+ for {
+ conn, err := uapi.Accept()
+ if err != nil {
+ logError.Fatal("accept error:", err)
}
- }()
-
- device.Wait()
+ go ipcHandle(device, conn)
+ }
}