From 89d00452144dd1f517e90b4ea4c72ca9ee12ba3b Mon Sep 17 00:00:00 2001 From: Mathias Hall-Andersen Date: Sun, 3 Sep 2017 18:10:06 +0200 Subject: Fixed TUN interface implementation os OS X --- src/uapi_darwin.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/uapi_darwin.go') diff --git a/src/uapi_darwin.go b/src/uapi_darwin.go index 9eee53c..13e5c4f 100644 --- a/src/uapi_darwin.go +++ b/src/uapi_darwin.go @@ -2,11 +2,22 @@ package main import ( "fmt" + "golang.org/x/sys/unix" "net" "os" + "path" "time" ) +const ( + ipcErrorIO = -int64(unix.EIO) + ipcErrorNotDefined = -int64(unix.ENODEV) + ipcErrorProtocol = -int64(unix.EPROTO) + ipcErrorInvalid = -int64(unix.EINVAL) + socketDirectory = "/var/run/wireguard" + socketName = "%s.sock" +) + type UAPIListener struct { listener net.Listener // unix socket listener connNew chan net.Conn @@ -35,9 +46,20 @@ func (l *UAPIListener) Addr() net.Addr { func NewUAPIListener(name string) (net.Listener, error) { + // check if path exist + + err := os.MkdirAll(socketDirectory, 077) + if err != nil && !os.IsExist(err) { + return nil, err + } + // open UNIX socket - socketPath := fmt.Sprintf("/var/run/wireguard/%s.sock", name) + socketPath := path.Join( + socketDirectory, + fmt.Sprintf(socketName, name), + ) + listener, err := net.Listen("unix", socketPath) if err != nil { return nil, err -- cgit v1.2.3-59-g8ed1b