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