Session layer refactoring
[vpp.git] / src / vnet / session / application_interface.h
1 /*
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
25 typedef enum _session_api_proto
26 {
27   SESSION_PROTO_TCP,
28   SESSION_PROTO_UDP
29 } session_api_proto_t;
30
31 typedef struct _vnet_app_attach_args_t
32 {
33   u32 api_client_index;
34   u64 *options;
35   session_cb_vft_t *session_cb_vft;
36
37   /*
38    * Results
39    */
40   u8 *segment_name;
41   u32 segment_name_length;
42   u32 segment_size;
43   u64 app_event_queue_address;
44   u32 app_index;
45 } vnet_app_attach_args_t;
46
47 typedef struct _vnet_app_detach_args_t
48 {
49   u32 app_index;
50 } vnet_app_detach_args_t;
51
52 typedef struct _vnet_bind_args_t
53 {
54   union
55   {
56     char *uri;
57     struct
58     {
59       transport_endpoint_t tep;
60       session_api_proto_t proto;
61     };
62   };
63
64   u32 app_index;
65
66   /*
67    * Results
68    */
69   char *segment_name;
70   u32 segment_name_length;
71   u64 server_event_queue_address;
72   u64 handle;
73 } vnet_bind_args_t;
74
75 typedef struct _vnet_unbind_args_t
76 {
77   union
78   {
79     char *uri;
80     u64 handle;
81   };
82   u32 app_index;
83 } vnet_unbind_args_t;
84
85 typedef struct _vnet_connect_args
86 {
87   union
88   {
89     char *uri;
90     struct
91     {
92       transport_endpoint_t tep;
93       session_api_proto_t proto;
94     };
95   };
96   u32 app_index;
97   u32 api_context;
98
99   /* Used for redirects */
100   void *mp;
101 } vnet_connect_args_t;
102
103 typedef struct _vnet_disconnect_args_t
104 {
105   u64 handle;
106   u32 app_index;
107 } vnet_disconnect_args_t;
108
109 /* Application attach options */
110 typedef enum
111 {
112   APP_EVT_QUEUE_SIZE,
113   SESSION_OPTIONS_FLAGS,
114   SESSION_OPTIONS_SEGMENT_SIZE,
115   SESSION_OPTIONS_ADD_SEGMENT_SIZE,
116   SESSION_OPTIONS_RX_FIFO_SIZE,
117   SESSION_OPTIONS_TX_FIFO_SIZE,
118   SESSION_OPTIONS_ACCEPT_COOKIE,
119   SESSION_OPTIONS_N_OPTIONS
120 } app_attach_options_index_t;
121
122 /** Server can handle delegated connect requests from local clients */
123 #define SESSION_OPTIONS_FLAGS_USE_FIFO  (1<<0)
124
125 /** Server wants vpp to add segments when out of memory for fifos */
126 #define SESSION_OPTIONS_FLAGS_ADD_SEGMENT   (1<<1)
127
128 #define VNET_CONNECT_REDIRECTED 123
129
130 int vnet_application_attach (vnet_app_attach_args_t * a);
131 int vnet_application_detach (vnet_app_detach_args_t * a);
132
133 int vnet_bind_uri (vnet_bind_args_t *);
134 int vnet_unbind_uri (vnet_unbind_args_t * a);
135 int vnet_connect_uri (vnet_connect_args_t * a);
136 int vnet_disconnect_session (vnet_disconnect_args_t * a);
137
138 int vnet_bind (vnet_bind_args_t * a);
139 int vnet_connect (vnet_connect_args_t * a);
140 int vnet_unbind (vnet_unbind_args_t * a);
141 int vnet_disconnect (vnet_disconnect_args_t * a);
142
143 int
144 api_parse_session_handle (u64 handle, u32 * session_index,
145                           u32 * thread_index);
146
147 #endif /* __included_uri_h__ */
148
149 /*
150  * fd.io coding-style-patch-verification: ON
151  *
152  * Local Variables:
153  * eval: (c-set-style "gnu")
154  * End:
155  */