blob: 7d924c146a41f402d9724ff34994762ddf97ec26 [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
25typedef enum _session_api_proto
26{
27 SESSION_PROTO_TCP,
28 SESSION_PROTO_UDP
29} session_api_proto_t;
30
Florin Coras6cf30ad2017-04-04 23:08:23 -070031typedef struct _vnet_app_attach_args_t
32{
Florin Corasa5464812017-04-19 13:00:05 -070033 /** Binary API client index */
Florin Coras6cf30ad2017-04-04 23:08:23 -070034 u32 api_client_index;
Florin Corasa5464812017-04-19 13:00:05 -070035
36 /** Application and segment manager options */
Florin Coras6cf30ad2017-04-04 23:08:23 -070037 u64 *options;
Florin Corasa5464812017-04-19 13:00:05 -070038
39 /** Session to application callback functions */
Florin Coras6cf30ad2017-04-04 23:08:23 -070040 session_cb_vft_t *session_cb_vft;
41
Florin Corasa5464812017-04-19 13:00:05 -070042 /** Flag that indicates if app is builtin */
43 u8 builtin;
44
Florin Coras6cf30ad2017-04-04 23:08:23 -070045 /*
46 * Results
47 */
48 u8 *segment_name;
49 u32 segment_name_length;
50 u32 segment_size;
51 u64 app_event_queue_address;
52 u32 app_index;
53} vnet_app_attach_args_t;
54
55typedef struct _vnet_app_detach_args_t
56{
57 u32 app_index;
58} vnet_app_detach_args_t;
59
Dave Barach68b0fb02017-02-28 15:15:56 -050060typedef struct _vnet_bind_args_t
61{
62 union
63 {
64 char *uri;
65 struct
66 {
67 transport_endpoint_t tep;
68 session_api_proto_t proto;
69 };
70 };
71
Florin Coras6cf30ad2017-04-04 23:08:23 -070072 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050073
74 /*
75 * Results
76 */
77 char *segment_name;
78 u32 segment_name_length;
79 u64 server_event_queue_address;
80 u64 handle;
81} vnet_bind_args_t;
82
83typedef struct _vnet_unbind_args_t
84{
85 union
86 {
87 char *uri;
88 u64 handle;
89 };
Florin Coras6cf30ad2017-04-04 23:08:23 -070090 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -050091} vnet_unbind_args_t;
92
93typedef struct _vnet_connect_args
94{
95 union
96 {
97 char *uri;
98 struct
99 {
100 transport_endpoint_t tep;
101 session_api_proto_t proto;
102 };
103 };
Florin Coras6cf30ad2017-04-04 23:08:23 -0700104 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -0500105 u32 api_context;
Dave Barach68b0fb02017-02-28 15:15:56 -0500106
107 /* Used for redirects */
108 void *mp;
109} vnet_connect_args_t;
110
111typedef struct _vnet_disconnect_args_t
112{
113 u64 handle;
Florin Coras6cf30ad2017-04-04 23:08:23 -0700114 u32 app_index;
Dave Barach68b0fb02017-02-28 15:15:56 -0500115} vnet_disconnect_args_t;
116
Florin Coras6cf30ad2017-04-04 23:08:23 -0700117/* Application attach options */
Dave Barach68b0fb02017-02-28 15:15:56 -0500118typedef enum
119{
Florin Coras6cf30ad2017-04-04 23:08:23 -0700120 APP_EVT_QUEUE_SIZE,
Florin Corasa5464812017-04-19 13:00:05 -0700121 APP_OPTIONS_FLAGS,
Dave Barach68b0fb02017-02-28 15:15:56 -0500122 SESSION_OPTIONS_SEGMENT_SIZE,
123 SESSION_OPTIONS_ADD_SEGMENT_SIZE,
124 SESSION_OPTIONS_RX_FIFO_SIZE,
125 SESSION_OPTIONS_TX_FIFO_SIZE,
126 SESSION_OPTIONS_ACCEPT_COOKIE,
127 SESSION_OPTIONS_N_OPTIONS
Florin Coras6cf30ad2017-04-04 23:08:23 -0700128} app_attach_options_index_t;
Dave Barach68b0fb02017-02-28 15:15:56 -0500129
Florin Corasa5464812017-04-19 13:00:05 -0700130#define foreach_app_options_flags \
131 _(USE_FIFO, "Use FIFO with redirects") \
132 _(ADD_SEGMENT, "Add segment and signal app if needed") \
133 _(BUILTIN_APP, "Application is builtin") \
Dave Barach68b0fb02017-02-28 15:15:56 -0500134
Florin Corasa5464812017-04-19 13:00:05 -0700135typedef enum _app_options
136{
137#define _(sym, str) APP_OPTIONS_##sym,
138 foreach_app_options_flags
139#undef _
140} app_options_t;
141
142typedef enum _app_options_flags
143{
144#define _(sym, str) APP_OPTIONS_FLAGS_##sym = 1 << APP_OPTIONS_##sym,
145 foreach_app_options_flags
146#undef _
147} app_options_flags_t;
148
149///** Server can handle delegated connect requests from local clients */
150//#define APP_OPTIONS_FLAGS_USE_FIFO (1<<0)
151//
152///** Server wants vpp to add segments when out of memory for fifos */
153//#define APP_OPTIONS_FLAGS_ADD_SEGMENT (1<<1)
Dave Barach68b0fb02017-02-28 15:15:56 -0500154
155#define VNET_CONNECT_REDIRECTED 123
156
Florin Coras6cf30ad2017-04-04 23:08:23 -0700157int vnet_application_attach (vnet_app_attach_args_t * a);
158int vnet_application_detach (vnet_app_detach_args_t * a);
159
Dave Barach68b0fb02017-02-28 15:15:56 -0500160int vnet_bind_uri (vnet_bind_args_t *);
Florin Coras6cf30ad2017-04-04 23:08:23 -0700161int vnet_unbind_uri (vnet_unbind_args_t * a);
Dave Barach68b0fb02017-02-28 15:15:56 -0500162int vnet_connect_uri (vnet_connect_args_t * a);
Florin Coras6cf30ad2017-04-04 23:08:23 -0700163int vnet_disconnect_session (vnet_disconnect_args_t * a);
Dave Barach68b0fb02017-02-28 15:15:56 -0500164
165int vnet_bind (vnet_bind_args_t * a);
166int vnet_connect (vnet_connect_args_t * a);
167int vnet_unbind (vnet_unbind_args_t * a);
Dave Barach68b0fb02017-02-28 15:15:56 -0500168
169int
170api_parse_session_handle (u64 handle, u32 * session_index,
171 u32 * thread_index);
172
173#endif /* __included_uri_h__ */
174
175/*
176 * fd.io coding-style-patch-verification: ON
177 *
178 * Local Variables:
179 * eval: (c-set-style "gnu")
180 * End:
181 */