X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip4_format.c;h=786a01d396bd51c592d0b0a5cbf1f3e16c376284;hb=9534696b4;hp=3f2221022c78cb221b6312b9662a2e5daf9444cb;hpb=d3c008d108aa2187d1a2afe2833b4de25ca2c2ab;p=vpp.git diff --git a/src/vnet/ip/ip4_format.c b/src/vnet/ip/ip4_format.c index 3f2221022c7..786a01d396b 100644 --- a/src/vnet/ip/ip4_format.c +++ b/src/vnet/ip/ip4_format.c @@ -56,6 +56,21 @@ format_ip4_address_and_length (u8 * s, va_list * args) return format (s, "%U/%d", format_ip4_address, a, l); } +u8 * +format_ip4_address_and_mask (u8 * s, va_list * args) +{ + ip4_address_and_mask_t *am = va_arg (*args, ip4_address_and_mask_t *); + + if (am->addr.as_u32 == 0 && am->mask.as_u32 == 0) + return format (s, "any"); + + if (am->mask.as_u32 == ~0) + return format (s, "%U", format_ip4_address, &am->addr); + + return format (s, "%U/%U", format_ip4_address, &am->addr, + format_ip4_address, &am->mask); +} + /* Parse an IP4 address %d.%d.%d.%d. */ uword unformat_ip4_address (unformat_input_t * input, va_list * args) @@ -77,6 +92,27 @@ unformat_ip4_address (unformat_input_t * input, va_list * args) return 1; } +uword +unformat_ip4_address_and_mask (unformat_input_t * input, va_list * args) +{ + ip4_address_and_mask_t *am = va_arg (*args, ip4_address_and_mask_t *); + u32 addr = 0, mask = 0; + + if (unformat (input, "any")) + ; + else if (unformat (input, "%U/%U", unformat_ip4_address, &addr, + unformat_ip4_address, &mask)) + ; + else if (unformat (input, "%U", unformat_ip4_address, &addr)) + mask = ~0; + else + return 0; + + am->addr.as_u32 = addr; + am->mask.as_u32 = mask; + return 1; +} + /* Format an IP4 header. */ u8 * format_ip4_header (u8 * s, va_list * args) @@ -119,6 +155,10 @@ format_ip4_header (u8 * s, va_list * args) s = format (s, " (should be 0x%04x)", clib_net_to_host_u16 (c)); } + s = format (s, " dscp %U ecn %U", + format_ip_dscp, ip4_header_get_dscp (ip), + format_ip_ecn, ip4_header_get_ecn (ip)); + { u32 f = clib_net_to_host_u16 (ip->flags_and_fragment_offset); u32 o; @@ -129,7 +169,7 @@ format_ip4_header (u8 * s, va_list * args) /* Fragment offset. */ o = 8 * (f & 0x1fff); - f ^= o; + f ^= f & 0x1fff; if (o != 0) s = format (s, " offset %d", o); @@ -142,6 +182,9 @@ format_ip4_header (u8 * s, va_list * args) _(CONGESTION); #undef _ } + /* Fragment packet but not the first. */ + if (o != 0) + return s; } /* Recurse into next protocol layer. */ @@ -177,7 +220,7 @@ unformat_ip4_header (unformat_input_t * input, va_list * args) ip = p; } - memset (ip, 0, sizeof (ip[0])); + clib_memset (ip, 0, sizeof (ip[0])); ip->ip_version_and_header_length = IP4_VERSION_AND_HEADER_LENGTH_NO_OPTIONS; if (!unformat (input, "%U: %U -> %U",