ip: Protocol Independent IP Neighbors
Type: feature
- ip-neighbour: generic neighbour handling; APIs, DBs, event handling,
aging
- arp: ARP protocol implementation
- ip6-nd; IPv6 neighbor discovery implementation; separate ND,
MLD, RA
- ip6-link; manage link-local addresses
- l2-arp-term; events separated from IP neighbours, since they are not
the same.
vnet retains just enough education to perform ND/ARP packet
construction.
arp and ip6-nd to be moved to plugins soon.
Change-Id: I88dedd0006b299344f4c7024a0aa5baa6b9a8bbe
Signed-off-by: Neale Ranns <nranns@cisco.com>
diff --git a/src/vnet/ip/ip.api b/src/vnet/ip/ip.api
index 0bdd152..831b38a 100644
--- a/src/vnet/ip/ip.api
+++ b/src/vnet/ip/ip.api
@@ -189,76 +189,6 @@
vl_api_ip_route_t route;
};
-/** \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
-{
- 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 mac_address - l2 address of the neighbor
- @param ip_address - ip4 or ip6 address of the neighbor
- @param flags - flags for the nieghbor
-*/
-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 neighor 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;
-};
-define ip_neighbor_add_del_reply
-{
- u32 context;
- i32 retval;
- u32 stats_index;
-};
-
-/** \brief Dump IP neighboors
- @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 neighboors, ~0 == all
- @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
-*/
-define ip_neighbor_dump
-{
- u32 client_index;
- u32 context;
- vl_api_interface_index_t sw_if_index;
- bool is_ipv6;
-};
-
-/** \brief IP neighboors dump response
- @param context - sender context which was passed in the request
- @param neighbour - the neighbor
-*/
-define ip_neighbor_details {
- u32 context;
- vl_api_ip_neighbor_t neighbor;
-};
-
/** \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
@@ -287,150 +217,6 @@
u8 symmetric;
};
-/** \brief IPv6 router advertisement config request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param suppress -
- @param managed -
- @param other -
- @param ll_option -
- @param send_unicast -
- @param cease -
- @param is_no -
- @param default_router -
- @param max_interval -
- @param min_interval -
- @param lifetime -
- @param initial_count -
- @param initial_interval -
-*/
-autoreply define sw_interface_ip6nd_ra_config
-{
- u32 client_index;
- u32 context;
- vl_api_interface_index_t sw_if_index;
- u8 suppress;
- u8 managed;
- u8 other;
- u8 ll_option;
- u8 send_unicast;
- u8 cease;
- bool is_no;
- u8 default_router;
- u32 max_interval;
- u32 min_interval;
- u32 lifetime;
- u32 initial_count;
- u32 initial_interval;
-};
-
-/** \brief IPv6 router advertisement prefix config request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - The interface the RA prefix information is for
- @param prefix - The prefix to advertise
- @param use_default - Revert to default settings
- @param no_advertise - Do not advertise this prefix
- @param off_link - The prefix is off link (it is not configured on the interface)
- Configures the L-flag, When set, indicates that this
- prefix can be used for on-link determination.
- @param no_autoconfig - Setting for the A-flag. When
- set indicates that this prefix can be used for
- stateless address configuration.
- @param no_onlink - The prefix is not on link. Make sure this is consistent
- with the off_link parameter else YMMV
- @param is_no - add/delete
- @param val_lifetime - The length of time in
- seconds (relative to the time the packet is sent)
- that the prefix is valid for the purpose of on-link
- determination. A value of all one bits
- (0xffffffff) represents infinity
- @param pref_lifetime - The length of time in
- seconds (relative to the time the packet is sent)
- that addresses generated from the prefix via
- stateless address autoconfiguration remain
- preferred [ADDRCONF]. A value of all one bits
- (0xffffffff) represents infinity.
-*/
-autoreply define sw_interface_ip6nd_ra_prefix
-{
- u32 client_index;
- u32 context;
- vl_api_interface_index_t sw_if_index;
- vl_api_prefix_t prefix;
- bool use_default;
- bool no_advertise;
- bool off_link;
- bool no_autoconfig;
- bool no_onlink;
- bool is_no;
- u32 val_lifetime;
- u32 pref_lifetime;
-};
-
-/** \brief IPv6 ND proxy config
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - The interface the host is on
- @param address - The address of the host for which to proxy for
- @param is_add - Adding or deleting
-*/
-autoreply define ip6nd_proxy_add_del
-{
- u32 client_index;
- u32 context;
- vl_api_interface_index_t sw_if_index;
- bool is_del;
- vl_api_ip6_address_t ip;
-};
-
-/** \brief IPv6 ND proxy details returned after request
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
-*/
-define ip6nd_proxy_details
-{
- u32 context;
- vl_api_interface_index_t sw_if_index;
- vl_api_ip6_address_t ip;
-};
-
-/** \brief IPv6 ND proxy dump request
- @param context - sender context, to match reply w/ request
- @param retval - return code for the request
- @param sw_if_index - The interface the host is on
- @param address - The address of the host for which to proxy for
-*/
-define ip6nd_proxy_dump
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Start / stop sending router solicitation
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param irt - initial retransmission time
- @param mrt - maximum retransmission time
- @param mrc - maximum retransmission count
- @param mrd - maximum retransmission duration
- @param sw_if_index - software interface index of interface
- for sending router solicitation
- @param stop - if non-zero then stop sending router solicitation,
- otherwise start sending router solicitation
-*/
-autoreply define ip6nd_send_router_solicitation
-{
- u32 client_index;
- u32 context;
- u32 irt;
- u32 mrt;
- u32 mrc;
- u32 mrd;
- u32 sw_if_index;
- bool stop;
-};
-
/** \brief IPv6 interface enable / disable request
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@@ -445,20 +231,6 @@
bool enable; /* set to true if enable */
};
-/** \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 address[] - 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 address;
-};
-
/** \brief Dump IP multicast fib table
@param client_index - opaque cookie to identify the sender
*/
@@ -752,277 +524,18 @@
vl_api_interface_index_t sw_if_index;
};
-/** \brief Enable/disable periodic IP neighbor scan
+/** \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 mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
- @param scan_interval - neighbor scan interval in minutes, 0: default to 1
- @param max_proc_time - max processing time per run in usec, 0: default to 20
- @param max_update - max neighbor probe/delete per run, 0: default to 10
- @param scan_int_delay - delay in msec to resume scan if exceed max proc
- time or update, 0: default to 1
- @param stale_threshold - threshold in minutes for neighbor deletion,
- 0: default to 4*scan_interval
+ @param sw_if_index - interface to set link local on
+ @param ip - the new link local address
*/
-autoreply define ip_scan_neighbor_enable_disable
-{
- u32 client_index;
- u32 context;
- u8 mode;
- u8 scan_interval;
- u8 max_proc_time;
- u8 max_update;
- u8 scan_int_delay;
- u8 stale_threshold;
-};
-
-/** \brief IP probe neighbor address on an interface by sending an
- ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - interface index
- @param dst - target IP address to send IP addr resolution request
-*/
-autoreply define ip_probe_neighbor
-{
- u32 client_index;
- u32 context;
- vl_api_interface_index_t sw_if_index;
- vl_api_address_t dst;
-};
-
-/** \brief Register for IP4 ARP resolution event on receing ARP reply or
- MAC/IP info from ARP requests in L2 BDs
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 => register for events, 0 => cancel registration
- @param pid - sender's pid
- @param ip - exact IP4 address of interested arp resolution event, or
- 0 to get MAC/IP info from ARP requests in BDs
-*/
-autoreply define want_ip4_arp_events
-{
- u32 client_index;
- u32 context;
- bool enable_disable;
- u32 pid;
- vl_api_ip4_address_t ip;
-};
-
-/** \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 ip - the exact ip4 address of interest
- @param pid - client pid registered to receive notification
- @param sw_if_index - interface which received ARP packet
- @param mac - the new mac address
- @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
-*/
-define ip4_arp_event
-{
- u32 client_index;
- vl_api_ip4_address_t ip;
- u32 pid;
- vl_api_interface_index_t sw_if_index;
- vl_api_mac_address_t mac;
- u8 mac_ip;
-};
-
-service {
- rpc want_ip4_arp_events returns want_ip4_arp_events_reply
- events ip4_arp_event;
-};
-
-/** \brief Register for IP6 ND resolution event on recieving NA reply
- MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 => register for events, 0 => cancel registration
- @param pid - sender's pid
- @param ip - the exact IP6 address of interested ND resolution event, or
- 0 to get MAC/IP info from ICMP6 NS in L2 BDs.
-*/
-autoreply define want_ip6_nd_events
-{
- u32 client_index;
- u32 context;
- bool enable_disable;
- u32 pid;
- vl_api_ip6_address_t ip;
-};
-
-/** \brief Tell client about an IP6 ND resolution or
- MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
- @param client_index - opaque cookie to identify the sender
- @param pid - client pid registered to receive notification
- @param sw_if_index - interface which received ARP packet
- @param ip - the exact ip6 address of interest
- @param new_mac - the new mac address
- @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
-*/
-define ip6_nd_event
-{
- u32 client_index;
- u32 pid;
- vl_api_interface_index_t sw_if_index;
- vl_api_ip6_address_t ip;
- vl_api_mac_address_t mac;
- u8 mac_ip;
-};
-
-service {
- rpc want_ip6_ra_events returns want_ip6_ra_events_reply
- events ip6_ra_event;
-};
-
-/** \brief Register for ip6 router advertisement events
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param enable_disable - 1 => register for events, 0 => cancel registration
- @param pid - sender's pid
-*/
-autoreply define want_ip6_ra_events
-{
- u32 client_index;
- u32 context;
- bool enable_disable;
- u32 pid;
-};
-
-/** \brief Struct representing RA prefix info
- @param prefix - RA prefix info destination address
- @param flags - RA prefix info flags
- @param valid_time - RA prefix info valid time
- @param preferred_time - RA prefix info preferred time
-*/
-typedef ip6_ra_prefix_info
-{
- vl_api_prefix_t prefix;
- u8 flags;
- u32 valid_time;
- u32 preferred_time;
-};
-
-/** \brief Tell client about a router advertisement event
- @param client_index - opaque cookie to identify the sender
- @param pid - client pid registered to receive notification
- @param current_hop_limit - RA current hop limit
- @param flags - RA flags
- @param router_lifetime_in_sec - RA lifetime in seconds
- @param router_addr - The router's address
- @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
- @param time_in_msec_between_retransmitted_neighbor_solicitations -
- time in msec between retransmitted neighbor solicitations
- @param n_prefixes -
- @param prefixes -
-*/
-define ip6_ra_event
-{
- u32 client_index;
- u32 pid;
- vl_api_interface_index_t sw_if_index;
- vl_api_ip6_address_t router_addr;
- u8 current_hop_limit;
- u8 flags;
- u16 router_lifetime_in_sec;
- u32 neighbor_reachable_time_in_msec;
- u32 time_in_msec_between_retransmitted_neighbor_solicitations;
- u32 n_prefixes;
- vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
-};
-
-service {
- rpc want_ip6_nd_events returns want_ip6_nd_events_reply
- events ip6_nd_event;
-};
-
-/** \brief Proxy ARP configuration type
- @param table_id - VRF / Fib table ID
- @param low - Low address of the Proxy ARP range
- @param hi - High address of the Proxy ARP range
-*/
-typedef proxy_arp
-{
- u32 table_id;
- vl_api_ip4_address_t low;
- vl_api_ip4_address_t hi;
-};
-
-/** \brief Proxy ARP 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 if adding the Proxy ARP range, 0 if deleting
- @param proxy - Proxy configuration
-*/
-autoreply define proxy_arp_add_del
-{
- u32 client_index;
- u32 context;
- bool is_add;
- vl_api_proxy_arp_t proxy;
-};
-
-/** \brief Proxy ARP dump request
- */
-define proxy_arp_dump
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Proxy ARP dump details reply
- * @param proxy - Same data as used to configure
- */
-define proxy_arp_details
-{
- u32 context;
- vl_api_proxy_arp_t proxy;
-};
-
-/** \brief Proxy ARP add / del interface request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param sw_if_index - Which interface to enable / disable Proxy Arp on
- @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
-*/
-autoreply define proxy_arp_intfc_enable_disable
+autoreply define sw_interface_ip6_set_link_local_address
{
u32 client_index;
u32 context;
vl_api_interface_index_t sw_if_index;
- /* 1 = on, 0 = off */
- bool enable_disable;
-};
-
-/** \brief Proxy ARP interface dump request
- */
-define proxy_arp_intfc_dump
-{
- u32 client_index;
- u32 context;
-};
-
-/** \brief Proxy ARP interface dump details reply
- * @param sw_if_index The interface on which ARP proxy is enabled.
- */
-define proxy_arp_intfc_details
-{
- u32 context;
- vl_api_interface_index_t sw_if_index;
-};
-
-/** \brief Set max allowed ARP or ip6 neighbor entries request
- @param client_index - opaque cookie to identify the sender
- @param context - sender context, to match reply w/ request
- @param is_ipv6 - neighbor limit if non-zero, else ARP limit
- @param arp_neighbor_limit - the new limit, defaults are ~ 50k
-*/
-autoreply define set_arp_neighbor_limit
-{
- u32 client_index;
- u32 context;
- bool is_ipv6;
- u32 arp_neighbor_limit;
+ vl_api_ip6_address_t ip;
};
/** \brief IOAM enable : Enable in-band OAM