FD.io VPP  v18.04-17-g3a0d853
Vector Packet Processing
ip.api
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /** \file
17 
18  This file defines vpp IP control-plane API messages which are generally
19  called through a shared memory interface.
20 */
21 
22 option version = "1.2.0";
23 import "vnet/fib/fib_types.api";
24 
25 /** \brief Add / del table request
26  A table can be added multiple times, but need be deleted only once.
27  @param client_index - opaque cookie to identify the sender
28  @param context - sender context, to match reply w/ request
29  @param is_ipv6 - V4 or V6 table
30  @param table_id - table ID associated with the route
31  This table ID will apply to both the unicats
32  and mlticast FIBs
33  @param name - A client provided name/tag for the table. If this is
34  not set by the client, then VPP will generate something
35  meaningfull.
36 */
37 autoreply define ip_table_add_del
38 {
44  u8 name[64];
45 };
46 
47 /** \brief Dump IP fib table
48  @param client_index - opaque cookie to identify the sender
49 */
50 define ip_fib_dump
51 {
54 };
55 
56 /** \brief IP FIB table response
57  @param table_id - IP fib table id
58  @address_length - mask length
59  @address - ip4 prefix
60  @param count - the number of fib_path in path
61  @param path - array of of fib_path structures
62 */
63 manual_endian manual_print define ip_fib_details
64 {
67  u8 table_name[64];
69  u8 address[4];
72 };
73 
74 /** \brief Dump IP6 fib table
75  @param client_index - opaque cookie to identify the sender
76 */
77 define ip6_fib_dump
78 {
81 };
82 
83 /** \brief IP6 FIB table entry response
84  @param table_id - IP6 fib table id
85  @param address_length - mask length
86  @param address - ip6 prefix
87  @param count - the number of fib_path in path
88  @param path - array of of fib_path structures
89 */
90 manual_endian manual_print define ip6_fib_details
91 {
94  u8 table_name[64];
96  u8 address[16];
99 };
100 
101 /** \brief Dump IP neighboors
102  @param client_index - opaque cookie to identify the sender
103  @param context - sender context, to match reply w/ request
104  @param sw_if_index - the interface to dump neighboors, ~0 == all
105  @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
106 */
107 define ip_neighbor_dump
108 {
113 };
114 
115 /** \brief IP neighboors dump response
116  @param context - sender context which was passed in the request
117  @param sw_if_index - The interface used to reach the neighbor
118  @param is_static - [1|0] to indicate if neighbor is statically configured
119  @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
120 */
121 define ip_neighbor_details {
126  u8 mac_address[6];
127  u8 ip_address[16];
128 };
129 
130 /** \brief IP neighbor add / del request
131  @param client_index - opaque cookie to identify the sender
132  @param context - sender context, to match reply w/ request
133  @param sw_if_index - interface used to reach neighbor
134  @param is_add - 1 to add neighbor, 0 to delete
135  @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
136  @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
137  @param is_static - A static neighbor Entry - there are not flushed
138  If the interface goes down.
139  @param is_no_adj_fib - Do not create a corresponding entry in the FIB
140  table for the neighbor.
141  @param mac_address - l2 address of the neighbor
142  @param dst_address - ip4 or ip6 address of the neighbor
143 */
144 autoreply define ip_neighbor_add_del
145 {
149  /* 1 = add, 0 = delete */
154  u8 mac_address[6];
155  u8 dst_address[16];
156 };
157 
158 /** \brief Set the ip flow hash config for a fib request
159  @param client_index - opaque cookie to identify the sender
160  @param context - sender context, to match reply w/ request
161  @param vrf_id - vrf/fib id
162  @param is_ipv6 - if non-zero the fib is ip6, else ip4
163  @param src - if non-zero include src in flow hash
164  @param dst - if non-zero include dst in flow hash
165  @param sport - if non-zero include sport in flow hash
166  @param dport - if non-zero include dport in flow hash
167  @param proto -if non-zero include proto in flow hash
168  @param reverse - if non-zero include reverse in flow hash
169 */
170 autoreply define set_ip_flow_hash
171 {
182 };
183 
184 /** \brief IPv6 router advertisement config request
185  @param client_index - opaque cookie to identify the sender
186  @param context - sender context, to match reply w/ request
187  @param suppress -
188  @param managed -
189  @param other -
190  @param ll_option -
191  @param send_unicast -
192  @param cease -
193  @param is_no -
194  @param default_router -
195  @param max_interval -
196  @param min_interval -
197  @param lifetime -
198  @param initial_count -
199  @param initial_interval -
200 */
201 autoreply define sw_interface_ip6nd_ra_config
202 {
219 };
220 
221 /** \brief IPv6 router advertisement prefix config request
222  @param client_index - opaque cookie to identify the sender
223  @param context - sender context, to match reply w/ request
224  @param sw_if_index - The interface the RA prefix information is for
225  @param address[] - The prefix to advertise
226  @param address_length - the prefix length
227  @param use_default - Revert to default settings
228  @param no_advertise - Do not advertise this prefix
229  @param off_link - The prefix is off link (it is not configured on the interface)
230  Configures the L-flag, When set, indicates that this
231  prefix can be used for on-link determination.
232  @param no_autoconfig - Setting for the A-flag. When
233  set indicates that this prefix can be used for
234  stateless address configuration.
235  @param no_onlink - The prefix is not on link. Make sure this is consistent
236  with the off_link parameter else YMMV
237  @param is_no - add/delete
238  @param val_lifetime - The length of time in
239  seconds (relative to the time the packet is sent)
240  that the prefix is valid for the purpose of on-link
241  determination. A value of all one bits
242  (0xffffffff) represents infinity
243  @param pref_lifetime - The length of time in
244  seconds (relative to the time the packet is sent)
245  that addresses generated from the prefix via
246  stateless address autoconfiguration remain
247  preferred [ADDRCONF]. A value of all one bits
248  (0xffffffff) represents infinity.
249 */
250 autoreply define sw_interface_ip6nd_ra_prefix
251 {
255  u8 address[16];
265 };
266 
267 /** \brief IPv6 ND proxy config
268  @param client_index - opaque cookie to identify the sender
269  @param context - sender context, to match reply w/ request
270  @param sw_if_index - The interface the host is on
271  @param address - The address of the host for which to proxy for
272  @param is_add - Adding or deleting
273 */
274 autoreply define ip6nd_proxy_add_del
275 {
280  u8 address[16];
281 };
282 
283 /** \brief IPv6 ND proxy details returned after request
284  @param context - sender context, to match reply w/ request
285  @param retval - return code for the request
286 */
287 define ip6nd_proxy_details
288 {
292  u8 address[16];
293 };
294 
295 /** \brief IPv6 ND proxy dump request
296  @param context - sender context, to match reply w/ request
297  @param retval - return code for the request
298  @param sw_if_index - The interface the host is on
299  @param address - The address of the host for which to proxy for
300 */
301 define ip6nd_proxy_dump
302 {
305 };
306 
307 /** \brief Start / stop sending router solicitation
308  @param client_index - opaque cookie to identify the sender
309  @param context - sender context, to match reply w/ request
310  @param irt - initial retransmission time
311  @param mrt - maximum retransmission time
312  @param mrc - maximum retransmission count
313  @param mrd - maximum retransmission duration
314  @param sw_if_index - software interface index of interface
315  for sending router solicitation
316  @param stop - if non-zero then stop sending router solicitation,
317  otherwise start sending router solicitation
318 */
319 autoreply define ip6nd_send_router_solicitation
320 {
329 };
330 
331 /** \brief IPv6 interface enable / disable request
332  @param client_index - opaque cookie to identify the sender
333  @param context - sender context, to match reply w/ request
334  @param sw_if_index - interface used to reach neighbor
335  @param enable - if non-zero enable ip6 on interface, else disable
336 */
337 autoreply define sw_interface_ip6_enable_disable
338 {
342  u8 enable; /* set to true if enable */
343 };
344 
345 /** \brief IPv6 set link local address on interface 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 to set link local on
349  @param address[] - the new link local address
350 */
351 autoreply define sw_interface_ip6_set_link_local_address
352 {
356  u8 address[16];
357 };
358 
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.
373  @param is_classify -
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
383  identifier.
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
390 */
391 autoreply define ip_add_del_route
392 {
417  u8 dst_address[16];
418  u8 next_hop_address[16];
421  vl_api_fib_mpls_label_t next_hop_out_label_stack[next_hop_n_out_labels];
422 };
423 
424 /** \brief Add / del route request
425  @param client_index - opaque cookie to identify the sender
426  @param context - sender context, to match reply w/ request
427  @param sw_if_index - software index of the new vlan's parent interface
428  @param vrf_id - fib table /vrf associated with the route
429  @param next_hop_afi - Use dpo_proto_t
430  FIXME
431 */
432 autoreply define ip_mroute_add_del
433 {
447  u8 grp_address[16];
448  u8 src_address[16];
449 };
450 
451 /** \brief Dump IP multicast fib table
452  @param client_index - opaque cookie to identify the sender
453 */
454 define ip_mfib_dump
455 {
458 };
459 
460 /** \brief IP Multicast FIB table response
461  @param table_id - IP fib table id
462  @address_length - mask length
463  @grp_address - Group address/prefix
464  @src_address - Source address
465  @param count - the number of fib_path in path
466  @param path - array of of fib_path structures
467 */
468 manual_endian manual_print define ip_mfib_details
469 {
475  u8 grp_address[4];
476  u8 src_address[4];
479 };
480 
481 /** \brief Dump IP6 multicast fib table
482  @param client_index - opaque cookie to identify the sender
483 */
484 define ip6_mfib_dump
485 {
488 };
489 
490 /** \brief IP6 Multicast FIB table response
491  @param table_id - IP fib table id
492  @address_length - mask length
493  @grp_address - Group address/prefix
494  @src_address - Source address
495  @param count - the number of fib_path in path
496  @param path - array of of fib_path structures
497 */
498 manual_endian manual_print define ip6_mfib_details
499 {
503  u8 grp_address[16];
504  u8 src_address[16];
507 };
508 
509 define ip_address_details
510 {
513  u8 ip[16];
517 };
518 
519 define ip_address_dump
520 {
525 };
526 
527 define ip_details
528 {
532 };
533 
534 define ip_dump
535 {
539 };
540 
541 define mfib_signal_dump
542 {
545 };
546 
547 define mfib_signal_details
548 {
554  u8 grp_address[16];
555  u8 src_address[16];
557  u8 ip_packet_data[256];
558 };
559 
560 /** \brief IP punt policer
561  @param client_index - opaque cookie to identify the sender
562  @param context - sender context, to match reply w/ request
563  @param is_add - 1 to add neighbor, 0 to delete
564  @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
565  @param policer_index - Index of policer to use
566 */
567 autoreply define ip_punt_police
568 {
574 };
575 
576 /** \brief IP punt redirect
577  @param client_index - opaque cookie to identify the sender
578  @param context - sender context, to match reply w/ request
579  @param is_add - 1 to add neighbor, 0 to delete
580  @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
581  @param tx_sw_if_index - the TX interface to which traffic shoulde be
582  redirected.
583  @param nh - The next-hop to redirect the traffic to.
584 */
585 autoreply define ip_punt_redirect
586 {
593  u8 nh[16];
594 };
595 
596 autoreply define ip_container_proxy_add_del
597 {
600  u8 ip[16];
605 };
606 
607 /** \brief Configure IP source and L4 port-range check
608  @param client_index - opaque cookie to identify the sender
609  @param context - sender context, to match reply w/ request
610  @param is_ip6 - 1 if source address type is IPv6
611  @param is_add - 1 if add, 0 if delete
612  @param mask_length - mask length for address entry
613  @param address - array of address bytes
614  @param number_of_ranges - length of low_port and high_port arrays (must match)
615  @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
616  @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
617  @param vrf_id - fib table/vrf id to associate the source and port-range check with
618  @note To specify a single port set low_port and high_port entry the same
619 */
620 autoreply define ip_source_and_port_range_check_add_del
621 {
627  u8 address[16];
629  u16 low_ports[32];
630  u16 high_ports[32];
632 };
633 
634 /** \brief Set interface source and L4 port-range request
635  @param client_index - opaque cookie to identify the sender
636  @param context - sender context, to match reply w/ request
637  @param interface_id - interface index
638  @param tcp_vrf_id - VRF associated with source and TCP port-range check
639  @param udp_vrf_id - VRF associated with source and TCP port-range check
640 */
641 autoreply define ip_source_and_port_range_check_interface_add_del
642 {
651 };
652 
653 /** \brief Register for ip4 arp resolution events
654  @param client_index - opaque cookie to identify the sender
655  @param context - sender context, to match reply w/ request
656  @param enable_disable - 1 => register for events, 0 => cancel registration
657  @param pid - sender's pid
658  @param address - the exact ip4 address of interest
659 */
660 autoreply define want_ip4_arp_events
661 {
667 };
668 
669 /** \brief Tell client about an ip4 arp resolution event
670  @param client_index - opaque cookie to identify the sender
671  @param address - the exact ip4 address of interest
672  @param pid - client pid registered to receive notification
673  @param sw_if_index - interface which received ARP packet
674  @param new_mac - the new mac address
675  @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
676 */
677 define ip4_arp_event
678 {
683  u8 new_mac[6];
685 };
686 
688  rpc want_ip4_arp_events returns want_ip4_arp_events_reply
689  events ip4_arp_event;
690 };
691 
692 /** \brief Register for ip6 nd resolution events
693  @param client_index - opaque cookie to identify the sender
694  @param context - sender context, to match reply w/ request
695  @param enable_disable - 1 => register for events, 0 => cancel registration
696  @param pid - sender's pid
697  @param address - the exact ip6 address of interest
698 */
699 autoreply define want_ip6_nd_events
700 {
705  u8 address[16];
706 };
707 
708 /** \brief Tell client about an ip6 nd resolution or mac/ip event
709  @param client_index - opaque cookie to identify the sender
710  @param pid - client pid registered to receive notification
711  @param sw_if_index - interface which received ARP packet
712  @param address - the exact ip6 address of interest
713  @param new_mac - the new mac address
714  @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
715 */
716 define ip6_nd_event
717 {
721  u8 address[16];
722  u8 new_mac[6];
724 };
725 
726 service {
727  rpc want_ip6_ra_events returns want_ip6_ra_events_reply
728  events ip6_ra_event;
729 };
730 
731 /** \brief Register for ip6 router advertisement events
732  @param client_index - opaque cookie to identify the sender
733  @param context - sender context, to match reply w/ request
734  @param enable_disable - 1 => register for events, 0 => cancel registration
735  @param pid - sender's pid
736 */
737 autoreply define want_ip6_ra_events
738 {
743 };
744 
745 /** \brief Struct representing RA prefix info
746  @param dst_address - RA prefix info destination address
747  @param dst_address_length - RA prefix info destination address length
748  @param flags - RA prefix info flags
749  @param valid_time - RA prefix info valid time
750  @param preferred_time - RA prefix info preferred time
751 */
752 typeonly define ip6_ra_prefix_info
753 {
754  u8 dst_address[16];
759 };
760 
761 /** \brief Tell client about a router advertisement event
762  @param client_index - opaque cookie to identify the sender
763  @param pid - client pid registered to receive notification
764  @param current_hop_limit - RA current hop limit
765  @param flags - RA flags
766  @param router_lifetime_in_sec - RA lifetime in seconds
767  @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
768  @param time_in_msec_between_retransmitted_neighbor_solicitations -
769  time in msec between retransmitted neighbor solicitations
770  @param n_prefixes -
771  @param prefixes -
772 */
773 define ip6_ra_event
774 {
778  u8 router_address[16];
785  vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
786 };
787 
788 service {
789  rpc want_ip6_nd_events returns want_ip6_nd_events_reply
790  events ip6_nd_event;
791 };
792 
793 /** \brief Proxy ARP add / del request
794  @param client_index - opaque cookie to identify the sender
795  @param context - sender context, to match reply w/ request
796  @param vrf_id - VRF / Fib table ID
797  @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
798  @param low_address[4] - Low address of the Proxy ARP range
799  @param hi_address[4] - High address of the Proxy ARP range
800 */
801 autoreply define proxy_arp_add_del
802 {
807  u8 low_address[4];
808  u8 hi_address[4];
809 };
810 
811 /** \brief Proxy ARP add / del request
812  @param client_index - opaque cookie to identify the sender
813  @param context - sender context, to match reply w/ request
814  @param sw_if_index - Which interface to enable / disable Proxy Arp on
815  @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
816 */
817 autoreply define proxy_arp_intfc_enable_disable
818 {
822  /* 1 = on, 0 = off */
824 };
825 
826 /** \brief Reset fib table request
827  @param client_index - opaque cookie to identify the sender
828  @param context - sender context, to match reply w/ request
829  @param vrf_id - vrf/table id of the fib table to reset
830  @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
831 */
832 autoreply define reset_fib
833 {
838 };
839 
840 /** \brief Set max allowed ARP or ip6 neighbor entries request
841  @param client_index - opaque cookie to identify the sender
842  @param context - sender context, to match reply w/ request
843  @param is_ipv6 - neighbor limit if non-zero, else ARP limit
844  @param arp_neighbor_limit - the new limit, defaults are ~ 50k
845 */
846 autoreply define set_arp_neighbor_limit
847 {
852 };
853 
854 /** \brief IOAM enable : Enable in-band OAM
855  @param id - profile id
856  @param seqno - To enable Seqno Processing
857  @param analyse - Enabling analysis of iOAM at decap node
858  @param pow_enable - Proof of Work enabled or not flag
859  @param trace_enable - iOAM Trace enabled or not flag
860 */
861 autoreply define ioam_enable
862 {
871 };
872 
873 /** \brief iOAM disable
874  @param client_index - opaque cookie to identify the sender
875  @param context - sender context, to match reply w/ request
876  @param index - MAP Domain index
877 */
878 autoreply define ioam_disable
879 {
883 };
884 
885 autoreply define ip_reassembly_set
886 {
893 };
894 
895 define ip_reassembly_get
896 {
900 };
901 
902 define ip_reassembly_get_reply
903 {
911 };
912 
913 /** \brief Enable/disable reassembly feature
914  @param client_index - opaque cookie to identify the sender
915  @param context - sender context, to match reply w/ request
916  @param sw_if_index - interface to enable/disable feature on
917  @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
918  @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
919 */
920 autoreply define ip_reassembly_enable_disable
921 {
927 };
928 
929 /*
930  * Local Variables:
931  * eval: (c-set-style "gnu")
932  * End:
933  */
u16 router_lifetime_in_sec
Definition: ip.api:781
u32 neighbor_reachable_time_in_msec
Definition: ip.api:782
int i32
Definition: types.h:81
static uword ip_punt_redirect(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, u8 arc_index, ip_punt_redirect_t *redirect)
Definition: ip_punt_drop.h:286
unsigned int u32
Definition: types.h:88
u32 time_in_msec_between_retransmitted_neighbor_solicitations
Definition: ip.api:783
FIB path.
Definition: fib_types.api:47
service
Definition: ip.api:687
size_t count
Definition: vapi.c:42
unsigned short u16
Definition: types.h:57
option version
Definition: ip.api:22
Struct representing RA prefix info.
Definition: ip.api:752
unsigned char u8
Definition: types.h:56
u32 client_index
Definition: ip.api:834
u32 client_index
Definition: ip.api:536