Pull request: aghnet: do not expect dhcpdc.conf to exist
Updates #3257.
Squashed commit of the following:
commit f3c335932e365dace0720e8986c217cf6f7ae162
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Tue Jun 15 19:56:23 2021 +0300
aghnet: fix docs, names
commit 513ade2e46a9292411c9b9636437f17ee549ea5e
Merge: aa58f1dd 9f5a015f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Tue Jun 15 19:43:24 2021 +0300
Merge branch 'master' into 3257-dhcpdc-conf
commit aa58f1ddb8065cafabc835decc5bf73ffb49e742
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date: Tue Jun 15 17:18:19 2021 +0300
aghnet: do not expect dhcpdc.conf to exist
This commit is contained in:
parent
9f5a015f42
commit
39ee66266a
|
@ -48,6 +48,7 @@ released by then.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Errors when setting static IP on Linux ([#3257]).
|
||||||
- Treatment of domain names and FQDNs in custom rules with `$dnsrewrite` that
|
- Treatment of domain names and FQDNs in custom rules with `$dnsrewrite` that
|
||||||
use the `PTR` type ([#3256]).
|
use the `PTR` type ([#3256]).
|
||||||
- Redundant hostname generating while loading static leases with empty hostname
|
- Redundant hostname generating while loading static leases with empty hostname
|
||||||
|
@ -75,6 +76,7 @@ released by then.
|
||||||
[#3194]: https://github.com/AdguardTeam/AdGuardHome/issues/3194
|
[#3194]: https://github.com/AdguardTeam/AdGuardHome/issues/3194
|
||||||
[#3198]: https://github.com/AdguardTeam/AdGuardHome/issues/3198
|
[#3198]: https://github.com/AdguardTeam/AdGuardHome/issues/3198
|
||||||
[#3256]: https://github.com/AdguardTeam/AdGuardHome/issues/3256
|
[#3256]: https://github.com/AdguardTeam/AdGuardHome/issues/3256
|
||||||
|
[#3257]: https://github.com/AdguardTeam/AdGuardHome/issues/3257
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@ import (
|
||||||
"github.com/google/renameio/maybe"
|
"github.com/google/renameio/maybe"
|
||||||
)
|
)
|
||||||
|
|
||||||
// maxConfigFileSize is the maximum length of interfaces configuration file.
|
// maxConfigFileSize is the maximum assumed length of the interface
|
||||||
|
// configuration file.
|
||||||
const maxConfigFileSize = 1024 * 1024
|
const maxConfigFileSize = 1024 * 1024
|
||||||
|
|
||||||
func ifaceHasStaticIP(ifaceName string) (has bool, err error) {
|
func ifaceHasStaticIP(ifaceName string) (has bool, err error) {
|
||||||
|
@ -130,6 +131,8 @@ func ifacesStaticConfig(r io.Reader, ifaceName string) (has bool, err error) {
|
||||||
return false, s.Err()
|
return false, s.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ifaceSetStaticIP configures the system to retain its current IP on the
|
||||||
|
// interface through dhcpdc.conf.
|
||||||
func ifaceSetStaticIP(ifaceName string) (err error) {
|
func ifaceSetStaticIP(ifaceName string) (err error) {
|
||||||
ipNet := GetSubnet(ifaceName)
|
ipNet := GetSubnet(ifaceName)
|
||||||
if ipNet.IP == nil {
|
if ipNet.IP == nil {
|
||||||
|
@ -137,10 +140,10 @@ func ifaceSetStaticIP(ifaceName string) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
gatewayIP := GatewayIP(ifaceName)
|
gatewayIP := GatewayIP(ifaceName)
|
||||||
add := updateStaticIPdhcpcdConf(ifaceName, ipNet.String(), gatewayIP, ipNet.IP)
|
add := dhcpcdConfIface(ifaceName, ipNet, gatewayIP, ipNet.IP)
|
||||||
|
|
||||||
body, err := os.ReadFile("/etc/dhcpcd.conf")
|
body, err := os.ReadFile("/etc/dhcpcd.conf")
|
||||||
if err != nil {
|
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,23 +156,23 @@ func ifaceSetStaticIP(ifaceName string) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateStaticIPdhcpcdConf sets static IP address for the interface by writing
|
// dhcpcdConfIface returns configuration lines for the dhcpdc.conf files that
|
||||||
// into dhcpd.conf.
|
// configure the interface to have a static IP.
|
||||||
func updateStaticIPdhcpcdConf(ifaceName, ip string, gatewayIP, dnsIP net.IP) string {
|
func dhcpcdConfIface(ifaceName string, ipNet *net.IPNet, gatewayIP, dnsIP net.IP) (conf string) {
|
||||||
var body []byte
|
var body []byte
|
||||||
|
|
||||||
add := fmt.Sprintf("\ninterface %s\nstatic ip_address=%s\n",
|
add := fmt.Sprintf(
|
||||||
ifaceName, ip)
|
"\n# %[1]s added by AdGuard Home.\ninterface %[1]s\nstatic ip_address=%s\n",
|
||||||
|
ifaceName,
|
||||||
|
ipNet)
|
||||||
body = append(body, []byte(add)...)
|
body = append(body, []byte(add)...)
|
||||||
|
|
||||||
if gatewayIP != nil {
|
if gatewayIP != nil {
|
||||||
add = fmt.Sprintf("static routers=%s\n",
|
add = fmt.Sprintf("static routers=%s\n", gatewayIP)
|
||||||
gatewayIP)
|
|
||||||
body = append(body, []byte(add)...)
|
body = append(body, []byte(add)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
add = fmt.Sprintf("static domain_name_servers=%s\n\n",
|
add = fmt.Sprintf("static domain_name_servers=%s\n\n", dnsIP)
|
||||||
dnsIP)
|
|
||||||
body = append(body, []byte(add)...)
|
body = append(body, []byte(add)...)
|
||||||
|
|
||||||
return string(body)
|
return string(body)
|
||||||
|
|
|
@ -102,22 +102,29 @@ func TestSetStaticIPdhcpcdConf(t *testing.T) {
|
||||||
routers net.IP
|
routers net.IP
|
||||||
}{{
|
}{{
|
||||||
name: "with_gateway",
|
name: "with_gateway",
|
||||||
dhcpcdConf: nl + `interface wlan0` + nl +
|
dhcpcdConf: nl + `# wlan0 added by AdGuard Home.` + nl +
|
||||||
|
`interface wlan0` + nl +
|
||||||
`static ip_address=192.168.0.2/24` + nl +
|
`static ip_address=192.168.0.2/24` + nl +
|
||||||
`static routers=192.168.0.1` + nl +
|
`static routers=192.168.0.1` + nl +
|
||||||
`static domain_name_servers=192.168.0.2` + nl + nl,
|
`static domain_name_servers=192.168.0.2` + nl + nl,
|
||||||
routers: net.IP{192, 168, 0, 1},
|
routers: net.IP{192, 168, 0, 1},
|
||||||
}, {
|
}, {
|
||||||
name: "without_gateway",
|
name: "without_gateway",
|
||||||
dhcpcdConf: nl + `interface wlan0` + nl +
|
dhcpcdConf: nl + `# wlan0 added by AdGuard Home.` + nl +
|
||||||
|
`interface wlan0` + nl +
|
||||||
`static ip_address=192.168.0.2/24` + nl +
|
`static ip_address=192.168.0.2/24` + nl +
|
||||||
`static domain_name_servers=192.168.0.2` + nl + nl,
|
`static domain_name_servers=192.168.0.2` + nl + nl,
|
||||||
routers: nil,
|
routers: nil,
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
ipNet := &net.IPNet{
|
||||||
|
IP: net.IP{192, 168, 0, 2},
|
||||||
|
Mask: net.IPMask{255, 255, 255, 0},
|
||||||
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
s := updateStaticIPdhcpcdConf("wlan0", "192.168.0.2/24", tc.routers, net.IP{192, 168, 0, 2})
|
s := dhcpcdConfIface("wlan0", ipNet, tc.routers, net.IP{192, 168, 0, 2})
|
||||||
assert.Equal(t, tc.dhcpcdConf, s)
|
assert.Equal(t, tc.dhcpcdConf, s)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue