Skip to content

Commit

Permalink
[isc-dhcp-relay] Patch to allow relay to discover interfaces even if (#…
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
jleveque authored and abdosi committed Dec 18, 2019
1 parent 1de13ca commit 4ea9705
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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

1 change: 1 addition & 0 deletions src/isc-dhcp/patch/series
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 4ea9705

Please sign in to comment.