dhcp: vat support for the dhcp_client_dump API 75/27275/3
authorDave Barach <dave@barachs.net>
Tue, 26 May 2020 15:19:28 +0000 (11:19 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 27 May 2020 20:53:57 +0000 (20:53 +0000)
Also: permanently solve ordering issues with the vpp builtin vat
plugin loader, by explicitly loading vat plugins once we're sure that
all data plane plugins have registered their APIs / API message
handlers.

Fix compilation / link errors when the vpp builtin vat plugin loader
is disbled by cmake configuration.

Type: fix

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: Id553c63ae860ebfc196c5ad4b55c19e08fec2c9e
Signed-off-by: Ole Troan <ot@cisco.com>
src/plugins/dhcp/dhcp_api.c
src/plugins/dhcp/dhcp_test.c
src/vlibmemory/CMakeLists.txt
src/vlibmemory/vlib_api.c
src/vpp/api/api_main.c
src/vpp/vnet/main.c

index d2e4235..c5c7a82 100644 (file)
@@ -262,7 +262,7 @@ dhcp_client_lease_encode (vl_api_dhcp_lease_t * lease,
   size_t len;
   u8 i;
 
-  lease->is_ipv6 = 0;          // only support IPv6 clients
+  lease->is_ipv6 = 0;          // only support IPv4 clients
   lease->sw_if_index = ntohl (client->sw_if_index);
   lease->state = ntohl (client->state);
   len = clib_min (sizeof (lease->hostname) - 1, vec_len (client->hostname));
index a0d6f41..0eb87ab 100644 (file)
@@ -366,10 +366,41 @@ api_dhcp6_pd_send_client_message (vat_main_t * vam)
   return -1;
 }
 
+static void
+vl_api_dhcp_client_details_t_handler (vl_api_dhcp_client_details_t * mp)
+{
+  vat_main_t *vam = &vat_main;
+  vl_api_dhcp_client_t *cp;
+  vl_api_dhcp_lease_t *lp;
+
+  cp = &mp->client;
+  lp = &mp->lease;
+
+  print (vam->ofp, "sw_if_index %d, id '%s'", ntohl (cp->sw_if_index),
+        cp->id);
+
+  print (vam->ofp, "leased address %U, router address %U",
+        format_ip4_address, &lp->host_address.un,
+        format_ip4_address, &lp->router_address.un);
+}
+
 static int
 api_dhcp_client_dump (vat_main_t * vam)
 {
-  return -1;
+  vl_api_dhcp_plugin_control_ping_t *mp_ping;
+  vl_api_dhcp_client_dump_t *mp;
+  int ret;
+
+  M (DHCP_CLIENT_DUMP, mp);
+
+  S (mp);
+
+  /* Use a control ping for synchronization */
+  MPING (DHCP_PLUGIN_CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -396,8 +427,6 @@ api_dhcp_plugin_get_version (vat_main_t * vam)
   return -1;
 }
 
-#define vl_api_dhcp_client_details_t_handler vl_noop_handler
-
 static void
   vl_api_dhcp_plugin_get_version_reply_t_handler
   (vl_api_dhcp_plugin_get_version_reply_t * mp)
index 64fcb2d..b48ff7b 100644 (file)
@@ -16,6 +16,7 @@ add_vpp_library (vlibmemory
   memory_api.c
   memory_shared.c
   memory_client.c
+  socket_client.c
   socket_api.c
   vlib_api.c
   vlib_api_cli.c
index 5820168..51378a5 100644 (file)
@@ -248,6 +248,13 @@ vl_api_save_msg_table (void)
   vec_free (serialized_message_table);
 }
 
+clib_error_t *vat_builtin_main_init (vlib_main_t * vm) __attribute__ ((weak));
+clib_error_t *
+vat_builtin_main_init (vlib_main_t * vm)
+{
+  return 0;
+}
+
 static uword
 vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node,
                     vlib_frame_t * f)
@@ -287,6 +294,10 @@ vl_api_clnt_process (vlib_main_t * vm, vlib_node_runtime_t * node,
   if (e)
     clib_error_report (e);
 
+  e = vat_builtin_main_init (vm);
+  if (e)
+    clib_error_report (e);
+
   sleep_time = 10.0;
   dead_client_scan_time = vlib_time_now (vm) + 10.0;
 
index 1d16f78..e2223a4 100644 (file)
@@ -38,8 +38,9 @@ init_error_string_table (vat_main_t * vam)
   hash_set (vam->error_string_by_error_number, 99, "Misc");
 }
 
-static clib_error_t *
-api_main_init (vlib_main_t * vm)
+#if VPP_API_TEST_BUILTIN > 0
+clib_error_t *
+vat_builtin_main_init (vlib_main_t * vm)
 {
   vat_main_t *vam = &vat_main;
   int rv;
@@ -58,8 +59,7 @@ api_main_init (vlib_main_t * vm)
 
   return 0;
 }
-
-VLIB_MAIN_LOOP_ENTER_FUNCTION (api_main_init);
+#endif
 
 void
 vat_plugin_hash_create (void)
index f4cc504..b8a6f2b 100644 (file)
@@ -74,7 +74,9 @@ vpp_find_plugin_path ()
 static void
 vpe_main_init (vlib_main_t * vm)
 {
+#if VPP_API_TEST_BUILTIN > 0
   void vat_plugin_hash_create (void);
+#endif
 
   if (CLIB_DEBUG > 0)
     vlib_unix_cli_set_prompt ("DBGvpp# ");
@@ -87,7 +89,9 @@ vpe_main_init (vlib_main_t * vm)
   /*
    * Create the binary api plugin hashes before loading plugins
    */
+#if VPP_API_TEST_BUILTIN > 0
   vat_plugin_hash_create ();
+#endif
 
   if (!vlib_plugin_path)
     vpp_find_plugin_path ();