From 3b28fd730625a475a4093bec3e2ed9b1b6932131 Mon Sep 17 00:00:00 2001 From: Alexander Chernavin Date: Thu, 2 Feb 2023 14:22:56 +0000 Subject: ip6-nd: support dump/details for IPv6 RA Type: improvement With this change, add support for dumping IPv6 Router Advertisements details on a per-interface basis (or all). Also, cover that with a test. Signed-off-by: Alexander Chernavin Change-Id: I89fa93439d33cc36252377f27187b18b3d30a1d4 --- src/vnet/ip6-nd/ip6_nd.api | 130 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) (limited to 'src/vnet/ip6-nd/ip6_nd.api') diff --git a/src/vnet/ip6-nd/ip6_nd.api b/src/vnet/ip6-nd/ip6_nd.api index 0a519c16f7f..3ddf25103c1 100644 --- a/src/vnet/ip6-nd/ip6_nd.api +++ b/src/vnet/ip6-nd/ip6_nd.api @@ -20,7 +20,7 @@ called through a shared memory interface. */ -option version = "1.0.0"; +option version = "1.1.0"; import "vnet/ip/ip_types.api"; import "vnet/interface_types.api"; @@ -106,6 +106,134 @@ autoreply define sw_interface_ip6nd_ra_prefix u32 pref_lifetime; }; +/** \brief IPv6 Router Advertisements prefix entry + @param prefix - prefix to advertise + @param onlink_flag - if true, the prefix can be used for on-link + determination + @param autonomous_flag - if true, the prefix can be used for stateless + address configuration + @param val_lifetime - valid lifetime in seconds (0xffffffff represents + infinity) + @param pref_lifetime - preferred lifetime in seconds (0xffffffff represents + infinity) + @param valid_lifetime_expires - number of seconds in which valid lifetime + expires (zero means never, negative value + means expired this number of seconds ago) + @param pref_lifetime_expires - number of seconds in which preferred + lifetime expires (zero means never, negative + value means expired this number of seconds + ago) + @param decrement_lifetime_flag - if true, decrement valid lifetime and + preferred lifetime + @param no_advertise - if true, the prefix will not be advertised +*/ +typedef ip6nd_ra_prefix +{ + vl_api_prefix_t prefix; + bool onlink_flag; + bool autonomous_flag; + u32 val_lifetime; + u32 pref_lifetime; + f64 valid_lifetime_expires; + f64 pref_lifetime_expires; + bool decrement_lifetime_flag; + bool no_advertise; +}; + +/** \brief Dump IPv6 Router Advertisements details on a per-interface basis + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request + @param sw_if_index - interface index to use as a filter (0xffffffff + represents all interfaces) +*/ +define sw_interface_ip6nd_ra_dump +{ + option in_progress; + u32 client_index; + u32 context; + vl_api_interface_index_t sw_if_index; + option vat_help = "[(|sw_if_index )]"; +}; + +/** \brief Details on IPv6 Router Advertisements for a single interface + @param context - returned sender context, to match reply w/ request + @param sw_if_index - interface index the details are belong to + @param cur_hop_limit - current hop limit + @param adv_managed_flag - if true, enable DHCP for address + @param adv_other_flag - if true, Enable DHCP for other information + @param adv_router_lifetime - lifetime associated with the default router in + seconds (zero indicates that the router is not + a default router) + @param adv_neighbor_reachable_time - number of milliseconds within which a + neighbor is assumed to be reachable + (zero means unspecified) + @param adv_retransmit_interval - number of milliseconds between + retransmitted Neighbor Solicitation + messages (zero means unspecified) + @param adv_link_mtu - MTU that all the nodes on a link use + @param send_radv - if true, send periodic Router Advertisements + @param cease_radv - if true, cease to send periodic Router Advertisements + @param send_unicast - if true, destination address of a Router + Advertisement message will use the source address of + the Router Solicitation message (when available). + Otherwise, multicast address will be used + @param adv_link_layer_address - if true, add link layer address option + @param max_radv_interval - maximum time in seconds allowed between sending + unsolicited multicast Router Advertisements + @param min_radv_interval - minimum time in seconds allowed between sending + unsolicited multicast Router Advertisements + @param last_radv_time - number of seconds since the last time a solicited + Router Advertisement message was sent (zero means + never) + @param last_multicast_time - number of seconds since the last time a + multicast Router Advertisements message was + sent (zero means never) + @param next_multicast_time - number of seconds within which next time a + multicast Router Advertisement message will be + sent (zero means never) + @param initial_adverts_count - number of initial Router Advertisement + messages to send + @param initial_adverts_interval - number of seconds between initial Router + Advertisement messages + @param initial_adverts_sent - if true, all initial Router Advertisement + messages were sent + @param n_advertisements_sent - number of Router Advertisements sent + @param n_solicitations_rcvd - number of Router Solicitations received + @param n_solicitations_dropped - number of Router Solicitations dropped + @param n_prefixes - number of prefix entries + @param prefixes - array of prefix entries +*/ +define sw_interface_ip6nd_ra_details +{ + option in_progress; + u32 context; + vl_api_interface_index_t sw_if_index; + u8 cur_hop_limit; + bool adv_managed_flag; + bool adv_other_flag; + u16 adv_router_lifetime; + u32 adv_neighbor_reachable_time; + u32 adv_retransmit_interval; + u32 adv_link_mtu; + bool send_radv; + bool cease_radv; + bool send_unicast; + bool adv_link_layer_address; + f64 max_radv_interval; + f64 min_radv_interval; + f64 last_radv_time; + f64 last_multicast_time; + f64 next_multicast_time; + u32 initial_adverts_count; + f64 initial_adverts_interval; + bool initial_adverts_sent; + u32 n_advertisements_sent; + u32 n_solicitations_rcvd; + u32 n_solicitations_dropped; + u32 n_prefixes; + vl_api_ip6nd_ra_prefix_t prefixes[n_prefixes]; +}; + /** \brief IPv6 ND (mirror) proxy @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request -- cgit 1.2.3-korg