LCOV - code coverage report
Current view: top level - plugins/lisp/lisp-cp - one_test.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 1386 0.0 %
Date: 2023-07-05 22:20:52 Functions: 0 93 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2015 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : 
      16             : #include <vat/vat.h>
      17             : #include <vlibapi/api.h>
      18             : #include <vlibmemory/api.h>
      19             : #include <vppinfra/error.h>
      20             : 
      21             : #include <vnet/ip/ip_format_fns.h>
      22             : #include <vnet/ethernet/ethernet_format_fns.h>
      23             : #include <vnet/ethernet/mac_address.h>
      24             : #include <lisp/lisp-cp/lisp_types.h>
      25             : 
      26             : /* define message IDs */
      27             : #include <lisp/lisp-cp/one.api_enum.h>
      28             : #include <lisp/lisp-cp/one.api_types.h>
      29             : #include <vlibmemory/vlib.api_types.h>
      30             : 
      31             : typedef struct
      32             : {
      33             :   /* API message ID base */
      34             :   u16 msg_id_base;
      35             :   u32 ping_id;
      36             :   vat_main_t *vat_main;
      37             : } one_test_main_t;
      38             : 
      39             : one_test_main_t one_test_main;
      40             : 
      41             : #define __plugin_msg_base one_test_main.msg_id_base
      42             : #include <vlibapi/vat_helper_macros.h>
      43             : 
      44             : #define FINISH                                                                \
      45             :   vec_add1 (s, 0);                                                            \
      46             :   vlib_cli_output (handle, (char *) s);                                       \
      47             :   vec_free (s);                                                               \
      48             :   return handle;
      49             : 
      50             : #define LISP_PING(_lm, mp_ping)                                         \
      51             :   if (!(_lm)->ping_id)                                                  \
      52             :     (_lm)->ping_id = vl_msg_api_get_msg_index ((u8 *) (VL_API_CONTROL_PING_CRC)); \
      53             :   mp_ping = vl_msg_api_alloc_as_if_client (sizeof (*mp_ping));          \
      54             :   mp_ping->_vl_msg_id = htons ((_lm)->ping_id);                         \
      55             :   mp_ping->client_index = vam->my_client_index;                         \
      56             :   fformat (vam->ofp, "Sending ping id=%d\n", (_lm)->ping_id);           \
      57             :   vam->result_ready = 0;                                                \
      58             : 
      59             : typedef struct
      60             : {
      61             :   u32 spi;
      62             :   u8 si;
      63             : } __attribute__ ((__packed__)) lisp_nsh_api_t;
      64             : 
      65             : static uword
      66           0 : unformat_nsh_address (unformat_input_t * input, va_list * args)
      67             : {
      68           0 :   lisp_nsh_api_t *nsh = va_arg (*args, lisp_nsh_api_t *);
      69           0 :   return unformat (input, "SPI:%d SI:%d", &nsh->spi, &nsh->si);
      70             : }
      71             : 
      72             : static u8 *
      73           0 : format_nsh_address_vat (u8 * s, va_list * args)
      74             : {
      75           0 :   nsh_t *a = va_arg (*args, nsh_t *);
      76           0 :   return format (s, "SPI:%d SI:%d", clib_net_to_host_u32 (a->spi), a->si);
      77             : }
      78             : 
      79             : static u8 *
      80           0 : format_lisp_transport_protocol (u8 * s, va_list * args)
      81             : {
      82           0 :   u32 proto = va_arg (*args, u32);
      83             : 
      84           0 :   switch (proto)
      85             :     {
      86           0 :     case 1:
      87           0 :       return format (s, "udp");
      88           0 :     case 2:
      89           0 :       return format (s, "api");
      90           0 :     default:
      91           0 :       return 0;
      92             :     }
      93             :   return 0;
      94             : }
      95             : 
      96             : static void
      97           0 : vl_api_one_locator_details_t_handler (vl_api_one_locator_details_t * mp)
      98             : {
      99           0 :   vat_main_t *vam = &vat_main;
     100           0 :   u8 *s = 0;
     101             : 
     102           0 :   if (mp->local)
     103             :     {
     104           0 :       s = format (s, "%=16d%=16d%=16d",
     105           0 :                   ntohl (mp->sw_if_index), mp->priority, mp->weight);
     106             :     }
     107             :   else
     108             :     {
     109           0 :       s = format (s, "%=16U%=16d%=16d",
     110             :                   format_ip46_address,
     111           0 :                   mp->ip_address, mp->priority, mp->weight);
     112             :     }
     113             : 
     114           0 :   print (vam->ofp, "%v", s);
     115           0 :   vec_free (s);
     116           0 : }
     117             : 
     118             : static void
     119           0 : vl_api_one_locator_set_details_t_handler (vl_api_one_locator_set_details_t *
     120             :                                           mp)
     121             : {
     122           0 :   vat_main_t *vam = &vat_main;
     123           0 :   u8 *ls_name = 0;
     124             : 
     125           0 :   ls_name = format (0, "%s", mp->ls_name);
     126             : 
     127           0 :   print (vam->ofp, "%=10d%=15v", clib_net_to_host_u32 (mp->ls_index),
     128             :          ls_name);
     129           0 :   vec_free (ls_name);
     130           0 : }
     131             : 
     132           0 : static void vl_api_one_get_transport_protocol_reply_t_handler
     133             :   (vl_api_one_get_transport_protocol_reply_t * mp)
     134             : {
     135           0 :   vat_main_t *vam = &vat_main;
     136           0 :   i32 retval = ntohl (mp->retval);
     137           0 :   if (vam->async_mode)
     138             :     {
     139           0 :       vam->async_errors += (retval < 0);
     140             :     }
     141             :   else
     142             :     {
     143           0 :       u32 proto = mp->protocol;
     144           0 :       print (vam->ofp, "Transport protocol: %U",
     145             :              format_lisp_transport_protocol, proto);
     146           0 :       vam->retval = retval;
     147           0 :       vam->result_ready = 1;
     148             :     }
     149           0 : }
     150             : 
     151           0 : static void vl_api_one_add_del_locator_set_reply_t_handler
     152             :   (vl_api_one_add_del_locator_set_reply_t * mp)
     153             : {
     154           0 :   vat_main_t *vam = &vat_main;
     155           0 :   i32 retval = ntohl (mp->retval);
     156           0 :   if (vam->async_mode)
     157             :     {
     158           0 :       vam->async_errors += (retval < 0);
     159             :     }
     160             :   else
     161             :     {
     162           0 :       vam->retval = retval;
     163           0 :       vam->result_ready = 1;
     164             :     }
     165           0 : }
     166             : 
     167             : static u8 *
     168           0 : format_lisp_flat_eid (u8 * s, va_list * args)
     169             : {
     170           0 :   vl_api_eid_t *eid = va_arg (*args, vl_api_eid_t *);
     171             : 
     172           0 :   switch (eid->type)
     173             :     {
     174           0 :     case EID_TYPE_API_PREFIX:
     175           0 :       if (eid->address.prefix.address.af)
     176           0 :         return format (s, "%U/%d", format_ip6_address,
     177           0 :                        eid->address.prefix.address.un.ip6,
     178           0 :                        eid->address.prefix.len);
     179           0 :       return format (s, "%U/%d", format_ip4_address,
     180           0 :                      eid->address.prefix.address.un.ip4,
     181           0 :                      eid->address.prefix.len);
     182           0 :     case EID_TYPE_API_MAC:
     183           0 :       return format (s, "%U", format_ethernet_address, eid->address.mac);
     184           0 :     case EID_TYPE_API_NSH:
     185           0 :       return format (s, "%U", format_nsh_address_vat, eid->address.nsh);
     186             :     }
     187           0 :   return 0;
     188             : }
     189             : 
     190             : static u8 *
     191           0 : format_lisp_eid_vat (u8 * s, va_list * args)
     192             : {
     193           0 :   vl_api_eid_t *deid = va_arg (*args, vl_api_eid_t *);
     194           0 :   vl_api_eid_t *seid = va_arg (*args, vl_api_eid_t *);
     195           0 :   u8 is_src_dst = (u8) va_arg (*args, int);
     196             : 
     197           0 :   if (is_src_dst)
     198           0 :     s = format (s, "%U|", format_lisp_flat_eid, seid);
     199             : 
     200           0 :   s = format (s, "%U", format_lisp_flat_eid, deid);
     201             : 
     202           0 :   return s;
     203             : }
     204             : 
     205             : static void
     206           0 : vl_api_one_eid_table_details_t_handler (vl_api_one_eid_table_details_t * mp)
     207             : {
     208           0 :   vat_main_t *vam = &vat_main;
     209           0 :   u8 *s = 0, *eid = 0;
     210             : 
     211           0 :   if (~0 == mp->locator_set_index)
     212           0 :     s = format (0, "action: %d", mp->action);
     213             :   else
     214           0 :     s = format (0, "%d", clib_net_to_host_u32 (mp->locator_set_index));
     215             : 
     216           0 :   eid = format (0, "%U", format_lisp_eid_vat,
     217           0 :                 &mp->deid, &mp->seid, mp->is_src_dst);
     218           0 :   vec_add1 (eid, 0);
     219             : 
     220           0 :   print (vam->ofp, "[%d] %-35s%-20s%-30s%-20d%-20d%-10d%-20s",
     221             :          clib_net_to_host_u32 (mp->vni),
     222             :          eid,
     223           0 :          mp->is_local ? "local" : "remote",
     224           0 :          s, clib_net_to_host_u32 (mp->ttl), mp->authoritative,
     225           0 :          clib_net_to_host_u16 (mp->key.id), mp->key.key);
     226             : 
     227           0 :   vec_free (s);
     228           0 :   vec_free (eid);
     229           0 : }
     230             : 
     231             : static void
     232           0 : vl_api_one_stats_details_t_handler (vl_api_one_stats_details_t * mp)
     233             : {
     234           0 :   vat_main_t *vam = &vat_main;
     235           0 :   u8 *seid = 0, *deid = 0;
     236             :   ip46_address_t lloc, rloc;
     237             : 
     238           0 :   deid = format (0, "%U", format_lisp_eid_vat, &mp->deid, 0, 0);
     239             : 
     240           0 :   seid = format (0, "%U", format_lisp_eid_vat, &mp->seid, 0, 0);
     241             : 
     242           0 :   vec_add1 (deid, 0);
     243           0 :   vec_add1 (seid, 0);
     244             : 
     245           0 :   if (mp->lloc.af)
     246             :     {
     247           0 :       clib_memcpy (&lloc.ip6, mp->lloc.un.ip6, 16);
     248           0 :       clib_memcpy (&rloc.ip6, mp->rloc.un.ip6, 16);
     249             :     }
     250             :   else
     251             :     {
     252           0 :       clib_memcpy (&lloc.ip4, mp->lloc.un.ip4, 4);
     253           0 :       clib_memcpy (&rloc.ip4, mp->rloc.un.ip4, 4);
     254             :     }
     255             : 
     256             : 
     257           0 :   print (vam->ofp, "([%d] %s %s) (%U %U) %u %u",
     258             :          clib_net_to_host_u32 (mp->vni),
     259             :          seid, deid,
     260             :          format_ip46_address, lloc,
     261             :          format_ip46_address, rloc,
     262             :          clib_net_to_host_u32 (mp->pkt_count),
     263             :          clib_net_to_host_u32 (mp->bytes));
     264             : 
     265           0 :   vec_free (deid);
     266           0 :   vec_free (seid);
     267           0 : }
     268             : 
     269             : static void
     270           0 :   vl_api_one_eid_table_map_details_t_handler
     271             :   (vl_api_one_eid_table_map_details_t * mp)
     272             : {
     273           0 :   vat_main_t *vam = &vat_main;
     274             : 
     275           0 :   u8 *line = format (0, "%=10d%=10d",
     276             :                      clib_net_to_host_u32 (mp->vni),
     277             :                      clib_net_to_host_u32 (mp->dp_table));
     278           0 :   print (vam->ofp, "%v", line);
     279           0 :   vec_free (line);
     280           0 : }
     281             : 
     282             : static void
     283           0 :   vl_api_one_eid_table_vni_details_t_handler
     284             :   (vl_api_one_eid_table_vni_details_t * mp)
     285             : {
     286           0 :   vat_main_t *vam = &vat_main;
     287             : 
     288           0 :   u8 *line = format (0, "%d", clib_net_to_host_u32 (mp->vni));
     289           0 :   print (vam->ofp, "%v", line);
     290           0 :   vec_free (line);
     291           0 : }
     292             : 
     293             : static void
     294           0 :   vl_api_show_one_map_register_fallback_threshold_reply_t_handler
     295             :   (vl_api_show_one_map_register_fallback_threshold_reply_t * mp)
     296             : {
     297           0 :   vat_main_t *vam = &vat_main;
     298           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     299             : 
     300           0 :   print (vam->ofp, "fallback threshold value: %d", mp->value);
     301             : 
     302           0 :   vam->retval = retval;
     303           0 :   vam->result_ready = 1;
     304           0 : }
     305             : 
     306             : static void
     307           0 :   vl_api_show_one_map_register_state_reply_t_handler
     308             :   (vl_api_show_one_map_register_state_reply_t * mp)
     309             : {
     310           0 :   vat_main_t *vam = &vat_main;
     311           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     312             : 
     313           0 :   print (vam->ofp, "%s", mp->is_enable ? "enabled" : "disabled");
     314             : 
     315           0 :   vam->retval = retval;
     316           0 :   vam->result_ready = 1;
     317           0 : }
     318             : 
     319             : static void
     320           0 :   vl_api_show_one_rloc_probe_state_reply_t_handler
     321             :   (vl_api_show_one_rloc_probe_state_reply_t * mp)
     322             : {
     323           0 :   vat_main_t *vam = &vat_main;
     324           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     325             : 
     326           0 :   if (retval)
     327           0 :     goto end;
     328             : 
     329           0 :   print (vam->ofp, "%s", mp->is_enable ? "enabled" : "disabled");
     330           0 : end:
     331           0 :   vam->retval = retval;
     332           0 :   vam->result_ready = 1;
     333           0 : }
     334             : 
     335             : static void
     336           0 :   vl_api_show_one_stats_enable_disable_reply_t_handler
     337             :   (vl_api_show_one_stats_enable_disable_reply_t * mp)
     338             : {
     339           0 :   vat_main_t *vam = &vat_main;
     340           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     341             : 
     342           0 :   if (retval)
     343           0 :     goto end;
     344             : 
     345           0 :   print (vam->ofp, "%s", mp->is_enable ? "enabled" : "disabled");
     346           0 : end:
     347           0 :   vam->retval = retval;
     348           0 :   vam->result_ready = 1;
     349           0 : }
     350             : 
     351             : static void
     352           0 :   vl_api_one_ndp_entries_get_reply_t_handler
     353             :   (vl_api_one_ndp_entries_get_reply_t * mp)
     354             : {
     355           0 :   vat_main_t *vam = &vat_main;
     356             :   u32 i, n;
     357           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     358             : 
     359           0 :   if (retval)
     360           0 :     goto end;
     361             : 
     362           0 :   n = clib_net_to_host_u32 (mp->count);
     363             : 
     364           0 :   for (i = 0; i < n; i++)
     365           0 :     print (vam->ofp, "%U -> %U", format_ip6_address, &mp->entries[i].ip6,
     366           0 :            format_ethernet_address, mp->entries[i].mac);
     367             : 
     368           0 : end:
     369           0 :   vam->retval = retval;
     370           0 :   vam->result_ready = 1;
     371           0 : }
     372             : 
     373             : static void
     374           0 :   vl_api_one_l2_arp_entries_get_reply_t_handler
     375             :   (vl_api_one_l2_arp_entries_get_reply_t * mp)
     376             : {
     377           0 :   vat_main_t *vam = &vat_main;
     378             :   u32 i, n;
     379           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     380             : 
     381           0 :   if (retval)
     382           0 :     goto end;
     383             : 
     384           0 :   n = clib_net_to_host_u32 (mp->count);
     385             : 
     386           0 :   for (i = 0; i < n; i++)
     387           0 :     print (vam->ofp, "%U -> %U", format_ip4_address, &mp->entries[i].ip4,
     388           0 :            format_ethernet_address, mp->entries[i].mac);
     389             : 
     390           0 : end:
     391           0 :   vam->retval = retval;
     392           0 :   vam->result_ready = 1;
     393           0 : }
     394             : 
     395             : static void
     396           0 : vl_api_one_ndp_bd_get_reply_t_handler (vl_api_one_ndp_bd_get_reply_t * mp)
     397             : {
     398           0 :   vat_main_t *vam = &vat_main;
     399             :   u32 i, n;
     400           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     401             : 
     402           0 :   if (retval)
     403           0 :     goto end;
     404             : 
     405           0 :   n = clib_net_to_host_u32 (mp->count);
     406             : 
     407           0 :   for (i = 0; i < n; i++)
     408             :     {
     409           0 :       print (vam->ofp, "%d", clib_net_to_host_u32 (mp->bridge_domains[i]));
     410             :     }
     411             : 
     412           0 : end:
     413           0 :   vam->retval = retval;
     414           0 :   vam->result_ready = 1;
     415           0 : }
     416             : 
     417             : static void
     418           0 :   vl_api_one_l2_arp_bd_get_reply_t_handler
     419             :   (vl_api_one_l2_arp_bd_get_reply_t * mp)
     420             : {
     421           0 :   vat_main_t *vam = &vat_main;
     422             :   u32 i, n;
     423           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     424             : 
     425           0 :   if (retval)
     426           0 :     goto end;
     427             : 
     428           0 :   n = clib_net_to_host_u32 (mp->count);
     429             : 
     430           0 :   for (i = 0; i < n; i++)
     431             :     {
     432           0 :       print (vam->ofp, "%d", clib_net_to_host_u32 (mp->bridge_domains[i]));
     433             :     }
     434             : 
     435           0 : end:
     436           0 :   vam->retval = retval;
     437           0 :   vam->result_ready = 1;
     438           0 : }
     439             : 
     440             : static void
     441           0 :   vl_api_one_adjacencies_get_reply_t_handler
     442             :   (vl_api_one_adjacencies_get_reply_t * mp)
     443             : {
     444           0 :   vat_main_t *vam = &vat_main;
     445             :   u32 i, n;
     446           0 :   int retval = clib_net_to_host_u32 (mp->retval);
     447             :   vl_api_one_adjacency_t *a;
     448             : 
     449           0 :   if (retval)
     450           0 :     goto end;
     451             : 
     452           0 :   n = clib_net_to_host_u32 (mp->count);
     453             : 
     454           0 :   for (i = 0; i < n; i++)
     455             :     {
     456           0 :       a = &mp->adjacencies[i];
     457           0 :       print (vam->ofp, "%U %40U",
     458             :              format_lisp_flat_eid, a->leid, format_lisp_flat_eid, a->reid);
     459             :     }
     460             : 
     461           0 : end:
     462           0 :   vam->retval = retval;
     463           0 :   vam->result_ready = 1;
     464           0 : }
     465             : 
     466             : static void
     467           0 : vl_api_one_map_server_details_t_handler (vl_api_one_map_server_details_t * mp)
     468             : {
     469           0 :   vat_main_t *vam = &vat_main;
     470             : 
     471           0 :   print (vam->ofp, "%=20U",
     472           0 :          mp->ip_address.af ? format_ip6_address : format_ip4_address,
     473             :          mp->ip_address.un);
     474           0 : }
     475             : 
     476             : static void
     477           0 : vl_api_one_map_resolver_details_t_handler (vl_api_one_map_resolver_details_t
     478             :                                            * mp)
     479             : {
     480           0 :   vat_main_t *vam = &vat_main;
     481             : 
     482           0 :   print (vam->ofp, "%=20U",
     483           0 :          mp->ip_address.af ? format_ip6_address : format_ip4_address,
     484             :          mp->ip_address.un);
     485           0 : }
     486             : 
     487             : static void
     488           0 : vl_api_show_one_status_reply_t_handler (vl_api_show_one_status_reply_t * mp)
     489             : {
     490           0 :   vat_main_t *vam = &vat_main;
     491           0 :   i32 retval = ntohl (mp->retval);
     492             : 
     493           0 :   if (0 <= retval)
     494             :     {
     495           0 :       print (vam->ofp, "feature: %s\ngpe: %s",
     496           0 :              mp->feature_status ? "enabled" : "disabled",
     497           0 :              mp->gpe_status ? "enabled" : "disabled");
     498             :     }
     499             : 
     500           0 :   vam->retval = retval;
     501           0 :   vam->result_ready = 1;
     502           0 : }
     503             : 
     504             : static void
     505           0 :   vl_api_one_get_map_request_itr_rlocs_reply_t_handler
     506             :   (vl_api_one_get_map_request_itr_rlocs_reply_t * mp)
     507             : {
     508           0 :   vat_main_t *vam = &vat_main;
     509           0 :   i32 retval = ntohl (mp->retval);
     510             : 
     511           0 :   if (retval >= 0)
     512             :     {
     513           0 :       print (vam->ofp, "%=20s", mp->locator_set_name);
     514             :     }
     515             : 
     516           0 :   vam->retval = retval;
     517           0 :   vam->result_ready = 1;
     518           0 : }
     519             : 
     520             : static u8 *
     521           0 : format_lisp_map_request_mode (u8 * s, va_list * args)
     522             : {
     523           0 :   u32 mode = va_arg (*args, u32);
     524             : 
     525           0 :   switch (mode)
     526             :     {
     527           0 :     case 0:
     528           0 :       return format (0, "dst-only");
     529           0 :     case 1:
     530           0 :       return format (0, "src-dst");
     531             :     }
     532           0 :   return 0;
     533             : }
     534             : 
     535             : static void
     536           0 :   vl_api_show_one_map_request_mode_reply_t_handler
     537             :   (vl_api_show_one_map_request_mode_reply_t * mp)
     538             : {
     539           0 :   vat_main_t *vam = &vat_main;
     540           0 :   i32 retval = ntohl (mp->retval);
     541             : 
     542           0 :   if (0 <= retval)
     543             :     {
     544           0 :       u32 mode = mp->mode;
     545           0 :       print (vam->ofp, "map_request_mode: %U",
     546             :              format_lisp_map_request_mode, mode);
     547             :     }
     548             : 
     549           0 :   vam->retval = retval;
     550           0 :   vam->result_ready = 1;
     551           0 : }
     552             : 
     553             : static void
     554           0 :   vl_api_one_show_xtr_mode_reply_t_handler
     555             :   (vl_api_one_show_xtr_mode_reply_t * mp)
     556             : {
     557           0 :   vat_main_t *vam = &vat_main;
     558           0 :   i32 retval = ntohl (mp->retval);
     559             : 
     560           0 :   if (0 <= retval)
     561             :     {
     562           0 :       print (vam->ofp, "%s\n", mp->is_enable ? "enabled" : "disabled");
     563             :     }
     564             : 
     565           0 :   vam->retval = retval;
     566           0 :   vam->result_ready = 1;
     567           0 : }
     568             : 
     569             : static void
     570           0 :   vl_api_one_show_pitr_mode_reply_t_handler
     571             :   (vl_api_one_show_pitr_mode_reply_t * mp)
     572             : {
     573           0 :   vat_main_t *vam = &vat_main;
     574           0 :   i32 retval = ntohl (mp->retval);
     575             : 
     576           0 :   if (0 <= retval)
     577             :     {
     578           0 :       print (vam->ofp, "%s\n", mp->is_enable ? "enabled" : "disabled");
     579             :     }
     580             : 
     581           0 :   vam->retval = retval;
     582           0 :   vam->result_ready = 1;
     583           0 : }
     584             : 
     585             : static void
     586           0 :   vl_api_one_show_petr_mode_reply_t_handler
     587             :   (vl_api_one_show_petr_mode_reply_t * mp)
     588             : {
     589           0 :   vat_main_t *vam = &vat_main;
     590           0 :   i32 retval = ntohl (mp->retval);
     591             : 
     592           0 :   if (0 <= retval)
     593             :     {
     594           0 :       print (vam->ofp, "%s\n", mp->is_enable ? "enabled" : "disabled");
     595             :     }
     596             : 
     597           0 :   vam->retval = retval;
     598           0 :   vam->result_ready = 1;
     599           0 : }
     600             : 
     601             : static void
     602           0 :   vl_api_show_one_use_petr_reply_t_handler
     603             :   (vl_api_show_one_use_petr_reply_t * mp)
     604             : {
     605           0 :   vat_main_t *vam = &vat_main;
     606           0 :   i32 retval = ntohl (mp->retval);
     607             : 
     608           0 :   if (0 <= retval)
     609             :     {
     610           0 :       print (vam->ofp, "%s\n", mp->status ? "enabled" : "disabled");
     611           0 :       if (mp->status)
     612             :         {
     613           0 :           print (vam->ofp, "Proxy-ETR address; %U",
     614           0 :                  mp->ip_address.af ? format_ip6_address : format_ip4_address,
     615             :                  mp->ip_address.un);
     616             :         }
     617             :     }
     618             : 
     619           0 :   vam->retval = retval;
     620           0 :   vam->result_ready = 1;
     621           0 : }
     622             : 
     623             : static void
     624           0 :   vl_api_show_one_nsh_mapping_reply_t_handler
     625             :   (vl_api_show_one_nsh_mapping_reply_t * mp)
     626             : {
     627           0 :   vat_main_t *vam = &vat_main;
     628           0 :   i32 retval = ntohl (mp->retval);
     629             : 
     630           0 :   if (0 <= retval)
     631             :     {
     632           0 :       print (vam->ofp, "%-20s%-16s",
     633           0 :              mp->is_set ? "set" : "not-set",
     634           0 :              mp->is_set ? (char *) mp->locator_set_name : "");
     635             :     }
     636             : 
     637           0 :   vam->retval = retval;
     638           0 :   vam->result_ready = 1;
     639           0 : }
     640             : 
     641             : static void
     642           0 :   vl_api_show_one_map_register_ttl_reply_t_handler
     643             :   (vl_api_show_one_map_register_ttl_reply_t * mp)
     644             : {
     645           0 :   vat_main_t *vam = &vat_main;
     646           0 :   i32 retval = ntohl (mp->retval);
     647             : 
     648           0 :   if (0 <= retval)
     649             :     {
     650           0 :       print (vam->ofp, "ttl: %u", mp->ttl);
     651             :     }
     652             : 
     653           0 :   vam->retval = retval;
     654           0 :   vam->result_ready = 1;
     655           0 : }
     656             : 
     657             : static void
     658           0 : vl_api_show_one_pitr_reply_t_handler (vl_api_show_one_pitr_reply_t * mp)
     659             : {
     660           0 :   vat_main_t *vam = &vat_main;
     661           0 :   i32 retval = ntohl (mp->retval);
     662             : 
     663           0 :   if (0 <= retval)
     664             :     {
     665           0 :       print (vam->ofp, "%-20s%-16s",
     666           0 :              mp->status ? "enabled" : "disabled",
     667           0 :              mp->status ? (char *) mp->locator_set_name : "");
     668             :     }
     669             : 
     670           0 :   vam->retval = retval;
     671           0 :   vam->result_ready = 1;
     672           0 : }
     673             : 
     674             : /* *INDENT-OFF* */
     675             : /** Used for parsing LISP eids */
     676             : typedef CLIB_PACKED(struct{
     677             :   union {
     678             :           ip46_address_t ip;
     679             :           mac_address_t mac;
     680             :           lisp_nsh_api_t nsh;
     681             :   } addr;
     682             :   u32 len;       /**< prefix length if IP */
     683             :   u8 type;      /**< type of eid */
     684             : }) lisp_eid_vat_t;
     685             : /* *INDENT-ON* */
     686             : 
     687             : static uword
     688           0 : unformat_lisp_eid_vat (unformat_input_t * input, va_list * args)
     689             : {
     690           0 :   lisp_eid_vat_t *a = va_arg (*args, lisp_eid_vat_t *);
     691             : 
     692           0 :   clib_memset (a, 0, sizeof (a[0]));
     693             : 
     694           0 :   if (unformat (input, "%U/%d", unformat_ip46_address, a->addr.ip, &a->len))
     695             :     {
     696           0 :       a->type = 0;           /* ip prefix type */
     697             :     }
     698           0 :   else if (unformat (input, "%U", unformat_ethernet_address, &a->addr.mac))
     699             :     {
     700           0 :       a->type = 1;           /* mac type */
     701             :     }
     702           0 :   else if (unformat (input, "%U", unformat_nsh_address, a->addr.nsh))
     703             :     {
     704           0 :       a->type = 2;           /* NSH type */
     705           0 :       a->addr.nsh.spi = clib_host_to_net_u32 (a->addr.nsh.spi);
     706             :     }
     707             :   else
     708             :     {
     709           0 :       return 0;
     710             :     }
     711             : 
     712           0 :   if (a->type == 0)
     713             :     {
     714           0 :       if (ip46_address_is_ip4 (&a->addr.ip))
     715           0 :         return a->len > 32 ? 1 : 0;
     716             :       else
     717           0 :         return a->len > 128 ? 1 : 0;
     718             :     }
     719             : 
     720           0 :   return 1;
     721             : }
     722             : 
     723             : static void
     724           0 : lisp_eid_put_vat (vl_api_eid_t * eid, const lisp_eid_vat_t * vat_eid)
     725             : {
     726           0 :   eid->type = vat_eid->type;
     727           0 :   switch (eid->type)
     728             :     {
     729           0 :     case EID_TYPE_API_PREFIX:
     730           0 :       if (ip46_address_is_ip4 (&vat_eid->addr.ip))
     731             :         {
     732           0 :           clib_memcpy (&eid->address.prefix.address.un.ip4,
     733             :                        &vat_eid->addr.ip.ip4, 4);
     734           0 :           eid->address.prefix.address.af = ADDRESS_IP4;
     735           0 :           eid->address.prefix.len = vat_eid->len;
     736             :         }
     737             :       else
     738             :         {
     739           0 :           clib_memcpy (&eid->address.prefix.address.un.ip6,
     740             :                        &vat_eid->addr.ip.ip6, 16);
     741           0 :           eid->address.prefix.address.af = ADDRESS_IP6;
     742           0 :           eid->address.prefix.len = vat_eid->len;
     743             :         }
     744           0 :       return;
     745           0 :     case EID_TYPE_API_MAC:
     746           0 :       clib_memcpy (&eid->address.mac, &vat_eid->addr.mac,
     747             :                    sizeof (eid->address.mac));
     748           0 :       return;
     749           0 :     case EID_TYPE_API_NSH:
     750           0 :       clib_memcpy (&eid->address.nsh, &vat_eid->addr.nsh,
     751             :                    sizeof (eid->address.nsh));
     752           0 :       return;
     753           0 :     default:
     754           0 :       ASSERT (0);
     755           0 :       return;
     756             :     }
     757             : }
     758             : 
     759             : static int
     760           0 : api_one_add_del_locator_set (vat_main_t * vam)
     761             : {
     762           0 :   unformat_input_t *input = vam->input;
     763             :   vl_api_one_add_del_locator_set_t *mp;
     764           0 :   u8 is_add = 1;
     765           0 :   u8 *locator_set_name = NULL;
     766           0 :   u8 locator_set_name_set = 0;
     767           0 :   vl_api_local_locator_t locator, *locators = 0;
     768             :   u32 sw_if_index, priority, weight;
     769           0 :   u32 data_len = 0;
     770             : 
     771             :   int ret;
     772             :   /* Parse args required to build the message */
     773           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     774             :     {
     775           0 :       if (unformat (input, "del"))
     776             :         {
     777           0 :           is_add = 0;
     778             :         }
     779           0 :       else if (unformat (input, "locator-set %s", &locator_set_name))
     780             :         {
     781           0 :           locator_set_name_set = 1;
     782             :         }
     783           0 :       else if (unformat (input, "sw_if_index %u p %u w %u",
     784             :                          &sw_if_index, &priority, &weight))
     785             :         {
     786           0 :           locator.sw_if_index = htonl (sw_if_index);
     787           0 :           locator.priority = priority;
     788           0 :           locator.weight = weight;
     789           0 :           vec_add1 (locators, locator);
     790             :         }
     791             :       else
     792           0 :         if (unformat
     793             :             (input, "iface %U p %u w %u", unformat_sw_if_index, vam,
     794             :              &sw_if_index, &priority, &weight))
     795             :         {
     796           0 :           locator.sw_if_index = htonl (sw_if_index);
     797           0 :           locator.priority = priority;
     798           0 :           locator.weight = weight;
     799           0 :           vec_add1 (locators, locator);
     800             :         }
     801             :       else
     802           0 :         break;
     803             :     }
     804             : 
     805           0 :   if (locator_set_name_set == 0)
     806             :     {
     807           0 :       errmsg ("missing locator-set name");
     808           0 :       vec_free (locators);
     809           0 :       return -99;
     810             :     }
     811             : 
     812           0 :   if (vec_len (locator_set_name) > 64)
     813             :     {
     814           0 :       errmsg ("locator-set name too long");
     815           0 :       vec_free (locator_set_name);
     816           0 :       vec_free (locators);
     817           0 :       return -99;
     818             :     }
     819           0 :   vec_add1 (locator_set_name, 0);
     820             : 
     821           0 :   data_len = sizeof (vl_api_local_locator_t) * vec_len (locators);
     822             : 
     823             :   /* Construct the API message */
     824           0 :   M2 (ONE_ADD_DEL_LOCATOR_SET, mp, data_len);
     825             : 
     826           0 :   mp->is_add = is_add;
     827           0 :   clib_memcpy (mp->locator_set_name, locator_set_name,
     828             :                vec_len (locator_set_name));
     829           0 :   vec_free (locator_set_name);
     830             : 
     831           0 :   mp->locator_num = clib_host_to_net_u32 (vec_len (locators));
     832           0 :   if (locators)
     833           0 :     clib_memcpy (mp->locators, locators, data_len);
     834           0 :   vec_free (locators);
     835             : 
     836             :   /* send it... */
     837           0 :   S (mp);
     838             : 
     839             :   /* Wait for a reply... */
     840           0 :   W (ret);
     841           0 :   return ret;
     842             : }
     843             : 
     844             : #define api_lisp_add_del_locator_set api_one_add_del_locator_set
     845             : 
     846             : static int
     847           0 : api_one_add_del_locator (vat_main_t * vam)
     848             : {
     849           0 :   unformat_input_t *input = vam->input;
     850             :   vl_api_one_add_del_locator_t *mp;
     851           0 :   u32 tmp_if_index = ~0;
     852           0 :   u32 sw_if_index = ~0;
     853           0 :   u8 sw_if_index_set = 0;
     854           0 :   u8 sw_if_index_if_name_set = 0;
     855           0 :   u32 priority = ~0;
     856           0 :   u8 priority_set = 0;
     857           0 :   u32 weight = ~0;
     858           0 :   u8 weight_set = 0;
     859           0 :   u8 is_add = 1;
     860           0 :   u8 *locator_set_name = NULL;
     861           0 :   u8 locator_set_name_set = 0;
     862             :   int ret;
     863             : 
     864             :   /* Parse args required to build the message */
     865           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     866             :     {
     867           0 :       if (unformat (input, "del"))
     868             :         {
     869           0 :           is_add = 0;
     870             :         }
     871           0 :       else if (unformat (input, "locator-set %s", &locator_set_name))
     872             :         {
     873           0 :           locator_set_name_set = 1;
     874             :         }
     875           0 :       else if (unformat (input, "iface %U", unformat_sw_if_index, vam,
     876             :                          &tmp_if_index))
     877             :         {
     878           0 :           sw_if_index_if_name_set = 1;
     879           0 :           sw_if_index = tmp_if_index;
     880             :         }
     881           0 :       else if (unformat (input, "sw_if_index %d", &tmp_if_index))
     882             :         {
     883           0 :           sw_if_index_set = 1;
     884           0 :           sw_if_index = tmp_if_index;
     885             :         }
     886           0 :       else if (unformat (input, "p %d", &priority))
     887             :         {
     888           0 :           priority_set = 1;
     889             :         }
     890           0 :       else if (unformat (input, "w %d", &weight))
     891             :         {
     892           0 :           weight_set = 1;
     893             :         }
     894             :       else
     895           0 :         break;
     896             :     }
     897             : 
     898           0 :   if (locator_set_name_set == 0)
     899             :     {
     900           0 :       errmsg ("missing locator-set name");
     901           0 :       return -99;
     902             :     }
     903             : 
     904           0 :   if (sw_if_index_set == 0 && sw_if_index_if_name_set == 0)
     905             :     {
     906           0 :       errmsg ("missing sw_if_index");
     907           0 :       vec_free (locator_set_name);
     908           0 :       return -99;
     909             :     }
     910             : 
     911           0 :   if (sw_if_index_set != 0 && sw_if_index_if_name_set != 0)
     912             :     {
     913           0 :       errmsg ("cannot use both params interface name and sw_if_index");
     914           0 :       vec_free (locator_set_name);
     915           0 :       return -99;
     916             :     }
     917             : 
     918           0 :   if (priority_set == 0)
     919             :     {
     920           0 :       errmsg ("missing locator-set priority");
     921           0 :       vec_free (locator_set_name);
     922           0 :       return -99;
     923             :     }
     924             : 
     925           0 :   if (weight_set == 0)
     926             :     {
     927           0 :       errmsg ("missing locator-set weight");
     928           0 :       vec_free (locator_set_name);
     929           0 :       return -99;
     930             :     }
     931             : 
     932           0 :   if (vec_len (locator_set_name) > 64)
     933             :     {
     934           0 :       errmsg ("locator-set name too long");
     935           0 :       vec_free (locator_set_name);
     936           0 :       return -99;
     937             :     }
     938           0 :   vec_add1 (locator_set_name, 0);
     939             : 
     940             :   /* Construct the API message */
     941           0 :   M (ONE_ADD_DEL_LOCATOR, mp);
     942             : 
     943           0 :   mp->is_add = is_add;
     944           0 :   mp->sw_if_index = ntohl (sw_if_index);
     945           0 :   mp->priority = priority;
     946           0 :   mp->weight = weight;
     947           0 :   clib_memcpy (mp->locator_set_name, locator_set_name,
     948             :                vec_len (locator_set_name));
     949           0 :   vec_free (locator_set_name);
     950             : 
     951             :   /* send it... */
     952           0 :   S (mp);
     953             : 
     954             :   /* Wait for a reply... */
     955           0 :   W (ret);
     956           0 :   return ret;
     957             : }
     958             : 
     959             : #define api_lisp_add_del_locator api_one_add_del_locator
     960             : 
     961             : static int
     962           0 : api_one_add_del_local_eid (vat_main_t * vam)
     963             : {
     964           0 :   unformat_input_t *input = vam->input;
     965             :   vl_api_one_add_del_local_eid_t *mp;
     966           0 :   u8 is_add = 1;
     967           0 :   u8 eid_set = 0;
     968           0 :   lisp_eid_vat_t _eid, *eid = &_eid;
     969           0 :   u8 *locator_set_name = 0;
     970           0 :   u8 locator_set_name_set = 0;
     971           0 :   u32 vni = 0;
     972           0 :   u16 key_id = 0;
     973           0 :   u8 *key = 0;
     974             :   int ret;
     975             : 
     976             :   /* Parse args required to build the message */
     977           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     978             :     {
     979           0 :       if (unformat (input, "del"))
     980             :         {
     981           0 :           is_add = 0;
     982             :         }
     983           0 :       else if (unformat (input, "vni %d", &vni))
     984             :         {
     985             :           ;
     986             :         }
     987           0 :       else if (unformat (input, "eid %U", unformat_lisp_eid_vat, eid))
     988             :         {
     989           0 :           eid_set = 1;
     990             :         }
     991           0 :       else if (unformat (input, "locator-set %s", &locator_set_name))
     992             :         {
     993           0 :           locator_set_name_set = 1;
     994             :         }
     995           0 :       else if (unformat (input, "key-id %U", unformat_hmac_key_id, &key_id))
     996             :         ;
     997           0 :       else if (unformat (input, "secret-key %_%v%_", &key))
     998             :         ;
     999             :       else
    1000           0 :         break;
    1001             :     }
    1002             : 
    1003           0 :   if (locator_set_name_set == 0)
    1004             :     {
    1005           0 :       errmsg ("missing locator-set name");
    1006           0 :       return -99;
    1007             :     }
    1008             : 
    1009           0 :   if (0 == eid_set)
    1010             :     {
    1011           0 :       errmsg ("EID address not set!");
    1012           0 :       vec_free (locator_set_name);
    1013           0 :       return -99;
    1014             :     }
    1015             : 
    1016           0 :   if (key && (0 == key_id))
    1017             :     {
    1018           0 :       errmsg ("invalid key_id!");
    1019           0 :       return -99;
    1020             :     }
    1021             : 
    1022           0 :   if (vec_len (key) > 64)
    1023             :     {
    1024           0 :       errmsg ("key too long");
    1025           0 :       vec_free (key);
    1026           0 :       return -99;
    1027             :     }
    1028             : 
    1029           0 :   if (vec_len (locator_set_name) > 64)
    1030             :     {
    1031           0 :       errmsg ("locator-set name too long");
    1032           0 :       vec_free (locator_set_name);
    1033           0 :       return -99;
    1034             :     }
    1035           0 :   vec_add1 (locator_set_name, 0);
    1036             : 
    1037             :   /* Construct the API message */
    1038           0 :   M (ONE_ADD_DEL_LOCAL_EID, mp);
    1039             : 
    1040           0 :   mp->is_add = is_add;
    1041           0 :   lisp_eid_put_vat (&mp->eid, eid);
    1042           0 :   mp->vni = clib_host_to_net_u32 (vni);
    1043           0 :   mp->key.id = key_id;
    1044           0 :   clib_memcpy (mp->locator_set_name, locator_set_name,
    1045             :                vec_len (locator_set_name));
    1046           0 :   clib_memcpy (mp->key.key, key, vec_len (key));
    1047             : 
    1048           0 :   vec_free (locator_set_name);
    1049           0 :   vec_free (key);
    1050             : 
    1051             :   /* send it... */
    1052           0 :   S (mp);
    1053             : 
    1054             :   /* Wait for a reply... */
    1055           0 :   W (ret);
    1056           0 :   return ret;
    1057             : }
    1058             : 
    1059             : static int
    1060           0 : api_one_add_del_map_server (vat_main_t * vam)
    1061             : {
    1062           0 :   unformat_input_t *input = vam->input;
    1063             :   vl_api_one_add_del_map_server_t *mp;
    1064           0 :   u8 is_add = 1;
    1065           0 :   u8 ipv4_set = 0;
    1066           0 :   u8 ipv6_set = 0;
    1067             :   ip4_address_t ipv4;
    1068             :   ip6_address_t ipv6;
    1069             :   int ret;
    1070             : 
    1071             :   /* Parse args required to build the message */
    1072           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1073             :     {
    1074           0 :       if (unformat (input, "del"))
    1075             :         {
    1076           0 :           is_add = 0;
    1077             :         }
    1078           0 :       else if (unformat (input, "%U", unformat_ip4_address, &ipv4))
    1079             :         {
    1080           0 :           ipv4_set = 1;
    1081             :         }
    1082           0 :       else if (unformat (input, "%U", unformat_ip6_address, &ipv6))
    1083             :         {
    1084           0 :           ipv6_set = 1;
    1085             :         }
    1086             :       else
    1087           0 :         break;
    1088             :     }
    1089             : 
    1090           0 :   if (ipv4_set && ipv6_set)
    1091             :     {
    1092           0 :       errmsg ("both eid v4 and v6 addresses set");
    1093           0 :       return -99;
    1094             :     }
    1095             : 
    1096           0 :   if (!ipv4_set && !ipv6_set)
    1097             :     {
    1098           0 :       errmsg ("eid addresses not set");
    1099           0 :       return -99;
    1100             :     }
    1101             : 
    1102             :   /* Construct the API message */
    1103           0 :   M (ONE_ADD_DEL_MAP_SERVER, mp);
    1104             : 
    1105           0 :   mp->is_add = is_add;
    1106           0 :   if (ipv6_set)
    1107             :     {
    1108           0 :       mp->ip_address.af = 1;
    1109           0 :       clib_memcpy (mp->ip_address.un.ip6, &ipv6, sizeof (ipv6));
    1110             :     }
    1111             :   else
    1112             :     {
    1113           0 :       mp->ip_address.af = 0;
    1114           0 :       clib_memcpy (mp->ip_address.un.ip4, &ipv4, sizeof (ipv4));
    1115             :     }
    1116             : 
    1117             :   /* send it... */
    1118           0 :   S (mp);
    1119             : 
    1120             :   /* Wait for a reply... */
    1121           0 :   W (ret);
    1122           0 :   return ret;
    1123             : }
    1124             : 
    1125             : #define api_lisp_add_del_map_server api_one_add_del_map_server
    1126             : 
    1127             : static int
    1128           0 : api_one_add_del_map_resolver (vat_main_t * vam)
    1129             : {
    1130           0 :   unformat_input_t *input = vam->input;
    1131             :   vl_api_one_add_del_map_resolver_t *mp;
    1132           0 :   u8 is_add = 1;
    1133           0 :   u8 ipv4_set = 0;
    1134           0 :   u8 ipv6_set = 0;
    1135             :   ip4_address_t ipv4;
    1136             :   ip6_address_t ipv6;
    1137             :   int ret;
    1138             : 
    1139             :   /* Parse args required to build the message */
    1140           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1141             :     {
    1142           0 :       if (unformat (input, "del"))
    1143             :         {
    1144           0 :           is_add = 0;
    1145             :         }
    1146           0 :       else if (unformat (input, "%U", unformat_ip4_address, &ipv4))
    1147             :         {
    1148           0 :           ipv4_set = 1;
    1149             :         }
    1150           0 :       else if (unformat (input, "%U", unformat_ip6_address, &ipv6))
    1151             :         {
    1152           0 :           ipv6_set = 1;
    1153             :         }
    1154             :       else
    1155           0 :         break;
    1156             :     }
    1157             : 
    1158           0 :   if (ipv4_set && ipv6_set)
    1159             :     {
    1160           0 :       errmsg ("both eid v4 and v6 addresses set");
    1161           0 :       return -99;
    1162             :     }
    1163             : 
    1164           0 :   if (!ipv4_set && !ipv6_set)
    1165             :     {
    1166           0 :       errmsg ("eid addresses not set");
    1167           0 :       return -99;
    1168             :     }
    1169             : 
    1170             :   /* Construct the API message */
    1171           0 :   M (ONE_ADD_DEL_MAP_RESOLVER, mp);
    1172             : 
    1173           0 :   mp->is_add = is_add;
    1174           0 :   if (ipv6_set)
    1175             :     {
    1176           0 :       mp->ip_address.af = 1;
    1177           0 :       clib_memcpy (mp->ip_address.un.ip6, &ipv6, sizeof (ipv6));
    1178             :     }
    1179             :   else
    1180             :     {
    1181           0 :       mp->ip_address.af = 0;
    1182           0 :       clib_memcpy (mp->ip_address.un.ip6, &ipv4, sizeof (ipv4));
    1183             :     }
    1184             : 
    1185             :   /* send it... */
    1186           0 :   S (mp);
    1187             : 
    1188             :   /* Wait for a reply... */
    1189           0 :   W (ret);
    1190           0 :   return ret;
    1191             : }
    1192             : 
    1193             : static int
    1194           0 : api_one_rloc_probe_enable_disable (vat_main_t * vam)
    1195             : {
    1196           0 :   unformat_input_t *input = vam->input;
    1197             :   vl_api_one_rloc_probe_enable_disable_t *mp;
    1198           0 :   u8 is_set = 0;
    1199           0 :   u8 is_enable = 0;
    1200             :   int ret;
    1201             : 
    1202             :   /* Parse args required to build the message */
    1203           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1204             :     {
    1205           0 :       if (unformat (input, "enable"))
    1206             :         {
    1207           0 :           is_set = 1;
    1208           0 :           is_enable = 1;
    1209             :         }
    1210           0 :       else if (unformat (input, "disable"))
    1211           0 :         is_set = 1;
    1212             :       else
    1213           0 :         break;
    1214             :     }
    1215             : 
    1216           0 :   if (!is_set)
    1217             :     {
    1218           0 :       errmsg ("Value not set");
    1219           0 :       return -99;
    1220             :     }
    1221             : 
    1222             :   /* Construct the API message */
    1223           0 :   M (ONE_RLOC_PROBE_ENABLE_DISABLE, mp);
    1224             : 
    1225           0 :   mp->is_enable = is_enable;
    1226             : 
    1227             :   /* send it... */
    1228           0 :   S (mp);
    1229             : 
    1230             :   /* Wait for a reply... */
    1231           0 :   W (ret);
    1232           0 :   return ret;
    1233             : }
    1234             : 
    1235             : #define api_lisp_rloc_probe_enable_disable api_one_rloc_probe_enable_disable
    1236             : 
    1237             : static int
    1238           0 : api_one_map_register_enable_disable (vat_main_t * vam)
    1239             : {
    1240           0 :   unformat_input_t *input = vam->input;
    1241             :   vl_api_one_map_register_enable_disable_t *mp;
    1242           0 :   u8 is_set = 0;
    1243           0 :   u8 is_enable = 0;
    1244             :   int ret;
    1245             : 
    1246             :   /* Parse args required to build the message */
    1247           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1248             :     {
    1249           0 :       if (unformat (input, "enable"))
    1250             :         {
    1251           0 :           is_set = 1;
    1252           0 :           is_enable = 1;
    1253             :         }
    1254           0 :       else if (unformat (input, "disable"))
    1255           0 :         is_set = 1;
    1256             :       else
    1257           0 :         break;
    1258             :     }
    1259             : 
    1260           0 :   if (!is_set)
    1261             :     {
    1262           0 :       errmsg ("Value not set");
    1263           0 :       return -99;
    1264             :     }
    1265             : 
    1266             :   /* Construct the API message */
    1267           0 :   M (ONE_MAP_REGISTER_ENABLE_DISABLE, mp);
    1268             : 
    1269           0 :   mp->is_enable = is_enable;
    1270             : 
    1271             :   /* send it... */
    1272           0 :   S (mp);
    1273             : 
    1274             :   /* Wait for a reply... */
    1275           0 :   W (ret);
    1276           0 :   return ret;
    1277             : }
    1278             : 
    1279             : #define api_lisp_map_register_enable_disable api_one_map_register_enable_disable
    1280             : 
    1281             : static int
    1282           0 : api_one_enable_disable (vat_main_t * vam)
    1283             : {
    1284           0 :   unformat_input_t *input = vam->input;
    1285             :   vl_api_one_enable_disable_t *mp;
    1286           0 :   u8 is_set = 0;
    1287           0 :   u8 is_enable = 0;
    1288             :   int ret;
    1289             : 
    1290             :   /* Parse args required to build the message */
    1291           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1292             :     {
    1293           0 :       if (unformat (input, "enable"))
    1294             :         {
    1295           0 :           is_set = 1;
    1296           0 :           is_enable = 1;
    1297             :         }
    1298           0 :       else if (unformat (input, "disable"))
    1299             :         {
    1300           0 :           is_set = 1;
    1301             :         }
    1302             :       else
    1303           0 :         break;
    1304             :     }
    1305             : 
    1306           0 :   if (!is_set)
    1307             :     {
    1308           0 :       errmsg ("Value not set");
    1309           0 :       return -99;
    1310             :     }
    1311             : 
    1312             :   /* Construct the API message */
    1313           0 :   M (ONE_ENABLE_DISABLE, mp);
    1314             : 
    1315           0 :   mp->is_enable = is_enable;
    1316             : 
    1317             :   /* send it... */
    1318           0 :   S (mp);
    1319             : 
    1320             :   /* Wait for a reply... */
    1321           0 :   W (ret);
    1322           0 :   return ret;
    1323             : }
    1324             : 
    1325             : #define api_lisp_enable_disable api_one_enable_disable
    1326             : 
    1327             : static int
    1328           0 : api_one_enable_disable_xtr_mode (vat_main_t * vam)
    1329             : {
    1330           0 :   unformat_input_t *input = vam->input;
    1331             :   vl_api_one_enable_disable_xtr_mode_t *mp;
    1332           0 :   u8 is_set = 0;
    1333           0 :   u8 is_enable = 0;
    1334             :   int ret;
    1335             : 
    1336             :   /* Parse args required to build the message */
    1337           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1338             :     {
    1339           0 :       if (unformat (input, "enable"))
    1340             :         {
    1341           0 :           is_set = 1;
    1342           0 :           is_enable = 1;
    1343             :         }
    1344           0 :       else if (unformat (input, "disable"))
    1345             :         {
    1346           0 :           is_set = 1;
    1347             :         }
    1348             :       else
    1349           0 :         break;
    1350             :     }
    1351             : 
    1352           0 :   if (!is_set)
    1353             :     {
    1354           0 :       errmsg ("Value not set");
    1355           0 :       return -99;
    1356             :     }
    1357             : 
    1358             :   /* Construct the API message */
    1359           0 :   M (ONE_ENABLE_DISABLE_XTR_MODE, mp);
    1360             : 
    1361           0 :   mp->is_enable = is_enable;
    1362             : 
    1363             :   /* send it... */
    1364           0 :   S (mp);
    1365             : 
    1366             :   /* Wait for a reply... */
    1367           0 :   W (ret);
    1368           0 :   return ret;
    1369             : }
    1370             : 
    1371             : static int
    1372           0 : api_one_show_xtr_mode (vat_main_t * vam)
    1373             : {
    1374             :   vl_api_one_show_xtr_mode_t *mp;
    1375             :   int ret;
    1376             : 
    1377             :   /* Construct the API message */
    1378           0 :   M (ONE_SHOW_XTR_MODE, mp);
    1379             : 
    1380             :   /* send it... */
    1381           0 :   S (mp);
    1382             : 
    1383             :   /* Wait for a reply... */
    1384           0 :   W (ret);
    1385           0 :   return ret;
    1386             : }
    1387             : 
    1388             : static int
    1389           0 : api_one_enable_disable_pitr_mode (vat_main_t * vam)
    1390             : {
    1391           0 :   unformat_input_t *input = vam->input;
    1392             :   vl_api_one_enable_disable_pitr_mode_t *mp;
    1393           0 :   u8 is_set = 0;
    1394           0 :   u8 is_enable = 0;
    1395             :   int ret;
    1396             : 
    1397             :   /* Parse args required to build the message */
    1398           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1399             :     {
    1400           0 :       if (unformat (input, "enable"))
    1401             :         {
    1402           0 :           is_set = 1;
    1403           0 :           is_enable = 1;
    1404             :         }
    1405           0 :       else if (unformat (input, "disable"))
    1406             :         {
    1407           0 :           is_set = 1;
    1408             :         }
    1409             :       else
    1410           0 :         break;
    1411             :     }
    1412             : 
    1413           0 :   if (!is_set)
    1414             :     {
    1415           0 :       errmsg ("Value not set");
    1416           0 :       return -99;
    1417             :     }
    1418             : 
    1419             :   /* Construct the API message */
    1420           0 :   M (ONE_ENABLE_DISABLE_PITR_MODE, mp);
    1421             : 
    1422           0 :   mp->is_enable = is_enable;
    1423             : 
    1424             :   /* send it... */
    1425           0 :   S (mp);
    1426             : 
    1427             :   /* Wait for a reply... */
    1428           0 :   W (ret);
    1429           0 :   return ret;
    1430             : }
    1431             : 
    1432             : static int
    1433           0 : api_one_show_pitr_mode (vat_main_t * vam)
    1434             : {
    1435             :   vl_api_one_show_pitr_mode_t *mp;
    1436             :   int ret;
    1437             : 
    1438             :   /* Construct the API message */
    1439           0 :   M (ONE_SHOW_PITR_MODE, mp);
    1440             : 
    1441             :   /* send it... */
    1442           0 :   S (mp);
    1443             : 
    1444             :   /* Wait for a reply... */
    1445           0 :   W (ret);
    1446           0 :   return ret;
    1447             : }
    1448             : 
    1449             : static int
    1450           0 : api_one_enable_disable_petr_mode (vat_main_t * vam)
    1451             : {
    1452           0 :   unformat_input_t *input = vam->input;
    1453             :   vl_api_one_enable_disable_petr_mode_t *mp;
    1454           0 :   u8 is_set = 0;
    1455           0 :   u8 is_enable = 0;
    1456             :   int ret;
    1457             : 
    1458             :   /* Parse args required to build the message */
    1459           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1460             :     {
    1461           0 :       if (unformat (input, "enable"))
    1462             :         {
    1463           0 :           is_set = 1;
    1464           0 :           is_enable = 1;
    1465             :         }
    1466           0 :       else if (unformat (input, "disable"))
    1467             :         {
    1468           0 :           is_set = 1;
    1469             :         }
    1470             :       else
    1471           0 :         break;
    1472             :     }
    1473             : 
    1474           0 :   if (!is_set)
    1475             :     {
    1476           0 :       errmsg ("Value not set");
    1477           0 :       return -99;
    1478             :     }
    1479             : 
    1480             :   /* Construct the API message */
    1481           0 :   M (ONE_ENABLE_DISABLE_PETR_MODE, mp);
    1482             : 
    1483           0 :   mp->is_enable = is_enable;
    1484             : 
    1485             :   /* send it... */
    1486           0 :   S (mp);
    1487             : 
    1488             :   /* Wait for a reply... */
    1489           0 :   W (ret);
    1490           0 :   return ret;
    1491             : }
    1492             : 
    1493             : static int
    1494           0 : api_one_show_petr_mode (vat_main_t * vam)
    1495             : {
    1496             :   vl_api_one_show_petr_mode_t *mp;
    1497             :   int ret;
    1498             : 
    1499             :   /* Construct the API message */
    1500           0 :   M (ONE_SHOW_PETR_MODE, mp);
    1501             : 
    1502             :   /* send it... */
    1503           0 :   S (mp);
    1504             : 
    1505             :   /* Wait for a reply... */
    1506           0 :   W (ret);
    1507           0 :   return ret;
    1508             : }
    1509             : 
    1510             : static int
    1511           0 : api_show_one_map_register_state (vat_main_t * vam)
    1512             : {
    1513             :   vl_api_show_one_map_register_state_t *mp;
    1514             :   int ret;
    1515             : 
    1516           0 :   M (SHOW_ONE_MAP_REGISTER_STATE, mp);
    1517             : 
    1518             :   /* send */
    1519           0 :   S (mp);
    1520             : 
    1521             :   /* wait for reply */
    1522           0 :   W (ret);
    1523           0 :   return ret;
    1524             : }
    1525             : 
    1526             : #define api_show_lisp_map_register_state api_show_one_map_register_state
    1527             : 
    1528             : static int
    1529           0 : api_show_one_rloc_probe_state (vat_main_t * vam)
    1530             : {
    1531             :   vl_api_show_one_rloc_probe_state_t *mp;
    1532             :   int ret;
    1533             : 
    1534           0 :   M (SHOW_ONE_RLOC_PROBE_STATE, mp);
    1535             : 
    1536             :   /* send */
    1537           0 :   S (mp);
    1538             : 
    1539             :   /* wait for reply */
    1540           0 :   W (ret);
    1541           0 :   return ret;
    1542             : }
    1543             : 
    1544             : #define api_show_lisp_rloc_probe_state api_show_one_rloc_probe_state
    1545             : 
    1546             : static int
    1547           0 : api_one_add_del_ndp_entry (vat_main_t * vam)
    1548             : {
    1549             :   vl_api_one_add_del_ndp_entry_t *mp;
    1550           0 :   unformat_input_t *input = vam->input;
    1551           0 :   u8 is_add = 1;
    1552           0 :   u8 mac_set = 0;
    1553           0 :   u8 bd_set = 0;
    1554           0 :   u8 ip_set = 0;
    1555           0 :   u8 mac[6] = { 0, };
    1556           0 :   u8 ip6[16] = { 0, };
    1557           0 :   u32 bd = ~0;
    1558             :   int ret;
    1559             : 
    1560             :   /* Parse args required to build the message */
    1561           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1562             :     {
    1563           0 :       if (unformat (input, "del"))
    1564           0 :         is_add = 0;
    1565           0 :       else if (unformat (input, "mac %U", unformat_ethernet_address, mac))
    1566           0 :         mac_set = 1;
    1567           0 :       else if (unformat (input, "ip %U", unformat_ip6_address, ip6))
    1568           0 :         ip_set = 1;
    1569           0 :       else if (unformat (input, "bd %d", &bd))
    1570           0 :         bd_set = 1;
    1571             :       else
    1572             :         {
    1573           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1574           0 :           return -99;
    1575             :         }
    1576             :     }
    1577             : 
    1578           0 :   if (!bd_set || !ip_set || (!mac_set && is_add))
    1579             :     {
    1580           0 :       errmsg ("Missing BD, IP or MAC!");
    1581           0 :       return -99;
    1582             :     }
    1583             : 
    1584           0 :   M (ONE_ADD_DEL_NDP_ENTRY, mp);
    1585           0 :   mp->is_add = is_add;
    1586           0 :   clib_memcpy (&mp->entry.mac, mac, 6);
    1587           0 :   mp->bd = clib_host_to_net_u32 (bd);
    1588           0 :   clib_memcpy (&mp->entry.ip6, ip6, sizeof (mp->entry.ip6));
    1589             : 
    1590             :   /* send */
    1591           0 :   S (mp);
    1592             : 
    1593             :   /* wait for reply */
    1594           0 :   W (ret);
    1595           0 :   return ret;
    1596             : }
    1597             : 
    1598             : static int
    1599           0 : api_one_add_del_l2_arp_entry (vat_main_t * vam)
    1600             : {
    1601             :   vl_api_one_add_del_l2_arp_entry_t *mp;
    1602           0 :   unformat_input_t *input = vam->input;
    1603           0 :   u8 is_add = 1;
    1604           0 :   u8 mac_set = 0;
    1605           0 :   u8 bd_set = 0;
    1606           0 :   u8 ip_set = 0;
    1607           0 :   u8 mac[6] = { 0, };
    1608           0 :   u32 ip4 = 0, bd = ~0;
    1609             :   int ret;
    1610             : 
    1611             :   /* Parse args required to build the message */
    1612           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1613             :     {
    1614           0 :       if (unformat (input, "del"))
    1615           0 :         is_add = 0;
    1616           0 :       else if (unformat (input, "mac %U", unformat_ethernet_address, mac))
    1617           0 :         mac_set = 1;
    1618           0 :       else if (unformat (input, "ip %U", unformat_ip4_address, &ip4))
    1619           0 :         ip_set = 1;
    1620           0 :       else if (unformat (input, "bd %d", &bd))
    1621           0 :         bd_set = 1;
    1622             :       else
    1623             :         {
    1624           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1625           0 :           return -99;
    1626             :         }
    1627             :     }
    1628             : 
    1629           0 :   if (!bd_set || !ip_set || (!mac_set && is_add))
    1630             :     {
    1631           0 :       errmsg ("Missing BD, IP or MAC!");
    1632           0 :       return -99;
    1633             :     }
    1634             : 
    1635           0 :   M (ONE_ADD_DEL_L2_ARP_ENTRY, mp);
    1636           0 :   mp->is_add = is_add;
    1637           0 :   clib_memcpy (&mp->entry.mac, mac, 6);
    1638           0 :   mp->bd = clib_host_to_net_u32 (bd);
    1639           0 :   clib_memcpy (mp->entry.ip4, &ip4, sizeof (mp->entry.ip4));
    1640             : 
    1641             :   /* send */
    1642           0 :   S (mp);
    1643             : 
    1644             :   /* wait for reply */
    1645           0 :   W (ret);
    1646           0 :   return ret;
    1647             : }
    1648             : 
    1649             : static int
    1650           0 : api_one_ndp_bd_get (vat_main_t * vam)
    1651             : {
    1652             :   vl_api_one_ndp_bd_get_t *mp;
    1653             :   int ret;
    1654             : 
    1655           0 :   M (ONE_NDP_BD_GET, mp);
    1656             : 
    1657             :   /* send */
    1658           0 :   S (mp);
    1659             : 
    1660             :   /* wait for reply */
    1661           0 :   W (ret);
    1662           0 :   return ret;
    1663             : }
    1664             : 
    1665             : static int
    1666           0 : api_one_ndp_entries_get (vat_main_t * vam)
    1667             : {
    1668             :   vl_api_one_ndp_entries_get_t *mp;
    1669           0 :   unformat_input_t *input = vam->input;
    1670           0 :   u8 bd_set = 0;
    1671           0 :   u32 bd = ~0;
    1672             :   int ret;
    1673             : 
    1674             :   /* Parse args required to build the message */
    1675           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1676             :     {
    1677           0 :       if (unformat (input, "bd %d", &bd))
    1678           0 :         bd_set = 1;
    1679             :       else
    1680             :         {
    1681           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1682           0 :           return -99;
    1683             :         }
    1684             :     }
    1685             : 
    1686           0 :   if (!bd_set)
    1687             :     {
    1688           0 :       errmsg ("Expected bridge domain!");
    1689           0 :       return -99;
    1690             :     }
    1691             : 
    1692           0 :   M (ONE_NDP_ENTRIES_GET, mp);
    1693           0 :   mp->bd = clib_host_to_net_u32 (bd);
    1694             : 
    1695             :   /* send */
    1696           0 :   S (mp);
    1697             : 
    1698             :   /* wait for reply */
    1699           0 :   W (ret);
    1700           0 :   return ret;
    1701             : }
    1702             : 
    1703             : static int
    1704           0 : api_one_l2_arp_bd_get (vat_main_t * vam)
    1705             : {
    1706             :   vl_api_one_l2_arp_bd_get_t *mp;
    1707             :   int ret;
    1708             : 
    1709           0 :   M (ONE_L2_ARP_BD_GET, mp);
    1710             : 
    1711             :   /* send */
    1712           0 :   S (mp);
    1713             : 
    1714             :   /* wait for reply */
    1715           0 :   W (ret);
    1716           0 :   return ret;
    1717             : }
    1718             : 
    1719             : static int
    1720           0 : api_one_l2_arp_entries_get (vat_main_t * vam)
    1721             : {
    1722             :   vl_api_one_l2_arp_entries_get_t *mp;
    1723           0 :   unformat_input_t *input = vam->input;
    1724           0 :   u8 bd_set = 0;
    1725           0 :   u32 bd = ~0;
    1726             :   int ret;
    1727             : 
    1728             :   /* Parse args required to build the message */
    1729           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1730             :     {
    1731           0 :       if (unformat (input, "bd %d", &bd))
    1732           0 :         bd_set = 1;
    1733             :       else
    1734             :         {
    1735           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1736           0 :           return -99;
    1737             :         }
    1738             :     }
    1739             : 
    1740           0 :   if (!bd_set)
    1741             :     {
    1742           0 :       errmsg ("Expected bridge domain!");
    1743           0 :       return -99;
    1744             :     }
    1745             : 
    1746           0 :   M (ONE_L2_ARP_ENTRIES_GET, mp);
    1747           0 :   mp->bd = clib_host_to_net_u32 (bd);
    1748             : 
    1749             :   /* send */
    1750           0 :   S (mp);
    1751             : 
    1752             :   /* wait for reply */
    1753           0 :   W (ret);
    1754           0 :   return ret;
    1755             : }
    1756             : 
    1757             : static int
    1758           0 : api_one_stats_enable_disable (vat_main_t * vam)
    1759             : {
    1760             :   vl_api_one_stats_enable_disable_t *mp;
    1761           0 :   unformat_input_t *input = vam->input;
    1762           0 :   u8 is_set = 0;
    1763           0 :   u8 is_enable = 0;
    1764             :   int ret;
    1765             : 
    1766             :   /* Parse args required to build the message */
    1767           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1768             :     {
    1769           0 :       if (unformat (input, "enable"))
    1770             :         {
    1771           0 :           is_set = 1;
    1772           0 :           is_enable = 1;
    1773             :         }
    1774           0 :       else if (unformat (input, "disable"))
    1775             :         {
    1776           0 :           is_set = 1;
    1777             :         }
    1778             :       else
    1779           0 :         break;
    1780             :     }
    1781             : 
    1782           0 :   if (!is_set)
    1783             :     {
    1784           0 :       errmsg ("Value not set");
    1785           0 :       return -99;
    1786             :     }
    1787             : 
    1788           0 :   M (ONE_STATS_ENABLE_DISABLE, mp);
    1789           0 :   mp->is_enable = is_enable;
    1790             : 
    1791             :   /* send */
    1792           0 :   S (mp);
    1793             : 
    1794             :   /* wait for reply */
    1795           0 :   W (ret);
    1796           0 :   return ret;
    1797             : }
    1798             : 
    1799             : static int
    1800           0 : api_show_one_stats_enable_disable (vat_main_t * vam)
    1801             : {
    1802             :   vl_api_show_one_stats_enable_disable_t *mp;
    1803             :   int ret;
    1804             : 
    1805           0 :   M (SHOW_ONE_STATS_ENABLE_DISABLE, mp);
    1806             : 
    1807             :   /* send */
    1808           0 :   S (mp);
    1809             : 
    1810             :   /* wait for reply */
    1811           0 :   W (ret);
    1812           0 :   return ret;
    1813             : }
    1814             : 
    1815             : static int
    1816           0 : api_show_one_map_request_mode (vat_main_t * vam)
    1817             : {
    1818             :   vl_api_show_one_map_request_mode_t *mp;
    1819             :   int ret;
    1820             : 
    1821           0 :   M (SHOW_ONE_MAP_REQUEST_MODE, mp);
    1822             : 
    1823             :   /* send */
    1824           0 :   S (mp);
    1825             : 
    1826             :   /* wait for reply */
    1827           0 :   W (ret);
    1828           0 :   return ret;
    1829             : }
    1830             : 
    1831             : #define api_show_lisp_map_request_mode api_show_one_map_request_mode
    1832             : 
    1833             : static int
    1834           0 : api_one_map_request_mode (vat_main_t * vam)
    1835             : {
    1836           0 :   unformat_input_t *input = vam->input;
    1837             :   vl_api_one_map_request_mode_t *mp;
    1838           0 :   u8 mode = 0;
    1839             :   int ret;
    1840             : 
    1841             :   /* Parse args required to build the message */
    1842           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1843             :     {
    1844           0 :       if (unformat (input, "dst-only"))
    1845           0 :         mode = 0;
    1846           0 :       else if (unformat (input, "src-dst"))
    1847           0 :         mode = 1;
    1848             :       else
    1849             :         {
    1850           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1851           0 :           return -99;
    1852             :         }
    1853             :     }
    1854             : 
    1855           0 :   M (ONE_MAP_REQUEST_MODE, mp);
    1856             : 
    1857           0 :   mp->mode = mode;
    1858             : 
    1859             :   /* send */
    1860           0 :   S (mp);
    1861             : 
    1862             :   /* wait for reply */
    1863           0 :   W (ret);
    1864           0 :   return ret;
    1865             : }
    1866             : 
    1867             : #define api_lisp_map_request_mode api_one_map_request_mode
    1868             : 
    1869             : /**
    1870             :  * Enable/disable ONE proxy ITR.
    1871             :  *
    1872             :  * @param vam vpp API test context
    1873             :  * @return return code
    1874             :  */
    1875             : static int
    1876           0 : api_one_pitr_set_locator_set (vat_main_t * vam)
    1877             : {
    1878           0 :   u8 ls_name_set = 0;
    1879           0 :   unformat_input_t *input = vam->input;
    1880             :   vl_api_one_pitr_set_locator_set_t *mp;
    1881           0 :   u8 is_add = 1;
    1882           0 :   u8 *ls_name = 0;
    1883             :   int ret;
    1884             : 
    1885             :   /* Parse args required to build the message */
    1886           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1887             :     {
    1888           0 :       if (unformat (input, "del"))
    1889           0 :         is_add = 0;
    1890           0 :       else if (unformat (input, "locator-set %s", &ls_name))
    1891           0 :         ls_name_set = 1;
    1892             :       else
    1893             :         {
    1894           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1895           0 :           return -99;
    1896             :         }
    1897             :     }
    1898             : 
    1899           0 :   if (!ls_name_set)
    1900             :     {
    1901           0 :       errmsg ("locator-set name not set!");
    1902           0 :       return -99;
    1903             :     }
    1904             : 
    1905           0 :   M (ONE_PITR_SET_LOCATOR_SET, mp);
    1906             : 
    1907           0 :   mp->is_add = is_add;
    1908           0 :   clib_memcpy (mp->ls_name, ls_name, vec_len (ls_name));
    1909           0 :   vec_free (ls_name);
    1910             : 
    1911             :   /* send */
    1912           0 :   S (mp);
    1913             : 
    1914             :   /* wait for reply */
    1915           0 :   W (ret);
    1916           0 :   return ret;
    1917             : }
    1918             : 
    1919             : #define api_lisp_pitr_set_locator_set api_one_pitr_set_locator_set
    1920             : 
    1921             : static int
    1922           0 : api_one_nsh_set_locator_set (vat_main_t * vam)
    1923             : {
    1924           0 :   u8 ls_name_set = 0;
    1925           0 :   unformat_input_t *input = vam->input;
    1926             :   vl_api_one_nsh_set_locator_set_t *mp;
    1927           0 :   u8 is_add = 1;
    1928           0 :   u8 *ls_name = 0;
    1929             :   int ret;
    1930             : 
    1931             :   /* Parse args required to build the message */
    1932           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    1933             :     {
    1934           0 :       if (unformat (input, "del"))
    1935           0 :         is_add = 0;
    1936           0 :       else if (unformat (input, "ls %s", &ls_name))
    1937           0 :         ls_name_set = 1;
    1938             :       else
    1939             :         {
    1940           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    1941           0 :           return -99;
    1942             :         }
    1943             :     }
    1944             : 
    1945           0 :   if (!ls_name_set && is_add)
    1946             :     {
    1947           0 :       errmsg ("locator-set name not set!");
    1948           0 :       return -99;
    1949             :     }
    1950             : 
    1951           0 :   M (ONE_NSH_SET_LOCATOR_SET, mp);
    1952             : 
    1953           0 :   mp->is_add = is_add;
    1954           0 :   clib_memcpy (mp->ls_name, ls_name, vec_len (ls_name));
    1955           0 :   vec_free (ls_name);
    1956             : 
    1957             :   /* send */
    1958           0 :   S (mp);
    1959             : 
    1960             :   /* wait for reply */
    1961           0 :   W (ret);
    1962           0 :   return ret;
    1963             : }
    1964             : 
    1965             : static int
    1966           0 : api_show_one_pitr (vat_main_t * vam)
    1967             : {
    1968             :   vl_api_show_one_pitr_t *mp;
    1969             :   int ret;
    1970             : 
    1971           0 :   if (!vam->json_output)
    1972             :     {
    1973           0 :       print (vam->ofp, "%=20s", "lisp status:");
    1974             :     }
    1975             : 
    1976           0 :   M (SHOW_ONE_PITR, mp);
    1977             :   /* send it... */
    1978           0 :   S (mp);
    1979             : 
    1980             :   /* Wait for a reply... */
    1981           0 :   W (ret);
    1982           0 :   return ret;
    1983             : }
    1984             : 
    1985             : #define api_show_lisp_pitr api_show_one_pitr
    1986             : 
    1987             : static int
    1988           0 : api_one_use_petr (vat_main_t * vam)
    1989             : {
    1990           0 :   unformat_input_t *input = vam->input;
    1991             :   vl_api_one_use_petr_t *mp;
    1992           0 :   u8 is_add = 0;
    1993             :   ip_address_t ip;
    1994             :   int ret;
    1995             : 
    1996           0 :   clib_memset (&ip, 0, sizeof (ip));
    1997             : 
    1998             :   /* Parse args required to build the message */
    1999           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2000             :     {
    2001           0 :       if (unformat (input, "disable"))
    2002           0 :         is_add = 0;
    2003             :       else
    2004           0 :         if (unformat (input, "%U", unformat_ip4_address, &ip_addr_v4 (&ip)))
    2005             :         {
    2006           0 :           is_add = 1;
    2007           0 :           ip_addr_version (&ip) = AF_IP4;
    2008             :         }
    2009             :       else
    2010           0 :         if (unformat (input, "%U", unformat_ip6_address, &ip_addr_v6 (&ip)))
    2011             :         {
    2012           0 :           is_add = 1;
    2013           0 :           ip_addr_version (&ip) = AF_IP6;
    2014             :         }
    2015             :       else
    2016             :         {
    2017           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    2018           0 :           return -99;
    2019             :         }
    2020             :     }
    2021             : 
    2022           0 :   M (ONE_USE_PETR, mp);
    2023             : 
    2024           0 :   mp->is_add = is_add;
    2025           0 :   if (is_add)
    2026             :     {
    2027           0 :       mp->ip_address.af = ip_addr_version (&ip) == AF_IP4 ? 0 : 1;
    2028           0 :       if (mp->ip_address.af)
    2029           0 :         clib_memcpy (mp->ip_address.un.ip6, &ip, 16);
    2030             :       else
    2031           0 :         clib_memcpy (mp->ip_address.un.ip4, &ip, 4);
    2032             :     }
    2033             : 
    2034             :   /* send */
    2035           0 :   S (mp);
    2036             : 
    2037             :   /* wait for reply */
    2038           0 :   W (ret);
    2039           0 :   return ret;
    2040             : }
    2041             : 
    2042             : #define api_lisp_use_petr api_one_use_petr
    2043             : 
    2044             : static int
    2045           0 : api_show_one_nsh_mapping (vat_main_t * vam)
    2046             : {
    2047             :   vl_api_show_one_use_petr_t *mp;
    2048             :   int ret;
    2049             : 
    2050           0 :   if (!vam->json_output)
    2051             :     {
    2052           0 :       print (vam->ofp, "%=20s", "local ONE NSH mapping:");
    2053             :     }
    2054             : 
    2055           0 :   M (SHOW_ONE_NSH_MAPPING, mp);
    2056             :   /* send it... */
    2057           0 :   S (mp);
    2058             : 
    2059             :   /* Wait for a reply... */
    2060           0 :   W (ret);
    2061           0 :   return ret;
    2062             : }
    2063             : 
    2064             : static int
    2065           0 : api_show_one_use_petr (vat_main_t * vam)
    2066             : {
    2067             :   vl_api_show_one_use_petr_t *mp;
    2068             :   int ret;
    2069             : 
    2070           0 :   if (!vam->json_output)
    2071             :     {
    2072           0 :       print (vam->ofp, "%=20s", "Proxy-ETR status:");
    2073             :     }
    2074             : 
    2075           0 :   M (SHOW_ONE_USE_PETR, mp);
    2076             :   /* send it... */
    2077           0 :   S (mp);
    2078             : 
    2079             :   /* Wait for a reply... */
    2080           0 :   W (ret);
    2081           0 :   return ret;
    2082             : }
    2083             : 
    2084             : #define api_show_lisp_use_petr api_show_one_use_petr
    2085             : 
    2086             : /**
    2087             :  * Add/delete mapping between vni and vrf
    2088             :  */
    2089             : static int
    2090           0 : api_one_eid_table_add_del_map (vat_main_t * vam)
    2091             : {
    2092           0 :   unformat_input_t *input = vam->input;
    2093             :   vl_api_one_eid_table_add_del_map_t *mp;
    2094           0 :   u8 is_add = 1, vni_set = 0, vrf_set = 0, bd_index_set = 0;
    2095             :   u32 vni, vrf, bd_index;
    2096             :   int ret;
    2097             : 
    2098             :   /* Parse args required to build the message */
    2099           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2100             :     {
    2101           0 :       if (unformat (input, "del"))
    2102           0 :         is_add = 0;
    2103           0 :       else if (unformat (input, "vrf %d", &vrf))
    2104           0 :         vrf_set = 1;
    2105           0 :       else if (unformat (input, "bd_index %d", &bd_index))
    2106           0 :         bd_index_set = 1;
    2107           0 :       else if (unformat (input, "vni %d", &vni))
    2108           0 :         vni_set = 1;
    2109             :       else
    2110           0 :         break;
    2111             :     }
    2112             : 
    2113           0 :   if (!vni_set || (!vrf_set && !bd_index_set))
    2114             :     {
    2115           0 :       errmsg ("missing arguments!");
    2116           0 :       return -99;
    2117             :     }
    2118             : 
    2119           0 :   if (vrf_set && bd_index_set)
    2120             :     {
    2121           0 :       errmsg ("error: both vrf and bd entered!");
    2122           0 :       return -99;
    2123             :     }
    2124             : 
    2125           0 :   M (ONE_EID_TABLE_ADD_DEL_MAP, mp);
    2126             : 
    2127           0 :   mp->is_add = is_add;
    2128           0 :   mp->vni = htonl (vni);
    2129           0 :   mp->dp_table = vrf_set ? htonl (vrf) : htonl (bd_index);
    2130           0 :   mp->is_l2 = bd_index_set;
    2131             : 
    2132             :   /* send */
    2133           0 :   S (mp);
    2134             : 
    2135             :   /* wait for reply */
    2136           0 :   W (ret);
    2137           0 :   return ret;
    2138             : }
    2139             : 
    2140             : #define api_lisp_eid_table_add_del_map api_one_eid_table_add_del_map
    2141             : 
    2142             : uword
    2143           0 : unformat_negative_mapping_action (unformat_input_t * input, va_list * args)
    2144             : {
    2145           0 :   u32 *action = va_arg (*args, u32 *);
    2146           0 :   u8 *s = 0;
    2147             : 
    2148           0 :   if (unformat (input, "%s", &s))
    2149             :     {
    2150           0 :       if (!strcmp ((char *) s, "no-action"))
    2151           0 :         action[0] = 0;
    2152           0 :       else if (!strcmp ((char *) s, "natively-forward"))
    2153           0 :         action[0] = 1;
    2154           0 :       else if (!strcmp ((char *) s, "send-map-request"))
    2155           0 :         action[0] = 2;
    2156           0 :       else if (!strcmp ((char *) s, "drop"))
    2157           0 :         action[0] = 3;
    2158             :       else
    2159             :         {
    2160           0 :           clib_warning ("invalid action: '%s'", s);
    2161           0 :           action[0] = 3;
    2162             :         }
    2163             :     }
    2164             :   else
    2165           0 :     return 0;
    2166             : 
    2167           0 :   vec_free (s);
    2168           0 :   return 1;
    2169             : }
    2170             : 
    2171             : /**
    2172             :  * Add/del remote mapping to/from ONE control plane
    2173             :  *
    2174             :  * @param vam vpp API test context
    2175             :  * @return return code
    2176             :  */
    2177             : static int
    2178           0 : api_one_add_del_remote_mapping (vat_main_t * vam)
    2179             : {
    2180           0 :   unformat_input_t *input = vam->input;
    2181             :   vl_api_one_add_del_remote_mapping_t *mp;
    2182           0 :   u32 vni = 0;
    2183           0 :   lisp_eid_vat_t _eid, *eid = &_eid;
    2184           0 :   lisp_eid_vat_t _seid, *seid = &_seid;
    2185           0 :   u8 is_add = 1, del_all = 0, eid_set = 0, seid_set = 0;
    2186           0 :   u32 action = ~0, p, w, data_len;
    2187             :   ip4_address_t rloc4;
    2188             :   ip6_address_t rloc6;
    2189           0 :   vl_api_remote_locator_t *rlocs = 0, rloc, *curr_rloc = 0;
    2190             :   int ret;
    2191             : 
    2192           0 :   clib_memset (&rloc, 0, sizeof (rloc));
    2193             : 
    2194             :   /* Parse args required to build the message */
    2195           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2196             :     {
    2197           0 :       if (unformat (input, "del-all"))
    2198             :         {
    2199           0 :           del_all = 1;
    2200             :         }
    2201           0 :       else if (unformat (input, "del"))
    2202             :         {
    2203           0 :           is_add = 0;
    2204             :         }
    2205           0 :       else if (unformat (input, "add"))
    2206             :         {
    2207           0 :           is_add = 1;
    2208             :         }
    2209           0 :       else if (unformat (input, "eid %U", unformat_lisp_eid_vat, eid))
    2210             :         {
    2211           0 :           eid_set = 1;
    2212             :         }
    2213           0 :       else if (unformat (input, "seid %U", unformat_lisp_eid_vat, seid))
    2214             :         {
    2215           0 :           seid_set = 1;
    2216             :         }
    2217           0 :       else if (unformat (input, "vni %d", &vni))
    2218             :         {
    2219             :           ;
    2220             :         }
    2221           0 :       else if (unformat (input, "p %d w %d", &p, &w))
    2222             :         {
    2223           0 :           if (!curr_rloc)
    2224             :             {
    2225           0 :               errmsg ("No RLOC configured for setting priority/weight!");
    2226           0 :               return -99;
    2227             :             }
    2228           0 :           curr_rloc->priority = p;
    2229           0 :           curr_rloc->weight = w;
    2230             :         }
    2231           0 :       else if (unformat (input, "rloc %U", unformat_ip4_address, &rloc4))
    2232             :         {
    2233           0 :           rloc.ip_address.af = 0;
    2234           0 :           clib_memcpy (&rloc.ip_address.un.ip6, &rloc6, sizeof (rloc6));
    2235           0 :           vec_add1 (rlocs, rloc);
    2236           0 :           curr_rloc = &rlocs[vec_len (rlocs) - 1];
    2237             :         }
    2238           0 :       else if (unformat (input, "rloc %U", unformat_ip6_address, &rloc6))
    2239             :         {
    2240           0 :           rloc.ip_address.af = 1;
    2241           0 :           clib_memcpy (&rloc.ip_address.un.ip4, &rloc4, sizeof (rloc4));
    2242           0 :           vec_add1 (rlocs, rloc);
    2243           0 :           curr_rloc = &rlocs[vec_len (rlocs) - 1];
    2244             :         }
    2245           0 :       else if (unformat (input, "action %U",
    2246             :                          unformat_negative_mapping_action, &action))
    2247             :         {
    2248             :           ;
    2249             :         }
    2250             :       else
    2251             :         {
    2252           0 :           clib_warning ("parse error '%U'", format_unformat_error, input);
    2253           0 :           return -99;
    2254             :         }
    2255             :     }
    2256             : 
    2257           0 :   if (0 == eid_set)
    2258             :     {
    2259           0 :       errmsg ("missing params!");
    2260           0 :       return -99;
    2261             :     }
    2262             : 
    2263           0 :   if (is_add && (~0 == action) && 0 == vec_len (rlocs))
    2264             :     {
    2265           0 :       errmsg ("no action set for negative map-reply!");
    2266           0 :       return -99;
    2267             :     }
    2268             : 
    2269           0 :   data_len = vec_len (rlocs) * sizeof (vl_api_remote_locator_t);
    2270             : 
    2271           0 :   M2 (ONE_ADD_DEL_REMOTE_MAPPING, mp, data_len);
    2272           0 :   mp->is_add = is_add;
    2273           0 :   mp->vni = htonl (vni);
    2274           0 :   mp->action = (u8) action;
    2275           0 :   mp->is_src_dst = seid_set;
    2276           0 :   mp->del_all = del_all;
    2277           0 :   lisp_eid_put_vat (&mp->deid, eid);
    2278           0 :   lisp_eid_put_vat (&mp->seid, seid);
    2279             : 
    2280           0 :   mp->rloc_num = clib_host_to_net_u32 (vec_len (rlocs));
    2281           0 :   clib_memcpy (mp->rlocs, rlocs, data_len);
    2282           0 :   vec_free (rlocs);
    2283             : 
    2284             :   /* send it... */
    2285           0 :   S (mp);
    2286             : 
    2287             :   /* Wait for a reply... */
    2288           0 :   W (ret);
    2289           0 :   return ret;
    2290             : }
    2291             : 
    2292             : #define api_lisp_add_del_remote_mapping api_one_add_del_remote_mapping
    2293             : 
    2294             : /**
    2295             :  * Add/del ONE adjacency. Saves mapping in ONE control plane and updates
    2296             :  * forwarding entries in data-plane accordingly.
    2297             :  *
    2298             :  * @param vam vpp API test context
    2299             :  * @return return code
    2300             :  */
    2301             : static int
    2302           0 : api_one_add_del_adjacency (vat_main_t * vam)
    2303             : {
    2304           0 :   unformat_input_t *input = vam->input;
    2305             :   vl_api_one_add_del_adjacency_t *mp;
    2306           0 :   u32 vni = 0;
    2307           0 :   u8 is_add = 1;
    2308             :   int ret;
    2309             :   lisp_eid_vat_t leid, reid;
    2310             : 
    2311           0 :   leid.type = reid.type = (u8) ~ 0;
    2312             : 
    2313             :   /* Parse args required to build the message */
    2314           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2315             :     {
    2316           0 :       if (unformat (input, "del"))
    2317             :         {
    2318           0 :           is_add = 0;
    2319             :         }
    2320           0 :       else if (unformat (input, "add"))
    2321             :         {
    2322           0 :           is_add = 1;
    2323             :         }
    2324           0 :       else if (unformat (input, "reid %U/%d", unformat_ip46_address,
    2325             :                          &reid.addr.ip, &reid.len))
    2326             :         {
    2327           0 :           reid.type = 0;        /* ipv4 */
    2328             :         }
    2329           0 :       else if (unformat (input, "reid %U", unformat_ethernet_address,
    2330             :                          &reid.addr.mac))
    2331             :         {
    2332           0 :           reid.type = 1;        /* mac */
    2333             :         }
    2334           0 :       else if (unformat (input, "leid %U/%d", unformat_ip46_address,
    2335             :                          &leid.addr.ip, &leid.len))
    2336             :         {
    2337           0 :           leid.type = 0;        /* ipv4 */
    2338             :         }
    2339           0 :       else if (unformat (input, "leid %U", unformat_ethernet_address,
    2340             :                          &leid.addr.mac))
    2341             :         {
    2342           0 :           leid.type = 1;        /* mac */
    2343             :         }
    2344           0 :       else if (unformat (input, "vni %d", &vni))
    2345             :         {
    2346             :           ;
    2347             :         }
    2348             :       else
    2349             :         {
    2350           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    2351           0 :           return -99;
    2352             :         }
    2353             :     }
    2354             : 
    2355           0 :   if ((u8) ~ 0 == reid.type)
    2356             :     {
    2357           0 :       errmsg ("missing params!");
    2358           0 :       return -99;
    2359             :     }
    2360             : 
    2361           0 :   if (leid.type != reid.type)
    2362             :     {
    2363           0 :       errmsg ("remote and local EIDs are of different types!");
    2364           0 :       return -99;
    2365             :     }
    2366             : 
    2367           0 :   M (ONE_ADD_DEL_ADJACENCY, mp);
    2368           0 :   mp->is_add = is_add;
    2369           0 :   mp->vni = htonl (vni);
    2370           0 :   lisp_eid_put_vat (&mp->leid, &leid);
    2371           0 :   lisp_eid_put_vat (&mp->reid, &reid);
    2372             : 
    2373             :   /* send it... */
    2374           0 :   S (mp);
    2375             : 
    2376             :   /* Wait for a reply... */
    2377           0 :   W (ret);
    2378           0 :   return ret;
    2379             : }
    2380             : 
    2381             : #define api_lisp_add_del_adjacency api_one_add_del_adjacency
    2382             : 
    2383             : 
    2384             : static int
    2385           0 : api_one_map_register_fallback_threshold (vat_main_t * vam)
    2386             : {
    2387           0 :   unformat_input_t *input = vam->input;
    2388             :   vl_api_one_map_register_fallback_threshold_t *mp;
    2389           0 :   u32 value = 0;
    2390           0 :   u8 is_set = 0;
    2391             :   int ret;
    2392             : 
    2393             :   /* Parse args required to build the message */
    2394           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2395             :     {
    2396           0 :       if (unformat (input, "%u", &value))
    2397           0 :         is_set = 1;
    2398             :       else
    2399             :         {
    2400           0 :           clib_warning ("parse error '%U'", format_unformat_error, input);
    2401           0 :           return -99;
    2402             :         }
    2403             :     }
    2404             : 
    2405           0 :   if (!is_set)
    2406             :     {
    2407           0 :       errmsg ("fallback threshold value is missing!");
    2408           0 :       return -99;
    2409             :     }
    2410             : 
    2411           0 :   M (ONE_MAP_REGISTER_FALLBACK_THRESHOLD, mp);
    2412           0 :   mp->value = clib_host_to_net_u32 (value);
    2413             : 
    2414             :   /* send it... */
    2415           0 :   S (mp);
    2416             : 
    2417             :   /* Wait for a reply... */
    2418           0 :   W (ret);
    2419           0 :   return ret;
    2420             : }
    2421             : 
    2422             : static int
    2423           0 : api_show_one_map_register_fallback_threshold (vat_main_t * vam)
    2424             : {
    2425             :   vl_api_show_one_map_register_fallback_threshold_t *mp;
    2426             :   int ret;
    2427             : 
    2428           0 :   M (SHOW_ONE_MAP_REGISTER_FALLBACK_THRESHOLD, mp);
    2429             : 
    2430             :   /* send it... */
    2431           0 :   S (mp);
    2432             : 
    2433             :   /* Wait for a reply... */
    2434           0 :   W (ret);
    2435           0 :   return ret;
    2436             : }
    2437             : 
    2438             : uword
    2439           0 : unformat_lisp_transport_protocol (unformat_input_t * input, va_list * args)
    2440             : {
    2441           0 :   u32 *proto = va_arg (*args, u32 *);
    2442             : 
    2443           0 :   if (unformat (input, "udp"))
    2444           0 :     *proto = 1;
    2445           0 :   else if (unformat (input, "api"))
    2446           0 :     *proto = 2;
    2447             :   else
    2448           0 :     return 0;
    2449             : 
    2450           0 :   return 1;
    2451             : }
    2452             : 
    2453             : static int
    2454           0 : api_one_set_transport_protocol (vat_main_t * vam)
    2455             : {
    2456           0 :   unformat_input_t *input = vam->input;
    2457             :   vl_api_one_set_transport_protocol_t *mp;
    2458           0 :   u8 is_set = 0;
    2459           0 :   u32 protocol = 0;
    2460             :   int ret;
    2461             : 
    2462             :   /* Parse args required to build the message */
    2463           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2464             :     {
    2465           0 :       if (unformat (input, "%U", unformat_lisp_transport_protocol, &protocol))
    2466           0 :         is_set = 1;
    2467             :       else
    2468             :         {
    2469           0 :           clib_warning ("parse error '%U'", format_unformat_error, input);
    2470           0 :           return -99;
    2471             :         }
    2472             :     }
    2473             : 
    2474           0 :   if (!is_set)
    2475             :     {
    2476           0 :       errmsg ("Transport protocol missing!");
    2477           0 :       return -99;
    2478             :     }
    2479             : 
    2480           0 :   M (ONE_SET_TRANSPORT_PROTOCOL, mp);
    2481           0 :   mp->protocol = (u8) protocol;
    2482             : 
    2483             :   /* send it... */
    2484           0 :   S (mp);
    2485             : 
    2486             :   /* Wait for a reply... */
    2487           0 :   W (ret);
    2488           0 :   return ret;
    2489             : }
    2490             : 
    2491             : static int
    2492           0 : api_one_get_transport_protocol (vat_main_t * vam)
    2493             : {
    2494             :   vl_api_one_get_transport_protocol_t *mp;
    2495             :   int ret;
    2496             : 
    2497           0 :   M (ONE_GET_TRANSPORT_PROTOCOL, mp);
    2498             : 
    2499             :   /* send it... */
    2500           0 :   S (mp);
    2501             : 
    2502             :   /* Wait for a reply... */
    2503           0 :   W (ret);
    2504           0 :   return ret;
    2505             : }
    2506             : 
    2507             : static int
    2508           0 : api_one_map_register_set_ttl (vat_main_t * vam)
    2509             : {
    2510           0 :   unformat_input_t *input = vam->input;
    2511             :   vl_api_one_map_register_set_ttl_t *mp;
    2512           0 :   u32 ttl = 0;
    2513           0 :   u8 is_set = 0;
    2514             :   int ret;
    2515             : 
    2516             :   /* Parse args required to build the message */
    2517           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2518             :     {
    2519           0 :       if (unformat (input, "%u", &ttl))
    2520           0 :         is_set = 1;
    2521             :       else
    2522             :         {
    2523           0 :           clib_warning ("parse error '%U'", format_unformat_error, input);
    2524           0 :           return -99;
    2525             :         }
    2526             :     }
    2527             : 
    2528           0 :   if (!is_set)
    2529             :     {
    2530           0 :       errmsg ("TTL value missing!");
    2531           0 :       return -99;
    2532             :     }
    2533             : 
    2534           0 :   M (ONE_MAP_REGISTER_SET_TTL, mp);
    2535           0 :   mp->ttl = clib_host_to_net_u32 (ttl);
    2536             : 
    2537             :   /* send it... */
    2538           0 :   S (mp);
    2539             : 
    2540             :   /* Wait for a reply... */
    2541           0 :   W (ret);
    2542           0 :   return ret;
    2543             : }
    2544             : 
    2545             : static int
    2546           0 : api_show_one_map_register_ttl (vat_main_t * vam)
    2547             : {
    2548             :   vl_api_show_one_map_register_ttl_t *mp;
    2549             :   int ret;
    2550             : 
    2551           0 :   M (SHOW_ONE_MAP_REGISTER_TTL, mp);
    2552             : 
    2553             :   /* send it... */
    2554           0 :   S (mp);
    2555             : 
    2556             :   /* Wait for a reply... */
    2557           0 :   W (ret);
    2558           0 :   return ret;
    2559             : }
    2560             : 
    2561             : /**
    2562             :  * Add/del map request itr rlocs from ONE control plane and updates
    2563             :  *
    2564             :  * @param vam vpp API test context
    2565             :  * @return return code
    2566             :  */
    2567             : static int
    2568           0 : api_one_add_del_map_request_itr_rlocs (vat_main_t * vam)
    2569             : {
    2570           0 :   unformat_input_t *input = vam->input;
    2571             :   vl_api_one_add_del_map_request_itr_rlocs_t *mp;
    2572           0 :   u8 *locator_set_name = 0;
    2573           0 :   u8 locator_set_name_set = 0;
    2574           0 :   u8 is_add = 1;
    2575             :   int ret;
    2576             : 
    2577             :   /* Parse args required to build the message */
    2578           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2579             :     {
    2580           0 :       if (unformat (input, "del"))
    2581             :         {
    2582           0 :           is_add = 0;
    2583             :         }
    2584           0 :       else if (unformat (input, "%_%v%_", &locator_set_name))
    2585             :         {
    2586           0 :           locator_set_name_set = 1;
    2587             :         }
    2588             :       else
    2589             :         {
    2590           0 :           clib_warning ("parse error '%U'", format_unformat_error, input);
    2591           0 :           return -99;
    2592             :         }
    2593             :     }
    2594             : 
    2595           0 :   if (is_add && !locator_set_name_set)
    2596             :     {
    2597           0 :       errmsg ("itr-rloc is not set!");
    2598           0 :       return -99;
    2599             :     }
    2600             : 
    2601           0 :   if (is_add && vec_len (locator_set_name) > 64)
    2602             :     {
    2603           0 :       errmsg ("itr-rloc locator-set name too long");
    2604           0 :       vec_free (locator_set_name);
    2605           0 :       return -99;
    2606             :     }
    2607             : 
    2608           0 :   M (ONE_ADD_DEL_MAP_REQUEST_ITR_RLOCS, mp);
    2609           0 :   mp->is_add = is_add;
    2610           0 :   if (is_add)
    2611             :     {
    2612           0 :       clib_memcpy (mp->locator_set_name, locator_set_name,
    2613             :                    vec_len (locator_set_name));
    2614             :     }
    2615             :   else
    2616             :     {
    2617           0 :       clib_memset (mp->locator_set_name, 0, sizeof (mp->locator_set_name));
    2618             :     }
    2619           0 :   vec_free (locator_set_name);
    2620             : 
    2621             :   /* send it... */
    2622           0 :   S (mp);
    2623             : 
    2624             :   /* Wait for a reply... */
    2625           0 :   W (ret);
    2626           0 :   return ret;
    2627             : }
    2628             : 
    2629             : #define api_lisp_add_del_map_request_itr_rlocs api_one_add_del_map_request_itr_rlocs
    2630             : 
    2631             : static int
    2632           0 : api_one_locator_dump (vat_main_t * vam)
    2633             : {
    2634           0 :   unformat_input_t *input = vam->input;
    2635             :   vl_api_one_locator_dump_t *mp;
    2636             :   vl_api_control_ping_t *mp_ping;
    2637           0 :   u8 is_index_set = 0, is_name_set = 0;
    2638           0 :   u8 *ls_name = 0;
    2639           0 :   u32 ls_index = ~0;
    2640             :   int ret;
    2641             : 
    2642             :   /* Parse args required to build the message */
    2643           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2644             :     {
    2645           0 :       if (unformat (input, "ls_name %_%v%_", &ls_name))
    2646             :         {
    2647           0 :           is_name_set = 1;
    2648             :         }
    2649           0 :       else if (unformat (input, "ls_index %d", &ls_index))
    2650             :         {
    2651           0 :           is_index_set = 1;
    2652             :         }
    2653             :       else
    2654             :         {
    2655           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    2656           0 :           return -99;
    2657             :         }
    2658             :     }
    2659             : 
    2660           0 :   if (!is_index_set && !is_name_set)
    2661             :     {
    2662           0 :       errmsg ("error: expected one of index or name!");
    2663           0 :       return -99;
    2664             :     }
    2665             : 
    2666           0 :   if (is_index_set && is_name_set)
    2667             :     {
    2668           0 :       errmsg ("error: only one param expected!");
    2669           0 :       return -99;
    2670             :     }
    2671             : 
    2672           0 :   if (vec_len (ls_name) > 62)
    2673             :     {
    2674           0 :       errmsg ("error: locator set name too long!");
    2675           0 :       return -99;
    2676             :     }
    2677             : 
    2678           0 :   if (!vam->json_output)
    2679             :     {
    2680           0 :       print (vam->ofp, "%=16s%=16s%=16s", "locator", "priority", "weight");
    2681             :     }
    2682             : 
    2683           0 :   M (ONE_LOCATOR_DUMP, mp);
    2684           0 :   mp->is_index_set = is_index_set;
    2685             : 
    2686           0 :   if (is_index_set)
    2687           0 :     mp->ls_index = clib_host_to_net_u32 (ls_index);
    2688             :   else
    2689             :     {
    2690           0 :       vec_add1 (ls_name, 0);
    2691           0 :       strncpy ((char *) mp->ls_name, (char *) ls_name,
    2692             :                sizeof (mp->ls_name) - 1);
    2693             :     }
    2694             : 
    2695             :   /* send it... */
    2696           0 :   S (mp);
    2697             : 
    2698             :   /* Use a control ping for synchronization */
    2699           0 :   LISP_PING (&one_test_main, mp_ping);
    2700           0 :   S (mp_ping);
    2701             : 
    2702             :   /* Wait for a reply... */
    2703           0 :   W (ret);
    2704           0 :   return ret;
    2705             : }
    2706             : 
    2707             : #define api_lisp_locator_dump api_one_locator_dump
    2708             : 
    2709             : static int
    2710           0 : api_one_locator_set_dump (vat_main_t * vam)
    2711             : {
    2712             :   vl_api_one_locator_set_dump_t *mp;
    2713             :   vl_api_control_ping_t *mp_ping;
    2714           0 :   unformat_input_t *input = vam->input;
    2715           0 :   u8 filter = 0;
    2716             :   int ret;
    2717             : 
    2718             :   /* Parse args required to build the message */
    2719           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2720             :     {
    2721           0 :       if (unformat (input, "local"))
    2722             :         {
    2723           0 :           filter = 1;
    2724             :         }
    2725           0 :       else if (unformat (input, "remote"))
    2726             :         {
    2727           0 :           filter = 2;
    2728             :         }
    2729             :       else
    2730             :         {
    2731           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    2732           0 :           return -99;
    2733             :         }
    2734             :     }
    2735             : 
    2736           0 :   if (!vam->json_output)
    2737             :     {
    2738           0 :       print (vam->ofp, "%=10s%=15s", "ls_index", "ls_name");
    2739             :     }
    2740             : 
    2741           0 :   M (ONE_LOCATOR_SET_DUMP, mp);
    2742             : 
    2743           0 :   mp->filter = filter;
    2744             : 
    2745             :   /* send it... */
    2746           0 :   S (mp);
    2747             : 
    2748             :   /* Use a control ping for synchronization */
    2749           0 :   LISP_PING (&one_test_main, mp_ping);
    2750           0 :   S (mp_ping);
    2751             : 
    2752             :   /* Wait for a reply... */
    2753           0 :   W (ret);
    2754           0 :   return ret;
    2755             : }
    2756             : 
    2757             : #define api_lisp_locator_set_dump api_one_locator_set_dump
    2758             : 
    2759             : static int
    2760           0 : api_one_eid_table_map_dump (vat_main_t * vam)
    2761             : {
    2762           0 :   u8 is_l2 = 0;
    2763           0 :   u8 mode_set = 0;
    2764           0 :   unformat_input_t *input = vam->input;
    2765             :   vl_api_one_eid_table_map_dump_t *mp;
    2766             :   vl_api_control_ping_t *mp_ping;
    2767             :   int ret;
    2768             : 
    2769             :   /* Parse args required to build the message */
    2770           0 :   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    2771             :     {
    2772           0 :       if (unformat (input, "l2"))
    2773             :         {
    2774           0 :           is_l2 = 1;
    2775           0 :           mode_set = 1;
    2776             :         }
    2777           0 :       else if (unformat (input, "l3"))
    2778             :         {
    2779           0 :           is_l2 = 0;
    2780           0 :           mode_set = 1;
    2781             :         }
    2782             :       else
    2783             :         {
    2784           0 :           errmsg ("parse error '%U'", format_unformat_error, input);
    2785           0 :           return -99;
    2786             :         }
    2787             :     }
    2788             : 
    2789           0 :   if (!mode_set)
    2790             :     {
    2791           0 :       errmsg ("expected one of 'l2' or 'l3' parameter!");
    2792           0 :       return -99;
    2793             :     }
    2794             : 
    2795           0 :   if (!vam->json_output)
    2796             :     {
    2797           0 :       print (vam->ofp, "%=10s%=10s", "VNI", is_l2 ? "BD" : "VRF");
    2798             :     }
    2799             : 
    2800           0 :   M (ONE_EID_TABLE_MAP_DUMP, mp);
    2801           0 :   mp->is_l2 = is_l2;
    2802             : 
    2803             :   /* send it... */
    2804           0 :   S (mp);
    2805             : 
    2806             :   /* Use a control ping for synchronization */
    2807           0 :   LISP_PING (&one_test_main, mp_ping);
    2808           0 :   S (mp_ping);
    2809             : 
    2810             :   /* Wait for a reply... */
    2811           0 :   W (ret);
    2812           0 :   return ret;
    2813             : }
    2814             : 
    2815             : #define api_lisp_eid_table_map_dump api_one_eid_table_map_dump
    2816             : 
    2817             : static int
    2818           0 : api_one_eid_table_vni_dump (vat_main_t * vam)
    2819             : {
    2820             :   vl_api_one_eid_table_vni_dump_t *mp;
    2821             :   vl_api_control_ping_t *mp_ping;
    2822             :   int ret;
    2823             : 
    2824           0 :   if (!vam->json_output)
    2825             :     {
    2826           0 :       print (vam->ofp, "VNI");
    2827             :     }
    2828             : 
    2829           0 :   M (ONE_EID_TABLE_VNI_DUMP, mp);
    2830             : 
    2831             :   /* send it... */
    2832           0 :   S (mp);
    2833             : 
    2834             :   /* Use a control ping for synchronization */
    2835           0 :   LISP_PING (&one_test_main, mp_ping);
    2836           0 :   S (mp_ping);
    2837             : 
    2838             :   /* Wait for a reply... */
    2839           0 :   W (ret);
    2840           0 :   return ret;
    2841             : }
    2842             : 
    2843             : #define api_lisp_eid_table_vni_dump api_one_eid_table_vni_dump
    2844             : 
    2845             : static int
    2846           0 : api_one_eid_table_dump (vat_main_t * vam)
    2847             : {
    2848           0 :   unformat_input_t *i = vam->input;
    2849             :   vl_api_one_eid_table_dump_t *mp;
    2850             :   vl_api_control_ping_t *mp_ping;
    2851           0 :   u8 filter = 0;
    2852             :   int ret;
    2853           0 :   u32 vni, t = 0;
    2854             :   lisp_eid_vat_t eid;
    2855           0 :   u8 eid_set = 0;
    2856             : 
    2857           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
    2858             :     {
    2859           0 :       if (unformat
    2860             :           (i, "eid %U/%d", unformat_ip46_address, &eid.addr.ip, &eid.len))
    2861             :         {
    2862           0 :           eid_set = 1;
    2863           0 :           eid.type = 0;
    2864             :         }
    2865             :       else
    2866           0 :         if (unformat (i, "eid %U", unformat_ethernet_address, &eid.addr.mac))
    2867             :         {
    2868           0 :           eid_set = 1;
    2869           0 :           eid.type = 1;
    2870             :         }
    2871           0 :       else if (unformat (i, "eid %U", unformat_nsh_address, &eid.addr.nsh))
    2872             :         {
    2873           0 :           eid_set = 1;
    2874           0 :           eid.type = 2;
    2875             :         }
    2876           0 :       else if (unformat (i, "vni %d", &t))
    2877             :         {
    2878           0 :           vni = t;
    2879             :         }
    2880           0 :       else if (unformat (i, "local"))
    2881             :         {
    2882           0 :           filter = 1;
    2883             :         }
    2884           0 :       else if (unformat (i, "remote"))
    2885             :         {
    2886           0 :           filter = 2;
    2887             :         }
    2888             :       else
    2889             :         {
    2890           0 :           errmsg ("parse error '%U'", format_unformat_error, i);
    2891           0 :           return -99;
    2892             :         }
    2893             :     }
    2894             : 
    2895           0 :   if (!vam->json_output)
    2896             :     {
    2897           0 :       print (vam->ofp, "%-35s%-20s%-30s%-20s%-20s%-10s%-20s", "EID",
    2898             :              "type", "ls_index", "ttl", "authoritative", "key_id", "key");
    2899             :     }
    2900             : 
    2901           0 :   M (ONE_EID_TABLE_DUMP, mp);
    2902             : 
    2903           0 :   mp->filter = filter;
    2904           0 :   if (eid_set)
    2905             :     {
    2906           0 :       mp->eid_set = 1;
    2907           0 :       mp->vni = htonl (vni);
    2908           0 :       lisp_eid_put_vat (&mp->eid, &eid);
    2909             :     }
    2910             : 
    2911             :   /* send it... */
    2912           0 :   S (mp);
    2913             : 
    2914             :   /* Use a control ping for synchronization */
    2915           0 :   LISP_PING (&one_test_main, mp_ping);
    2916           0 :   S (mp_ping);
    2917             : 
    2918             :   /* Wait for a reply... */
    2919           0 :   W (ret);
    2920           0 :   return ret;
    2921             : }
    2922             : 
    2923             : static int
    2924           0 : api_one_adjacencies_get (vat_main_t * vam)
    2925             : {
    2926           0 :   unformat_input_t *i = vam->input;
    2927             :   vl_api_one_adjacencies_get_t *mp;
    2928           0 :   u8 vni_set = 0;
    2929           0 :   u32 vni = ~0;
    2930             :   int ret;
    2931             : 
    2932           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
    2933             :     {
    2934           0 :       if (unformat (i, "vni %d", &vni))
    2935             :         {
    2936           0 :           vni_set = 1;
    2937             :         }
    2938             :       else
    2939             :         {
    2940           0 :           errmsg ("parse error '%U'", format_unformat_error, i);
    2941           0 :           return -99;
    2942             :         }
    2943             :     }
    2944             : 
    2945           0 :   if (!vni_set)
    2946             :     {
    2947           0 :       errmsg ("vni not set!");
    2948           0 :       return -99;
    2949             :     }
    2950             : 
    2951           0 :   if (!vam->json_output)
    2952             :     {
    2953           0 :       print (vam->ofp, "%s %40s", "leid", "reid");
    2954             :     }
    2955             : 
    2956           0 :   M (ONE_ADJACENCIES_GET, mp);
    2957           0 :   mp->vni = clib_host_to_net_u32 (vni);
    2958             : 
    2959             :   /* send it... */
    2960           0 :   S (mp);
    2961             : 
    2962             :   /* Wait for a reply... */
    2963           0 :   W (ret);
    2964           0 :   return ret;
    2965             : }
    2966             : 
    2967             : static int
    2968           0 : api_one_map_server_dump (vat_main_t * vam)
    2969             : {
    2970             :   vl_api_one_map_server_dump_t *mp;
    2971             :   vl_api_control_ping_t *mp_ping;
    2972             :   int ret;
    2973             : 
    2974           0 :   if (!vam->json_output)
    2975             :     {
    2976           0 :       print (vam->ofp, "%=20s", "Map server");
    2977             :     }
    2978             : 
    2979           0 :   M (ONE_MAP_SERVER_DUMP, mp);
    2980             :   /* send it... */
    2981           0 :   S (mp);
    2982             : 
    2983             :   /* Use a control ping for synchronization */
    2984           0 :   LISP_PING (&one_test_main, mp_ping);
    2985           0 :   S (mp_ping);
    2986             : 
    2987             :   /* Wait for a reply... */
    2988           0 :   W (ret);
    2989           0 :   return ret;
    2990             : }
    2991             : 
    2992             : #define api_lisp_map_server_dump api_one_map_server_dump
    2993             : 
    2994             : static int
    2995           0 : api_one_map_resolver_dump (vat_main_t * vam)
    2996             : {
    2997             :   vl_api_one_map_resolver_dump_t *mp;
    2998             :   vl_api_control_ping_t *mp_ping;
    2999             :   int ret;
    3000             : 
    3001           0 :   if (!vam->json_output)
    3002             :     {
    3003           0 :       print (vam->ofp, "%=20s", "Map resolver");
    3004             :     }
    3005             : 
    3006           0 :   M (ONE_MAP_RESOLVER_DUMP, mp);
    3007             :   /* send it... */
    3008           0 :   S (mp);
    3009             : 
    3010             :   /* Use a control ping for synchronization */
    3011           0 :   LISP_PING (&one_test_main, mp_ping);
    3012           0 :   S (mp_ping);
    3013             : 
    3014             :   /* Wait for a reply... */
    3015           0 :   W (ret);
    3016           0 :   return ret;
    3017             : }
    3018             : 
    3019             : #define api_lisp_map_resolver_dump api_one_map_resolver_dump
    3020             : 
    3021             : static int
    3022           0 : api_one_stats_flush (vat_main_t * vam)
    3023             : {
    3024             :   vl_api_one_stats_flush_t *mp;
    3025           0 :   int ret = 0;
    3026             : 
    3027           0 :   M (ONE_STATS_FLUSH, mp);
    3028           0 :   S (mp);
    3029           0 :   W (ret);
    3030           0 :   return ret;
    3031             : }
    3032             : 
    3033             : static int
    3034           0 : api_one_stats_dump (vat_main_t * vam)
    3035             : {
    3036             :   vl_api_one_stats_dump_t *mp;
    3037             :   vl_api_control_ping_t *mp_ping;
    3038             :   int ret;
    3039             : 
    3040           0 :   M (ONE_STATS_DUMP, mp);
    3041             :   /* send it... */
    3042           0 :   S (mp);
    3043             : 
    3044             :   /* Use a control ping for synchronization */
    3045           0 :   LISP_PING (&one_test_main, mp_ping);
    3046           0 :   S (mp_ping);
    3047             : 
    3048             :   /* Wait for a reply... */
    3049           0 :   W (ret);
    3050           0 :   return ret;
    3051             : }
    3052             : 
    3053             : static int
    3054           0 : api_show_one_status (vat_main_t * vam)
    3055             : {
    3056             :   vl_api_show_one_status_t *mp;
    3057             :   int ret;
    3058             : 
    3059           0 :   if (!vam->json_output)
    3060             :     {
    3061           0 :       print (vam->ofp, "%-20s%-16s", "ONE status", "locator-set");
    3062             :     }
    3063             : 
    3064           0 :   M (SHOW_ONE_STATUS, mp);
    3065             :   /* send it... */
    3066           0 :   S (mp);
    3067             :   /* Wait for a reply... */
    3068           0 :   W (ret);
    3069           0 :   return ret;
    3070             : }
    3071             : 
    3072             : static int
    3073           0 : api_one_get_map_request_itr_rlocs (vat_main_t * vam)
    3074             : {
    3075             :   vl_api_one_get_map_request_itr_rlocs_t *mp;
    3076             :   int ret;
    3077             : 
    3078           0 :   if (!vam->json_output)
    3079             :     {
    3080           0 :       print (vam->ofp, "%=20s", "itr-rlocs:");
    3081             :     }
    3082             : 
    3083           0 :   M (ONE_GET_MAP_REQUEST_ITR_RLOCS, mp);
    3084             :   /* send it... */
    3085           0 :   S (mp);
    3086             :   /* Wait for a reply... */
    3087           0 :   W (ret);
    3088           0 :   return ret;
    3089             : }
    3090             : 
    3091             : #define vat_plugin_register vat_plugin_register_one
    3092             : #include <lisp/lisp-cp/one.api_test.c>
    3093             : 
    3094             : /*
    3095             :  * fd.io coding-style-patch-verification: ON
    3096             :  *
    3097             :  * Local Variables:
    3098             :  * eval: (c-set-style "gnu")
    3099             :  * End:
    3100             :  */

Generated by: LCOV version 1.14