X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvlibmemory%2Fsocket_client.c;h=2fb6b8a0c4e9ac43c92f7e259f30ecfc99e40ccd;hp=5483110ae7666aa7af7e2e70e725c5fa8f650132;hb=36217e3ca;hpb=39d69112fcec114fde34955ceb41555221d3ba11 diff --git a/src/vlibmemory/socket_client.c b/src/vlibmemory/socket_client.c index 5483110ae76..2fb6b8a0c4e 100644 --- a/src/vlibmemory/socket_client.c +++ b/src/vlibmemory/socket_client.c @@ -19,6 +19,7 @@ #include #define __USE_GNU +#define _GNU_SOURCE #include #include @@ -260,10 +261,10 @@ vl_socket_client_enable_disable (int enable) vl_socket_client_enable_disable2 (socket_client_ctx, enable); } -clib_error_t * -vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait) +static clib_error_t * +vl_sock_api_recv_fd_msg_internal (socket_client_main_t * scm, int fds[], + int n_fds, u32 wait) { - socket_client_main_t *scm = socket_client_ctx; char msgbuf[16]; char ctl[CMSG_SPACE (sizeof (int) * n_fds) + CMSG_SPACE (sizeof (struct ucred))]; @@ -275,8 +276,11 @@ vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait) pid_t pid __attribute__ ((unused)); uid_t uid __attribute__ ((unused)); gid_t gid __attribute__ ((unused)); + int socket_fd; f64 timeout; + socket_fd = scm->client_socket.fd; + iov[0].iov_base = msgbuf; iov[0].iov_len = 5; mh.msg_iov = iov; @@ -324,6 +328,26 @@ vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait) return 0; } +clib_error_t * +vl_sock_api_recv_fd_msg (int socket_fd, int fds[], int n_fds, u32 wait) +{ + return vl_sock_api_recv_fd_msg_internal (socket_client_ctx, fds, n_fds, + wait); +} + +clib_error_t * +vl_sock_api_recv_fd_msg2 (socket_client_main_t * scm, int socket_fd, + int fds[], int n_fds, u32 wait) +{ + socket_client_main_t *old_ctx; + clib_error_t *error; + + old_ctx = vl_socket_client_ctx_push (scm); + error = vl_sock_api_recv_fd_msg_internal (scm, fds, n_fds, wait); + vl_socket_client_ctx_pop (old_ctx); + return error; +} + static void vl_api_sock_init_shm_reply_t_handler (vl_api_sock_init_shm_reply_t * mp) { @@ -356,7 +380,7 @@ static void vl_api_sock_init_shm_reply_t_handler memfd->fd = my_fd; /* Note: this closes memfd.fd */ - retval = ssvm_slave_init_memfd (memfd); + retval = ssvm_client_init_memfd (memfd); if (retval) clib_warning ("WARNING: segment map returned %d", retval); @@ -408,13 +432,12 @@ void vl_sock_client_install_message_handlers (void) { -#define _(N,n) \ - vl_msg_api_set_handlers(VL_API_##N, #n, \ - vl_api_##n##_t_handler, \ - noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); +#define _(N, n) \ + vl_msg_api_set_handlers (VL_API_##N, #n, vl_api_##n##_t_handler, \ + noop_handler, vl_api_##n##_t_endian, \ + vl_api_##n##_t_print, sizeof (vl_api_##n##_t), 0, \ + vl_api_##n##_t_print_json, vl_api_##n##_t_tojson, \ + vl_api_##n##_t_fromjson); foreach_sock_client_api_msg; #undef _ } @@ -438,7 +461,7 @@ vl_socket_client_connect_internal (socket_client_main_t * scm, sock = &scm->client_socket; sock->config = socket_path; - sock->flags = CLIB_SOCKET_F_IS_CLIENT | CLIB_SOCKET_F_NON_BLOCKING_CONNECT; + sock->flags = CLIB_SOCKET_F_IS_CLIENT; if ((error = clib_socket_init (sock))) { @@ -562,7 +585,7 @@ vl_socket_client_recv_fd_msg2 (socket_client_main_t * scm, int fds[], { if (!scm->socket_fd) return clib_error_return (0, "no socket"); - return vl_sock_api_recv_fd_msg (scm->client_socket.fd, fds, n_fds, wait); + return vl_sock_api_recv_fd_msg_internal (scm, fds, n_fds, wait); } clib_error_t *