hsa: use common app session interface in echo tests
[vpp.git] / src / plugins / hs_apps / echo_client.h
index ba467b1..5868c36 100644 (file)
 #ifndef __included_echo_client_h__
 #define __included_echo_client_h__
 
-#include <vnet/vnet.h>
-#include <vnet/ip/ip.h>
-#include <vnet/ethernet/ethernet.h>
-
-#include <vppinfra/hash.h>
-#include <vppinfra/error.h>
+#include <hs_apps/hs_test.h>
 #include <vnet/session/session.h>
 #include <vnet/session/application_interface.h>
 
-typedef struct
+typedef struct ec_session_
 {
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
-  app_session_t data;
+#define _(type, name) type name;
+  foreach_app_session_field
+#undef _
+    u32 vpp_session_index;
+  u32 thread_index;
   u64 bytes_to_send;
   u64 bytes_sent;
   u64 bytes_to_receive;
   u64 bytes_received;
   u64 vpp_session_handle;
-  u8 thread_index;
-} eclient_session_t;
+} ec_session_t;
+
+typedef struct ec_worker_
+{
+  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+  ec_session_t *sessions;      /**< session pool */
+  u8 *rx_buf;                  /**< prealloced rx buffer */
+  u32 *conn_indices;           /**< sessions handled by worker */
+  u32 *conns_this_batch;       /**< sessions handled in batch */
+  svm_msg_q_t *vpp_event_queue; /**< session layer worker mq */
+  u32 thread_index;            /**< thread index for worker */
+} ec_worker_t;
 
 typedef struct
 {
-  /*
-   * Test state variables
-   */
-  eclient_session_t *sessions;  /**< Session pool, shared */
-  clib_spinlock_t sessions_lock; /**< Session pool lock */
-  u8 **rx_buf;                  /**< intermediate rx buffers */
+  ec_worker_t *wrk;             /**< Per-thread state */
   u8 *connect_test_data;        /**< Pre-computed test data */
-  u32 **quic_session_index_by_thread;
-  u32 **connection_index_by_thread;
-  u32 **connections_this_batch_by_thread; /**< active connection batch */
 
   volatile u32 ready_connections;
-  volatile u32 finished_connections;
   volatile u64 rx_total;
   volatile u64 tx_total;
   volatile int run_test; /**< Signal start of test */
@@ -64,18 +64,20 @@ typedef struct
   u32 prev_conns;
   u32 repeats;
 
+  u32 connect_conn_index; /**< Connects attempted progress */
+
   /*
    * Application setup parameters
    */
-  svm_msg_q_t **vpp_event_queue;
 
   u32 cli_node_index;                  /**< cli process node index */
   u32 app_index;                       /**< app index after attach */
-  pthread_t client_thread_handle;
+  session_handle_t ctrl_session_handle; /**< control session handle */
 
   /*
    * Configuration params
    */
+  hs_test_cfg_t cfg;
   u32 n_clients;                       /**< Number of clients */
   u8 *connect_uri;                     /**< URI for slave's connect */
   session_endpoint_cfg_t connect_sep;  /**< Sever session endpoint */
@@ -85,9 +87,8 @@ typedef struct
   u32 expected_connections;            /**< Number of clients/connections */
   u32 connections_per_batch;           /**< Connections to rx/tx at once */
   u32 private_segment_count;           /**< Number of private fifo segs */
-  u32 private_segment_size;            /**< size of private fifo segs */
+  u64 private_segment_size;            /**< size of private fifo segs */
   u32 tls_engine;                      /**< TLS engine mbedtls/openssl */
-  u8 is_dgram;
   u32 no_copy;                         /**< Don't memcpy data to tx fifo */
   u32 quic_streams;                    /**< QUIC streams per connection */
   u32 ckpair_index;                    /**< Cert key pair for tls/quic */
@@ -102,29 +103,36 @@ typedef struct
    */
   u8 app_is_init;
   u8 test_client_attached;
-  u8 no_return;
+  u8 echo_bytes;
   u8 test_return_packets;
   int drop_packets;            /**< drop all packets */
   u8 prealloc_fifos;           /**< Request fifo preallocation */
   u8 prealloc_sessions;
-  u8 no_output;
-  u8 test_bytes;
   u8 test_failed;
   u8 transport_proto;
   u8 barrier_acq_needed;
 
   vlib_main_t *vlib_main;
-} echo_client_main_t;
+} ec_main_t;
 
-enum
+typedef enum ec_state_
 {
-  ECHO_CLIENTS_STARTING,
-  ECHO_CLIENTS_RUNNING,
-  ECHO_CLIENTS_EXITING
-} echo_clients_test_state_e;
-extern echo_client_main_t echo_client_main;
+  EC_STARTING,
+  EC_RUNNING,
+  EC_EXITING
+} ec_state_t;
 
-vlib_node_registration_t echo_clients_node;
+typedef enum ec_cli_signal_
+{
+  EC_CLI_CONNECTS_DONE = 1,
+  EC_CLI_CONNECTS_FAILED,
+  EC_CLI_CFG_SYNC,
+  EC_CLI_START,
+  EC_CLI_STOP,
+  EC_CLI_TEST_DONE
+} ec_cli_signal_t;
+
+void ec_program_connects (void);
 
 #endif /* __included_echo_client_h__ */