+ if (new_pae->colliding_rules) {
+ /* update the information within the collision rule entry */
+ ASSERT(vec_len(new_pae->colliding_rules) > 0);
+ collision_match_rule_t *cr = vec_elt_at_index (new_pae->colliding_rules, 0);
+ ASSERT(cr->applied_entry_index == old_index);
+ cr->applied_entry_index = new_index;
+ } else {
+ /* find the index in the collision rule entry on the head element */
+ u32 head_index = find_head_applied_ace_index(applied_hash_aces, new_index);
+ ASSERT(head_index != ~0);
+ applied_hash_ace_entry_t *head_pae = vec_elt_at_index((*applied_hash_aces), head_index);
+ ASSERT(vec_len(head_pae->colliding_rules) > 0);
+ u32 i;
+ for (i=0; i<vec_len(head_pae->colliding_rules); i++) {
+ collision_match_rule_t *cr = vec_elt_at_index (head_pae->colliding_rules, i);
+ if (cr->applied_entry_index == old_index) {
+ cr->applied_entry_index = new_index;
+ }
+ }
+ if (ACL_HASH_LOOKUP_DEBUG > 0) {
+ clib_warning("Head pae at index %d after adjustment", head_index);
+ acl_plugin_print_pae(am->vlib_main, head_index, head_pae);
+ }
+ }