diff options
Diffstat (limited to 'src/vnet/ip/ip.api')
-rw-r--r-- | src/vnet/ip/ip.api | 905 |
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") |