aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlibmemory/memory_client.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2018-01-04 12:17:10 -0800
committerDave Barach <openvpp@barachs.net>2018-01-05 19:01:01 +0000
commit6d1caf91147ee8676b57216ca891af0f44d7a074 (patch)
treebdd09d8bf97527df0896ed37cfe49126da5d9bf3 /src/vlibmemory/memory_client.c
parent90a63988fa01685626b6d6a01b79ea5370f7fbac (diff)
sock api: add first msg id retrieval function
Change-Id: I2032b5fc8e1904005b8eb871b9be06d025ed9b71 Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vlibmemory/memory_client.c')
-rw-r--r--src/vlibmemory/memory_client.c44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/vlibmemory/memory_client.c b/src/vlibmemory/memory_client.c
index c7ae13963c9..c47f25e6e3d 100644
--- a/src/vlibmemory/memory_client.c
+++ b/src/vlibmemory/memory_client.c
@@ -521,19 +521,44 @@ vl_client_get_first_plugin_msg_id (const char *plugin_name)
/* Ask the data-plane for the message-ID base of the indicated plugin */
mm->first_msg_id_reply_ready = 0;
- mp = vl_msg_api_alloc (sizeof (*mp));
- memset (mp, 0, sizeof (*mp));
- mp->_vl_msg_id = ntohs (VL_API_GET_FIRST_MSG_ID);
- mp->client_index = am->my_client_index;
- strncpy ((char *) mp->name, plugin_name, sizeof (mp->name) - 1);
+ /* Not using shm client */
+ if (!am->my_registration)
+ {
+ mp = vl_socket_client_msg_alloc (sizeof (*mp));
+ memset (mp, 0, sizeof (*mp));
+ mp->_vl_msg_id = ntohs (VL_API_GET_FIRST_MSG_ID);
+ mp->client_index = am->my_client_index;
+ strncpy ((char *) mp->name, plugin_name, sizeof (mp->name) - 1);
+
+ if (vl_socket_client_write () <= 0)
+ goto sock_err;
+ if (vl_socket_client_read (1))
+ goto sock_err;
+
+ if (mm->first_msg_id_reply_ready == 1)
+ {
+ rv = mm->first_msg_id_reply;
+ goto result;
+ }
- vl_msg_api_send_shmem (am->shmem_hdr->vl_input_queue, (u8 *) & mp);
+ sock_err:
+ /* Restore old handler */
+ am->msg_handlers[VL_API_GET_FIRST_MSG_ID_REPLY] = old_handler;
- /* Synchronously wait for the answer */
- do
+ return -1;
+ }
+ else
{
- timeout = clib_time_now (&clib_time) + 1.0;
+ mp = vl_msg_api_alloc (sizeof (*mp));
+ memset (mp, 0, sizeof (*mp));
+ mp->_vl_msg_id = ntohs (VL_API_GET_FIRST_MSG_ID);
+ mp->client_index = am->my_client_index;
+ strncpy ((char *) mp->name, plugin_name, sizeof (mp->name) - 1);
+ vl_msg_api_send_shmem (am->shmem_hdr->vl_input_queue, (u8 *) & mp);
+
+ /* Synchronously wait for the answer */
+ timeout = clib_time_now (&clib_time) + 1.0;
while (clib_time_now (&clib_time) < timeout)
{
if (mm->first_msg_id_reply_ready == 1)
@@ -547,7 +572,6 @@ vl_client_get_first_plugin_msg_id (const char *plugin_name)
return rv;
}
- while (0);
result: