X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Ftypes.c;h=3d556b72bfd804bd33fc5d7b856da00b501e8351;hb=097fa66b9;hp=1e36bf5fb694d8c428ffca9d94243451d23b8883;hpb=8c8acc027871f97370ee549306876690030c3bbb;p=vpp.git diff --git a/src/vpp/api/types.c b/src/vpp/api/types.c index 1e36bf5fb69..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,29 @@ 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; +} + +u8 * +format_vl_api_ip4_address (u8 * s, va_list * args) +{ + const vl_api_ip4_address_t *addr = va_arg (*args, vl_api_ip4_address_t *); + + s = format (s, "%U", format_ip4_address, addr); + + return s; +} + +u8 * +format_vl_api_ip6_address (u8 * s, va_list * args) +{ + const vl_api_ip6_address_t *addr = va_arg (*args, vl_api_ip6_address_t *); + + s = format (s, "%U", format_ip6_address, addr); return s; } @@ -58,12 +94,20 @@ format_vl_api_prefix (u8 * s, va_list * args) return s; } +u8 * +format_vl_api_mac_address (u8 * s, va_list * args) +{ + vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *); + + return (format (s, "%U", format_ethernet_address, mac)); +} + uword unformat_vl_api_mac_address (unformat_input_t * input, va_list * args) { vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *); - return (unformat (input, "%U",unformat_ethernet_address, mac->bytes)); + return (unformat (input, "%U",unformat_ethernet_address, mac)); } uword @@ -81,11 +125,97 @@ unformat_vl_api_address (unformat_input_t * input, va_list * args) return (1); } -u8 * -format_vl_api_mac_address (u8 * s, va_list * args) +uword +unformat_vl_api_address_family (unformat_input_t * input, + va_list * args) { - vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *); + 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) +{ + vl_api_ip4_address_t *ip = va_arg (*args, vl_api_ip4_address_t *); - return (format (s, "%U", format_ethernet_address, mac->bytes)); + if (unformat (input, "%U", unformat_ip4_address, ip)) + return (1); + return (0); +} + +uword +unformat_vl_api_ip6_address (unformat_input_t * input, va_list * args) +{ + vl_api_ip6_address_t *ip = va_arg (*args, vl_api_ip6_address_t *); + + if (unformat (input, "%U", unformat_ip6_address, ip)) + return (1); + return (0); +} + +uword +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)) + 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); }