BFD: add get echo source API (VPP-1367)
[vpp.git] / src / vnet / bfd / bfd_api.c
index 33a7c1d..fcd6695 100644 (file)
@@ -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.