summaryrefslogtreecommitdiffstats
path: root/src/plugins/hs_apps/sapi/vpp_echo_common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/hs_apps/sapi/vpp_echo_common.h')
-rw-r--r--src/plugins/hs_apps/sapi/vpp_echo_common.h40
1 files changed, 32 insertions, 8 deletions
diff --git a/src/plugins/hs_apps/sapi/vpp_echo_common.h b/src/plugins/hs_apps/sapi/vpp_echo_common.h
index 00d54f83070..5588b279327 100644
--- a/src/plugins/hs_apps/sapi/vpp_echo_common.h
+++ b/src/plugins/hs_apps/sapi/vpp_echo_common.h
@@ -266,13 +266,17 @@ typedef struct
svm_queue_t *vl_input_queue; /* vpe input queue */
u32 my_client_index; /* API client handle */
u8 *uri; /* The URI we're playing with */
+ u32 n_uris; /* Cycle through adjacent ips */
+ ip46_address_t lcl_ip; /* Local ip for client */
+ u8 lcl_ip_set;
echo_session_t *sessions; /* Session pool */
svm_msg_q_t *app_mq; /* Our receiveing event queue */
svm_msg_q_t *ctrl_mq; /* Our control queue (towards vpp) */
clib_time_t clib_time; /* For deadman timers */
u8 *socket_name;
int i_am_master;
- u32 listen_session_index; /* Index of vpp listener session */
+ u32 *listen_session_indexes; /* vec of vpp listener sessions */
+ volatile u32 listen_session_cnt;
uword *session_index_by_vpp_handles; /* Hash table : quic_echo s_id -> vpp s_handle */
clib_spinlock_t sid_vpp_handles_lock; /* Hash table lock */
@@ -370,15 +374,35 @@ typedef struct
extern echo_main_t echo_main;
-typedef void (*echo_rpc_t) (void *arg, u32 opaque);
+
+typedef struct echo_connect_args_
+{
+ u32 context;
+ u64 parent_session_handle;
+ ip46_address_t ip;
+ ip46_address_t lcl_ip;
+} echo_connect_args_t;
+
+typedef struct echo_disconnect_args_
+{
+ u64 session_handle;
+} echo_disconnect_args_t;
+
+typedef union
+{
+ echo_connect_args_t connect;
+ echo_disconnect_args_t disconnect;
+} echo_rpc_args_t;
+
+typedef void (*echo_rpc_t) (echo_main_t * em, echo_rpc_args_t * arg);
typedef struct
{
void *fp;
- void *arg;
- u32 opaque;
+ echo_rpc_args_t args;
} echo_rpc_msg_t;
+
u8 *format_ip4_address (u8 * s, va_list * args);
u8 *format_ip6_address (u8 * s, va_list * args);
u8 *format_ip46_address (u8 * s, va_list * args);
@@ -398,7 +422,7 @@ uword unformat_ip6_address (unformat_input_t * input, va_list * args);
void echo_session_handle_add_del (echo_main_t * em, u64 handle, u32 sid);
echo_session_t *echo_session_new (echo_main_t * em);
-int echo_send_rpc (echo_main_t * em, void *fp, void *arg, u32 opaque);
+int echo_send_rpc (echo_main_t * em, void *fp, echo_rpc_args_t * args);
echo_session_t *echo_get_session_from_handle (echo_main_t * em, u64 handle);
int wait_for_segment_allocation (u64 segment_handle);
int wait_for_state_change (echo_main_t * em, connection_state_t state,
@@ -412,10 +436,10 @@ uword echo_unformat_crypto_engine (unformat_input_t * input, va_list * args);
void echo_send_attach (echo_main_t * em);
void echo_send_detach (echo_main_t * em);
-void echo_send_listen (echo_main_t * em);
+void echo_send_listen (echo_main_t * em, ip46_address_t * ip);
void echo_send_unbind (echo_main_t * em, echo_session_t * s);
-void echo_send_connect (u64 vpp_session_handle, u32 opaque);
-void echo_send_disconnect_session (u64 handle, u32 opaque);
+void echo_send_connect (echo_main_t * em, void *args);
+void echo_send_disconnect_session (echo_main_t * em, void *args);
void echo_api_hookup (echo_main_t * em);
void echo_send_add_cert_key (echo_main_t * em);
void echo_send_del_cert_key (echo_main_t * em);