/* 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_pr
/*
* Copyright (c) 2015 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.
*/
#ifndef included_vnet_icmp6_h
#define included_vnet_icmp6_h
#include <vnet/ip/icmp46_packet.h>
#define foreach_icmp6_error \
_ (NONE, "valid packets") \
_ (UNKNOWN_TYPE, "unknown type") \
_ (INVALID_CODE_FOR_TYPE, "invalid code for type") \
_ (INVALID_HOP_LIMIT_FOR_TYPE, "hop_limit != 255") \
_ (LENGTH_TOO_SMALL_FOR_TYPE, "payload length too small for type") \
_ (OPTIONS_WITH_ODD_LENGTH, \
"total option length not multiple of 8 bytes") \
_ (OPTION_WITH_ZERO_LENGTH, "option has zero length") \
_ (ECHO_REPLIES_SENT, "echo replies sent") \
_ (NEIGHBOR_SOLICITATION_SOURCE_NOT_ON_LINK, \
"neighbor solicitations from source not on link") \
_ (NEIGHBOR_SOLICITATION_SOURCE_UNKNOWN, \
"neighbor solicitations for unknown targets") \
_ (NEIGHBOR_ADVERTISEMENTS_TX, "neighbor advertisements sent") \
_ (NEIGHBOR_ADVERTISEMENTS_RX, "neighbor advertisements received") \
_ (ROUTER_SOLICITATION_SOURCE_NOT_ON_LINK, \
"router solicitations from source not on link") \
_ (ROUTER_SOLICITATION_UNSUPPORTED_INTF, \
"neighbor discovery unsupported interface") \
_ (ROUTER_SOLICITATION_RADV_NOT_CONFIG, \
"neighbor discovery not configured") \
_ (ROUTER_ADVERTISEMENT_SOURCE_NOT_LINK_LOCAL, \
"router advertisement source not link local") \
_ (ROUTER_ADVERTISEMENTS_TX, "router advertisements sent") \
_ (ROUTER_ADVERTISEMENTS_RX, "router advertisements received") \
_ (DST_LOOKUP_MISS, "icmp6 dst address lookup misses") \
_ (DEST_UNREACH_SENT, "destination unreachable response sent") \
_ (PACKET_TOO_BIG_SENT, "packet too big response sent") \
_ (TTL_EXPIRE_SENT, "hop limit exceeded response sent") \
_ (PARAM_PROBLEM_SENT, "parameter problem response sent") \
_ (DROP, "error message dropped") \
_ (ALLOC_FAILURE, "buffer allocation failure")
typedef enum
{
#define _(f,s) ICMP6_ERROR_##f,
foreach_icmp6_error
#undef _
} icmp6_error_t;
typedef struct
{
u8 packet_data[64];
} icmp6_input_trace_t;
format_function_t format_icmp6_input_trace;
void icmp6_register_type (vlib_main_t * vm, icmp6_type_t type,
u32 node_index);
void icmp6_error_set_vnet_buffer (vlib_buffer_t * b, u8 type, u8 code,
u32 data);
extern vlib_node_registration_t ip6_icmp_input_node;
#endif /* included_vnet_icmp6_h */
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/