dhcp/dhcp-relay-hop-limit.patch

40 lines
1.4 KiB
Diff
Raw Normal View History

From f3d697a84e90f31a86874e334240ee1360a2fbf8 Mon Sep 17 00:00:00 2001
From: Jiri Popelka <jpopelka@redhat.com>
Date: Thu, 9 Oct 2014 18:57:22 +0200
Subject: [PATCH] Work-around for hop-limit set to 1
---
common/socket.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/common/socket.c b/common/socket.c
index b8b44a6..93406ef 100644
--- a/common/socket.c
+++ b/common/socket.c
@@ -301,7 +301,21 @@ if_register_socket(struct interface_info *info, int family,
}
if ((family == AF_INET6) &&
- ((info->flags & INTERFACE_UPSTREAM) != 0)) {
+ /*
+ * rfc3315 says that: "If relay agent relays messages to
+ * All_DHCP_Servers multicast address or other multicast addresses,
+ * it sets the Hop Limit field to 32."
+ *
+ * Because we use the same socket for all (upper/lower)
+ * interfaces, the hop limit is the same for both/all.
+ * There should be INTERFACE_UPSTREAM in the below condition, but
+ * problem is when the interface which registers the socket is
+ * lower interface, in that case the hop limit was not set
+ * (i.e. set to 1) for both.
+ * Because rfc doesn't say anything about hop limit for lower,
+ * it'd be lesser evil to have 32 in both cases.
+ */
+ ((info->flags & INTERFACE_STREAMS) != 0)) {
int hop_limit = 32;
if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
&hop_limit, sizeof(int)) < 0) {
--
2.1.0