X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip6_format.c;h=b1a8adf58de9896f7e928b675ea41716016398d2;hb=8dcfed5da8c36852fdc3077ed96ef9c7b3574b77;hp=56899b73d8bd264d04f0f814358fefb07911fb64;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vnet/ip/ip6_format.c b/src/vnet/ip/ip6_format.c index 56899b73d8b..b1a8adf58de 100644 --- a/src/vnet/ip/ip6_format.c +++ b/src/vnet/ip/ip6_format.c @@ -117,6 +117,23 @@ format_ip6_address_and_length (u8 * s, va_list * args) return format (s, "%U/%d", format_ip6_address, a, l); } +u8 * +format_ip6_address_and_mask (u8 * s, va_list * args) +{ + ip6_address_and_mask_t *am = va_arg (*args, ip6_address_and_mask_t *); + + if (am->addr.as_u64[0] == 0 && am->addr.as_u64[1] == 0 && + am->mask.as_u64[0] == 0 && am->mask.as_u64[1] == 0) + return format (s, "any"); + + if (am->mask.as_u64[0] == ~0 && am->mask.as_u64[1] == ~0) + return format (s, "%U", format_ip4_address, &am->addr); + + return format (s, "%U/%U", format_ip6_address, &am->addr, + format_ip4_address, &am->mask); +} + + /* Parse an IP6 address. */ uword unformat_ip6_address (unformat_input_t * input, va_list * args) @@ -212,6 +229,32 @@ unformat_ip6_address (unformat_input_t * input, va_list * args) } } +uword +unformat_ip6_address_and_mask (unformat_input_t * input, va_list * args) +{ + ip6_address_and_mask_t *am = va_arg (*args, ip6_address_and_mask_t *); + ip6_address_t addr, mask; + + memset (&addr, 0, sizeof (ip6_address_t)); + memset (&mask, 0, sizeof (ip6_address_t)); + + if (unformat (input, "any")) + ; + else if (unformat (input, "%U/%U", unformat_ip6_address, &addr, + unformat_ip6_address, &mask)) + ; + else if (unformat (input, "%U", unformat_ip6_address, &addr)) + mask.as_u64[0] = mask.as_u64[1] = ~0; + else + return 0; + + am->addr.as_u64[0] = addr.as_u64[0]; + am->addr.as_u64[1] = addr.as_u64[1]; + am->mask.as_u64[0] = mask.as_u64[0]; + am->mask.as_u64[1] = mask.as_u64[1]; + return 1; +} + /* Format an IP6 header. */ u8 * format_ip6_header (u8 * s, va_list * args) @@ -219,7 +262,7 @@ format_ip6_header (u8 * s, va_list * args) ip6_header_t *ip = va_arg (*args, ip6_header_t *); u32 max_header_bytes = va_arg (*args, u32); u32 i, ip_version, traffic_class, flow_label; - uword indent; + u32 indent; /* Nothing to do. */ if (max_header_bytes < sizeof (ip[0]))