aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/ip.api
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/ip/ip.api')
-rw-r--r--src/vnet/ip/ip.api905
1 files changed, 904 insertions, 1 deletions
diff --git a/src/vnet/ip/ip.api b/src/vnet/ip/ip.api
index 28786fa5a90..967f56cf917 100644
--- a/src/vnet/ip/ip.api
+++ b/src/vnet/ip/ip.api
@@ -20,7 +20,7 @@
called through a shared memory interface.
*/
-option version = "3.1.0";
+option version = "3.2.0";
import "vnet/interface_types.api";
import "vnet/fib/fib_types.api";
@@ -57,6 +57,35 @@ autoreply define ip_table_add_del
vl_api_ip_table_t table;
};
+/** \brief Allocate an unused table
+ A table can be added multiple times.
+ If a large number of tables are in use (millions), this API might
+ fail to find a free ID with very low probability, and will return
+ EAGAIN. A subsequent attempt may be successful.
+ @param client_index - opaque cookie to identify the sender
+ @param context - sender context, to match reply w/ request
+ @param table - if table.table_id == ~0, vpp allocates an unused table_id and
+ proceeds as in ip_table_add_del with is_add = true
+ if table.table_id != ~0, vpp uses the table.table_id and
+ proceeds as in ip_table_add_del with is_add = true
+ table.table_id should never be 0
+*/
+define ip_table_allocate
+{
+ u32 client_index;
+ u32 context;
+
+ vl_api_ip_table_t table;
+};
+
+define ip_table_allocate_reply
+{
+ u32 context;
+ i32 retval;
+
+ vl_api_ip_table_t table;
+};
+
/** \brief Dump IP all fib tables
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@@ -337,6 +366,41 @@ autoreply define set_ip_flow_hash_v2
vl_api_ip_flow_hash_config_t flow_hash_config;
};
+/**
+ @brief flow hash settings for an IP table
+ @param src - include src in flow hash
+ @param dst - include dst in flow hash
+ @param sport - include sport in flow hash
+ @param dport - include dport in flow hash
+ @param proto - include proto in flow hash
+ @param reverse - include reverse in flow hash
+ @param symmetric - include symmetry in flow hash
+ @param flowlabel - include flowlabel in flow hash
+ @param gtpv1teid - include gtpv1teid in flow hash
+*/
+enumflag ip_flow_hash_config_v2
+{
+ IP_API_V2_FLOW_HASH_SRC_IP = 0x01,
+ IP_API_V2_FLOW_HASH_DST_IP = 0x02,
+ IP_API_V2_FLOW_HASH_SRC_PORT = 0x04,
+ IP_API_V2_FLOW_HASH_DST_PORT = 0x08,
+ IP_API_V2_FLOW_HASH_PROTO = 0x10,
+ IP_API_V2_FLOW_HASH_REVERSE = 0x20,
+ IP_API_V2_FLOW_HASH_SYMETRIC = 0x40,
+ IP_API_V2_FLOW_HASH_FLOW_LABEL = 0x80,
+ IP_API_V2_FLOW_HASH_GTPV1_TEID = 0x100,
+};
+
+autoreply define set_ip_flow_hash_v3
+{
+ u32 client_index;
+ u32 context;
+ u32 table_id;
+ vl_api_address_family_t af;
+ vl_api_ip_flow_hash_config_v2_t flow_hash_config;
+ option status="in_progress";
+};
+
/** \brief Set the ip flow hash router ID
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@@ -558,6 +622,7 @@ typedef punt_redirect
autoreply define ip_punt_redirect
{
option deprecated;
+
u32 client_index;
u32 context;
vl_api_punt_redirect_t punt;
@@ -566,6 +631,8 @@ autoreply define ip_punt_redirect
define ip_punt_redirect_dump
{
+ option deprecated;
+
u32 client_index;
u32 context;
vl_api_interface_index_t sw_if_index;
@@ -574,6 +641,8 @@ define ip_punt_redirect_dump
define ip_punt_redirect_details
{
+ option deprecated;
+
u32 context;
vl_api_punt_redirect_t punt;
};
@@ -807,6 +876,30 @@ autoreply define ip_reassembly_enable_disable
vl_api_ip_reass_type_t type;
};
+/** enable/disable full reassembly of packets aimed at our addresses */
+autoreply define ip_local_reass_enable_disable
+{
+ u32 client_index;
+ u32 context;
+ bool enable_ip4;
+ bool enable_ip6;
+};
+
+/** get status of local reassembly */
+define ip_local_reass_get
+{
+ u32 client_index;
+ u32 context;
+};
+
+define ip_local_reass_get_reply
+{
+ u32 context;
+ i32 retval;
+ bool ip4_is_enabled;
+ bool ip6_is_enabled;
+};
+
/**
@brief Set a Path MTU value. i.e. a MTU value for a given neighbour.
The neighbour can be described as attached (w/ interface and next-hop)
@@ -864,6 +957,816 @@ autoreply define ip_path_mtu_replace_end
u32 context;
};
+counters ip_frag {
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "packet fragmented";
+ };
+ small_packet {
+ severity error;
+ type counter64;
+ units "packets";
+ description "packet smaller than MTU";
+ };
+ fragment_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "number of sent fragments";
+ };
+ cant_fragment_header {
+ severity error;
+ type counter64;
+ units "packets";
+ description "can't fragment header";
+ };
+ dont_fragment_set {
+ severity error;
+ type counter64;
+ units "packets";
+ description "can't fragment this packet";
+ };
+ malformed {
+ severity error;
+ type counter64;
+ units "packets";
+ description "malformed packet";
+ };
+ memory {
+ severity error;
+ type counter64;
+ units "packets";
+ description "could not allocate buffer";
+ };
+ unknown {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unknown error";
+ };
+};
+
+counters ip4 {
+ /* Must be first. */
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "valid ip4 packets";
+ };
+
+ /* Errors signalled by ip4-input */
+ too_short {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 length < 20 bytes";
+ };
+ bad_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 length > l2 length";
+ };
+ bad_checksum {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad ip4 checksum";
+ };
+ version {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 version != 4";
+ };
+ options {
+ severity info;
+ type counter64;
+ units "packets";
+ description "ip4 options present";
+ };
+ fragment_offset_one {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 fragment offset == 1";
+ };
+ time_expired {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 ttl <= 1";
+ };
+ hdr_too_short {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 IHL < 5";
+ };
+
+ /* Errors signalled by ip4-rewrite. */
+ mtu_exceeded {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 MTU exceeded and DF set";
+ };
+ dst_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 destination lookup miss";
+ };
+ src_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 source lookup miss";
+ };
+ drop {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 drop";
+ };
+ punt {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 punt";
+ };
+ same_interface {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 egress interface same as ingress";
+ };
+
+ /* errors signalled by ip4-local. */
+ unknown_protocol {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unknown ip protocol";
+ };
+ tcp_checksum {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad tcp checksum";
+ };
+ udp_checksum {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad udp checksum";
+ };
+ udp_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "inconsistent udp/ip lengths";
+ };
+
+ /* spoofed packets in ip4-rewrite-local */
+ spoofed_local_packets {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip4 spoofed local-address packet drops";
+ };
+
+ /* Errors signalled by ip4-inacl */
+ inacl_table_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "input ACL table-miss drops";
+ };
+ inacl_session_deny {
+ severity error;
+ type counter64;
+ units "packets";
+ description "input ACL session deny drops";
+ };
+
+ /* Errors singalled by ip4-outacl */
+ outacl_table_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "output ACL table-miss drops";
+ };
+ outacl_session_deny {
+ severity error;
+ type counter64;
+ units "packets";
+ description "output ACL session deny drops";
+ };
+
+ /* Errors from mfib-forward */
+ rpf_failure {
+ severity error;
+ type counter64;
+ units "packets";
+ description "Multicast RPF check failed";
+ };
+
+ /* Errors signalled by ip4-reassembly */
+ reass_duplicate_fragment {
+ severity error;
+ type counter64;
+ units "packets";
+ description "duplicate/overlapping fragments";
+ };
+ reass_limit_reached {
+ severity error;
+ type counter64;
+ units "packets";
+ description "drops due to concurrent reassemblies limit";
+ };
+ reass_fragment_chain_too_long {
+ severity error;
+ type counter64;
+ units "packets";
+ description "fragment chain too long (drop)";
+ };
+ reass_no_buf {
+ severity error;
+ type counter64;
+ units "packets";
+ description "out of buffers (drop)";
+ };
+ reass_malformed_packet {
+ severity error;
+ type counter64;
+ units "packets";
+ description "malformed packets";
+ };
+ reass_internal_error {
+ severity error;
+ type counter64;
+ units "packets";
+ description "drops due to internal reassembly error";
+ };
+ reass_timeout {
+ severity error;
+ type counter64;
+ units "packets";
+ description "fragments dropped due to reassembly timeout";
+ };
+ reass_to_custom_app {
+ severity error;
+ type counter64;
+ units "packets";
+ description "send to custom drop app";
+ };
+ reass_success {
+ severity info;
+ type counter64;
+ units "packets";
+ description "successful reassemblies";
+ };
+ reass_fragments_reassembled {
+ severity info;
+ type counter64;
+ units "packets";
+ description "fragments reassembled";
+ };
+ reass_fragments_rcvd {
+ severity info;
+ type counter64;
+ units "packets";
+ description "fragments received";
+ };
+ reass_unsupp_ip_prot {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unsupported ip protocol";
+ };
+};
+
+/**
+ * IPv6 Error/info counters
+ */
+counters ip6 {
+ /* Must be first. */
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "valid ip6 packets";
+ };
+
+ /* Errors signalled by ip6-input */
+ too_short {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 length < 40 bytes";
+ };
+ bad_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 length > l2 length";
+ };
+ version {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 version != 6";
+ };
+ time_expired {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 ttl <= 1";
+ };
+
+ /* Errors signalled by ip6-rewrite. */
+ mtu_exceeded {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 MTU exceeded";
+ };
+ dst_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 destination lookup miss";
+ };
+ src_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 source lookup miss";
+ };
+ drop {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 drop";
+ };
+ punt {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 punt";
+ };
+
+ /* errors signalled by ip6-local. */
+ unknown_protocol {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unknown ip protocol";
+ };
+ udp_checksum {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad udp checksum";
+ };
+ icmp_checksum {
+ severity error;
+ type counter64;
+ units "packets";
+ description "bad icmp checksum";
+ };
+ udp_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "inconsistent udp/ip lengths";
+ };
+ /* Errors signalled by udp6-lookup. */
+ unknown_udp_port {
+ severity error;
+ type counter64;
+ units "packets";
+ description "no listener for udp port";
+ };
+
+ /* spoofed packets in ip6-rewrite-local */
+ spoofed_local_packets {
+ severity error;
+ type counter64;
+ units "packets";
+ description "ip6 spoofed local-address packet drops";
+ };
+
+ /* Errors signalled by ip6-inacl */
+ inacl_table_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "input ACL table-miss drops";
+ };
+ inacl_session_deny {
+ severity error;
+ type counter64;
+ units "packets";
+ description "input ACL session deny drops";
+ };
+
+ /* Errors singalled by ip6-outacl */
+ outacl_table_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "output ACL table-miss drops";
+ };
+ outacl_session_deny {
+ severity error;
+ type counter64;
+ units "packets";
+ description "output ACL session deny drops";
+ };
+
+ /* Errors from mfib-forward */
+ rpf_failure {
+ severity error;
+ type counter64;
+ units "packets";
+ description "Multicast RPF check failed";
+ };
+
+ /* Errors signalled by ip6-reassembly */
+ reass_missing_upper {
+ severity error;
+ type counter64;
+ units "packets";
+ description "missing-upper layer drops";
+ };
+ reass_duplicate_fragment {
+ severity error;
+ type counter64;
+ units "packets";
+ description "duplicate fragments";
+ };
+ reass_overlapping_fragment {
+ severity error;
+ type counter64;
+ units "packets";
+ description "overlapping fragments";
+ };
+ reass_limit_reached {
+ severity error;
+ type counter64;
+ units "packets";
+ description "drops due to concurrent reassemblies limit";
+ };
+ reass_fragment_chain_too_long {
+ severity error;
+ type counter64;
+ units "packets";
+ description "fragment chain too long (drop)";
+ };
+ reass_no_buf {
+ severity error;
+ type counter64;
+ units "packets";
+ description "out of buffers (drop)";
+ };
+ reass_timeout {
+ severity error;
+ type counter64;
+ units "packets";
+ description "fragments dropped due to reassembly timeout";
+ };
+ reass_internal_error {
+ severity error;
+ type counter64;
+ units "packets";
+ description "drops due to internal reassembly error";
+ };
+ reass_invalid_frag_len {
+ severity error;
+ type counter64;
+ units "packets";
+ description "invalid fragment length";
+ };
+ reass_to_custom_app {
+ severity error;
+ type counter64;
+ units "packets";
+ description "send to custom drop app";
+ };
+ reass_no_frag_hdr {
+ severity error;
+ type counter64;
+ units "packets";
+ description "no fragmentation header";
+ };
+ reass_invalid_frag_size {
+ severity error;
+ type counter64;
+ units "packets";
+ description "drop due to invalid fragment size";
+ };
+ reass_success {
+ severity info;
+ type counter64;
+ units "packets";
+ description "successful reassemblies";
+ };
+ reass_fragments_reassembled {
+ severity info;
+ type counter64;
+ units "packets";
+ description "fragments reassembled";
+ };
+ reass_fragments_rcvd {
+ severity info;
+ type counter64;
+ units "packets";
+ description "fragments received";
+ };
+ reass_unsupp_ip_proto {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unsupported ip protocol";
+ };
+};
+
+counters icmp4 {
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "valid packets";
+ };
+ unknown_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unknown type";
+ };
+ invalid_code_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "invalid code for type";
+ };
+ invalid_hop_limit_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "hop_limit != 255";
+ };
+ length_too_small_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "payload length too small for type";
+ };
+ options_with_odd_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "total option length not multiple of 8 bytes";
+ };
+ option_with_zero_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "option has zero length";
+ };
+ echo_replies_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "echo replies sent";
+ };
+ dst_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "icmp6 dst address lookup misses";
+ };
+ dest_unreach_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "destination unreachable response sent";
+ };
+ ttl_expire_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "hop limit exceeded response sent";
+ };
+ param_problem_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "parameter problem response sent";
+ };
+ drop {
+ severity error;
+ type counter64;
+ units "packets";
+ description "error message dropped";
+ };
+};
+
+counters icmp6 {
+ none {
+ severity info;
+ type counter64;
+ units "packets";
+ description "valid packets";
+ };
+ unknown_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "unknown type";
+ };
+ invalid_code_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "invalid code for type";
+ };
+ invalid_hop_limit_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "hop_limit != 255";
+ };
+ length_too_small_for_type {
+ severity error;
+ type counter64;
+ units "packets";
+ description "payload length too small for type";
+ };
+ options_with_odd_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "total option length not multiple of 8 bytes";
+ };
+ option_with_zero_length {
+ severity error;
+ type counter64;
+ units "packets";
+ description "option has zero length";
+ };
+ echo_replies_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "echo replies sent";
+ };
+ neighbor_solicitation_source_not_on_link {
+ severity error;
+ type counter64;
+ units "packets";
+ description "neighbor solicitations from source not on link";
+ };
+ neighbor_solicitation_source_unknown {
+ severity error;
+ type counter64;
+ units "packets";
+ description "neighbor solicitations for unknown targets";
+ };
+ neighbor_advertisements_tx {
+ severity info;
+ type counter64;
+ units "packets";
+ description "neighbor advertisements sent";
+ };
+ neighbor_advertisements_rx {
+ severity info;
+ type counter64;
+ units "packets";
+ description "neighbor advertisements received";
+ };
+ router_solicitation_source_not_on_link {
+ severity error;
+ type counter64;
+ units "packets";
+ description "router solicitations from source not on link";
+ };
+ router_solicitation_unsupported_intf {
+ severity error;
+ type counter64;
+ units "packets";
+ description "neighbor discovery unsupported interface";
+ };
+ router_solicitation_radv_not_config {
+ severity error;
+ type counter64;
+ units "packets";
+ description "neighbor discovery not configured";
+ };
+ router_advertisement_source_not_link_local {
+ severity error;
+ type counter64;
+ units "packets";
+ description "router advertisement source not link local";
+ };
+ router_advertisements_tx {
+ severity info;
+ type counter64;
+ units "packets";
+ description "router advertisements sent";
+ };
+ router_advertisements_rx {
+ severity info;
+ type counter64;
+ units "packets";
+ description "router advertisements received";
+ };
+ dst_lookup_miss {
+ severity error;
+ type counter64;
+ units "packets";
+ description "icmp6 dst address lookup misses";
+ };
+ dest_unreach_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "destination unreachable response sent";
+ };
+ packet_too_big_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "packet too big response sent";
+ };
+ ttl_expire_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "hop limit exceeded response sent";
+ };
+ param_problem_sent {
+ severity info;
+ type counter64;
+ units "packets";
+ description "parameter problem response sent";
+ };
+ drop {
+ severity error;
+ type counter64;
+ units "packets";
+ description "error message dropped";
+ };
+ alloc_failure {
+ severity error;
+ type counter64;
+ units "packets";
+ description "buffer allocation failure";
+ };
+};
+
+paths {
+ "/err/ip-frag" "ip_frag";
+ "/err/mpls-frag" "ip_frag";
+ "/err/ip4-mpls-label-disposition-pipe" "ip4";
+ "/err/ip4-mpls-label-disposition-uniform" "ip4";
+ "/err/ip4-local" "ip4";
+ "/err/ip4-input" "ip4";
+ "/err/ip4-full-reassembly" "ip4";
+ "/err/ip4-local-full-reassembly" "ip4";
+ "/err/ip4-full-reassembly-feature" "ip4";
+ "/err/ip4-full-reassembly-custom" "ip4";
+ "/err/ip4-full-reassembly-expire-walk" "ip4";
+ "/err/ip4-sv-reassembly" "ip4";
+ "/err/ip4-sv-reassembly-feature" "ip4";
+ "/err/ip4-sv-reassembly-output-feature" "ip4";
+ "/err/ip4-sv-reassembly-custom-next" "ip4";
+ "/err/ip4-sv-reassembly-expire-walk" "ip4";
+ "/err/ip6-mpls-label-disposition-pipe" "ip6";
+ "/err/ip6-mpls-label-disposition-uniform" "ip6";
+ "/err/ip6-local" "ip6";
+ "/err/ip6-input" "ip6";
+ "/err/ip6-full-reassembly" "ip6";
+ "/err/ip6-local-full-reassembly" "ip6";
+ "/err/ip6-full-reassembly-feature" "ip6";
+ "/err/ip6-full-reassembly-custom" "ip6";
+ "/err/ip6-full-reassembly-expire-walk" "ip6";
+ "/err/ip6-sv-reassembly" "ip6";
+ "/err/ip6-sv-reassembly-feature" "ip6";
+ "/err/ip6-sv-reassembly-output-feature" "ip6";
+ "/err/ip6-sv-reassembly-custom-next" "ip6";
+ "/err/ip6-sv-reassembly-expire-walk" "ip6";
+ "/err/ip4-icmp-input" "icmp4";
+ "/err/ip4-icmp-error" "icmp4";
+ "/err/ip6-icmp-input" "icmp6";
+ "/err/ip6-icmp-error" "icmp6";
+};
+
/*
* Local Variables:
* eval: (c-set-style "gnu")