diff options
Diffstat (limited to 'src/vpp/api/types.c')
-rw-r--r-- | src/vpp/api/types.c | 47 |
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); +} + |