aboutsummaryrefslogtreecommitdiffstats
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go81
1 files changed, 39 insertions, 42 deletions
diff --git a/main.go b/main.go
index 053f488..e016116 100644
--- a/main.go
+++ b/main.go
@@ -1,8 +1,8 @@
-// +build !windows
+//go:build !windows
/* SPDX-License-Identifier: MIT
*
- * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
+ * Copyright (C) 2017-2023 WireGuard LLC. All Rights Reserved.
*/
package main
@@ -13,8 +13,9 @@ import (
"os/signal"
"runtime"
"strconv"
- "syscall"
+ "golang.org/x/sys/unix"
+ "golang.zx2c4.com/wireguard/conn"
"golang.zx2c4.com/wireguard/device"
"golang.zx2c4.com/wireguard/ipc"
"golang.zx2c4.com/wireguard/tun"
@@ -32,32 +33,33 @@ const (
)
func printUsage() {
- fmt.Printf("usage:\n")
- fmt.Printf("%s [-f/--foreground] INTERFACE-NAME\n", os.Args[0])
+ fmt.Printf("Usage: %s [-f/--foreground] INTERFACE-NAME\n", os.Args[0])
}
func warning() {
- if runtime.GOOS != "linux" || os.Getenv(ENV_WG_PROCESS_FOREGROUND) == "1" {
+ switch runtime.GOOS {
+ case "linux", "freebsd", "openbsd":
+ if os.Getenv(ENV_WG_PROCESS_FOREGROUND) == "1" {
+ return
+ }
+ default:
return
}
- fmt.Fprintln(os.Stderr, "WARNING WARNING WARNING WARNING WARNING WARNING WARNING")
- fmt.Fprintln(os.Stderr, "W G")
- fmt.Fprintln(os.Stderr, "W You are running this software on a Linux kernel, G")
- fmt.Fprintln(os.Stderr, "W which is probably unnecessary and misguided. This G")
- fmt.Fprintln(os.Stderr, "W is because the Linux kernel has built-in first G")
- fmt.Fprintln(os.Stderr, "W class support for WireGuard, and this support is G")
- fmt.Fprintln(os.Stderr, "W much more refined than this slower userspace G")
- fmt.Fprintln(os.Stderr, "W implementation. For more information on G")
- fmt.Fprintln(os.Stderr, "W installing the kernel module, please visit: G")
- fmt.Fprintln(os.Stderr, "W https://www.wireguard.com/install G")
- fmt.Fprintln(os.Stderr, "W G")
- fmt.Fprintln(os.Stderr, "WARNING WARNING WARNING WARNING WARNING WARNING WARNING")
+ fmt.Fprintln(os.Stderr, "┌──────────────────────────────────────────────────────┐")
+ fmt.Fprintln(os.Stderr, "│ │")
+ fmt.Fprintln(os.Stderr, "│ Running wireguard-go is not required because this │")
+ fmt.Fprintln(os.Stderr, "│ kernel has first class support for WireGuard. For │")
+ fmt.Fprintln(os.Stderr, "│ information on installing the kernel module, │")
+ fmt.Fprintln(os.Stderr, "│ please visit: │")
+ fmt.Fprintln(os.Stderr, "│ https://www.wireguard.com/install/ │")
+ fmt.Fprintln(os.Stderr, "│ │")
+ fmt.Fprintln(os.Stderr, "└──────────────────────────────────────────────────────┘")
}
func main() {
if len(os.Args) == 2 && os.Args[1] == "--version" {
- fmt.Printf("wireguard-go v%s\n\nUserspace WireGuard daemon for %s-%s.\nInformation available at https://www.wireguard.com.\nCopyright (C) Jason A. Donenfeld <Jason@zx2c4.com>.\n", device.WireGuardGoVersion, runtime.GOOS, runtime.GOARCH)
+ fmt.Printf("wireguard-go v%s\n\nUserspace WireGuard daemon for %s-%s.\nInformation available at https://www.wireguard.com.\nCopyright (C) Jason A. Donenfeld <Jason@zx2c4.com>.\n", Version, runtime.GOOS, runtime.GOARCH)
return
}
@@ -97,21 +99,19 @@ func main() {
logLevel := func() int {
switch os.Getenv("LOG_LEVEL") {
- case "debug":
- return device.LogLevelDebug
- case "info":
- return device.LogLevelInfo
+ case "verbose", "debug":
+ return device.LogLevelVerbose
case "error":
return device.LogLevelError
case "silent":
return device.LogLevelSilent
}
- return device.LogLevelInfo
+ return device.LogLevelError
}()
// open TUN device (or use supplied fd)
- tun, err := func() (tun.Device, error) {
+ tdev, err := func() (tun.Device, error) {
tunFdStr := os.Getenv(ENV_WG_TUN_FD)
if tunFdStr == "" {
return tun.CreateTUN(interfaceName, device.DefaultMTU)
@@ -124,7 +124,7 @@ func main() {
return nil, err
}
- err = syscall.SetNonblock(int(fd), true)
+ err = unix.SetNonblock(int(fd), true)
if err != nil {
return nil, err
}
@@ -134,7 +134,7 @@ func main() {
}()
if err == nil {
- realInterfaceName, err2 := tun.Name()
+ realInterfaceName, err2 := tdev.Name()
if err2 == nil {
interfaceName = realInterfaceName
}
@@ -145,12 +145,10 @@ func main() {
fmt.Sprintf("(%s) ", interfaceName),
)
- logger.Info.Println("Starting wireguard-go version", device.WireGuardGoVersion)
-
- logger.Debug.Println("Debug log enabled")
+ logger.Verbosef("Starting wireguard-go version %s", Version)
if err != nil {
- logger.Error.Println("Failed to create TUN device:", err)
+ logger.Errorf("Failed to create TUN device: %v", err)
os.Exit(ExitSetupFailed)
}
@@ -171,9 +169,8 @@ func main() {
return os.NewFile(uintptr(fd), ""), nil
}()
-
if err != nil {
- logger.Error.Println("UAPI listen error:", err)
+ logger.Errorf("UAPI listen error: %v", err)
os.Exit(ExitSetupFailed)
return
}
@@ -199,7 +196,7 @@ func main() {
files[0], // stdin
files[1], // stdout
files[2], // stderr
- tun.File(),
+ tdev.File(),
fileUAPI,
},
Dir: ".",
@@ -208,7 +205,7 @@ func main() {
path, err := os.Executable()
if err != nil {
- logger.Error.Println("Failed to determine executable:", err)
+ logger.Errorf("Failed to determine executable: %v", err)
os.Exit(ExitSetupFailed)
}
@@ -218,23 +215,23 @@ func main() {
attr,
)
if err != nil {
- logger.Error.Println("Failed to daemonize:", err)
+ logger.Errorf("Failed to daemonize: %v", err)
os.Exit(ExitSetupFailed)
}
process.Release()
return
}
- device := device.NewDevice(tun, logger)
+ device := device.NewDevice(tdev, conn.NewDefaultBind(), logger)
- logger.Info.Println("Device started")
+ logger.Verbosef("Device started")
errs := make(chan error)
term := make(chan os.Signal, 1)
uapi, err := ipc.UAPIListen(interfaceName, fileUAPI)
if err != nil {
- logger.Error.Println("Failed to listen on uapi socket:", err)
+ logger.Errorf("Failed to listen on uapi socket: %v", err)
os.Exit(ExitSetupFailed)
}
@@ -249,11 +246,11 @@ func main() {
}
}()
- logger.Info.Println("UAPI listener started")
+ logger.Verbosef("UAPI listener started")
// wait for program to terminate
- signal.Notify(term, syscall.SIGTERM)
+ signal.Notify(term, unix.SIGTERM)
signal.Notify(term, os.Interrupt)
select {
@@ -267,5 +264,5 @@ func main() {
uapi.Close()
device.Close()
- logger.Info.Println("Shutting down")
+ logger.Verbosef("Shutting down")
}