Skip to content

Commit 90a77aa

Browse files
author
Juha Heiskanen
committed
DHCP relay and Renew update
Added API for get DHCPv6 Relay sserver Global address. Use Relay agent Global Address for DHCPv6 renew if service is enabled. Fix routing issue if parent is updated. Change-Id: I1f0a8e69629875784907a2746dea5896f890927d
1 parent bd12214 commit 90a77aa

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

nanostack/dhcp_service_api.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,16 @@ uint16_t dhcp_service_init(int8_t interface_id, dhcp_instance_type_e instance_ty
133133
*/
134134
void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_address);
135135

136+
/**
137+
* \brief Get DHCPv6 Relay Agent address pointer.
138+
*
139+
* \param instance The instance ID of the registered server.
140+
*
141+
* \return NULL when address is not available
142+
* {
143+
*/
144+
uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance);
145+
136146

137147
/**
138148
* \brief Deletes a server instance.

source/DHCPv6_client/dhcpv6_client_service.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,12 @@ void dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t
350350
serverLink.linkType = srv_data_ptr->serverLinkType;
351351
libdhcpv6_generic_nontemporal_address_message_write(payload_ptr, &packetReq, &nonTemporalAddress, &serverLink);
352352
// send solicit
353-
srv_data_ptr->transActionId = dhcp_service_send_req(dhcp_client.service_instance, 0, srv_data_ptr, srv_data_ptr->server_address, payload_ptr, payload_len, dhcp_solicit_resp_cb);
353+
uint8_t *server_address = dhcp_service_relay_global_addres_get(dhcp_client.relay_instance);
354+
if (!server_address) {
355+
server_address = srv_data_ptr->server_address;
356+
}
357+
358+
srv_data_ptr->transActionId = dhcp_service_send_req(dhcp_client.service_instance, 0, srv_data_ptr, server_address, payload_ptr, payload_len, dhcp_solicit_resp_cb);
354359
if (srv_data_ptr->transActionId == 0) {
355360
ns_dyn_mem_free(payload_ptr);
356361
addr->state_timer = 200; //Retry after 20 seconds

source/libDHCPv6/dhcp_service_api.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,16 @@ void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_addre
616616
}
617617
}
618618

619+
uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance)
620+
{
621+
relay_instance_t *realay_srv = dhcp_service_relay_find(instance);
622+
if (!realay_srv || !realay_srv->relay_activated) {
623+
return NULL;
624+
}
625+
626+
return realay_srv->server_address;
627+
}
628+
619629
void dhcp_service_delete(uint16_t instance)
620630
{
621631
server_instance_t *srv_ptr;

test/nanostack/unittest/stub/dhcp_service_api_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,8 @@ void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_addre
174174
{
175175

176176
}
177+
178+
uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance)
179+
{
180+
return NULL;
181+
}

0 commit comments

Comments
 (0)