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