X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Finet6.c;h=8c0d0b795c64ebf48f534427387443fbdcf2ba08;hb=aff3dd5c0a0de4be28db5ac7d1f8b03d5c867497;hp=03b6627d1dce45188d28d81d234cb2c208c062eb;hpb=2daf65025e0fe5c15179dc4bfb26f875e3d31a26;p=lttng-tools.git diff --git a/src/common/sessiond-comm/inet6.c b/src/common/sessiond-comm/inet6.c index 03b6627d1..8c0d0b795 100644 --- a/src/common/sessiond-comm/inet6.c +++ b/src/common/sessiond-comm/inet6.c @@ -1,22 +1,11 @@ /* - * Copyright (C) 2012 - David Goulet + * Copyright (C) 2012 David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _LGPL_SOURCE -#include #include #include #include @@ -24,13 +13,13 @@ #include #include #include -#include #include #include #include #include #include +#include #include "inet6.h" @@ -52,7 +41,6 @@ static const struct lttcomm_proto_ops inet6_ops = { /* * Creates an PF_INET socket. */ -LTTNG_HIDDEN int lttcomm_create_inet6_sock(struct lttcomm_sock *sock, int type, int proto) { int val = 1, ret; @@ -95,19 +83,17 @@ error: /* * Bind socket and return. */ -LTTNG_HIDDEN int lttcomm_bind_inet6_sock(struct lttcomm_sock *sock) { - return bind(sock->fd, - (const struct sockaddr *) &sock->sockaddr.addr.sin6, - sizeof(sock->sockaddr.addr.sin6)); + struct sockaddr_in6 sockaddr = sock->sockaddr.addr.sin6; + return bind(sock->fd, &sockaddr, sizeof(sockaddr)); } static int connect_no_timeout(struct lttcomm_sock *sock) { - return connect(sock->fd, (struct sockaddr *) &sock->sockaddr.addr.sin6, - sizeof(sock->sockaddr.addr.sin6)); + struct sockaddr_in6 sockaddr = sock->sockaddr.addr.sin6; + return connect(sock->fd, &sockaddr, sizeof(sockaddr)); } static @@ -117,6 +103,7 @@ int connect_with_timeout(struct lttcomm_sock *sock) int ret, flags, connect_ret; struct timespec orig_time, cur_time; unsigned long diff_ms; + struct sockaddr_in6 sockaddr; ret = fcntl(sock->fd, F_GETFL, 0); if (ret == -1) { @@ -138,12 +125,10 @@ int connect_with_timeout(struct lttcomm_sock *sock) return -1; } - connect_ret = connect(sock->fd, - (struct sockaddr *) &sock->sockaddr.addr.sin6, - sizeof(sock->sockaddr.addr.sin6)); - if (connect_ret == -1 && errno != EAGAIN - && errno != EWOULDBLOCK - && errno != EINPROGRESS) { + sockaddr = sock->sockaddr.addr.sin6; + connect_ret = connect(sock->fd, &sockaddr, sizeof(sockaddr)); + if (connect_ret == -1 && errno != EAGAIN && errno != EWOULDBLOCK && + errno != EINPROGRESS) { goto error; } else if (!connect_ret) { /* Connect succeeded */ @@ -223,7 +208,6 @@ error: /* * Connect PF_INET socket. */ -LTTNG_HIDDEN int lttcomm_connect_inet6_sock(struct lttcomm_sock *sock) { int ret, closeret; @@ -253,12 +237,12 @@ error_connect: * Do an accept(2) on the sock and return the new lttcomm socket. The socket * MUST be bind(2) before. */ -LTTNG_HIDDEN struct lttcomm_sock *lttcomm_accept_inet6_sock(struct lttcomm_sock *sock) { int new_fd; socklen_t len; struct lttcomm_sock *new_sock; + struct sockaddr_in6 new_addr = {}; if (sock->proto == LTTCOMM_SOCK_UDP) { /* @@ -273,16 +257,15 @@ struct lttcomm_sock *lttcomm_accept_inet6_sock(struct lttcomm_sock *sock) goto error; } - len = sizeof(new_sock->sockaddr.addr.sin6); + len = sizeof(new_addr); /* Blocking call */ - new_fd = accept(sock->fd, - (struct sockaddr *) &new_sock->sockaddr.addr.sin6, &len); + new_fd = accept(sock->fd, (struct sockaddr *) &new_addr, &len); if (new_fd < 0) { PERROR("accept inet6"); goto error; } - + new_sock->sockaddr.addr.sin6 = new_addr; new_sock->fd = new_fd; new_sock->ops = &inet6_ops; @@ -297,7 +280,6 @@ error: /* * Make the socket listen using LTTNG_SESSIOND_COMM_MAX_LISTEN. */ -LTTNG_HIDDEN int lttcomm_listen_inet6_sock(struct lttcomm_sock *sock, int backlog) { int ret; @@ -328,7 +310,6 @@ end: * * Return the size of received data. */ -LTTNG_HIDDEN ssize_t lttcomm_recvmsg_inet6_sock(struct lttcomm_sock *sock, void *buf, size_t len, int flags) { @@ -336,6 +317,7 @@ ssize_t lttcomm_recvmsg_inet6_sock(struct lttcomm_sock *sock, void *buf, struct iovec iov[1]; ssize_t ret = -1; size_t len_last; + struct sockaddr_in6 addr = sock->sockaddr.addr.sin6; memset(&msg, 0, sizeof(msg)); @@ -344,7 +326,7 @@ ssize_t lttcomm_recvmsg_inet6_sock(struct lttcomm_sock *sock, void *buf, msg.msg_iov = iov; msg.msg_iovlen = 1; - msg.msg_name = (struct sockaddr *) &sock->sockaddr.addr.sin6; + msg.msg_name = (struct sockaddr *) &addr; msg.msg_namelen = sizeof(sock->sockaddr.addr.sin6); do { @@ -356,7 +338,7 @@ ssize_t lttcomm_recvmsg_inet6_sock(struct lttcomm_sock *sock, void *buf, } iov[0].iov_base += ret; iov[0].iov_len -= ret; - assert(ret <= len_last); + LTTNG_ASSERT(ret <= len_last); } } while ((ret > 0 && ret < len_last) || (ret < 0 && errno == EINTR)); if (ret < 0) { @@ -374,7 +356,6 @@ end: * * Return the size of sent data. */ -LTTNG_HIDDEN ssize_t lttcomm_sendmsg_inet6_sock(struct lttcomm_sock *sock, const void *buf, size_t len, int flags) { @@ -391,9 +372,13 @@ ssize_t lttcomm_sendmsg_inet6_sock(struct lttcomm_sock *sock, const void *buf, switch (sock->proto) { case LTTCOMM_SOCK_UDP: - msg.msg_name = (struct sockaddr *) &sock->sockaddr.addr.sin6; + { + struct sockaddr_in6 addr = sock->sockaddr.addr.sin6; + + msg.msg_name = (struct sockaddr *) &addr; msg.msg_namelen = sizeof(sock->sockaddr.addr.sin6); break; + } default: break; } @@ -417,7 +402,6 @@ ssize_t lttcomm_sendmsg_inet6_sock(struct lttcomm_sock *sock, const void *buf, /* * Shutdown cleanly and close. */ -LTTNG_HIDDEN int lttcomm_close_inet6_sock(struct lttcomm_sock *sock) { int ret;