-
- M (LISP_LOCATOR_DUMP, lisp_locator_dump);
-
- mp->locator_set_index = htonl (locator_set_index);
- mp->filter = filter;
-
- /* send it... */
- S;
-
- /* Use a control ping for synchronization */
- {
- vl_api_noprint_control_ping_t *mp;
- M (NOPRINT_CONTROL_PING, noprint_control_ping);
- S;
- }
- /* Wait for a reply... */
- W;
-}
-
-static inline void
-clean_locator_set_message (vat_main_t * vam)
-{
- locator_set_msg_t *ls = 0;
-
- vec_foreach (ls, vam->locator_set_msg)
- {
- vec_free (ls->locator_set_name);
- }
-
- vec_free (vam->locator_set_msg);
-}
-
-static int
-print_locator_in_locator_set (vat_main_t * vam, u8 filter)
-{
- locator_set_msg_t *ls;
- locator_msg_t *loc;
- u8 *tmp_str = 0;
- int i = 0, ret = 0;
-
- vec_foreach (ls, vam->locator_set_msg)
- {
- ret = lisp_locator_dump_send_msg (vam, ls->locator_set_index, filter);
- if (ret)
- {
- vec_free (vam->locator_msg);
- clean_locator_set_message (vam);
- return ret;
- }
-
- tmp_str = format (0, "%=20s%=16d%s", ls->locator_set_name,
- ls->locator_set_index,
- vec_len (vam->locator_msg) ? "" : "\n");
- i = 0;
- vec_foreach (loc, vam->locator_msg)
- {
- if (i)
- {
- tmp_str = format (tmp_str, "%=37s", " ");
- }
- if (loc->local)
- {
- tmp_str = format (tmp_str, "%=16d%=16d%=16d\n",
- loc->sw_if_index, loc->priority, loc->weight);
- }
- else
- {
- tmp_str = format (tmp_str, "%=16U%=16d%=16d\n",
- loc->is_ipv6 ? format_ip6_address :
- format_ip4_address,
- loc->ip_address, loc->priority, loc->weight);
- }
- i++;
- }
-
- fformat (vam->ofp, "%s", tmp_str);
- vec_free (tmp_str);
- vec_free (vam->locator_msg);
- }
-
- clean_locator_set_message (vam);
-
- return ret;
-}
-
-static int
-json_locator_in_locator_set (vat_main_t * vam, u8 filter)
-{
- locator_set_msg_t *ls;
- locator_msg_t *loc;
- vat_json_node_t *node = NULL;
- vat_json_node_t *locator_array;
- vat_json_node_t *locator;
- struct in6_addr ip6;
- struct in_addr ip4;
- int ret = 0;
-
- if (!vec_len (vam->locator_set_msg))
- {
- /* just print [] */
- vat_json_init_array (&vam->json_tree);
- vat_json_print (vam->ofp, &vam->json_tree);
- vam->json_tree.type = VAT_JSON_NONE;
- return ret;
- }
-
- if (VAT_JSON_ARRAY != vam->json_tree.type)
- {
- ASSERT (VAT_JSON_NONE == vam->json_tree.type);
- vat_json_init_array (&vam->json_tree);
- }
-
- vec_foreach (ls, vam->locator_set_msg)
- {
- ret = lisp_locator_dump_send_msg (vam, ls->locator_set_index, filter);
- if (ret)
- {
- vec_free (ls->locator_set_name);
- vec_free (vam->locator_msg);
- vec_free (vam->locator_set_msg);
- vat_json_free (&vam->json_tree);
- vam->json_tree.type = VAT_JSON_NONE;
- return ret;
- }
-
- node = vat_json_array_add (&vam->json_tree);
- vat_json_init_object (node);
-
- vat_json_object_add_uint (node, "locator-set-index",
- ls->locator_set_index);
- vat_json_object_add_string_copy (node, "locator-set",
- ls->locator_set_name);
- locator_array = vat_json_object_add_list (node, "locator");
- vec_foreach (loc, vam->locator_msg)
- {
- locator = vat_json_array_add (locator_array);
- vat_json_init_object (locator);
- if (loc->local)
- {
- vat_json_object_add_uint (locator, "locator-index",
- loc->sw_if_index);
- }
- else
- {
- if (loc->is_ipv6)
- {
- clib_memcpy (&ip6, loc->ip_address, sizeof (ip6));
- vat_json_object_add_ip6 (locator, "locator", ip6);
- }
- else
- {
- clib_memcpy (&ip4, loc->ip_address, sizeof (ip4));
- vat_json_object_add_ip4 (locator, "locator", ip4);
- }
- }
- vat_json_object_add_uint (locator, "priority", loc->priority);
- vat_json_object_add_uint (locator, "weight", loc->weight);
- }
-
- vec_free (ls->locator_set_name);
- vec_free (vam->locator_msg);
- }
-
- vat_json_print (vam->ofp, &vam->json_tree);
- vat_json_free (&vam->json_tree);
- vam->json_tree.type = VAT_JSON_NONE;
-
- vec_free (vam->locator_set_msg);
-
- return ret;
-}
-
-static int
-get_locator_set_index_from_msg (vat_main_t * vam, u8 * locator_set,
- u32 * locator_set_index)
-{
- locator_set_msg_t *ls;
- int ret = 0;
-
- *locator_set_index = ~0;
-
- if (!vec_len (vam->locator_set_msg))
- {
- return ret;
- }
-
- vec_foreach (ls, vam->locator_set_msg)
- {
- if (!strcmp ((char *) locator_set, (char *) ls->locator_set_name))
- {
- *locator_set_index = ls->locator_set_index;
- vec_free (vam->locator_set_msg);
- return ret;
- }
- }
-
- vec_free (vam->locator_set_msg);
-
- return ret;
-}
-
-static int
-get_locator_set_index (vat_main_t * vam, u8 * locator_set,
- u32 * locator_set_index)
-{
- vl_api_lisp_locator_set_dump_t *mp;
- f64 timeout = ~0;
-
- M (LISP_LOCATOR_SET_DUMP, lisp_locator_set_dump);
- /* send it... */
- S;
-
- /* Use a control ping for synchronization */
- {
- vl_api_noprint_control_ping_t *mp;
- M (NOPRINT_CONTROL_PING, noprint_control_ping);
- S;
- }
-
- vam->noprint_msg = 1;
- /* Wait for a reply... */
- /* *INDENT-OFF* */
- W_L
- ({
- get_locator_set_index_from_msg (vam, locator_set, locator_set_index);
- vam->noprint_msg = 0;
- });
- /* *INDENT-ON* */
-
- /* NOTREACHED */
- return 0;
-}
-
-static inline int
-lisp_locator_dump (vat_main_t * vam, u32 locator_set_index, u8 * locator_set,
- u8 filter)
-{
- int ret = 0;
-
- ASSERT (vam);
-
- if (!vam->json_output)
- {
- fformat (vam->ofp, "%=20s%=16s%=16s\n",
- "locator", "priority", "weight");
- }
-
- if (locator_set)
- {
- ret = get_locator_set_index (vam, locator_set, &locator_set_index);
- }
-
- if (!ret && ~0 == locator_set_index)
- {
- return -99;
- }
-
- ret = lisp_locator_dump_send_msg (vam, locator_set_index, filter);
-
- return ret;
-}
-
-static int
-lisp_locator_set_dump (vat_main_t * vam, u8 filter)
-{
- vl_api_lisp_locator_set_dump_t *mp;
- f64 timeout = ~0;
-
- if (!vam->json_output)
- {
- fformat (vam->ofp, "%=20s%=16s%=16s%=16s%=16s\n",
- "locator-set", "locator-set-index", "locator", "priority",
- "weight");
- }
-
- vam->noprint_msg = 1;
-
- M (LISP_LOCATOR_SET_DUMP, lisp_locator_set_dump);
-
- mp->filter = filter;
-
- /* send it... */
- S;
-
- /* Use a control ping for synchronization */
- {
- vl_api_noprint_control_ping_t *mp;
- M (NOPRINT_CONTROL_PING, noprint_control_ping);
- S;
- }
-
- /* Wait for a reply... */
- /* *INDENT-OFF* */
- W_L
- ({
- if (vam->noprint_msg)
- {
- if (!vam->json_output)
- {
- print_locator_in_locator_set(vam, filter);
- }
- else
- {
- json_locator_in_locator_set(vam, filter);
- }
- }
- vam->noprint_msg = 0;
- });
- /* *INDENT-ON* */
-
- /* NOTREACHED */
- return 0;
-}
-
-static int
-api_lisp_locator_set_dump (vat_main_t * vam)
-{
- unformat_input_t *input = vam->input;
- vam->noprint_msg = 0;
- u32 locator_set_index = ~0;
- u8 locator_set_index_set = 0;
- u8 *locator_set = 0;
- u8 locator_set_set = 0;
- u8 filter = 0;
- int ret = 0;