ioam: pot plugin - pot profile read API 25/4025/6
authorSagar Srivastav <sagsriva@cisco.com>
Wed, 30 Nov 2016 03:39:07 +0000 (19:39 -0800)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 9 Dec 2016 20:12:55 +0000 (20:12 +0000)
Addition of read API to ioam-pot plugin which returns the current
pot profile(s) configured

Change-Id: I188e53811391e053860009dde3719612a2446521
Signed-off-by: Sagar Srivastav <sagsriva@cisco.com>
plugins/ioam-plugin/ioam/lib-pot/pot.api
plugins/ioam-plugin/ioam/lib-pot/pot_api.c
plugins/ioam-plugin/ioam/lib-pot/pot_test.c

index 7fd06b5..fa2fc12 100644 (file)
@@ -95,3 +95,39 @@ define pot_profile_del_reply {
     u32 context;
     i32 retval;
 };
+
+/** \brief Show POT Profiles
+    @param client_index - opaque cookie to identify the sender
+    @param context - sender context, to match reply w/ request
+    @param id - id of the profile
+*/
+define pot_profile_show_config_dump {
+  u32 client_index;
+  u32 context;
+  u8 id;
+};
+
+/** \brief Show POT profile reply
+    @param id - id of the profile
+    @param validator - True/False to indicate if this is verifier
+    @param secret_key - Verification key
+    @param secret_share - Share of the 1st polynomial
+    @param prime - Prime number used for modulo operation
+    @param max_bits - Max bits to be used for Random number generation
+    @param lpc - Lagrange basis polynomial
+    @param polynomial_public - pre-evaluated public polynomial
+    @param list_name_len - length of the name of this profile list
+    @param list_name - name of this profile list
+*/
+define pot_profile_show_config_details {
+  u32 context;
+  i32 retval;
+  u8 id;
+  u8 validator;
+  u64 secret_key;
+  u64 secret_share;
+  u64 prime;
+  u64 bit_mask;
+  u64 lpc;
+  u64 polynomial_public;
+};
index f82badf..d3af7b4 100644 (file)
@@ -83,7 +83,7 @@ do {                                                            \
         return;                                                 \
                                                                 \
     rmp = vl_msg_api_alloc (sizeof (*rmp));                     \
-    rmp->_vl_msg_id = ntohs((t));                               \
+    rmp->_vl_msg_id = ntohs((t)+sm->msg_id_base);               \
     rmp->context = mp->context;                                 \
     rmp->retval = ntohl(rv);                                    \
     do {body;} while (0);                                       \
@@ -96,6 +96,7 @@ do {                                                            \
 _(POT_PROFILE_ADD, pot_profile_add)                                     \
 _(POT_PROFILE_ACTIVATE, pot_profile_activate)                           \
 _(POT_PROFILE_DEL, pot_profile_del)                                     \
+_(POT_PROFILE_SHOW_CONFIG_DUMP, pot_profile_show_config_dump)                                     \
 
 static void vl_api_pot_profile_add_t_handler
 (vl_api_pot_profile_add_t *mp)
@@ -132,6 +133,51 @@ static void vl_api_pot_profile_add_t_handler
     REPLY_MACRO(VL_API_POT_PROFILE_ADD_REPLY);
 }
 
+static void send_pot_profile_details(vl_api_pot_profile_show_config_dump_t *mp, u8 id)
+{
+    vl_api_pot_profile_show_config_details_t * rmp;
+    pot_main_t * sm = &pot_main;
+    pot_profile *profile = pot_profile_find(id);
+    int rv = 0;
+    if(profile){
+        REPLY_MACRO2(VL_API_POT_PROFILE_SHOW_CONFIG_DETAILS,
+                       rmp->id=id;
+                       rmp->validator=profile->validator;
+                       rmp->secret_key=clib_host_to_net_u64(profile->secret_key);
+                       rmp->secret_share=clib_host_to_net_u64(profile->secret_share);
+                       rmp->prime=clib_host_to_net_u64(profile->prime);
+                       rmp->bit_mask=clib_host_to_net_u64(profile->bit_mask);
+                       rmp->lpc=clib_host_to_net_u64(profile->lpc);
+                       rmp->polynomial_public=clib_host_to_net_u64(profile->poly_pre_eval);
+                       );
+    }
+    else{
+        REPLY_MACRO2(VL_API_POT_PROFILE_SHOW_CONFIG_DETAILS,
+                       rmp->id=id;
+                       rmp->validator=0;
+                       rmp->secret_key=0;
+                       rmp->secret_share=0;
+                       rmp->prime=0;
+                       rmp->bit_mask=0;
+                       rmp->lpc=0;
+                       rmp->polynomial_public=0;
+                       );
+    }
+}
+
+static void vl_api_pot_profile_show_config_dump_t_handler
+(vl_api_pot_profile_show_config_dump_t *mp)
+{
+    u8 id = mp->id;
+    u8 dump_call_id = ~0;
+    if(dump_call_id==id){
+        for(id=0;id<MAX_POT_PROFILES;id++)
+           send_pot_profile_details(mp,id);
+    }
+    else
+        send_pot_profile_details(mp,id);
+}
+
 static void vl_api_pot_profile_activate_t_handler
 (vl_api_pot_profile_activate_t *mp)
 {
index 8e728ce..2e87023 100644 (file)
@@ -63,6 +63,18 @@ _(pot_profile_add_reply)                          \
 _(pot_profile_activate_reply)                     \
 _(pot_profile_del_reply)
 
+#define foreach_custom_reply_retval_handler                    \
+_(pot_profile_show_config_details,                             \
+    errmsg("           ID:%d\n",mp->id);                       \
+    errmsg("    Validator:%d\n",mp->validator);                \
+    errmsg("   secret_key:%Lx\n",clib_net_to_host_u64(mp->secret_key));                \
+    errmsg("  secret_share:%Lx\n",clib_net_to_host_u64(mp->secret_share));             \
+    errmsg("        prime:%Lx\n",clib_net_to_host_u64(mp->prime));                     \
+    errmsg("      bitmask:%Lx\n",clib_net_to_host_u64(mp->bit_mask));          \
+    errmsg("          lpc:%Lx\n",clib_net_to_host_u64(mp->lpc));                       \
+    errmsg("   public poly:%Lx\n",clib_net_to_host_u64(mp->polynomial_public));        \
+               )
+
 #define _(n)                                            \
     static void vl_api_##n##_t_handler                  \
     (vl_api_##n##_t * mp)                               \
@@ -79,6 +91,23 @@ _(pot_profile_del_reply)
 foreach_standard_reply_retval_handler;
 #undef _
 
+#define _(n,body)                                       \
+    static void vl_api_##n##_t_handler                  \
+    (vl_api_##n##_t * mp)                               \
+    {                                                   \
+        vat_main_t * vam = pot_test_main.vat_main;   \
+        i32 retval = ntohl(mp->retval);                 \
+        if (vam->async_mode) {                          \
+            vam->async_errors += (retval < 0);          \
+        } else {                                        \
+            vam->retval = retval;                       \
+            vam->result_ready = 1;                      \
+        }                                               \
+       do{body;}while(0);                              \
+    }
+foreach_custom_reply_retval_handler;
+#undef _
+
 /* 
  * Table of message reply handlers, must include boilerplate handlers
  * we just generated
@@ -87,6 +116,7 @@ foreach_standard_reply_retval_handler;
 _(POT_PROFILE_ADD_REPLY, pot_profile_add_reply)                         \
 _(POT_PROFILE_ACTIVATE_REPLY, pot_profile_activate_reply)               \
 _(POT_PROFILE_DEL_REPLY, pot_profile_del_reply)                         \
+_(POT_PROFILE_SHOW_CONFIG_DETAILS, pot_profile_show_config_details)
 
 
 /* M: construct, but don't yet send a message */
@@ -255,6 +285,28 @@ static int api_pot_profile_del (vat_main_t *vam)
     return 0;
 }
 
+static int api_pot_profile_show_config_dump (vat_main_t *vam)
+{
+    pot_test_main_t * sm = &pot_test_main;
+    unformat_input_t *input = vam->input;
+    vl_api_pot_profile_show_config_dump_t *mp;
+    f64 timeout;
+    u8 id = 0;
+
+    while(unformat_check_input(input) != UNFORMAT_END_OF_INPUT)
+    {
+      if(unformat(input,"id %d",&id));
+      else
+        break;
+    }
+    M(POT_PROFILE_SHOW_CONFIG_DUMP, pot_profile_show_config_dump);
+
+    mp->id = id;
+
+    S; W;
+    return 0;
+}
+
 /* 
  * List of messages that the api test plugin sends,
  * and that the data plane plugin processes
@@ -266,7 +318,7 @@ _(pot_profile_add, "name <name> id [0-1] "                              \
   "[validator-key <0xu64>] [validity <0xu64>]")                         \
 _(pot_profile_activate, "name <name> id [0-1] ")                       \
 _(pot_profile_del, "[id <nn>]")                                         \
-
+_(pot_profile_show_config_dump, "id [0-1]")
 
 void vat_api_hookup (vat_main_t *vam)
 {
@@ -301,7 +353,7 @@ clib_error_t * vat_plugin_register (vat_main_t *vam)
 
   sm->vat_main = vam;
 
-  name = format (0, "pot_%08x%c", api_version, 0);
+  name = format (0, "ioam_pot_%08x%c", api_version, 0);
   sm->msg_id_base = vl_client_get_first_plugin_msg_id ((char *) name);
 
   if (sm->msg_id_base != (u16) ~0)