Skip to content

Commit

Permalink
samples: net: echo_client: Fix build warning with IPv6 disabled
Browse files Browse the repository at this point in the history
Building the sample with IPv4 only gives the following warning:

tcp.c:99:37: warning: array subscript 'struct sockaddr[0]' is partly
outside array bounds of 'struct sockaddr_in[1]' [-Warray-bounds]
  data->tcp.sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);

This doesn't really seem like a valid one, but to get rid of it
workaround by specifying address family explicitly.

Signed-off-by: Robert Lubos <[email protected]>
  • Loading branch information
rlubos committed Oct 3, 2024
1 parent 91e0a49 commit ff5fe19
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 16 deletions.
19 changes: 10 additions & 9 deletions samples/net/sockets/echo_client/src/tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,16 @@ static int compare_tcp_data(struct data *data, const char *buf, uint32_t receive
return 0;
}

static int start_tcp_proto(struct data *data, struct sockaddr *addr,
socklen_t addrlen)
static int start_tcp_proto(struct data *data, sa_family_t family,
struct sockaddr *addr, socklen_t addrlen)
{
int optval;
int ret;

#if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS)
data->tcp.sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TLS_1_2);
data->tcp.sock = socket(family, SOCK_STREAM, IPPROTO_TLS_1_2);
#else
data->tcp.sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
data->tcp.sock = socket(family, SOCK_STREAM, IPPROTO_TCP);
#endif
if (data->tcp.sock < 0) {
LOG_ERR("Failed to create TCP socket (%s): %d", data->proto,
Expand All @@ -108,7 +108,7 @@ static int start_tcp_proto(struct data *data, struct sockaddr *addr,
struct sockaddr proxy_addr;
socklen_t proxy_addrlen;

if (addr->sa_family == AF_INET) {
if (family == AF_INET) {
struct sockaddr_in *proxy4 =
(struct sockaddr_in *)&proxy_addr;

Expand All @@ -117,7 +117,7 @@ static int start_tcp_proto(struct data *data, struct sockaddr *addr,
inet_pton(AF_INET, SOCKS5_PROXY_V4_ADDR,
&proxy4->sin_addr);
proxy_addrlen = sizeof(struct sockaddr_in);
} else if (addr->sa_family == AF_INET6) {
} else if (family == AF_INET6) {
struct sockaddr_in6 *proxy6 =
(struct sockaddr_in6 *)&proxy_addr;

Expand Down Expand Up @@ -163,7 +163,7 @@ static int start_tcp_proto(struct data *data, struct sockaddr *addr,
#endif

/* Prefer IPv6 temporary addresses */
if (addr->sa_family == AF_INET6) {
if (family == AF_INET6) {
optval = IPV6_PREFER_SRC_TMP;
(void)setsockopt(data->tcp.sock, IPPROTO_IPV6,
IPV6_ADDR_PREFERENCES,
Expand Down Expand Up @@ -242,7 +242,7 @@ int start_tcp(void)
inet_pton(AF_INET6, CONFIG_NET_CONFIG_PEER_IPV6_ADDR,
&addr6.sin6_addr);

ret = start_tcp_proto(&conf.ipv6,
ret = start_tcp_proto(&conf.ipv6, AF_INET6,
(struct sockaddr *)&addr6,
sizeof(addr6));
if (ret < 0) {
Expand All @@ -256,7 +256,8 @@ int start_tcp(void)
inet_pton(AF_INET, CONFIG_NET_CONFIG_PEER_IPV4_ADDR,
&addr4.sin_addr);

ret = start_tcp_proto(&conf.ipv4, (struct sockaddr *)&addr4,
ret = start_tcp_proto(&conf.ipv4, AF_INET,
(struct sockaddr *)&addr4,
sizeof(addr4));
if (ret < 0) {
return ret;
Expand Down
15 changes: 8 additions & 7 deletions samples/net/sockets/echo_client/src/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,16 +190,16 @@ static void wait_transmit(struct k_timer *timer)
k_poll_signal_raise(&ctrl->tx_signal, 0);
}

static int start_udp_proto(struct data *data, struct sockaddr *addr,
socklen_t addrlen)
static int start_udp_proto(struct data *data, sa_family_t family,
struct sockaddr *addr, socklen_t addrlen)
{
int optval;
int ret;

#if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS)
data->udp.sock = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_DTLS_1_2);
data->udp.sock = socket(family, SOCK_DGRAM, IPPROTO_DTLS_1_2);
#else
data->udp.sock = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
data->udp.sock = socket(family, SOCK_DGRAM, IPPROTO_UDP);
#endif
if (data->udp.sock < 0) {
LOG_ERR("Failed to create UDP socket (%s): %d", data->proto,
Expand Down Expand Up @@ -233,7 +233,7 @@ static int start_udp_proto(struct data *data, struct sockaddr *addr,
#endif

/* Prefer IPv6 temporary addresses */
if (addr->sa_family == AF_INET6) {
if (family == AF_INET6) {
optval = IPV6_PREFER_SRC_TMP;
(void)setsockopt(data->udp.sock, IPPROTO_IPV6,
IPV6_ADDR_PREFERENCES,
Expand Down Expand Up @@ -312,7 +312,7 @@ int start_udp(void)
inet_pton(AF_INET6, CONFIG_NET_CONFIG_PEER_IPV6_ADDR,
&addr6.sin6_addr);

ret = start_udp_proto(&conf.ipv6,
ret = start_udp_proto(&conf.ipv6, AF_INET6,
(struct sockaddr *)&addr6,
sizeof(addr6));
if (ret < 0) {
Expand All @@ -326,7 +326,8 @@ int start_udp(void)
inet_pton(AF_INET, CONFIG_NET_CONFIG_PEER_IPV4_ADDR,
&addr4.sin_addr);

ret = start_udp_proto(&conf.ipv4, (struct sockaddr *)&addr4,
ret = start_udp_proto(&conf.ipv4, AF_INET,
(struct sockaddr *)&addr4,
sizeof(addr4));
if (ret < 0) {
return ret;
Expand Down

0 comments on commit ff5fe19

Please sign in to comment.