Skip to content

Commit

Permalink
DHCP relay and Renew update
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Juha Heiskanen committed Mar 14, 2019
1 parent bd12214 commit 90a77aa
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 1 deletion.
10 changes: 10 additions & 0 deletions nanostack/dhcp_service_api.h
Expand Up @@ -133,6 +133,16 @@ uint16_t dhcp_service_init(int8_t interface_id, dhcp_instance_type_e instance_ty
*/
void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_address);

/**
* \brief Get DHCPv6 Relay Agent address pointer.
*
* \param instance The instance ID of the registered server.
*
* \return NULL when address is not available
* {
*/
uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance);


/**
* \brief Deletes a server instance.
Expand Down
7 changes: 6 additions & 1 deletion source/DHCPv6_client/dhcpv6_client_service.c
Expand Up @@ -350,7 +350,12 @@ void dhcpv6_renew(protocol_interface_info_entry_t *interface, if_address_entry_t
serverLink.linkType = srv_data_ptr->serverLinkType;
libdhcpv6_generic_nontemporal_address_message_write(payload_ptr, &packetReq, &nonTemporalAddress, &serverLink);
// send solicit
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);
uint8_t *server_address = dhcp_service_relay_global_addres_get(dhcp_client.relay_instance);
if (!server_address) {
server_address = srv_data_ptr->server_address;
}

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);
if (srv_data_ptr->transActionId == 0) {
ns_dyn_mem_free(payload_ptr);
addr->state_timer = 200; //Retry after 20 seconds
Expand Down
10 changes: 10 additions & 0 deletions source/libDHCPv6/dhcp_service_api.c
Expand Up @@ -616,6 +616,16 @@ void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_addre
}
}

uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance)
{
relay_instance_t *realay_srv = dhcp_service_relay_find(instance);
if (!realay_srv || !realay_srv->relay_activated) {
return NULL;
}

return realay_srv->server_address;
}

void dhcp_service_delete(uint16_t instance)
{
server_instance_t *srv_ptr;
Expand Down
5 changes: 5 additions & 0 deletions test/nanostack/unittest/stub/dhcp_service_api_stub.c
Expand Up @@ -174,3 +174,8 @@ void dhcp_service_relay_instance_enable(uint16_t instance, uint8_t *server_addre
{

}

uint8_t *dhcp_service_relay_global_addres_get(uint16_t instance)
{
return NULL;
}

0 comments on commit 90a77aa

Please sign in to comment.