X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Ftypes.c;h=f9993b1883bd7ce2d1fdab4c5e848b9187a05f1e;hb=ab05508e1;hp=97dadbd4778ce9e533ee9894c1f30497648241be;hpb=50f0ac0f097e5495da1f2b1816106e3d420ff34b;p=vpp.git diff --git a/src/vpp/api/types.c b/src/vpp/api/types.c index 97dadbd4778..f9993b1883b 100644 --- a/src/vpp/api/types.c +++ b/src/vpp/api/types.c @@ -19,6 +19,9 @@ #include #include +const vl_api_mac_address_t VL_API_ZERO_MAC_ADDRESS; +const vl_api_address_t VL_API_ZERO_ADDRESS; + u8 * format_vl_api_address_family (u8 * s, va_list * args) { @@ -86,7 +89,7 @@ format_vl_api_prefix (u8 * s, va_list * args) const vl_api_prefix_t *pfx = va_arg (*args, vl_api_prefix_t *); s = format (s, "%U/%d", format_vl_api_address, - &pfx->address, pfx->address_length); + &pfx->address, pfx->len); return s; } @@ -164,8 +167,55 @@ unformat_vl_api_prefix (unformat_input_t * input, va_list * args) vl_api_prefix_t *pfx = va_arg (*args, vl_api_prefix_t *); if (unformat (input, "%U/%d", unformat_vl_api_address, &pfx->address, - &pfx->address_length)) + &pfx->len)) return (1); 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); +} +