tls: dtls initial implementation
[vpp.git] / src / plugins / hs_apps / vcl / vcl_test_client.c
index 55bc788..35f1ac1 100644 (file)
@@ -51,6 +51,7 @@ typedef struct
   vcl_test_t post_test;
   uint8_t proto;
   uint32_t n_workers;
+  uint32_t ckpair_index;
   volatile int active_workers;
   struct sockaddr_storage server_addr;
 } vcl_test_client_main_t;
@@ -265,6 +266,13 @@ vtc_connect_test_sessions (vcl_test_client_worker_t * wrk)
          return ts->fd;
        }
 
+      if (vcm->proto == VPPCOM_PROTO_TLS)
+       {
+         uint32_t ckp_len = sizeof (vcm->ckpair_index);
+         vppcom_session_attr (ts->fd, VPPCOM_ATTR_SET_CKPAIR,
+                              &vcm->ckpair_index, &ckp_len);
+       }
+
       /* Connect is blocking */
       rv = vppcom_session_connect (ts->fd, &vcm->server_endpt);
       if (rv < 0)
@@ -394,7 +402,7 @@ vtc_accumulate_stats (vcl_test_client_worker_t * wrk,
 
       if (ctrl->cfg.verbose > 1)
        {
-         sprintf (buf, "CLIENT (fd %d) RESULTS", ts->fd);
+         snprintf (buf, sizeof (buf), "CLIENT (fd %d) RESULTS", ts->fd);
          vcl_test_stats_dump (buf, &ts->stats, show_rx, 1 /* show tx */ ,
                               ctrl->cfg.verbose);
        }
@@ -553,10 +561,10 @@ vtc_print_stats (vcl_test_session_t * ctrl)
     }
 
   if (is_echo)
-    sprintf (buf, "Echo");
+    snprintf (buf, sizeof (buf), "Echo");
   else
-    sprintf (buf, "%s-directional Stream",
-            ctrl->cfg.test == VCL_TEST_TYPE_BI ? "Bi" : "Uni");
+    snprintf (buf, sizeof (buf), "%s-directional Stream",
+             ctrl->cfg.test == VCL_TEST_TYPE_BI ? "Bi" : "Uni");
 }
 
 static void
@@ -641,32 +649,6 @@ vtc_stream_client (vcl_test_client_main_t * vcm)
     vtwrn ("post-test cfg sync failed!");
 }
 
-static void
-dump_help (void)
-{
-#define INDENT "\n  "
-
-  printf ("CLIENT: Test configuration commands:"
-         INDENT VCL_TEST_TOKEN_HELP
-         "\t\t\tDisplay help."
-         INDENT VCL_TEST_TOKEN_EXIT
-         "\t\t\tExit test client & server."
-         INDENT VCL_TEST_TOKEN_SHOW_CFG
-         "\t\t\tShow the current test cfg."
-         INDENT VCL_TEST_TOKEN_RUN_UNI
-         "\t\t\tRun the Uni-directional test."
-         INDENT VCL_TEST_TOKEN_RUN_BI
-         "\t\t\tRun the Bi-directional test."
-         INDENT VCL_TEST_TOKEN_VERBOSE
-         "\t\t\tToggle verbose setting."
-         INDENT VCL_TEST_TOKEN_RXBUF_SIZE
-         "<rxbuf size>\tRx buffer size (bytes)."
-         INDENT VCL_TEST_TOKEN_TXBUF_SIZE
-         "<txbuf size>\tTx buffer size (bytes)."
-         INDENT VCL_TEST_TOKEN_NUM_WRITES
-         "<# of writes>\tNumber of txbuf writes to server." "\n");
-}
-
 static void
 cfg_txbuf_size_set (void)
 {
@@ -912,7 +894,7 @@ vtc_process_opts (vcl_test_client_main_t * vcm, int argc, char **argv)
                   optopt, ctrl->txbuf_size);
            print_usage_and_exit ();
          }
-       strcpy (ctrl->txbuf, optarg);
+       strncpy (ctrl->txbuf, optarg, ctrl->txbuf_size);
        ctrl->cfg.test = VCL_TEST_TYPE_ECHO;
        break;
 
@@ -1123,13 +1105,26 @@ main (int argc, char **argv)
   if (ctrl->fd < 0)
     vtfail ("vppcom_session_create()", ctrl->fd);
 
-  if (vcm->proto == VPPCOM_PROTO_TLS || vcm->proto == VPPCOM_PROTO_QUIC)
+  if (vcm->proto == VPPCOM_PROTO_TLS || vcm->proto == VPPCOM_PROTO_QUIC ||
+      vcm->proto == VPPCOM_PROTO_DTLS)
     {
+      vppcom_cert_key_pair_t ckpair;
+      uint32_t ckp_len;
+      int ckp_index;
+
       vtinf ("Adding tls certs ...");
-      vppcom_session_tls_add_cert (ctrl->fd, vcl_test_crt_rsa,
-                                  vcl_test_crt_rsa_len);
-      vppcom_session_tls_add_key (ctrl->fd, vcl_test_key_rsa,
-                                 vcl_test_key_rsa_len);
+      ckpair.cert = vcl_test_crt_rsa;
+      ckpair.key = vcl_test_key_rsa;
+      ckpair.cert_len = vcl_test_crt_rsa_len;
+      ckpair.key_len = vcl_test_key_rsa_len;
+      ckp_index = vppcom_add_cert_key_pair (&ckpair);
+      if (ckp_index < 0)
+       vtfail ("vppcom_add_cert_key_pair()", ckp_index);
+
+      vcm->ckpair_index = ckp_index;
+      ckp_len = sizeof (ckp_index);
+      vppcom_session_attr (ctrl->fd, VPPCOM_ATTR_SET_CKPAIR, &ckp_index,
+                          &ckp_len);
     }
 
   vtinf ("Connecting to server...");