488af1727bc748b30dded95aacfa79ece2c3e57b
[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.1.0";
23
24 /* 
25  * Note: API placement cleanup in progress
26  * If you're looking for interface APIs, please
27  * see .../src/vnet/{interface.api,interface_api.c}
28  * IP APIs: see .../src/vnet/ip/{ip.api, ip_api.c}
29  * TAP APIs: see .../src/vnet/unix/{tap.api, tap_api.c}
30  * VXLAN APIs: see .../src/vnet/vxlan/{vxlan.api, vxlan_api.c}
31  * GENEVE APIs: see .../src/vnet/geneve/{geneve.api, geneve_api.c}
32  * LLDP APIs: see .../src/vnet/lldp/{lldp.api, lldp_api.c}
33  * AF-PACKET APIs: see ... /vnet/devices/af_packet/{af_packet.api, af_packet_api.c}
34  * NETMAP APIs: see ... /src/vnet/devices/netmap/{netmap.api, netmap_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  * IPSEC-GRE APIs: see .../src/vnet/ipsec-gre/{ipsec_gre.api, ipsec_gre_api.c}
43  * LISP APIs: see .../src/vnet/lisp/{lisp.api, lisp_api.c}
44  * LISP-GPE APIs: see .../src/vnet/lisp-gpe/{lisp_gpe.api, lisp_gpe_api.c}
45  * SESSION APIs: .../vnet/session/{session.api session_api.c}
46  * MPLS APIs: see .../src/vnet/mpls/{mpls.api, mpls_api.c}
47  * SR APIs: see .../src/vnet/srv6/{sr.api, sr_api.c}
48  * CLASSIFY APIs: see ... /src/vnet/classify/{classify.api, classify_api.c}
49  * FLOW APIs: see ... /src/vnet/flow/{flow.api, flow_api.c}
50  * DHCP APIs: see ... /src/vnet/dhcp/{dhcp.api, dhcp_api.c}
51  * COP APIs: see ... /src/vnet/cop/{cop.api, cop_api.c}
52  * POLICER APIs: see ... /src/vnet/policer/{policer.api, policer_api.c}
53  * STATS APIs: see .../src/vpp/stats/{stats.api, stats.c}
54  * BIER APIs: see ... /src/vnet/policer/{bier.api, bier_api.c}
55  */
56
57 /** \brief Control ping from client to api server request
58     @param client_index - opaque cookie to identify the sender
59     @param context - sender context, to match reply w/ request
60 */
61 define control_ping
62 {
63   u32 client_index;
64   u32 context;
65 };
66
67 /** \brief Control ping from the client to the server response
68     @param client_index - opaque cookie to identify the sender
69     @param context - sender context, to match reply w/ request
70     @param retval - return code for the request
71     @param vpe_pid - the pid of the vpe, returned by the server
72 */
73 define control_ping_reply
74 {
75   u32 context;
76   i32 retval;
77   u32 client_index;
78   u32 vpe_pid;
79 };
80
81 /** \brief Process a vpe parser cli string request
82     @param client_index - opaque cookie to identify the sender
83     @param context - sender context, to match reply w/ request
84     @param cmd_in_shmem - pointer to cli command string
85 */
86 define cli
87 {
88   u32 client_index;
89   u32 context;
90   u64 cmd_in_shmem;
91 };
92 define cli_inband
93 {
94   u32 client_index;
95   u32 context;
96   u32 length;
97   u8 cmd[length];
98 };
99
100 /** \brief vpe parser cli string response
101     @param context - sender context, to match reply w/ request
102     @param retval - return code for request
103     @param reply_in_shmem - Reply string from cli processing if any
104 */
105 define cli_reply
106 {
107   u32 context;
108   i32 retval;
109   u64 reply_in_shmem;
110 };
111 define cli_inband_reply
112 {
113   u32 context;
114   i32 retval;
115   u32 length;
116   u8 reply[length];
117 };
118
119 /** \brief Get node index using name request
120     @param client_index - opaque cookie to identify the sender
121     @param context - sender context, to match reply w/ request
122     @param node_name[] - name of the node
123 */
124 define get_node_index
125 {
126   u32 client_index;
127   u32 context;
128   u8 node_name[64];
129 };
130
131 /** \brief Get node index using name request
132     @param context - sender context, to match reply w/ request
133     @param retval - return code for the request
134     @param node_index - index of the desired node if found, else ~0
135 */
136 define get_node_index_reply
137 {
138   u32 context;
139   i32 retval;
140   u32 node_index;
141 };
142
143 /** \brief Set the next node for a given node request
144     @param client_index - opaque cookie to identify the sender
145     @param context - sender context, to match reply w/ request
146     @param node_name[] - node to add the next node to
147     @param next_name[] - node to add as the next node
148 */
149 define add_node_next
150 {
151   u32 client_index;
152   u32 context;
153   u8 node_name[64];
154   u8 next_name[64];
155 };
156
157 /** \brief IP Set the next node for a given node response
158     @param context - sender context, to match reply w/ request
159     @param retval - return code for the add next node request
160     @param next_index - the index of the next node if success, else ~0
161 */
162 define add_node_next_reply
163 {
164   u32 context;
165   i32 retval;
166   u32 next_index;
167 };
168
169 /** \brief show version
170     @param client_index - opaque cookie to identify the sender
171     @param context - sender context, to match reply w/ request
172 */
173 define show_version
174 {
175   u32 client_index;
176   u32 context;
177 };
178
179 /** \brief show version response
180     @param context - sender context, to match reply w/ request
181     @param retval - return code for the request
182     @param program - name of the program (vpe)
183     @param version  - version of the program
184     @param build_directory - root of the workspace where the program was built
185 */
186 define show_version_reply
187 {
188   u32 context;
189   i32 retval;
190   u8 program[32];
191   u8 version[32];
192   u8 build_date[32];
193   u8 build_directory[256];
194 };
195
196
197 /** \brief show_threads display the information about vpp
198     threads running on system along with their process id,
199     cpu id, physical core and cpu socket.
200 */
201 define show_threads
202 {
203   u32 client_index;
204   u32 context;
205 };
206
207 /** \brief thread data
208     @param id - thread index
209     @param name - thread name i.e. vpp_main or vpp_wk_0
210     @param type - thread type i.e. workers or stats
211     @param pid - thread Process Id
212     @param cpu_id - thread pinned to cpu.
213     "CPUs or Logical cores are the number of physical cores times
214     the number of threads that can run on each core through
215     the use of hyperthreading." (from unix.stackexchange.com)
216     @param core - thread pinned to actual physical core.
217     @param cpu_socket - thread is running on which cpu socket.
218 */
219 typeonly define thread_data
220 {
221   u32 id;
222   u8 name[64];
223   u8 type[64];
224   u32 pid;
225   u32 cpu_id;
226   u32 core;
227   u32 cpu_socket;
228 };
229
230 /** \brief show_threads_reply
231     @param context - returned sender context, to match reply w/ request
232     @param retval - return code
233     @param count - number of threads in thread_data array
234     @param thread_data - array of thread data
235 */
236 define show_threads_reply
237 {
238   u32 context;
239   i32 retval;
240   u32 count;
241   vl_api_thread_data_t thread_data[count];
242 };
243
244 define get_node_graph
245 {
246   u32 client_index;
247   u32 context;
248 };
249
250 /** \brief get_node_graph_reply
251     @param context - returned sender context, to match reply w/ request
252     @param retval - return code
253     @param reply_in_shmem - result from vlib_node_serialize, in shared
254     memory. Process with vlib_node_unserialize, remember to switch
255     heaps and free the result.
256 */
257
258 define get_node_graph_reply
259 {
260   u32 context;
261   i32 retval;
262   u64 reply_in_shmem;
263 };
264
265 /** \brief Query relative index via node names
266     @param client_index - opaque cookie to identify the sender
267     @param context - sender context, to match reply w/ request
268     @param node_name - name of node to find relative index from
269     @param next_name - next node from node_name to find relative index of
270 */
271 define get_next_index
272 {
273   u32 client_index;
274   u32 context;
275   u8 node_name[64];
276   u8 next_name[64];
277 };
278
279 /** \brief Reply for get next node index
280     @param context - sender context which was passed in the request
281     @param retval - return value
282     @param next_index - index of the next_node
283 */
284 define get_next_index_reply
285 {
286   u32 context;
287   i32 retval;
288   u32 next_index;
289 };
290
291 /*
292  * Local Variables:
293  * eval: (c-set-style "gnu")
294  * End:
295  */