api: refactor vlibmemory
[vpp.git] / src / vnet / lisp-cp / lisp_api.c
index 6c82d4c..9946f28 100644 (file)
@@ -128,7 +128,9 @@ vl_api_lisp_add_del_locator_set_t_handler (vl_api_lisp_add_del_locator_set_t *
 
   memset (a, 0, sizeof (a[0]));
 
+  mp->locator_set_name[sizeof (mp->locator_set_name) - 1] = 0;
   locator_name = format (0, "%s", mp->locator_set_name);
+  vec_terminate_c_string (locator_name);
 
   a->name = locator_name;
   a->is_add = mp->is_add;
@@ -182,7 +184,9 @@ vl_api_lisp_add_del_locator_t_handler (vl_api_lisp_add_del_locator_t * mp)
   locator.local = 1;
   vec_add1 (locators, locator);
 
+  mp->locator_set_name[sizeof (mp->locator_set_name) - 1] = 0;
   locator_name = format (0, "%s", mp->locator_set_name);
+  vec_terminate_c_string (locator_name);
 
   a->name = locator_name;
   a->locators = locators;
@@ -248,7 +252,9 @@ vl_api_lisp_add_del_local_eid_t_handler (vl_api_lisp_add_del_local_eid_t * mp)
   if (rv)
     goto out;
 
+  mp->locator_set_name[sizeof (mp->locator_set_name) - 1] = 0;
   name = format (0, "%s", mp->locator_set_name);
+  vec_terminate_c_string (name);
   p = hash_get_mem (lcm->locator_set_index_by_name, name);
   if (!p)
     {
@@ -389,7 +395,9 @@ vl_api_lisp_pitr_set_locator_set_t_handler (vl_api_lisp_pitr_set_locator_set_t
   int rv = 0;
   u8 *ls_name = 0;
 
+  mp->ls_name[sizeof (mp->ls_name) - 1] = 0;
   ls_name = format (0, "%s", mp->ls_name);
+  vec_terminate_c_string (ls_name);
   rv = vnet_lisp_pitr_set_locator_set (ls_name, mp->is_add);
   vec_free (ls_name);
 
@@ -412,7 +420,7 @@ vl_api_lisp_use_petr_t_handler (vl_api_lisp_use_petr_t * mp)
 static void
 vl_api_show_lisp_use_petr_t_handler (vl_api_show_lisp_use_petr_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   vl_api_show_lisp_use_petr_reply_t *rmp = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   mapping_t *m;
@@ -476,7 +484,9 @@ static void
   u8 *locator_set_name = NULL;
   vnet_lisp_add_del_mreq_itr_rloc_args_t _a, *a = &_a;
 
+  mp->locator_set_name[sizeof (mp->locator_set_name) - 1] = 0;
   locator_set_name = format (0, "%s", mp->locator_set_name);
+  vec_terminate_c_string (locator_set_name);
 
   a->is_add = mp->is_add;
   a->locator_set_name = locator_set_name;
@@ -510,6 +520,7 @@ static void
   if (!mp->is_add)
     {
       vnet_lisp_add_del_adjacency_args_t _a, *a = &_a;
+      memset (a, 0, sizeof (*a));
       gid_address_copy (&a->reid, eid);
       a->is_add = 0;
       rv = vnet_lisp_add_del_adjacency (a);
@@ -521,8 +532,21 @@ static void
 
   /* NOTE: for now this works as a static remote mapping, i.e.,
    * not authoritative and ttl infinite. */
-  rv = vnet_lisp_add_del_mapping (eid, rlocs, mp->action, 0, ~0,
-                                 mp->is_add, 1 /* is_static */ , 0);
+  if (mp->is_add)
+    {
+      vnet_lisp_add_del_mapping_args_t _m_args, *m_args = &_m_args;
+      memset (m_args, 0, sizeof (m_args[0]));
+      gid_address_copy (&m_args->eid, eid);
+      m_args->action = mp->action;
+      m_args->is_static = 1;
+      m_args->ttl = ~0;
+      m_args->authoritative = 0;
+      rv = vnet_lisp_add_mapping (m_args, rlocs, NULL, NULL);
+    }
+  else
+    {
+      rv = vnet_lisp_del_mapping (eid, NULL);
+    }
 
   if (mp->del_all)
     vnet_lisp_clear_all_remote_adjacencies ();
@@ -559,8 +583,7 @@ send_reply:
 
 static void
 send_lisp_locator_details (lisp_cp_main_t * lcm,
-                          locator_t * loc,
-                          unix_shared_memory_queue_t * q, u32 context)
+                          locator_t * loc, svm_queue_t * q, u32 context)
 {
   vl_api_lisp_locator_details_t *rmp;
 
@@ -589,7 +612,7 @@ static void
 vl_api_lisp_locator_dump_t_handler (vl_api_lisp_locator_dump_t * mp)
 {
   u8 *ls_name = 0;
-  unix_shared_memory_queue_t *q = 0;
+  svm_queue_t *q = 0;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   locator_set_t *lsit = 0;
   locator_t *loc = 0;
@@ -609,6 +632,7 @@ vl_api_lisp_locator_dump_t_handler (vl_api_lisp_locator_dump_t * mp)
       /* make sure we get a proper C-string */
       mp->ls_name[sizeof (mp->ls_name) - 1] = 0;
       ls_name = format (0, "%s", mp->ls_name);
+      vec_terminate_c_string (ls_name);
       p = hash_get_mem (lcm->locator_set_index_by_name, ls_name);
       if (!p)
        goto out;
@@ -632,8 +656,7 @@ out:
 static void
 send_lisp_locator_set_details (lisp_cp_main_t * lcm,
                               locator_set_t * lsit,
-                              unix_shared_memory_queue_t * q,
-                              u32 context, u32 ls_index)
+                              svm_queue_t * q, u32 context, u32 ls_index)
 {
   vl_api_lisp_locator_set_details_t *rmp;
   u8 *str = 0;
@@ -663,7 +686,7 @@ send_lisp_locator_set_details (lisp_cp_main_t * lcm,
 static void
 vl_api_lisp_locator_set_dump_t_handler (vl_api_lisp_locator_set_dump_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   locator_set_t *lsit = NULL;
   u8 filter;
@@ -743,8 +766,7 @@ fid_type_to_api_type (fid_address_t * fid)
 
 static void
 send_lisp_eid_table_details (mapping_t * mapit,
-                            unix_shared_memory_queue_t * q,
-                            u32 context, u8 filter)
+                            svm_queue_t * q, u32 context, u8 filter)
 {
   fid_address_t *fid;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
@@ -839,7 +861,7 @@ static void
 vl_api_lisp_eid_table_dump_t_handler (vl_api_lisp_eid_table_dump_t * mp)
 {
   u32 mi;
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   mapping_t *mapit = NULL;
   gid_address_t _eid, *eid = &_eid;
@@ -878,8 +900,7 @@ vl_api_lisp_eid_table_dump_t_handler (vl_api_lisp_eid_table_dump_t * mp)
 }
 
 static void
-send_lisp_map_server_details (ip_address_t * ip,
-                             unix_shared_memory_queue_t * q, u32 context)
+send_lisp_map_server_details (ip_address_t * ip, svm_queue_t * q, u32 context)
 {
   vl_api_lisp_map_server_details_t *rmp = NULL;
 
@@ -912,7 +933,7 @@ send_lisp_map_server_details (ip_address_t * ip,
 static void
 vl_api_lisp_map_server_dump_t_handler (vl_api_lisp_map_server_dump_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   lisp_msmr_t *mr;
 
@@ -930,7 +951,7 @@ vl_api_lisp_map_server_dump_t_handler (vl_api_lisp_map_server_dump_t * mp)
 
 static void
 send_lisp_map_resolver_details (ip_address_t * ip,
-                               unix_shared_memory_queue_t * q, u32 context)
+                               svm_queue_t * q, u32 context)
 {
   vl_api_lisp_map_resolver_details_t *rmp = NULL;
 
@@ -963,7 +984,7 @@ send_lisp_map_resolver_details (ip_address_t * ip,
 static void
 vl_api_lisp_map_resolver_dump_t_handler (vl_api_lisp_map_resolver_dump_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   lisp_msmr_t *mr;
 
@@ -980,8 +1001,7 @@ vl_api_lisp_map_resolver_dump_t_handler (vl_api_lisp_map_resolver_dump_t * mp)
 }
 
 static void
-send_eid_table_map_pair (hash_pair_t * p,
-                        unix_shared_memory_queue_t * q, u32 context)
+send_eid_table_map_pair (hash_pair_t * p, svm_queue_t * q, u32 context)
 {
   vl_api_lisp_eid_table_map_details_t *rmp = NULL;
 
@@ -999,7 +1019,7 @@ static void
 vl_api_lisp_eid_table_map_dump_t_handler (vl_api_lisp_eid_table_map_dump_t *
                                          mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   hash_pair_t *p;
   uword *vni_table = 0;
@@ -1028,7 +1048,7 @@ vl_api_lisp_eid_table_map_dump_t_handler (vl_api_lisp_eid_table_map_dump_t *
 }
 
 static void
-send_eid_table_vni (u32 vni, unix_shared_memory_queue_t * q, u32 context)
+send_eid_table_vni (u32 vni, svm_queue_t * q, u32 context)
 {
   vl_api_lisp_eid_table_vni_details_t *rmp = 0;
 
@@ -1141,7 +1161,7 @@ vl_api_lisp_eid_table_vni_dump_t_handler (vl_api_lisp_eid_table_vni_dump_t *
 {
   hash_pair_t *p;
   u32 *vnis = 0;
-  unix_shared_memory_queue_t *q = 0;
+  svm_queue_t *q = 0;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
 
   q = vl_api_client_index_to_input_queue (mp->client_index);
@@ -1173,7 +1193,7 @@ vl_api_lisp_eid_table_vni_dump_t_handler (vl_api_lisp_eid_table_vni_dump_t *
 static void
 vl_api_show_lisp_status_t_handler (vl_api_show_lisp_status_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   vl_api_show_lisp_status_reply_t *rmp = NULL;
   int rv = 0;
 
@@ -1196,7 +1216,7 @@ static void
   vl_api_lisp_get_map_request_itr_rlocs_t_handler
   (vl_api_lisp_get_map_request_itr_rlocs_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   vl_api_lisp_get_map_request_itr_rlocs_reply_t *rmp = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   locator_set_t *loc_set = 0;
@@ -1234,7 +1254,7 @@ static void
 static void
 vl_api_show_lisp_pitr_t_handler (vl_api_show_lisp_pitr_t * mp)
 {
-  unix_shared_memory_queue_t *q = NULL;
+  svm_queue_t *q = NULL;
   vl_api_show_lisp_pitr_reply_t *rmp = NULL;
   lisp_cp_main_t *lcm = vnet_lisp_cp_get_main ();
   mapping_t *m;
@@ -1248,7 +1268,10 @@ vl_api_show_lisp_pitr_t_handler (vl_api_show_lisp_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");
     }
@@ -1271,7 +1294,7 @@ vl_api_show_lisp_pitr_t_handler (vl_api_show_lisp_pitr_t * mp)
   /* *INDENT-OFF* */
   REPLY_MACRO2(VL_API_SHOW_LISP_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);
   }));