8ff69b257421e5a91b1f39b810eef82fdcea6acf
[vpp.git] / src / plugins / snat / snat.api
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 /**
16  * @file snat.api
17  * @brief VPP control-plane API messages.
18  *
19  * This file defines VPP control-plane API messages which are generally
20  * called through a shared memory interface.
21  */
22
23 /** \brief Add/del S-NAT address range
24     @param client_index - opaque cookie to identify the sender
25     @param context - sender context, to match reply w/ request
26     @param is_ip4 - 1 if address type is IPv4
27     @param first_ip_address - first IP address
28     @param last_ip_address - last IP address
29     @param vrf_id - VRF id of tenant, ~0 means independent of VRF
30     @param is_add - 1 if add, 0 if delete
31 */
32 define snat_add_address_range {
33   u32 client_index;
34   u32 context;
35   u8 is_ip4;
36   u8 first_ip_address[16];
37   u8 last_ip_address[16];
38   u32 vrf_id;
39   u8 is_add;
40 };
41
42 /** \brief Add S-NAT address range reply
43     @param context - sender context, to match reply w/ request
44     @param retval - return code
45 */
46 define snat_add_address_range_reply {
47   u32 context;
48   i32 retval;
49 };
50
51 /** \brief Dump S-NAT addresses
52     @param client_index - opaque cookie to identify the sender
53     @param context - sender context, to match reply w/ request
54 */
55 define snat_address_dump {
56   u32 client_index;
57   u32 context;
58 };
59
60 /** \brief S-NAT address details response
61     @param context - sender context, to match reply w/ request
62     @param is_ip4 - 1 if address type is IPv4
63     @param ip_address - IP address
64     @param vrf_id - VRF id of tenant, ~0 means independent of VRF
65 */
66 define snat_address_details {
67   u32 context;
68   u8 is_ip4;
69   u8 ip_address[16];
70   u32 vrf_id;
71 };
72
73 /** \brief Enable/disable S-NAT feature on the interface
74     @param client_index - opaque cookie to identify the sender
75     @param context - sender context, to match reply w/ request
76     @param is_add - 1 if add, 0 if delete
77     @param is_inside - 1 if inside, 0 if outside
78     @param sw_if_index - software index of the interface
79 */
80 define snat_interface_add_del_feature {
81   u32 client_index;
82   u32 context;
83   u8 is_add;
84   u8 is_inside;
85   u32 sw_if_index;
86 };
87
88 /** \brief Enable/disable S-NAT feature on the interface reply
89     @param context - sender context, to match reply w/ request
90     @param retval - return code
91 */
92 define snat_interface_add_del_feature_reply {
93   u32 context;
94   i32 retval;
95 };
96
97 /** \brief Dump interfaces with S-NAT feature
98     @param client_index - opaque cookie to identify the sender
99     @param context - sender context, to match reply w/ request
100 */
101 define snat_interface_dump {
102   u32 client_index;
103   u32 context;
104 };
105
106 /** \brief S-NAT interface details response
107     @param context - sender context, to match reply w/ request
108     @param is_inside - 1 if inside, 0 if outside
109     @param sw_if_index - software index of the interface
110 */
111 define snat_interface_details {
112   u32 context;
113   u8 is_inside;
114   u32 sw_if_index;
115 };
116
117 /** \brief Add/delete S-NAT static mapping
118     @param client_index - opaque cookie to identify the sender
119     @param context - sender context, to match reply w/ request
120     @param is_add - 1 if add, 0 if delete
121     @param is_ip4 - 1 if address type is IPv4
122     @param addr_only - 1 if address only mapping
123     @param local_ip_address - local IP address
124     @param external_ip_address - external IP address
125     @param protocol - IP protocol
126     @param local_port - local port number
127     @param external_port - external port number
128     @param external_sw_if_index - external interface (if set
129                                   external_ip_address is ignored)
130     @param vfr_id - VRF ID
131 */
132 define snat_add_static_mapping {
133   u32 client_index;
134   u32 context;
135   u8 is_add;
136   u8 is_ip4;
137   u8 addr_only;
138   u8 local_ip_address[16];
139   u8 external_ip_address[16];
140   u8 protocol;
141   u16 local_port;
142   u16 external_port;
143   u32 external_sw_if_index;
144   u32 vrf_id;
145 };
146
147 /** \brief Add/delete S-NAT static mapping reply
148     @param context - sender context, to match reply w/ request
149     @param retval - return code
150 */
151 define snat_add_static_mapping_reply {
152   u32 context;
153   i32 retval;
154 };
155
156 /** \brief Dump S-NAT static mappings
157     @param client_index - opaque cookie to identify the sender
158     @param context - sender context, to match reply w/ request
159 */
160 define snat_static_mapping_dump {
161   u32 client_index;
162   u32 context;
163 };
164
165 /** \brief S-NAT static mapping details response
166     @param context - sender context, to match reply w/ request
167     @param is_ip4 - 1 if address type is IPv4
168     @param addr_only - 1 if address only mapping
169     @param local_ip_address - local IP address
170     @param external_ip_address - external IP address
171     @param protocol - IP protocol
172     @param local_port - local port number
173     @param external_port - external port number
174     @param external_sw_if_index - external interface
175     @param vfr_id - VRF ID
176 */
177 define snat_static_mapping_details {
178   u32 context;
179   u8 is_ip4;
180   u8 addr_only;
181   u8 local_ip_address[16];
182   u8 external_ip_address[16];
183   u8 protocol;
184   u16 local_port;
185   u16 external_port;
186   u32 external_sw_if_index;
187   u32 vrf_id;
188 };
189
190 /** \brief Control ping from client to api server request
191     @param client_index - opaque cookie to identify the sender
192     @param context - sender context, to match reply w/ request
193 */
194 define snat_control_ping
195 {
196   u32 client_index;
197   u32 context;
198 };
199
200 /** \brief Control ping from the client to the server response
201     @param client_index - opaque cookie to identify the sender
202     @param context - sender context, to match reply w/ request
203     @param retval - return code for the request
204     @param vpe_pid - the pid of the vpe, returned by the server
205 */
206 define snat_control_ping_reply
207 {
208   u32 context;
209   i32 retval;
210   u32 client_index;
211   u32 vpe_pid;
212 };
213
214 /** \brief Show S-NAT plugin startup config
215     @param client_index - opaque cookie to identify the sender
216     @param context - sender context, to match reply w/ request
217 */
218 define snat_show_config
219 {
220   u32 client_index;
221   u32 context;
222 };
223
224 /** \brief Show S-NAT plugin startup config reply
225     @param context - sender context, to match reply w/ request
226     @param retval - return code for the request
227     @param static_mapping_only - if 1 dynamic translations disabled
228     @param static_mapping_connection_tracking - if 1 create session data
229     @param deterministic - if 1 deterministic mapping
230     @param translation_buckets - number of translation hash buckets
231     @param translation_memory_size - translation hash memory size
232     @param user_buckets - number of user hash buckets
233     @param user_memory_size - user hash memory size
234     @param max_translations_per_user - maximum number of translations per user
235     @param outside_vrf_id - outside VRF id
236     @param inside_vrf_id - default inside VRF id
237 */
238 define snat_show_config_reply
239 {
240   u32 context;
241   i32 retval;
242   u8 static_mapping_only;
243   u8 static_mapping_connection_tracking;
244   u8 deterministic;
245   u32 translation_buckets;
246   u32 translation_memory_size;
247   u32 user_buckets;
248   u32 user_memory_size;
249   u32 max_translations_per_user;
250   u32 outside_vrf_id;
251   u32 inside_vrf_id;
252 };
253
254 /** \brief Set S-NAT workers
255     @param client_index - opaque cookie to identify the sender
256     @param context - sender context, to match reply w/ request
257     @param worker_mask - S-NAT workers mask
258 */
259 define snat_set_workers {
260   u32 client_index;
261   u32 context;
262   u64 worker_mask;
263 };
264
265 /** \brief Set S-NAT workers reply
266     @param context - sender context, to match reply w/ request
267     @param retval - return code
268 */
269 define snat_set_workers_reply {
270   u32 context;
271   i32 retval;
272 };
273
274 /** \brief Dump S-NAT workers
275     @param client_index - opaque cookie to identify the sender
276     @param context - sender context, to match reply w/ request
277 */
278 define snat_worker_dump {
279   u32 client_index;
280   u32 context;
281 };
282
283 /** \brief S-NAT workers details response
284     @param context - sender context, to match reply w/ request
285     @param worker_index - worker index
286     @param lcore_id - lcore ID
287     @param name - worker name
288 */
289 define snat_worker_details {
290   u32 context;
291   u32 worker_index;
292   u32 lcore_id;
293   u8 name[64];
294 };
295
296 /** \brief Add/delete S-NAT pool address from specific interfce
297     @param client_index - opaque cookie to identify the sender
298     @param context - sender context, to match reply w/ request
299     @param is_add - 1 if add, 0 if delete
300     @param sw_if_index - software index of the interface
301 */
302 define snat_add_del_interface_addr {
303   u32 client_index;
304   u32 context;
305   u8 is_add;
306   u8 is_inside;
307   u32 sw_if_index;
308 };
309
310 /** \brief Add/delete S-NAT pool address from specific interfce reply
311     @param context - sender context, to match reply w/ request
312     @param retval - return code
313 */
314 define snat_add_del_interface_addr_reply {
315   u32 context;
316   i32 retval;
317 };
318
319 /** \brief Dump S-NAT pool addresses interfaces
320     @param client_index - opaque cookie to identify the sender
321     @param context - sender context, to match reply w/ request
322 */
323 define snat_interface_addr_dump {
324   u32 client_index;
325   u32 context;
326 };
327
328 /** \brief S-NAT pool addresses interfaces details response
329     @param context - sender context, to match reply w/ request
330     @param sw_if_index - software index of the interface
331 */
332 define snat_interface_addr_details {
333   u32 context;
334   u32 sw_if_index;
335 };
336
337 /** \brief Enable/disable S-NAT IPFIX logging
338     @param client_index - opaque cookie to identify the sender
339     @param context - sender context, to match reply w/ request
340     @param domain_id - observation domain ID
341     @param src_port - source port number
342     @param enable - 1 if enable, 0 if disable
343 */
344 define snat_ipfix_enable_disable {
345   u32 client_index;
346   u32 context;
347   u32 domain_id;
348   u16 src_port;
349   u8 enable;
350 };
351
352 /** \brief Enable/disable S-NAT IPFIX logging reply
353     @param context - sender context, to match reply w/ request
354     @param retval - return code
355 */
356 define snat_ipfix_enable_disable_reply {
357   u32 context;
358   i32 retval;
359 };
360
361 /** \brief Dump S-NAT users
362     @param client_index - opaque cookie to identify the sender
363     @param context - sender context, to match reply w/ request
364 */
365 define snat_user_dump {
366   u32 client_index;
367   u32 context;
368 };
369
370 /** \brief S-NAT users response
371     @param context - sender context, to match reply w/ request
372     @vrf_id - VRF ID
373     @param is_ip4 - 1 if address type is IPv4
374     @param ip_adress - IP address
375     @param nsessions - number of dynamic sessions
376     @param nstaticsessions - number of static sessions
377 */
378 define snat_user_details {
379   u32 context;
380   u32 vrf_id;
381   u8 is_ip4;
382   u8 ip_address[16];
383   u32 nsessions;
384   u32 nstaticsessions;
385 };
386
387 /** \brief S-NAT user's sessions
388     @param client_index - opaque cookie to identify the sender
389     @param context - sender context, to match reply w/ request
390     @param user_ip - IP address of the user to dump
391     @param vrf_id - VRF_ID
392 */
393 define snat_user_session_dump {
394   u32 client_index;
395   u32 context;
396   u8 ip_address[16];
397   u32 vrf_id;
398 };
399
400 /** \brief S-NAT user's sessions response
401     @param context - sender context, to match reply w/ request
402     @param is_ip4 - 1 if address type is IPv4
403     @param outside_ip_address - outside IP address
404     @param outside_port - outside port
405     @param inside_ip_address - inside IP address
406     @param inside_port - inside port
407     @param protocol - protocol
408     @param is_static - 1 if session is static
409     @param last_heard - last heard timer
410     @param total_bytes - count of bytes sent through session
411     @param total_pkts - count of pakets sent through session
412 */
413 define snat_user_session_details {
414   u32 context;
415   u8 is_ip4;
416   u8 outside_ip_address[16];
417   u16 outside_port;
418   u8 inside_ip_address[16];
419   u16 inside_port;
420   u16 protocol;
421   u8 is_static;
422   u64 last_heard;
423   u64 total_bytes;
424   u32 total_pkts;
425 };
426
427 /** \brief Add/delete S-NAT deterministic mapping
428     @param client_index - opaque cookie to identify the sender
429     @param context - sender context, to match reply w/ request
430     @param is_add - 1 if add, 0 if delete
431     @param is_ip4 - 1 if address type is IPv4
432     @param in_addr - inside IP address
433     @param in_plen - inside IP address prefix length
434     @param out_addr - outside IP address
435     @param out_addr - outside IP address prefix length
436 */
437 define snat_add_det_map {
438   u32 client_index;
439   u32 context;
440   u8 is_add;
441   u8 is_ip4;
442   u8 addr_only;
443   u8 in_addr[16];
444   u8 in_plen;
445   u8 out_addr[16];
446   u8 out_plen;
447 };
448
449 /** \brief Add/delete S-NAT deterministic mapping reply
450     @param context - sender context, to match reply w/ request
451     @param retval - return code
452 */
453 define snat_add_det_map_reply {
454   u32 context;
455   i32 retval;
456 };
457
458 /** \brief Get outside address and port range from inside address
459     @param client_index - opaque cookie to identify the sender
460     @param context - sender context, to match reply w/ request
461     @param is_ip4 - 1 if address type is IPv4
462     @param in_addr - inside IP address
463 */
464 define snat_det_forward {
465   u32 client_index;
466   u32 context;
467   u8 is_ip4;
468   u8 in_addr[16];
469 };
470
471 /** \brief Get outside address and port range from inside address
472     @param context - sender context, to match reply w/ request
473     @param retval - return code
474     @param out_port_lo - outside port range start
475     @param out_port_hi - outside port range end
476     @param is_ip4 - 1 if address type is IPv4
477     @param out_addr - outside IP address
478 */
479 define snat_det_forward_reply {
480   u32 context;
481   i32 retval;
482   u16 out_port_lo;
483   u16 out_port_hi;
484   u8 is_ip4;
485   u8 out_addr[16];
486 };
487
488 /** \brief Get inside address from outside address and port
489     @param client_index - opaque cookie to identify the sender
490     @param context - sender context, to match reply w/ request
491     @param out_port - outside port
492     @param is_ip4 - 1 if address type is IPv4
493     @param out_addr - outside IP address
494 */
495 define snat_det_reverse {
496   u32 client_index;
497   u32 context;
498   u16 out_port;
499   u8 is_ip4;
500   u8 out_addr[16];
501 };
502
503 /** \brief Get inside address from outside address and port reply
504     @param context - sender context, to match reply w/ request
505     @param retval - return code
506     @param is_ip4 - 1 if address type is IPv4
507     @param in_addr - inside IP address
508 */
509 define snat_det_reverse_reply {
510   u32 context;
511   i32 retval;
512   u8 is_ip4;
513   u8 in_addr[16];
514 };