fib: fib api updates
[vpp.git] / src / vpp / api / types.c
index a4766c2..3d556b7 100644 (file)
@@ -172,3 +172,50 @@ unformat_vl_api_prefix (unformat_input_t * input, va_list * args)
   return (0);
 }
 
+uword
+unformat_vl_api_mprefix (unformat_input_t * input, va_list * args)
+{
+   vl_api_mprefix_t *pfx = va_arg (*args, vl_api_mprefix_t *);
+
+   if (unformat (input, "%U/%d",
+                 unformat_vl_api_ip4_address, &pfx->grp_address.ip4,
+                 &pfx->grp_address_length))
+       pfx->af = ADDRESS_IP4;
+   else if (unformat (input, "%U/%d",
+                 unformat_vl_api_ip6_address, &pfx->grp_address.ip6,
+                 &pfx->grp_address_length))
+       pfx->af = ADDRESS_IP6;
+   else if (unformat (input, "%U %U",
+                      unformat_vl_api_ip4_address, &pfx->src_address.ip4,
+                      unformat_vl_api_ip4_address, &pfx->grp_address.ip4))
+   {
+       pfx->af = ADDRESS_IP4;
+       pfx->grp_address_length = 64;
+   }
+   else if (unformat (input, "%U %U",
+                      unformat_vl_api_ip6_address, &pfx->src_address.ip6,
+                      unformat_vl_api_ip6_address, &pfx->grp_address.ip6))
+   {
+       pfx->af = ADDRESS_IP6;
+       pfx->grp_address_length = 256;
+   }
+   else if (unformat (input, "%U",
+                      unformat_vl_api_ip4_address, &pfx->grp_address.ip4))
+   {
+       pfx->af = ADDRESS_IP4;
+       pfx->grp_address_length = 32;
+       clib_memset(&pfx->src_address, 0, sizeof(pfx->src_address));
+   }
+   else if (unformat (input, "%U",
+                      unformat_vl_api_ip6_address, &pfx->grp_address.ip6))
+   {
+       pfx->af = ADDRESS_IP6;
+       pfx->grp_address_length = 128;
+       clib_memset(&pfx->src_address, 0, sizeof(pfx->src_address));
+   }
+   else
+       return (0);
+
+   return (1);
+}
+