X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fmap%2Fmap.c;h=b2eefee9bb22b692e180611ee34a3755c176e9b5;hb=e31d956;hp=0c8cd6cd4906455044e744e48993e6e5ef2fc4d2;hpb=01e078fff983e89f1b402988473960d322d2b4a0;p=vpp.git diff --git a/src/vnet/map/map.c b/src/vnet/map/map.c index 0c8cd6cd490..b2eefee9bb2 100644 --- a/src/vnet/map/map.c +++ b/src/vnet/map/map.c @@ -23,6 +23,8 @@ #include "map.h" +map_main_t map_main; + /* * This code supports the following MAP modes: * @@ -83,6 +85,12 @@ map_create_domain (ip4_address_t * ip4_prefix, clib_warning ("MAP-T only supports ip6_src_len = 96 for now."); return -1; } + if ((flags & MAP_DOMAIN_RFC6052) && ip6_prefix_len != 96) + { + clib_warning ("RFC6052 translation only supports ip6_prefix_len = " + "96 for now"); + return -1; + } } else { @@ -317,9 +325,9 @@ map_pre_resolve_init (map_main_pre_resolved_t * pr) } static u8 * -format_map_pre_resolve (u8 * s, va_list ap) +format_map_pre_resolve (u8 * s, va_list * ap) { - map_main_pre_resolved_t *pr = va_arg (ap, map_main_pre_resolved_t *); + map_main_pre_resolved_t *pr = va_arg (*ap, map_main_pre_resolved_t *); if (FIB_NODE_INDEX_INVALID != pr->fei) { @@ -354,9 +362,7 @@ map_last_lock_gone (fib_node_t * node) static map_main_pre_resolved_t * map_from_fib_node (fib_node_t * node) { -#if (CLIB_DEBUG > 0) ASSERT (FIB_NODE_TYPE_MAP_E == node->fn_type); -#endif return ((map_main_pre_resolved_t *) (((char *) node) - STRUCT_OFFSET_OF (map_main_pre_resolved_t, node))); @@ -586,6 +592,8 @@ map_add_domain_command_fn (vlib_main_t * vm, num_m_args++; else if (unformat (line_input, "map-t")) flags |= MAP_DOMAIN_TRANSLATION; + else if (unformat (line_input, "rfc6052")) + flags |= (MAP_DOMAIN_TRANSLATION | MAP_DOMAIN_RFC6052); else { error = clib_error_return (0, "unknown input `%U'", @@ -919,6 +927,18 @@ done: return error; } +static char * +map_flags_to_string (u32 flags) +{ + if (flags & MAP_DOMAIN_RFC6052) + return "rfc6052"; + if (flags & MAP_DOMAIN_PREFIX) + return "prefix"; + if (flags & MAP_DOMAIN_TRANSLATION) + return "map-t"; + return ""; +} + static u8 * format_map_domain (u8 * s, va_list * args) { @@ -933,13 +953,14 @@ format_map_domain (u8 * s, va_list * args) ip6_prefix = d->ip6_prefix; s = format (s, - "[%d] ip4-pfx %U/%d ip6-pfx %U/%d ip6-src %U/%d ea_bits_len %d psid-offset %d psid-len %d mtu %d %s", + "[%d] ip4-pfx %U/%d ip6-pfx %U/%d ip6-src %U/%d ea_bits_len %d " + "psid-offset %d psid-len %d mtu %d %s", d - mm->domains, format_ip4_address, &d->ip4_prefix, d->ip4_prefix_len, format_ip6_address, &ip6_prefix, d->ip6_prefix_len, format_ip6_address, &d->ip6_src, d->ip6_src_len, d->ea_bits_len, d->psid_offset, d->psid_length, d->mtu, - (d->flags & MAP_DOMAIN_TRANSLATION) ? "map-t" : ""); + map_flags_to_string (d->flags)); if (counters) {