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