X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication_interface.h;h=9c48faa8abc022075ce2949493e7c3c36d32bd91;hb=30e79c2e388a98160a3660f4f03103890c9b1b7c;hp=13ec73adf0fd7def210cf482d0bf99b0b35d6593;hpb=1553197f9a1a3258b6954adeb9536bbe0191683d;p=vpp.git diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index 13ec73adf0f..9c48faa8abc 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -28,18 +28,20 @@ typedef struct _vnet_app_attach_args_t #undef _ ssvm_private_t * segment; svm_msg_q_t *app_evt_q; + u64 segment_handle; } vnet_app_attach_args_t; typedef struct _vnet_app_detach_args_t { u32 app_index; + u32 api_client_index; } vnet_app_detach_args_t; typedef struct _vnet_bind_args_t { union { - session_endpoint_extended_t sep_ext; + session_endpoint_cfg_t sep_ext; session_endpoint_t sep; char *uri; }; @@ -64,14 +66,14 @@ typedef struct _vnet_unbind_args_t u64 handle; /**< Session handle */ }; u32 app_index; /**< Owning application index */ - u32 app_wrk_index; /**< App's local pool worker index */ + u32 wrk_map_index; /**< App's local pool worker index */ } vnet_unbind_args_t; typedef struct _vnet_connect_args { union { - session_endpoint_extended_t sep_ext; + session_endpoint_cfg_t sep_ext; session_endpoint_t sep; char *uri; }; @@ -123,6 +125,7 @@ typedef enum _(ACCEPT_REDIRECT, "Use FIFO with redirects") \ _(ADD_SEGMENT, "Add segment and signal app if needed") \ _(IS_BUILTIN, "Application is builtin") \ + _(IS_TRANSPORT_APP, "Application is a transport proto") \ _(IS_PROXY, "Application is proxying") \ _(USE_GLOBAL_SCOPE, "App can use global session scope") \ _(USE_LOCAL_SCOPE, "App can use local session scope") \ @@ -209,16 +212,33 @@ typedef struct #undef _ } app_session_t; +typedef struct session_bound_msg_ +{ + u32 context; + u64 handle; + i32 retval; + u8 lcl_is_ip4; + u8 lcl_ip[16]; + u16 lcl_port; + uword rx_fifo; + uword tx_fifo; + uword vpp_evt_q; + u32 segment_size; + u8 segment_name_length; + u8 segment_name[128]; +} __clib_packed session_bound_msg_t; + typedef struct session_accepted_msg_ { u32 context; u64 listener_handle; u64 handle; - u64 server_rx_fifo; - u64 server_tx_fifo; - u64 vpp_event_queue_address; - u64 server_event_queue_address; - u64 client_event_queue_address; + uword server_rx_fifo; + uword server_tx_fifo; + u64 segment_handle; + uword vpp_event_queue_address; + uword server_event_queue_address; + uword client_event_queue_address; u16 port; u8 is_ip4; u8 ip[16]; @@ -240,11 +260,12 @@ typedef struct session_connected_msg_ u32 context; i32 retval; u64 handle; - u64 server_rx_fifo; - u64 server_tx_fifo; - u64 vpp_event_queue_address; - u64 client_event_queue_address; - u64 server_event_queue_address; + uword server_rx_fifo; + uword server_tx_fifo; + u64 segment_handle; + uword vpp_event_queue_address; + uword client_event_queue_address; + uword server_event_queue_address; u32 segment_size; u8 segment_name_length; u8 segment_name[64]; @@ -276,12 +297,33 @@ typedef struct session_reset_msg_ typedef struct session_reset_reply_msg_ { - u32 client_index; u32 context; i32 retval; u64 handle; } __clib_packed session_reset_reply_msg_t; +typedef struct session_req_worker_update_msg_ +{ + u64 session_handle; +} __clib_packed session_req_worker_update_msg_t; + +/* NOTE: using u16 for wrk indices because message needs to fit in 18B */ +typedef struct session_worker_update_msg_ +{ + u32 client_index; + u16 wrk_index; + u16 req_wrk_index; + u64 handle; +} __clib_packed session_worker_update_msg_t; + +typedef struct session_worker_update_reply_msg_ +{ + u64 handle; + uword rx_fifo; + uword tx_fifo; + u64 segment_handle; +} __clib_packed session_worker_update_reply_msg_t; + typedef struct app_session_event_ { svm_msg_q_msg_t msg; @@ -297,7 +339,7 @@ app_alloc_ctrl_evt_to_vpp (svm_msg_q_t * mq, app_session_evt_t * app_evt, SVM_Q_WAIT, &app_evt->msg); svm_msg_q_unlock (mq); app_evt->evt = svm_msg_q_msg_data (mq, &app_evt->msg); - memset (app_evt->evt, 0, sizeof (*app_evt->evt)); + clib_memset (app_evt->evt, 0, sizeof (*app_evt->evt)); app_evt->evt->event_type = evt_type; } @@ -380,10 +422,10 @@ app_send_dgram_raw (svm_fifo_t * f, app_session_transport_t * at, actual_write = clib_min (len, max_enqueue); hdr.data_length = actual_write; hdr.data_offset = 0; - clib_memcpy (&hdr.rmt_ip, &at->rmt_ip, sizeof (ip46_address_t)); + clib_memcpy_fast (&hdr.rmt_ip, &at->rmt_ip, sizeof (ip46_address_t)); hdr.is_ip4 = at->is_ip4; hdr.rmt_port = at->rmt_port; - clib_memcpy (&hdr.lcl_ip, &at->lcl_ip, sizeof (ip46_address_t)); + clib_memcpy_fast (&hdr.lcl_ip, &at->lcl_ip, sizeof (ip46_address_t)); hdr.lcl_port = at->lcl_port; rv = svm_fifo_enqueue_nowait (f, sizeof (hdr), (u8 *) & hdr); ASSERT (rv == sizeof (hdr));