ip: Protocol Independent IP Neighbors
[vpp.git] / src / vnet / ip / ip.api
1 /* Hey Emacs use -*- mode: C -*- */
2 /*
3  * Copyright (c) 2018 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /** \file
18
19     This file defines vpp IP control-plane API messages which are generally
20     called through a shared memory interface. 
21 */
22
23 option version = "3.0.0";
24
25 import "vnet/fib/fib_types.api";
26 import "vnet/ethernet/ethernet_types.api";
27 import "vnet/mfib/mfib_types.api";
28 import "vnet/interface_types.api";
29
30 /** \brief An IP table
31     @param is_ipv6 - V4 or V6 table
32     @param table_id - table ID associated with the route
33                      This table ID will apply to both the unicats
34                       and mlticast FIBs
35     @param name - A client provided name/tag for the table. If this is
36                   not set by the client, then VPP will generate something
37                   meaningfull.
38 */
39 typedef ip_table
40 {
41   u32 table_id;
42   bool is_ip6;
43   string name[64];
44 };
45
46 /** \brief Add / del table request
47            A table can be added multiple times, but need be deleted only once.
48     @param client_index - opaque cookie to identify the sender
49     @param context - sender context, to match reply w/ request
50 */
51 autoreply define ip_table_add_del
52 {
53   u32 client_index;
54   u32 context;
55   bool is_add;
56   vl_api_ip_table_t table;
57 };
58
59 /** \brief Dump IP all fib tables
60     @param client_index - opaque cookie to identify the sender
61     @param context - sender context, to match reply w/ request
62 */
63 define ip_table_dump
64 {
65   u32 client_index;
66   u32 context;
67 };
68
69 /** \brief IP table replace being
70
71     The use-case is that, for some unspecified reason, the control plane
72     has a very different set of entries it wants in the table than VPP
73     currently has. The CP would thus like to 'replace' VPP's current table
74     only by specifying what the new set of entries shall be, i.e. it is not
75     going to delete anything that already eixts.
76     the CP delcartes the start of this procedure with this begin_replace
77     API Call, and when it has populated all the entries it wants, it calls
78     the below end_replace API. From this point on it is of coursce free
79     to add and delete entries as usual.
80     The underlying mechanism by which VPP implements this replace is
81     purposefully left unspecified.
82
83     @param client_index - opaque cookie to identify the sender
84     @param context - sender context, to match reply w/ request
85     @param table - The table to resync
86 */
87 autoreply define ip_table_replace_begin
88 {
89   u32 client_index;
90   u32 context;
91   vl_api_ip_table_t table;
92 };
93
94 /** \brief IP table replace end
95
96     see replace start/
97
98     @param client_index - opaque cookie to identify the sender
99     @param context - sender context, to match reply w/ request
100     @param table - The table that has converged
101 */
102 autoreply define ip_table_replace_end
103 {
104   u32 client_index;
105   u32 context;
106   vl_api_ip_table_t table;
107 };
108
109 /** \brief IP table flush
110     Flush a table of all routes
111     @param client_index - opaque cookie to identify the sender
112     @param context - sender context, to match reply w/ request
113     @param table - The table to flush
114 */
115 autoreply define ip_table_flush
116 {
117   u32 client_index;
118   u32 context;
119   vl_api_ip_table_t table;
120 };
121
122 /** \brief IP FIB table response
123     @param context - sender context
124     @param table - description of the table
125 */
126 manual_endian manual_print define ip_table_details
127 {
128   u32 context;
129   vl_api_ip_table_t table;
130 };
131
132 /** \brief An IP route
133   @param table_id The IP table the route is in
134   @param stats_index The index of the route in the stats segment
135   @param prefix the prefix for the route
136   @param n_paths The number of paths the route has
137   @param paths The paths of the route
138 */
139 typedef ip_route
140 {
141   u32 table_id;
142   u32 stats_index;
143   vl_api_prefix_t prefix;
144   u8 n_paths;
145   vl_api_fib_path_t paths[n_paths];
146 };
147
148 /** \brief Add / del route request
149     @param client_index - opaque cookie to identify the sender
150     @param context - sender context, to match reply w/ request
151     @param is_multipath - Set to 1 if these paths will be added/removed
152                           to/from the existing set, or 0 to replace
153                           the existing set.
154                           is_add=0 & is_multipath=0 implies delete all paths
155     @param is_add - Are the paths being added or removed
156 */
157 define ip_route_add_del
158 {
159   u32 client_index;
160   u32 context;
161   bool is_add;
162   bool is_multipath;
163   vl_api_ip_route_t route;
164 };
165 define ip_route_add_del_reply
166 {
167   u32 context;
168   i32 retval;
169   u32 stats_index;
170 };
171
172 /** \brief Dump IP routes from a table
173     @param client_index - opaque cookie to identify the sender
174     @param table - The table from which to dump routes (ony ID an AF are needed)
175 */
176 define ip_route_dump
177 {
178   u32 client_index;
179   u32 context;
180   vl_api_ip_table_t table;
181 };
182
183 /** \brief IP FIB table entry response
184     @param route The route entry in the table
185 */
186 manual_endian manual_print define ip_route_details
187 {
188   u32 context;
189   vl_api_ip_route_t route;
190 };
191
192 /** \brief Set the ip flow hash config for a fib request
193     @param client_index - opaque cookie to identify the sender
194     @param context - sender context, to match reply w/ request
195     @param vrf_id - vrf/fib id
196     @param is_ipv6 - if non-zero the fib is ip6, else ip4
197     @param src - if non-zero include src in flow hash
198     @param dst - if non-zero include dst in flow hash
199     @param sport - if non-zero include sport in flow hash
200     @param dport - if non-zero include dport in flow hash
201     @param proto -if non-zero include proto in flow hash
202     @param reverse - if non-zero include reverse in flow hash
203     @param symmetric - if non-zero include symmetry in flow hash
204 */
205 autoreply define set_ip_flow_hash
206 {
207   u32 client_index;
208   u32 context;
209   u32 vrf_id;
210   bool is_ipv6;
211   u8 src;
212   u8 dst;
213   u8 sport;
214   u8 dport;
215   u8 proto;
216   u8 reverse;
217   u8 symmetric;
218 };
219
220 /** \brief IPv6 interface enable / disable request
221     @param client_index - opaque cookie to identify the sender
222     @param context - sender context, to match reply w/ request
223     @param sw_if_index - interface used to reach neighbor
224     @param enable - if non-zero enable ip6 on interface, else disable
225 */
226 autoreply define sw_interface_ip6_enable_disable
227 {
228   u32 client_index;
229   u32 context;
230   vl_api_interface_index_t sw_if_index;
231   bool enable;                  /* set to true if enable */
232 };
233
234 /** \brief Dump IP multicast fib table
235     @param client_index - opaque cookie to identify the sender
236 */
237 define ip_mtable_dump
238 {
239   u32 client_index;
240   u32 context;
241 };
242 define ip_mtable_details
243 {
244   u32 client_index;
245   u32 context;
246   vl_api_ip_table_t table;
247 };
248
249 /** \brief Add / del route request
250
251     Adds a route, consisting both of the MFIB entry to match packets
252     (which may already exist) and a path to send those packets down.
253     Routes can be entered repeatedly to add multiple paths.  Deletions are
254     per-path.
255
256     @param client_index - opaque cookie to identify the sender
257     @param context - sender context, to match reply w/ request
258     @param table_id - fib table /vrf associated with the route
259     @param is_add - true if adding a route; false if deleting one
260     @param is_ipv6 - true iff all the addresses are v6
261     @param entry_flags - see fib_entry_flag_t
262     @param itf_flags - see mfib_entry_flags_t
263     @param next_hop_afi - see dpo_proto_t; the type of destination description
264     @param src_address - the source of the packet
265     @param grp_address - the group the packet is destined to
266     @param nh_address - the nexthop to forward the packet to
267     @param next_hop_sw_if_index - interface to emit packet on
268
269     BIER AFIs use the BIER imposition ID.  v4 and v6 AFIs use either the
270     interface or the nexthop address.
271
272     Note that if the route is source-specific (S is supplied, not all 0s),
273     the prefix match is treated as exact (prefixlen /32 or /128).
274
275     FIXME not complete yet
276 */
277 typedef ip_mroute
278 {
279   u32 table_id;
280   u32 entry_flags;
281   u32 rpf_id;
282   vl_api_mprefix_t prefix;
283   u8 n_paths;
284   vl_api_mfib_path_t paths[n_paths];
285 };
286
287 define ip_mroute_add_del
288 {
289   u32 client_index;
290   u32 context;
291   bool is_add;
292   bool is_multipath;
293   vl_api_ip_mroute_t route;
294 };
295 define ip_mroute_add_del_reply
296 {
297   u32 context;
298   i32 retval;
299   u32 stats_index;
300 };
301
302 /** \brief Dump IP multicast fib table
303     @param table - The table from which to dump routes (ony ID an AF are needed)
304 */
305 define ip_mroute_dump
306 {
307   u32 client_index;
308   u32 context;
309   vl_api_ip_table_t table;
310 };
311
312 /** \brief IP Multicast Route Details
313     @param route - Details of the route
314 */
315 manual_endian manual_print define ip_mroute_details
316 {
317   u32 context;
318   vl_api_ip_mroute_t route;
319 };
320
321 define ip_address_details
322 {
323   u32 context;
324   vl_api_interface_index_t sw_if_index;
325   vl_api_address_with_prefix_t prefix;
326 };
327
328 define ip_address_dump
329 {
330   u32 client_index;
331   u32 context;
332   vl_api_interface_index_t sw_if_index;
333   bool is_ipv6;
334 };
335
336 /** \brief IP unnumbered configurations
337     @param sw_if_index The interface that has unnumbered configuration
338     @param ip_sw_if_index The IP interface that it is unnnumbered to
339 */
340 define ip_unnumbered_details
341 {
342   u32 context;
343   vl_api_interface_index_t sw_if_index;
344   vl_api_interface_index_t ip_sw_if_index;
345 };
346
347 /** \brief Dump IP unnumbered configurations
348     @param sw_if_index ~0 for all interfaces, else the interface desired
349 */
350 define ip_unnumbered_dump
351 {
352   u32 client_index;
353   u32 context;
354   vl_api_interface_index_t sw_if_index;
355 };
356
357 define ip_details
358 {
359   u32 context;
360   vl_api_interface_index_t sw_if_index;
361   bool is_ipv6;
362 };
363
364 define ip_dump
365 {
366   u32 client_index;
367   u32 context;
368   bool is_ipv6;
369 };
370
371 define mfib_signal_dump
372 {
373   u32 client_index;
374   u32 context;
375 };
376
377 define mfib_signal_details
378 {
379   u32 context;
380   vl_api_interface_index_t sw_if_index;
381   u32 table_id;
382   vl_api_mprefix_t prefix;
383   u16 ip_packet_len;
384   u8 ip_packet_data[256];
385 };
386
387 /** \brief IP punt policer
388     @param client_index - opaque cookie to identify the sender
389     @param context - sender context, to match reply w/ request
390     @param is_add - 1 to add neighbor, 0 to delete
391     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
392     @param policer_index - Index of policer to use
393 */
394 autoreply define ip_punt_police
395 {
396   u32 client_index;
397   u32 context;
398   u32 policer_index;
399   bool is_add;
400   bool is_ip6;
401 };
402
403 /** \brief Punt redirect type
404     @param rx_sw_if_index - specify the original RX interface of traffic
405                             that should be redirected. ~0 means any interface.
406     @param tx_sw_if_index - the TX interface to which traffic shoulde be
407                             redirected.
408     @param nh - the next-hop to redirect the traffic to.
409     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
410 */
411 typedef punt_redirect
412 {
413   vl_api_interface_index_t rx_sw_if_index;
414   vl_api_interface_index_t tx_sw_if_index;
415   vl_api_address_t nh;
416 };
417
418 /** \brief IP punt redirect
419     @param client_index - opaque cookie to identify the sender
420     @param context - sender context, to match reply w/ request
421     @param punt - punt definition
422     @param is_add - 1 to add neighbor, 0 to delete
423 */
424 autoreply define ip_punt_redirect
425 {
426   u32 client_index;
427   u32 context;
428   vl_api_punt_redirect_t punt;
429   bool is_add;
430 };
431
432 define ip_punt_redirect_dump
433 {
434   u32 client_index;
435   u32 context;
436   vl_api_interface_index_t sw_if_index;
437   bool is_ipv6;
438 };
439
440 define ip_punt_redirect_details
441 {
442   u32 context;
443   vl_api_punt_redirect_t punt;
444 };
445
446 autoreply define ip_container_proxy_add_del
447 {
448   u32 client_index;
449   u32 context;
450   vl_api_prefix_t pfx;
451   vl_api_interface_index_t sw_if_index;
452   bool is_add;
453 };
454
455 define ip_container_proxy_dump
456 {
457   u32 client_index;
458   u32 context;
459 };
460
461 define ip_container_proxy_details
462 {
463   u32 context;
464   vl_api_interface_index_t sw_if_index;
465   vl_api_prefix_t prefix;
466 };
467
468 /** \brief Configure IP source and L4 port-range check
469     @param client_index - opaque cookie to identify the sender
470     @param context - sender context, to match reply w/ request
471     @param is_ip6 - 1 if source address type is IPv6
472     @param is_add - 1 if add, 0 if delete
473     @param ip - prefix to match
474     @param number_of_ranges - length of low_port and high_port arrays (must match)
475     @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
476     @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
477     @param vrf_id - fib table/vrf id to associate the source and port-range check with
478     @note To specify a single port set low_port and high_port entry the same
479 */
480 autoreply define ip_source_and_port_range_check_add_del
481 {
482   u32 client_index;
483   u32 context;
484   bool is_add;
485   vl_api_prefix_t prefix;
486   u8 number_of_ranges;
487   u16 low_ports[32];
488   u16 high_ports[32];
489   u32 vrf_id;
490 };
491
492 /** \brief Set interface source and L4 port-range request
493     @param client_index - opaque cookie to identify the sender
494     @param context - sender context, to match reply w/ request
495     @param interface_id - interface index
496     @param tcp_vrf_id - VRF associated with source and TCP port-range check
497     @param udp_vrf_id - VRF associated with source and TCP port-range check
498 */
499 autoreply define ip_source_and_port_range_check_interface_add_del
500 {
501   u32 client_index;
502   u32 context;
503   bool is_add;
504   vl_api_interface_index_t sw_if_index;
505   u32 tcp_in_vrf_id;
506   u32 tcp_out_vrf_id;
507   u32 udp_in_vrf_id;
508   u32 udp_out_vrf_id;
509 };
510
511 /** \brief Set interface source check request
512     @param client_index - opaque cookie to identify the sender
513     @param context - sender context, to match reply w/ request
514     @param is_add - add or del
515     @param loose - strict or loose
516     @param sw_if_index - interface index
517 */
518 autoreply define ip_source_check_interface_add_del
519 {
520   u32 client_index;
521   u32 context;
522   bool is_add;
523   u8 loose;
524   vl_api_interface_index_t sw_if_index;
525 };
526
527 /** \brief IPv6 set link local address on interface request
528     @param client_index - opaque cookie to identify the sender
529     @param context - sender context, to match reply w/ request
530     @param sw_if_index - interface to set link local on
531     @param ip - the new link local address
532 */
533 autoreply define sw_interface_ip6_set_link_local_address
534 {
535   u32 client_index;
536   u32 context;
537   vl_api_interface_index_t sw_if_index;
538   vl_api_ip6_address_t ip;
539 };
540
541 /** \brief IOAM enable : Enable in-band OAM
542     @param id - profile id
543     @param seqno - To enable Seqno Processing
544     @param analyse - Enabling analysis of iOAM at decap node 
545     @param pot_enable - Proof of Work enabled or not flag
546     @param trace_enable - iOAM Trace enabled or not flag
547 */
548 autoreply define ioam_enable
549 {
550   u32 client_index;
551   u32 context;
552   u16 id;
553   u8 seqno;
554   u8 analyse;
555   u8 pot_enable;
556   u8 trace_enable;
557   u32 node_id;
558 };
559
560 /** \brief iOAM disable
561     @param client_index - opaque cookie to identify the sender
562     @param context - sender context, to match reply w/ request
563     @param index - MAP Domain index
564 */
565 autoreply define ioam_disable
566 {
567   u32 client_index;
568   u32 context;
569   u16 id;
570 };
571
572 enum ip_reass_type
573 {
574   IP_REASS_TYPE_FULL = 0,
575   IP_REASS_TYPE_SHALLOW_VIRTUAL = 0x1,
576 };
577
578 autoreply define ip_reassembly_set
579 {
580   u32 client_index;
581   u32 context;
582   u32 timeout_ms;
583   u32 max_reassemblies;
584   u32 max_reassembly_length;
585   u32 expire_walk_interval_ms;
586   bool is_ip6;
587   vl_api_ip_reass_type_t type;
588 };
589
590 define ip_reassembly_get
591 {
592   u32 client_index;
593   u32 context;
594   bool is_ip6;
595   vl_api_ip_reass_type_t type;
596 };
597
598 define ip_reassembly_get_reply
599 {
600   u32 context;
601   i32 retval;
602   u32 timeout_ms;
603   u32 max_reassemblies;
604   u32 max_reassembly_length;
605   u32 expire_walk_interval_ms;
606   bool is_ip6;
607 };
608
609 /** \brief Enable/disable reassembly feature
610     @param client_index - opaque cookie to identify the sender
611     @param context - sender context, to match reply w/ request
612     @param sw_if_index - interface to enable/disable feature on
613     @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
614     @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
615 */
616 autoreply define ip_reassembly_enable_disable
617 {
618   u32 client_index;
619   u32 context;
620   vl_api_interface_index_t sw_if_index;
621   bool enable_ip4;
622   bool enable_ip6;
623   vl_api_ip_reass_type_t type;
624 };
625
626 /*
627  * Local Variables:
628  * eval: (c-set-style "gnu")
629  * End:
630  */