[isc-dhcp-relay] Patch to allow relay to discover interfaces even if (#3851)

Patch isc-dhcp-relay in order to allow the relay agent to discover configured interfaces even if they are down.

Without this patch, the relay agent will not discover configured interfaces if they are down when the relay agent starts up. If the interface(s) then get brought up after the relay started, the relay will discard packets received on these interfaces and log the message, Discarding packet received on <iface_name> interface that has no IPv4 address assigned. This led to race conditions when starting SONiC (or loading configuration). To resolve this, the relay agent would need to be restarted with all configured interfaces up.

With this patch, the relay agent will discover all configured interfaces, whether or not they are up at the time the relay agent starts. Thus, the state of the configured interfaces can be down when the relay agent starts and brought up during the lifetime of the relay agent process, and the relay agent will relay packets as expected; it will not discard them.
This commit is contained in:
Joe LeVeque 2019-12-07 11:26:29 -08:00 committed by lguohan
parent f345935aec
commit 8ab75e0e90
2 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,32 @@
From 06850e9beb2c50b5cc23fc94168acd9ae58d8ef8 Mon Sep 17 00:00:00 2001
From: Joe LeVeque <jolevequ@microsoft.com>
Date: Fri, 6 Dec 2019 05:53:09 +0000
Subject: [PATCH] Don't skip down interfaces when discovering interfaces in
relay mode
When discovering interfaces in relay mode, don't skip interfaces just
because they're down. If we fail to discover the interfaces because they
are down when the relay starts, but then are brought up at a later point
in time, the relay will discard any packets received on them because it
didn't discover the interface(s) when it started up.
---
common/discover.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/common/discover.c b/common/discover.c
index 8d5b958..5efff49 100644
--- a/common/discover.c
+++ b/common/discover.c
@@ -1016,7 +1016,8 @@ discover_interfaces(int state) {
info.flags & IFF_LOOPBACK ||
info.flags & IFF_POINTOPOINT) && !tmp) ||
(!(info.flags & IFF_UP) &&
- state != DISCOVER_UNCONFIGURED))
+ state != DISCOVER_UNCONFIGURED &&
+ state != DISCOVER_RELAY))
continue;
/* If there isn't already an interface by this name,
--
2.17.1

View File

@ -10,3 +10,4 @@
0009-CVE-2018-5733.patch
0010-CVE-2018-5732.patch
0008-interface-name-maxlen-crash.patch
0012-Don-t-skip-down-interfaces-when-discovering-interfac.patch