vpp-swan: fix handler API messages
In the current implementation there is a bug related to the incorrect message handling due to the wrong id. The fix changes logic responsible for handling incoming API messages by correcting their ids. Type: fix Signed-off-by: Gabriel Oginski <gabrielx.oginski@intel.com> Change-Id: Iea29506053c9fd2e1d01bce83e7f4a6e1de39321
This commit is contained in:
Gabriel Oginski
committed by
Fan Zhang
parent
af9b7156c8
commit
c3f505fe7b
@ -296,41 +296,50 @@ vac_rx_thread_fn (private_vac_t *this)
|
||||
|
||||
q = am->vl_input_queue;
|
||||
|
||||
const u16 msg_id_rx_thread_exit =
|
||||
vl_msg_api_get_msg_index ((u8 *) "rx_thread_exit_c3a3a452");
|
||||
const u16 msg_id_memclnt_rx_thread_suspend =
|
||||
vl_msg_api_get_msg_index ((u8 *) "memclnt_rx_thread_suspend_c3a3a452");
|
||||
const u16 msg_id_memclnt_read_timeout =
|
||||
vl_msg_api_get_msg_index ((u8 *) "memclnt_read_timeout_c3a3a452");
|
||||
const u16 msg_id_memclnt_keepalive =
|
||||
vl_msg_api_get_msg_index ((u8 *) "memclnt_keepalive_51077d14");
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
while (!svm_queue_sub (q, (u8 *) &msg, SVM_Q_WAIT, 0))
|
||||
{
|
||||
u16 id = ntohs (*((u16 *) msg));
|
||||
switch (id)
|
||||
|
||||
if (msg_id_rx_thread_exit == id)
|
||||
{
|
||||
case VL_API_RX_THREAD_EXIT:
|
||||
vl_msg_api_free ((void *) msg);
|
||||
this->queue_lock->lock (this->queue_lock);
|
||||
this->terminate_cv->signal (this->terminate_cv);
|
||||
this->queue_lock->unlock (this->queue_lock);
|
||||
DBG3 (DBG_KNL, "vac received rx thread exit [%d]",
|
||||
VL_API_RX_THREAD_EXIT);
|
||||
msg_id_rx_thread_exit);
|
||||
thread_exit (NULL);
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case VL_API_MEMCLNT_RX_THREAD_SUSPEND:
|
||||
}
|
||||
else if (msg_id_memclnt_rx_thread_suspend == id)
|
||||
{
|
||||
vl_msg_api_free ((void *) msg);
|
||||
this->queue_lock->lock (this->queue_lock);
|
||||
this->suspend_cv->signal (this->suspend_cv);
|
||||
this->resume_cv->wait (this->resume_cv, this->queue_lock);
|
||||
this->queue_lock->unlock (this->queue_lock);
|
||||
DBG3 (DBG_KNL, "vac received rx thread suspend [%d]",
|
||||
VL_API_MEMCLNT_RX_THREAD_SUSPEND);
|
||||
break;
|
||||
|
||||
case VL_API_MEMCLNT_READ_TIMEOUT:
|
||||
msg_id_memclnt_rx_thread_suspend);
|
||||
}
|
||||
else if (msg_id_memclnt_read_timeout == id)
|
||||
{
|
||||
DBG3 (DBG_KNL, "vac received read timeout [%d]",
|
||||
VL_API_MEMCLNT_READ_TIMEOUT);
|
||||
msg_id_memclnt_read_timeout);
|
||||
vl_msg_api_free ((void *) msg);
|
||||
break;
|
||||
|
||||
case VL_API_MEMCLNT_KEEPALIVE:
|
||||
}
|
||||
else if (msg_id_memclnt_keepalive == id)
|
||||
{
|
||||
mp = (void *) msg;
|
||||
rmp = vl_msg_api_alloc (sizeof (*rmp));
|
||||
memset (rmp, 0, sizeof (*rmp));
|
||||
@ -342,12 +351,10 @@ vac_rx_thread_fn (private_vac_t *this)
|
||||
vl_msg_api_send_shmem (shmem_hdr->vl_input_queue, (u8 *) &rmp);
|
||||
vl_msg_api_free ((void *) msg);
|
||||
DBG3 (DBG_KNL, "vac received keepalive %d",
|
||||
VL_API_MEMCLNT_KEEPALIVE);
|
||||
break;
|
||||
|
||||
default:
|
||||
vac_api_handler (this, (void *) msg);
|
||||
msg_id_memclnt_keepalive);
|
||||
}
|
||||
else
|
||||
vac_api_handler (this, (void *) msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user