The branch, master has been updated via 442ac15 swrap: Fix whitespace errors. via 98dda4f swrap: Update copyright notice. via e3f7e8c swrap: Wrap fopen to detect stale file descriptors. via 9694d99 swrap: Use swrap_address in swrap_accept(). via 3f53182 swrap: Remove unused sockaddr_dup() function. via eedb8e7 swrap: Use swrap_address in the socket_info struct. via bb76c42 swrap: Use a sockaddr_un for the unix path in socket_info. via 2b587c8 swrap: Rename swrap_pcap_dump_packet(). via 7942896 swrap: Rename swrap_pcap_get_fd(). via d094f2c swrap: Rename swrap_marshall_packet(). via 016569e swrap: Rename swrap_packet_init(). via 8af84a5 swrap: Rename socket_wrapper_pcap_file(). via 29ea9ce echo_srv: Fix type punning warnings. via 0c921aa tests: Fix type punning warnings. via fa6fee0 swrap: Fix type punning warnings. via 6637a81 cmake: Set strict aliasing and strict overflow checks. from c83b7d4 Add #define __APPLE_USE_RFC_3542 to CFLAGS
http://gitweb.samba.org/?p=socket_wrapper.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 442ac150e96595ba4025f9f508ce25b9d8a62b23 Author: Andreas Schneider <a...@samba.org> Date: Mon Sep 1 09:17:06 2014 +0200 swrap: Fix whitespace errors. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 98dda4f6d01ebea315a7a3d335ae26064394bcf0 Author: Andreas Schneider <a...@samba.org> Date: Fri Aug 29 13:12:58 2014 +0200 swrap: Update copyright notice. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit e3f7e8ce9158420379fbba3164c05bd845708c60 Author: Andreas Schneider <a...@samba.org> Date: Wed Aug 27 16:00:43 2014 +0200 swrap: Wrap fopen to detect stale file descriptors. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 9694d9924f3f7e88852936a8a27101986bb47223 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 15:14:56 2014 +0200 swrap: Use swrap_address in swrap_accept(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 3f531827c0223be4a88ae8c09b4361c2c59a2769 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 15:15:38 2014 +0200 swrap: Remove unused sockaddr_dup() function. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit eedb8e72cf898d623dc93f881878ca2fcbbb7402 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 14:56:35 2014 +0200 swrap: Use swrap_address in the socket_info struct. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit bb76c424e29b17398c342cf64cadfe96ced7b997 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 14:06:05 2014 +0200 swrap: Use a sockaddr_un for the unix path in socket_info. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 2b587c81f8e29118206a40a20422d0f08f61da5c Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 11:01:46 2014 +0200 swrap: Rename swrap_pcap_dump_packet(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 7942896ce6bd0ad7a169aea5cba062f50727d265 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 10:59:29 2014 +0200 swrap: Rename swrap_pcap_get_fd(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit d094f2c18684755bb204bb29d74dc0fe6256fa81 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 10:58:48 2014 +0200 swrap: Rename swrap_marshall_packet(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 016569e151f8a7d238f2b3401aac80fbc78d2b87 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 10:57:36 2014 +0200 swrap: Rename swrap_packet_init(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 8af84a5b318e419dcd2ebfd4020d5792424a7240 Author: Andreas Schneider <a...@samba.org> Date: Wed May 21 10:55:48 2014 +0200 swrap: Rename socket_wrapper_pcap_file(). Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 29ea9ce132d2dca6b6de10b3d740b3ce38bccb55 Author: Andreas Schneider <a...@samba.org> Date: Fri Aug 29 17:37:51 2014 +0200 echo_srv: Fix type punning warnings. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 0c921aa3129a5b1b0ff9c7fae2c0b2ca6bde7510 Author: Andreas Schneider <a...@samba.org> Date: Fri Aug 29 10:33:16 2014 +0200 tests: Fix type punning warnings. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit fa6fee05250c844eb0e00ee47b87ea2e5cd383bf Author: Andreas Schneider <a...@samba.org> Date: Fri Aug 29 10:25:51 2014 +0200 swrap: Fix type punning warnings. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> commit 6637a810c7548bcea3fdaa88d4ffe2ed612bcf7a Author: Andreas Schneider <a...@samba.org> Date: Thu Aug 28 15:22:35 2014 +0200 cmake: Set strict aliasing and strict overflow checks. Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Stefan Metzmacher <me...@samba.org> ----------------------------------------------------------------------- Summary of changes: cmake/Modules/DefineCompilerFlags.cmake | 4 + src/socket_wrapper.c | 659 +++++++++++++++++------------- tests/CMakeLists.txt | 1 + tests/echo_srv.c | 178 ++++---- tests/test_echo_tcp_bind.c | 163 +++++--- tests/test_echo_tcp_connect.c | 30 +- tests/test_echo_tcp_get_peer_sock_name.c | 370 ++++++++++------- tests/test_echo_tcp_socket.c | 20 +- tests/test_echo_tcp_socket_options.c | 48 ++-- tests/test_echo_tcp_write_read.c | 30 +- tests/test_echo_tcp_writev_readv.c | 32 +- tests/test_echo_udp_send_recv.c | 28 +- tests/test_echo_udp_sendmsg_recvmsg.c | 54 ++-- tests/test_echo_udp_sendto_recvfrom.c | 62 ++-- tests/torture.h | 17 + 15 files changed, 942 insertions(+), 754 deletions(-) Changeset truncated at 500 lines: diff --git a/cmake/Modules/DefineCompilerFlags.cmake b/cmake/Modules/DefineCompilerFlags.cmake index 4a747d2..53481c3 100644 --- a/cmake/Modules/DefineCompilerFlags.cmake +++ b/cmake/Modules/DefineCompilerFlags.cmake @@ -15,10 +15,14 @@ if (UNIX AND NOT WIN32) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute -Wcast-align -Wcast-qual") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=pointer-arith -Werror=declaration-after-statement") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration -Werror=write-strings") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast") + # -Werror=strict-aliasing is broken + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing -Wstrict-aliasing=2") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-overflow -Wstrict-overflow=5 -Werror=strict-overflow") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE") if (OSX) diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 930ab58..1b3352b 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -1,7 +1,7 @@ /* - * Copyright (C) Jelmer Vernooij 2005,2008 <jel...@samba.org> - * Copyright (C) Stefan Metzmacher 2006-2009 <me...@samba.org> - * Copyright (C) Andreas Schneider 2013 <a...@samba.org> + * Copyright (c) 2005-2008 Jelmer Vernooij <jel...@samba.org> + * Copyright (C) 2006-2014 Stefan Metzmacher <me...@samba.org> + * Copyright (C) 2013-2014 Andreas Schneider <a...@samba.org> * * All rights reserved. * @@ -210,6 +210,19 @@ enum swrap_dbglvl_e { * without changing the format above */ #define MAX_WRAPPED_INTERFACES 40 +struct swrap_address { + socklen_t sa_socklen; + union { + struct sockaddr s; + struct sockaddr_in in; +#ifdef HAVE_IPV6 + struct sockaddr_in6 in6; +#endif + struct sockaddr_un un; + struct sockaddr_storage ss; + } sa; +}; + struct socket_info_fd { struct socket_info_fd *prev, *next; int fd; @@ -229,16 +242,12 @@ struct socket_info int defer_connect; int pktinfo; - char *tmp_path; - - struct sockaddr *bindname; - socklen_t bindname_len; - - struct sockaddr *myname; - socklen_t myname_len; + /* The unix path so we can unlink it on close() */ + struct sockaddr_un un_addr; - struct sockaddr *peername; - socklen_t peername_len; + struct swrap_address bindname; + struct swrap_address myname; + struct swrap_address peername; struct { unsigned long pck_snd; @@ -328,6 +337,7 @@ struct swrap_libc_fns { socklen_t addrlen); int (*libc_dup)(int fd); int (*libc_dup2)(int oldfd, int newfd); + FILE *(*libc_fopen)(const char *name, const char *mode); #ifdef HAVE_EVENTFD int (*libc_eventfd)(int count, int flags); #endif @@ -636,6 +646,13 @@ static int libc_listen(int sockfd, int backlog) return swrap.fns.libc_listen(sockfd, backlog); } +static FILE *libc_fopen(const char *name, const char *mode) +{ + swrap_load_lib_function(SWRAP_LIBC, fopen); + + return swrap.fns.libc_fopen(name, mode); +} + static int libc_vopen(const char *pathname, int flags, va_list ap) { long int mode = 0; @@ -813,22 +830,15 @@ static const struct in6_addr *swrap_ipv6(void) } #endif -static struct sockaddr *sockaddr_dup(const void *data, socklen_t len) -{ - struct sockaddr *ret = (struct sockaddr *)malloc(len); - memcpy(ret, data, len); - return ret; -} - -static void set_port(int family, int prt, struct sockaddr *addr) +static void set_port(int family, int prt, struct swrap_address *addr) { switch (family) { case AF_INET: - ((struct sockaddr_in *)addr)->sin_port = htons(prt); + addr->sa.in.sin_port = htons(prt); break; #ifdef HAVE_IPV6 case AF_INET6: - ((struct sockaddr_in6 *)addr)->sin6_port = htons(prt); + addr->sa.in6.sin6_port = htons(prt); break; #endif } @@ -970,7 +980,7 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i switch (inaddr->sa_family) { case AF_INET: { - const struct sockaddr_in *in = + const struct sockaddr_in *in = (const struct sockaddr_in *)(const void *)inaddr; unsigned int addr = ntohl(in->sin_addr.s_addr); char u_type = '\0'; @@ -1017,7 +1027,7 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i } #ifdef HAVE_IPV6 case AF_INET6: { - const struct sockaddr_in6 *in = + const struct sockaddr_in6 *in = (const struct sockaddr_in6 *)(const void *)inaddr; struct in6_addr cmp1, cmp2; @@ -1064,14 +1074,14 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i } if (is_bcast) { - snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL", + snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL", socket_wrapper_dir()); SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path); /* the caller need to do more processing */ return 0; } - snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, socket_wrapper_dir(), type, iface, prt); SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path); @@ -1091,7 +1101,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in switch (si->family) { case AF_INET: { - const struct sockaddr_in *in = + const struct sockaddr_in *in = (const struct sockaddr_in *)(const void *)inaddr; unsigned int addr = ntohl(in->sin_addr.s_addr); char u_type = '\0'; @@ -1144,7 +1154,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in } /* Store the bind address for connect() */ - if (si->bindname == NULL) { + if (si->bindname.sa_socklen == 0) { struct sockaddr_in bind_in; socklen_t blen = sizeof(struct sockaddr_in); @@ -1153,15 +1163,15 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in bind_in.sin_port = in->sin_port; bind_in.sin_addr.s_addr = htonl(0x7F000000 | iface); - si->bindname = sockaddr_dup(&bind_in, blen); - si->bindname_len = blen; + si->bindname.sa_socklen = blen; + memcpy(&si->bindname.sa.in, &bind_in, blen); } break; } #ifdef HAVE_IPV6 case AF_INET6: { - const struct sockaddr_in6 *in = + const struct sockaddr_in6 *in = (const struct sockaddr_in6 *)(const void *)inaddr; struct in6_addr cmp1, cmp2; @@ -1195,7 +1205,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in } /* Store the bind address for connect() */ - if (si->bindname == NULL) { + if (si->bindname.sa_socklen == 0) { struct sockaddr_in6 bind_in; socklen_t blen = sizeof(struct sockaddr_in6); @@ -1206,8 +1216,8 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in bind_in.sin6_addr = *swrap_ipv6(); bind_in.sin6_addr.s6_addr[15] = iface; - si->bindname = sockaddr_dup(&bind_in, blen); - si->bindname_len = blen; + memcpy(&si->bindname.sa.in6, &bind_in, blen); + si->bindname.sa_socklen = blen; } break; @@ -1230,12 +1240,12 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in if (prt == 0) { /* handle auto-allocation of ephemeral ports */ for (prt = 5001; prt < 10000; prt++) { - snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, socket_wrapper_dir(), type, iface, prt); if (stat(un->sun_path, &st) == 0) continue; - set_port(si->family, prt, si->myname); - set_port(si->family, prt, si->bindname); + set_port(si->family, prt, &si->myname); + set_port(si->family, prt, &si->bindname); break; } @@ -1245,7 +1255,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in } } - snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, + snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, socket_wrapper_dir(), type, iface, prt); SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path); return 0; @@ -1440,8 +1450,8 @@ static int sockaddr_convert_to_un(struct socket_info *si, return -1; } -static int sockaddr_convert_from_un(const struct socket_info *si, - const struct sockaddr_un *in_addr, +static int sockaddr_convert_from_un(const struct socket_info *si, + const struct sockaddr_un *in_addr, socklen_t un_addrlen, int family, struct sockaddr *out_addr, @@ -1449,7 +1459,7 @@ static int sockaddr_convert_from_un(const struct socket_info *si, { int ret; - if (out_addr == NULL || out_addrlen == NULL) + if (out_addr == NULL || out_addrlen == NULL) return 0; if (un_addrlen == 0) { @@ -1597,7 +1607,7 @@ union swrap_packet_payload { SWRAP_PACKET_IP_SIZE + \ SWRAP_PACKET_PAYLOAD_SIZE) -static const char *socket_wrapper_pcap_file(void) +static const char *swrap_pcap_init_file(void) { static int initialized = 0; static const char *s = NULL; @@ -1614,7 +1624,7 @@ static const char *socket_wrapper_pcap_file(void) /* * TODO: don't use the structs use plain buffer offsets * and PUSH_U8(), PUSH_U16() and PUSH_U32() - * + * * for now make sure we disable PCAP support * if the struct has alignment! */ @@ -1659,17 +1669,17 @@ static const char *socket_wrapper_pcap_file(void) return s; } -static uint8_t *swrap_packet_init(struct timeval *tval, - const struct sockaddr *src, - const struct sockaddr *dest, - int socket_type, - const uint8_t *payload, - size_t payload_len, - unsigned long tcp_seqno, - unsigned long tcp_ack, - unsigned char tcp_ctl, - int unreachable, - size_t *_packet_len) +static uint8_t *swrap_pcap_packet_init(struct timeval *tval, + const struct sockaddr *src, + const struct sockaddr *dest, + int socket_type, + const uint8_t *payload, + size_t payload_len, + unsigned long tcp_seqno, + unsigned long tcp_ack, + unsigned char tcp_ctl, + int unreachable, + size_t *_packet_len) { uint8_t *base; uint8_t *buf; @@ -1893,7 +1903,7 @@ static uint8_t *swrap_packet_init(struct timeval *tval, return base; } -static int swrap_get_pcap_fd(const char *fname) +static int swrap_pcap_get_fd(const char *fname) { static int fd = -1; @@ -1922,11 +1932,11 @@ static int swrap_get_pcap_fd(const char *fname) return fd; } -static uint8_t *swrap_marshall_packet(struct socket_info *si, - const struct sockaddr *addr, - enum swrap_packet_type type, - const void *buf, size_t len, - size_t *packet_len) +static uint8_t *swrap_pcap_marshall_packet(struct socket_info *si, + const struct sockaddr *addr, + enum swrap_packet_type type, + const void *buf, size_t len, + size_t *packet_len) { const struct sockaddr *src_addr; const struct sockaddr *dest_addr; @@ -1952,7 +1962,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_CONNECT_SEND: if (si->type != SOCK_STREAM) return NULL; - src_addr = si->myname; + src_addr = &si->myname.sa.s; dest_addr = addr; tcp_seqno = si->io.pck_snd; @@ -1966,7 +1976,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_CONNECT_RECV: if (si->type != SOCK_STREAM) return NULL; - dest_addr = si->myname; + dest_addr = &si->myname.sa.s; src_addr = addr; tcp_seqno = si->io.pck_rcv; @@ -1980,8 +1990,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_CONNECT_UNREACH: if (si->type != SOCK_STREAM) return NULL; - dest_addr = si->myname; - src_addr = addr; + dest_addr = &si->myname.sa.s; + src_addr = addr; /* Unreachable: resend the data of SWRAP_CONNECT_SEND */ tcp_seqno = si->io.pck_snd - 1; @@ -1994,7 +2004,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_CONNECT_ACK: if (si->type != SOCK_STREAM) return NULL; - src_addr = si->myname; + src_addr = &si->myname.sa.s; dest_addr = addr; tcp_seqno = si->io.pck_snd; @@ -2006,7 +2016,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_ACCEPT_SEND: if (si->type != SOCK_STREAM) return NULL; - dest_addr = si->myname; + dest_addr = &si->myname.sa.s; src_addr = addr; tcp_seqno = si->io.pck_rcv; @@ -2020,7 +2030,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_ACCEPT_RECV: if (si->type != SOCK_STREAM) return NULL; - src_addr = si->myname; + src_addr = &si->myname.sa.s; dest_addr = addr; tcp_seqno = si->io.pck_snd; @@ -2034,7 +2044,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_ACCEPT_ACK: if (si->type != SOCK_STREAM) return NULL; - dest_addr = si->myname; + dest_addr = &si->myname.sa.s; src_addr = addr; tcp_seqno = si->io.pck_rcv; @@ -2044,8 +2054,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_SEND: - src_addr = si->myname; - dest_addr = si->peername; + src_addr = &si->myname.sa.s; + dest_addr = &si->peername.sa.s; tcp_seqno = si->io.pck_snd; tcp_ack = si->io.pck_rcv; @@ -2056,13 +2066,16 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_SEND_RST: - dest_addr = si->myname; - src_addr = si->peername; + dest_addr = &si->myname.sa.s; + src_addr = &si->peername.sa.s; if (si->type == SOCK_DGRAM) { - return swrap_marshall_packet(si, si->peername, - SWRAP_SENDTO_UNREACH, - buf, len, packet_len); + return swrap_pcap_marshall_packet(si, + &si->peername.sa.s, + SWRAP_SENDTO_UNREACH, + buf, + len, + packet_len); } tcp_seqno = si->io.pck_rcv; @@ -2072,8 +2085,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_PENDING_RST: - dest_addr = si->myname; - src_addr = si->peername; + dest_addr = &si->myname.sa.s; + src_addr = &si->peername.sa.s; if (si->type == SOCK_DGRAM) { return NULL; @@ -2086,8 +2099,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_RECV: - dest_addr = si->myname; - src_addr = si->peername; + dest_addr = &si->myname.sa.s; + src_addr = &si->peername.sa.s; tcp_seqno = si->io.pck_rcv; tcp_ack = si->io.pck_snd; @@ -2098,8 +2111,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_RECV_RST: - dest_addr = si->myname; - src_addr = si->peername; + dest_addr = &si->myname.sa.s; + src_addr = &si->peername.sa.s; if (si->type == SOCK_DGRAM) { return NULL; @@ -2112,7 +2125,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_SENDTO: - src_addr = si->myname; + src_addr = &si->myname.sa.s; dest_addr = addr; si->io.pck_snd += len; @@ -2120,7 +2133,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_SENDTO_UNREACH: - dest_addr = si->myname; + dest_addr = &si->myname.sa.s; src_addr = addr; unreachable = 1; @@ -2128,7 +2141,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, break; case SWRAP_RECVFROM: - dest_addr = si->myname; + dest_addr = &si->myname.sa.s; src_addr = addr; si->io.pck_rcv += len; @@ -2138,8 +2151,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si, case SWRAP_CLOSE_SEND: if (si->type != SOCK_STREAM) return NULL; - src_addr = si->myname; - dest_addr = si->peername; + src_addr = &si->myname.sa.s; + dest_addr = &si->peername.sa.s; -- Socket Wrapper Repository