aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp/api/types.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vpp/api/types.c')
-rw-r--r--src/vpp/api/types.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/vpp/api/types.c b/src/vpp/api/types.c
index a4766c298c2..3d556b72bfd 100644
--- a/src/vpp/api/types.c
+++ b/src/vpp/api/types.c
@@ -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);
+}
+