typedef struct
{
uint16_t index;
- /* memif conenction handle */
+ /* memif connection handle */
memif_conn_handle_t conn;
/* interface ip address */
uint8_t ip_addr[4];
void
user_signal_handler (int sig)
{
- sig = sig;
}
static void
DBG ("epoll_ctl: %s fd %d", strerror (errno), fd);
return -1;
}
- DBG ("fd %d moddified on epoll", fd);
+ DBG ("fd %d modified on epoll", fd);
return 0;
}
for (i = 0; i < rx; i++)
{
resolve_packet ((void *) (data->rx_bufs + i)->data,
- (data->rx_bufs + i)->data_len,
+ (data->rx_bufs + i)->len,
(void *) (data->tx_bufs + i)->data,
- &(data->tx_bufs + i)->data_len, c->ip_addr);
+ &(data->tx_bufs + i)->len, c->ip_addr);
}
/* mark memif buffers and shared memory buffers as free */
- err = memif_buffer_free (c->conn, data->qid, data->rx_bufs, rx, &fb);
+ err = memif_refill_queue (c->conn, data->qid, rx, 0);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_buffer_free: %s", memif_strerror (err));
data->rx_buf_num -= fb;
goto close;
close:
- err = memif_buffer_free (c->conn, data->qid, data->rx_bufs, rx, &fb);
+ err = memif_refill_queue (c->conn, data->qid, rx, 0);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_buffer_free: %s", memif_strerror (err));
data->rx_buf_num -= fb;
memif_connection_t *c = &memif_connection[data->index];
int err;
uint16_t rx = 0, tx = 0, fb = 0;
- struct epoll_event evt, *e;
+ struct epoll_event evt;
int en = 0;
- uint32_t events = 0;
sigset_t sigset;
signal (SIGUSR1, user_signal_handler);
for (i = 0; i < rx; i++)
{
resolve_packet ((void *) (data->rx_bufs + i)->data,
- (data->rx_bufs + i)->data_len,
+ (data->rx_bufs + i)->len,
(void *) (data->tx_bufs + i)->data,
- &(data->tx_bufs + i)->data_len, c->ip_addr);
+ &(data->tx_bufs + i)->len, c->ip_addr);
}
/* mark memif buffers and shared memory buffers as free */
- err =
- memif_buffer_free (c->conn, data->qid, data->rx_bufs, rx, &fb);
+ err = memif_refill_queue (c->conn, data->qid, rx, 0);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_buffer_free: %s", memif_strerror (err));
data->rx_buf_num -= fb;
goto close;
close:
- err = memif_buffer_free (c->conn, data->qid, data->rx_bufs, rx, &fb);
+ err = memif_refill_queue (c->conn, data->qid, rx, 0);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_buffer_free: %s", memif_strerror (err));
data->rx_buf_num -= fb;
memif_connection_t *c = &memif_connection[index];
int i, ti;
INFO ("memif disconnected!");
- /* inform thread in polling mode about memif disconenction */
+ /* inform thread in polling mode about memif disconnection */
c->pending_del = 1;
for (i = 0; i < MAX_QUEUES; i++)
{
/* user needs to watch new fd or stop watching fd that is about to be closed.
control fd will be modified during connection establishment to minimize CPU usage */
int
-control_fd_update (int fd, uint8_t events)
+control_fd_update (int fd, uint8_t events, void *ctx)
{
/* convert memif event definitions to epoll events */
if (events & MEMIF_FD_EVENT_DEL)
/* setting memif connection arguments */
memif_conn_args_t args;
- int fd = -1;
memset (&args, 0, sizeof (args));
args.is_master = 0;
args.log2_ring_size = 10;
args.num_s2m_rings = 2;
args.num_m2s_rings = 2;
strncpy ((char *) args.interface_name, IF_NAME, strlen (IF_NAME));
- strncpy ((char *) args.instance_name, APP_NAME, strlen (APP_NAME));
args.mode = 0;
/* socket filename is not specified, because this app is supposed to
connect to VPP over memif. so default socket filename will be used */
memif_connection_t *c = &memif_connection[index];
int err;
- /* disconenct then delete memif connection */
+ /* disconnect then delete memif connection */
err = memif_delete (&c->conn);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_delete: %s", memif_strerror (err));
printf (" (debug)");
#endif
printf ("\n");
- printf ("memif version: %d\n", MEMIF_VERSION);
+ printf ("memif version: %d\n", memif_get_version ());
printf ("commands:\n");
printf ("\thelp - prints this help\n");
printf ("\texit - exit app\n");
int
user_input_handler ()
{
- int i;
char *in = (char *) malloc (256);
char *ui = fgets (in, 256, stdin);
char *end;
int
poll_event (int timeout)
{
- struct epoll_event evt, *e;
+ struct epoll_event evt;
int app_err = 0, memif_err = 0, en = 0;
- int tmp, nfd;
uint32_t events = 0;
memset (&evt, 0, sizeof (evt));
evt.events = EPOLLIN | EPOLLOUT;
if (evt.data.fd > 2)
{
/* event of memif control fd */
- /* convert epolle events to memif events */
+ /* convert epoll events to memif events */
if (evt.events & EPOLLIN)
events |= MEMIF_FD_EVENT_READ;
if (evt.events & EPOLLOUT)
/* if valid callback is passed as argument, fd event polling will be done by user
all file descriptors and events will be passed to user in this callback */
/* if callback is set to NULL libmemif will handle fd event polling */
- err = memif_init (control_fd_update, APP_NAME);
+ err = memif_init (control_fd_update, APP_NAME, NULL, NULL, NULL);
if (err != MEMIF_ERR_SUCCESS)
INFO ("memif_init: %s", memif_strerror (err));