Skip to content

Commit c5b6df3

Browse files
author
Juha Heiskanen
committed
DHCPv6 client update
Added possibility for clear all pending dhcpv6 request before free whole client class. Change-Id: Ied5cfb52b3be98489753fb4f21523054d5dd1e31
1 parent dea0d53 commit c5b6df3

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

nanostack/dhcp_service_api.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,16 @@ void dhcp_service_update_server_address(uint32_t msg_tr_id, uint8_t *server_addr
217217
*/
218218
void dhcp_service_req_remove(uint32_t msg_tr_id);
219219

220+
/**
221+
* \brief Stops transactions for a messages (retransmissions).
222+
*
223+
* Clears off sending retransmissions for a particular message transaction by finding it via its message class pointer.
224+
*
225+
* \param msg_class_ptr The message class pointer.
226+
*
227+
*/
228+
void dhcp_service_req_remove_all(void *msg_class_ptr);
229+
220230
/**
221231
* \brief Timer tick function for retransmissions.
222232
*

source/DHCPv6_client/dhcpv6_client_service.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ void dhcp_client_delete(int8_t interface)
111111
if (srv_data_ptr != NULL) {
112112
tr_debug("Free DHCPv6 Client\n");
113113
memcpy(temporary_address, srv_data_ptr->iaNontemporalAddress.addressPrefix, 16);
114-
dhcp_service_req_remove(srv_data_ptr->transActionId);// remove all pending retransmissions
114+
dhcp_service_req_remove_all(srv_data_ptr);// remove all pending retransmissions
115115
libdhcvp6_nontemporalAddress_server_data_free(srv_data_ptr);
116116
addr_delete(cur, temporary_address);
117117

@@ -359,7 +359,7 @@ void dhcp_client_global_address_delete(int8_t interface, uint8_t *dhcp_addr, uin
359359
return;
360360
}
361361

362-
dhcp_service_req_remove(srv_data_ptr->transActionId);// remove all pending retransmissions
362+
dhcp_service_req_remove_all(srv_data_ptr);// remove all pending retransmissions
363363
if (dhcp_client.one_instance_interface) {
364364
addr_deprecate(cur, srv_data_ptr->iaNontemporalAddress.addressPrefix);
365365
} else {
@@ -386,7 +386,7 @@ void dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t
386386
return;
387387
}
388388
if (reason == ADDR_CALLBACK_INVALIDATED) {
389-
dhcp_service_req_remove(srv_data_ptr->transActionId);//stop retransmissions of renew
389+
dhcp_service_req_remove_all(srv_data_ptr);// remove all pending retransmissions
390390
libdhcvp6_nontemporalAddress_server_data_free(srv_data_ptr);
391391
tr_warn("Dhcp address lost");
392392
return;

source/libDHCPv6/dhcp_service_api.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,17 @@ void dhcp_service_req_remove(uint32_t msg_tr_id)
767767
return;
768768
}
769769

770+
void dhcp_service_req_remove_all(void *msg_class_ptr)
771+
{
772+
if (dhcp_service) {
773+
ns_list_foreach_safe(msg_tr_t, cur_ptr, &dhcp_service->tr_list) {
774+
if (cur_ptr->client_obj_ptr == msg_class_ptr) {
775+
dhcp_tr_delete(cur_ptr);
776+
}
777+
}
778+
}
779+
}
780+
770781
void dhcp_service_send_message(msg_tr_t *msg_tr_ptr)
771782
{
772783
int8_t retval;
@@ -930,4 +941,9 @@ bool dhcp_service_timer_tick(uint16_t ticks)
930941
return false;
931942
}
932943

944+
void dhcp_service_req_remove_all(void *msg_class_ptr)
945+
{
946+
(void)msg_class_ptr;
947+
}
948+
933949
#endif

test/nanostack/unittest/stub/dhcp_service_api_stub.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@ void dhcp_service_req_remove(uint32_t msg_tr_id)
160160
{
161161
}
162162

163+
void dhcp_service_req_remove_all(void *msg_class_ptr)
164+
{
165+
}
166+
163167
void dhcp_service_send_message(msg_tr_t *msg_tr_ptr)
164168
{
165169
}

0 commit comments

Comments
 (0)