diff --git a/nameservers_darwin.go b/nameservers_darwin.go index 3aef77d..b6b1543 100644 --- a/nameservers_darwin.go +++ b/nameservers_darwin.go @@ -7,6 +7,7 @@ import ( "bytes" "context" "fmt" + "io" "net" "os/exec" "regexp" @@ -244,3 +245,38 @@ func getAllDHCPNameservers() []string { return allNameservers } + +func patchNetIfaceName(iface *net.Interface) (bool, error) { + b, err := exec.Command("networksetup", "-listnetworkserviceorder").Output() + if err != nil { + return false, err + } + + patched := false + if name := networkServiceName(iface.Name, bytes.NewReader(b)); name != "" { + patched = true + iface.Name = name + } + return patched, nil +} + +func networkServiceName(ifaceName string, r io.Reader) string { + scanner := bufio.NewScanner(r) + prevLine := "" + for scanner.Scan() { + line := scanner.Text() + if strings.Contains(line, "*") { + // Network services is disabled. + continue + } + if !strings.Contains(line, "Device: "+ifaceName) { + prevLine = line + continue + } + parts := strings.SplitN(prevLine, " ", 2) + if len(parts) == 2 { + return strings.TrimSpace(parts[1]) + } + } + return "" +} diff --git a/staticdns.go b/staticdns.go index 5cb1697..1bfd556 100644 --- a/staticdns.go +++ b/staticdns.go @@ -1,12 +1,8 @@ package ctrld import ( - "bufio" - "bytes" - "io" "net" "os" - "os/exec" "path/filepath" "runtime" "strings" @@ -81,38 +77,3 @@ func SavedStaticNameservers(iface *net.Interface) ([]string, string) { } return ns, file } - -func patchNetIfaceName(iface *net.Interface) (bool, error) { - b, err := exec.Command("networksetup", "-listnetworkserviceorder").Output() - if err != nil { - return false, err - } - - patched := false - if name := networkServiceName(iface.Name, bytes.NewReader(b)); name != "" { - patched = true - iface.Name = name - } - return patched, nil -} - -func networkServiceName(ifaceName string, r io.Reader) string { - scanner := bufio.NewScanner(r) - prevLine := "" - for scanner.Scan() { - line := scanner.Text() - if strings.Contains(line, "*") { - // Network services is disabled. - continue - } - if !strings.Contains(line, "Device: "+ifaceName) { - prevLine = line - continue - } - parts := strings.SplitN(prevLine, " ", 2) - if len(parts) == 2 { - return strings.TrimSpace(parts[1]) - } - } - return "" -}