ip: use explicit types in api
[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 IP neighbor flags
193     @param is_static - A static neighbor Entry - there are not flushed
194                        If the interface goes down.
195     @param is_no_fib_entry - Do not create a corresponding entry in the FIB
196                            table for the neighbor.
197 */
198 enum ip_neighbor_flags
199 {
200   IP_API_NEIGHBOR_FLAG_NONE = 0,
201   IP_API_NEIGHBOR_FLAG_STATIC = 0x1,
202   IP_API_NEIGHBOR_FLAG_NO_FIB_ENTRY = 0x2,
203 };
204
205 /** \brief IP neighbor
206     @param sw_if_index - interface used to reach neighbor
207     @param mac_address - l2 address of the neighbor
208     @param ip_address - ip4 or ip6 address of the neighbor
209     @param flags - flags for the nieghbor
210 */
211 typedef ip_neighbor {
212   vl_api_interface_index_t sw_if_index;
213   vl_api_ip_neighbor_flags_t flags;
214   vl_api_mac_address_t mac_address;
215   vl_api_address_t ip_address;
216 };
217
218 /** \brief IP neighbor add / del request
219     @param client_index - opaque cookie to identify the sender
220     @param context - sender context, to match reply w/ request
221     @param is_add - 1 to add neighbor, 0 to delete
222     @param neighbor - the neighor to add/remove
223 */
224 define ip_neighbor_add_del
225 {
226   u32 client_index;
227   u32 context;
228   /* 1 = add, 0 = delete */
229   bool is_add;
230   vl_api_ip_neighbor_t neighbor;
231 };
232 define ip_neighbor_add_del_reply
233 {
234   u32 context;
235   i32 retval;
236   u32 stats_index;
237 };
238
239 /** \brief Dump IP neighboors
240     @param client_index - opaque cookie to identify the sender
241     @param context - sender context, to match reply w/ request
242     @param sw_if_index - the interface to dump neighboors, ~0 == all
243     @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
244 */
245 define ip_neighbor_dump
246 {
247   u32 client_index;
248   u32 context;
249   vl_api_interface_index_t sw_if_index;
250   bool is_ipv6;
251 };
252
253 /** \brief IP neighboors dump response
254     @param context - sender context which was passed in the request
255     @param neighbour - the neighbor
256 */
257 define ip_neighbor_details {
258   u32 context;
259   vl_api_ip_neighbor_t neighbor;
260 };
261
262 /** \brief Set the ip flow hash config for a fib request
263     @param client_index - opaque cookie to identify the sender
264     @param context - sender context, to match reply w/ request
265     @param vrf_id - vrf/fib id
266     @param is_ipv6 - if non-zero the fib is ip6, else ip4
267     @param src - if non-zero include src in flow hash
268     @param dst - if non-zero include dst in flow hash
269     @param sport - if non-zero include sport in flow hash
270     @param dport - if non-zero include dport in flow hash
271     @param proto -if non-zero include proto in flow hash
272     @param reverse - if non-zero include reverse in flow hash
273     @param symmetric - if non-zero include symmetry in flow hash
274 */
275 autoreply define set_ip_flow_hash
276 {
277   u32 client_index;
278   u32 context;
279   u32 vrf_id;
280   bool is_ipv6;
281   u8 src;
282   u8 dst;
283   u8 sport;
284   u8 dport;
285   u8 proto;
286   u8 reverse;
287   u8 symmetric;
288 };
289
290 /** \brief IPv6 router advertisement config request
291     @param client_index - opaque cookie to identify the sender
292     @param context - sender context, to match reply w/ request
293     @param suppress -
294     @param managed -
295     @param other -
296     @param ll_option -
297     @param send_unicast -
298     @param cease -
299     @param is_no -
300     @param default_router -
301     @param max_interval -
302     @param min_interval -
303     @param lifetime -
304     @param initial_count -
305     @param initial_interval -
306 */
307 autoreply define sw_interface_ip6nd_ra_config
308 {
309   u32 client_index;
310   u32 context;
311   vl_api_interface_index_t sw_if_index;
312   u8 suppress;
313   u8 managed;
314   u8 other;
315   u8 ll_option;
316   u8 send_unicast;
317   u8 cease;
318   bool is_no;
319   u8 default_router;
320   u32 max_interval;
321   u32 min_interval;
322   u32 lifetime;
323   u32 initial_count;
324   u32 initial_interval;
325 };
326
327 /** \brief IPv6 router advertisement prefix config request
328     @param client_index - opaque cookie to identify the sender
329     @param context - sender context, to match reply w/ request
330     @param sw_if_index - The interface the RA prefix information is for
331     @param prefix - The prefix to advertise
332     @param use_default - Revert to default settings
333     @param no_advertise - Do not advertise this prefix
334     @param off_link - The prefix is off link (it is not configured on the interface)
335                       Configures the L-flag, When set, indicates that this
336                       prefix can be used for on-link determination.
337     @param no_autoconfig - Setting for the A-flag. When
338                            set indicates that this prefix can be used for
339                           stateless address configuration.
340     @param no_onlink - The prefix is not on link. Make sure this is consistent
341                        with the off_link parameter else YMMV
342     @param is_no - add/delete
343     @param val_lifetime - The length of time in
344                      seconds (relative to the time the packet is sent)
345                      that the prefix is valid for the purpose of on-link
346                      determination.  A value of all one bits
347                      (0xffffffff) represents infinity
348     @param pref_lifetime - The length of time in
349                      seconds (relative to the time the packet is sent)
350                      that addresses generated from the prefix via
351                      stateless address autoconfiguration remain
352                      preferred [ADDRCONF].  A value of all one bits
353                      (0xffffffff) represents infinity.
354 */
355 autoreply define sw_interface_ip6nd_ra_prefix
356 {
357   u32 client_index;
358   u32 context;
359   vl_api_interface_index_t sw_if_index;
360   vl_api_prefix_t prefix;
361   bool use_default;
362   bool no_advertise;
363   bool off_link;
364   bool no_autoconfig;
365   bool no_onlink;
366   bool is_no;
367   u32 val_lifetime;
368   u32 pref_lifetime;
369 };
370
371 /** \brief IPv6 ND proxy config
372     @param client_index - opaque cookie to identify the sender
373     @param context - sender context, to match reply w/ request
374     @param sw_if_index - The interface the host is on
375     @param address - The address of the host for which to proxy for
376     @param is_add - Adding or deleting
377 */
378 autoreply define ip6nd_proxy_add_del
379 {
380   u32 client_index;
381   u32 context;
382   vl_api_interface_index_t sw_if_index;
383   bool is_del;
384   vl_api_ip6_address_t ip;
385 };
386
387 /** \brief IPv6 ND proxy details returned after request
388     @param context - sender context, to match reply w/ request
389     @param retval - return code for the request
390 */
391 define ip6nd_proxy_details
392 {
393   u32 context;
394   vl_api_interface_index_t sw_if_index;
395   vl_api_ip6_address_t ip;
396 };
397
398 /** \brief IPv6 ND proxy dump request
399     @param context - sender context, to match reply w/ request
400     @param retval - return code for the request
401     @param sw_if_index - The interface the host is on
402     @param address - The address of the host for which to proxy for
403 */
404 define ip6nd_proxy_dump
405 {
406   u32 client_index;
407   u32 context;
408 };
409
410 /** \brief Start / stop sending router solicitation
411     @param client_index - opaque cookie to identify the sender
412     @param context - sender context, to match reply w/ request
413     @param irt - initial retransmission time
414     @param mrt - maximum retransmission time
415     @param mrc - maximum retransmission count
416     @param mrd - maximum retransmission duration
417     @param sw_if_index - software interface index of interface
418                          for sending router solicitation
419     @param stop - if non-zero then stop sending router solicitation,
420                   otherwise start sending router solicitation
421 */
422 autoreply define ip6nd_send_router_solicitation
423 {
424   u32 client_index;
425   u32 context;
426   u32 irt;
427   u32 mrt;
428   u32 mrc;
429   u32 mrd;
430   u32 sw_if_index;
431   bool stop;
432 };
433
434 /** \brief IPv6 interface enable / disable request
435     @param client_index - opaque cookie to identify the sender
436     @param context - sender context, to match reply w/ request
437     @param sw_if_index - interface used to reach neighbor
438     @param enable - if non-zero enable ip6 on interface, else disable
439 */
440 autoreply define sw_interface_ip6_enable_disable
441 {
442   u32 client_index;
443   u32 context;
444   vl_api_interface_index_t sw_if_index;
445   bool enable;                  /* set to true if enable */
446 };
447
448 /** \brief IPv6 set link local address on interface request
449     @param client_index - opaque cookie to identify the sender
450     @param context - sender context, to match reply w/ request
451     @param sw_if_index - interface to set link local on
452     @param address[] - the new link local address
453 */
454 autoreply define sw_interface_ip6_set_link_local_address
455 {
456   u32 client_index;
457   u32 context;
458   vl_api_interface_index_t sw_if_index;
459   vl_api_ip6_address_t address;
460 };
461
462 /** \brief Dump IP multicast fib table
463     @param client_index - opaque cookie to identify the sender
464 */
465 define ip_mtable_dump
466 {
467   u32 client_index;
468   u32 context;
469 };
470 define ip_mtable_details
471 {
472   u32 client_index;
473   u32 context;
474   vl_api_ip_table_t table;
475 };
476
477 /** \brief Add / del route request
478
479     Adds a route, consisting both of the MFIB entry to match packets
480     (which may already exist) and a path to send those packets down.
481     Routes can be entered repeatedly to add multiple paths.  Deletions are
482     per-path.
483
484     @param client_index - opaque cookie to identify the sender
485     @param context - sender context, to match reply w/ request
486     @param table_id - fib table /vrf associated with the route
487     @param is_add - true if adding a route; false if deleting one
488     @param is_ipv6 - true iff all the addresses are v6
489     @param entry_flags - see fib_entry_flag_t
490     @param itf_flags - see mfib_entry_flags_t
491     @param next_hop_afi - see dpo_proto_t; the type of destination description
492     @param src_address - the source of the packet
493     @param grp_address - the group the packet is destined to
494     @param nh_address - the nexthop to forward the packet to
495     @param next_hop_sw_if_index - interface to emit packet on
496
497     BIER AFIs use the BIER imposition ID.  v4 and v6 AFIs use either the
498     interface or the nexthop address.
499
500     Note that if the route is source-specific (S is supplied, not all 0s),
501     the prefix match is treated as exact (prefixlen /32 or /128).
502
503     FIXME not complete yet
504 */
505 typedef ip_mroute
506 {
507   u32 table_id;
508   u32 entry_flags;
509   u32 rpf_id;
510   vl_api_mprefix_t prefix;
511   u8 n_paths;
512   vl_api_mfib_path_t paths[n_paths];
513 };
514
515 define ip_mroute_add_del
516 {
517   u32 client_index;
518   u32 context;
519   bool is_add;
520   bool is_multipath;
521   vl_api_ip_mroute_t route;
522 };
523 define ip_mroute_add_del_reply
524 {
525   u32 context;
526   i32 retval;
527   u32 stats_index;
528 };
529
530 /** \brief Dump IP multicast fib table
531     @param table - The table from which to dump routes (ony ID an AF are needed)
532 */
533 define ip_mroute_dump
534 {
535   u32 client_index;
536   u32 context;
537   vl_api_ip_table_t table;
538 };
539
540 /** \brief IP Multicast Route Details
541     @param route - Details of the route
542 */
543 manual_endian manual_print define ip_mroute_details
544 {
545   u32 context;
546   vl_api_ip_mroute_t route;
547 };
548
549 define ip_address_details
550 {
551   u32 context;
552   vl_api_interface_index_t sw_if_index;
553   vl_api_address_with_prefix_t prefix;
554 };
555
556 define ip_address_dump
557 {
558   u32 client_index;
559   u32 context;
560   vl_api_interface_index_t sw_if_index;
561   bool is_ipv6;
562 };
563
564 /** \brief IP unnumbered configurations
565     @param sw_if_index The interface that has unnumbered configuration
566     @param ip_sw_if_index The IP interface that it is unnnumbered to
567 */
568 define ip_unnumbered_details
569 {
570   u32 context;
571   vl_api_interface_index_t sw_if_index;
572   vl_api_interface_index_t ip_sw_if_index;
573 };
574
575 /** \brief Dump IP unnumbered configurations
576     @param sw_if_index ~0 for all interfaces, else the interface desired
577 */
578 define ip_unnumbered_dump
579 {
580   u32 client_index;
581   u32 context;
582   vl_api_interface_index_t sw_if_index;
583 };
584
585 define ip_details
586 {
587   u32 context;
588   vl_api_interface_index_t sw_if_index;
589   bool is_ipv6;
590 };
591
592 define ip_dump
593 {
594   u32 client_index;
595   u32 context;
596   bool is_ipv6;
597 };
598
599 define mfib_signal_dump
600 {
601   u32 client_index;
602   u32 context;
603 };
604
605 define mfib_signal_details
606 {
607   u32 context;
608   vl_api_interface_index_t sw_if_index;
609   u32 table_id;
610   vl_api_mprefix_t prefix;
611   u16 ip_packet_len;
612   u8 ip_packet_data[256];
613 };
614
615 /** \brief IP punt policer
616     @param client_index - opaque cookie to identify the sender
617     @param context - sender context, to match reply w/ request
618     @param is_add - 1 to add neighbor, 0 to delete
619     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
620     @param policer_index - Index of policer to use
621 */
622 autoreply define ip_punt_police
623 {
624   u32 client_index;
625   u32 context;
626   u32 policer_index;
627   bool is_add;
628   bool is_ip6;
629 };
630
631 /** \brief Punt redirect type
632     @param rx_sw_if_index - specify the original RX interface of traffic
633                             that should be redirected. ~0 means any interface.
634     @param tx_sw_if_index - the TX interface to which traffic shoulde be
635                             redirected.
636     @param nh - the next-hop to redirect the traffic to.
637     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
638 */
639 typedef punt_redirect
640 {
641   vl_api_interface_index_t rx_sw_if_index;
642   vl_api_interface_index_t tx_sw_if_index;
643   vl_api_address_t nh;
644 };
645
646 /** \brief IP punt redirect
647     @param client_index - opaque cookie to identify the sender
648     @param context - sender context, to match reply w/ request
649     @param punt - punt definition
650     @param is_add - 1 to add neighbor, 0 to delete
651 */
652 autoreply define ip_punt_redirect
653 {
654   u32 client_index;
655   u32 context;
656   vl_api_punt_redirect_t punt;
657   bool is_add;
658 };
659
660 define ip_punt_redirect_dump
661 {
662   u32 client_index;
663   u32 context;
664   vl_api_interface_index_t sw_if_index;
665   bool is_ipv6;
666 };
667
668 define ip_punt_redirect_details
669 {
670   u32 context;
671   vl_api_punt_redirect_t punt;
672 };
673
674 autoreply define ip_container_proxy_add_del
675 {
676   u32 client_index;
677   u32 context;
678   vl_api_prefix_t pfx;
679   vl_api_interface_index_t sw_if_index;
680   bool is_add;
681 };
682
683 define ip_container_proxy_dump
684 {
685   u32 client_index;
686   u32 context;
687 };
688
689 define ip_container_proxy_details
690 {
691   u32 context;
692   vl_api_interface_index_t sw_if_index;
693   vl_api_prefix_t prefix;
694 };
695
696 /** \brief Configure IP source and L4 port-range check
697     @param client_index - opaque cookie to identify the sender
698     @param context - sender context, to match reply w/ request
699     @param is_ip6 - 1 if source address type is IPv6
700     @param is_add - 1 if add, 0 if delete
701     @param ip - prefix to match
702     @param number_of_ranges - length of low_port and high_port arrays (must match)
703     @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
704     @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
705     @param vrf_id - fib table/vrf id to associate the source and port-range check with
706     @note To specify a single port set low_port and high_port entry the same
707 */
708 autoreply define ip_source_and_port_range_check_add_del
709 {
710   u32 client_index;
711   u32 context;
712   bool is_add;
713   vl_api_prefix_t prefix;
714   u8 number_of_ranges;
715   u16 low_ports[32];
716   u16 high_ports[32];
717   u32 vrf_id;
718 };
719
720 /** \brief Set interface source and L4 port-range request
721     @param client_index - opaque cookie to identify the sender
722     @param context - sender context, to match reply w/ request
723     @param interface_id - interface index
724     @param tcp_vrf_id - VRF associated with source and TCP port-range check
725     @param udp_vrf_id - VRF associated with source and TCP port-range check
726 */
727 autoreply define ip_source_and_port_range_check_interface_add_del
728 {
729   u32 client_index;
730   u32 context;
731   bool is_add;
732   vl_api_interface_index_t sw_if_index;
733   u32 tcp_in_vrf_id;
734   u32 tcp_out_vrf_id;
735   u32 udp_in_vrf_id;
736   u32 udp_out_vrf_id;
737 };
738
739 /** \brief Set interface source check request
740     @param client_index - opaque cookie to identify the sender
741     @param context - sender context, to match reply w/ request
742     @param is_add - add or del
743     @param loose - strict or loose
744     @param sw_if_index - interface index
745 */
746 autoreply define ip_source_check_interface_add_del
747 {
748   u32 client_index;
749   u32 context;
750   bool is_add;
751   u8 loose;
752   vl_api_interface_index_t sw_if_index;
753 };
754
755 /** \brief Enable/disable periodic IP neighbor scan
756     @param client_index - opaque cookie to identify the sender
757     @param context - sender context, to match reply w/ request
758     @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
759     @param scan_interval - neighbor scan interval in minutes, 0: default to 1
760     @param max_proc_time - max processing time per run in usec, 0: default to 20
761     @param max_update - max neighbor probe/delete per run, 0: default to 10
762     @param scan_int_delay - delay in msec to resume scan if exceed max proc
763                             time or update, 0: default to 1
764     @param stale_threshold - threshold in minutes for neighbor deletion, 
765                              0: default to 4*scan_interval
766 */
767 autoreply define ip_scan_neighbor_enable_disable
768 {
769   u32 client_index;
770   u32 context;
771   u8 mode;
772   u8 scan_interval;
773   u8 max_proc_time;
774   u8 max_update;
775   u8 scan_int_delay;
776   u8 stale_threshold;
777 };
778
779 /** \brief IP probe neighbor address on an interface by sending an
780            ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
781     @param client_index - opaque cookie to identify the sender
782     @param context - sender context, to match reply w/ request
783     @param sw_if_index - interface index
784     @param dst - target IP address to send IP addr resolution request
785 */
786 autoreply define ip_probe_neighbor
787 {
788   u32 client_index;
789   u32 context;
790   vl_api_interface_index_t sw_if_index;
791   vl_api_address_t dst;
792 };
793
794 /** \brief Register for IP4 ARP resolution event on receing ARP reply or
795            MAC/IP info from ARP requests in L2 BDs
796     @param client_index - opaque cookie to identify the sender
797     @param context - sender context, to match reply w/ request
798     @param enable_disable - 1 => register for events, 0 => cancel registration
799     @param pid - sender's pid
800     @param ip - exact IP4 address of interested arp resolution event, or
801                 0 to get MAC/IP info from ARP requests in BDs
802 */
803 autoreply define want_ip4_arp_events
804 {
805   u32 client_index;
806   u32 context;
807   bool enable_disable;
808   u32 pid;
809   vl_api_ip4_address_t ip;
810 };
811
812 /** \brief Tell client about an IP4 ARP resolution event or
813            MAC/IP info from ARP requests in L2 BDs
814     @param client_index - opaque cookie to identify the sender
815     @param ip - the exact ip4 address of interest
816     @param pid - client pid registered to receive notification
817     @param sw_if_index - interface which received ARP packet
818     @param mac - the new mac address 
819     @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
820 */
821 define ip4_arp_event
822 {
823   u32 client_index;
824   vl_api_ip4_address_t ip;
825   u32 pid;
826   vl_api_interface_index_t sw_if_index;
827   vl_api_mac_address_t mac;
828   u8 mac_ip;
829 };
830
831 service {
832   rpc want_ip4_arp_events returns want_ip4_arp_events_reply
833     events ip4_arp_event;
834 };
835
836 /** \brief Register for IP6 ND resolution event on recieving NA reply
837            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
838     @param client_index - opaque cookie to identify the sender
839     @param context - sender context, to match reply w/ request
840     @param enable_disable - 1 => register for events, 0 => cancel registration
841     @param pid - sender's pid
842     @param ip - the exact IP6 address of interested ND resolution event, or
843                 0 to get MAC/IP info from ICMP6 NS in L2 BDs.
844 */
845 autoreply define want_ip6_nd_events
846 {
847   u32 client_index;
848   u32 context;
849   bool enable_disable;
850   u32 pid;
851   vl_api_ip6_address_t ip;
852 };
853
854 /** \brief Tell client about an IP6 ND resolution or
855            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
856     @param client_index - opaque cookie to identify the sender
857     @param pid - client pid registered to receive notification
858     @param sw_if_index - interface which received ARP packet
859     @param ip - the exact ip6 address of interest
860     @param new_mac - the new mac address 
861     @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
862 */
863 define ip6_nd_event
864 {
865   u32 client_index;
866   u32 pid;
867   vl_api_interface_index_t sw_if_index;
868   vl_api_ip6_address_t ip;
869   vl_api_mac_address_t mac;
870   u8 mac_ip;
871 };
872
873 service {
874   rpc want_ip6_ra_events returns want_ip6_ra_events_reply
875     events ip6_ra_event;
876 };
877
878 /** \brief Register for ip6 router advertisement events
879     @param client_index - opaque cookie to identify the sender
880     @param context - sender context, to match reply w/ request
881     @param enable_disable - 1 => register for events, 0 => cancel registration
882     @param pid - sender's pid
883 */
884 autoreply define want_ip6_ra_events
885 {
886   u32 client_index;
887   u32 context;
888   bool enable_disable;
889   u32 pid;
890 };
891
892 /** \brief Struct representing RA prefix info
893     @param prefix - RA prefix info destination address
894     @param flags - RA prefix info flags
895     @param valid_time - RA prefix info valid time
896     @param preferred_time - RA prefix info preferred time
897 */
898 typedef ip6_ra_prefix_info
899 {
900   vl_api_prefix_t prefix;
901   u8 flags;
902   u32 valid_time;
903   u32 preferred_time;
904 };
905
906 /** \brief Tell client about a router advertisement event
907     @param client_index - opaque cookie to identify the sender
908     @param pid - client pid registered to receive notification
909     @param current_hop_limit - RA current hop limit
910     @param flags - RA flags
911     @param router_lifetime_in_sec - RA lifetime in seconds
912     @param router_addr - The router's address
913     @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
914     @param time_in_msec_between_retransmitted_neighbor_solicitations -
915                time in msec between retransmitted neighbor solicitations
916     @param n_prefixes -
917     @param prefixes -
918 */
919 define ip6_ra_event
920 {
921   u32 client_index;
922   u32 pid;
923   vl_api_interface_index_t sw_if_index;
924   vl_api_ip6_address_t router_addr;
925   u8 current_hop_limit;
926   u8 flags;
927   u16 router_lifetime_in_sec;
928   u32 neighbor_reachable_time_in_msec;
929   u32 time_in_msec_between_retransmitted_neighbor_solicitations;
930   u32 n_prefixes;
931   vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
932 };
933
934 service {
935   rpc want_ip6_nd_events returns want_ip6_nd_events_reply
936     events ip6_nd_event;
937 };
938
939 /** \brief Proxy ARP configuration type
940     @param table_id - VRF / Fib table ID
941     @param low - Low address of the Proxy ARP range
942     @param hi - High address of the Proxy ARP range
943 */
944 typedef proxy_arp
945 {
946   u32 table_id;
947   vl_api_ip4_address_t low;
948   vl_api_ip4_address_t hi;
949 };
950
951 /** \brief Proxy ARP add / del request
952     @param client_index - opaque cookie to identify the sender
953     @param context - sender context, to match reply w/ request
954     @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
955     @param proxy - Proxy configuration
956 */
957 autoreply define proxy_arp_add_del
958 {
959   u32 client_index;
960   u32 context;
961   bool is_add;
962   vl_api_proxy_arp_t proxy;
963 };
964
965 /** \brief Proxy ARP dump request
966  */
967 define proxy_arp_dump
968 {
969   u32 client_index;
970   u32 context;
971 };
972
973 /** \brief Proxy ARP dump details reply
974  * @param proxy - Same data as used to configure
975  */
976 define proxy_arp_details
977 {
978   u32 context;
979   vl_api_proxy_arp_t proxy;
980 };
981
982 /** \brief Proxy ARP add / del interface request
983     @param client_index - opaque cookie to identify the sender
984     @param context - sender context, to match reply w/ request
985     @param sw_if_index - Which interface to enable / disable Proxy Arp on
986     @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
987 */
988 autoreply define proxy_arp_intfc_enable_disable
989 {
990   u32 client_index;
991   u32 context;
992   vl_api_interface_index_t sw_if_index;
993   /* 1 = on, 0 = off */
994   bool enable_disable;
995 };
996
997 /** \brief Proxy ARP interface dump request
998  */
999 define proxy_arp_intfc_dump
1000 {
1001   u32 client_index;
1002   u32 context;
1003 };
1004
1005 /** \brief Proxy ARP interface dump details reply
1006  * @param sw_if_index The interface on which ARP proxy is enabled.
1007  */
1008 define proxy_arp_intfc_details
1009 {
1010   u32 context;
1011   vl_api_interface_index_t sw_if_index;
1012 };
1013
1014 /** \brief Set max allowed ARP or ip6 neighbor entries request
1015     @param client_index - opaque cookie to identify the sender
1016     @param context - sender context, to match reply w/ request
1017     @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1018     @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1019 */
1020 autoreply define set_arp_neighbor_limit
1021 {
1022   u32 client_index;
1023   u32 context;
1024   bool is_ipv6;
1025   u32 arp_neighbor_limit;
1026 };
1027
1028 /** \brief IOAM enable : Enable in-band OAM
1029     @param id - profile id
1030     @param seqno - To enable Seqno Processing
1031     @param analyse - Enabling analysis of iOAM at decap node 
1032     @param pot_enable - Proof of Work enabled or not flag
1033     @param trace_enable - iOAM Trace enabled or not flag
1034 */
1035 autoreply define ioam_enable
1036 {
1037   u32 client_index;
1038   u32 context;
1039   u16 id;
1040   u8 seqno;
1041   u8 analyse;
1042   u8 pot_enable;
1043   u8 trace_enable;
1044   u32 node_id;
1045 };
1046
1047 /** \brief iOAM disable
1048     @param client_index - opaque cookie to identify the sender
1049     @param context - sender context, to match reply w/ request
1050     @param index - MAP Domain index
1051 */
1052 autoreply define ioam_disable
1053 {
1054   u32 client_index;
1055   u32 context;
1056   u16 id;
1057 };
1058
1059 enum ip_reass_type
1060 {
1061   IP_REASS_TYPE_FULL = 0,
1062   IP_REASS_TYPE_SHALLOW_VIRTUAL = 0x1,
1063 };
1064
1065 autoreply define ip_reassembly_set
1066 {
1067   u32 client_index;
1068   u32 context;
1069   u32 timeout_ms;
1070   u32 max_reassemblies;
1071   u32 max_reassembly_length;
1072   u32 expire_walk_interval_ms;
1073   bool is_ip6;
1074   vl_api_ip_reass_type_t type;
1075 };
1076
1077 define ip_reassembly_get
1078 {
1079   u32 client_index;
1080   u32 context;
1081   bool is_ip6;
1082   vl_api_ip_reass_type_t type;
1083 };
1084
1085 define ip_reassembly_get_reply
1086 {
1087   u32 context;
1088   i32 retval;
1089   u32 timeout_ms;
1090   u32 max_reassemblies;
1091   u32 max_reassembly_length;
1092   u32 expire_walk_interval_ms;
1093   bool is_ip6;
1094 };
1095
1096 /** \brief Enable/disable reassembly feature
1097     @param client_index - opaque cookie to identify the sender
1098     @param context - sender context, to match reply w/ request
1099     @param sw_if_index - interface to enable/disable feature on
1100     @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1101     @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1102 */
1103 autoreply define ip_reassembly_enable_disable
1104 {
1105   u32 client_index;
1106   u32 context;
1107   vl_api_interface_index_t sw_if_index;
1108   bool enable_ip4;
1109   bool enable_ip6;
1110   vl_api_ip_reass_type_t type;
1111 };
1112
1113 /*
1114  * Local Variables:
1115  * eval: (c-set-style "gnu")
1116  * End:
1117  */