diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index e97b53c..a386646 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -2223,3 +2223,8 @@ func absHomeDir(filename string) string { } return filepath.Join(dir, filename) } + +// ifaceUp reports whether the net interface is up. +func ifaceUp(iface *net.Interface) bool { + return iface != nil && iface.Flags&net.FlagUp != 0 +} diff --git a/cmd/cli/os_darwin.go b/cmd/cli/os_darwin.go index aa39094..3b21844 100644 --- a/cmd/cli/os_darwin.go +++ b/cmd/cli/os_darwin.go @@ -3,6 +3,7 @@ package cli import ( "bufio" "bytes" + "fmt" "net" "os/exec" @@ -36,10 +37,8 @@ func setDNS(iface *net.Interface, nameservers []string) error { cmd := "networksetup" args := []string{"-setdnsservers", iface.Name} args = append(args, nameservers...) - - if err := exec.Command(cmd, args...).Run(); err != nil { - mainLog.Load().Error().Err(err).Msgf("setDNS failed, ips = %q", nameservers) - return err + if out, err := exec.Command(cmd, args...).CombinedOutput(); err != nil { + return fmt.Errorf("%v: %w", string(out), err) } return nil } @@ -53,10 +52,8 @@ func resetDNS(iface *net.Interface) error { } cmd := "networksetup" args := []string{"-setdnsservers", iface.Name, "empty"} - - if err := exec.Command(cmd, args...).Run(); err != nil { - mainLog.Load().Error().Err(err).Msgf("resetDNS failed") - return err + if out, err := exec.Command(cmd, args...).CombinedOutput(); err != nil { + return fmt.Errorf("%v: %w", string(out), err) } return nil } @@ -71,7 +68,9 @@ func currentStaticDNS(iface *net.Interface) []string { args := []string{"-getdnsservers", iface.Name} out, err := exec.Command(cmd, args...).Output() if err != nil { - mainLog.Load().Error().Err(err).Msg("could not get current static DNS") + if ifaceUp(iface) { + mainLog.Load().Error().Err(err).Msg("could not get current static DNS") + } return nil } scanner := bufio.NewScanner(bytes.NewReader(out)) diff --git a/cmd/cli/os_windows.go b/cmd/cli/os_windows.go index bfb8cba..e185dc0 100644 --- a/cmd/cli/os_windows.go +++ b/cmd/cli/os_windows.go @@ -89,8 +89,7 @@ func resetDNS(iface *net.Interface) error { // Restoring ipv4 DHCP. output, err := netsh("interface", "ipv4", "set", "dnsserver", strconv.Itoa(iface.Index), "dhcp") if err != nil { - mainLog.Load().Error().Err(err).Msgf("failed to reset ipv4 DNS: %s", string(output)) - return err + return fmt.Errorf("%s: %w", string(output), err) } // If there's static DNS saved, restoring it. if nss := savedStaticNameservers(iface); len(nss) > 0 { @@ -178,12 +177,16 @@ func currentDNS(iface *net.Interface) []string { func currentStaticDNS(iface *net.Interface) []string { luid, err := winipcfg.LUIDFromIndex(uint32(iface.Index)) if err != nil { - mainLog.Load().Error().Err(err).Msg("could not get interface LUID") + if ifaceUp(iface) { + mainLog.Load().Error().Err(err).Msg("could not get interface LUID") + } return nil } guid, err := luid.GUID() if err != nil { - mainLog.Load().Error().Err(err).Msg("could not get interface GUID") + if ifaceUp(iface) { + mainLog.Load().Error().Err(err).Msg("could not get interface GUID") + } return nil } var ns []string diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index 7286acd..1940bd4 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -704,7 +704,9 @@ func withEachPhysicalInterfaces(excludeIfaceName, context string, f func(i *net. return } if err := f(netIface); err != nil { - mainLog.Load().Warn().Err(err).Msgf("failed to %s for interface: %q", context, i.Name) + if ifaceUp(netIface) { + mainLog.Load().Warn().Err(err).Msgf("failed to %s for interface: %q", context, i.Name) + } } else { mainLog.Load().Debug().Msgf("%s for interface %q successfully", context, i.Name) }