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