diff options
author | Florin Coras <fcoras@cisco.com> | 2019-08-29 12:03:17 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-08-30 13:15:42 +0000 |
commit | 57c88938f8a80e63e7307cacaca23b0ab3a51b6c (patch) | |
tree | b62690ce6a9b9d07fee1b83e8b2cf3d8fb8bdece /src/vcl/vppcom.c | |
parent | a495a3ea146a8484dac9f6b594fb2b044437c7a4 (diff) |
vcl: allow non-blocking connects
Type: feature
Change-Id: I55349f482ce6781337f747b2f0d2c0a027c3a675
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vcl/vppcom.c')
-rw-r--r-- | src/vcl/vppcom.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/vcl/vppcom.c b/src/vcl/vppcom.c index f56c02b6d9d..72ec4f4b966 100644 --- a/src/vcl/vppcom.c +++ b/src/vcl/vppcom.c @@ -1590,10 +1590,14 @@ vppcom_session_connect (uint32_t session_handle, vppcom_endpt_t * server_ep) clib_net_to_host_u16 (session->transport.rmt_port), vppcom_proto_str (session->session_type)); + vcl_send_session_connect (wrk, session); + + if (VCL_SESS_ATTR_TEST (session->attr, VCL_SESS_ATTR_NONBLOCK)) + return VPPCOM_EINPROGRESS; + /* - * Send connect request and wait for reply from vpp + * Wait for reply from vpp if blocking */ - vcl_send_session_connect (wrk, session); rv = vppcom_wait_for_session_state_change (session_index, STATE_CONNECT, vcm->cfg.session_timeout); @@ -2033,7 +2037,14 @@ vcl_select_handle_mq_event (vcl_worker_t * wrk, session_event_t * e, break; case SESSION_CTRL_EVT_CONNECTED: connected_msg = (session_connected_msg_t *) e->data; - vcl_session_connected_handler (wrk, connected_msg); + sid = vcl_session_connected_handler (wrk, connected_msg); + if (sid == VCL_INVALID_SESSION_INDEX) + break; + if (sid < n_bits && write_map) + { + clib_bitmap_set_no_check ((uword *) write_map, sid, 1); + *bits_set += 1; + } break; case SESSION_CTRL_EVT_DISCONNECTED: disconnected_msg = (session_disconnected_msg_t *) e->data; |