fa1179c
From 1f8681acba9ab70fbe17c85e5a1f4ce6a648b55d Mon Sep 17 00:00:00 2001
9c49c9e
From: Pavel Zhukov <pzhukov@redhat.com>
9c49c9e
Date: Thu, 28 Feb 2019 15:30:21 +0100
fa1179c
Subject: [PATCH 22/28] dhclient: make sure link-local address is ready in
9c49c9e
 stateless mode
9c49c9e
9c49c9e
Bug-url: https://bugzilla.redhat.com/1263466
9c49c9e
---
9c49c9e
 client/dhclient.c | 30 ++++++++++++++++++++----------
9c49c9e
 1 file changed, 20 insertions(+), 10 deletions(-)
9c49c9e
9c49c9e
diff --git a/client/dhclient.c b/client/dhclient.c
fa1179c
index 6bbefc7..60836b4 100644
9c49c9e
--- a/client/dhclient.c
9c49c9e
+++ b/client/dhclient.c
fa1179c
@@ -943,6 +943,12 @@ main(int argc, char **argv) {
9c49c9e
 
9c49c9e
 	inaddr_any.s_addr = INADDR_ANY;
9c49c9e
 
9c49c9e
+	/* Discover all the network interfaces. */
9c49c9e
+	discover_interfaces(DISCOVER_UNCONFIGURED);
9c49c9e
+
9c49c9e
+	/* Parse the dhclient.conf file. */
9c49c9e
+	read_client_conf();
9c49c9e
+
9c49c9e
 	/* Stateless special case. */
9c49c9e
 	if (stateless) {
9c49c9e
 		if (release_mode || (wanted_ia_na > 0) ||
fa1179c
@@ -959,12 +965,6 @@ main(int argc, char **argv) {
9c49c9e
 		finish(0);
9c49c9e
 	}
9c49c9e
 
9c49c9e
-	/* Discover all the network interfaces. */
9c49c9e
-	discover_interfaces(DISCOVER_UNCONFIGURED);
9c49c9e
-
9c49c9e
-	/* Parse the dhclient.conf file. */
9c49c9e
-	read_client_conf();
9c49c9e
-
9c49c9e
 	/* Parse any extra command line configuration arguments: */
9c49c9e
 	if ((dhcp_client_identifier_arg != NULL) && (*dhcp_client_identifier_arg != '\0')) {
9c49c9e
 		arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg);
fa1179c
@@ -1433,20 +1433,30 @@ void run_stateless(int exit_mode, u_int16_t port)
9c49c9e
 	IGNORE_UNUSED(port);
9c49c9e
 #endif
9c49c9e
 
9c49c9e
-	/* Discover the network interface. */
9c49c9e
-	discover_interfaces(DISCOVER_REQUESTED);
9c49c9e
+	struct interface_info *ip;
9c49c9e
 
9c49c9e
 	if (!interfaces)
9c49c9e
 		usage("No interfaces available for stateless command: %s", "-S");
9c49c9e
 
9c49c9e
-	/* Parse the dhclient.conf file. */
9c49c9e
 #ifdef DHCP4o6
9c49c9e
 	if (dhcpv4_over_dhcpv6) {
9c49c9e
 		/* Mark we want to request IRT too! */
9c49c9e
 		dhcpv4_over_dhcpv6++;
9c49c9e
 	}
9c49c9e
 #endif
9c49c9e
-	read_client_conf();
9c49c9e
+
9c49c9e
+	for (ip = interfaces; ip; ip = ip->next) {
9c49c9e
+		if ((interfaces_requested > 0) &&
9c49c9e
+		    ((ip->flags & (INTERFACE_REQUESTED |
9c49c9e
+				   INTERFACE_AUTOMATIC)) !=
9c49c9e
+		     INTERFACE_REQUESTED))
9c49c9e
+			continue;
9c49c9e
+		script_init(ip->client, "PREINIT6", NULL);
9c49c9e
+		script_go(ip->client);
9c49c9e
+	}
9c49c9e
+
9c49c9e
+	/* Discover the network interface. */
9c49c9e
+	discover_interfaces(DISCOVER_REQUESTED);
9c49c9e
 
9c49c9e
 	/* Parse the lease database. */
9c49c9e
 	read_client_leases();
9c49c9e
-- 
fa1179c
2.35.1
9c49c9e