X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fmpls_label_dpo.c;h=bee155b9035a8e53be9d303fd7412be4e3b4e56e;hb=7c922dc404c2c0a2d67d53ca05db1c1ae1598f44;hp=ebbbbec9b64aebbd46f260fc93eeda0cf3e7fb6c;hpb=19bd1902cb8cc074470f1e178d1df0601f75f58b;p=vpp.git diff --git a/src/vnet/dpo/mpls_label_dpo.c b/src/vnet/dpo/mpls_label_dpo.c index ebbbbec9b64..bee155b9035 100644 --- a/src/vnet/dpo/mpls_label_dpo.c +++ b/src/vnet/dpo/mpls_label_dpo.c @@ -205,7 +205,7 @@ format_mpls_label_dpo (u8 *s, va_list *args) } mld = mpls_label_dpo_get(index); - s = format(s, "mpls-label[%U%d]:", + s = format(s, "mpls-label[%U@%d]:", format_mpls_label_dpo_flags, (int) mld->mld_flags, index); @@ -1204,11 +1204,44 @@ mpls_label_dpo_mem_show (void) sizeof(mpls_label_dpo_t)); } +/** + * 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)); +} + const static dpo_vft_t mld_vft = { .dv_lock = mpls_label_dpo_lock, .dv_unlock = mpls_label_dpo_unlock, .dv_format = format_mpls_label_dpo, .dv_mem_show = mpls_label_dpo_mem_show, + .dv_mk_interpose = mpls_label_interpose, }; const static char* const mpls_label_imp_pipe_ip4_nodes[] =