X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fapplication_interface.h;h=f175e4a58c60a7a4d1bd377eded1371b0d2d191a;hb=980ee74b165a4fa629f868935c446773ca82372e;hp=46029f0307a1a0de3982ad87e6991ad41f850174;hpb=67c90a32b7ad0c5a38c483ce849cc7a231e7ba54;p=vpp.git diff --git a/src/vnet/session/application_interface.h b/src/vnet/session/application_interface.h index 46029f0307a..f175e4a58c6 100644 --- a/src/vnet/session/application_interface.h +++ b/src/vnet/session/application_interface.h @@ -62,6 +62,13 @@ typedef struct session_cb_vft_ /** Notify app that session pool migration happened */ void (*session_migrate_callback) (session_t * s, session_handle_t new_sh); + /** Notify app (external only) that listen was processed */ + int (*session_listened_callback) (u32 app_wrk_index, u32 api_context, + session_handle_t handle, int rv); + /** Notify app (external only) that unlisten was processed */ + void (*session_unlistened_callback) (u32 app_wrk_index, session_handle_t sh, + u32 context, int rv); + /** Direct RX callback for built-in application */ int (*builtin_app_rx_callback) (session_t * session); @@ -74,6 +81,8 @@ typedef struct session_cb_vft_ /** Delegate fifo-tuning-logic to application */ int (*fifo_tuning_callback) (session_t * s, svm_fifo_t * f, session_ft_action_t act, u32 bytes); + /** Custom fifo allocation for proxy */ + int (*proxy_alloc_session_fifos) (session_t *s); } session_cb_vft_t; @@ -117,7 +126,7 @@ typedef struct _vnet_bind_args_t /* * Results */ - u64 handle; + session_handle_t handle; } vnet_listen_args_t; typedef struct _vnet_unlisten_args_t @@ -125,7 +134,7 @@ typedef struct _vnet_unlisten_args_t union { char *uri; - u64 handle; /**< Session handle */ + session_handle_t handle; /**< Session handle */ }; u32 app_index; /**< Owning application index */ u32 wrk_map_index; /**< App's local pool worker index */ @@ -223,15 +232,18 @@ typedef enum APP_OPTIONS_N_OPTIONS } app_attach_options_index_t; -#define foreach_app_options_flags \ - _(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") \ - _(EVT_MQ_USE_EVENTFD, "Use eventfds for signaling") \ +#define foreach_app_options_flags \ + _ (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") \ + _ (EVT_MQ_USE_EVENTFD, "Use eventfds for signaling") \ + _ (MEMFD_FOR_BUILTIN, "Use memfd for builtin app segs") \ + _ (USE_HUGE_PAGE, "Use huge page for FIFO") \ + _ (GET_ORIGINAL_DST, "Get original dst enabled") typedef enum _app_options { @@ -268,24 +280,26 @@ typedef enum session_fd_flag_ #undef _ } session_fd_flag_t; -int parse_uri (char *uri, session_endpoint_cfg_t * sep); -int vnet_bind_uri (vnet_listen_args_t *); -int vnet_unbind_uri (vnet_unlisten_args_t * a); -int vnet_connect_uri (vnet_connect_args_t * a); +session_error_t parse_uri (char *uri, session_endpoint_cfg_t *sep); +session_error_t vnet_bind_uri (vnet_listen_args_t *); +session_error_t vnet_unbind_uri (vnet_unlisten_args_t *a); +session_error_t vnet_connect_uri (vnet_connect_args_t *a); -int vnet_application_attach (vnet_app_attach_args_t * a); -int vnet_application_detach (vnet_app_detach_args_t * a); -int vnet_listen (vnet_listen_args_t * a); -int vnet_connect (vnet_connect_args_t * a); -int vnet_unlisten (vnet_unlisten_args_t * a); -int vnet_shutdown_session (vnet_shutdown_args_t *a); -int vnet_disconnect_session (vnet_disconnect_args_t * a); +session_error_t vnet_application_attach (vnet_app_attach_args_t *a); +session_error_t vnet_application_detach (vnet_app_detach_args_t *a); +session_error_t vnet_listen (vnet_listen_args_t *a); +session_error_t vnet_connect (vnet_connect_args_t *a); +session_error_t vnet_unlisten (vnet_unlisten_args_t *a); +session_error_t vnet_shutdown_session (vnet_shutdown_args_t *a); +session_error_t vnet_disconnect_session (vnet_disconnect_args_t *a); int vnet_app_add_cert_key_pair (vnet_app_add_cert_key_pair_args_t * a); int vnet_app_del_cert_key_pair (u32 index); /** Ask for app cb on pair deletion */ int vnet_app_add_cert_key_interest (u32 index, u32 app_index); +uword unformat_vnet_uri (unformat_input_t *input, va_list *args); + typedef struct app_session_transport_ { ip46_address_t rmt_ip; /**< remote ip */ @@ -295,15 +309,15 @@ typedef struct app_session_transport_ u8 is_ip4; /**< set if uses ip4 networking */ } app_session_transport_t; -#define foreach_app_session_field \ - _(svm_fifo_t, *rx_fifo) /**< rx fifo */ \ - _(svm_fifo_t, *tx_fifo) /**< tx fifo */ \ - _(session_type_t, session_type) /**< session type */ \ - _(volatile u8, session_state) /**< session state */ \ - _(u32, session_index) /**< index in owning pool */ \ - _(app_session_transport_t, transport) /**< transport info */ \ - _(svm_msg_q_t, *vpp_evt_q) /**< vpp event queue */ \ - _(u8, is_dgram) /**< flag for dgram mode */ \ +#define foreach_app_session_field \ + _ (svm_fifo_t, *rx_fifo) /**< rx fifo */ \ + _ (svm_fifo_t, *tx_fifo) /**< tx fifo */ \ + _ (session_type_t, session_type) /**< session type */ \ + _ (volatile u8, session_state) /**< session state */ \ + _ (u32, session_index) /**< index in owning pool */ \ + _ (app_session_transport_t, transport) /**< transport info */ \ + _ (svm_msg_q_t, *vpp_evt_q) /**< vpp event queue */ \ + _ (u8, is_dgram) /**< flag for dgram mode */ typedef struct { @@ -342,7 +356,7 @@ STATIC_ASSERT (sizeof (session_listen_uri_msg_t) <= SESSION_CTRL_MSG_MAX_SIZE, typedef struct session_bound_msg_ { u32 context; - u64 handle; + session_handle_t handle; i32 retval; u8 lcl_is_ip4; u8 lcl_ip[16]; @@ -351,6 +365,7 @@ typedef struct session_bound_msg_ uword tx_fifo; uword vpp_evt_q; u64 segment_handle; + u32 mq_index; } __clib_packed session_bound_msg_t; typedef struct session_unlisten_msg_ @@ -364,15 +379,15 @@ typedef struct session_unlisten_msg_ typedef struct session_unlisten_reply_msg_ { u32 context; - u64 handle; + session_handle_t handle; i32 retval; } __clib_packed session_unlisten_reply_msg_t; typedef struct session_accepted_msg_ { u32 context; - u64 listener_handle; - u64 handle; + session_handle_t listener_handle; + session_handle_t handle; uword server_rx_fifo; uword server_tx_fifo; u64 segment_handle; @@ -381,13 +396,15 @@ typedef struct session_accepted_msg_ transport_endpoint_t lcl; transport_endpoint_t rmt; u8 flags; + u32 original_dst_ip4; + u16 original_dst_port; } __clib_packed session_accepted_msg_t; typedef struct session_accepted_reply_msg_ { u32 context; i32 retval; - u64 handle; + session_handle_t handle; } __clib_packed session_accepted_reply_msg_t; typedef struct session_connect_msg_ @@ -406,6 +423,7 @@ typedef struct session_connect_msg_ u32 ckpair_index; u8 crypto_engine; u8 flags; + u8 dscp; uword ext_config; } __clib_packed session_connect_msg_t; @@ -426,7 +444,7 @@ typedef struct session_connected_msg_ { u32 context; i32 retval; - u64 handle; + session_handle_t handle; uword server_rx_fifo; uword server_tx_fifo; u64 segment_handle; @@ -434,10 +452,8 @@ typedef struct session_connected_msg_ uword ct_tx_fifo; u64 ct_segment_handle; uword vpp_event_queue_address; - u32 segment_size; - u8 segment_name_length; - u8 segment_name[64]; transport_endpoint_t lcl; + u32 mq_index; } __clib_packed session_connected_msg_t; typedef struct session_shutdown_msg_ @@ -458,33 +474,33 @@ typedef struct session_disconnected_msg_ { u32 client_index; u32 context; - u64 handle; + session_handle_t handle; } __clib_packed session_disconnected_msg_t; typedef struct session_disconnected_reply_msg_ { u32 context; i32 retval; - u64 handle; + session_handle_t handle; } __clib_packed session_disconnected_reply_msg_t; typedef struct session_reset_msg_ { u32 client_index; u32 context; - u64 handle; + session_handle_t handle; } __clib_packed session_reset_msg_t; typedef struct session_reset_reply_msg_ { u32 context; i32 retval; - u64 handle; + session_handle_t handle; } __clib_packed session_reset_reply_msg_t; typedef struct session_req_worker_update_msg_ { - u64 session_handle; + session_handle_t session_handle; } __clib_packed session_req_worker_update_msg_t; /* NOTE: using u16 for wrk indices because message needs to fit in 18B */ @@ -493,12 +509,12 @@ typedef struct session_worker_update_msg_ u32 client_index; u16 wrk_index; u16 req_wrk_index; - u64 handle; + session_handle_t handle; } __clib_packed session_worker_update_msg_t; typedef struct session_worker_update_reply_msg_ { - u64 handle; + session_handle_t handle; uword rx_fifo; uword tx_fifo; u64 segment_handle; @@ -612,8 +628,8 @@ app_send_io_evt_to_vpp (svm_msg_q_t * mq, u32 session_index, u8 evt_type, { if (svm_msg_q_try_lock (mq)) return -1; - if (PREDICT_FALSE (svm_msg_q_ring_is_full (mq, SESSION_MQ_IO_EVT_RING) - || svm_msg_q_is_full (mq))) + if (PREDICT_FALSE ( + svm_msg_q_or_ring_is_full (mq, SESSION_MQ_IO_EVT_RING))) { svm_msg_q_unlock (mq); return -2; @@ -628,9 +644,8 @@ app_send_io_evt_to_vpp (svm_msg_q_t * mq, u32 session_index, u8 evt_type, else { svm_msg_q_lock (mq); - while (svm_msg_q_ring_is_full (mq, SESSION_MQ_IO_EVT_RING) - || svm_msg_q_is_full (mq)) - svm_msg_q_wait_prod (mq); + while (svm_msg_q_or_ring_is_full (mq, SESSION_MQ_IO_EVT_RING)) + svm_msg_q_or_ring_wait_prod (mq, SESSION_MQ_IO_EVT_RING); msg = svm_msg_q_alloc_msg_w_ring (mq, SESSION_MQ_IO_EVT_RING); evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg); evt->session_index = session_index; @@ -640,14 +655,18 @@ app_send_io_evt_to_vpp (svm_msg_q_t * mq, u32 session_index, u8 evt_type, } } +#define app_send_dgram_raw(f, at, vpp_evt_q, data, len, evt_type, do_evt, \ + noblock) \ + app_send_dgram_raw_gso (f, at, vpp_evt_q, data, len, 0, evt_type, do_evt, \ + noblock) + always_inline int -app_send_dgram_raw (svm_fifo_t * f, app_session_transport_t * at, - svm_msg_q_t * vpp_evt_q, u8 * data, u32 len, u8 evt_type, - u8 do_evt, u8 noblock) +app_send_dgram_raw_gso (svm_fifo_t *f, app_session_transport_t *at, + svm_msg_q_t *vpp_evt_q, u8 *data, u32 len, + u16 gso_size, u8 evt_type, u8 do_evt, u8 noblock) { session_dgram_hdr_t hdr; int rv; - if (svm_fifo_max_enqueue_prod (f) < (sizeof (session_dgram_hdr_t) + len)) return 0; @@ -658,10 +677,8 @@ app_send_dgram_raw (svm_fifo_t * f, app_session_transport_t * at, hdr.rmt_port = at->rmt_port; clib_memcpy_fast (&hdr.lcl_ip, &at->lcl_ip, sizeof (ip46_address_t)); hdr.lcl_port = at->lcl_port; - - /* *INDENT-OFF* */ + hdr.gso_size = gso_size; svm_fifo_seg_t segs[2] = {{ (u8 *) &hdr, sizeof (hdr) }, { data, len }}; - /* *INDENT-ON* */ rv = svm_fifo_enqueue_segments (f, segs, 2, 0 /* allow partial */ ); if (PREDICT_FALSE (rv < 0)) @@ -786,13 +803,11 @@ app_recv (app_session_t * s, u8 * data, u32 len) return app_recv_stream (s, data, len); } -/* *INDENT-OFF* */ static char *session_error_str[] = { #define _(sym, str) str, foreach_session_error #undef _ }; -/* *INDENT-ON* */ static inline u8 * format_session_error (u8 * s, va_list * args) @@ -817,6 +832,8 @@ typedef enum app_sapi_msg_type APP_SAPI_MSG_TYPE_ADD_DEL_WORKER, APP_SAPI_MSG_TYPE_ADD_DEL_WORKER_REPLY, APP_SAPI_MSG_TYPE_SEND_FDS, + APP_SAPI_MSG_TYPE_ADD_DEL_CERT_KEY, + APP_SAPI_MSG_TYPE_ADD_DEL_CERT_KEY_REPLY, } __clib_packed app_sapi_msg_type_e; typedef struct app_sapi_attach_msg_ @@ -861,6 +878,22 @@ typedef struct app_sapi_worker_add_del_reply_msg_ u8 is_add; } __clib_packed app_sapi_worker_add_del_reply_msg_t; +typedef struct app_sapi_cert_key_add_del_msg_ +{ + u32 context; + u32 index; + u16 cert_len; + u16 certkey_len; + u8 is_add; +} __clib_packed app_sapi_cert_key_add_del_msg_t; + +typedef struct app_sapi_cert_key_add_del_reply_msg_ +{ + u32 context; + i32 retval; + u32 index; +} __clib_packed app_sapi_cert_key_add_del_reply_msg_t; + typedef struct app_sapi_msg_ { app_sapi_msg_type_e type; @@ -870,6 +903,8 @@ typedef struct app_sapi_msg_ app_sapi_attach_reply_msg_t attach_reply; app_sapi_worker_add_del_msg_t worker_add_del; app_sapi_worker_add_del_reply_msg_t worker_add_del_reply; + app_sapi_cert_key_add_del_msg_t cert_key_add_del; + app_sapi_cert_key_add_del_reply_msg_t cert_key_add_del_reply; }; } __clib_packed app_sapi_msg_t;