f68f6c9b37
Merge in DNS/adguard-home from fix-static-ip-check to master
Squashed commit of the following:
commit af365c106f3d620afc77492a06f5368611328f5f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Mon Feb 15 18:55:35 2021 +0300
all: doc changes
commit 922afb262458fc488e03cad232430d90c504f2f3
Merge: 43fec5fb dbcc55f5
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Mon Feb 15 18:53:31 2021 +0300
Merge branch 'master' into fix-static-ip-check
commit 43fec5fb79f5c67b375da00aa73d11b3ed9ba3a4
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Mon Feb 15 18:37:16 2021 +0300
all: fix statip ip ck
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package sysutil
|
|
|
|
import (
|
|
"net"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/AdguardTeam/AdGuardHome/internal/agherr"
|
|
"github.com/AdguardTeam/golibs/log"
|
|
)
|
|
|
|
// ErrNoStaticIPInfo is returned by IfaceHasStaticIP when no information about
|
|
// the IP being static is available.
|
|
const ErrNoStaticIPInfo agherr.Error = "no information about static ip"
|
|
|
|
// IfaceHasStaticIP checks if interface is configured to have static IP address.
|
|
// If it can't give a definitive answer, it returns false and an error for which
|
|
// errors.Is(err, ErrNoStaticIPInfo) is true.
|
|
func IfaceHasStaticIP(ifaceName string) (has bool, err error) {
|
|
return ifaceHasStaticIP(ifaceName)
|
|
}
|
|
|
|
// IfaceSetStaticIP sets static IP address for network interface.
|
|
func IfaceSetStaticIP(ifaceName string) (err error) {
|
|
return ifaceSetStaticIP(ifaceName)
|
|
}
|
|
|
|
// GatewayIP returns IP address of interface's gateway.
|
|
func GatewayIP(ifaceName string) net.IP {
|
|
cmd := exec.Command("ip", "route", "show", "dev", ifaceName)
|
|
log.Tracef("executing %s %v", cmd.Path, cmd.Args)
|
|
d, err := cmd.Output()
|
|
if err != nil || cmd.ProcessState.ExitCode() != 0 {
|
|
return nil
|
|
}
|
|
|
|
fields := strings.Fields(string(d))
|
|
// The meaningful "ip route" command output should contain the word
|
|
// "default" at first field and default gateway IP address at third
|
|
// field.
|
|
if len(fields) < 3 || fields[0] != "default" {
|
|
return nil
|
|
}
|
|
|
|
return net.ParseIP(fields[2])
|
|
}
|