X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fsocket.c;h=bcee3dea9deb79016a8886b674dabc9e238c9600;hb=ad9d528;hp=87a9333f904baef6974da03b1b215fe7a42248fc;hpb=f49921f73f4e1f0b67823be445aafeb9ff2333a6;p=vpp.git diff --git a/src/vppinfra/socket.c b/src/vppinfra/socket.c index 87a9333f904..bcee3dea9de 100644 --- a/src/vppinfra/socket.c +++ b/src/vppinfra/socket.c @@ -73,7 +73,7 @@ find_free_port (word sock) { struct sockaddr_in a; - memset (&a, 0, sizeof (a)); /* Warnings be gone */ + clib_memset (&a, 0, sizeof (a)); /* Warnings be gone */ a.sin_family = PF_INET; a.sin_addr.s_addr = INADDR_ANY; @@ -278,7 +278,7 @@ default_socket_sendmsg (clib_socket_t * s, void *msg, int msglen, { struct msghdr mh = { 0 }; struct iovec iov[1]; - char ctl[CMSG_SPACE (sizeof (int)) * num_fds]; + char ctl[CMSG_SPACE (sizeof (int) * num_fds)]; int rv; iov[0].iov_base = msg; @@ -289,7 +289,7 @@ default_socket_sendmsg (clib_socket_t * s, void *msg, int msglen, if (num_fds > 0) { struct cmsghdr *cmsg; - memset (&ctl, 0, sizeof (ctl)); + clib_memset (&ctl, 0, sizeof (ctl)); mh.msg_control = ctl; mh.msg_controllen = sizeof (ctl); cmsg = CMSG_FIRSTHDR (&mh); @@ -309,12 +309,16 @@ static clib_error_t * default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen, int fds[], int num_fds) { +#ifdef __linux__ char ctl[CMSG_SPACE (sizeof (int) * num_fds) + CMSG_SPACE (sizeof (struct ucred))]; + struct ucred *cr = 0; +#else + char ctl[CMSG_SPACE (sizeof (int) * num_fds)]; +#endif struct msghdr mh = { 0 }; struct iovec iov[1]; ssize_t size; - struct ucred *cr = 0; struct cmsghdr *cmsg; iov[0].iov_base = msg; @@ -324,7 +328,7 @@ default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen, mh.msg_control = ctl; mh.msg_controllen = sizeof (ctl); - memset (ctl, 0, sizeof (ctl)); + clib_memset (ctl, 0, sizeof (ctl)); /* receive the incoming message */ size = recvmsg (s->fd, &mh, 0); @@ -340,6 +344,7 @@ default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen, { if (cmsg->cmsg_level == SOL_SOCKET) { +#ifdef __linux__ if (cmsg->cmsg_type == SCM_CREDENTIALS) { cr = (struct ucred *) CMSG_DATA (cmsg); @@ -347,9 +352,12 @@ default_socket_recvmsg (clib_socket_t * s, void *msg, int msglen, s->gid = cr->gid; s->pid = cr->pid; } - else if (cmsg->cmsg_type == SCM_RIGHTS) + else +#endif + if (cmsg->cmsg_type == SCM_RIGHTS) { - clib_memcpy (fds, CMSG_DATA (cmsg), num_fds * sizeof (int)); + clib_memcpy_fast (fds, CMSG_DATA (cmsg), + num_fds * sizeof (int)); } } cmsg = CMSG_NXTHDR (&mh, cmsg); @@ -436,6 +444,7 @@ clib_socket_init (clib_socket_t * s) clib_unix_warning ("setsockopt SO_REUSEADDR fails"); } +#if __linux__ if (addr.sa.sa_family == PF_LOCAL && s->flags & CLIB_SOCKET_F_PASSCRED) { int x = 1; @@ -447,6 +456,7 @@ clib_socket_init (clib_socket_t * s) goto done; } } +#endif if (need_bind && bind (s->fd, &addr.sa, addr_len) < 0) { @@ -516,7 +526,7 @@ clib_socket_accept (clib_socket_t * server, clib_socket_t * client) clib_error_t *err = 0; socklen_t len = 0; - memset (client, 0, sizeof (client[0])); + clib_memset (client, 0, sizeof (client[0])); /* Accept the new socket connection. */ client->fd = accept (server->fd, 0, 0);