X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvpp%2Fapi%2Ftypes.c;h=92905c260d21455eb85ad56198aab8a4e19e7d79;hp=1e36bf5fb694d8c428ffca9d94243451d23b8883;hb=7dd63e5cc;hpb=8c8acc027871f97370ee549306876690030c3bbb diff --git a/src/vpp/api/types.c b/src/vpp/api/types.c index 1e36bf5fb69..92905c260d2 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, int); + + 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; } @@ -37,12 +53,32 @@ format_vl_api_address_union (u8 * s, va_list * args) { const vl_api_address_union_t *addr = va_arg (*args, vl_api_address_union_t *); - vl_api_address_family_t af = va_arg (*args, vl_api_address_family_t); + vl_api_address_family_t af = va_arg (*args, int); 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; } @@ -53,8 +89,30 @@ 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; +} + +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)); +} +u8 * +format_vl_api_version (u8 * s, va_list * args) +{ + vl_api_version_t *ver = va_arg (*args, vl_api_version_t *); + s = format(s, "%d.%d.%d", ver->major, ver->minor, ver->patch); + if (ver->pre_release[0] != 0) + { + s = format(s, "-%v", ver->pre_release); + if (ver->build_metadata[0] != 0) + s = format(s, "+%v", ver->build_metadata); + } return s; } @@ -63,7 +121,7 @@ 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 +139,113 @@ 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->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); +} + +uword unformat_vl_api_version (unformat_input_t * input, va_list * args) +{ +vl_api_version_t *ver = va_arg (*args, vl_api_version_t *); + +if (unformat (input, "%d.%d.%d-%s+%s", ver->major, ver->minor, ver->patch, ver->pre_release, ver->build_metadata + )) + return (1); +else if (unformat (input, "%d.%d.%d-%s", ver->major, ver->minor, ver->patch, ver->pre_release + )) + return (1); +else if (unformat (input, "%d.%d.%d", ver->major, ver->minor, ver->patch + )) + return (1); + + return (0); +}