blob: 4b7a2dfa66c2f1835764980b3fa1f98cf057c3e9 [file] [log] [blame]
Dave Barach68b0fb02017-02-28 15:15:56 -05001/*
2 * Copyright (c) 2016 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef __included_uri_h__
16#define __included_uri_h__
17
18#include <vlib/vlib.h>
19#include <vnet/vnet.h>
20#include <svm/svm_fifo_segment.h>
21#include <vnet/session/session.h>
22#include <vnet/session/application.h>
23#include <vnet/session/transport.h>
24
Florin Coras6cf30ad2017-04-04 23:08:23 -070025typedef struct _vnet_app_attach_args_t
26{
Florin Corasa5464812017-04-19 13:00:05 -070027 /** Binary API client index */
Florin Coras6cf30ad2017-04-04 23:08:23 -070028 u32 api_client_index;
Florin Corasa5464812017-04-19 13:00:05 -070029
30 /** Application and segment manager options */
Florin Coras6cf30ad2017-04-04 23:08:23 -070031 u64 *options;
Florin Corasa5464812017-04-19 13:00:05 -070032
Florin Corascea194d2017-10-02 00:18:51 -070033 /* Namespace id */
34 u8 *namespace_id;
35
Florin Corasa5464812017-04-19 13:00:05 -070036 /** Session to application callback functions */
Florin Coras6cf30ad2017-04-04 23:08:23 -070037 session_cb_vft_t *session_cb_vft;
38
39 /*
40 * Results
41 */
Florin Corasb384b542018-01-15 01:08:33 -080042 ssvm_private_t *segment;
Florin Coras6cf30ad2017-04-04 23:08:23 -070043 u64 app_event_queue_address;
44 u32 app_index;
45} vnet_app_attach_args_t;
46
47typedef struct _vnet_app_detach_args_t
48{
49 u32 app_index;
50} vnet_app_detach_args_t;
51
Dave Barach68b0fb02017-02-28 15:15:56 -050052typedef struct _vnet_bind_args_t
53{
54 union
55 {
56 char *uri;
Florin Coras3cbc04b2017-10-02 00:18:51 -070057 session_endpoint_t sep;
Dave Barach68b0fb02017-02-28 15:15:56 -050058 };
59
Florin Coras6cf30ad2017-04-04 23:08:23 -070060 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050061
62 /*
63 * Results
64 */
65 char *segment_name;
66 u32 segment_name_length;
67 u64 server_event_queue_address;
68 u64 handle;
69} vnet_bind_args_t;
70
71typedef struct _vnet_unbind_args_t
72{
73 union
74 {
75 char *uri;
76 u64 handle;
77 };
Florin Coras6cf30ad2017-04-04 23:08:23 -070078 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050079} vnet_unbind_args_t;
80
81typedef struct _vnet_connect_args
82{
Florin Coras3cbc04b2017-10-02 00:18:51 -070083 char *uri;
84 session_endpoint_t sep;
Florin Coras6cf30ad2017-04-04 23:08:23 -070085 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050086 u32 api_context;
Dave Barach68b0fb02017-02-28 15:15:56 -050087
88 /* Used for redirects */
89 void *mp;
Florin Corasf8f516a2018-02-08 15:10:09 -080090 session_handle_t session_handle;
Dave Barach68b0fb02017-02-28 15:15:56 -050091} vnet_connect_args_t;
92
93typedef struct _vnet_disconnect_args_t
94{
Florin Corasf8f516a2018-02-08 15:10:09 -080095 session_handle_t handle;
Florin Coras6cf30ad2017-04-04 23:08:23 -070096 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050097} vnet_disconnect_args_t;
98
Florin Coras6cf30ad2017-04-04 23:08:23 -070099/* Application attach options */
Dave Barach68b0fb02017-02-28 15:15:56 -0500100typedef enum
101{
Florin Corasa5464812017-04-19 13:00:05 -0700102 APP_OPTIONS_FLAGS,
Florin Corasff6e7692017-12-11 04:59:01 -0800103 APP_OPTIONS_EVT_QUEUE_SIZE,
104 APP_OPTIONS_SEGMENT_SIZE,
105 APP_OPTIONS_ADD_SEGMENT_SIZE,
Dave Barach2c25a622017-06-26 11:35:07 -0400106 APP_OPTIONS_PRIVATE_SEGMENT_COUNT,
Florin Corasff6e7692017-12-11 04:59:01 -0800107 APP_OPTIONS_RX_FIFO_SIZE,
108 APP_OPTIONS_TX_FIFO_SIZE,
109 APP_OPTIONS_PREALLOC_FIFO_PAIRS,
Florin Corascea194d2017-10-02 00:18:51 -0700110 APP_OPTIONS_NAMESPACE,
111 APP_OPTIONS_NAMESPACE_SECRET,
Florin Coras7999e832017-10-31 01:51:04 -0700112 APP_OPTIONS_PROXY_TRANSPORT,
Florin Corasff6e7692017-12-11 04:59:01 -0800113 APP_OPTIONS_ACCEPT_COOKIE,
114 APP_OPTIONS_N_OPTIONS
Florin Coras6cf30ad2017-04-04 23:08:23 -0700115} app_attach_options_index_t;
Dave Barach68b0fb02017-02-28 15:15:56 -0500116
Florin Corasa5464812017-04-19 13:00:05 -0700117#define foreach_app_options_flags \
Florin Corascea194d2017-10-02 00:18:51 -0700118 _(ACCEPT_REDIRECT, "Use FIFO with redirects") \
Florin Corasa5464812017-04-19 13:00:05 -0700119 _(ADD_SEGMENT, "Add segment and signal app if needed") \
Florin Coras7999e832017-10-31 01:51:04 -0700120 _(IS_BUILTIN, "Application is builtin") \
Florin Corascea194d2017-10-02 00:18:51 -0700121 _(IS_PROXY, "Application is proxying") \
122 _(USE_GLOBAL_SCOPE, "App can use global session scope") \
123 _(USE_LOCAL_SCOPE, "App can use local session scope")
Dave Barach68b0fb02017-02-28 15:15:56 -0500124
Florin Corasa5464812017-04-19 13:00:05 -0700125typedef enum _app_options
126{
127#define _(sym, str) APP_OPTIONS_##sym,
128 foreach_app_options_flags
129#undef _
130} app_options_t;
131
132typedef enum _app_options_flags
133{
134#define _(sym, str) APP_OPTIONS_FLAGS_##sym = 1 << APP_OPTIONS_##sym,
135 foreach_app_options_flags
136#undef _
137} app_options_flags_t;
138
Florin Corascea194d2017-10-02 00:18:51 -0700139clib_error_t *vnet_application_attach (vnet_app_attach_args_t * a);
Florin Coras6cf30ad2017-04-04 23:08:23 -0700140int vnet_application_detach (vnet_app_detach_args_t * a);
141
Dave Barach68b0fb02017-02-28 15:15:56 -0500142int vnet_bind_uri (vnet_bind_args_t *);
Florin Coras6cf30ad2017-04-04 23:08:23 -0700143int vnet_unbind_uri (vnet_unbind_args_t * a);
Florin Corascea194d2017-10-02 00:18:51 -0700144clib_error_t *vnet_connect_uri (vnet_connect_args_t * a);
Florin Coras6cf30ad2017-04-04 23:08:23 -0700145int vnet_disconnect_session (vnet_disconnect_args_t * a);
Dave Barach68b0fb02017-02-28 15:15:56 -0500146
Florin Corascea194d2017-10-02 00:18:51 -0700147clib_error_t *vnet_bind (vnet_bind_args_t * a);
148clib_error_t *vnet_connect (vnet_connect_args_t * a);
149clib_error_t *vnet_unbind (vnet_unbind_args_t * a);
Dave Barach68b0fb02017-02-28 15:15:56 -0500150
151int
152api_parse_session_handle (u64 handle, u32 * session_index,
153 u32 * thread_index);
154
Florin Corasf8f516a2018-02-08 15:10:09 -0800155void send_local_session_disconnect_callback (u32 app_index,
156 local_session_t * ls);
157
Dave Barach68b0fb02017-02-28 15:15:56 -0500158#endif /* __included_uri_h__ */
159
160/*
161 * fd.io coding-style-patch-verification: ON
162 *
163 * Local Variables:
164 * eval: (c-set-style "gnu")
165 * End:
166 */