X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdhcp%2Fdhcp6_ia_na_client_cp.c;h=b48559929e41a36435ba6d8cbb4a398c200c88ce;hb=cbe25aab3be72154f2c706c39eeba6a77f34450f;hp=2d4135d7ebdd7e103f4cfb0e0c9644526198ee9a;hpb=02bfd641b69aab83397e217b9ca4e35a6aab05c8;p=vpp.git diff --git a/src/plugins/dhcp/dhcp6_ia_na_client_cp.c b/src/plugins/dhcp/dhcp6_ia_na_client_cp.c index 2d4135d7ebd..b48559929e4 100644 --- a/src/plugins/dhcp/dhcp6_ia_na_client_cp.c +++ b/src/plugins/dhcp/dhcp6_ia_na_client_cp.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -144,17 +145,6 @@ send_client_message_start_stop (u32 sw_if_index, u32 server_index, static void interrupt_process (void); -static u32 -ip6_enable (u32 sw_if_index) -{ - dhcp6_client_cp_main_t *rm = &dhcp6_client_cp_main; - clib_error_t *rv; - - rv = enable_ip6_interface (rm->vlib_main, sw_if_index); - - return rv != 0; -} - static u8 ip6_addresses_equal (ip6_address_t * address1, ip6_address_t * address2) { @@ -302,7 +292,11 @@ dhcp6_reply_event_handler (vl_api_dhcp6_reply_event_t * mp) { address_info->preferred_lt = preferred_time; address_info->valid_lt = valid_time; - address_info->due_time = current_time + valid_time; + address_info->due_time = current_time; + /* Renew the lease at the preferred time, if non-zero */ + address_info->due_time += (preferred_time > 0) ? + preferred_time : valid_time; + if (address_info->due_time > rm->max_valid_due_time) rm->max_valid_due_time = address_info->due_time; continue; @@ -316,7 +310,11 @@ dhcp6_reply_event_handler (vl_api_dhcp6_reply_event_t * mp) address_info->address = *address; address_info->preferred_lt = preferred_time; address_info->valid_lt = valid_time; - address_info->due_time = current_time + valid_time; + address_info->due_time = current_time; + /* Renew the lease at the preferred time, if non-zero */ + address_info->due_time += (preferred_time > 0) ? + preferred_time : valid_time; + if (address_info->due_time > rm->max_valid_due_time) rm->max_valid_due_time = address_info->due_time; rm->client_state_by_sw_if_index[sw_if_index].address_count++; @@ -414,7 +412,7 @@ dhcp6_client_cp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, clib_warning ("Failed to delete interface address"); pool_put (rm->address_pool, address_info); /* make sure ip6 stays enabled */ - ip6_enable (sw_if_index); + ip6_link_enable (sw_if_index); client_state = &rm->client_state_by_sw_if_index[sw_if_index]; if (--client_state->address_count == 0) { @@ -642,7 +640,7 @@ dhcp6_client_enable_disable (u32 sw_if_index, u8 enable) dhcp6_clients_enable_disable (1); } - ip6_enable (sw_if_index); + ip6_link_enable (sw_if_index); send_client_message_start_stop (sw_if_index, ~0, DHCPV6_MSG_SOLICIT, 0, 1); } @@ -758,7 +756,7 @@ dhcp_ia_na_client_cp_init (vlib_main_t * vm) rm->vlib_main = vm; rm->vnet_main = vnet_get_main (); - rm->api_main = &api_main; + rm->api_main = vlibapi_get_main (); rm->node_index = dhcp6_client_cp_process_node.index; return NULL;