- /* 0 remaining paths */
- bier_table_remove(bt, bp);
- bier_entry_delete(bei);
+ brp = &brps[ii];
+ bfmi = bier_fmask_db_find(bti, brp);
+
+ if (INDEX_INVALID == bfmi)
+ {
+ /*
+ * no matching fmask, not a path we can remove
+ */
+ vec_del1(brps, ii);
+ continue;
+ }
+
+ /*
+ * then modify the path to resolve via this fmask object
+ * and use it to resolve the BIER entry.
+ */
+ brp->frp_flags = FIB_ROUTE_PATH_BIER_FMASK;
+ brp->frp_bier_fmask = bfmi;
+ }
+
+ if (0 == vec_len(brps))
+ {
+ return;
+ }
+
+ vec_foreach(brp, brps)
+ {
+ vec_add1(t_paths, *brp);
+ if (0 == bier_entry_path_remove(bei, t_paths))
+ {
+ /* 0 remaining paths */
+ bier_table_remove(bt, bp);
+ bier_entry_delete(bei);
+ break;
+ }
+ vec_reset_length(t_paths);