flow: add vnet/flow formal API
[vpp.git] / src / vpp / api / vpe.api
1 /*
2  * Copyright (c) 2015-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
16 /** \file
17
18     This file defines vpe control-plane API messages which are generally
19     called through a shared memory interface.
20 */
21
22 option version = "1.6.1";
23
24 import "vpp/api/vpe_types.api";
25
26 /*
27  * Note: API placement cleanup in progress
28  * If you're looking for interface APIs, please
29  * see .../src/vnet/{interface.api,interface_api.c}
30  * IP APIs: see .../src/vnet/ip/{ip.api, ip_api.c}
31  * VXLAN APIs: see .../src/vnet/vxlan/{vxlan.api, vxlan_api.c}
32  * GENEVE APIs: see .../src/vnet/geneve/{geneve.api, geneve_api.c}
33  * LLDP APIs: see .../src/vnet/lldp/{lldp.api, lldp_api.c}
34  * AF-PACKET APIs: see ... /vnet/devices/af_packet/{af_packet.api, af_packet_api.c}
35  * VHOST-USER APIs: see .../vnet/devices/virtio/{vhost_user.api, vhost_user_api.c}
36  * VXLAN GPE APIs: see .../src/vnet/vxlan-gpe/{vxlan_gpe.api, vxlan_gpe_api.c}
37  * GRE APIs: see .../src/vnet/gre/{gre.api, gre_api.c}
38  * L2 APIs: see .../src/vnet/l2/{l2.api, l2_api.c}
39  * L2TP APIs: see .../src/vnet/l2tp/{l2tp.api, l2tp_api.c}
40  * BFD APIs: see .../src/vnet/bfd/{bfd.api, bfd_api.c}
41  * IPSEC APIs: see .../src/vnet/ipsec/{ipsec.api, ipsec_api.c}
42  * LISP APIs: see .../src/vnet/lisp/{lisp.api, lisp_api.c}
43  * LISP-GPE APIs: see .../src/vnet/lisp-gpe/{lisp_gpe.api, lisp_gpe_api.c}
44  * SESSION APIs: .../vnet/session/{session.api session_api.c}
45  * MPLS APIs: see .../src/vnet/mpls/{mpls.api, mpls_api.c}
46  * SR APIs: see .../src/vnet/srv6/{sr.api, sr_api.c}
47  * CLASSIFY APIs: see ... /src/vnet/classify/{classify.api, classify_api.c}
48  * FLOW APIs: see ... /src/vnet/flow/{flow.api, flow_api.c}
49  * DHCP APIs: see ... /src/vnet/dhcp/{dhcp.api, dhcp_api.c}
50  * COP APIs: see ... /src/vnet/cop/{cop.api, cop_api.c}
51  * POLICER APIs: see ... /src/vnet/policer/{policer.api, policer_api.c}
52  * BIER APIs: see ... /src/vnet/policer/{bier.api, bier_api.c}.
53  * flow APIs: see .../vnet/vnet/flow/{flow.api, flow_api.c}
54  */
55
56 /** \brief Control ping from client to api server request
57     @param client_index - opaque cookie to identify the sender
58     @param context - sender context, to match reply w/ request
59 */
60 define control_ping
61 {
62   u32 client_index;
63   u32 context;
64 };
65
66 /** \brief Control ping from the client to the server response
67     @param client_index - opaque cookie to identify the sender
68     @param context - sender context, to match reply w/ request
69     @param retval - return code for the request
70     @param vpe_pid - the pid of the vpe, returned by the server
71 */
72 define control_ping_reply
73 {
74   u32 context;
75   i32 retval;
76   u32 client_index;
77   u32 vpe_pid;
78 };
79
80 /** \brief Process a vpe parser cli string request
81     @param client_index - opaque cookie to identify the sender
82     @param context - sender context, to match reply w/ request
83     @param cmd_in_shmem - pointer to cli command string
84 */
85 define cli
86 {
87   u32 client_index;
88   u32 context;
89   u64 cmd_in_shmem;
90 };
91 define cli_inband
92 {
93   u32 client_index;
94   u32 context;
95   string cmd[];
96 };
97
98 /** \brief vpe parser cli string response
99     @param context - sender context, to match reply w/ request
100     @param retval - return code for request
101     @param reply_in_shmem - Reply string from cli processing if any
102 */
103 define cli_reply
104 {
105   u32 context;
106   i32 retval;
107   u64 reply_in_shmem;
108 };
109 define cli_inband_reply
110 {
111   u32 context;
112   i32 retval;
113   string reply[];
114 };
115
116 /** \brief Get node index using name request
117     @param client_index - opaque cookie to identify the sender
118     @param context - sender context, to match reply w/ request
119     @param node_name[] - name of the node
120 */
121 define get_node_index
122 {
123   u32 client_index;
124   u32 context;
125   string node_name[64];
126 };
127
128 /** \brief Get node index using name request
129     @param context - sender context, to match reply w/ request
130     @param retval - return code for the request
131     @param node_index - index of the desired node if found, else ~0
132 */
133 define get_node_index_reply
134 {
135   u32 context;
136   i32 retval;
137   u32 node_index;
138 };
139
140 /** \brief Set the next node for a given node request
141     @param client_index - opaque cookie to identify the sender
142     @param context - sender context, to match reply w/ request
143     @param node_name[] - node to add the next node to
144     @param next_name[] - node to add as the next node
145 */
146 define add_node_next
147 {
148   u32 client_index;
149   u32 context;
150   string node_name[64];
151   string next_name[64];
152 };
153
154 /** \brief IP Set the next node for a given node response
155     @param context - sender context, to match reply w/ request
156     @param retval - return code for the add next node request
157     @param next_index - the index of the next node if success, else ~0
158 */
159 define add_node_next_reply
160 {
161   u32 context;
162   i32 retval;
163   u32 next_index;
164 };
165
166 /** \brief show version
167     @param client_index - opaque cookie to identify the sender
168     @param context - sender context, to match reply w/ request
169 */
170 define show_version
171 {
172   u32 client_index;
173   u32 context;
174 };
175
176 /** \brief show version response
177     @param context - sender context, to match reply w/ request
178     @param retval - return code for the request
179     @param program - name of the program (vpe)
180     @param version  - version of the program
181     @param build_directory - root of the workspace where the program was built
182 */
183 define show_version_reply
184 {
185   u32 context;
186   i32 retval;
187   string program[32];
188   string version[32];
189   string build_date[32];
190   string build_directory[256];
191 };
192
193
194 /** \brief show_threads display the information about vpp
195     threads running on system along with their process id,
196     cpu id, physical core and cpu socket.
197 */
198 define show_threads
199 {
200   u32 client_index;
201   u32 context;
202 };
203
204 /** \brief thread data
205     @param id - thread index
206     @param name - thread name i.e. vpp_main or vpp_wk_0
207     @param type - thread type i.e. workers or stats
208     @param pid - thread Process Id
209     @param cpu_id - thread pinned to cpu.
210     "CPUs or Logical cores are the number of physical cores times
211     the number of threads that can run on each core through
212     the use of hyperthreading." (from unix.stackexchange.com)
213     @param core - thread pinned to actual physical core.
214     @param cpu_socket - thread is running on which cpu socket.
215 */
216 typedef thread_data
217 {
218   u32 id;
219   string name[64];
220   string type[64];
221   u32 pid;
222   u32 cpu_id;
223   u32 core;
224   u32 cpu_socket;
225 };
226
227 /** \brief show_threads_reply
228     @param context - returned sender context, to match reply w/ request
229     @param retval - return code
230     @param count - number of threads in thread_data array
231     @param thread_data - array of thread data
232 */
233 define show_threads_reply
234 {
235   u32 context;
236   i32 retval;
237   u32 count;
238   vl_api_thread_data_t thread_data[count];
239 };
240
241 define get_node_graph
242 {
243   u32 client_index;
244   u32 context;
245 };
246
247 /** \brief get_node_graph_reply
248     @param context - returned sender context, to match reply w/ request
249     @param retval - return code
250     @param reply_in_shmem - result from vlib_node_serialize, in shared
251     memory. Process with vlib_node_unserialize, remember to switch
252     heaps and free the result.
253 */
254
255 define get_node_graph_reply
256 {
257   u32 context;
258   i32 retval;
259   u64 reply_in_shmem;
260 };
261
262 /** \brief Query relative index via node names
263     @param client_index - opaque cookie to identify the sender
264     @param context - sender context, to match reply w/ request
265     @param node_name - name of node to find relative index from
266     @param next_name - next node from node_name to find relative index of
267 */
268 define get_next_index
269 {
270   u32 client_index;
271   u32 context;
272   string node_name[64];
273   string next_name[64];
274 };
275
276 /** \brief Reply for get next node index
277     @param context - sender context which was passed in the request
278     @param retval - return value
279     @param next_index - index of the next_node
280 */
281 define get_next_index_reply
282 {
283   u32 context;
284   i32 retval;
285   u32 next_index;
286 };
287
288 define log_dump {
289   u32 client_index;
290   u32 context;
291   vl_api_timestamp_t start_timestamp;
292 };
293
294 define log_details {
295   u32 context;
296   vl_api_timestamp_t timestamp;
297   vl_api_log_level_t level;
298   string msg_class[32];
299   string message[256];
300 };
301
302 /** \brief Show the current system timestamp.
303     @param client_index - opaque cookie to identify the sender
304     @param context - sender context, to match reply w/ request
305 */
306 define show_vpe_system_time
307 {
308   u32 client_index;
309   u32 context;
310 };
311
312 /** \brief Reply for show vpe system time.
313     @param context - sender context which was passed in the request
314     @param retval - return value
315     @param vpe_system_time - the time in seconds since epoch of the host system.
316 */
317 define show_vpe_system_time_reply
318 {
319   u32 context;
320   i32 retval;
321   vl_api_timestamp_t vpe_system_time;
322 };
323
324 /** \brief f64 types are not standardized across the wire. Sense wire format in each direction by sending the f64 value 1.0.
325     @param client_index - opaque cookie to identify the sender
326     @param context - sender context, to match reply w/ request
327     @param f64_one - The constant of 1.0.  If you send a different value, expect an rv=VNET_API_ERROR_API_ENDIAN_FAILED.
328 */
329 define get_f64_endian_value
330 {
331   u32 client_index;
332   u32 context;
333   f64 f64_one [default=1.0];
334 };
335
336 /** \brief get_f64_endian_value reply message
337     @param context - sender context which was passed in the request
338     @param retval - return value - VNET_API_ERROR_API_ENDIAN_FAILED if f64_one != 1.0
339     @param f64_one_result - The value of 'f64 1.0'
340 */
341 define get_f64_endian_value_reply
342 {
343   u32 context;
344   u32 retval;
345   f64 f64_one_result;
346 };
347
348 /** \brief Verify f64 wire format by sending a value and receiving the value + 1.0
349     @param client_index - opaque cookie to identify the sender.
350     @param context - sender context, to match reply w/ request.
351     @param f64_value - The value you want to test.  Default: 1.0.
352 */
353 define get_f64_increment_by_one
354 {
355   u32 client_index;
356   u32 context;
357   f64 f64_value [default=1.0];
358 };
359
360 /** \brief get_f64_increment_by_one reply
361     @param client_index - opaque cookie to identify the sender.
362     @param context - sender context, to match reply w/ request.
363     @param f64_value - The input f64_value incremented by 1.0.
364 */
365 define get_f64_increment_by_one_reply
366 {
367   u32 context;
368   u32 retval;
369   f64 f64_value;
370 };
371
372 /*
373  * Local Variables:
374  * eval: (c-set-style "gnu")
375  * End:
376  */