1 /* Hey Emacs use -*- mode: C -*- */
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:
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 This file defines vpp IP control-plane API messages which are generally
20 called through a shared memory interface.
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";
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
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
40 autoreply define ip_table_add_del
50 /** \brief Dump IP fib table
51 @param client_index - opaque cookie to identify the sender
59 /** \brief IP FIB table response
60 @param table_id - IP fib table id
61 @address_length - mask length
63 @param count - the number of fib_path in path
64 @param path - array of of fib_path structures
66 manual_endian manual_print define ip_fib_details
75 vl_api_fib_path_t path[count];
78 /** \brief Dump IP6 fib table
79 @param client_index - opaque cookie to identify the sender
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
94 manual_endian manual_print define ip6_fib_details
103 vl_api_fib_path_t path[count];
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]
112 define ip_neighbor_dump
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]
128 define ip_neighbor_details {
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
152 define ip_neighbor_add_del
157 /* 1 = add, 0 = delete */
166 define ip_neighbor_add_del_reply
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
185 autoreply define set_ip_flow_hash
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
206 @param send_unicast -
209 @param default_router -
210 @param max_interval -
211 @param min_interval -
213 @param initial_count -
214 @param initial_interval -
216 autoreply define sw_interface_ip6nd_ra_config
233 u32 initial_interval;
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.
265 autoreply define sw_interface_ip6nd_ra_prefix
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
289 autoreply define ip6nd_proxy_add_del
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
302 define ip6nd_proxy_details
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
315 define ip6nd_proxy_dump
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
333 autoreply define ip6nd_send_router_solicitation
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
351 autoreply define sw_interface_ip6_enable_disable
356 u8 enable; /* set to true if enable */
359 /** \brief Add / del route 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 - software index of the new vlan's parent interface
363 @param vrf_id - fib table /vrf associated with the route
364 @param lookup_in_vrf -
365 @param classify_table_index -
366 @param is_add - 1 if adding the route, 0 if deleting
367 @param is_drop - Drop the packet
368 @param is_unreach - Drop the packet and rate limit send ICMP unreachable
369 @param is_prohibit - Drop the packet and rate limit send ICMP prohibited
370 @param is_ipv6 - 0 if an ip4 route, else ip6
371 @param is_local - The route will result in packets sent to VPP IP stack
372 @param is_udp_encap - The path describes a UDP-o-IP encapsulation.
374 @param is_multipath - Set to 1 if this is a multipath route, else 0
375 @param is_dvr - Does the route resolve via a DVR interface.
376 @param is_source_lookup - The the path is a deaggregate path (i.e. a lookup
377 in another table) is the lookup on the packet's
378 source address or destination.
379 @param next_hop_weight - Weight for Unequal cost multi-path
380 @param next_hop_preference - Path that are up that have the best preference are
381 are used for forwarding. lower value is better.
382 @param next_hop_id - Used when the path resolves via an object that has a unique
384 @param dst_address_length -
385 @param dst_address[16] -
386 @param next_hop_address[16] -
387 @param next_hop_n_out_labels - the number of labels in the label stack
388 @param next_hop_out_label_stack - the next-hop output label stack, outer most first
389 @param next_hop_via_label - The next-hop is a resolved via a local label
391 define ip_add_del_route
395 u32 next_hop_sw_if_index;
397 u32 classify_table_index;
398 u32 next_hop_table_id;
409 u8 is_resolve_attached;
414 u8 next_hop_preference;
416 u8 dst_address_length;
418 u8 next_hop_address[16];
419 u8 next_hop_n_out_labels;
420 u32 next_hop_via_label;
421 vl_api_fib_mpls_label_t next_hop_out_label_stack[next_hop_n_out_labels];
424 define ip_add_del_route_reply
431 /** \brief Add / del route request
433 Adds a route, consisting both of the MFIB entry to match packets
434 (which may already exist) and a path to send those packets down.
435 Routes can be entered repeatedly to add multiple paths. Deletions are
438 @param client_index - opaque cookie to identify the sender
439 @param context - sender context, to match reply w/ request
440 @param table_id - fib table /vrf associated with the route
441 @param is_add - true if adding a route; false if deleting one
442 @param is_ipv6 - true iff all the addresses are v6
443 @param entry_flags - see fib_entry_flag_t
444 @param itf_flags - see mfib_entry_flags_t
445 @param next_hop_afi - see dpo_proto_t; the type of destination description
446 @param src_address - the source of the packet
447 @param grp_address - the group the packet is destined to
448 @param nh_address - the nexthop to forward the packet to
449 @param next_hop_sw_if_index - interface to emit packet on
451 BIER AFIs use the BIER imposition ID. v4 and v6 AFIs use either the
452 interface or the nexthop address.
454 Note that if the route is source-specific (S is supplied, not all 0s),
455 the prefix match is treated as exact (prefixlen /32 or /128).
457 FIXME not complete yet
459 define ip_mroute_add_del
463 u32 next_hop_sw_if_index;
469 u16 grp_address_length;
479 define ip_mroute_add_del_reply
486 /** \brief Dump IP multicast fib table
487 @param client_index - opaque cookie to identify the sender
495 /** \brief IP Multicast FIB table response
496 @param table_id - IP fib table id
497 @address_length - mask length
498 @grp_address - Group address/prefix
499 @src_address - Source address
500 @param count - the number of fib_path in path
501 @param path - array of of fib_path structures
503 manual_endian manual_print define ip_mfib_details
514 vl_api_fib_path_t path[count];
517 /** \brief Dump IP6 multicast fib table
518 @param client_index - opaque cookie to identify the sender
526 /** \brief IP6 Multicast FIB table response
527 @param table_id - IP fib table id
528 @address_length - mask length
529 @grp_address - Group address/prefix
530 @src_address - Source address
531 @param count - the number of fib_path in path
532 @param path - array of of fib_path structures
534 manual_endian manual_print define ip6_mfib_details
542 vl_api_fib_path_t path[count];
545 define ip_address_details
554 define ip_address_dump
562 /** \brief IP unnumbered configurations
563 @param sw_if_index The interface that has unnumbered configuration
564 @param ip_sw_if_index The IP interface that it is unnnumbered to
566 define ip_unnumbered_details
573 /** \brief Dump IP unnumbered configurations
574 @param sw_if_index ~0 for all interfaces, else the interface desired
576 define ip_unnumbered_dump
597 define mfib_signal_dump
603 define mfib_signal_details
612 u8 ip_packet_data[256];
615 /** \brief IP punt policer
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 policer_index - Index of policer to use
622 autoreply define ip_punt_police
631 /** \brief IP punt redirect
632 @param client_index - opaque cookie to identify the sender
633 @param context - sender context, to match reply w/ request
634 @param is_add - 1 to add neighbor, 0 to delete
635 @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
636 @param rx_sw_if_index - specify the original RX interface of traffic
637 that should be redirected. ~0 means any interface.
638 @param tx_sw_if_index - the TX interface to which traffic shoulde be
640 @param nh - The next-hop to redirect the traffic to.
642 autoreply define ip_punt_redirect
653 autoreply define ip_container_proxy_add_del
664 define ip_container_proxy_dump
670 define ip_container_proxy_details
674 vl_api_prefix_t prefix;
677 /** \brief Configure IP source and L4 port-range check
678 @param client_index - opaque cookie to identify the sender
679 @param context - sender context, to match reply w/ request
680 @param is_ip6 - 1 if source address type is IPv6
681 @param is_add - 1 if add, 0 if delete
682 @param mask_length - mask length for address entry
683 @param address - array of address bytes
684 @param number_of_ranges - length of low_port and high_port arrays (must match)
685 @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
686 @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
687 @param vrf_id - fib table/vrf id to associate the source and port-range check with
688 @note To specify a single port set low_port and high_port entry the same
690 autoreply define ip_source_and_port_range_check_add_del
704 /** \brief Set interface source and L4 port-range request
705 @param client_index - opaque cookie to identify the sender
706 @param context - sender context, to match reply w/ request
707 @param interface_id - interface index
708 @param tcp_vrf_id - VRF associated with source and TCP port-range check
709 @param udp_vrf_id - VRF associated with source and TCP port-range check
711 autoreply define ip_source_and_port_range_check_interface_add_del
723 /** \brief Enable/disable periodic IP neighbor scan
724 @param client_index - opaque cookie to identify the sender
725 @param context - sender context, to match reply w/ request
726 @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
727 @param scan_interval - neighbor scan interval in minutes, 0: default to 1
728 @param max_proc_time - max processing time per run in usec, 0: default to 20
729 @param max_update - max neighbor probe/delete per run, 0: default to 10
730 @param scan_int_delay - delay in msec to resume scan if exceed max proc
731 time or update, 0: default to 1
732 @param stale_threshold - threshold in minutes for neighbor deletion,
733 0: default to 4*scan_interval
735 autoreply define ip_scan_neighbor_enable_disable
747 /** \brief IP probe neighbor address on an interface by sending an
748 ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
749 @param client_index - opaque cookie to identify the sender
750 @param context - sender context, to match reply w/ request
751 @param sw_if_index - interface index
752 @param dst_address - target IP address to send IP addr resolution request
753 @param is_ipv6 - [1|0] to indicate if address family is IPv[6|4]
755 autoreply define ip_probe_neighbor
764 /** \brief Register for IP4 ARP resolution event on receing ARP reply or
765 MAC/IP info from ARP requests in L2 BDs
766 @param client_index - opaque cookie to identify the sender
767 @param context - sender context, to match reply w/ request
768 @param enable_disable - 1 => register for events, 0 => cancel registration
769 @param pid - sender's pid
770 @param address - exact IP4 address of interested arp resolution event, or
771 0 to get MAC/IP info from ARP requests in BDs
773 autoreply define want_ip4_arp_events
782 /** \brief Tell client about an IP4 ARP resolution event or
783 MAC/IP info from ARP requests in L2 BDs
784 @param client_index - opaque cookie to identify the sender
785 @param address - the exact ip4 address of interest
786 @param pid - client pid registered to receive notification
787 @param sw_if_index - interface which received ARP packet
788 @param new_mac - the new mac address
789 @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
802 rpc want_ip4_arp_events returns want_ip4_arp_events_reply
803 events ip4_arp_event;
806 /** \brief Register for IP6 ND resolution event on recieving NA reply
807 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
808 @param client_index - opaque cookie to identify the sender
809 @param context - sender context, to match reply w/ request
810 @param enable_disable - 1 => register for events, 0 => cancel registration
811 @param pid - sender's pid
812 @param address - the exact IP6 address of interested ND resolution event, or
813 0 to get MAC/IP info from ICMP6 NS in L2 BDs.
815 autoreply define want_ip6_nd_events
824 /** \brief Tell client about an IP6 ND resolution or
825 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
826 @param client_index - opaque cookie to identify the sender
827 @param pid - client pid registered to receive notification
828 @param sw_if_index - interface which received ARP packet
829 @param address - the exact ip6 address of interest
830 @param new_mac - the new mac address
831 @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
844 rpc want_ip6_ra_events returns want_ip6_ra_events_reply
848 /** \brief Register for ip6 router advertisement events
849 @param client_index - opaque cookie to identify the sender
850 @param context - sender context, to match reply w/ request
851 @param enable_disable - 1 => register for events, 0 => cancel registration
852 @param pid - sender's pid
854 autoreply define want_ip6_ra_events
862 /** \brief Struct representing RA prefix info
863 @param dst_address - RA prefix info destination address
864 @param dst_address_length - RA prefix info destination address length
865 @param flags - RA prefix info flags
866 @param valid_time - RA prefix info valid time
867 @param preferred_time - RA prefix info preferred time
869 typeonly define ip6_ra_prefix_info
872 u8 dst_address_length;
878 /** \brief Tell client about a router advertisement event
879 @param client_index - opaque cookie to identify the sender
880 @param pid - client pid registered to receive notification
881 @param current_hop_limit - RA current hop limit
882 @param flags - RA flags
883 @param router_lifetime_in_sec - RA lifetime in seconds
884 @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
885 @param time_in_msec_between_retransmitted_neighbor_solicitations -
886 time in msec between retransmitted neighbor solicitations
895 u8 router_address[16];
896 u8 current_hop_limit;
898 u16 router_lifetime_in_sec;
899 u32 neighbor_reachable_time_in_msec;
900 u32 time_in_msec_between_retransmitted_neighbor_solicitations;
902 vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
906 rpc want_ip6_nd_events returns want_ip6_nd_events_reply
910 /** \brief Proxy ARP configuration type
911 @param vrf_id - VRF / Fib table ID
912 @param low_address[4] - Low address of the Proxy ARP range
913 @param hi_address[4] - High address of the Proxy ARP range
915 typeonly define proxy_arp
922 /** \brief Proxy ARP add / del request
923 @param client_index - opaque cookie to identify the sender
924 @param context - sender context, to match reply w/ request
925 @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
926 @param proxy - Proxy configuration
928 autoreply define proxy_arp_add_del
933 vl_api_proxy_arp_t proxy;
936 /** \brief Proxy ARP dump request
938 define proxy_arp_dump
944 /** \brief Proxy ARP dump details reply
945 * @param proxy - Same data as used to configure
947 define proxy_arp_details
950 vl_api_proxy_arp_t proxy;
953 /** \brief Proxy ARP add / del interface request
954 @param client_index - opaque cookie to identify the sender
955 @param context - sender context, to match reply w/ request
956 @param sw_if_index - Which interface to enable / disable Proxy Arp on
957 @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
959 autoreply define proxy_arp_intfc_enable_disable
964 /* 1 = on, 0 = off */
968 /** \brief Proxy ARP interface dump request
970 define proxy_arp_intfc_dump
976 /** \brief Proxy ARP interface dump details reply
977 * @param sw_if_index The interface on which ARP proxy is enabled.
979 define proxy_arp_intfc_details
985 /** \brief Reset fib table request
986 @param client_index - opaque cookie to identify the sender
987 @param context - sender context, to match reply w/ request
988 @param vrf_id - vrf/table id of the fib table to reset
989 @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
991 autoreply define reset_fib
999 /** \brief Set max allowed ARP or ip6 neighbor entries request
1000 @param client_index - opaque cookie to identify the sender
1001 @param context - sender context, to match reply w/ request
1002 @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1003 @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1005 autoreply define set_arp_neighbor_limit
1010 u32 arp_neighbor_limit;
1013 /** \brief IOAM enable : Enable in-band OAM
1014 @param id - profile id
1015 @param seqno - To enable Seqno Processing
1016 @param analyse - Enabling analysis of iOAM at decap node
1017 @param pow_enable - Proof of Work enabled or not flag
1018 @param trace_enable - iOAM Trace enabled or not flag
1020 autoreply define ioam_enable
1032 /** \brief iOAM disable
1033 @param client_index - opaque cookie to identify the sender
1034 @param context - sender context, to match reply w/ request
1035 @param index - MAP Domain index
1037 autoreply define ioam_disable
1044 autoreply define ip_reassembly_set
1049 u32 max_reassemblies;
1050 u32 expire_walk_interval_ms;
1054 define ip_reassembly_get
1061 define ip_reassembly_get_reply
1066 u32 max_reassemblies;
1067 u32 expire_walk_interval_ms;
1071 /** \brief Enable/disable reassembly feature
1072 @param client_index - opaque cookie to identify the sender
1073 @param context - sender context, to match reply w/ request
1074 @param sw_if_index - interface to enable/disable feature on
1075 @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1076 @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1078 autoreply define ip_reassembly_enable_disable
1089 * eval: (c-set-style "gnu")