Merge branch 'master' of github.com:sctplab/usrsctp
diff --git a/usrsctplib/netinet/sctp_usrreq.c b/usrsctplib/netinet/sctp_usrreq.c
index a7ee7b1..7828698 100755
--- a/usrsctplib/netinet/sctp_usrreq.c
+++ b/usrsctplib/netinet/sctp_usrreq.c
@@ -34,7 +34,7 @@
#if defined(__FreeBSD__) && !defined(__Userspace__)
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 362473 2020-06-21 23:12:56Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 362563 2020-06-23 23:05:05Z tuexen $");
#endif
#include <netinet/sctp_os.h>
@@ -1401,33 +1401,33 @@
* returns 0 on success, 1 on error
*/
static uint32_t
-sctp_fill_user_address(union sctp_sockstore *ss, struct sockaddr *sa)
+sctp_fill_user_address(struct sockaddr *dst, struct sockaddr *src)
{
#ifdef INET6
#if defined(SCTP_EMBEDDED_V6_SCOPE)
struct sockaddr_in6 lsa6;
- sa = (struct sockaddr *)sctp_recover_scope((struct sockaddr_in6 *)sa,
+ src = (struct sockaddr *)sctp_recover_scope((struct sockaddr_in6 *)src,
&lsa6);
#endif
#endif
#ifdef HAVE_SA_LEN
- memcpy(ss, sa, sa->sa_len);
+ memcpy(dst, src, src->sa_len);
#else
- switch (sa->sa_family) {
+ switch (src->sa_family) {
#ifdef INET
case AF_INET:
- memcpy(ss, sa, sizeof(struct sockaddr_in));
+ memcpy(dst, src, sizeof(struct sockaddr_in));
break;
#endif
#ifdef INET6
case AF_INET6:
- memcpy(ss, sa, sizeof(struct sockaddr_in6));
+ memcpy(dst, src, sizeof(struct sockaddr_in6));
break;
#endif
#if defined(__Userspace__)
case AF_CONN:
- memcpy(ss, sa, sizeof(struct sockaddr_conn));
+ memcpy(dst, src, sizeof(struct sockaddr_conn));
break;
#endif
default:
@@ -1447,7 +1447,7 @@
sctp_fill_up_addresses_vrf(struct sctp_inpcb *inp,
struct sctp_tcb *stcb,
size_t limit,
- union sctp_sockstore *addr,
+ struct sockaddr *addr,
uint32_t vrf_id)
{
struct sctp_ifn *sctp_ifn;
@@ -1553,7 +1553,7 @@
* is one of those we must skip it.
*/
if (sctp_is_addr_restricted(stcb,
- sctp_ifa)) {
+ sctp_ifa)) {
continue;
}
}
@@ -1586,9 +1586,9 @@
if (actual + sizeof(struct sockaddr_in6) > limit) {
return (actual);
}
- in6_sin_2_v4mapsin6(sin, &addr->sin6);
- addr->sin6.sin6_port = inp->sctp_lport;
- addr = (union sctp_sockstore *)((caddr_t)addr + sizeof(struct sockaddr_in6));
+ in6_sin_2_v4mapsin6(sin, (struct sockaddr_in6 *)&addr);
+ ((struct sockaddr_in6 *)addr)->sin6_port = inp->sctp_lport;
+ addr = (struct sockaddr *)((caddr_t)addr + sizeof(struct sockaddr_in6));
actual += sizeof(struct sockaddr_in6);
} else {
#endif
@@ -1596,8 +1596,8 @@
return (actual);
}
memcpy(addr, sin, sizeof(struct sockaddr_in));
- addr->sin.sin_port = inp->sctp_lport;
- addr = (union sctp_sockstore *)((caddr_t)addr + sizeof(struct sockaddr_in));
+ ((struct sockaddr_in *)addr)->sin_port = inp->sctp_lport;
+ addr = (struct sockaddr *)((caddr_t)addr + sizeof(struct sockaddr_in));
actual += sizeof(struct sockaddr_in);
#ifdef INET6
}
@@ -1666,8 +1666,8 @@
return (actual);
}
memcpy(addr, sin6, sizeof(struct sockaddr_in6));
- addr->sin6.sin6_port = inp->sctp_lport;
- addr = (union sctp_sockstore *)((caddr_t)addr + sizeof(struct sockaddr_in6));
+ ((struct sockaddr_in6 *)addr)->sin6_port = inp->sctp_lport;
+ addr = (struct sockaddr *)((caddr_t)addr + sizeof(struct sockaddr_in6));
actual += sizeof(struct sockaddr_in6);
} else {
continue;
@@ -1681,8 +1681,8 @@
return (actual);
}
memcpy(addr, &sctp_ifa->address.sconn, sizeof(struct sockaddr_conn));
- addr->sconn.sconn_port = inp->sctp_lport;
- addr = (union sctp_sockstore *)((caddr_t)addr + sizeof(struct sockaddr_conn));
+ ((struct sockaddr_conn *)addr)->sconn_port = inp->sctp_lport;
+ addr = (struct sockaddr *)((caddr_t)addr + sizeof(struct sockaddr_conn));
actual += sizeof(struct sockaddr_conn);
} else {
continue;
@@ -1737,24 +1737,24 @@
switch (laddr->ifa->address.sa.sa_family) {
#ifdef INET
case AF_INET:
- addr->sin.sin_port = inp->sctp_lport;
+ ((struct sockaddr_in *)addr)->sin_port = inp->sctp_lport;
break;
#endif
#ifdef INET6
case AF_INET6:
- addr->sin6.sin6_port = inp->sctp_lport;
+ ((struct sockaddr_in6 *)addr)->sin6_port = inp->sctp_lport;
break;
#endif
#if defined(__Userspace__)
case AF_CONN:
- addr->sconn.sconn_port = inp->sctp_lport;
+ ((struct sockaddr_conn *)addr)->sconn_port = inp->sctp_lport;
break;
#endif
default:
/* TSNH */
break;
}
- addr = (union sctp_sockstore *)((caddr_t)addr + sa_len);
+ addr = (struct sockaddr *)((caddr_t)addr + sa_len);
actual += sa_len;
}
}
@@ -1765,7 +1765,7 @@
sctp_fill_up_addresses(struct sctp_inpcb *inp,
struct sctp_tcb *stcb,
size_t limit,
- union sctp_sockstore *addr)
+ struct sockaddr *addr)
{
size_t size = 0;
#ifdef SCTP_MVRF
@@ -1782,7 +1782,7 @@
for (id = 0; (id < inp->num_vrfs) && (size < limit); id++) {
size += sctp_fill_up_addresses_vrf(inp, stcb, limit, addr,
inp->m_vrf_ids[id]);
- addr = (union sctp_sockstore *)((caddr_t)addr + size);
+ addr = (struct sockaddr *)((caddr_t)addr + size);
}
#else
/* fill up addresses for the endpoint's default vrf */
@@ -2818,7 +2818,7 @@
*/
{
size_t cpsz, left;
- union sctp_sockstore *addr;
+ struct sockaddr *addr;
struct sctp_nets *net;
struct sctp_getaddresses *saddr;
@@ -2828,7 +2828,7 @@
if (stcb) {
left = *optsize - offsetof(struct sctp_getaddresses, addr);
*optsize = offsetof(struct sctp_getaddresses, addr);
- addr = &saddr->addr[0];
+ addr = &saddr->addr[0].sa;
TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) {
switch (net->ro._l_addr.sa.sa_family) {
@@ -2871,16 +2871,16 @@
(net->ro._l_addr.sa.sa_family == AF_INET)) {
/* Must map the address */
in6_sin_2_v4mapsin6(&net->ro._l_addr.sin,
- &addr->sin6);
+ (struct sockaddr_in6 *)&addr);
} else {
memcpy(addr, &net->ro._l_addr, cpsz);
}
#else
memcpy(addr, &net->ro._l_addr, cpsz);
#endif
- addr->sin.sin_port = stcb->rport;
+ ((struct sockaddr_in *)addr)->sin_port = stcb->rport;
- addr = (union sctp_sockstore *)((caddr_t)addr + cpsz);
+ addr = (struct sockaddr *)((caddr_t)addr + cpsz);
left -= cpsz;
*optsize += cpsz;
}
@@ -2900,7 +2900,7 @@
SCTP_FIND_STCB(inp, stcb, saddr->sget_assoc_id);
limit = *optsize - offsetof(struct sctp_getaddresses, addr);
- actual = sctp_fill_up_addresses(inp, stcb, limit, saddr->addr);
+ actual = sctp_fill_up_addresses(inp, stcb, limit, &saddr->addr[0].sa);
if (stcb) {
SCTP_TCB_UNLOCK(stcb);
}