From: Florin Coras Date: Wed, 22 Oct 2025 06:14:51 +0000 (-0400) Subject: hsa: hcpc fixes X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F21%2F43921%2F6;p=vpp.git hsa: hcpc fixes - force unlistens via main thread with barrier - add connect/accept callback functions to avoid warnings Type: fix Change-Id: Ia27c64bb07486e8df39d164cebe07530c254b992 Signed-off-by: Florin Coras --- diff --git a/src/plugins/hs_apps/http_connect_proxy_client.c b/src/plugins/hs_apps/http_connect_proxy_client.c index fa850ec864a..ab966268991 100644 --- a/src/plugins/hs_apps/http_connect_proxy_client.c +++ b/src/plugins/hs_apps/http_connect_proxy_client.c @@ -498,18 +498,13 @@ hcpc_delete_session (session_t *s, u8 is_http) } static void -hcpc_http_connection_closed () +hcpc_http_stop_listeners_rpc (void *args) { + vlib_main_t *vm = vlib_get_main (); hcpc_main_t *hcpcm = &hcpc_main; hcpc_listener_t *l; - hcpc_session_t *ps; - pool_foreach (ps, hcpcm->sessions) - { - ps->state = HCPC_SESSION_CLOSED; - ps->intercept_diconnected = 1; - ps->http_disconnected = 1; - } + vlib_worker_thread_barrier_sync (vm); pool_foreach (l, hcpcm->listeners) { @@ -520,6 +515,24 @@ hcpc_http_connection_closed () vnet_unlisten (&a); } } + + vlib_worker_thread_barrier_release (vm); +} + +static void +hcpc_http_connection_closed () +{ + hcpc_main_t *hcpcm = &hcpc_main; + hcpc_session_t *ps; + + pool_foreach (ps, hcpcm->sessions) + { + ps->state = HCPC_SESSION_CLOSED; + ps->intercept_diconnected = 1; + ps->http_disconnected = 1; + } + + session_send_rpc_evt_to_thread (0, hcpc_http_stop_listeners_rpc, 0); } static void @@ -538,6 +551,7 @@ hcpc_close_session (session_t *s, u8 is_http) /* http connection went down */ if (ps->flags & HCPC_SESSION_F_IS_PARENT) { + hcpc_session_close_http (ps); ps->state = HCPC_SESSION_CLOSED; hcpcm->http_connection_handle = SESSION_INVALID_HANDLE; hcpc_http_connection_closed (); @@ -1011,6 +1025,13 @@ hcpc_read_http_connect_resp (session_t *s) /* http side vft callbacks */ /***************************/ +static int +hcpc_http_session_accept_callback (session_t *s) +{ + clib_warning ("http proxy client app should not get accept events"); + return -1; +} + static int hcpc_http_session_connected_callback (u32 app_index, u32 session_index, session_t *s, session_error_t err) @@ -1373,6 +1394,7 @@ hcpc_http_alloc_session_fifos (session_t *s) } static session_cb_vft_t http_session_cb_vft = { + .session_accept_callback = hcpc_http_session_accept_callback, .session_connected_callback = hcpc_http_session_connected_callback, .session_disconnect_callback = hcpc_http_session_disconnect_callback, .session_transport_closed_callback = @@ -1428,6 +1450,14 @@ hcpc_intercept_accept_callback (session_t *s) return 0; } +static int +hcpc_intercept_connected_callback (u32 app_index, u32 session_index, + session_t *s, session_error_t err) +{ + clib_warning ("intercept app should not get connected events"); + return -1; +} + static void hcpc_intercept_session_disconnect_callback (session_t *s) { @@ -1579,6 +1609,7 @@ hcpc_intercept_write_early_data (session_t *s) static session_cb_vft_t listener_session_cb_vft = { .session_accept_callback = hcpc_intercept_accept_callback, + .session_connected_callback = hcpc_intercept_connected_callback, .session_disconnect_callback = hcpc_intercept_session_disconnect_callback, .session_transport_closed_callback = hcpc_intercept_session_transport_closed_callback,