/* Hey Emacs use -*- mode: C -*- */
/*
 * Copyright (c) 2018 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** \file

    This file defines vpp IP control-plane API messages which are generally
    called through a shared memory interface.
*/

option version = "3.2.0";

import "vnet/interface_types.api";
import "vnet/fib/fib_types.api";
import "vnet/ethernet/ethernet_types.api";
import "vnet/mfib/mfib_types.api";
import "vnet/interface_types.api";

/** \brief An IP table
    @param is_ipv6 - V4 or V6 table
    @param table_id - table ID associated with the route
                     This table ID will apply to both the unicast
		      and multicast FIBs
    @param name - A client provided name/tag for the table. If this is
                  not set by the client, then VPP will generate something
		  meaningful.
*/
typedef ip_table
{
  u32 table_id;
  bool is_ip6;
  string name[64];
};

/** \brief Add / del table request
           A table can be added multiple times, but need be deleted only once.
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
autoreply define ip_table_add_del
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  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
*/
define ip_table_dump
{
  u32 client_index;
  u32 context;
};

/** \brief IP table replace being

    The use-case is that, for some unspecified reason, the control plane
    has a very different set of entries it wants in the table than VPP
    currently has. The CP would thus like to 'replace' VPP's current table
    only by specifying what the new set of entries shall be, i.e. it is not
    going to delete anything that already exists.
    the CP declares the start of this procedure with this begin_replace
    API Call, and when it has populated all the entries it wants, it calls
    the below end_replace API. From this point on it is of course free
    to add and delete entries as usual.
    The underlying mechanism by which VPP implements this replace is
    purposefully left unspecified.

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table - The table to resync
*/
autoreply define ip_table_replace_begin
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief IP table replace end

    see replace start/

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table - The table that has converged
*/
autoreply define ip_table_replace_end
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief IP table flush
    Flush a table of all routes
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table - The table to flush
*/
autoreply define ip_table_flush
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief IP FIB table response
    @param context - sender context
    @param table - description of the table
*/
define ip_table_details
{
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief An IP route
  @param table_id The IP table the route is in
  @param stats_index The index of the route in the stats segment
  @param prefix the prefix for the route
  @param n_paths The number of paths the route has
  @param src The entity adding the route. either 0 for default
             or a value returned from fib_source_sdd.
  @param paths The paths of the route
*/
typedef ip_route
{
  u32 table_id;
  u32 stats_index;
  vl_api_prefix_t prefix;
  u8 n_paths;
  vl_api_fib_path_t paths[n_paths];
};
typedef ip_route_v2
{
  u32 table_id;
  u32 stats_index;
  vl_api_prefix_t prefix;
  u8 n_paths;
  u8 src;
  vl_api_fib_path_t paths[n_paths];
};

/** \brief Add / del route request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_multipath - Set to 1 if these paths will be added/removed
                          to/from the existing set, or 0 to replace
			  the existing set.
                          is_add=0 & is_multipath=0 implies delete all paths
    @param is_add - Are the paths being added or removed
*/
define ip_route_add_del
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  bool is_multipath;
  vl_api_ip_route_t route;
};
define ip_route_add_del_v2
{
  option in_progress;
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  bool is_multipath;
  vl_api_ip_route_v2_t route;
};
define ip_route_add_del_reply
{
  u32 context;
  i32 retval;
  u32 stats_index;
};
define ip_route_add_del_v2_reply
{
  option in_progress;
  u32 context;
  i32 retval;
  u32 stats_index;
};

/** \brief Dump IP routes from a table
    @param client_index - opaque cookie to identify the sender
    @param src The entity adding the route. either 0 for default
               or a value returned from fib_source_sdd.
    @param table - The table from which to dump routes (ony ID an AF are needed)
*/
define ip_route_dump
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};
define ip_route_v2_dump
{
  option in_progress;
  u32 client_index;
  u32 context;
  /* vl_api_fib_source_t src; */
  u8 src;
  vl_api_ip_table_t table;
};

/** \brief IP FIB table entry response
    @param route The route entry in the table
*/
define ip_route_details
{
  u32 context;
  vl_api_ip_route_t route;
};
define ip_route_v2_details
{
  option in_progress;
  u32 context;
  vl_api_ip_route_v2_t route;
};

/** \brief Lookup IP route from a table
    @param client_index - opaque cookie to identify the sender
    @param table_id - The IP table to look the route up in
    @param exact - 0 for normal route lookup, 1 for exact match only
    @param prefix - The prefix (or host) for route lookup.
*/
define ip_route_lookup
{
  u32 client_index;
  u32 context;
  u32 table_id;
  u8 exact;
  vl_api_prefix_t prefix;
};
define ip_route_lookup_v2
{
  option in_progress;
  u32 client_index;
  u32 context;
  u32 table_id;
  u8 exact;
  vl_api_prefix_t prefix;
};

/** \brief IP FIB table lookup response
    @param retval - return code of the lookup
    @param route - The route entry in the table if found
*/
define ip_route_lookup_reply
{
  u32 context;
  i32 retval;
  vl_api_ip_route_t route;
};
define ip_route_lookup_v2_reply
{
  option in_progress;
  u32 context;
  i32 retval;
  vl_api_ip_route_v2_t route;
};

/** \brief Set the ip flow hash config for a fib request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf/fib id
    @param is_ipv6 - if non-zero the fib is ip6, else ip4
    @param src - if non-zero include src in flow hash
    @param dst - if non-zero include dst in flow hash
    @param sport - if non-zero include sport in flow hash
    @param dport - if non-zero include dport in flow hash
    @param proto -if non-zero include proto in flow hash
    @param reverse - if non-zero include reverse in flow hash
    @param symmetric - if non-zero include symmetry in flow hash
*/
autoreply define set_ip_flow_hash
{
  option deprecated;
  u32 client_index;
  u32 context;
  u32 vrf_id;
  bool is_ipv6;
  bool src;
  bool dst;
  bool sport;
  bool dport;
  bool proto;
  bool reverse;
  bool symmetric;
};

/**
    @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
*/
enumflag ip_flow_hash_config
{
  IP_API_FLOW_HASH_SRC_IP = 0x01,
  IP_API_FLOW_HASH_DST_IP = 0x02,
  IP_API_FLOW_HASH_SRC_PORT = 0x04,
  IP_API_FLOW_HASH_DST_PORT = 0x08,
  IP_API_FLOW_HASH_PROTO = 0x10,
  IP_API_FLOW_HASH_REVERSE = 0x20,
  IP_API_FLOW_HASH_SYMETRIC = 0x40,
  IP_API_FLOW_HASH_FLOW_LABEL = 0x80,
};

autoreply define set_ip_flow_hash_v2
{
  u32 client_index;
  u32 context;
  u32 table_id;
  vl_api_address_family_t af;
  vl_api_ip_flow_hash_config_t flow_hash_config;
};

/** \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
    @param router_id - The ID of the router. Mixed into the hash.
                       Used to prevent polarisation across a network,
                       since each router is assumed to have a different ID
*/
autoreply define set_ip_flow_hash_router_id
{
  u32 client_index;
  u32 context;
  u32 router_id;
};

/** \brief IPv6 interface enable / disable request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface used to reach neighbor
    @param enable - if non-zero enable ip6 on interface, else disable
*/
autoreply define sw_interface_ip6_enable_disable
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  bool enable;			/* set to true if enable */
};

/** \brief Dump IP multicast fib table
    @param client_index - opaque cookie to identify the sender
*/
define ip_mtable_dump
{
  u32 client_index;
  u32 context;
};
define ip_mtable_details
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief Add / del route request

    Adds a route, consisting both of the MFIB entry to match packets
    (which may already exist) and a path to send those packets down.
    Routes can be entered repeatedly to add multiple paths.  Deletions are
    per-path.

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table_id - fib table /vrf associated with the route
    @param is_add - true if adding a route; false if deleting one
    @param is_ipv6 - true iff all the addresses are v6
    @param entry_flags - see fib_entry_flag_t
    @param itf_flags - see mfib_entry_flags_t
    @param next_hop_afi - see dpo_proto_t; the type of destination description
    @param src_address - the source of the packet
    @param grp_address - the group the packet is destined to
    @param nh_address - the nexthop to forward the packet to
    @param next_hop_sw_if_index - interface to emit packet on

    BIER AFIs use the BIER imposition ID.  v4 and v6 AFIs use either the
    interface or the nexthop address.

    Note that if the route is source-specific (S is supplied, not all 0s),
    the prefix match is treated as exact (prefixlen /32 or /128).

    FIXME not complete yet
*/
typedef ip_mroute
{
  u32 table_id;
  vl_api_mfib_entry_flags_t entry_flags;
  u32 rpf_id;
  vl_api_mprefix_t prefix;
  u8 n_paths;
  vl_api_mfib_path_t paths[n_paths];
};

define ip_mroute_add_del
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  bool is_multipath;
  vl_api_ip_mroute_t route;
};
define ip_mroute_add_del_reply
{
  u32 context;
  i32 retval;
  u32 stats_index;
};

/** \brief Dump IP multicast fib table
    @param table - The table from which to dump routes (ony ID an AF are needed)
*/
define ip_mroute_dump
{
  u32 client_index;
  u32 context;
  vl_api_ip_table_t table;
};

/** \brief IP Multicast Route Details
    @param route - Details of the route
*/
define ip_mroute_details
{
  u32 context;
  vl_api_ip_mroute_t route;
};

define ip_address_details
{
  u32 context;
  vl_api_interface_index_t sw_if_index;
  vl_api_address_with_prefix_t prefix;
};

define ip_address_dump
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  bool is_ipv6;
};

/** \brief IP unnumbered configurations
    @param sw_if_index The interface that has unnumbered configuration
    @param ip_sw_if_index The IP interface that it is unnumbered to
*/
define ip_unnumbered_details
{
  u32 context;
  vl_api_interface_index_t sw_if_index;
  vl_api_interface_index_t ip_sw_if_index;
};

/** \brief Dump IP unnumbered configurations
    @param sw_if_index ~0 for all interfaces, else the interface desired
*/
define ip_unnumbered_dump
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index [default=0xffffffff];
};

define ip_details
{
  u32 context;
  vl_api_interface_index_t sw_if_index;
  bool is_ipv6;
};

define ip_dump
{
  u32 client_index;
  u32 context;
  bool is_ipv6;
};

define mfib_signal_dump
{
  u32 client_index;
  u32 context;
};

define mfib_signal_details
{
  u32 context;
  vl_api_interface_index_t sw_if_index;
  u32 table_id;
  vl_api_mprefix_t prefix;
  u16 ip_packet_len;
  u8 ip_packet_data[256];
};

/** \brief IP punt policer
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - 1 to add neighbor, 0 to delete
    @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
    @param policer_index - Index of policer to use
*/
autoreply define ip_punt_police
{
  u32 client_index;
  u32 context;
  u32 policer_index;
  bool is_add [default=true];
  bool is_ip6;
};

/** \brief Punt redirect type
    @param rx_sw_if_index - specify the original RX interface of traffic
                            that should be redirected. ~0 means any interface.
    @param tx_sw_if_index - the TX interface to which traffic should be
                            redirected.
    @param nh - the next-hop to redirect the traffic to.
    @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
*/
typedef punt_redirect
{
  vl_api_interface_index_t rx_sw_if_index;
  vl_api_interface_index_t tx_sw_if_index;
  vl_api_address_t nh;
};

/** \brief IP punt redirect
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param punt - punt definition
    @param is_add - 1 to add neighbor, 0 to delete
*/
autoreply define ip_punt_redirect
{
  option deprecated;
  u32 client_index;
  u32 context;
  vl_api_punt_redirect_t punt;
  bool is_add [default=true];
};

define ip_punt_redirect_dump
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  bool is_ipv6;
};

define ip_punt_redirect_details
{
  u32 context;
  vl_api_punt_redirect_t punt;
};

/** \brief Punt redirect type
    @param rx_sw_if_index - specify the original RX interface of traffic
                            that should be redirected. ~0 means any interface.
    @param af - Address family (ip4 or ip6)
    @param paths - the TX paths to which traffic should be redirected.
*/
typedef punt_redirect_v2
{
  vl_api_interface_index_t rx_sw_if_index [default=0xffffffff];
  vl_api_address_family_t af;
  u32 n_paths;
  vl_api_fib_path_t paths[n_paths];
};

/** \brief Add IP punt redirect rule
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param punt - punt definition
    @param is_add - 1 to add punt_redirect rule, 0 to delete
*/
autoreply define add_del_ip_punt_redirect_v2
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  vl_api_punt_redirect_v2_t punt;
};

define ip_punt_redirect_v2_dump
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  vl_api_address_family_t af;
};

define ip_punt_redirect_v2_details
{
  u32 context;
  vl_api_punt_redirect_v2_t punt;
};

autoreply define ip_container_proxy_add_del
{
  u32 client_index;
  u32 context;
  vl_api_prefix_t pfx;
  vl_api_interface_index_t sw_if_index;
  bool is_add [default=true];
};

define ip_container_proxy_dump
{
  u32 client_index;
  u32 context;
};

define ip_container_proxy_details
{
  u32 context;
  vl_api_interface_index_t sw_if_index;
  vl_api_prefix_t prefix;
};

/** \brief Configure IP source and L4 port-range check
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_ip6 - 1 if source address type is IPv6
    @param is_add - 1 if add, 0 if delete
    @param ip - prefix to match
    @param number_of_ranges - length of low_port and high_port arrays (must match)
    @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
    @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
    @param vrf_id - fib table/vrf id to associate the source and port-range check with
    @note To specify a single port set low_port and high_port entry the same
*/
autoreply define ip_source_and_port_range_check_add_del
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  vl_api_prefix_t prefix;
  u8 number_of_ranges;
  u16 low_ports[32];
  u16 high_ports[32];
  u32 vrf_id;
};

/** \brief Set interface source and L4 port-range request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param interface_id - interface index
    @param tcp_vrf_id - VRF associated with source and TCP port-range check
    @param udp_vrf_id - VRF associated with source and TCP port-range check
*/
autoreply define ip_source_and_port_range_check_interface_add_del
{
  u32 client_index;
  u32 context;
  bool is_add [default=true];
  vl_api_interface_index_t sw_if_index;
  u32 tcp_in_vrf_id;
  u32 tcp_out_vrf_id;
  u32 udp_in_vrf_id;
  u32 udp_out_vrf_id;
};

/** \brief IPv6 set link local address on interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set link local on
    @param ip - the new link local address
*/
autoreply define sw_interface_ip6_set_link_local_address
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  vl_api_ip6_address_t ip;
};

/** \brief IPv6 get link local address on interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set link local on
*/
define sw_interface_ip6_get_link_local_address
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
};

/** \brief IPv6 link local address detail
    @param context - sender context, to match reply w/ request
    @param ip - the link local address
*/
define sw_interface_ip6_get_link_local_address_reply
{
  u32 context;
  i32 retval;
  vl_api_ip6_address_t ip;
};

/** \brief IOAM enable : Enable in-band OAM
    @param id - profile id
    @param seqno - To enable Seqno Processing
    @param analyse - Enabling analysis of iOAM at decap node
    @param pow_enable - Proof of Work enabled or not flag
    @param trace_enable - iOAM Trace enabled or not flag
*/
autoreply define ioam_enable
{
  u32 client_index;
  u32 context;
  u16 id;
  bool seqno;
  bool analyse;
  bool pot_enable;
  bool trace_enable;
  u32 node_id;
};

/** \brief iOAM disable
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param index - MAP Domain index
*/
autoreply define ioam_disable
{
  u32 client_index;
  u32 context;
  u16 id;
};

enum ip_reass_type
{
  IP_REASS_TYPE_FULL = 0,
  IP_REASS_TYPE_SHALLOW_VIRTUAL = 0x1,
};

autoreply define ip_reassembly_set
{
  u32 client_index;
  u32 context;
  u32 timeout_ms;
  u32 max_reassemblies;
  u32 max_reassembly_length;
  u32 expire_walk_interval_ms;
  bool is_ip6;
  vl_api_ip_reass_type_t type;
};

define ip_reassembly_get
{
  u32 client_index;
  u32 context;
  bool is_ip6;
  vl_api_ip_reass_type_t type;
};

define ip_reassembly_get_reply
{
  u32 context;
  i32 retval;
  u32 timeout_ms;
  u32 max_reassemblies;
  u32 max_reassembly_length;
  u32 expire_walk_interval_ms;
  bool is_ip6;
};

/** \brief Enable/disable reassembly feature
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to enable/disable feature on
    @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
    @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
*/
autoreply define ip_reassembly_enable_disable
{
  u32 client_index;
  u32 context;
  vl_api_interface_index_t sw_if_index;
  bool enable_ip4;
  bool enable_ip6;
  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)
           or remote (w/ table_id and next-hop);
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table_id - table-ID for next-hop
    @param nh - Next hop
    @param path_mtu - value to set, 0 is disable.
*/
typedef ip_path_mtu
{
  u32 client_index;
  u32 context;
  u32 table_id;
  vl_api_address_t nh;
  u16 path_mtu;
};
autoreply define ip_path_mtu_update
{
  u32 client_index;
  u32 context;
  vl_api_ip_path_mtu_t pmtu;
};
define ip_path_mtu_get
{
  u32 client_index;
  u32 context;
  u32 cursor;
};
define ip_path_mtu_get_reply
{
  u32 context;
  i32 retval;
  u32 cursor;
};
define ip_path_mtu_details
{
  u32 context;
  vl_api_ip_path_mtu_t pmtu;
};
service {
  rpc ip_path_mtu_get returns ip_path_mtu_get_reply
    stream ip_path_mtu_details;
};

autoreply define ip_path_mtu_replace_begin
{
  u32 client_index;
  u32 context;
};
autoreply define ip_path_mtu_replace_end
{
  u32 client_index;
  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";
  };

  /* 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")
 * End:
 */
