From fafd7a1e829d69d6a8d63ebc99090114f561cdd2 Mon Sep 17 00:00:00 2001
From: Eugene Burkov <e.burkov@adguard.com>
Date: Fri, 25 Nov 2022 18:21:25 +0300
Subject: [PATCH] Pull request: 4944-dhcp-creation

Merge in DNS/adguard-home from 4944-dhcp-creation to master

Updates #4944.
Updates #5191.

Squashed commit of the following:

commit f5bc5678bdf436e5eb7f17017dd78d8c8a127313
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date:   Fri Nov 25 18:07:35 2022 +0300

    all: log changes, imp log

commit 526fe711a2103ea11ab46992ee897a7d430ef773
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date:   Fri Nov 25 17:38:30 2022 +0300

    dhcpd: log creation err as debug
---
 CHANGELOG.md             |  8 ++++++++
 internal/dhcpd/config.go | 11 ++++++-----
 internal/dhcpd/dhcpd.go  |  6 +++---
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ba8ec28..c0fae395 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,11 @@ See also the [v0.107.20 GitHub milestone][ms-v0.107.20].
 [ms-v0.107.20]: https://github.com/AdguardTeam/AdGuardHome/milestone/56?closed=1
 -->
 
+### Changed
+
+- DHCP server initialization errors are now logged at debug level if the server
+  itself disabled ([#4944]).
+
 ### Fixed
 
 - The TLS initialization errors preventing AdGuard Home from starting ([#5189]).
@@ -32,6 +37,9 @@ See also the [v0.107.20 GitHub milestone][ms-v0.107.20].
   encryption settings page in the UI, which was the intended previous behavior.
 - URLs of some vetter blocklists.
 
+[#4944]: https://github.com/AdguardTeam/AdGuardHome/issues/4944
+[#5189]: https://github.com/AdguardTeam/AdGuardHome/issues/5189
+
 
 
 ## [v0.107.19] - 2022-11-23
diff --git a/internal/dhcpd/config.go b/internal/dhcpd/config.go
index 718d567f..8b255f76 100644
--- a/internal/dhcpd/config.go
+++ b/internal/dhcpd/config.go
@@ -137,14 +137,14 @@ func (c *V4ServerConf) Validate() (err error) {
 
 	gatewayIP, err := ensureV4(c.GatewayIP, "address")
 	if err != nil {
-		// Don't wrap an errors since it's informative enough as is and there is
+		// Don't wrap the error since it's informative enough as is and there is
 		// an annotation deferred already.
 		return err
 	}
 
 	subnetMask, err := ensureV4(c.SubnetMask, "subnet mask")
 	if err != nil {
-		// Don't wrap an errors since it's informative enough as is and there is
+		// Don't wrap the error since it's informative enough as is and there is
 		// an annotation deferred already.
 		return err
 	}
@@ -155,20 +155,21 @@ func (c *V4ServerConf) Validate() (err error) {
 
 	rangeStart, err := ensureV4(c.RangeStart, "address")
 	if err != nil {
-		// Don't wrap an errors since it's informative enough as is and there is
+		// Don't wrap the error since it's informative enough as is and there is
 		// an annotation deferred already.
 		return err
 	}
+
 	rangeEnd, err := ensureV4(c.RangeEnd, "address")
 	if err != nil {
-		// Don't wrap an errors since it's informative enough as is and there is
+		// Don't wrap the error since it's informative enough as is and there is
 		// an annotation deferred already.
 		return err
 	}
 
 	c.ipRange, err = newIPRange(rangeStart.AsSlice(), rangeEnd.AsSlice())
 	if err != nil {
-		// Don't wrap an errors since it's informative enough as is and there is
+		// Don't wrap the error since it's informative enough as is and there is
 		// an annotation deferred already.
 		return err
 	}
diff --git a/internal/dhcpd/dhcpd.go b/internal/dhcpd/dhcpd.go
index ea7725a9..3602b4db 100644
--- a/internal/dhcpd/dhcpd.go
+++ b/internal/dhcpd/dhcpd.go
@@ -219,8 +219,6 @@ var _ Interface = (*server)(nil)
 
 // Create initializes and returns the DHCP server handling both address
 // families.  It also registers the corresponding HTTP API endpoints.
-//
-// TODO(e.burkov):  Don't register handlers, see TODO on [aghhttp.RegisterFunc].
 func Create(conf *ServerConfig) (s *server, err error) {
 	s = &server{
 		conf: &ServerConfig{
@@ -237,6 +235,8 @@ func Create(conf *ServerConfig) (s *server, err error) {
 		},
 	}
 
+	// TODO(e.burkov):  Don't register handlers, see TODO on
+	// [aghhttp.RegisterFunc].
 	s.registerHandlers()
 
 	v4conf := conf.Conf4
@@ -250,7 +250,7 @@ func Create(conf *ServerConfig) (s *server, err error) {
 			return nil, fmt.Errorf("creating dhcpv4 srv: %w", err)
 		}
 
-		log.Error("creating dhcpv4 srv: %s", err)
+		log.Debug("dhcpd: warning: creating dhcpv4 srv: %s", err)
 	}
 
 	v6conf := conf.Conf6