From 47c280cf1d07f08e14c144486d34bea37ce80f5d Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Thu, 19 Jan 2023 12:24:21 +0700 Subject: [PATCH] cmd/ctrld: use network service on darwin --- cmd/ctrld/cli.go | 3 +++ cmd/ctrld/net_darwin.go | 34 ++++++++++++++++++++++++++++++++++ cmd/ctrld/net_others.go | 7 +++++++ 3 files changed, 44 insertions(+) create mode 100644 cmd/ctrld/net_darwin.go create mode 100644 cmd/ctrld/net_others.go diff --git a/cmd/ctrld/cli.go b/cmd/ctrld/cli.go index 42bde24..97faa91 100644 --- a/cmd/ctrld/cli.go +++ b/cmd/ctrld/cli.go @@ -613,5 +613,8 @@ func netIfaceFromName(ifaceName string) (*net.Interface, error) { if iface == nil { return nil, errors.New("interface not found") } + if err := patchNetIfaceName(iface); err != nil { + return nil, err + } return iface, err } diff --git a/cmd/ctrld/net_darwin.go b/cmd/ctrld/net_darwin.go new file mode 100644 index 0000000..223cc75 --- /dev/null +++ b/cmd/ctrld/net_darwin.go @@ -0,0 +1,34 @@ +package main + +import ( + "bufio" + "bytes" + "net" + "os/exec" + "strings" +) + +func patchNetIfaceName(iface *net.Interface) error { + b, err := exec.Command("networksetup", "-listnetworkserviceorder").Output() + if err != nil { + return err + } + + scanner := bufio.NewScanner(bytes.NewReader(b)) + for scanner.Scan() { + line := scanner.Text() + if strings.Contains(line, "*") { + // Network services is disabled. + continue + } + if !strings.Contains(line, "Device: "+iface.Name) { + continue + } + parts := strings.Split(line, ",") + if _, networkServiceName, ok := strings.Cut(parts[0], "(Hardware Port: "); ok { + mainLog.Debug().Str("network_service", networkServiceName).Msg("found network service name for interface") + iface.Name = networkServiceName + } + } + return nil +} diff --git a/cmd/ctrld/net_others.go b/cmd/ctrld/net_others.go new file mode 100644 index 0000000..9093395 --- /dev/null +++ b/cmd/ctrld/net_others.go @@ -0,0 +1,7 @@ +//go:build !darwin + +package main + +import "net" + +func patchNetIfaceName(iface *net.Interface) error { return nil }