if (*prmask++ & clib_host_to_net_u64 (0x1))
{
- *prmask = (*pladdr_start ^ *pladdr_stop);
+ *prmask = (*praddr_start ^ *praddr_stop);
*prmask = clib_host_to_net_u64 (
mask_out_highest_set_bit_u64 (clib_net_to_host_u64 (*prmask)));
}
}
else
{
+ u32 i;
+ u32 *old_fp_policies_ids = result_val->fp_policies_ids;
- if (vec_max_len (result_val->fp_policies_ids) !=
- vec_len (result_val->fp_policies_ids))
+ vec_foreach_index (i, result_val->fp_policies_ids)
{
- /* no need to resize */
- vec_add1 (result_val->fp_policies_ids, policy_index);
+ ipsec_policy_t *p =
+ pool_elt_at_index (im->policies, result_val->fp_policies_ids[i]);
+
+ if (p->priority <= policy->priority)
+ {
+ break;
+ }
}
- else
- {
- vec_add1 (result_val->fp_policies_ids, policy_index);
+ vec_insert_elts (result_val->fp_policies_ids, &policy_index, 1, i);
+
+ if (result_val->fp_policies_ids != old_fp_policies_ids)
+ {
res = clib_bihash_add_del_16_8 (bihash_table, &result, 1);
if (res != 0)
}
else
{
+ u32 i;
+ u32 *old_fp_policies_ids = result_val->fp_policies_ids;
- if (vec_max_len (result_val->fp_policies_ids) !=
- vec_len (result_val->fp_policies_ids))
+ vec_foreach_index (i, result_val->fp_policies_ids)
{
- /* no need to resize */
- vec_add1 (result_val->fp_policies_ids, policy_index);
+ ipsec_policy_t *p =
+ pool_elt_at_index (im->policies, result_val->fp_policies_ids[i]);
+
+ if (p->priority <= policy->priority)
+ {
+ break;
+ }
}
- else
- {
- vec_add1 (result_val->fp_policies_ids, policy_index);
+ vec_insert_elts (result_val->fp_policies_ids, &policy_index, 1, i);
+
+ if (result_val->fp_policies_ids != old_fp_policies_ids)
+ {
res = clib_bihash_add_del_40_8 (bihash_table, &result, 1);
if (res != 0)
clib_bihash_add_del_40_8 (bihash_table, &result, 0);
}
else
- vec_del1 (result_val->fp_policies_ids, ii);
+ vec_delete (result_val->fp_policies_ids, 1, ii);
vec_foreach_index (imt, fp_spd->fp_mask_ids[policy->type])
{
clib_bihash_add_del_16_8 (bihash_table, &result, 0);
}
else
- vec_del1 (result_val->fp_policies_ids, ii);
+ vec_delete (result_val->fp_policies_ids, 1, ii);
vec_foreach_index (imt, fp_spd->fp_mask_ids[policy->type])
{