| /* 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 neighbor control-plane API messages which are generally |
| called through a shared memory interface. |
| */ |
| |
| option version = "1.0.1"; |
| |
| import "vnet/ip/ip_types.api"; |
| import "vnet/ethernet/ethernet_types.api"; |
| import "vnet/interface_types.api"; |
| |
| /** \brief IP neighbor flags |
| @param is_static - A static neighbor Entry - there are not flushed |
| If the interface goes down. |
| @param is_no_fib_entry - Do not create a corresponding entry in the FIB |
| table for the neighbor. |
| */ |
| enum ip_neighbor_flags: u8 |
| { |
| IP_API_NEIGHBOR_FLAG_NONE = 0, |
| IP_API_NEIGHBOR_FLAG_STATIC = 0x1, |
| IP_API_NEIGHBOR_FLAG_NO_FIB_ENTRY = 0x2, |
| }; |
| |
| /** \brief IP neighbor |
| @param sw_if_index - interface used to reach neighbor |
| @param flags - flags for the neighbor |
| @param mac_address - l2 address of the neighbor |
| @param ip_address - ip4 or ip6 address of the neighbor |
| */ |
| typedef ip_neighbor { |
| vl_api_interface_index_t sw_if_index; |
| vl_api_ip_neighbor_flags_t flags; |
| vl_api_mac_address_t mac_address; |
| vl_api_address_t ip_address; |
| }; |
| |
| /** \brief IP neighbor add / del request |
| @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 neighbor - the neighbor to add/remove |
| */ |
| define ip_neighbor_add_del |
| { |
| u32 client_index; |
| u32 context; |
| /* 1 = add, 0 = delete */ |
| bool is_add; |
| vl_api_ip_neighbor_t neighbor; |
| }; |
| /** \brief IP neighbor add / del reply |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param retval - return value |
| @param stats_index - the index to use for this neighbor in the stats segment |
| */ |
| define ip_neighbor_add_del_reply |
| { |
| u32 context; |
| i32 retval; |
| u32 stats_index; |
| }; |
| |
| /** \brief Dump IP neighbors |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param sw_if_index - the interface to dump neighbors, ~0 == all |
| @param af - address family is ipv[6|4] |
| */ |
| define ip_neighbor_dump |
| { |
| u32 client_index; |
| u32 context; |
| vl_api_interface_index_t sw_if_index [default=0xffffffff]; |
| vl_api_address_family_t af; |
| }; |
| |
| /** \brief IP neighbors dump response |
| @param context - sender context which was passed in the request |
| @param age - time between last update and sending this message, in seconds |
| @param neighbour - the neighbor |
| */ |
| define ip_neighbor_details { |
| u32 context; |
| f64 age; |
| vl_api_ip_neighbor_t neighbor; |
| }; |
| |
| /** \brief Enable/disable periodic IP neighbor scan |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param af - Address family v4/v6 |
| @param max_number - The maximum number of neighbours that will be created. |
| default 50k |
| @param max_age - The maximum age (in seconds) before an inactive neighbour |
| is flushed |
| default 0 => never |
| @param recycle - If max_number of neighbours is reached and new ones need |
| to be created should the oldest neighbour be 'recycled'. |
| */ |
| autoreply define ip_neighbor_config |
| { |
| u32 client_index; |
| u32 context; |
| vl_api_address_family_t af; |
| u32 max_number; |
| u32 max_age; |
| bool recycle; |
| }; |
| |
| /** \brief Get neighbor database configuration per AF |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param af - Address family (v4/v6) |
| */ |
| define ip_neighbor_config_get |
| { |
| option in_progress; |
| u32 client_index; |
| u32 context; |
| vl_api_address_family_t af; |
| }; |
| |
| /** \brief Neighbor database configuration reply |
| @param context - sender context, to match reply w/ request |
| @param retval - error (0 is "no error") |
| @param af - Address family (v4/v6) |
| @param max_number - The maximum number of neighbours that will be created |
| @param max_age - The maximum age (in seconds) before an inactive neighbour |
| is flushed |
| @param recycle - If max_number of neighbours is reached and new ones need |
| to be created, should the oldest neighbour be 'recycled' |
| */ |
| define ip_neighbor_config_get_reply |
| { |
| option in_progress; |
| u32 context; |
| i32 retval; |
| vl_api_address_family_t af; |
| u32 max_number; |
| u32 max_age; |
| bool recycle; |
| }; |
| |
| /** \brief IP neighbour replace begin |
| |
| The use-case is that, for some unspecified reason, the control plane |
| has a different set of neighbours it than VPP |
| currently has. The CP would thus like to 'replace' VPP's set |
| only by specifying what the new set shall be, i.e. it is not |
| going to delete anything that already exists, rather, it wants any |
| unspecified neighbors deleted implicitly. |
| The CP declares the start of this procedure with this replace_begin |
| API Call, and when it has populated all neighbours it wants, it calls |
| the below replace_end API. From this point on it is of course free |
| to add and delete neighbours as usual. |
| The underlying mechanism by which VPP implements this replace is |
| intentionally left unspecified. |
| |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| */ |
| autoreply define ip_neighbor_replace_begin |
| { |
| u32 client_index; |
| u32 context; |
| }; |
| |
| /** \brief IP neighbour replace end |
| |
| see ip_neighbor_replace_begin description. |
| |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| */ |
| autoreply define ip_neighbor_replace_end |
| { |
| u32 client_index; |
| u32 context; |
| }; |
| |
| /** \brief IP neighbor flush request - removes *all* neighbours. |
| dynamic and static from API/CLI and dynamic from data-plane. |
| |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param af - Flush neighbours of this address family |
| @param sw_if_index - Flush on this interface (~0 => all interfaces) |
| */ |
| autoreply define ip_neighbor_flush |
| { |
| u32 client_index; |
| u32 context; |
| vl_api_address_family_t af; |
| vl_api_interface_index_t sw_if_index [default=0xffffffff]; |
| }; |
| |
| /** \brief Register for IP neighbour events creation |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param enable - 1 => register for events, 0 => cancel registration |
| @param pid - sender's pid |
| @param ip - exact IP address of interested neighbor resolution event |
| @param sw_if_index - interface on which the IP address is present. |
| */ |
| autoreply define want_ip_neighbor_events |
| { |
| option deprecated; |
| u32 client_index; |
| u32 context; |
| bool enable; |
| u32 pid; |
| vl_api_address_t ip; |
| vl_api_interface_index_t sw_if_index [default=0xffffffff]; |
| }; |
| |
| /** \brief Tell client about an IP4 ARP resolution event or |
| MAC/IP info from ARP requests in L2 BDs |
| @param client_index - opaque cookie to identify the sender |
| @param pid - client pid registered to receive notification |
| @param neighbor - new neighbor created |
| */ |
| define ip_neighbor_event |
| { |
| option deprecated; |
| u32 client_index; |
| u32 pid; |
| vl_api_ip_neighbor_t neighbor; |
| }; |
| |
| service { |
| rpc want_ip_neighbor_events returns want_ip_neighbor_events_reply |
| events ip_neighbor_event; |
| }; |
| |
| |
| /** \brief Register for IP neighbour events (creation or deletion) |
| @param client_index - opaque cookie to identify the sender |
| @param context - sender context, to match reply w/ request |
| @param enable - 1 => register for events, 0 => cancel registration |
| @param pid - sender's pid |
| @param ip - exact IP address of interested neighbor resolution event |
| @param sw_if_index - interface on which the IP address is present. |
| */ |
| autoreply define want_ip_neighbor_events_v2 |
| { |
| u32 client_index; |
| u32 context; |
| bool enable; |
| u32 pid; |
| vl_api_address_t ip; |
| vl_api_interface_index_t sw_if_index [default=0xffffffff]; |
| }; |
| |
| enum ip_neighbor_event_flags |
| { |
| /* The neighbor has been added/learned */ |
| IP_NEIGHBOR_API_EVENT_FLAG_ADDED = 0x1, |
| /* The neighbor has been removed/expired */ |
| IP_NEIGHBOR_API_EVENT_FLAG_REMOVED = 0x2, |
| }; |
| |
| /** \brief Tell client about an IP4 ARP resolution event or |
| MAC/IP info from ARP requests in L2 BDs |
| @param client_index - opaque cookie to identify the sender |
| @param pid - client pid registered to receive notification |
| @param flags - Flags |
| @param neighbor - neighbor |
| */ |
| define ip_neighbor_event_v2 |
| { |
| u32 client_index; |
| u32 pid; |
| vl_api_ip_neighbor_event_flags_t flags; |
| vl_api_ip_neighbor_t neighbor; |
| }; |
| |
| service { |
| rpc want_ip_neighbor_events_v2 returns want_ip_neighbor_events_v2_reply |
| events ip_neighbor_event_v2; |
| }; |
| |
| counters ip4_neighbor { |
| throttled { |
| severity info; |
| type counter64; |
| units "packets"; |
| description "ARP requests throttled"; |
| }; |
| resolved { |
| severity info; |
| type counter64; |
| units "packets"; |
| description "ARP requests resolved"; |
| }; |
| no_buffers { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "ARP requests out of buffer"; |
| }; |
| request_sent { |
| severity info; |
| type counter64; |
| units "packets"; |
| description "ARP requests sent"; |
| }; |
| non_arp_adj { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "ARPs to non-ARP adjacencies"; |
| }; |
| no_source_address { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "no source address for ARP request"; |
| }; |
| }; |
| |
| counters ip6_neighbor { |
| throttled { |
| severity info; |
| type counter64; |
| units "packets"; |
| description "throttled"; |
| }; |
| drop { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "address overflow drops"; |
| }; |
| request_sent { |
| severity info; |
| type counter64; |
| units "packets"; |
| description "neighbor solicitations sent"; |
| }; |
| no_source_address { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "no source address for ND solicitation"; |
| }; |
| no_buffers { |
| severity error; |
| type counter64; |
| units "packets"; |
| description "no buffers"; |
| }; |
| }; |
| |
| paths { |
| "/err/ip4-arp" "ip4_neighbor"; |
| "/err/ip4-glean" "ip4_neighbor"; |
| "/err/ip6-arp" "ip6_neighbor"; |
| "/err/ip6-glean" "ip6_neighbor"; |
| }; |
| |
| /* |
| * Local Variables: |
| * eval: (c-set-style "gnu") |
| * End: |
| */ |