New LISP API map-request itr-rloc
[vpp.git] / vpp-api-test / vat / api_format.c
index 27d3f9a..bfafc5b 100644 (file)
@@ -474,7 +474,23 @@ u8 * format_ip6_address (u8 * s, va_list * args)
 u8 * format_ip46_address (u8 * s, va_list * args)
 {
   ip46_address_t *ip46 = va_arg (*args, ip46_address_t *);
-  return ip46_address_is_ip4(ip46)?
+  ip46_type_t type = va_arg (*args, ip46_type_t);
+  int is_ip4 = 1;
+
+  switch (type)
+    {
+      case IP46_TYPE_ANY:
+       is_ip4 = ip46_address_is_ip4(ip46);
+       break;
+      case IP46_TYPE_IP4:
+       is_ip4 = 1;
+       break;
+      case IP46_TYPE_IP6:
+       is_ip4 = 0;
+       break;
+    }
+
+  return is_ip4 ?
       format(s, "%U", format_ip4_address, &ip46->ip4):
       format(s, "%U", format_ip6_address, &ip46->ip6);
 }
@@ -517,8 +533,9 @@ static void vl_api_create_loopback_reply_t_handler
     i32 retval = ntohl(mp->retval);
 
     vam->retval = retval;
-    vam->result_ready = 1;
     vam->regenerate_interface_table = 1;
+    vam->sw_if_index = ntohl (mp->sw_if_index);
+    vam->result_ready = 1;
 }
 
 static void vl_api_create_loopback_reply_t_handler_json
@@ -531,6 +548,34 @@ static void vl_api_create_loopback_reply_t_handler_json
     vat_json_object_add_int(&node, "retval", ntohl(mp->retval));
     vat_json_object_add_uint(&node, "sw_if_index", ntohl(mp->sw_if_index));
 
+    vat_json_print(vam->ofp, &node);
+    vat_json_free(&node);
+    vam->retval = ntohl(mp->retval);
+    vam->result_ready = 1;
+}
+
+static void vl_api_af_packet_create_reply_t_handler 
+(vl_api_af_packet_create_reply_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+    i32 retval = ntohl(mp->retval);
+
+    vam->retval = retval;
+    vam->regenerate_interface_table = 1;
+    vam->sw_if_index = ntohl (mp->sw_if_index);
+    vam->result_ready = 1;
+}
+
+static void vl_api_af_packet_create_reply_t_handler_json
+(vl_api_af_packet_create_reply_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+    vat_json_node_t node;
+
+    vat_json_init_object(&node);
+    vat_json_object_add_int(&node, "retval", ntohl(mp->retval));
+    vat_json_object_add_uint(&node, "sw_if_index", ntohl(mp->sw_if_index));
+
     vat_json_print(vam->ofp, &node);
     vat_json_free(&node);
 
@@ -545,8 +590,9 @@ static void vl_api_create_vlan_subif_reply_t_handler
     i32 retval = ntohl(mp->retval);
 
     vam->retval = retval;
-    vam->result_ready = 1;
     vam->regenerate_interface_table = 1;
+    vam->sw_if_index = ntohl (mp->sw_if_index);
+    vam->result_ready = 1;
 }
 
 static void vl_api_create_vlan_subif_reply_t_handler_json
@@ -573,8 +619,9 @@ static void vl_api_create_subif_reply_t_handler
     i32 retval = ntohl(mp->retval);
 
     vam->retval = retval;
-    vam->result_ready = 1;
     vam->regenerate_interface_table = 1;
+    vam->sw_if_index = ntohl (mp->sw_if_index);
+    vam->result_ready = 1;
 }
 
 static void vl_api_create_subif_reply_t_handler_json
@@ -601,8 +648,8 @@ static void vl_api_interface_name_renumber_reply_t_handler
     i32 retval = ntohl(mp->retval);
 
     vam->retval = retval;
-    vam->result_ready = 1;
     vam->regenerate_interface_table = 1;
+    vam->result_ready = 1;
 }
 
 static void vl_api_interface_name_renumber_reply_t_handler_json
@@ -768,7 +815,6 @@ static void vl_api_classify_add_del_table_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
-        vam->result_ready = 1;
         if (retval == 0 && 
             ((mp->new_table_index != 0xFFFFFFFF) ||
              (mp->skip_n_vectors != 0xFFFFFFFF) ||
@@ -780,6 +826,7 @@ static void vl_api_classify_add_del_table_reply_t_handler
             errmsg ("new index %d, skip_n_vectors %d, match_n_vectors %d\n",
                     ntohl(mp->new_table_index),
                     ntohl(mp->skip_n_vectors), ntohl(mp->match_n_vectors));
+       vam->result_ready = 1;
     }
 }
 
@@ -811,9 +858,9 @@ static void vl_api_get_node_index_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
-        vam->result_ready = 1;
         if (retval == 0)
             errmsg ("node index %d\n", ntohl(mp->node_index));
+        vam->result_ready = 1;
     }
 }
 
@@ -843,9 +890,9 @@ static void vl_api_add_node_next_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
-        vam->result_ready = 1;
         if (retval == 0)
             errmsg ("next index %d\n", ntohl(mp->next_index));
+        vam->result_ready = 1;
     }
 }
 
@@ -1143,8 +1190,10 @@ static void vl_api_tap_connect_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
-        vam->result_ready = 1;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
+       vam->result_ready = 1;
     }
+    
 }
 
 static void vl_api_tap_connect_reply_t_handler_json
@@ -1162,6 +1211,7 @@ static void vl_api_tap_connect_reply_t_handler_json
 
     vam->retval = ntohl(mp->retval);
     vam->result_ready = 1;
+    
 }
 
 static void vl_api_tap_modify_reply_t_handler
@@ -1173,6 +1223,7 @@ static void vl_api_tap_modify_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
         vam->result_ready = 1;
     }
 }
@@ -1262,6 +1313,7 @@ static void vl_api_l2tpv3_create_tunnel_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
         vam->result_ready = 1;
     }
 }
@@ -1292,6 +1344,7 @@ static void vl_api_vxlan_add_del_tunnel_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
         vam->result_ready = 1;
     }
 }
@@ -1322,6 +1375,7 @@ static void vl_api_gre_add_del_tunnel_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
         vam->result_ready = 1;
     }
 }
@@ -1352,6 +1406,7 @@ static void vl_api_create_vhost_user_if_reply_t_handler
         vam->async_errors += (retval < 0);
     } else {
         vam->retval = retval;
+       vam->sw_if_index = ntohl (mp->sw_if_index);
         vam->result_ready = 1;
     }
 }
@@ -2122,6 +2177,8 @@ vl_api_lisp_enable_disable_status_details_t_handler_json
     gpe_status = format (0, "%s", mp->gpe_status ? "enabled" : "disabled");
     feature_status = format (0, "%s",
                             mp->feature_status ? "enabled" : "disabled");
+    vec_add1 (gpe_status, 0);
+    vec_add1 (feature_status, 0);
 
     if (VAT_JSON_ARRAY != vam->json_tree.type) {
         ASSERT(VAT_JSON_NONE == vam->json_tree.type);
@@ -2137,6 +2194,45 @@ vl_api_lisp_enable_disable_status_details_t_handler_json
     vec_free (feature_status);
 }
 
+static void
+vl_api_lisp_get_map_request_itr_rlocs_reply_t_handler (
+    vl_api_lisp_get_map_request_itr_rlocs_reply_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+    i32 retval = ntohl(mp->retval);
+
+    if (retval >= 0) {
+      fformat(vam->ofp, "%=20s\n",
+              mp->locator_set_name);
+    }
+
+    vam->retval = retval;
+    vam->result_ready = 1;
+}
+
+static void
+vl_api_lisp_get_map_request_itr_rlocs_reply_t_handler_json (
+    vl_api_lisp_get_map_request_itr_rlocs_reply_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+    vat_json_node_t * node = NULL;
+
+    if (VAT_JSON_ARRAY != vam->json_tree.type) {
+        ASSERT(VAT_JSON_NONE == vam->json_tree.type);
+        vat_json_init_array(&vam->json_tree);
+    }
+    node = vat_json_array_add(&vam->json_tree);
+
+    vat_json_init_object(node);
+    vat_json_object_add_string_copy(node, "itr-rlocs", mp->locator_set_name);
+
+    vat_json_print(vam->ofp, node);
+    vat_json_free(node);
+
+    vam->retval = ntohl(mp->retval);
+    vam->result_ready = 1;
+}
+
 static u8 * format_policer_type (u8 * s, va_list * va)
 {
     u32 i = va_arg (*va, u32);
@@ -2351,8 +2447,9 @@ _(lisp_add_del_map_resolver_reply)                      \
 _(lisp_gpe_enable_disable_reply)                        \
 _(lisp_gpe_add_del_iface_reply)                         \
 _(lisp_enable_disable_reply)                            \
+_(lisp_pitr_set_locator_set_reply)                      \
+_(lisp_add_del_map_request_itr_rlocs_reply)             \
 _(vxlan_gpe_add_del_tunnel_reply)                      \
-_(af_packet_create_reply)                               \
 _(af_packet_delete_reply)                               \
 _(policer_add_del_reply)                                \
 _(netmap_create_reply)                                  \
@@ -2483,7 +2580,8 @@ _(MODIFY_VHOST_USER_IF_REPLY, modify_vhost_user_if_reply)               \
 _(DELETE_VHOST_USER_IF_REPLY, delete_vhost_user_if_reply)               \
 _(SHOW_VERSION_REPLY, show_version_reply)                               \
 _(L2_FIB_TABLE_ENTRY, l2_fib_table_entry)                              \
-_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply)      \
+_(VXLAN_GPE_ADD_DEL_TUNNEL_REPLY, vxlan_gpe_add_del_tunnel_reply)          \
+_(VXLAN_GPE_TUNNEL_DETAILS, vxlan_gpe_tunnel_details)                   \
 _(INTERFACE_NAME_RENUMBER_REPLY, interface_name_renumber_reply)                \
 _(WANT_IP4_ARP_EVENTS_REPLY, want_ip4_arp_events_reply)                        \
 _(IP4_ARP_EVENT, ip4_arp_event)                                         \
@@ -2528,6 +2626,7 @@ _(LISP_GPE_ADD_DEL_FWD_ENTRY_REPLY, lisp_gpe_add_del_fwd_entry_reply)   \
 _(LISP_ADD_DEL_MAP_RESOLVER_REPLY, lisp_add_del_map_resolver_reply)     \
 _(LISP_GPE_ENABLE_DISABLE_REPLY, lisp_gpe_enable_disable_reply)         \
 _(LISP_ENABLE_DISABLE_REPLY, lisp_enable_disable_reply)                 \
+_(LISP_PITR_SET_LOCATOR_SET_REPLY, lisp_pitr_set_locator_set_reply)     \
 _(LISP_GPE_ADD_DEL_IFACE_REPLY, lisp_gpe_add_del_iface_reply)           \
 _(LISP_LOCATOR_SET_DETAILS, lisp_locator_set_details)                   \
 _(LISP_LOCAL_EID_TABLE_DETAILS, lisp_local_eid_table_details)           \
@@ -2535,6 +2634,10 @@ _(LISP_GPE_TUNNEL_DETAILS, lisp_gpe_tunnel_details)                     \
 _(LISP_MAP_RESOLVER_DETAILS, lisp_map_resolver_details)                 \
 _(LISP_ENABLE_DISABLE_STATUS_DETAILS,                                   \
   lisp_enable_disable_status_details)                                   \
+_(LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS_REPLY,                             \
+  lisp_add_del_map_request_itr_rlocs_reply)                             \
+_(LISP_GET_MAP_REQUEST_ITR_RLOCS_REPLY,                                 \
+  lisp_get_map_request_itr_rlocs_reply)                                 \
 _(AF_PACKET_CREATE_REPLY, af_packet_create_reply)                       \
 _(AF_PACKET_DELETE_REPLY, af_packet_delete_reply)                       \
 _(POLICER_ADD_DEL_REPLY, policer_add_del_reply)                         \
@@ -2579,6 +2682,20 @@ do {                                            \
     return -99;                                 \
 } while(0);
 
+/* W2: wait for results, with timeout */
+#define W2(body)                               \
+do {                                            \
+    timeout = vat_time_now (vam) + 1.0;         \
+                                                \
+    while (vat_time_now (vam) < timeout) {      \
+        if (vam->result_ready == 1) {           \
+         (body);                               \
+         return (vam->retval);                 \
+        }                                       \
+    }                                           \
+    return -99;                                 \
+} while(0);
+
 typedef struct {
     u8 * name;
     u32 value;
@@ -3095,6 +3212,13 @@ int api_sw_interface_dump (vat_main_t * vam)
     strncpy ((char *) mp->name_filter, "lo", sizeof(mp->name_filter)-1);
     S;
 
+
+    /* and vxlan-gpe tunnel interfaces */
+    M(SW_INTERFACE_DUMP, sw_interface_dump);
+    mp->name_filter_valid = 1;
+    strncpy ((char *) mp->name_filter, "vxlan_gpe", sizeof(mp->name_filter)-1);
+    S;
+
     /* and vxlan tunnel interfaces */
     M(SW_INTERFACE_DUMP, sw_interface_dump);
     mp->name_filter_valid = 1;
@@ -7517,7 +7641,9 @@ static void vl_api_vxlan_tunnel_details_t_handler
     fformat(vam->ofp, "%11d%24U%24U%14d%18d%13d\n",
             ntohl(mp->sw_if_index),
             format_ip46_address, &(mp->src_address[0]),
+           IP46_TYPE_ANY,
             format_ip46_address, &(mp->dst_address[0]),
+           IP46_TYPE_ANY,
             ntohl(mp->encap_vrf_id),
             ntohl(mp->decap_next_index),
             ntohl(mp->vni));
@@ -8060,8 +8186,10 @@ static int api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
     unformat_input_t * line_input = vam->input;
     vl_api_vxlan_gpe_add_del_tunnel_t *mp;
     f64 timeout;
-    ip4_address_t local, remote;
+    ip4_address_t local4, remote4;
+    ip6_address_t local6, remote6;
     u8 is_add = 1;
+    u8 ipv4_set = 0, ipv6_set = 0;
     u8 local_set = 0;
     u8 remote_set = 0;
     u32 encap_vrf_id = 0;
@@ -8074,11 +8202,29 @@ static int api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
         if (unformat (line_input, "del"))
             is_add = 0;
         else if (unformat (line_input, "local %U", 
-                           unformat_ip4_address, &local))
+                           unformat_ip4_address, &local4))
+        {
             local_set = 1;
+            ipv4_set = 1;
+        }
         else if (unformat (line_input, "remote %U",
-                           unformat_ip4_address, &remote))
+                           unformat_ip4_address, &remote4))
+        {
             remote_set = 1;
+            ipv4_set = 1;
+        }
+        else if (unformat (line_input, "local %U",
+                           unformat_ip6_address, &local6))
+        {
+            local_set = 1;
+            ipv6_set = 1;
+        }
+        else if (unformat (line_input, "remote %U",
+                           unformat_ip6_address, &remote6))
+        {
+            remote_set = 1;
+            ipv6_set = 1;
+        }
         else if (unformat (line_input, "encap-vrf-id %d", &encap_vrf_id))
             ;
         else if (unformat (line_input, "decap-vrf-id %d", &decap_vrf_id))
@@ -8107,6 +8253,10 @@ static int api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
         errmsg ("tunnel remote address not specified\n");
         return -99;
     }
+    if (ipv4_set && ipv6_set) {
+        errmsg ("both IPv4 and IPv6 addresses specified");
+        return -99;
+    }
 
     if (vni_set == 0) {
         errmsg ("vni not specified\n");
@@ -8115,20 +8265,118 @@ static int api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
 
     M(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel);
     
-    mp->local = local.as_u32;
-    mp->remote = remote.as_u32;
+
+    if (ipv6_set) {
+        clib_memcpy(&mp->local, &local6, sizeof(local6));
+        clib_memcpy(&mp->remote, &remote6, sizeof(remote6));
+    } else {
+        clib_memcpy(&mp->local, &local4, sizeof(local4));
+        clib_memcpy(&mp->remote, &remote4, sizeof(remote4));
+    }
+
     mp->encap_vrf_id = ntohl(encap_vrf_id);
     mp->decap_vrf_id = ntohl(decap_vrf_id);
     mp->protocol = ntohl(protocol);
     mp->vni = ntohl(vni);
     mp->is_add = is_add;
-
+    mp->is_ipv6 = ipv6_set;
 
     S; W;
     /* NOTREACHED */
     return 0;
 }
 
+static void vl_api_vxlan_gpe_tunnel_details_t_handler
+(vl_api_vxlan_gpe_tunnel_details_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+
+    fformat(vam->ofp, "%11d%24U%24U%13d%12d%14d%14d\n",
+            ntohl(mp->sw_if_index),
+            format_ip46_address, &(mp->local[0]),
+            format_ip46_address, &(mp->remote[0]),
+                       ntohl(mp->vni),
+            ntohl(mp->protocol),
+            ntohl(mp->encap_vrf_id),
+            ntohl(mp->decap_vrf_id));
+}
+
+static void vl_api_vxlan_gpe_tunnel_details_t_handler_json
+(vl_api_vxlan_gpe_tunnel_details_t * mp)
+{
+    vat_main_t * vam = &vat_main;
+    vat_json_node_t *node = NULL;
+    struct in_addr ip4;
+    struct in6_addr ip6;
+
+    if (VAT_JSON_ARRAY != vam->json_tree.type) {
+        ASSERT(VAT_JSON_NONE == vam->json_tree.type);
+        vat_json_init_array(&vam->json_tree);
+    }
+    node = vat_json_array_add(&vam->json_tree);
+
+    vat_json_init_object(node);
+    vat_json_object_add_uint(node, "sw_if_index", ntohl(mp->sw_if_index));
+    if (mp->is_ipv6) {
+        clib_memcpy(&ip6, &(mp->local[0]), sizeof(ip6));
+        vat_json_object_add_ip6(node, "local", ip6);
+        clib_memcpy(&ip6, &(mp->remote[0]), sizeof(ip6));
+        vat_json_object_add_ip6(node, "remote", ip6);
+    } else {
+        clib_memcpy(&ip4, &(mp->local[0]), sizeof(ip4));
+        vat_json_object_add_ip4(node, "local", ip4);
+        clib_memcpy(&ip4, &(mp->remote[0]), sizeof(ip4));
+        vat_json_object_add_ip4(node, "remote", ip4);
+    }
+    vat_json_object_add_uint(node, "vni", ntohl(mp->vni));
+    vat_json_object_add_uint(node, "protocol", ntohl(mp->protocol));
+    vat_json_object_add_uint(node, "encap_vrf_id", ntohl(mp->encap_vrf_id));
+    vat_json_object_add_uint(node, "decap_vrf_id", ntohl(mp->decap_vrf_id));
+    vat_json_object_add_uint(node, "is_ipv6", mp->is_ipv6 ? 1 : 0);
+}
+
+static int api_vxlan_gpe_tunnel_dump (vat_main_t * vam)
+{
+    unformat_input_t * i = vam->input;
+    vl_api_vxlan_gpe_tunnel_dump_t *mp;
+    f64 timeout;
+    u32 sw_if_index;
+    u8 sw_if_index_set = 0;
+
+    /* Parse args required to build the message */
+    while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT) {
+        if (unformat (i, "sw_if_index %d", &sw_if_index))
+            sw_if_index_set = 1;
+        else
+            break;
+    }
+
+    if (sw_if_index_set == 0) {
+        sw_if_index = ~0;
+    }
+
+    if (!vam->json_output) {
+        fformat(vam->ofp, "%11s%24s%24s%13s%15s%14s%14s\n",
+                "sw_if_index", "local", "remote", "vni",
+                               "protocol","encap_vrf_id", "decap_vrf_id");
+    }
+
+    /* Get list of vxlan-tunnel interfaces */
+    M(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump);
+
+    mp->sw_if_index = htonl(sw_if_index);
+
+    S;
+
+    /* Use a control ping for synchronization */
+    {
+        vl_api_control_ping_t * mp;
+        M(CONTROL_PING, control_ping);
+        S;
+    }
+    W;
+}
+
 u8 * format_l2_fib_mac_address (u8 * s, va_list * args)
 {
   u8 * a = va_arg (*args, u8 *);
@@ -9998,6 +10246,58 @@ typedef CLIB_PACKED(struct
     u8 addr[16]; /**< IPv4/IPv6 address */
 }) rloc_t;
 
+/**
+ * Enable/disable LISP proxy ITR.
+ *
+ * @param vam vpp API test context
+ * @return return code
+ */
+static int
+api_lisp_pitr_set_locator_set (vat_main_t * vam)
+{
+  f64 timeout = ~0;
+  u8 ls_name_set = 0;
+  unformat_input_t * input = vam->input;
+  vl_api_lisp_pitr_set_locator_set_t * mp;
+  u8 is_add = 1;
+  u8 * ls_name = 0;
+
+  /* Parse args required to build the message */
+  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (input, "del"))
+        is_add = 0;
+      else if (unformat (input, "locator-set %s", &ls_name))
+        ls_name_set = 1;
+      else
+        {
+          errmsg ("parse error '%U'", format_unformat_error, input);
+          return -99;
+        }
+    }
+
+  if (!ls_name_set)
+    {
+      errmsg ("locator-set name not set!");
+      return -99;
+    }
+
+  M(LISP_PITR_SET_LOCATOR_SET, lisp_pitr_set_locator_set);
+
+  mp->is_add = is_add;
+  clib_memcpy (mp->ls_name, ls_name, vec_len (ls_name));
+  vec_free (ls_name);
+
+  /* send */
+  S;
+
+  /* wait for reply */
+  W;
+
+  /* notreached*/
+  return 0;
+}
+
 /**
  * Add/del remote mapping from LISP control plane and updates
  * forwarding entries in data-plane accordingly.
@@ -10017,13 +10317,15 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
     ip6_address_t seid6, deid6, rloc6;
     u32 seid_len = 0, deid_len = 0, len;
     u8 deid_is_ip4 = 0, seid_is_ip4 = 0;
-    u8 is_add = 1;
+    u8 is_add = 1, del_all = 0;
     u32 action = ~0;
     rloc_t * rlocs = 0, rloc;
 
     /* Parse args required to build the message */
     while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) {
-        if (unformat(input, "del")) {
+        if (unformat(input, "del-all")) {
+            del_all = 1;
+        } else if (unformat(input, "del")) {
             is_add = 0;
         } else if (unformat(input, "add")) {
             is_add = 1;
@@ -10087,6 +10389,7 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
     mp->seid_len = seid_len;
     mp->action = (u8) action;
     mp->deid_len = deid_len;
+    mp->del_all = del_all;
     if (seid_is_ip4) {
         mp->eid_is_ip4 = 1;
         clib_memcpy (mp->seid, &seid4, sizeof (seid4));
@@ -10165,6 +10468,65 @@ api_lisp_gpe_add_del_iface(vat_main_t * vam)
     return 0;
 }
 
+/**
+ * Add/del map request itr rlocs from LISP control plane and updates
+ *
+ * @param vam vpp API test context
+ * @return return code
+ */
+static int
+api_lisp_add_del_map_request_itr_rlocs(vat_main_t * vam)
+{
+    unformat_input_t * input = vam->input;
+    vl_api_lisp_add_del_map_request_itr_rlocs_t *mp;
+    f64 timeout = ~0;
+    u8 *locator_set_name = 0;
+    u8  locator_set_name_set = 0;
+    u8 is_add = 1;
+
+    /* Parse args required to build the message */
+    while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) {
+        if (unformat(input, "del")) {
+            is_add = 0;
+        } else if (unformat(input, "%_%v%_", &locator_set_name)) {
+            locator_set_name_set = 1;
+        } else {
+            clib_warning ("parse error '%U'", format_unformat_error, input);
+            return -99;
+        }
+    }
+
+    if (is_add && !locator_set_name_set) {
+        errmsg ("itr-rloc is not set!");
+        return -99;
+    }
+
+    if (is_add && vec_len(locator_set_name) > 64) {
+        errmsg ("itr-rloc locator-set name too long\n");
+        vec_free(locator_set_name);
+        return -99;
+    }
+
+    M(LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS, lisp_add_del_map_request_itr_rlocs);
+    mp->is_add = is_add;
+    if (is_add) {
+      clib_memcpy (mp->locator_set_name , locator_set_name,
+                   vec_len(locator_set_name));
+    } else {
+      memset(mp->locator_set_name, 0, sizeof(mp->locator_set_name));
+    }
+    vec_free (locator_set_name);
+
+    /* send it... */
+    S;
+
+    /* Wait for a reply... */
+    W;
+
+    /* NOTREACHED */
+    return 0;
+}
+
 static int
 api_lisp_locator_set_dump(vat_main_t *vam)
 {
@@ -10309,6 +10671,27 @@ api_lisp_enable_disable_status_dump(vat_main_t *vam)
     return 0;
 }
 
+static int
+api_lisp_get_map_request_itr_rlocs(vat_main_t *vam)
+{
+    vl_api_lisp_get_map_request_itr_rlocs_t *mp;
+    f64 timeout = ~0;
+
+    if (!vam->json_output) {
+        fformat(vam->ofp, "%=20s\n",
+                "itr-rlocs:");
+    }
+
+    M(LISP_GET_MAP_REQUEST_ITR_RLOCS, lisp_get_map_request_itr_rlocs);
+    /* send it... */
+    S;
+    /* Wait for a reply... */
+    W;
+
+    /* NOTREACHED */
+    return 0;
+}
+
 static int
 api_af_packet_create (vat_main_t * vam)
 {
@@ -10347,7 +10730,7 @@ api_af_packet_create (vat_main_t * vam)
     mp->use_random_hw_addr = random_hw_addr;
     vec_free (host_if_name);
 
-    S; W;
+    S; W2(fprintf(vam->ofp," new sw_if_index = %d ", vam->sw_if_index));
     /* NOTREACHED */
     return 0;
 }
@@ -10966,7 +11349,7 @@ _(l2tpv3_set_lookup_key,                                                \
   "lookup_v6_src | lookup_v6_dst | lookup_session_id")                  \
 _(sw_if_l2tpv3_tunnel_dump, "")                                         \
 _(vxlan_add_del_tunnel,                                                 \
-  "src <ip4-addr> dst <ip4-addr> vni <vni> [encap-vrf-id <nn>]\n"       \
+  "src <ip-addr> dst <ip-addr> vni <vni> [encap-vrf-id <nn>]\n"         \
   " [decap-next l2|ip4|ip6] [del]")                                     \
 _(vxlan_tunnel_dump, "[<intfc> | sw_if_index <nn>]")                    \
 _(gre_add_del_tunnel,                                                   \
@@ -10987,10 +11370,11 @@ _(modify_vhost_user_if,                                                 \
 _(delete_vhost_user_if, "<intfc> | sw_if_index <nn>")                   \
 _(sw_interface_vhost_user_dump, "")                                     \
 _(show_version, "")                                                     \
-_(vxlan_gpe_add_del_tunnel,                                            \
-  "local <ip4-addr> remote <ip4-addr> vni <nn>\n"                       \
-    "[encap-vrf-id <nn>] [decap-vrf-id <nn>] [next-ip4][next-ip6]"     \
-  "[next-ethernet] [next-nsh]\n")                                      \
+_(vxlan_gpe_add_del_tunnel,                                             \
+  "local <addr> remote <addr> vni <nn>\n"                               \
+    "[encap-vrf-id <nn>] [decap-vrf-id <nn>] [next-ip4][next-ip6]"      \
+  "[next-ethernet] [next-nsh]\n")                                       \
+_(vxlan_gpe_tunnel_dump, "[<intfc> | sw_if_index <nn>]")                \
 _(l2_fib_table_dump, "bd_id <bridge-domain-id>")                       \
 _(interface_name_renumber,                                              \
   "<intfc> | sw_if_index <nn> new_show_dev_instance <nn>")             \
@@ -11057,14 +11441,18 @@ _(lisp_add_del_map_resolver, "<ip4|6-addr> [del]")                      \
 _(lisp_gpe_enable_disable, "enable|disable")                            \
 _(lisp_enable_disable, "enable|disable")                                \
 _(lisp_gpe_add_del_iface, "up|down")                                    \
-_(lisp_add_del_remote_mapping, "add|del vni <vni> deid <dest-eid> seid" \
+_(lisp_add_del_remote_mapping, "add|del vni <vni> table-id <id> "       \
+                               "deid <dest-eid> seid"                   \
                                " <src-eid> rloc <locator> "             \
                                "[rloc <loc> ... ]")                     \
+_(lisp_pitr_set_locator_set, "locator-set <loc-set-name> | del")        \
+_(lisp_add_del_map_request_itr_rlocs, "<loc-set-name> [del]")           \
 _(lisp_locator_set_dump, "")                                            \
 _(lisp_local_eid_table_dump, "")                                        \
 _(lisp_gpe_tunnel_dump, "")                                             \
 _(lisp_map_resolver_dump, "")                                           \
 _(lisp_enable_disable_status_dump, "")                                  \
+_(lisp_get_map_request_itr_rlocs, "")                                   \
 _(af_packet_create, "name <host interface name> [hw_addr <mac>]")       \
 _(af_packet_delete, "name <host interface name>")                       \
 _(policer_add_del, "name <policer name> <params> [del]")                \