@@ -129,17 +129,29 @@ static void mle_table_remove_free_indirect_table(int8_t interface_id, mle_neigh_
129129 lowpan_adaptation_indirect_free_messages_from_queues_by_address (cur_interface , entry_ptr -> mac64 , ADDR_802_15_4_LONG );
130130}
131131
132+ static void mle_table_entry_delete (mle_table_class_t * mle_table_class , mle_neigh_table_entry_t * cur )
133+ {
134+ //Remove from list
135+ ns_list_remove (& mle_table_class -> mle_table , cur );
136+ //Free Indirect Queue
137+ mle_table_remove_free_indirect_table (mle_table_class -> interfaceId , cur );
138+ //Call Remove callback
139+ mle_table_class -> remove_cb (mle_table_class -> interfaceId , cur );
140+
141+ topo_trace (TOPOLOGY_MLE , entry -> ext64 , TOPO_REMOVE );
142+ //Removes ETX neighbor
143+ etx_neighbor_remove (mle_table_class -> interfaceId , cur -> attribute_index );
144+ //Remove MLE frame counter info
145+ mle_service_frame_counter_table_delete (mle_table_class -> interfaceId , cur -> attribute_index );
146+ //Add to free list
147+ ns_list_add_to_start (& mle_table_class -> free_enty_list , cur );
148+ }
149+
150+
132151static void mle_table_class_list_free (mle_table_class_t * mle_table_class ) {
133152
134153 ns_list_foreach_safe (mle_neigh_table_entry_t , cur , & mle_table_class -> mle_table ) {
135- ns_list_remove (& mle_table_class -> mle_table , cur );
136- //Clean Indirect queue
137- mle_table_remove_free_indirect_table (mle_table_class -> interfaceId , cur );
138- //Call Remove callback
139- mle_table_class -> remove_cb (mle_table_class -> interfaceId , cur );
140- //Removes ETX neighbor
141- etx_neighbor_remove (mle_table_class -> interfaceId , cur -> attribute_index );
142- ns_list_add_to_start (& mle_table_class -> free_enty_list , cur );
154+ mle_table_entry_delete (mle_table_class , cur );
143155 }
144156 topo_trace (TOPOLOGY_MLE , NULL , TOPO_CLEAR );
145157}
@@ -331,7 +343,7 @@ int8_t mle_class_set_new_key_pending(int8_t interface_id)
331343 }
332344
333345 ns_list_foreach_safe (mle_neigh_table_entry_t , cur , & mle_class_ptr -> mle_table ) {
334- cur -> new_key_pending = true ;
346+ mle_service_frame_counter_table_new_key_pending ( interface_id , cur -> attribute_index ) ;
335347 }
336348
337349 return 0 ;
@@ -521,9 +533,6 @@ static mle_neigh_table_entry_t *mle_class_get_free_entry(mle_neigh_table_list_t
521533 mle_entry -> mode = MLE_FFD_DEV | MLE_RX_ON_IDLE ;
522534 mle_entry -> holdTime = 7 ;
523535 mle_entry -> last_contact_time = protocol_core_monotonic_time ;
524- mle_entry -> mle_frame_counter = 0 ;
525- mle_entry -> last_key_sequence = 0 ;
526- mle_entry -> new_key_pending = false;
527536 mle_entry -> medium_ttl_challenge = false;
528537 }
529538
@@ -577,18 +586,8 @@ int8_t mle_class_remove_entry(int8_t interface_id, mle_neigh_table_entry_t *entr
577586 if (!mle_class_neighbor_validate (& mle_class_ptr -> mle_table , entry )) {
578587 return -2 ;
579588 }
580- //Remove from list
581- ns_list_remove (& mle_class_ptr -> mle_table , entry );
582- //Free Indirect Queue
583- mle_table_remove_free_indirect_table (mle_class_ptr -> interfaceId , entry );
584- //Call Remove callback
585- mle_class_ptr -> remove_cb (mle_class_ptr -> interfaceId , entry );
586- topo_trace (TOPOLOGY_MLE , entry -> ext64 , TOPO_REMOVE );
587589
588- //Removes ETX neighbor
589- etx_neighbor_remove (interface_id , entry -> attribute_index );
590- //Add to free list
591- ns_list_add_to_start (& mle_class_ptr -> free_enty_list , entry );
590+ mle_table_entry_delete (mle_class_ptr , entry );
592591 return 0 ;
593592}
594593
@@ -604,19 +603,7 @@ int8_t mle_class_remove_neighbour(int8_t interface_id, const uint8_t *address, a
604603 if (!entry ) {
605604 return -2 ;
606605 }
607- //Remove from list
608- ns_list_remove (& mle_class_ptr -> mle_table , entry );
609- //Free Indirect Queue
610- mle_table_remove_free_indirect_table (mle_class_ptr -> interfaceId , entry );
611- //Call Remove callback
612- mle_class_ptr -> remove_cb (mle_class_ptr -> interfaceId , entry );
613-
614- topo_trace (TOPOLOGY_MLE , entry -> ext64 , TOPO_REMOVE );
615-
616- //Removes ETX neighbor
617- etx_neighbor_remove (interface_id , entry -> attribute_index );
618- //Add to free list
619- ns_list_add_to_start (& mle_class_ptr -> free_enty_list , entry );
606+ mle_table_entry_delete (mle_class_ptr , entry );
620607
621608 return 0 ;
622609
@@ -682,17 +669,7 @@ static void mle_class_table_ttl(uint16_t ticks, mle_table_class_t *mle_class_ptr
682669
683670 if (remove_entry ) {
684671 //Silence delete
685- //Remove from list
686- ns_list_remove (& mle_class_ptr -> mle_table , cur );
687- //Free Indirect Queue
688- mle_table_remove_free_indirect_table (mle_class_ptr -> interfaceId , cur );
689- mle_class_ptr -> remove_cb (mle_class_ptr -> interfaceId , cur );
690- topo_trace (TOPOLOGY_MLE , cur -> ext64 , TOPO_REMOVE );
691- //Removes ETX neighbor
692- etx_neighbor_remove (mle_class_ptr -> interfaceId , cur -> attribute_index );
693- //Add to free list
694- ns_list_add_to_start (& mle_class_ptr -> free_enty_list , cur );
695-
672+ mle_table_entry_delete (mle_class_ptr , cur );
696673 }
697674 } // for each entry
698675
0 commit comments