typedef struct vppcom_cfg_t_
{
u64 heapsize;
+ u32 vpp_api_q_length;
u64 segment_baseva;
u32 segment_size;
u32 add_segment_size;
if (VPPCOM_DEBUG > 0)
printf ("\nConnecting to VPP api...");
- if (vl_client_connect_to_vlib ("/vpe-api", app_name, 32) < 0)
+ if (vl_client_connect_to_vlib ("/vpe-api", app_name,
+ vcm->cfg.vpp_api_q_length) < 0)
{
clib_warning ("[%d] connect to vpp (%s) failed!", getpid (), app_name);
return VPPCOM_ECONNREFUSED;
bmp->options[SESSION_OPTIONS_ADD_SEGMENT_SIZE] = vcm->cfg.add_segment_size;
bmp->options[SESSION_OPTIONS_RX_FIFO_SIZE] = vcm->cfg.rx_fifo_size;
bmp->options[SESSION_OPTIONS_TX_FIFO_SIZE] = vcm->cfg.tx_fifo_size;
+ bmp->options[APP_OPTIONS_PREALLOC_FIFO_PAIRS] =
+ vcm->cfg.preallocated_fifo_pairs;
if (nsid_len)
{
bmp->namespace_id_len = nsid_len;
ASSERT (vcl_cfg);
vcl_cfg->heapsize = (256ULL << 20);
+ vcl_cfg->vpp_api_q_length = 1024;
vcl_cfg->segment_baseva = 0x200000000ULL;
vcl_cfg->segment_size = (256 << 20);
vcl_cfg->add_segment_size = (128 << 20);
u8 vc_cfg_input = 0;
u8 *chroot_path;
struct stat s;
- u32 uid, gid;
+ u32 uid, gid, q_len;
fd = open (conf_fname, O_RDONLY);
if (fd < 0)
getpid (), chroot_path);
chroot_path = 0; /* Don't vec_free() it! */
}
+ else if (unformat (line_input, "vpp-api-q-length %d", &q_len))
+ {
+ if (q_len < vcl_cfg->vpp_api_q_length)
+ {
+ clib_warning ("[%d] ERROR: configured vpp-api-q-length "
+ "(%u) is too small! Using default: %u ",
+ getpid (), q_len, vcl_cfg->vpp_api_q_length);
+ }
+ else
+ {
+ vcl_cfg->vpp_api_q_length = q_len;
+
+ if (VPPCOM_DEBUG > 0)
+ clib_warning ("[%d] configured vpp-api-q-length %u",
+ getpid (), vcl_cfg->vpp_api_q_length);
+ }
+ }
else if (unformat (line_input, "uid %d", &uid))
{
vl_set_memory_uid (uid);
}
}
rv = ready;
+
+ if (vcm->app_event_queue->cursize &&
+ !pthread_mutex_trylock (&vcm->app_event_queue->mutex))
+ {
+ u32 i, n_to_dequeue = vcm->app_event_queue->cursize;
+ session_fifo_event_t e;
+
+ for (i = 0; i < n_to_dequeue; i++)
+ unix_shared_memory_queue_sub_raw (vcm->app_event_queue, (u8 *) & e);
+
+ pthread_mutex_unlock (&vcm->app_event_queue->mutex);
+ }
+
done:
return rv;
}