dhclient: make sure link-local address is ready in stateless mode (#1263466)
This commit is contained in:
parent
9262a0840d
commit
59c88cb2ff
@ -569,6 +569,17 @@ dhconfig() {
|
|||||||
execute_client_side_configuration_scripts "config"
|
execute_client_side_configuration_scripts "config"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait_for_link_local() {
|
||||||
|
# we need a link-local address to be ready (not tentative)
|
||||||
|
for i in $(seq 50); do
|
||||||
|
linklocal=$(ip -6 addr show dev "${interface}" scope link)
|
||||||
|
# tentative flag means DAD is still not complete
|
||||||
|
tentative=$(echo "${linklocal}" | grep tentative)
|
||||||
|
[[ -n "${linklocal}" && -z "${tentative}" ]] && exit_with_hooks 0
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Section 18.1.8. (Receipt of Reply Messages) of RFC 3315 says:
|
# Section 18.1.8. (Receipt of Reply Messages) of RFC 3315 says:
|
||||||
# The client SHOULD perform duplicate address detection on each of
|
# The client SHOULD perform duplicate address detection on each of
|
||||||
# the addresses in any IAs it receives in the Reply message before
|
# the addresses in any IAs it receives in the Reply message before
|
||||||
@ -769,18 +780,17 @@ case "${reason}" in
|
|||||||
# remove any stale addresses from aborted clients
|
# remove any stale addresses from aborted clients
|
||||||
ip -6 addr flush dev "${interface}" scope global permanent
|
ip -6 addr flush dev "${interface}" scope global permanent
|
||||||
|
|
||||||
# we need a link-local address to be ready (not tentative)
|
wait_for_link_local
|
||||||
for i in $(seq 50); do
|
|
||||||
linklocal=$(ip -6 addr show dev "${interface}" scope link)
|
|
||||||
# tentative flag means DAD is still not complete
|
|
||||||
tentative=$(echo "${linklocal}" | grep tentative)
|
|
||||||
[[ -n "${linklocal}" && -z "${tentative}" ]] && exit_with_hooks 0
|
|
||||||
sleep 0.1
|
|
||||||
done
|
|
||||||
|
|
||||||
exit_with_hooks 0
|
exit_with_hooks 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
PREINIT6S) # stateless
|
||||||
|
ip link set dev "${interface}" up
|
||||||
|
wait_for_link_local
|
||||||
|
exit_with_hooks 0
|
||||||
|
;;
|
||||||
|
|
||||||
BOUND|RENEW|REBIND|REBOOT)
|
BOUND|RENEW|REBIND|REBOOT)
|
||||||
if [ -z "${interface}" ] || [ -z "${new_ip_address}" ]; then
|
if [ -z "${interface}" ] || [ -z "${new_ip_address}" ]; then
|
||||||
exit_with_hooks 2
|
exit_with_hooks 2
|
||||||
|
58
dhcp-dhclient-preinit6s.patch
Normal file
58
dhcp-dhclient-preinit6s.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
diff -up dhcp-4.3.3/client/dhclient.c.preinit6s dhcp-4.3.3/client/dhclient.c
|
||||||
|
--- dhcp-4.3.3/client/dhclient.c.preinit6s 2015-09-22 16:42:27.211145636 +0200
|
||||||
|
+++ dhcp-4.3.3/client/dhclient.c 2015-09-22 16:42:54.826112762 +0200
|
||||||
|
@@ -691,6 +691,12 @@ main(int argc, char **argv) {
|
||||||
|
|
||||||
|
inaddr_any.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
+ /* Discover all the network interfaces. */
|
||||||
|
+ discover_interfaces(DISCOVER_UNCONFIGURED);
|
||||||
|
+
|
||||||
|
+ /* Parse the dhclient.conf file. */
|
||||||
|
+ read_client_conf();
|
||||||
|
+
|
||||||
|
/* Stateless special case. */
|
||||||
|
if (stateless) {
|
||||||
|
if (release_mode || (wanted_ia_na > 0) ||
|
||||||
|
@@ -702,12 +708,6 @@ main(int argc, char **argv) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Discover all the network interfaces. */
|
||||||
|
- discover_interfaces(DISCOVER_UNCONFIGURED);
|
||||||
|
-
|
||||||
|
- /* Parse the dhclient.conf file. */
|
||||||
|
- read_client_conf();
|
||||||
|
-
|
||||||
|
/* Parse any extra command line configuration arguments: */
|
||||||
|
if ((dhcp_client_identifier_arg != NULL) && (*dhcp_client_identifier_arg != '\0')) {
|
||||||
|
arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg);
|
||||||
|
@@ -1169,15 +1169,23 @@ void run_stateless(int exit_mode)
|
||||||
|
struct client_state *client;
|
||||||
|
omapi_object_t *listener;
|
||||||
|
isc_result_t result;
|
||||||
|
-
|
||||||
|
- /* Discover the network interface. */
|
||||||
|
- discover_interfaces(DISCOVER_REQUESTED);
|
||||||
|
+ struct interface_info *ip;
|
||||||
|
|
||||||
|
if (!interfaces)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
- /* Parse the dhclient.conf file. */
|
||||||
|
- read_client_conf();
|
||||||
|
+ for (ip = interfaces; ip; ip = ip->next) {
|
||||||
|
+ if ((interfaces_requested > 0) &&
|
||||||
|
+ ((ip->flags & (INTERFACE_REQUESTED |
|
||||||
|
+ INTERFACE_AUTOMATIC)) !=
|
||||||
|
+ INTERFACE_REQUESTED))
|
||||||
|
+ continue;
|
||||||
|
+ script_init(ip->client, "PREINIT6S", NULL);
|
||||||
|
+ script_go(ip->client);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Discover the network interface. */
|
||||||
|
+ discover_interfaces(DISCOVER_REQUESTED);
|
||||||
|
|
||||||
|
/* Parse the lease database. */
|
||||||
|
read_client_leases();
|
18
dhcp.spec
18
dhcp.spec
@ -18,7 +18,7 @@
|
|||||||
Summary: Dynamic host configuration protocol software
|
Summary: Dynamic host configuration protocol software
|
||||||
Name: dhcp
|
Name: dhcp
|
||||||
Version: 4.3.3
|
Version: 4.3.3
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
# NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to
|
# NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to
|
||||||
# dcantrell maintaining the package) made incorrect use of the epoch and
|
# dcantrell maintaining the package) made incorrect use of the epoch and
|
||||||
# that's why it is at 12 now. It should have never been used, but it was.
|
# that's why it is at 12 now. It should have never been used, but it was.
|
||||||
@ -67,14 +67,14 @@ Patch27: dhcp-duidv4.patch
|
|||||||
Patch28: dhcp-systemtap.patch
|
Patch28: dhcp-systemtap.patch
|
||||||
Patch29: dhcp-getifaddrs.patch
|
Patch29: dhcp-getifaddrs.patch
|
||||||
Patch30: dhcp-omapi-leak.patch
|
Patch30: dhcp-omapi-leak.patch
|
||||||
|
Patch31: dhcp-client-request-release-bind-iface.patch
|
||||||
Patch32: dhcp-interval.patch
|
Patch32: dhcp-interval.patch
|
||||||
Patch33: dhcp-no-subnet-error2info.patch
|
Patch33: dhcp-no-subnet-error2info.patch
|
||||||
Patch34: dhcp-sd_notify.patch
|
Patch34: dhcp-sd_notify.patch
|
||||||
Patch35: dhcp-VLAN-ID.patch
|
Patch35: dhcp-VLAN-ID.patch
|
||||||
Patch36: dhcp-option97-pxe-client-id.patch
|
Patch36: dhcp-option97-pxe-client-id.patch
|
||||||
Patch37: dhcp-stateless-DUID-LLT.patch
|
Patch37: dhcp-stateless-DUID-LLT.patch
|
||||||
Patch38: dhcp-client-request-release-bind-iface.patch
|
Patch38: dhcp-dhclient-preinit6s.patch
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
@ -311,6 +311,10 @@ rm bind/bind.tar.gz
|
|||||||
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #33990])
|
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #33990])
|
||||||
%patch30 -p1 -b .leak
|
%patch30 -p1 -b .leak
|
||||||
|
|
||||||
|
# send unicast request/release via correct interface (#800561, #1177351)
|
||||||
|
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #30544])
|
||||||
|
%patch31 -p1 -b .bind-iface
|
||||||
|
|
||||||
# isc_time_nowplusinterval() is not safe with 64-bit time_t (#662254, #789601)
|
# isc_time_nowplusinterval() is not safe with 64-bit time_t (#662254, #789601)
|
||||||
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #28038])
|
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #28038])
|
||||||
%patch32 -p1 -b .interval
|
%patch32 -p1 -b .interval
|
||||||
@ -333,9 +337,8 @@ rm bind/bind.tar.gz
|
|||||||
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #38144])
|
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #38144])
|
||||||
%patch37 -p1 -b .stateless-DUID-LLT
|
%patch37 -p1 -b .stateless-DUID-LLT
|
||||||
|
|
||||||
# send unicast request/release via correct interface (#800561, #1177351)
|
# dhclient: make sure link-local address is ready in stateless mode (#1263466)
|
||||||
# (Submitted to dhcp-bugs@isc.org - [ISC-Bugs #30544])
|
%patch38 -p1 -b .preinit6s
|
||||||
%patch38 -p1 -b .bind-iface
|
|
||||||
|
|
||||||
# DHCLIENT_DEFAULT_PREFIX_LEN 64 -> 128
|
# DHCLIENT_DEFAULT_PREFIX_LEN 64 -> 128
|
||||||
# https://bugzilla.gnome.org/show_bug.cgi?id=656610
|
# https://bugzilla.gnome.org/show_bug.cgi?id=656610
|
||||||
@ -660,6 +663,9 @@ done
|
|||||||
%doc doc/html/
|
%doc doc/html/
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 22 2015 Jiri Popelka <jpopelka@redhat.com> - 12:4.3.3-3
|
||||||
|
- dhclient: make sure link-local address is ready in stateless mode (#1263466)
|
||||||
|
|
||||||
* Mon Sep 07 2015 Jiri Popelka <jpopelka@redhat.com> - 12:4.3.3-2
|
* Mon Sep 07 2015 Jiri Popelka <jpopelka@redhat.com> - 12:4.3.3-2
|
||||||
- VLAN ID is only bottom 12-bits of TCI (#1259552)
|
- VLAN ID is only bottom 12-bits of TCI (#1259552)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user