+ rv = bfd_udp_auth_activate (BFD_UDP_API_PARAM_FROM_MP (mp),
+ clib_net_to_host_u32 (mp->conf_key_id),
+ mp->bfd_key_id, mp->is_delayed);
+
+ BAD_SW_IF_INDEX_LABEL;
+ REPLY_MACRO (VL_API_BFD_UDP_AUTH_ACTIVATE_REPLY);
+}
+
+static void
+vl_api_bfd_udp_auth_deactivate_t_handler (vl_api_bfd_udp_auth_deactivate_t *
+ mp)
+{
+ vl_api_bfd_udp_auth_deactivate_reply_t *rmp;
+ int rv;
+
+ VALIDATE_SW_IF_INDEX (mp);
+
+ BFD_UDP_API_PARAM_COMMON_CODE;
+
+ rv =
+ bfd_udp_auth_deactivate (BFD_UDP_API_PARAM_FROM_MP (mp), mp->is_delayed);
+
+ BAD_SW_IF_INDEX_LABEL;
+ REPLY_MACRO (VL_API_BFD_UDP_AUTH_DEACTIVATE_REPLY);
+}
+
+static void
+vl_api_bfd_udp_set_echo_source_t_handler (vl_api_bfd_udp_set_echo_source_t *
+ mp)
+{
+ vl_api_bfd_udp_set_echo_source_reply_t *rmp;
+ int rv;
+
+ VALIDATE_SW_IF_INDEX (mp);
+
+ rv = bfd_udp_set_echo_source (clib_net_to_host_u32 (mp->sw_if_index));
+
+ BAD_SW_IF_INDEX_LABEL;
+ REPLY_MACRO (VL_API_BFD_UDP_SET_ECHO_SOURCE_REPLY);
+}
+
+static void
+vl_api_bfd_udp_del_echo_source_t_handler (vl_api_bfd_udp_del_echo_source_t *
+ mp)
+{
+ vl_api_bfd_udp_del_echo_source_reply_t *rmp;
+ int rv;
+
+ rv = bfd_udp_del_echo_source ();
+
+ 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 = true;
+ rmp->sw_if_index = clib_host_to_net_u32 (sw_if_index);
+ if (have_usable_ip4)
+ {
+ rmp->have_usable_ip4 = true;
+ ip4_address_encode(&ip4, rmp->ip4_addr);
+ }
+ else
+ {
+ rmp->have_usable_ip4 = false;
+ }
+ if (have_usable_ip6)
+ {
+ rmp->have_usable_ip6 = true;
+ ip6_address_encode(&ip6, rmp->ip6_addr);
+ }
+ else
+ {
+ rmp->have_usable_ip6 = false;
+ }
+ }
+ else
+ {
+ rmp->is_set = false;
+ rmp->have_usable_ip4 = false;
+ rmp->have_usable_ip6 = false;
+ }
+ }))
+ /* *INDENT-ON* */
+}
+
+#include <vnet/bfd/bfd.api.c>
+static clib_error_t *
+bfd_api_hookup (vlib_main_t * vm)
+{