diff options
Diffstat (limited to 'src/vnet/bfd')
-rw-r--r-- | src/vnet/bfd/bfd.api | 32 | ||||
-rw-r--r-- | src/vnet/bfd/bfd_api.c | 56 |
2 files changed, 87 insertions, 1 deletions
diff --git a/src/vnet/bfd/bfd.api b/src/vnet/bfd/bfd.api index 912c6954407..afbcc731e5a 100644 --- a/src/vnet/bfd/bfd.api +++ b/src/vnet/bfd/bfd.api @@ -37,6 +37,38 @@ autoreply define bfd_udp_del_echo_source u32 context; }; +/** \brief Get BFD echo source + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request +*/ +define bfd_udp_get_echo_source +{ + u32 client_index; + u32 context; +}; + +/** \brief Get BFD echo source reply + @param context - sender context, to match reply w/ request + @param retval - return code + @param sw_if_index - interface to use as echo source + @param is_set - non-zero if set + @param have_usable_ip4 - non-zero if have usable IPv4 address + @param ip4_addr - IPv4 address + @param have_usable_ip6 - non-zero if have usable IPv6 address + @param ip6_addr - IPv6 address +*/ +define bfd_udp_get_echo_source_reply +{ + u32 context; + i32 retval; + u32 sw_if_index; + u8 is_set; + u8 have_usable_ip4; + u8 ip4_addr[4]; + u8 have_usable_ip6; + u8 ip6_addr[16]; +}; + /** \brief Add UDP BFD session on interface @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request diff --git a/src/vnet/bfd/bfd_api.c b/src/vnet/bfd/bfd_api.c index 33a7c1d8bf6..fcd66950114 100644 --- a/src/vnet/bfd/bfd_api.c +++ b/src/vnet/bfd/bfd_api.c @@ -60,7 +60,8 @@ _ (BFD_UDP_AUTH_ACTIVATE, bfd_udp_auth_activate) \ _ (BFD_UDP_AUTH_DEACTIVATE, bfd_udp_auth_deactivate) \ _ (BFD_UDP_SET_ECHO_SOURCE, bfd_udp_set_echo_source) \ - _ (BFD_UDP_DEL_ECHO_SOURCE, bfd_udp_del_echo_source) + _ (BFD_UDP_DEL_ECHO_SOURCE, bfd_udp_del_echo_source) \ + _ (BFD_UDP_GET_ECHO_SOURCE, bfd_udp_get_echo_source) pub_sub_handler (bfd_events, BFD_EVENTS); @@ -359,6 +360,59 @@ vl_api_bfd_udp_del_echo_source_t_handler (vl_api_bfd_udp_del_echo_source_t * REPLY_MACRO (VL_API_BFD_UDP_DEL_ECHO_SOURCE_REPLY); } +static void +vl_api_bfd_udp_get_echo_source_t_handler (vl_api_bfd_udp_get_echo_source_t * + mp) +{ + vl_api_bfd_udp_get_echo_source_reply_t *rmp; + int rv = 0; + int is_set; + u32 sw_if_index; + int have_usable_ip4; + ip4_address_t ip4; + int have_usable_ip6; + ip6_address_t ip6; + + bfd_udp_get_echo_source (&is_set, &sw_if_index, &have_usable_ip4, &ip4, + &have_usable_ip6, &ip6); + + /* *INDENT-OFF* */ + REPLY_MACRO2 (VL_API_BFD_UDP_GET_ECHO_SOURCE_REPLY, + ({ + rmp->sw_if_index = ntohl (sw_if_index); + if (is_set) + { + rmp->is_set = 1; + rmp->sw_if_index = clib_host_to_net_u32 (sw_if_index); + if (have_usable_ip4) + { + rmp->have_usable_ip4 = 1; + clib_memcpy (rmp->ip4_addr, &ip4, sizeof (ip4)); + } + else + { + rmp->have_usable_ip4 = 0; + } + if (have_usable_ip6) + { + rmp->have_usable_ip6 = 1; + clib_memcpy (rmp->ip6_addr, &ip6, sizeof (ip6)); + } + else + { + rmp->have_usable_ip6 = 0; + } + } + else + { + rmp->is_set = 0; + rmp->have_usable_ip4 = 0; + rmp->have_usable_ip6 = 0; + } + })) + /* *INDENT-ON* */ +} + /* * bfd_api_hookup * Add vpe's API message handlers to the table. |