Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
dhcp
Commits
f1fc5ede
Commit
f1fc5ede
authored
Dec 11, 2017
by
Thomas Markwalder
Browse files
[master] dhclient (-6) skips confirm (INIT REBOOT) is all leases are expired
Merges in rt22675.
parent
fa6c4c08
Changes
2
Hide whitespace changes
Inline
Side-by-side
RELNOTES
View file @
f1fc5ede
...
...
@@ -313,6 +313,11 @@ dhcp-users@lists.isc.org.
[
ISC
-
Bugs
#
23252
]
[
ISC
-
Bugs
#
37221
]
-
Modified
dhclient
(-
6
)
to
bypass
sending
a
confirm
(
INIT
REBOOT
)
when
it
has
only
expired
address
assocations
.
Thanks
to
Jiri
Popelka
at
Red
Hat
for
raising
the
issue
and
submitting
the
patch
.
[
ISC
-
Bugs
#
22675
]
Changes
since
4.3.0
(
bug
fixes
)
-
Tidy
up
several
small
tickets
.
...
...
client/dhc6.c
View file @
f1fc5ede
...
...
@@ -145,11 +145,11 @@ static isc_result_t dhc6_check_status(isc_result_t rval,
unsigned
*
code
);
static
int
dhc6_score_lease
(
struct
client_state
*
client
,
struct
dhc6_lease
*
lease
);
static
isc_result_t
dhc6_add_ia_na_decline
(
struct
client_state
*
client
,
struct
data_string
*
packet
,
struct
dhc6_lease
*
lease
);
static
int
drop_declined_addrs
(
struct
dhc6_lease
*
lease
);
static
isc_boolean_t
unexpired_address_in_lease
(
struct
dhc6_lease
*
lease
);
extern
int
onetry
;
extern
int
stateless
;
...
...
@@ -1571,7 +1571,9 @@ start_confirm6(struct client_state *client)
/* If there is no active lease, there is nothing to check. */
if
((
client
->
active_lease
==
NULL
)
||
!
active_prefix
(
client
)
||
client
->
active_lease
->
released
)
{
client
->
active_lease
->
released
||
!
unexpired_address_in_lease
(
client
->
active_lease
))
{
dhc6_lease_destroy
(
&
client
->
active_lease
,
MDL
);
start_init6
(
client
);
return
;
}
...
...
@@ -6109,5 +6111,29 @@ int drop_declined_addrs(struct dhc6_lease *lease) {
return
(
live_cnt
);
}
/* Run through the addresses in lease and return true if there's any unexpired.
* Return false otherwise.
*/
static
isc_boolean_t
unexpired_address_in_lease
(
struct
dhc6_lease
*
lease
)
{
struct
dhc6_ia
*
ia
;
struct
dhc6_addr
*
addr
;
if
(
lease
==
NULL
)
{
return
ISC_FALSE
;
}
for
(
ia
=
lease
->
bindings
;
ia
!=
NULL
;
ia
=
ia
->
next
)
{
for
(
addr
=
ia
->
addrs
;
addr
!=
NULL
;
addr
=
addr
->
next
)
{
if
(
!
(
addr
->
flags
&
DHC6_ADDR_EXPIRED
)
&&
(
addr
->
starts
+
addr
->
max_life
>
cur_time
))
{
return
ISC_TRUE
;
}
}
}
log_debug
(
"PRC: Previous lease is devoid of active addresses."
);
return
ISC_FALSE
;
}
#endif
/* DHCPv6 */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment