diff options
author | Neale Ranns <nranns@cisco.com> | 2019-09-30 10:53:31 +0000 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-12-17 10:56:20 +0000 |
commit | cbe25aab3be72154f2c706c39eeba6a77f34450f (patch) | |
tree | 131fb53b5ec973be045ffb9e2eb797af01d112a0 /src/vnet/ip/ip.api | |
parent | 96453fd2417ebd1d69354a7fb692976129cea80e (diff) |
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>
Diffstat (limited to 'src/vnet/ip/ip.api')
-rw-r--r-- | src/vnet/ip/ip.api | 495 |
1 files changed, 4 insertions, 491 deletions
diff --git a/src/vnet/ip/ip.api b/src/vnet/ip/ip.api index 0bdd1529b20..831b38ac53c 100644 --- a/src/vnet/ip/ip.api +++ b/src/vnet/ip/ip.api @@ -189,76 +189,6 @@ manual_endian manual_print define ip_route_details 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 @@ autoreply define set_ip_flow_hash 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 @@ autoreply define sw_interface_ip6_enable_disable 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,279 +524,20 @@ autoreply define ip_source_check_interface_add_del vl_api_interface_index_t sw_if_index; }; -/** \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 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 -*/ -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 +/** \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 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 + @param sw_if_index - interface to set link local on + @param ip - the new link local address */ -autoreply define want_ip4_arp_events +autoreply define sw_interface_ip6_set_link_local_address { 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 -{ - 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; -}; - /** \brief IOAM enable : Enable in-band OAM @param id - profile id @param seqno - To enable Seqno Processing |