+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;
+
+ clib_memset (&addr, 0, sizeof (ip6_address_t));
+ clib_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;
+}
+