Skip to content

Commit 3cad7bd

Browse files
author
Juha Heiskanen
committed
DHCPv6 renew and transaction id update
Clear transaction ID when response callback is coming Renew process not start a new if there is pending request ongoing. wi-sun dhcpv6 callback will remove address if address get fail. Change-Id: Ida790be12e95a8ef389d3e6a615d608af74c1b4a
1 parent c5b6df3 commit 3cad7bd

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1944,6 +1944,9 @@ static void ws_dhcp_client_global_adress_cb(int8_t interface, uint8_t dhcp_addr[
19441944
if (cur) {
19451945
rpl_control_register_address(cur, prefix);
19461946
}
1947+
} else {
1948+
//Delete dhcpv6 client
1949+
dhcp_client_global_address_delete(interface, dhcp_addr, prefix);
19471950
}
19481951
}
19491952

source/DHCPv6_client/dhcpv6_client_service.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ int dhcp_solicit_resp_cb(uint16_t instance_id, void *ptr, uint8_t msg_name, uin
153153
goto error_exit;
154154
}
155155

156+
//Clear Active Transaction state
157+
srv_data_ptr->transActionId = 0;
158+
156159
// Validate message
157160
if (msg_name != DHCPV6_REPLY_TYPE) {
158161
tr_error("invalid response");
@@ -332,7 +335,7 @@ int dhcp_client_server_address_update(int8_t interface, uint8_t *prefix, uint8_t
332335
}
333336

334337
memcpy(srv_data_ptr->server_address, server_address, 16);
335-
if (!srv_data_ptr->iaNonTemporalStructValid) {
338+
if (srv_data_ptr->transActionId) {
336339
dhcp_service_update_server_address(srv_data_ptr->transActionId, server_address);
337340
}
338341
return 0;
@@ -396,6 +399,12 @@ void dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t
396399
return;
397400
}
398401

402+
if (srv_data_ptr->transActionId) {
403+
//Do not trig new Renew process
404+
tr_warn("Do not trig new pending renew request");
405+
return;
406+
}
407+
399408
payload_len = libdhcpv6_address_request_message_len(srv_data_ptr->clientLinkIdType, srv_data_ptr->serverLinkType, 0, !dhcp_client.no_address_hint);
400409
payload_ptr = ns_dyn_mem_temporary_alloc(payload_len);
401410
if (payload_ptr == NULL) {

0 commit comments

Comments
 (0)