aboutsummaryrefslogtreecommitdiffstats
path: root/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c')
-rw-r--r--vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c b/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c
index 42dff9b..ba8a489 100644
--- a/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c
+++ b/vcl-ldpreload/src/libvcl-ldpreload/vcom_socket.c
@@ -46,6 +46,7 @@ typedef struct vcom_socket_main_t_
/* Hash table for epollidx to epfd mapping */
uword *epollidx_by_epfd;
+
/* common epitem poll for all epfd */
/* TBD: epitem poll per epfd */
/* vcom_epitem pool */
@@ -54,6 +55,11 @@ typedef struct vcom_socket_main_t_
/* Hash table for epitemidx to epfdfd mapping */
uword *epollidx_by_epfdfd;
+ /* Hash table - key:epfd, value:vec of epitemidx */
+ uword *epitemidxs_by_epfd;
+ /* Hash table - key:fd, value:vec of epitemidx */
+ uword *epitemidxs_by_fd;
+
} vcom_socket_main_t;
vcom_socket_main_t vcom_socket_main;
@@ -165,6 +171,10 @@ vcom_socket_main_init (void)
pool_alloc (vsm->vepolls, FD_SETSIZE);
vsm->epollidx_by_epfd = hash_create (0, sizeof (i32));
+ pool_alloc (vsm->vepitems, FD_SETSIZE);
+ vsm->epitemidxs_by_epfd = hash_create (0, sizeof (uword *));
+ vsm->epitemidxs_by_fd = hash_create (0, sizeof (uword *));
+
vsm->init = 1;
}
@@ -248,6 +258,7 @@ vcom_socket_main_destroy (void)
pool_free (vsm->vepolls);
hash_free (vsm->epollidx_by_epfd);
+
vsm->init = 0;
}
}
@@ -259,11 +270,11 @@ vcom_socket_main_show (void)
vcom_socket_t *vsock;
vcom_epoll_t *vepoll;
+ vcom_epitem_t *vepitem;
if (vsm->init)
{
- /* from active list of vsockets,
- * close socket and vppcom session */
+ /* from active list of vsockets show vsock */
/* *INDENT-OFF* */
pool_foreach (vsock, vsm->vsockets,
@@ -275,8 +286,7 @@ vcom_socket_main_show (void)
}));
/* *INDENT-ON* */
- /* from active list of vepolls,
- * close epoll and vppcom session */
+ /* from active list of vepolls, show vepoll */
/* *INDENT-OFF* */
pool_foreach (vepoll, vsm->vepolls,
@@ -290,6 +300,23 @@ vcom_socket_main_show (void)
vepoll->flags, vepoll->count, vepoll->close);
}));
/* *INDENT-ON* */
+
+ /* from active list of vepitems, show vepitem */
+
+ /* *INDENT-OFF* */
+ pool_foreach (vepitem, vsm->vepitems,
+ ({
+ printf(
+ "epfd='%04d', fd='%04d', "
+ "next_fd='%04d', prev_fd='%04d', "
+ "type='%-30s', "
+ "events='%04x', revents='%04x'\n",
+ vepitem->epfd, vepitem->fd,
+ vepitem->next_fd, vepitem->prev_fd,
+ vcom_socket_vcom_fd_type_str (vepitem->type),
+ vepitem->event.events, vepitem->revent.events);
+ }));
+ /* *INDENT-ON* */
}
}
@@ -2246,6 +2273,7 @@ vcom_socket_epoll_create1 (int __flags)
vepoll_set (vepoll, epfd, vep_idx,
EPOLL_TYPE_VPPCOM_BOUND, __flags, 0, 0);
+
return epfd;
out_close_epoll: