diff mbox series

[1/5] dhcp6: Fix emitting LEASE_OBTAINED in stateless mode

Message ID 20221003222847.699047-1-andrew.zaborowski@intel.com (mailing list archive)
State Accepted, archived
Headers show
Series [1/5] dhcp6: Fix emitting LEASE_OBTAINED in stateless mode | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
prestwoj/iwd-ci-makedistcheck success Make Distcheck
prestwoj/iwd-ci-build success Build - Configure
prestwoj/iwd-ci-clang success clang PASS
prestwoj/iwd-ci-makecheckvalgrind success Make Check w/Valgrind
prestwoj/iwd-ci-makecheck success Make Check
prestwoj/iwd-ci-testrunner success test-runner PASS

Commit Message

Andrew Zaborowski Oct. 3, 2022, 10:28 p.m. UTC
Make sure we emit the LEASE_OBTAINED and not LEASE_RENEWED event after
obtaining a reply to an Information-Request.  Only set
client->request_na in stateful mode so as not to require the NA in the
lease object when we're later validating it.  Fix switching to BOUND
state after dhcp6_client_receive_reply() returns BOUND.
---
 ell/dhcp6.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Comments

Denis Kenzior Oct. 4, 2022, 5:44 p.m. UTC | #1
Hi Andrew,

On 10/3/22 17:28, Andrew Zaborowski wrote:
> Make sure we emit the LEASE_OBTAINED and not LEASE_RENEWED event after
> obtaining a reply to an Information-Request.  Only set
> client->request_na in stateful mode so as not to require the NA in the
> lease object when we're later validating it.  Fix switching to BOUND
> state after dhcp6_client_receive_reply() returns BOUND.
> ---
>   ell/dhcp6.c | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)
> 

All applied, thanks.

Regards,
-Denis
diff mbox series

Patch

diff --git a/ell/dhcp6.c b/ell/dhcp6.c
index 2792ff2..3dbd0cd 100644
--- a/ell/dhcp6.c
+++ b/ell/dhcp6.c
@@ -971,8 +971,9 @@  static void dhcp6_client_setup_lease(struct l_dhcp6_client *client,
 	client->lease->start_time = timestamp;
 
 	/* TODO: Emit IP_CHANGED if any addresses were removed / added */
-	if (client->state == DHCP6_STATE_REQUESTING ||
-			client->state == DHCP6_STATE_SOLICITING)
+	if (L_IN_SET(client->state, DHCP6_STATE_REQUESTING,
+				DHCP6_STATE_SOLICITING,
+				DHCP6_STATE_REQUESTING_INFORMATION))
 		event = L_DHCP6_CLIENT_EVENT_LEASE_OBTAINED;
 	else
 		event = L_DHCP6_CLIENT_EVENT_LEASE_RENEWED;
@@ -1385,7 +1386,8 @@  static void dhcp6_client_rx_message(const void *data, size_t len,
 	case DHCP6_STATE_BOUND:
 		return;
 	case DHCP6_STATE_REQUESTING_INFORMATION:
-		if (dhcp6_client_receive_reply(client, message, len) < 0)
+		r = dhcp6_client_receive_reply(client, message, len);
+		if (r < 0)
 			return;
 
 		break;
@@ -1527,7 +1529,6 @@  LIB_EXPORT struct l_dhcp6_client *l_dhcp6_client_new(uint32_t ifindex)
 
 	client->state = DHCP6_STATE_INIT;
 	client->ifindex = ifindex;
-	client->request_na = true;
 
 	client->icmp6 = l_icmp6_client_new(ifindex);
 	l_icmp6_client_add_event_handler(client->icmp6,
@@ -1803,6 +1804,8 @@  LIB_EXPORT bool l_dhcp6_client_start(struct l_dhcp6_client *client)
 	else
 		client_duid_generate_addr_plus_time(client);
 
+	client->request_na = !client->stateless;
+
 	if (!client->transport) {
 		client->transport =
 			_dhcp6_default_transport_new(client->ifindex,