+/**
+ * Interpose a label DPO. used in the FIB unit tests
+ */
+static void
+mpls_label_interpose (const dpo_id_t *original,
+ const dpo_id_t *parent,
+ dpo_id_t *clone)
+{
+ mpls_label_dpo_t *mld, *mld_clone;
+
+ mld_clone = mpls_label_dpo_alloc();
+ mld = mpls_label_dpo_get(original->dpoi_index);
+
+ mld_clone->mld_locks = 0;
+ clib_memcpy(&mld_clone->mld_hdr,
+ &mld->mld_hdr,
+ sizeof(mld_clone->mld_hdr));
+ mld_clone->mld_payload_proto = mld->mld_payload_proto;
+ mld_clone->mld_n_labels = mld->mld_n_labels;
+ mld_clone->mld_n_hdr_bytes = mld->mld_n_hdr_bytes;
+
+ dpo_stack(mpls_label_dpo_types[MPLS_LABEL_DPO_FLAG_NONE],
+ mld_clone->mld_payload_proto,
+ &mld_clone->mld_dpo,
+ parent);
+
+ dpo_set(clone,
+ mpls_label_dpo_types[MPLS_LABEL_DPO_FLAG_NONE],
+ mld_clone->mld_payload_proto,
+ mpls_label_dpo_get_index(mld_clone));
+}
+