diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 81 |
1 files changed, 39 insertions, 42 deletions
@@ -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") } |