Improve ip_mroute_add_del documentation
[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 = "1.3.0";
24 import "vnet/ip/ip_types.api";
25 import "vnet/fib/fib_types.api";
26 import "vnet/ethernet/ethernet_types.api";
27
28 /** \brief Add / del table request
29            A table can be added multiple times, but need be deleted only once.
30     @param client_index - opaque cookie to identify the sender
31     @param context - sender context, to match reply w/ request
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 unicats
35                       and mlticast 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                   meaningfull.
39 */
40 autoreply define ip_table_add_del
41 {
42   u32 client_index;
43   u32 context;
44   u32 table_id;
45   u8 is_ipv6;
46   u8 is_add;
47   u8 name[64];
48 };
49
50 /** \brief Dump IP fib table
51     @param client_index - opaque cookie to identify the sender
52 */
53 define ip_fib_dump
54 {
55   u32 client_index;
56   u32 context;
57 };
58
59 /** \brief IP FIB table response
60     @param table_id - IP fib table id
61     @address_length - mask length
62     @address - ip4 prefix
63     @param count - the number of fib_path in path
64     @param path  - array of of fib_path structures
65 */
66 manual_endian manual_print define ip_fib_details
67 {
68   u32 context;
69   u32 table_id;
70   u8  table_name[64];
71   u8  address_length;
72   u8  address[4];
73   u32 count;
74   u32 stats_index;
75   vl_api_fib_path_t path[count];
76 };
77
78 /** \brief Dump IP6 fib table
79     @param client_index - opaque cookie to identify the sender
80 */
81 define ip6_fib_dump
82 {
83   u32 client_index;
84   u32 context;
85 };
86
87 /** \brief IP6 FIB table entry response
88     @param table_id - IP6 fib table id
89     @param address_length - mask length
90     @param address - ip6 prefix
91     @param count - the number of fib_path in path
92     @param path  - array of of fib_path structures
93 */
94 manual_endian manual_print define ip6_fib_details
95 {
96   u32 context;
97   u32 table_id;
98   u8  table_name[64];
99   u8  address_length;
100   u8  address[16];
101   u32 count;
102   u32 stats_index;
103   vl_api_fib_path_t path[count];
104 };
105
106 /** \brief Dump IP neighboors
107     @param client_index - opaque cookie to identify the sender
108     @param context - sender context, to match reply w/ request
109     @param sw_if_index - the interface to dump neighboors, ~0 == all
110     @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
111 */
112 define ip_neighbor_dump
113 {
114     u32 client_index;
115     u32 context;
116     u32 sw_if_index;
117     u8  is_ipv6;
118 };
119
120 /** \brief IP neighboors dump response
121     @param context - sender context which was passed in the request
122     @param sw_if_index - The interface used to reach the neighbor
123     @param stats_index - An index in the stats segment that can be used to read
124                          the counters for this neighbour.
125     @param is_static - [1|0] to indicate if neighbor is statically configured
126     @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
127 */
128 define ip_neighbor_details {
129     u32 context;
130     u32 sw_if_index;
131     u32 stats_index;
132     u8  is_static;
133     u8  is_ipv6;
134     u8  mac_address[6];
135     u8  ip_address[16];
136 };
137
138 /** \brief IP neighbor add / del request
139     @param client_index - opaque cookie to identify the sender
140     @param context - sender context, to match reply w/ request
141     @param sw_if_index - interface used to reach neighbor
142     @param is_add - 1 to add neighbor, 0 to delete
143     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
144     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
145     @param is_static - A static neighbor Entry - there are not flushed
146                        If the interface goes down.
147     @param is_no_adj_fib - Do not create a corresponding entry in the FIB
148                            table for the neighbor.
149     @param mac_address - l2 address of the neighbor
150     @param dst_address - ip4 or ip6 address of the neighbor
151 */
152 define ip_neighbor_add_del
153 {
154   u32 client_index;
155   u32 context;
156   u32 sw_if_index;
157   /* 1 = add, 0 = delete */
158   u8 is_add;
159   u8 is_ipv6;
160   u8 is_static;
161   u8 is_no_adj_fib;
162   u8 mac_address[6];
163   u8 dst_address[16];
164 };
165
166 define ip_neighbor_add_del_reply
167 {
168   u32 context;
169   i32 retval;
170   u32 stats_index;
171 };
172
173 /** \brief Set the ip flow hash config for a fib request
174     @param client_index - opaque cookie to identify the sender
175     @param context - sender context, to match reply w/ request
176     @param vrf_id - vrf/fib id
177     @param is_ipv6 - if non-zero the fib is ip6, else ip4
178     @param src - if non-zero include src in flow hash
179     @param dst - if non-zero include dst in flow hash
180     @param sport - if non-zero include sport in flow hash
181     @param dport - if non-zero include dport in flow hash
182     @param proto -if non-zero include proto in flow hash
183     @param reverse - if non-zero include reverse in flow hash
184 */
185 autoreply define set_ip_flow_hash
186 {
187   u32 client_index;
188   u32 context;
189   u32 vrf_id;
190   u8 is_ipv6;
191   u8 src;
192   u8 dst;
193   u8 sport;
194   u8 dport;
195   u8 proto;
196   u8 reverse;
197 };
198
199 /** \brief IPv6 router advertisement config request
200     @param client_index - opaque cookie to identify the sender
201     @param context - sender context, to match reply w/ request
202     @param suppress -
203     @param managed -
204     @param other -
205     @param ll_option -
206     @param send_unicast -
207     @param cease -
208     @param is_no -
209     @param default_router -
210     @param max_interval -
211     @param min_interval -
212     @param lifetime -
213     @param initial_count -
214     @param initial_interval -
215 */
216 autoreply define sw_interface_ip6nd_ra_config
217 {
218   u32 client_index;
219   u32 context;
220   u32 sw_if_index;
221   u8 suppress;
222   u8 managed;
223   u8 other;
224   u8 ll_option;
225   u8 send_unicast;
226   u8 cease;
227   u8 is_no;
228   u8 default_router;
229   u32 max_interval;
230   u32 min_interval;
231   u32 lifetime;
232   u32 initial_count;
233   u32 initial_interval;
234 };
235
236 /** \brief IPv6 router advertisement prefix config request
237     @param client_index - opaque cookie to identify the sender
238     @param context - sender context, to match reply w/ request
239     @param sw_if_index - The interface the RA prefix information is for
240     @param address[] - The prefix to advertise
241     @param address_length - the prefix length
242     @param use_default - Revert to default settings
243     @param no_advertise - Do not advertise this prefix
244     @param off_link - The prefix is off link (it is not configured on the interface)
245                       Configures the L-flag, When set, indicates that this
246                       prefix can be used for on-link determination.
247     @param no_autoconfig - Setting for the A-flag. When
248                            set indicates that this prefix can be used for
249                           stateless address configuration.
250     @param no_onlink - The prefix is not on link. Make sure this is consistent
251                        with the off_link parameter else YMMV
252     @param is_no - add/delete
253     @param val_lifetime - The length of time in
254                      seconds (relative to the time the packet is sent)
255                      that the prefix is valid for the purpose of on-link
256                      determination.  A value of all one bits
257                      (0xffffffff) represents infinity
258     @param pref_lifetime - The length of time in
259                      seconds (relative to the time the packet is sent)
260                      that addresses generated from the prefix via
261                      stateless address autoconfiguration remain
262                      preferred [ADDRCONF].  A value of all one bits
263                      (0xffffffff) represents infinity.
264 */
265 autoreply define sw_interface_ip6nd_ra_prefix
266 {
267   u32 client_index;
268   u32 context;
269   u32 sw_if_index;
270   u8 address[16];
271   u8 address_length;
272   u8 use_default;
273   u8 no_advertise;
274   u8 off_link;
275   u8 no_autoconfig;
276   u8 no_onlink;
277   u8 is_no;
278   u32 val_lifetime;
279   u32 pref_lifetime;
280 };
281
282 /** \brief IPv6 ND proxy config
283     @param client_index - opaque cookie to identify the sender
284     @param context - sender context, to match reply w/ request
285     @param sw_if_index - The interface the host is on
286     @param address - The address of the host for which to proxy for
287     @param is_add - Adding or deleting
288 */
289 autoreply define ip6nd_proxy_add_del
290 {
291   u32 client_index;
292   u32 context;
293   u32 sw_if_index;
294   u8 is_del;
295   u8 address[16];
296 };
297
298 /** \brief IPv6 ND proxy details returned after request
299     @param context - sender context, to match reply w/ request
300     @param retval - return code for the request
301 */
302 define ip6nd_proxy_details
303 {
304   u32 context;
305   u32 sw_if_index;
306   u8 address[16];
307 };
308
309 /** \brief IPv6 ND proxy dump request
310     @param context - sender context, to match reply w/ request
311     @param retval - return code for the request
312     @param sw_if_index - The interface the host is on
313     @param address - The address of the host for which to proxy for
314 */
315 define ip6nd_proxy_dump
316 {
317   u32 client_index;
318   u32 context;
319 };
320
321 /** \brief Start / stop sending router solicitation
322     @param client_index - opaque cookie to identify the sender
323     @param context - sender context, to match reply w/ request
324     @param irt - initial retransmission time
325     @param mrt - maximum retransmission time
326     @param mrc - maximum retransmission count
327     @param mrd - maximum retransmission duration
328     @param sw_if_index - software interface index of interface
329                          for sending router solicitation
330     @param stop - if non-zero then stop sending router solicitation,
331                   otherwise start sending router solicitation
332 */
333 autoreply define ip6nd_send_router_solicitation
334 {
335   u32 client_index;
336   u32 context;
337   u32 irt;
338   u32 mrt;
339   u32 mrc;
340   u32 mrd;
341   u32 sw_if_index;
342   u8 stop;
343 };
344
345 /** \brief IPv6 interface enable / disable request
346     @param client_index - opaque cookie to identify the sender
347     @param context - sender context, to match reply w/ request
348     @param sw_if_index - interface used to reach neighbor
349     @param enable - if non-zero enable ip6 on interface, else disable
350 */
351 autoreply define sw_interface_ip6_enable_disable
352 {
353   u32 client_index;
354   u32 context;
355   u32 sw_if_index;
356   u8 enable;                    /* set to true if enable */
357 };
358
359 /** \brief IPv6 set link local address on interface request
360     @param client_index - opaque cookie to identify the sender
361     @param context - sender context, to match reply w/ request
362     @param sw_if_index - interface to set link local on
363     @param address[] - the new link local address
364 */
365 autoreply define sw_interface_ip6_set_link_local_address
366 {
367   u32 client_index;
368   u32 context;
369   u32 sw_if_index;
370   u8 address[16];
371 };
372
373 /** \brief Add / del route request
374     @param client_index - opaque cookie to identify the sender
375     @param context - sender context, to match reply w/ request
376     @param sw_if_index - software index of the new vlan's parent interface
377     @param vrf_id - fib table /vrf associated with the route
378     @param lookup_in_vrf - 
379     @param classify_table_index - 
380     @param is_add - 1 if adding the route, 0 if deleting
381     @param is_drop - Drop the packet
382     @param is_unreach - Drop the packet and rate limit send ICMP unreachable
383     @param is_prohibit - Drop the packet and rate limit send ICMP prohibited
384     @param is_ipv6 - 0 if an ip4 route, else ip6
385     @param is_local - The route will result in packets sent to VPP IP stack
386     @param is_udp_encap - The path describes a UDP-o-IP encapsulation.
387     @param is_classify - 
388     @param is_multipath - Set to 1 if this is a multipath route, else 0
389     @param is_dvr - Does the route resolve via a DVR interface.
390     @param is_source_lookup - The the path is a deaggregate path (i.e. a lookup
391                               in another table) is the lookup on the packet's
392                               source address or destination.
393     @param next_hop_weight - Weight for Unequal cost multi-path
394     @param next_hop_preference - Path that are up that have the best preference are
395                                  are used for forwarding. lower value is better.
396     @param next_hop_id - Used when the path resolves via an object that has a unique
397                          identifier.
398     @param dst_address_length - 
399     @param dst_address[16] - 
400     @param next_hop_address[16] - 
401     @param next_hop_n_out_labels - the number of labels in the label stack
402     @param next_hop_out_label_stack - the next-hop output label stack, outer most first
403     @param next_hop_via_label - The next-hop is a resolved via a local label
404 */
405 define ip_add_del_route
406 {
407   u32 client_index;
408   u32 context;
409   u32 next_hop_sw_if_index;
410   u32 table_id;
411   u32 classify_table_index;
412   u32 next_hop_table_id;
413   u32 next_hop_id;
414   u8 is_add;
415   u8 is_drop;
416   u8 is_unreach;
417   u8 is_prohibit;
418   u8 is_ipv6;
419   u8 is_local;
420   u8 is_classify;
421   u8 is_multipath;
422   u8 is_resolve_host;
423   u8 is_resolve_attached;
424   u8 is_dvr;
425   u8 is_source_lookup;
426   u8 is_udp_encap;
427   u8 next_hop_weight;
428   u8 next_hop_preference;
429   u8 next_hop_proto;
430   u8 dst_address_length;
431   u8 dst_address[16];
432   u8 next_hop_address[16];
433   u8 next_hop_n_out_labels;
434   u32 next_hop_via_label;
435   vl_api_fib_mpls_label_t next_hop_out_label_stack[next_hop_n_out_labels];
436 };
437
438 define ip_add_del_route_reply
439 {
440   u32 context;
441   i32 retval;
442   u32 stats_index;
443 };
444
445 /** \brief Add / del route request
446
447     Adds a route, consisting both of the MFIB entry to match packets
448     (which may already exist) and a path to send those packets down.
449     Routes can be entered repeatedly to add multiple paths.  Deletions are
450     per-path.
451
452     @param client_index - opaque cookie to identify the sender
453     @param context - sender context, to match reply w/ request
454     @param table_id - fib table /vrf associated with the route
455     @param is_add - true if adding a route; false if deleting one
456     @param is_ipv6 - true iff all the addresses are v6
457     @param entry_flags - see fib_entry_flag_t
458     @param itf_flags - see mfib_entry_flags_t
459     @param next_hop_afi - see dpo_proto_t; the type of destination description
460     @param src_address - the source of the packet
461     @param grp_address - the group the packet is destined to
462     @param nh_address - the nexthop to forward the packet to
463     @param next_hop_sw_if_index - interface to emit packet on
464
465     BIER AFIs use the BIER imposition ID.  v4 and v6 AFIs use either the
466     interface or the nexthop address.
467
468     Note that if the route is source-specific (S is supplied, not all 0s),
469     the prefix match is treated as exact (prefixlen /32 or /128).
470
471     FIXME not complete yet
472 */
473 define ip_mroute_add_del
474 {
475   u32 client_index;
476   u32 context;
477   u32 next_hop_sw_if_index;
478   u32 table_id;
479   u32 entry_flags;
480   u32 itf_flags;
481   u32 rpf_id;
482   u32 bier_imp;
483   u16 grp_address_length;
484   u8 next_hop_afi;
485   u8 is_add;
486   u8 is_ipv6;
487   u8 is_local;
488   u8 grp_address[16];
489   u8 src_address[16];
490   u8 nh_address[16];
491 };
492
493 define ip_mroute_add_del_reply
494 {
495   u32 context;
496   i32 retval;
497   u32 stats_index;
498 };
499
500 /** \brief Dump IP multicast fib table
501     @param client_index - opaque cookie to identify the sender
502 */
503 define ip_mfib_dump
504 {
505   u32 client_index;
506   u32 context;
507 };
508
509 /** \brief IP Multicast FIB table response
510     @param table_id - IP fib table id
511     @address_length - mask length
512     @grp_address - Group address/prefix
513     @src_address - Source address
514     @param count - the number of fib_path in path
515     @param path  - array of of fib_path structures
516 */
517 manual_endian manual_print define ip_mfib_details
518 {
519   u32 context;
520   u32 table_id;
521   u32 entry_flags;
522   u32 rpf_id;
523   u8  address_length;
524   u8  grp_address[4];
525   u8  src_address[4];
526   u32 count;
527   u32 stats_index;
528   vl_api_fib_path_t path[count];
529 };
530
531 /** \brief Dump IP6 multicast fib table
532     @param client_index - opaque cookie to identify the sender
533 */
534 define ip6_mfib_dump
535 {
536   u32 client_index;
537   u32 context;
538 };
539
540 /** \brief IP6 Multicast FIB table response
541     @param table_id - IP fib table id
542     @address_length - mask length
543     @grp_address - Group address/prefix
544     @src_address - Source address
545     @param count - the number of fib_path in path
546     @param path  - array of of fib_path structures
547 */
548 manual_endian manual_print define ip6_mfib_details
549 {
550   u32 context;
551   u32 table_id;
552   u8  address_length;
553   u8  grp_address[16];
554   u8  src_address[16];
555   u32 count;
556   vl_api_fib_path_t path[count];
557 };
558
559 define ip_address_details
560 {
561   u32 context;
562   u8 ip[16];
563   u8 prefix_length;
564   u32 sw_if_index;
565   u8 is_ipv6;
566 };
567
568 define ip_address_dump
569 {
570   u32 client_index;
571   u32 context;
572   u32 sw_if_index;
573   u8 is_ipv6;
574 };
575
576 /** \brief IP unnumbered configurations
577     @param sw_if_index The interface that has unnumbered configuration
578     @param ip_sw_if_index The IP interface that it is unnnumbered to
579 */
580 define ip_unnumbered_details
581 {
582   u32 context;
583   u32 sw_if_index;
584   u32 ip_sw_if_index;
585 };
586
587 /** \brief Dump IP unnumbered configurations
588     @param sw_if_index ~0 for all interfaces, else the interface desired
589 */
590 define ip_unnumbered_dump
591 {
592   u32 client_index;
593   u32 context;
594   u32 sw_if_index;
595 };
596
597 define ip_details
598 {
599   u32 context;
600   u32 sw_if_index;
601   u8 is_ipv6;
602 };
603
604 define ip_dump
605 {
606   u32 client_index;
607   u32 context;
608   u8 is_ipv6;
609 };
610
611 define mfib_signal_dump
612 {
613   u32 client_index;
614   u32 context;
615 };
616
617 define mfib_signal_details
618 {
619   u32 context;
620   u32 sw_if_index;
621   u32 table_id;
622   u16 grp_address_len;
623   u8 grp_address[16];
624   u8 src_address[16];
625   u16 ip_packet_len;
626   u8 ip_packet_data[256];
627 };
628
629 /** \brief IP punt policer
630     @param client_index - opaque cookie to identify the sender
631     @param context - sender context, to match reply w/ request
632     @param is_add - 1 to add neighbor, 0 to delete
633     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
634     @param policer_index - Index of policer to use
635 */
636 autoreply define ip_punt_police
637 {
638   u32 client_index;
639   u32 context;
640   u32 policer_index;
641   u8 is_add;
642   u8 is_ip6;
643 };
644
645 /** \brief IP punt redirect
646     @param client_index - opaque cookie to identify the sender
647     @param context - sender context, to match reply w/ request
648     @param is_add - 1 to add neighbor, 0 to delete
649     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
650     @param tx_sw_if_index - the TX interface to which traffic shoulde be
651                             redirected.
652     @param nh - The next-hop to redirect the traffic to.
653 */
654 autoreply define ip_punt_redirect
655 {
656   u32 client_index;
657   u32 context;
658   u32 rx_sw_if_index;
659   u32 tx_sw_if_index;
660   u8 is_add;
661   u8 is_ip6;
662   u8 nh[16];
663 };
664
665 autoreply define ip_container_proxy_add_del
666 {
667   u32 client_index;
668   u32 context;
669   u8 ip[16];
670   u8 is_ip4;
671   u8 plen;
672   u32 sw_if_index;
673   u8 is_add;
674 };
675
676 /** \brief Configure IP source and L4 port-range check
677     @param client_index - opaque cookie to identify the sender
678     @param context - sender context, to match reply w/ request
679     @param is_ip6 - 1 if source address type is IPv6
680     @param is_add - 1 if add, 0 if delete
681     @param mask_length - mask length for address entry
682     @param address - array of address bytes
683     @param number_of_ranges - length of low_port and high_port arrays (must match)
684     @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
685     @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
686     @param vrf_id - fib table/vrf id to associate the source and port-range check with
687     @note To specify a single port set low_port and high_port entry the same
688 */
689 autoreply define ip_source_and_port_range_check_add_del
690 {
691   u32 client_index;
692   u32 context;
693   u8 is_ipv6;
694   u8 is_add;
695   u8 mask_length;
696   u8 address[16];
697   u8 number_of_ranges;
698   u16 low_ports[32];
699   u16 high_ports[32];
700   u32 vrf_id;
701 };
702
703 /** \brief Set interface source and L4 port-range request
704     @param client_index - opaque cookie to identify the sender
705     @param context - sender context, to match reply w/ request
706     @param interface_id - interface index
707     @param tcp_vrf_id - VRF associated with source and TCP port-range check
708     @param udp_vrf_id - VRF associated with source and TCP port-range check
709 */
710 autoreply define ip_source_and_port_range_check_interface_add_del
711 {
712   u32 client_index;
713   u32 context;
714   u8 is_add;
715   u32 sw_if_index;
716   u32 tcp_in_vrf_id;
717   u32 tcp_out_vrf_id;
718   u32 udp_in_vrf_id;
719   u32 udp_out_vrf_id;
720 };
721
722 /** \brief Enable/disable periodic IP neighbor scan
723     @param client_index - opaque cookie to identify the sender
724     @param context - sender context, to match reply w/ request
725     @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
726     @param scan_interval - neighbor scan interval in minutes, 0: default to 1
727     @param max_proc_time - max processing time per run in usec, 0: default to 20
728     @param max_update - max neighbor probe/delete per run, 0: default to 10
729     @param scan_int_delay - delay in msec to resume scan if exceed max proc
730                             time or update, 0: default to 1
731     @param stale_threshold - threshold in minutes for neighbor deletion, 
732                              0: default to 4*scan_interval
733 */
734 autoreply define ip_scan_neighbor_enable_disable
735 {
736   u32 client_index;
737   u32 context;
738   u8 mode;
739   u8 scan_interval;
740   u8 max_proc_time;
741   u8 max_update;
742   u8 scan_int_delay;
743   u8 stale_threshold;
744 };
745
746 /** \brief IP probe neighbor address on an interface by sending an
747            ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
748     @param client_index - opaque cookie to identify the sender
749     @param context - sender context, to match reply w/ request
750     @param sw_if_index - interface index
751     @param dst_address - target IP address to send IP addr resolution request
752     @param is_ipv6 - [1|0] to indicate if address family is IPv[6|4]
753 */
754 autoreply define ip_probe_neighbor
755 {
756   u32 client_index;
757   u32 context;
758   u32 sw_if_index;
759   u8 dst_address[16];
760   u8 is_ipv6;
761 };
762
763 /** \brief Register for IP4 ARP resolution event on receing ARP reply or
764            MAC/IP info from ARP requests in L2 BDs
765     @param client_index - opaque cookie to identify the sender
766     @param context - sender context, to match reply w/ request
767     @param enable_disable - 1 => register for events, 0 => cancel registration
768     @param pid - sender's pid
769     @param address - exact IP4 address of interested arp resolution event, or
770                      0 to get MAC/IP info from ARP requests in BDs
771 */
772 autoreply define want_ip4_arp_events
773 {
774   u32 client_index;
775   u32 context;
776   u8 enable_disable;
777   u32 pid;
778   u32 address;
779 };
780
781 /** \brief Tell client about an IP4 ARP resolution event or
782            MAC/IP info from ARP requests in L2 BDs
783     @param client_index - opaque cookie to identify the sender
784     @param address - the exact ip4 address of interest
785     @param pid - client pid registered to receive notification
786     @param sw_if_index - interface which received ARP packet
787     @param new_mac - the new mac address 
788     @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
789 */
790 define ip4_arp_event
791 {
792   u32 client_index;
793   u32 address;
794   u32 pid;
795   u32 sw_if_index;
796   u8 new_mac[6];
797   u8 mac_ip;
798 };
799
800 service {
801   rpc want_ip4_arp_events returns want_ip4_arp_events_reply
802     events ip4_arp_event;
803 };
804
805 /** \brief Register for IP6 ND resolution event on recieving NA reply
806            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
807     @param client_index - opaque cookie to identify the sender
808     @param context - sender context, to match reply w/ request
809     @param enable_disable - 1 => register for events, 0 => cancel registration
810     @param pid - sender's pid
811     @param address - the exact IP6 address of interested ND resolution event, or
812                      0 to get MAC/IP info from ICMP6 NS in L2 BDs.
813 */
814 autoreply define want_ip6_nd_events
815 {
816   u32 client_index;
817   u32 context;
818   u8 enable_disable;
819   u32 pid;
820   u8 address[16];
821 };
822
823 /** \brief Tell client about an IP6 ND resolution or
824            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
825     @param client_index - opaque cookie to identify the sender
826     @param pid - client pid registered to receive notification
827     @param sw_if_index - interface which received ARP packet
828     @param address - the exact ip6 address of interest
829     @param new_mac - the new mac address 
830     @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
831 */
832 define ip6_nd_event
833 {
834   u32 client_index;
835   u32 pid;
836   u32 sw_if_index;
837   u8 address[16];
838   u8 new_mac[6];
839   u8 mac_ip;
840 };
841
842 service {
843   rpc want_ip6_ra_events returns want_ip6_ra_events_reply
844     events ip6_ra_event;
845 };
846
847 /** \brief Register for ip6 router advertisement events
848     @param client_index - opaque cookie to identify the sender
849     @param context - sender context, to match reply w/ request
850     @param enable_disable - 1 => register for events, 0 => cancel registration
851     @param pid - sender's pid
852 */
853 autoreply define want_ip6_ra_events
854 {
855   u32 client_index;
856   u32 context;
857   u8 enable_disable;
858   u32 pid;
859 };
860
861 /** \brief Struct representing RA prefix info
862     @param dst_address - RA prefix info destination address
863     @param dst_address_length - RA prefix info destination address length
864     @param flags - RA prefix info flags
865     @param valid_time - RA prefix info valid time
866     @param preferred_time - RA prefix info preferred time
867 */
868 typeonly define ip6_ra_prefix_info
869 {
870   u8 dst_address[16];
871   u8 dst_address_length;
872   u8 flags;
873   u32 valid_time;
874   u32 preferred_time;
875 };
876
877 /** \brief Tell client about a router advertisement event
878     @param client_index - opaque cookie to identify the sender
879     @param pid - client pid registered to receive notification
880     @param current_hop_limit - RA current hop limit
881     @param flags - RA flags
882     @param router_lifetime_in_sec - RA lifetime in seconds
883     @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
884     @param time_in_msec_between_retransmitted_neighbor_solicitations -
885                time in msec between retransmitted neighbor solicitations
886     @param n_prefixes -
887     @param prefixes -
888 */
889 define ip6_ra_event
890 {
891   u32 client_index;
892   u32 pid;
893   u32 sw_if_index;
894   u8 router_address[16];
895   u8 current_hop_limit;
896   u8 flags;
897   u16 router_lifetime_in_sec;
898   u32 neighbor_reachable_time_in_msec;
899   u32 time_in_msec_between_retransmitted_neighbor_solicitations;
900   u32 n_prefixes;
901   vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
902 };
903
904 service {
905   rpc want_ip6_nd_events returns want_ip6_nd_events_reply
906     events ip6_nd_event;
907 };
908
909 /** \brief Proxy ARP configuration type
910     @param vrf_id - VRF / Fib table ID
911     @param low_address[4] - Low address of the Proxy ARP range
912     @param hi_address[4] - High address of the Proxy ARP range
913 */
914 typeonly define proxy_arp
915 {
916   u32 vrf_id;
917   u8 low_address[4];
918   u8 hi_address[4];
919 };
920
921 /** \brief Proxy ARP add / del request
922     @param client_index - opaque cookie to identify the sender
923     @param context - sender context, to match reply w/ request
924     @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
925     @param proxy - Proxy configuration
926 */
927 autoreply define proxy_arp_add_del
928 {
929   u32 client_index;
930   u32 context;
931   u8 is_add;
932   vl_api_proxy_arp_t proxy;
933 };
934
935 /** \brief Proxy ARP dump request
936  */
937 define proxy_arp_dump
938 {
939   u32 client_index;
940   u32 context;
941 };
942
943 /** \brief Proxy ARP dump details reply
944  * @param proxy - Same data as used to configure
945  */
946 define proxy_arp_details
947 {
948   u32 context;
949   vl_api_proxy_arp_t proxy;
950 };
951
952 /** \brief Proxy ARP add / del interface request
953     @param client_index - opaque cookie to identify the sender
954     @param context - sender context, to match reply w/ request
955     @param sw_if_index - Which interface to enable / disable Proxy Arp on
956     @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
957 */
958 autoreply define proxy_arp_intfc_enable_disable
959 {
960   u32 client_index;
961   u32 context;
962   u32 sw_if_index;
963   /* 1 = on, 0 = off */
964   u8 enable_disable;
965 };
966
967 /** \brief Proxy ARP interface dump request
968  */
969 define proxy_arp_intfc_dump
970 {
971   u32 client_index;
972   u32 context;
973 };
974
975 /** \brief Proxy ARP interface dump details reply
976  * @param sw_if_index The interface on which ARP proxy is enabled.
977  */
978 define proxy_arp_intfc_details
979 {
980   u32 context;
981   u32 sw_if_index;
982 };
983
984 /** \brief Reset fib table request
985     @param client_index - opaque cookie to identify the sender
986     @param context - sender context, to match reply w/ request
987     @param vrf_id - vrf/table id of the fib table to reset
988     @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
989 */
990 autoreply define reset_fib
991 {
992   u32 client_index;
993   u32 context;
994   u32 vrf_id;
995   u8 is_ipv6;
996 };
997
998 /** \brief Set max allowed ARP or ip6 neighbor entries request
999     @param client_index - opaque cookie to identify the sender
1000     @param context - sender context, to match reply w/ request
1001     @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1002     @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1003 */
1004 autoreply define set_arp_neighbor_limit
1005 {
1006   u32 client_index;
1007   u32 context;
1008   u8 is_ipv6;
1009   u32 arp_neighbor_limit;
1010 };
1011
1012 /** \brief IOAM enable : Enable in-band OAM
1013     @param id - profile id
1014     @param seqno - To enable Seqno Processing
1015     @param analyse - Enabling analysis of iOAM at decap node 
1016     @param pow_enable - Proof of Work enabled or not flag
1017     @param trace_enable - iOAM Trace enabled or not flag
1018 */
1019 autoreply define ioam_enable
1020 {
1021   u32 client_index;
1022   u32 context;
1023   u16 id;
1024   u8 seqno;
1025   u8 analyse;
1026   u8 pot_enable;
1027   u8 trace_enable;
1028   u32 node_id;
1029 };
1030
1031 /** \brief iOAM disable
1032     @param client_index - opaque cookie to identify the sender
1033     @param context - sender context, to match reply w/ request
1034     @param index - MAP Domain index
1035 */
1036 autoreply define ioam_disable
1037 {
1038   u32 client_index;
1039   u32 context;
1040   u16 id;
1041 };
1042
1043 autoreply define ip_reassembly_set
1044 {
1045   u32 client_index;
1046   u32 context;
1047   u32 timeout_ms;
1048   u32 max_reassemblies;
1049   u32 expire_walk_interval_ms;
1050   u8 is_ip6;
1051 };
1052
1053 define ip_reassembly_get
1054 {
1055   u32 client_index;
1056   u32 context;
1057   u8 is_ip6;
1058 };
1059
1060 define ip_reassembly_get_reply
1061 {
1062   u32 context;
1063   i32 retval;
1064   u32 timeout_ms;
1065   u32 max_reassemblies;
1066   u32 expire_walk_interval_ms;
1067   u8 is_ip6;
1068 };
1069
1070 /** \brief Enable/disable reassembly feature
1071     @param client_index - opaque cookie to identify the sender
1072     @param context - sender context, to match reply w/ request
1073     @param sw_if_index - interface to enable/disable feature on
1074     @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1075     @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1076 */
1077 autoreply define ip_reassembly_enable_disable
1078 {
1079   u32 client_index;
1080   u32 context;
1081   u32 sw_if_index;
1082   u8 enable_ip4;
1083   u8 enable_ip6;
1084 };
1085
1086 /*
1087  * Local Variables:
1088  * eval: (c-set-style "gnu")
1089  * End:
1090  */