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 = "3.0.0";
25 import "vnet/fib/fib_types.api";
26 import "vnet/ethernet/ethernet_types.api";
27 import "vnet/mfib/mfib_types.api";
29 /** \brief An IP table
30 @param is_ipv6 - V4 or V6 table
31 @param table_id - table ID associated with the route
32 This table ID will apply to both the unicats
34 @param name - A client provided name/tag for the table. If this is
35 not set by the client, then VPP will generate something
45 /** \brief Add / del table request
46 A table can be added multiple times, but need be deleted only once.
47 @param client_index - opaque cookie to identify the sender
48 @param context - sender context, to match reply w/ request
50 autoreply define ip_table_add_del
55 vl_api_ip_table_t table;
58 /** \brief Dump IP all fib tables
59 @param client_index - opaque cookie to identify the sender
60 @param context - sender context, to match reply w/ request
68 /** \brief IP table replace being
70 The use-case is that, for some unspecified reason, the control plane
71 has a very different set of entries it wants in the table than VPP
72 currently has. The CP would thus like to 'replace' VPP's current table
73 only by specifying what the new set of entries shall be, i.e. it is not
74 going to delete anything that already eixts.
75 the CP delcartes the start of this procedure with this begin_replace
76 API Call, and when it has populated all the entries it wants, it calls
77 the below end_replace API. From this point on it is of coursce free
78 to add and delete entries as usual.
79 The underlying mechanism by which VPP implements this replace is
80 purposefully left unspecified.
82 @param client_index - opaque cookie to identify the sender
83 @param context - sender context, to match reply w/ request
84 @param table - The table to resync
86 autoreply define ip_table_replace_begin
90 vl_api_ip_table_t table;
93 /** \brief IP table replace end
97 @param client_index - opaque cookie to identify the sender
98 @param context - sender context, to match reply w/ request
99 @param table - The table that has converged
101 autoreply define ip_table_replace_end
105 vl_api_ip_table_t table;
108 /** \brief IP table flush
109 Flush a table of all routes
110 @param client_index - opaque cookie to identify the sender
111 @param context - sender context, to match reply w/ request
112 @param table - The table to flush
114 autoreply define ip_table_flush
118 vl_api_ip_table_t table;
121 /** \brief IP FIB table response
122 @param context - sender context
123 @param table - description of the table
125 manual_endian manual_print define ip_table_details
128 vl_api_ip_table_t table;
131 /** \brief An IP route
132 @param table_id The IP table the route is in
133 @param stats_index The index of the route in the stats segment
134 @param prefix the prefix for the route
135 @param n_paths The number of paths the route has
136 @param paths The paths of the route
142 vl_api_prefix_t prefix;
144 vl_api_fib_path_t paths[n_paths];
147 /** \brief Add / del route request
148 @param client_index - opaque cookie to identify the sender
149 @param context - sender context, to match reply w/ request
150 @param is_multipath - Set to 1 if these paths will be added/removed
151 to/from the existing set, or 0 to replace
153 is_add=0 & is_multipath=0 implies delete all paths
154 @param is_add - Are the paths being added or removed
156 define ip_route_add_del
162 vl_api_ip_route_t route;
164 define ip_route_add_del_reply
171 /** \brief Dump IP routes from a table
172 @param client_index - opaque cookie to identify the sender
173 @param table - The table from which to dump routes (ony ID an AF are needed)
179 vl_api_ip_table_t table;
182 /** \brief IP FIB table entry response
183 @param route The route entry in the table
185 manual_endian manual_print define ip_route_details
188 vl_api_ip_route_t route;
191 /** \brief IP neighbor flags
192 @param is_static - A static neighbor Entry - there are not flushed
193 If the interface goes down.
194 @param is_no_fib_entry - Do not create a corresponding entry in the FIB
195 table for the neighbor.
197 enum ip_neighbor_flags
199 IP_API_NEIGHBOR_FLAG_NONE = 0,
200 IP_API_NEIGHBOR_FLAG_STATIC = 0x1,
201 IP_API_NEIGHBOR_FLAG_NO_FIB_ENTRY = 0x2,
204 /** \brief IP neighbor
205 @param sw_if_index - interface used to reach neighbor
206 @param mac_address - l2 address of the neighbor
207 @param ip_address - ip4 or ip6 address of the neighbor
208 @param flags - flags for the nieghbor
210 typedef ip_neighbor {
212 vl_api_ip_neighbor_flags_t flags;
213 vl_api_mac_address_t mac_address;
214 vl_api_address_t ip_address;
217 /** \brief IP neighbor add / del request
218 @param client_index - opaque cookie to identify the sender
219 @param context - sender context, to match reply w/ request
220 @param is_add - 1 to add neighbor, 0 to delete
221 @param neighbor - the neighor to add/remove
223 define ip_neighbor_add_del
227 /* 1 = add, 0 = delete */
229 vl_api_ip_neighbor_t neighbor;
231 define ip_neighbor_add_del_reply
238 /** \brief Dump IP neighboors
239 @param client_index - opaque cookie to identify the sender
240 @param context - sender context, to match reply w/ request
241 @param sw_if_index - the interface to dump neighboors, ~0 == all
242 @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
244 define ip_neighbor_dump
252 /** \brief IP neighboors dump response
253 @param context - sender context which was passed in the request
254 @param neighbour - the neighbor
256 define ip_neighbor_details {
258 vl_api_ip_neighbor_t neighbor;
261 /** \brief Set the ip flow hash config for a fib request
262 @param client_index - opaque cookie to identify the sender
263 @param context - sender context, to match reply w/ request
264 @param vrf_id - vrf/fib id
265 @param is_ipv6 - if non-zero the fib is ip6, else ip4
266 @param src - if non-zero include src in flow hash
267 @param dst - if non-zero include dst in flow hash
268 @param sport - if non-zero include sport in flow hash
269 @param dport - if non-zero include dport in flow hash
270 @param proto -if non-zero include proto in flow hash
271 @param reverse - if non-zero include reverse in flow hash
272 @param symmetric - if non-zero include symmetry in flow hash
274 autoreply define set_ip_flow_hash
289 /** \brief IPv6 router advertisement config request
290 @param client_index - opaque cookie to identify the sender
291 @param context - sender context, to match reply w/ request
296 @param send_unicast -
299 @param default_router -
300 @param max_interval -
301 @param min_interval -
303 @param initial_count -
304 @param initial_interval -
306 autoreply define sw_interface_ip6nd_ra_config
323 u32 initial_interval;
326 /** \brief IPv6 router advertisement prefix config request
327 @param client_index - opaque cookie to identify the sender
328 @param context - sender context, to match reply w/ request
329 @param sw_if_index - The interface the RA prefix information is for
330 @param prefix - The prefix to advertise
331 @param use_default - Revert to default settings
332 @param no_advertise - Do not advertise this prefix
333 @param off_link - The prefix is off link (it is not configured on the interface)
334 Configures the L-flag, When set, indicates that this
335 prefix can be used for on-link determination.
336 @param no_autoconfig - Setting for the A-flag. When
337 set indicates that this prefix can be used for
338 stateless address configuration.
339 @param no_onlink - The prefix is not on link. Make sure this is consistent
340 with the off_link parameter else YMMV
341 @param is_no - add/delete
342 @param val_lifetime - The length of time in
343 seconds (relative to the time the packet is sent)
344 that the prefix is valid for the purpose of on-link
345 determination. A value of all one bits
346 (0xffffffff) represents infinity
347 @param pref_lifetime - The length of time in
348 seconds (relative to the time the packet is sent)
349 that addresses generated from the prefix via
350 stateless address autoconfiguration remain
351 preferred [ADDRCONF]. A value of all one bits
352 (0xffffffff) represents infinity.
354 autoreply define sw_interface_ip6nd_ra_prefix
359 vl_api_prefix_t prefix;
370 /** \brief IPv6 ND proxy config
371 @param client_index - opaque cookie to identify the sender
372 @param context - sender context, to match reply w/ request
373 @param sw_if_index - The interface the host is on
374 @param address - The address of the host for which to proxy for
375 @param is_add - Adding or deleting
377 autoreply define ip6nd_proxy_add_del
383 vl_api_ip6_address_t ip;
386 /** \brief IPv6 ND proxy details returned after request
387 @param context - sender context, to match reply w/ request
388 @param retval - return code for the request
390 define ip6nd_proxy_details
394 vl_api_ip6_address_t ip;
397 /** \brief IPv6 ND proxy dump request
398 @param context - sender context, to match reply w/ request
399 @param retval - return code for the request
400 @param sw_if_index - The interface the host is on
401 @param address - The address of the host for which to proxy for
403 define ip6nd_proxy_dump
409 /** \brief Start / stop sending router solicitation
410 @param client_index - opaque cookie to identify the sender
411 @param context - sender context, to match reply w/ request
412 @param irt - initial retransmission time
413 @param mrt - maximum retransmission time
414 @param mrc - maximum retransmission count
415 @param mrd - maximum retransmission duration
416 @param sw_if_index - software interface index of interface
417 for sending router solicitation
418 @param stop - if non-zero then stop sending router solicitation,
419 otherwise start sending router solicitation
421 autoreply define ip6nd_send_router_solicitation
433 /** \brief IPv6 interface enable / disable request
434 @param client_index - opaque cookie to identify the sender
435 @param context - sender context, to match reply w/ request
436 @param sw_if_index - interface used to reach neighbor
437 @param enable - if non-zero enable ip6 on interface, else disable
439 autoreply define sw_interface_ip6_enable_disable
444 u8 enable; /* set to true if enable */
447 /** \brief IPv6 set link local address on interface request
448 @param client_index - opaque cookie to identify the sender
449 @param context - sender context, to match reply w/ request
450 @param sw_if_index - interface to set link local on
451 @param address[] - the new link local address
453 autoreply define sw_interface_ip6_set_link_local_address
461 /** \brief Dump IP multicast fib table
462 @param client_index - opaque cookie to identify the sender
464 define ip_mtable_dump
469 define ip_mtable_details
473 vl_api_ip_table_t table;
476 /** \brief Add / del route request
478 Adds a route, consisting both of the MFIB entry to match packets
479 (which may already exist) and a path to send those packets down.
480 Routes can be entered repeatedly to add multiple paths. Deletions are
483 @param client_index - opaque cookie to identify the sender
484 @param context - sender context, to match reply w/ request
485 @param table_id - fib table /vrf associated with the route
486 @param is_add - true if adding a route; false if deleting one
487 @param is_ipv6 - true iff all the addresses are v6
488 @param entry_flags - see fib_entry_flag_t
489 @param itf_flags - see mfib_entry_flags_t
490 @param next_hop_afi - see dpo_proto_t; the type of destination description
491 @param src_address - the source of the packet
492 @param grp_address - the group the packet is destined to
493 @param nh_address - the nexthop to forward the packet to
494 @param next_hop_sw_if_index - interface to emit packet on
496 BIER AFIs use the BIER imposition ID. v4 and v6 AFIs use either the
497 interface or the nexthop address.
499 Note that if the route is source-specific (S is supplied, not all 0s),
500 the prefix match is treated as exact (prefixlen /32 or /128).
502 FIXME not complete yet
509 vl_api_mprefix_t prefix;
511 vl_api_mfib_path_t paths[n_paths];
514 define ip_mroute_add_del
520 vl_api_ip_mroute_t route;
522 define ip_mroute_add_del_reply
529 /** \brief Dump IP multicast fib table
530 @param table - The table from which to dump routes (ony ID an AF are needed)
532 define ip_mroute_dump
536 vl_api_ip_table_t table;
539 /** \brief IP Multicast Route Details
540 @param route - Details of the route
542 manual_endian manual_print define ip_mroute_details
545 vl_api_ip_mroute_t route;
548 define ip_address_details
552 vl_api_address_with_prefix_t prefix;
555 define ip_address_dump
563 /** \brief IP unnumbered configurations
564 @param sw_if_index The interface that has unnumbered configuration
565 @param ip_sw_if_index The IP interface that it is unnnumbered to
567 define ip_unnumbered_details
574 /** \brief Dump IP unnumbered configurations
575 @param sw_if_index ~0 for all interfaces, else the interface desired
577 define ip_unnumbered_dump
598 define mfib_signal_dump
604 define mfib_signal_details
609 vl_api_mprefix_t prefix;
611 u8 ip_packet_data[256];
614 /** \brief IP punt policer
615 @param client_index - opaque cookie to identify the sender
616 @param context - sender context, to match reply w/ request
617 @param is_add - 1 to add neighbor, 0 to delete
618 @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
619 @param policer_index - Index of policer to use
621 autoreply define ip_punt_police
630 /** \brief Punt redirect type
631 @param rx_sw_if_index - specify the original RX interface of traffic
632 that should be redirected. ~0 means any interface.
633 @param tx_sw_if_index - the TX interface to which traffic shoulde be
635 @param nh - the next-hop to redirect the traffic to.
636 @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
638 typedef punt_redirect
645 /** \brief IP punt redirect
646 @param client_index - opaque cookie to identify the sender
647 @param context - sender context, to match reply w/ request
648 @param punt - punt definition
649 @param is_add - 1 to add neighbor, 0 to delete
651 autoreply define ip_punt_redirect
655 vl_api_punt_redirect_t punt;
659 define ip_punt_redirect_dump
667 define ip_punt_redirect_details
670 vl_api_punt_redirect_t punt;
673 autoreply define ip_container_proxy_add_del
682 define ip_container_proxy_dump
688 define ip_container_proxy_details
692 vl_api_prefix_t prefix;
695 /** \brief Configure IP source and L4 port-range check
696 @param client_index - opaque cookie to identify the sender
697 @param context - sender context, to match reply w/ request
698 @param is_ip6 - 1 if source address type is IPv6
699 @param is_add - 1 if add, 0 if delete
700 @param ip - prefix to match
701 @param number_of_ranges - length of low_port and high_port arrays (must match)
702 @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
703 @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
704 @param vrf_id - fib table/vrf id to associate the source and port-range check with
705 @note To specify a single port set low_port and high_port entry the same
707 autoreply define ip_source_and_port_range_check_add_del
712 vl_api_prefix_t prefix;
719 /** \brief Set interface source and L4 port-range request
720 @param client_index - opaque cookie to identify the sender
721 @param context - sender context, to match reply w/ request
722 @param interface_id - interface index
723 @param tcp_vrf_id - VRF associated with source and TCP port-range check
724 @param udp_vrf_id - VRF associated with source and TCP port-range check
726 autoreply define ip_source_and_port_range_check_interface_add_del
738 /** \brief Set interface source check request
739 @param client_index - opaque cookie to identify the sender
740 @param context - sender context, to match reply w/ request
741 @param is_add - add or del
742 @param loose - strict or loose
743 @param sw_if_index - interface index
745 autoreply define ip_source_check_interface_add_del
754 /** \brief Enable/disable periodic IP neighbor scan
755 @param client_index - opaque cookie to identify the sender
756 @param context - sender context, to match reply w/ request
757 @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
758 @param scan_interval - neighbor scan interval in minutes, 0: default to 1
759 @param max_proc_time - max processing time per run in usec, 0: default to 20
760 @param max_update - max neighbor probe/delete per run, 0: default to 10
761 @param scan_int_delay - delay in msec to resume scan if exceed max proc
762 time or update, 0: default to 1
763 @param stale_threshold - threshold in minutes for neighbor deletion,
764 0: default to 4*scan_interval
766 autoreply define ip_scan_neighbor_enable_disable
778 /** \brief IP probe neighbor address on an interface by sending an
779 ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
780 @param client_index - opaque cookie to identify the sender
781 @param context - sender context, to match reply w/ request
782 @param sw_if_index - interface index
783 @param dst - target IP address to send IP addr resolution request
785 autoreply define ip_probe_neighbor
790 vl_api_address_t dst;
793 /** \brief Register for IP4 ARP resolution event on receing ARP reply or
794 MAC/IP info from ARP requests in L2 BDs
795 @param client_index - opaque cookie to identify the sender
796 @param context - sender context, to match reply w/ request
797 @param enable_disable - 1 => register for events, 0 => cancel registration
798 @param pid - sender's pid
799 @param ip - exact IP4 address of interested arp resolution event, or
800 0 to get MAC/IP info from ARP requests in BDs
802 autoreply define want_ip4_arp_events
808 vl_api_ip4_address_t ip;
811 /** \brief Tell client about an IP4 ARP resolution event or
812 MAC/IP info from ARP requests in L2 BDs
813 @param client_index - opaque cookie to identify the sender
814 @param ip - the exact ip4 address of interest
815 @param pid - client pid registered to receive notification
816 @param sw_if_index - interface which received ARP packet
817 @param mac - the new mac address
818 @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
823 vl_api_ip4_address_t ip;
826 vl_api_mac_address_t mac;
831 rpc want_ip4_arp_events returns want_ip4_arp_events_reply
832 events ip4_arp_event;
835 /** \brief Register for IP6 ND resolution event on recieving NA reply
836 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
837 @param client_index - opaque cookie to identify the sender
838 @param context - sender context, to match reply w/ request
839 @param enable_disable - 1 => register for events, 0 => cancel registration
840 @param pid - sender's pid
841 @param ip - the exact IP6 address of interested ND resolution event, or
842 0 to get MAC/IP info from ICMP6 NS in L2 BDs.
844 autoreply define want_ip6_nd_events
850 vl_api_ip6_address_t ip;
853 /** \brief Tell client about an IP6 ND resolution or
854 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
855 @param client_index - opaque cookie to identify the sender
856 @param pid - client pid registered to receive notification
857 @param sw_if_index - interface which received ARP packet
858 @param ip - the exact ip6 address of interest
859 @param new_mac - the new mac address
860 @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
867 vl_api_ip6_address_t ip;
868 vl_api_mac_address_t mac;
873 rpc want_ip6_ra_events returns want_ip6_ra_events_reply
877 /** \brief Register for ip6 router advertisement events
878 @param client_index - opaque cookie to identify the sender
879 @param context - sender context, to match reply w/ request
880 @param enable_disable - 1 => register for events, 0 => cancel registration
881 @param pid - sender's pid
883 autoreply define want_ip6_ra_events
891 /** \brief Struct representing RA prefix info
892 @param prefix - RA prefix info destination address
893 @param flags - RA prefix info flags
894 @param valid_time - RA prefix info valid time
895 @param preferred_time - RA prefix info preferred time
897 typedef ip6_ra_prefix_info
899 vl_api_prefix_t prefix;
905 /** \brief Tell client about a router advertisement event
906 @param client_index - opaque cookie to identify the sender
907 @param pid - client pid registered to receive notification
908 @param current_hop_limit - RA current hop limit
909 @param flags - RA flags
910 @param router_lifetime_in_sec - RA lifetime in seconds
911 @param router_addr - The router's address
912 @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
913 @param time_in_msec_between_retransmitted_neighbor_solicitations -
914 time in msec between retransmitted neighbor solicitations
923 vl_api_ip6_address_t router_addr;
924 u8 current_hop_limit;
926 u16 router_lifetime_in_sec;
927 u32 neighbor_reachable_time_in_msec;
928 u32 time_in_msec_between_retransmitted_neighbor_solicitations;
930 vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
934 rpc want_ip6_nd_events returns want_ip6_nd_events_reply
938 /** \brief Proxy ARP configuration type
939 @param table_id - VRF / Fib table ID
940 @param low - Low address of the Proxy ARP range
941 @param hi - High address of the Proxy ARP range
946 vl_api_ip4_address_t low;
947 vl_api_ip4_address_t hi;
950 /** \brief Proxy ARP add / del request
951 @param client_index - opaque cookie to identify the sender
952 @param context - sender context, to match reply w/ request
953 @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
954 @param proxy - Proxy configuration
956 autoreply define proxy_arp_add_del
961 vl_api_proxy_arp_t proxy;
964 /** \brief Proxy ARP dump request
966 define proxy_arp_dump
972 /** \brief Proxy ARP dump details reply
973 * @param proxy - Same data as used to configure
975 define proxy_arp_details
978 vl_api_proxy_arp_t proxy;
981 /** \brief Proxy ARP add / del interface request
982 @param client_index - opaque cookie to identify the sender
983 @param context - sender context, to match reply w/ request
984 @param sw_if_index - Which interface to enable / disable Proxy Arp on
985 @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
987 autoreply define proxy_arp_intfc_enable_disable
992 /* 1 = on, 0 = off */
996 /** \brief Proxy ARP interface dump request
998 define proxy_arp_intfc_dump
1004 /** \brief Proxy ARP interface dump details reply
1005 * @param sw_if_index The interface on which ARP proxy is enabled.
1007 define proxy_arp_intfc_details
1013 /** \brief Set max allowed ARP or ip6 neighbor entries request
1014 @param client_index - opaque cookie to identify the sender
1015 @param context - sender context, to match reply w/ request
1016 @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1017 @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1019 autoreply define set_arp_neighbor_limit
1024 u32 arp_neighbor_limit;
1027 /** \brief IOAM enable : Enable in-band OAM
1028 @param id - profile id
1029 @param seqno - To enable Seqno Processing
1030 @param analyse - Enabling analysis of iOAM at decap node
1031 @param pow_enable - Proof of Work enabled or not flag
1032 @param trace_enable - iOAM Trace enabled or not flag
1034 autoreply define ioam_enable
1046 /** \brief iOAM disable
1047 @param client_index - opaque cookie to identify the sender
1048 @param context - sender context, to match reply w/ request
1049 @param index - MAP Domain index
1051 autoreply define ioam_disable
1060 IP_REASS_TYPE_FULL = 0,
1061 IP_REASS_TYPE_SHALLOW_VIRTUAL = 0x1,
1064 autoreply define ip_reassembly_set
1069 u32 max_reassemblies;
1070 u32 max_reassembly_length;
1071 u32 expire_walk_interval_ms;
1073 vl_api_ip_reass_type_t type;
1076 define ip_reassembly_get
1081 vl_api_ip_reass_type_t type;
1084 define ip_reassembly_get_reply
1089 u32 max_reassemblies;
1090 u32 max_reassembly_length;
1091 u32 expire_walk_interval_ms;
1095 /** \brief Enable/disable reassembly feature
1096 @param client_index - opaque cookie to identify the sender
1097 @param context - sender context, to match reply w/ request
1098 @param sw_if_index - interface to enable/disable feature on
1099 @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1100 @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1102 autoreply define ip_reassembly_enable_disable
1109 vl_api_ip_reass_type_t type;
1114 * eval: (c-set-style "gnu")