Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
VOM logger levels fix
[vpp.git]
/
src
/
plugins
/
memif
/
memif.c
diff --git
a/src/plugins/memif/memif.c
b/src/plugins/memif/memif.c
index
ec67023
..
a3be49f
100644
(file)
--- a/
src/plugins/memif/memif.c
+++ b/
src/plugins/memif/memif.c
@@
-33,6
+33,7
@@
#include <vlib/vlib.h>
#include <vlib/unix/unix.h>
#include <vlib/vlib.h>
#include <vlib/unix/unix.h>
+#include <vppinfra/linux/syscall.h>
#include <vnet/plugin/plugin.h>
#include <vnet/ethernet/ethernet.h>
#include <vpp/app/version.h>
#include <vnet/plugin/plugin.h>
#include <vnet/ethernet/ethernet.h>
#include <vpp/app/version.h>
@@
-51,10
+52,10
@@
memif_eth_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi, u32 flags)
static void
memif_queue_intfd_close (memif_queue_t * mq)
{
static void
memif_queue_intfd_close (memif_queue_t * mq)
{
- if (mq->int_
unix
_file_index != ~0)
+ if (mq->int_
clib
_file_index != ~0)
{
{
- memif_file_del_by_index (mq->int_
unix
_file_index);
- mq->int_
unix
_file_index = ~0;
+ memif_file_del_by_index (mq->int_
clib
_file_index);
+ mq->int_
clib
_file_index = ~0;
mq->int_fd = -1;
}
else if (mq->int_fd > -1)
mq->int_fd = -1;
}
else if (mq->int_fd > -1)
@@
-93,13
+94,13
@@
memif_disconnect (memif_if_t * mif, clib_error_t * err)
vnet_hw_interface_set_flags (vnm, mif->hw_if_index, 0);
/* close connection socket */
vnet_hw_interface_set_flags (vnm, mif->hw_if_index, 0);
/* close connection socket */
- if (mif->conn_
unix
_file_index != ~0)
+ if (mif->conn_
clib
_file_index != ~0)
{
memif_socket_file_t *msf = vec_elt_at_index (mm->socket_files,
mif->socket_file_index);
hash_unset (msf->dev_instance_by_fd, mif->conn_fd);
{
memif_socket_file_t *msf = vec_elt_at_index (mm->socket_files,
mif->socket_file_index);
hash_unset (msf->dev_instance_by_fd, mif->conn_fd);
- memif_file_del_by_index (mif->conn_
unix
_file_index);
- mif->conn_
unix
_file_index = ~0;
+ memif_file_del_by_index (mif->conn_
clib
_file_index);
+ mif->conn_
clib
_file_index = ~0;
}
else if (mif->conn_fd > -1)
close (mif->conn_fd);
}
else if (mif->conn_fd > -1)
close (mif->conn_fd);
@@
-144,7
+145,7
@@
memif_disconnect (memif_if_t * mif, clib_error_t * err)
}
static clib_error_t *
}
static clib_error_t *
-memif_int_fd_read_ready (
unix
_file_t * uf)
+memif_int_fd_read_ready (
clib
_file_t * uf)
{
memif_main_t *mm = &memif_main;
vnet_main_t *vnm = vnet_get_main ();
{
memif_main_t *mm = &memif_main;
vnet_main_t *vnm = vnet_get_main ();
@@
-172,7
+173,7
@@
clib_error_t *
memif_connect (memif_if_t * mif)
{
vnet_main_t *vnm = vnet_get_main ();
memif_connect (memif_if_t * mif)
{
vnet_main_t *vnm = vnet_get_main ();
-
unix
_file_t template = { 0 };
+
clib
_file_t template = { 0 };
memif_region_t *mr;
int i;
memif_region_t *mr;
int i;
@@
-218,15
+219,23
@@
memif_connect (memif_if_t * mif)
{
template.file_descriptor = mq->int_fd;
template.private_data = (mif->dev_instance << 16) | (i & 0xFFFF);
{
template.file_descriptor = mq->int_fd;
template.private_data = (mif->dev_instance << 16) | (i & 0xFFFF);
- memif_file_add (&mq->int_
unix
_file_index, &template);
+ memif_file_add (&mq->int_
clib
_file_index, &template);
}
vnet_hw_interface_assign_rx_thread (vnm, mif->hw_if_index, i, ~0);
rv = vnet_hw_interface_set_rx_mode (vnm, mif->hw_if_index, i,
}
vnet_hw_interface_assign_rx_thread (vnm, mif->hw_if_index, i, ~0);
rv = vnet_hw_interface_set_rx_mode (vnm, mif->hw_if_index, i,
- VNET_HW_INTERFACE_RX_MODE_
INTERRUP
T);
+ VNET_HW_INTERFACE_RX_MODE_
DEFAUL
T);
if (rv)
clib_warning
("Warning: unable to set rx mode for interface %d queue %d: "
"rc=%d", mif->hw_if_index, i, rv);
if (rv)
clib_warning
("Warning: unable to set rx mode for interface %d queue %d: "
"rc=%d", mif->hw_if_index, i, rv);
+ else
+ {
+ vnet_hw_interface_rx_mode rxmode;
+ vnet_hw_interface_get_rx_mode (vnm, mif->hw_if_index, i, &rxmode);
+
+ if (rxmode == VNET_HW_INTERFACE_RX_MODE_POLLING)
+ mq->ring->flags |= MEMIF_RING_FLAG_MASK_INT;
+ }
}
mif->flags &= ~MEMIF_IF_FLAG_CONNECTING;
}
mif->flags &= ~MEMIF_IF_FLAG_CONNECTING;
@@
-258,6
+267,8
@@
memif_init_regions_and_queues (memif_if_t * mif)
int i, j;
u64 buffer_offset;
memif_region_t *r;
int i, j;
u64 buffer_offset;
memif_region_t *r;
+ clib_mem_vm_alloc_t alloc = { 0 };
+ clib_error_t *err;
vec_validate_aligned (mif->regions, 0, CLIB_CACHE_LINE_BYTES);
r = vec_elt_at_index (mif->regions, 0);
vec_validate_aligned (mif->regions, 0, CLIB_CACHE_LINE_BYTES);
r = vec_elt_at_index (mif->regions, 0);
@@
-270,18
+281,16
@@
memif_init_regions_and_queues (memif_if_t * mif)
mif->run.buffer_size * (1 << mif->run.log2_ring_size) *
(mif->run.num_s2m_rings + mif->run.num_m2s_rings);
mif->run.buffer_size * (1 << mif->run.log2_ring_size) *
(mif->run.num_s2m_rings + mif->run.num_m2s_rings);
- if ((r->fd = memfd_create ("memif region 0", MFD_ALLOW_SEALING)) == -1)
- return clib_error_return_unix (0, "memfd_create");
+ alloc.name = "memif region";
+ alloc.size = r->region_size;
+ alloc.flags = CLIB_MEM_VM_F_SHARED;
- if ((fcntl (r->fd, F_ADD_SEALS, F_SEAL_SHRINK)) == -1)
- return clib_error_return_unix (0, "fcntl (F_ADD_SEALS, F_SEAL_SHRINK)");
-
- if ((ftruncate (r->fd, r->region_size)) == -1)
- return clib_error_return_unix (0, "ftruncate");
+ err = clib_mem_vm_ext_alloc (&alloc);
+ if (err)
+ return err;
- if ((r->shm = mmap (NULL, r->region_size, PROT_READ | PROT_WRITE,
- MAP_SHARED, r->fd, 0)) == MAP_FAILED)
- return clib_error_return_unix (0, "mmap");
+ r->fd = alloc.fd;
+ r->shm = alloc.addr;
for (i = 0; i < mif->run.num_s2m_rings; i++)
{
for (i = 0; i < mif->run.num_s2m_rings; i++)
{
@@
-321,7
+330,7
@@
memif_init_regions_and_queues (memif_if_t * mif)
memif_queue_t *mq = vec_elt_at_index (mif->tx_queues, i);
if ((mq->int_fd = eventfd (0, EFD_NONBLOCK)) < 0)
return clib_error_return_unix (0, "eventfd[tx queue %u]", i);
memif_queue_t *mq = vec_elt_at_index (mif->tx_queues, i);
if ((mq->int_fd = eventfd (0, EFD_NONBLOCK)) < 0)
return clib_error_return_unix (0, "eventfd[tx queue %u]", i);
- mq->int_
unix
_file_index = ~0;
+ mq->int_
clib
_file_index = ~0;
mq->ring = memif_get_ring (mif, MEMIF_RING_S2M, i);
mq->log2_ring_size = mif->cfg.log2_ring_size;
mq->region = 0;
mq->ring = memif_get_ring (mif, MEMIF_RING_S2M, i);
mq->log2_ring_size = mif->cfg.log2_ring_size;
mq->region = 0;
@@
-337,7
+346,7
@@
memif_init_regions_and_queues (memif_if_t * mif)
memif_queue_t *mq = vec_elt_at_index (mif->rx_queues, i);
if ((mq->int_fd = eventfd (0, EFD_NONBLOCK)) < 0)
return clib_error_return_unix (0, "eventfd[rx queue %u]", i);
memif_queue_t *mq = vec_elt_at_index (mif->rx_queues, i);
if ((mq->int_fd = eventfd (0, EFD_NONBLOCK)) < 0)
return clib_error_return_unix (0, "eventfd[rx queue %u]", i);
- mq->int_
unix
_file_index = ~0;
+ mq->int_
clib
_file_index = ~0;
mq->ring = memif_get_ring (mif, MEMIF_RING_M2S, i);
mq->log2_ring_size = mif->cfg.log2_ring_size;
mq->region = 0;
mq->ring = memif_get_ring (mif, MEMIF_RING_M2S, i);
mq->log2_ring_size = mif->cfg.log2_ring_size;
mq->region = 0;
@@
-423,7
+432,7
@@
memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
(sockfd, (struct sockaddr *) &sun,
sizeof (struct sockaddr_un)) == 0)
{
(sockfd, (struct sockaddr *) &sun,
sizeof (struct sockaddr_un)) == 0)
{
-
unix
_file_t t = { 0 };
+
clib
_file_t t = { 0 };
mif->conn_fd = sockfd;
t.read_function = memif_slave_conn_fd_read_ready;
mif->conn_fd = sockfd;
t.read_function = memif_slave_conn_fd_read_ready;
@@
-431,7
+440,7
@@
memif_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f)
t.error_function = memif_slave_conn_fd_error;
t.file_descriptor = mif->conn_fd;
t.private_data = mif->dev_instance;
t.error_function = memif_slave_conn_fd_error;
t.file_descriptor = mif->conn_fd;
t.private_data = mif->dev_instance;
- memif_file_add (&mif->conn_
unix
_file_index, &t);
+ memif_file_add (&mif->conn_
clib
_file_index, &t);
hash_set (msf->dev_instance_by_fd, mif->conn_fd, mif->dev_instance);
mif->flags |= MEMIF_IF_FLAG_CONNECTING;
hash_set (msf->dev_instance_by_fd, mif->conn_fd, mif->dev_instance);
mif->flags |= MEMIF_IF_FLAG_CONNECTING;
@@
-498,7
+507,7
@@
memif_delete_if (vlib_main_t * vm, memif_if_t * mif)
if (msf->is_listener)
{
uword *x;
if (msf->is_listener)
{
uword *x;
- memif_file_del_by_index (msf->
unix
_file_index);
+ memif_file_del_by_index (msf->
clib
_file_index);
vec_foreach (x, msf->pending_file_indices)
{
memif_file_del_by_index (*x);
vec_foreach (x, msf->pending_file_indices)
{
memif_file_del_by_index (*x);
@@
-548,15
+557,19
@@
memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
if (args->socket_filename == 0 || args->socket_filename[0] != '/')
{
if (args->socket_filename == 0 || args->socket_filename[0] != '/')
{
- rv = mkdir (MEMIF_DEFAULT_SOCKET_DIR, 0755);
- if (rv && errno != EEXIST)
- return VNET_API_ERROR_SYSCALL_ERROR_1;
+ clib_error_t *error;
+ error = vlib_unix_recursive_mkdir (vlib_unix_get_runtime_dir ());
+ if (error)
+ {
+ clib_error_free (error);
+ return VNET_API_ERROR_SYSCALL_ERROR_1;
+ }
if (args->socket_filename == 0)
if (args->socket_filename == 0)
- socket_filename = format (0, "%s/%s%c",
MEMIF_DEFAULT_SOCKET_DIR
,
+ socket_filename = format (0, "%s/%s%c",
vlib_unix_get_runtime_dir ()
,
MEMIF_DEFAULT_SOCKET_FILENAME, 0);
else
MEMIF_DEFAULT_SOCKET_FILENAME, 0);
else
- socket_filename = format (0, "%s/%s%c",
MEMIF_DEFAULT_SOCKET_DIR
,
+ socket_filename = format (0, "%s/%s%c",
vlib_unix_get_runtime_dir ()
,
args->socket_filename, 0);
}
args->socket_filename, 0);
}
@@
-599,8
+612,11
@@
memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
}
else
{
}
else
{
- ret = VNET_API_ERROR_SYSCALL_ERROR_3;
- goto error;
+ error = clib_error_return (0, "File exists for %s",
+ socket_filename);
+ clib_error_report (error);
+ rv = VNET_API_ERROR_VALUE_EXIST;
+ goto done;
}
}
pool_get (mm->socket_files, msf);
}
}
pool_get (mm->socket_files, msf);
@@
-623,7
+639,7
@@
memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
mif->socket_file_index = msf - mm->socket_files;
mif->id = args->id;
mif->sw_if_index = mif->hw_if_index = mif->per_interface_next_index = ~0;
mif->socket_file_index = msf - mm->socket_files;
mif->id = args->id;
mif->sw_if_index = mif->hw_if_index = mif->per_interface_next_index = ~0;
- mif->conn_
unix
_file_index = ~0;
+ mif->conn_
clib
_file_index = ~0;
mif->conn_fd = -1;
mif->mode = args->mode;
if (args->secret)
mif->conn_fd = -1;
mif->mode = args->mode;
if (args->secret)
@@
-721,12
+737,12
@@
memif_create_if (vlib_main_t * vm, memif_create_if_args_t * args)
goto error;
}
goto error;
}
- msf->
unix
_file_index = ~0;
-
unix
_file_t template = { 0 };
+ msf->
clib
_file_index = ~0;
+
clib
_file_t template = { 0 };
template.read_function = memif_conn_fd_accept_ready;
template.file_descriptor = msf->fd;
template.private_data = mif->socket_file_index;
template.read_function = memif_conn_fd_accept_ready;
template.file_descriptor = msf->fd;
template.private_data = mif->socket_file_index;
- memif_file_add (&msf->
unix
_file_index, &template);
+ memif_file_add (&msf->
clib
_file_index, &template);
}
msf->ref_cnt++;
}
msf->ref_cnt++;