mroute routers 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 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 define ip_mroute_add_del_reply
464 {
465   u32 context;
466   i32 retval;
467   u32 stats_index;
468 };
469
470 /** \brief Dump IP multicast fib table
471     @param client_index - opaque cookie to identify the sender
472 */
473 define ip_mfib_dump
474 {
475   u32 client_index;
476   u32 context;
477 };
478
479 /** \brief IP Multicast FIB table response
480     @param table_id - IP fib table id
481     @address_length - mask length
482     @grp_address - Group address/prefix
483     @src_address - Source address
484     @param count - the number of fib_path in path
485     @param path  - array of of fib_path structures
486 */
487 manual_endian manual_print define ip_mfib_details
488 {
489   u32 context;
490   u32 table_id;
491   u32 entry_flags;
492   u32 rpf_id;
493   u8  address_length;
494   u8  grp_address[4];
495   u8  src_address[4];
496   u32 count;
497   u32 stats_index;
498   vl_api_fib_path_t path[count];
499 };
500
501 /** \brief Dump IP6 multicast fib table
502     @param client_index - opaque cookie to identify the sender
503 */
504 define ip6_mfib_dump
505 {
506   u32 client_index;
507   u32 context;
508 };
509
510 /** \brief IP6 Multicast FIB table response
511     @param table_id - IP fib table id
512     @address_length - mask length
513     @grp_address - Group address/prefix
514     @src_address - Source address
515     @param count - the number of fib_path in path
516     @param path  - array of of fib_path structures
517 */
518 manual_endian manual_print define ip6_mfib_details
519 {
520   u32 context;
521   u32 table_id;
522   u8  address_length;
523   u8  grp_address[16];
524   u8  src_address[16];
525   u32 count;
526   vl_api_fib_path_t path[count];
527 };
528
529 define ip_address_details
530 {
531   u32 context;
532   u8 ip[16];
533   u8 prefix_length;
534   u32 sw_if_index;
535   u8 is_ipv6;
536 };
537
538 define ip_address_dump
539 {
540   u32 client_index;
541   u32 context;
542   u32 sw_if_index;
543   u8 is_ipv6;
544 };
545
546 /** \brief IP unnumbered configurations
547     @param sw_if_index The interface that has unnumbered configuration
548     @param ip_sw_if_index The IP interface that it is unnnumbered to
549 */
550 define ip_unnumbered_details
551 {
552   u32 context;
553   u32 sw_if_index;
554   u32 ip_sw_if_index;
555 };
556
557 /** \brief Dump IP unnumbered configurations
558     @param sw_if_index ~0 for all interfaces, else the interface desired
559 */
560 define ip_unnumbered_dump
561 {
562   u32 client_index;
563   u32 context;
564   u32 sw_if_index;
565 };
566
567 define ip_details
568 {
569   u32 context;
570   u32 sw_if_index;
571   u8 is_ipv6;
572 };
573
574 define ip_dump
575 {
576   u32 client_index;
577   u32 context;
578   u8 is_ipv6;
579 };
580
581 define mfib_signal_dump
582 {
583   u32 client_index;
584   u32 context;
585 };
586
587 define mfib_signal_details
588 {
589   u32 context;
590   u32 sw_if_index;
591   u32 table_id;
592   u16 grp_address_len;
593   u8 grp_address[16];
594   u8 src_address[16];
595   u16 ip_packet_len;
596   u8 ip_packet_data[256];
597 };
598
599 /** \brief IP punt policer
600     @param client_index - opaque cookie to identify the sender
601     @param context - sender context, to match reply w/ request
602     @param is_add - 1 to add neighbor, 0 to delete
603     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
604     @param policer_index - Index of policer to use
605 */
606 autoreply define ip_punt_police
607 {
608   u32 client_index;
609   u32 context;
610   u32 policer_index;
611   u8 is_add;
612   u8 is_ip6;
613 };
614
615 /** \brief IP punt redirect
616     @param client_index - opaque cookie to identify the sender
617     @param context - sender context, to match reply w/ request
618     @param is_add - 1 to add neighbor, 0 to delete
619     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
620     @param tx_sw_if_index - the TX interface to which traffic shoulde be
621                             redirected.
622     @param nh - The next-hop to redirect the traffic to.
623 */
624 autoreply define ip_punt_redirect
625 {
626   u32 client_index;
627   u32 context;
628   u32 rx_sw_if_index;
629   u32 tx_sw_if_index;
630   u8 is_add;
631   u8 is_ip6;
632   u8 nh[16];
633 };
634
635 autoreply define ip_container_proxy_add_del
636 {
637   u32 client_index;
638   u32 context;
639   u8 ip[16];
640   u8 is_ip4;
641   u8 plen;
642   u32 sw_if_index;
643   u8 is_add;
644 };
645
646 /** \brief Configure IP source and L4 port-range check
647     @param client_index - opaque cookie to identify the sender
648     @param context - sender context, to match reply w/ request
649     @param is_ip6 - 1 if source address type is IPv6
650     @param is_add - 1 if add, 0 if delete
651     @param mask_length - mask length for address entry
652     @param address - array of address bytes
653     @param number_of_ranges - length of low_port and high_port arrays (must match)
654     @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
655     @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
656     @param vrf_id - fib table/vrf id to associate the source and port-range check with
657     @note To specify a single port set low_port and high_port entry the same
658 */
659 autoreply define ip_source_and_port_range_check_add_del
660 {
661   u32 client_index;
662   u32 context;
663   u8 is_ipv6;
664   u8 is_add;
665   u8 mask_length;
666   u8 address[16];
667   u8 number_of_ranges;
668   u16 low_ports[32];
669   u16 high_ports[32];
670   u32 vrf_id;
671 };
672
673 /** \brief Set interface source and L4 port-range request
674     @param client_index - opaque cookie to identify the sender
675     @param context - sender context, to match reply w/ request
676     @param interface_id - interface index
677     @param tcp_vrf_id - VRF associated with source and TCP port-range check
678     @param udp_vrf_id - VRF associated with source and TCP port-range check
679 */
680 autoreply define ip_source_and_port_range_check_interface_add_del
681 {
682   u32 client_index;
683   u32 context;
684   u8 is_add;
685   u32 sw_if_index;
686   u32 tcp_in_vrf_id;
687   u32 tcp_out_vrf_id;
688   u32 udp_in_vrf_id;
689   u32 udp_out_vrf_id;
690 };
691
692 /** \brief Enable/disable periodic IP neighbor scan
693     @param client_index - opaque cookie to identify the sender
694     @param context - sender context, to match reply w/ request
695     @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
696     @param scan_interval - neighbor scan interval in minutes, 0: default to 1
697     @param max_proc_time - max processing time per run in usec, 0: default to 20
698     @param max_update - max neighbor probe/delete per run, 0: default to 10
699     @param scan_int_delay - delay in msec to resume scan if exceed max proc
700                             time or update, 0: default to 1
701     @param stale_threshold - threshold in minutes for neighbor deletion, 
702                              0: default to 4*scan_interval
703 */
704 autoreply define ip_scan_neighbor_enable_disable
705 {
706   u32 client_index;
707   u32 context;
708   u8 mode;
709   u8 scan_interval;
710   u8 max_proc_time;
711   u8 max_update;
712   u8 scan_int_delay;
713   u8 stale_threshold;
714 };
715
716 /** \brief IP probe neighbor address on an interface by sending an
717            ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
718     @param client_index - opaque cookie to identify the sender
719     @param context - sender context, to match reply w/ request
720     @param sw_if_index - interface index
721     @param dst_address - target IP address to send IP addr resolution request
722     @param is_ipv6 - [1|0] to indicate if address family is IPv[6|4]
723 */
724 autoreply define ip_probe_neighbor
725 {
726   u32 client_index;
727   u32 context;
728   u32 sw_if_index;
729   u8 dst_address[16];
730   u8 is_ipv6;
731 };
732
733 /** \brief Register for IP4 ARP resolution event on receing ARP reply or
734            MAC/IP info from ARP requests in L2 BDs
735     @param client_index - opaque cookie to identify the sender
736     @param context - sender context, to match reply w/ request
737     @param enable_disable - 1 => register for events, 0 => cancel registration
738     @param pid - sender's pid
739     @param address - exact IP4 address of interested arp resolution event, or
740                      0 to get MAC/IP info from ARP requests in BDs
741 */
742 autoreply define want_ip4_arp_events
743 {
744   u32 client_index;
745   u32 context;
746   u8 enable_disable;
747   u32 pid;
748   u32 address;
749 };
750
751 /** \brief Tell client about an IP4 ARP resolution event or
752            MAC/IP info from ARP requests in L2 BDs
753     @param client_index - opaque cookie to identify the sender
754     @param address - the exact ip4 address of interest
755     @param pid - client pid registered to receive notification
756     @param sw_if_index - interface which received ARP packet
757     @param new_mac - the new mac address 
758     @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
759 */
760 define ip4_arp_event
761 {
762   u32 client_index;
763   u32 address;
764   u32 pid;
765   u32 sw_if_index;
766   u8 new_mac[6];
767   u8 mac_ip;
768 };
769
770 service {
771   rpc want_ip4_arp_events returns want_ip4_arp_events_reply
772     events ip4_arp_event;
773 };
774
775 /** \brief Register for IP6 ND resolution event on recieving NA reply
776            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
777     @param client_index - opaque cookie to identify the sender
778     @param context - sender context, to match reply w/ request
779     @param enable_disable - 1 => register for events, 0 => cancel registration
780     @param pid - sender's pid
781     @param address - the exact IP6 address of interested ND resolution event, or
782                      0 to get MAC/IP info from ICMP6 NS in L2 BDs.
783 */
784 autoreply define want_ip6_nd_events
785 {
786   u32 client_index;
787   u32 context;
788   u8 enable_disable;
789   u32 pid;
790   u8 address[16];
791 };
792
793 /** \brief Tell client about an IP6 ND resolution or
794            MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
795     @param client_index - opaque cookie to identify the sender
796     @param pid - client pid registered to receive notification
797     @param sw_if_index - interface which received ARP packet
798     @param address - the exact ip6 address of interest
799     @param new_mac - the new mac address 
800     @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
801 */
802 define ip6_nd_event
803 {
804   u32 client_index;
805   u32 pid;
806   u32 sw_if_index;
807   u8 address[16];
808   u8 new_mac[6];
809   u8 mac_ip;
810 };
811
812 service {
813   rpc want_ip6_ra_events returns want_ip6_ra_events_reply
814     events ip6_ra_event;
815 };
816
817 /** \brief Register for ip6 router advertisement events
818     @param client_index - opaque cookie to identify the sender
819     @param context - sender context, to match reply w/ request
820     @param enable_disable - 1 => register for events, 0 => cancel registration
821     @param pid - sender's pid
822 */
823 autoreply define want_ip6_ra_events
824 {
825   u32 client_index;
826   u32 context;
827   u8 enable_disable;
828   u32 pid;
829 };
830
831 /** \brief Struct representing RA prefix info
832     @param dst_address - RA prefix info destination address
833     @param dst_address_length - RA prefix info destination address length
834     @param flags - RA prefix info flags
835     @param valid_time - RA prefix info valid time
836     @param preferred_time - RA prefix info preferred time
837 */
838 typeonly define ip6_ra_prefix_info
839 {
840   u8 dst_address[16];
841   u8 dst_address_length;
842   u8 flags;
843   u32 valid_time;
844   u32 preferred_time;
845 };
846
847 /** \brief Tell client about a router advertisement event
848     @param client_index - opaque cookie to identify the sender
849     @param pid - client pid registered to receive notification
850     @param current_hop_limit - RA current hop limit
851     @param flags - RA flags
852     @param router_lifetime_in_sec - RA lifetime in seconds
853     @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
854     @param time_in_msec_between_retransmitted_neighbor_solicitations -
855                time in msec between retransmitted neighbor solicitations
856     @param n_prefixes -
857     @param prefixes -
858 */
859 define ip6_ra_event
860 {
861   u32 client_index;
862   u32 pid;
863   u32 sw_if_index;
864   u8 router_address[16];
865   u8 current_hop_limit;
866   u8 flags;
867   u16 router_lifetime_in_sec;
868   u32 neighbor_reachable_time_in_msec;
869   u32 time_in_msec_between_retransmitted_neighbor_solicitations;
870   u32 n_prefixes;
871   vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
872 };
873
874 service {
875   rpc want_ip6_nd_events returns want_ip6_nd_events_reply
876     events ip6_nd_event;
877 };
878
879 /** \brief Proxy ARP configuration type
880     @param vrf_id - VRF / Fib table ID
881     @param low_address[4] - Low address of the Proxy ARP range
882     @param hi_address[4] - High address of the Proxy ARP range
883 */
884 typeonly define proxy_arp
885 {
886   u32 vrf_id;
887   u8 low_address[4];
888   u8 hi_address[4];
889 };
890
891 /** \brief Proxy ARP add / del request
892     @param client_index - opaque cookie to identify the sender
893     @param context - sender context, to match reply w/ request
894     @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
895     @param proxy - Proxy configuration
896 */
897 autoreply define proxy_arp_add_del
898 {
899   u32 client_index;
900   u32 context;
901   u8 is_add;
902   vl_api_proxy_arp_t proxy;
903 };
904
905 /** \brief Proxy ARP dump request
906  */
907 define proxy_arp_dump
908 {
909   u32 client_index;
910   u32 context;
911 };
912
913 /** \brief Proxy ARP dump details reply
914  * @param proxy - Same data as used to configure
915  */
916 define proxy_arp_details
917 {
918   u32 context;
919   vl_api_proxy_arp_t proxy;
920 };
921
922 /** \brief Proxy ARP add / del interface request
923     @param client_index - opaque cookie to identify the sender
924     @param context - sender context, to match reply w/ request
925     @param sw_if_index - Which interface to enable / disable Proxy Arp on
926     @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
927 */
928 autoreply define proxy_arp_intfc_enable_disable
929 {
930   u32 client_index;
931   u32 context;
932   u32 sw_if_index;
933   /* 1 = on, 0 = off */
934   u8 enable_disable;
935 };
936
937 /** \brief Proxy ARP interface dump request
938  */
939 define proxy_arp_intfc_dump
940 {
941   u32 client_index;
942   u32 context;
943 };
944
945 /** \brief Proxy ARP interface dump details reply
946  * @param sw_if_index The interface on which ARP proxy is enabled.
947  */
948 define proxy_arp_intfc_details
949 {
950   u32 context;
951   u32 sw_if_index;
952 };
953
954 /** \brief Reset fib table request
955     @param client_index - opaque cookie to identify the sender
956     @param context - sender context, to match reply w/ request
957     @param vrf_id - vrf/table id of the fib table to reset
958     @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
959 */
960 autoreply define reset_fib
961 {
962   u32 client_index;
963   u32 context;
964   u32 vrf_id;
965   u8 is_ipv6;
966 };
967
968 /** \brief Set max allowed ARP or ip6 neighbor entries request
969     @param client_index - opaque cookie to identify the sender
970     @param context - sender context, to match reply w/ request
971     @param is_ipv6 - neighbor limit if non-zero, else ARP limit
972     @param arp_neighbor_limit - the new limit, defaults are ~ 50k
973 */
974 autoreply define set_arp_neighbor_limit
975 {
976   u32 client_index;
977   u32 context;
978   u8 is_ipv6;
979   u32 arp_neighbor_limit;
980 };
981
982 /** \brief IOAM enable : Enable in-band OAM
983     @param id - profile id
984     @param seqno - To enable Seqno Processing
985     @param analyse - Enabling analysis of iOAM at decap node 
986     @param pow_enable - Proof of Work enabled or not flag
987     @param trace_enable - iOAM Trace enabled or not flag
988 */
989 autoreply define ioam_enable
990 {
991   u32 client_index;
992   u32 context;
993   u16 id;
994   u8 seqno;
995   u8 analyse;
996   u8 pot_enable;
997   u8 trace_enable;
998   u32 node_id;
999 };
1000
1001 /** \brief iOAM disable
1002     @param client_index - opaque cookie to identify the sender
1003     @param context - sender context, to match reply w/ request
1004     @param index - MAP Domain index
1005 */
1006 autoreply define ioam_disable
1007 {
1008   u32 client_index;
1009   u32 context;
1010   u16 id;
1011 };
1012
1013 autoreply define ip_reassembly_set
1014 {
1015   u32 client_index;
1016   u32 context;
1017   u32 timeout_ms;
1018   u32 max_reassemblies;
1019   u32 expire_walk_interval_ms;
1020   u8 is_ip6;
1021 };
1022
1023 define ip_reassembly_get
1024 {
1025   u32 client_index;
1026   u32 context;
1027   u8 is_ip6;
1028 };
1029
1030 define ip_reassembly_get_reply
1031 {
1032   u32 context;
1033   i32 retval;
1034   u32 timeout_ms;
1035   u32 max_reassemblies;
1036   u32 expire_walk_interval_ms;
1037   u8 is_ip6;
1038 };
1039
1040 /** \brief Enable/disable reassembly feature
1041     @param client_index - opaque cookie to identify the sender
1042     @param context - sender context, to match reply w/ request
1043     @param sw_if_index - interface to enable/disable feature on
1044     @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1045     @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1046 */
1047 autoreply define ip_reassembly_enable_disable
1048 {
1049   u32 client_index;
1050   u32 context;
1051   u32 sw_if_index;
1052   u8 enable_ip4;
1053   u8 enable_ip6;
1054 };
1055
1056 /*
1057  * Local Variables:
1058  * eval: (c-set-style "gnu")
1059  * End:
1060  */