blob: 5af42eaf63be6bc76d112d675baf05a19c908ccc [file] [log] [blame]
#include <common.h>
void
print_memif_ring_details (memif_connection_t *c, uint16_t qid, uint8_t is_rx)
{
/* TODO: print memif shared memory details */
}
void
print_memif_rx_ring_details (memif_connection_t *c, uint16_t qid)
{
print_memif_ring_details (c, qid, /* RX */ 1);
}
void
print_memif_tx_ring_details (memif_connection_t *c, uint16_t qid)
{
print_memif_ring_details (c, qid, /* TX */ 0);
}
void
print_version ()
{
printf ("libmemif version: %s, memif version: %s\n", LIBMEMIF_VERSION,
memif_get_version_str ());
}
int
parse_ip4 (const char *input, uint8_t out[4])
{
char *ui, *end;
char *tmp = strdup (input);
ui = strtok (tmp, ".");
if (ui == NULL)
return -1;
out[0] = strtol (ui, &end, 10);
ui = strtok (NULL, ".");
if (ui == NULL)
return -1;
out[1] = strtol (ui, &end, 10);
ui = strtok (NULL, ".");
if (ui == NULL)
return -1;
out[2] = strtol (ui, &end, 10);
ui = strtok (NULL, ".");
if (ui == NULL)
return -1;
out[3] = strtol (ui, &end, 10);
free (tmp);
return 0;
}
int
parse_mac (const char *input, uint8_t out[6])
{
char *ui, *end;
char *tmp = strdup (input);
ui = strtok (tmp, ":");
if (ui == NULL)
return -1;
out[0] = strtol (ui, &end, 16);
ui = strtok (NULL, ":");
if (ui == NULL)
return -1;
out[1] = strtol (ui, &end, 16);
ui = strtok (NULL, ":");
if (ui == NULL)
return -1;
out[2] = strtol (ui, &end, 16);
ui = strtok (NULL, ":");
if (ui == NULL)
return -1;
out[3] = strtol (ui, &end, 16);
ui = strtok (NULL, ":");
if (ui == NULL)
return -1;
out[4] = strtol (ui, &end, 16);
ui = strtok (NULL, ":");
if (ui == NULL)
return -1;
out[5] = strtol (ui, &end, 16);
free (tmp);
return 0;
}
void
alloc_memif_buffers (memif_connection_t *c)
{
c->rx_bufs =
(memif_buffer_t *) malloc (sizeof (memif_buffer_t) * MAX_MEMIF_BUFS);
c->rx_buf_num = 0;
c->tx_bufs =
(memif_buffer_t *) malloc (sizeof (memif_buffer_t) * MAX_MEMIF_BUFS);
c->tx_buf_num = 0;
}
void
free_memif_buffers (memif_connection_t *c)
{
if (c->rx_bufs != NULL)
free (c->rx_bufs);
c->rx_bufs = NULL;
c->rx_buf_num = 0;
if (c->tx_bufs != NULL)
free (c->tx_bufs);
c->tx_bufs = NULL;
c->tx_buf_num = 0;
}
void
print_memif_details (memif_connection_t *c)
{
printf ("MEMIF DETAILS\n");
printf ("==============================\n");
memif_details_t md;
memset (&md, 0, sizeof (md));
ssize_t buflen = 2048;
char *buf = (char *) malloc (buflen);
memset (buf, 0, buflen);
int err, e;
err = memif_get_details (c->conn, &md, buf, buflen);
if (err != MEMIF_ERR_SUCCESS)
{
INFO ("%s", memif_strerror (err));
if (err == MEMIF_ERR_NOCONN)
{
free (buf);
return;
}
}
printf ("\tinterface name: %s\n", (char *) md.if_name);
printf ("\tapp name: %s\n", (char *) md.inst_name);
printf ("\tremote interface name: %s\n", (char *) md.remote_if_name);
printf ("\tremote app name: %s\n", (char *) md.remote_inst_name);
printf ("\tid: %u\n", md.id);
printf ("\tsecret: %s\n", (char *) md.secret);
printf ("\trole: ");
if (md.role)
printf ("slave\n");
else
printf ("master\n");
printf ("\tmode: ");
switch (md.mode)
{
case 0:
printf ("ethernet\n");
break;
case 1:
printf ("ip\n");
break;
case 2:
printf ("punt/inject\n");
break;
default:
printf ("unknown\n");
break;
}
printf ("\tsocket path: %s\n", (char *) md.socket_path);
printf ("\trx queues:\n");
for (e = 0; e < md.rx_queues_num; e++)
{
printf ("\t\tqueue id: %u\n", md.rx_queues[e].qid);
printf ("\t\tring size: %u\n", md.rx_queues[e].ring_size);
printf ("\t\tbuffer size: %u\n", md.rx_queues[e].buffer_size);
}
printf ("\ttx queues:\n");
for (e = 0; e < md.tx_queues_num; e++)
{
printf ("\t\tqueue id: %u\n", md.tx_queues[e].qid);
printf ("\t\tring size: %u\n", md.tx_queues[e].ring_size);
printf ("\t\tbuffer size: %u\n", md.tx_queues[e].buffer_size);
}
printf ("\tlink: ");
if (md.link_up_down)
printf ("up\n");
else
printf ("down\n");
free (buf);
}