X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ffib%2Ffib_types.c;h=c859913eeff4eb3095e1dcf5e436599330b9236d;hb=cbe25aab3be72154f2c706c39eeba6a77f34450f;hp=4b1280f6fa87ea983fff1e7ff683c63f6a7b38c8;hpb=097fa66b986f06281f603767d321ab13ab6c88c3;p=vpp.git diff --git a/src/vnet/fib/fib_types.c b/src/vnet/fib/fib_types.c index 4b1280f6fa8..c859913eeff 100644 --- a/src/vnet/fib/fib_types.c +++ b/src/vnet/fib/fib_types.c @@ -18,6 +18,7 @@ #include #include #include +#include #include /* @@ -101,6 +102,13 @@ fib_prefix_from_mpls_label (mpls_label_t label, pfx->fp_eos = eos; } +void +fib_prefix_copy (fib_prefix_t *dst, + const fib_prefix_t *src) +{ + memcpy(dst, src, sizeof(*dst)); +} + int fib_prefix_cmp (const fib_prefix_t *p1, const fib_prefix_t *p2) @@ -158,6 +166,21 @@ fib_prefix_is_cover (const fib_prefix_t *p1, return (0); } +u8 +fib_prefix_get_host_length (fib_protocol_t proto) +{ + switch (proto) + { + case FIB_PROTOCOL_IP4: + return (32); + case FIB_PROTOCOL_IP6: + return (128); + case FIB_PROTOCOL_MPLS: + return (21); + } + return (0); +} + int fib_prefix_is_host (const fib_prefix_t *prefix) { @@ -434,7 +457,7 @@ uword unformat_fib_route_path (unformat_input_t * input, va_list * args) { fib_route_path_t *rpath = va_arg (*args, fib_route_path_t *); - u32 *payload_proto = va_arg (*args, u32*); + dpo_proto_t *payload_proto = va_arg (*args, void*); u32 weight, preference, udp_encap_id, fi; mpls_label_t out_label; vnet_main_t *vnm; @@ -537,6 +560,10 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args) { rpath->frp_flags |= FIB_ROUTE_PATH_RESOLVE_VIA_ATTACHED; } + else if (unformat (input, "pop-pw-cw")) + { + rpath->frp_flags |= FIB_ROUTE_PATH_POP_PW_CW; + } else if (unformat (input, "ip4-lookup-in-table %d", &rpath->frp_fib_index)) @@ -605,6 +632,9 @@ unformat_fib_route_path (unformat_input_t * input, va_list * args) rpath->frp_weight = 1; rpath->frp_flags |= FIB_ROUTE_PATH_LOCAL; } + else if (unformat (input, "%U", + unformat_mfib_itf_flags, &rpath->frp_mitf_flags)) + ; else if (unformat (input, "out-labels")) { while (unformat (input, "%U",