@@ -175,11 +175,24 @@ int ws_border_router_proxy_state_update(int8_t caller_interface_id, int8_t handl
175175
176176static if_address_entry_t * ws_bbr_slaac_generate (protocol_interface_info_entry_t * cur , uint8_t * ula_prefix )
177177{
178- if_address_entry_t * add_entry = icmpv6_slaac_address_add (cur , ula_prefix , 64 , 0xffffffff , 0xffffffff , true, SLAAC_IID_FIXED );
178+ if_address_entry_t * add_entry = NULL ;
179+ const uint8_t * address ;
180+
181+ address = addr_select_with_prefix (cur , ula_prefix , 64 , 0 );
182+ if (address ) {
183+ // Address already exists for this prefix find the entry
184+ add_entry = addr_get_entry (cur , address );
185+ }
186+
187+ if (!add_entry ) {
188+ add_entry = icmpv6_slaac_address_add (cur , ula_prefix , 64 , 0xffffffff , 0xffffffff , true, SLAAC_IID_FIXED );
189+ }
179190 if (!add_entry ) {
180191 tr_err ("ula create failed" );
181192 return NULL ;
182193 }
194+ // Set the timeouts for this address and policy
195+ icmpv6_slaac_prefix_update (cur , ula_prefix , 64 , 0xffffffff , 0xffffffff );
183196 addr_policy_table_add_entry (ula_prefix , 64 , 2 , WS_NON_PREFFRED_LABEL );
184197 return add_entry ;
185198}
@@ -382,6 +395,7 @@ static void ws_bbr_rpl_status_check(protocol_interface_info_entry_t *cur)
382395
383396 if (memcmp (local_prefix , ADDR_UNSPECIFIED , 8 ) != 0 ) {
384397 if (!ws_bbr_slaac_generate (cur , local_prefix )) {
398+ // Address creation failed
385399 return ;
386400 }
387401
@@ -605,8 +619,16 @@ void ws_bbr_stop(int8_t interface_id)
605619{
606620#ifdef HAVE_WS_BORDER_ROUTER
607621
608- (void )interface_id ;
609622 backbone_interface_id = -1 ;
623+ protocol_interface_info_entry_t * cur = protocol_stack_interface_info_get_by_id (interface_id );
624+
625+ ws_bbr_slaac_remove (cur , current_dodag_id );
626+ if (memcmp (current_local_prefix , ADDR_UNSPECIFIED , 8 ) != 0 ) {
627+ ws_bbr_slaac_remove (cur , current_local_prefix );
628+ }
629+ if (memcmp (current_global_prefix , ADDR_UNSPECIFIED , 8 ) != 0 ) {
630+ ws_bbr_dhcp_server_stop (cur , current_global_prefix );
631+ }
610632
611633 ws_bbr_rpl_root_stop ();
612634 current_instance_id ++ ;
0 commit comments