LISP: add P-ITR/P-ETR/xTR API handlers, ONE-24
[vpp.git] / src / vnet / lisp-cp / one_api.c
index 33b3a47..0def13c 100644 (file)
@@ -134,7 +134,14 @@ _(ONE_ADD_DEL_NDP_ENTRY, one_add_del_ndp_entry)                         \
 _(ONE_NDP_BD_GET, one_ndp_bd_get)                                       \
 _(ONE_NDP_ENTRIES_GET, one_ndp_entries_get)                             \
 _(ONE_SET_TRANSPORT_PROTOCOL, one_set_transport_protocol)               \
-_(ONE_GET_TRANSPORT_PROTOCOL, one_get_transport_protocol)
+_(ONE_GET_TRANSPORT_PROTOCOL, one_get_transport_protocol)               \
+_(ONE_ENABLE_DISABLE_XTR_MODE, one_enable_disable_xtr_mode)             \
+_(ONE_SHOW_XTR_MODE, one_show_xtr_mode)                                 \
+_(ONE_ENABLE_DISABLE_PITR_MODE, one_enable_disable_pitr_mode)           \
+_(ONE_SHOW_PITR_MODE, one_show_pitr_mode)                               \
+_(ONE_ENABLE_DISABLE_PETR_MODE, one_enable_disable_petr_mode)           \
+_(ONE_SHOW_PETR_MODE, one_show_petr_mode)                               \
+
 
 static locator_t *
 unformat_one_locs (vl_api_one_remote_locator_t * rmt_locs, u32 rloc_num)
@@ -630,6 +637,7 @@ static void
   if (!mp->is_add)
     {
       vnet_lisp_add_del_adjacency_args_t _a, *a = &_a;
+      memset (a, 0, sizeof (a[0]));
       gid_address_copy (&a->reid, eid);
       a->is_add = 0;
       rv = vnet_lisp_add_del_adjacency (a);
@@ -1444,7 +1452,10 @@ vl_api_show_one_pitr_t_handler (vl_api_show_one_pitr_t * mp)
       return;
     }
 
-  if (!lcm->lisp_pitr)
+  u8 is_enabled = (lcm->flags & LISP_FLAG_PITR_MODE)
+    && lcm->pitr_map_index != ~0;
+
+  if (!is_enabled)
     {
       tmp_str = format (0, "N/A");
     }
@@ -1467,7 +1478,7 @@ vl_api_show_one_pitr_t_handler (vl_api_show_one_pitr_t * mp)
   /* *INDENT-OFF* */
   REPLY_MACRO2(VL_API_SHOW_ONE_PITR_REPLY,
   ({
-    rmp->status = lcm->lisp_pitr;
+    rmp->status = lcm->flags & LISP_FLAG_PITR_MODE;
     strncpy((char *) rmp->locator_set_name, (char *) tmp_str,
             ARRAY_LEN(rmp->locator_set_name) - 1);
   }));
@@ -1769,6 +1780,78 @@ vl_api_one_ndp_entries_get_t_handler (vl_api_one_ndp_entries_get_t * mp)
   vec_free (entries);
 }
 
+static void
+  vl_api_one_enable_disable_xtr_mode_t_handler
+  (vl_api_one_enable_disable_xtr_mode_t * mp)
+{
+  vl_api_one_enable_disable_xtr_mode_reply_t *rmp = 0;
+  int rv = vnet_lisp_enable_disable_xtr_mode (mp->is_en);
+
+  REPLY_MACRO (VL_API_ONE_ENABLE_DISABLE_XTR_MODE_REPLY);
+}
+
+static void
+vl_api_one_show_xtr_mode_t_handler (vl_api_one_show_xtr_mode_t * mp)
+{
+  vl_api_one_show_xtr_mode_reply_t *rmp = 0;
+  int rv = 0;
+
+  /* *INDENT-OFF* */
+  REPLY_MACRO2 (VL_API_ONE_SHOW_XTR_MODE_REPLY,
+  {
+    rmp->is_en = vnet_lisp_get_xtr_mode ();
+  });
+  /* *INDENT-ON* */
+}
+
+static void
+  vl_api_one_enable_disable_pitr_mode_t_handler
+  (vl_api_one_enable_disable_pitr_mode_t * mp)
+{
+  vl_api_one_enable_disable_pitr_mode_reply_t *rmp = 0;
+  int rv = vnet_lisp_enable_disable_pitr_mode (mp->is_en);
+
+  REPLY_MACRO (VL_API_ONE_ENABLE_DISABLE_PITR_MODE_REPLY);
+}
+
+static void
+vl_api_one_show_pitr_mode_t_handler (vl_api_one_show_pitr_mode_t * mp)
+{
+  vl_api_one_show_pitr_mode_reply_t *rmp = 0;
+  int rv = 0;
+
+  /* *INDENT-OFF* */
+  REPLY_MACRO2 (VL_API_ONE_SHOW_PITR_MODE_REPLY,
+  {
+    rmp->is_en = vnet_lisp_get_pitr_mode ();
+  });
+  /* *INDENT-ON* */
+}
+
+static void
+  vl_api_one_enable_disable_petr_mode_t_handler
+  (vl_api_one_enable_disable_petr_mode_t * mp)
+{
+  vl_api_one_enable_disable_petr_mode_reply_t *rmp = 0;
+  int rv = vnet_lisp_enable_disable_petr_mode (mp->is_en);
+
+  REPLY_MACRO (VL_API_ONE_ENABLE_DISABLE_PETR_MODE_REPLY);
+}
+
+static void
+vl_api_one_show_petr_mode_t_handler (vl_api_one_show_petr_mode_t * mp)
+{
+  vl_api_one_show_petr_mode_reply_t *rmp = 0;
+  int rv = 0;
+
+  /* *INDENT-OFF* */
+  REPLY_MACRO2 (VL_API_ONE_SHOW_PETR_MODE_REPLY,
+  {
+    rmp->is_en = vnet_lisp_get_petr_mode ();
+  });
+  /* *INDENT-ON* */
+}
+
 /*
  * one_api_hookup
  * Add vpe's API message handlers to the table.