X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Ftypes.c;h=3d556b72bfd804bd33fc5d7b856da00b501e8351;hb=097fa66b9;hp=e36b8dd6781f11c71ef09651f2883b3842cb5dce;hpb=37029305c671f4e2d091d6f6c22142634e409043;p=vpp.git diff --git a/src/vpp/api/types.c b/src/vpp/api/types.c index e36b8dd6781..3d556b72bfd 100644 --- a/src/vpp/api/types.c +++ b/src/vpp/api/types.c @@ -19,15 +19,31 @@ #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) +{ + vl_api_address_family_t af = va_arg (*args, vl_api_address_family_t); + + if (ADDRESS_IP6 == clib_net_to_host_u32 (af)) + s = format (s, "ip4"); + else + s = format (s, "ip6"); + + return s; +} + u8 * format_vl_api_address (u8 * s, va_list * args) { const vl_api_address_t *addr = va_arg (*args, vl_api_address_t *); if (ADDRESS_IP6 == clib_net_to_host_u32 (addr->af)) - s = format (s, "ip6:%U", format_ip6_address, addr->un.ip6); + s = format (s, "%U", format_ip6_address, addr->un.ip6); else - s = format (s, "ip4:%U", format_ip4_address, addr->un.ip4); + s = format (s, "%U", format_ip4_address, addr->un.ip4); return s; } @@ -40,9 +56,9 @@ format_vl_api_address_union (u8 * s, va_list * args) vl_api_address_family_t af = va_arg (*args, vl_api_address_family_t); if (ADDRESS_IP6 == af) - s = format (s, "ip6:%U", format_ip6_address, addr->ip6); + s = format (s, "%U", format_ip6_address, addr->ip6); else - s = format (s, "ip4:%U", format_ip4_address, addr->ip4); + s = format (s, "%U", format_ip4_address, addr->ip4); return s; } @@ -109,6 +125,22 @@ unformat_vl_api_address (unformat_input_t * input, va_list * args) return (1); } +uword +unformat_vl_api_address_family (unformat_input_t * input, + va_list * args) +{ + vl_api_address_family_t *af = va_arg (*args, vl_api_address_family_t *); + + if (unformat (input, "ip4") || unformat (input, "ipv4")) + *af = clib_host_to_net_u32(ADDRESS_IP4); + else if (unformat (input, "ip6") || unformat (input, "ipv6")) + *af = clib_host_to_net_u32(ADDRESS_IP6); + else + return (0); + + return (1); +} + uword unformat_vl_api_ip4_address (unformat_input_t * input, va_list * args) { @@ -140,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); +} +