Use union sctp_sockstore instead of struct sockaddr_storage. This
eliminiates some warnings when building in userland. Thanks to Patrick Laimbock for reporting this issue. Remove also some unnecessary casts. There should be no functional change. MFC after: 1 week
This commit is contained in:
parent
e72deda6c8
commit
24aaac8d59
@ -148,7 +148,7 @@ sctp_process_asconf_add_ip(struct sockaddr *src, struct sctp_asconf_paramhdr *ap
|
||||
{
|
||||
struct sctp_nets *net;
|
||||
struct mbuf *m_reply = NULL;
|
||||
struct sockaddr_storage sa_store;
|
||||
union sctp_sockstore store;
|
||||
struct sctp_paramhdr *ph;
|
||||
uint16_t param_type, aparam_length;
|
||||
|
||||
@ -177,7 +177,7 @@ sctp_process_asconf_add_ip(struct sockaddr *src, struct sctp_asconf_paramhdr *ap
|
||||
#if defined(INET) || defined(INET6)
|
||||
param_length = ntohs(ph->param_length);
|
||||
#endif
|
||||
sa = (struct sockaddr *)&sa_store;
|
||||
sa = &store.sa;
|
||||
switch (param_type) {
|
||||
#ifdef INET
|
||||
case SCTP_IPV4_ADDRESS:
|
||||
@ -186,7 +186,7 @@ sctp_process_asconf_add_ip(struct sockaddr *src, struct sctp_asconf_paramhdr *ap
|
||||
return (NULL);
|
||||
}
|
||||
v4addr = (struct sctp_ipv4addr_param *)ph;
|
||||
sin = (struct sockaddr_in *)&sa_store;
|
||||
sin = &store.sin;
|
||||
bzero(sin, sizeof(*sin));
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_len = sizeof(struct sockaddr_in);
|
||||
@ -209,7 +209,7 @@ sctp_process_asconf_add_ip(struct sockaddr *src, struct sctp_asconf_paramhdr *ap
|
||||
return (NULL);
|
||||
}
|
||||
v6addr = (struct sctp_ipv6addr_param *)ph;
|
||||
sin6 = (struct sockaddr_in6 *)&sa_store;
|
||||
sin6 = &store.sin6;
|
||||
bzero(sin6, sizeof(*sin6));
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_len = sizeof(struct sockaddr_in6);
|
||||
@ -302,7 +302,7 @@ sctp_process_asconf_delete_ip(struct sockaddr *src,
|
||||
struct sctp_tcb *stcb, int response_required)
|
||||
{
|
||||
struct mbuf *m_reply = NULL;
|
||||
struct sockaddr_storage sa_store;
|
||||
union sctp_sockstore store;
|
||||
struct sctp_paramhdr *ph;
|
||||
uint16_t param_type, aparam_length;
|
||||
|
||||
@ -331,7 +331,7 @@ sctp_process_asconf_delete_ip(struct sockaddr *src,
|
||||
#if defined(INET) || defined(INET6)
|
||||
param_length = ntohs(ph->param_length);
|
||||
#endif
|
||||
sa = (struct sockaddr *)&sa_store;
|
||||
sa = &store.sa;
|
||||
switch (param_type) {
|
||||
#ifdef INET
|
||||
case SCTP_IPV4_ADDRESS:
|
||||
@ -340,7 +340,7 @@ sctp_process_asconf_delete_ip(struct sockaddr *src,
|
||||
return (NULL);
|
||||
}
|
||||
v4addr = (struct sctp_ipv4addr_param *)ph;
|
||||
sin = (struct sockaddr_in *)&sa_store;
|
||||
sin = &store.sin;
|
||||
bzero(sin, sizeof(*sin));
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_len = sizeof(struct sockaddr_in);
|
||||
@ -360,7 +360,7 @@ sctp_process_asconf_delete_ip(struct sockaddr *src,
|
||||
return (NULL);
|
||||
}
|
||||
v6addr = (struct sctp_ipv6addr_param *)ph;
|
||||
sin6 = (struct sockaddr_in6 *)&sa_store;
|
||||
sin6 = &store.sin6;
|
||||
bzero(sin6, sizeof(*sin6));
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_len = sizeof(struct sockaddr_in6);
|
||||
@ -437,7 +437,7 @@ sctp_process_asconf_set_primary(struct sockaddr *src,
|
||||
struct sctp_tcb *stcb, int response_required)
|
||||
{
|
||||
struct mbuf *m_reply = NULL;
|
||||
struct sockaddr_storage sa_store;
|
||||
union sctp_sockstore store;
|
||||
struct sctp_paramhdr *ph;
|
||||
uint16_t param_type, aparam_length;
|
||||
|
||||
@ -465,7 +465,7 @@ sctp_process_asconf_set_primary(struct sockaddr *src,
|
||||
#if defined(INET) || defined(INET6)
|
||||
param_length = ntohs(ph->param_length);
|
||||
#endif
|
||||
sa = (struct sockaddr *)&sa_store;
|
||||
sa = &store.sa;
|
||||
switch (param_type) {
|
||||
#ifdef INET
|
||||
case SCTP_IPV4_ADDRESS:
|
||||
@ -474,7 +474,7 @@ sctp_process_asconf_set_primary(struct sockaddr *src,
|
||||
return (NULL);
|
||||
}
|
||||
v4addr = (struct sctp_ipv4addr_param *)ph;
|
||||
sin = (struct sockaddr_in *)&sa_store;
|
||||
sin = &store.sin;
|
||||
bzero(sin, sizeof(*sin));
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_len = sizeof(struct sockaddr_in);
|
||||
@ -492,7 +492,7 @@ sctp_process_asconf_set_primary(struct sockaddr *src,
|
||||
return (NULL);
|
||||
}
|
||||
v6addr = (struct sctp_ipv6addr_param *)ph;
|
||||
sin6 = (struct sockaddr_in6 *)&sa_store;
|
||||
sin6 = &store.sin6;
|
||||
bzero(sin6, sizeof(*sin6));
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_len = sizeof(struct sockaddr_in6);
|
||||
@ -1268,7 +1268,7 @@ sctp_asconf_queue_mgmt(struct sctp_tcb *stcb, struct sctp_ifa *ifa,
|
||||
{
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&ifa->address.sa;
|
||||
sin6 = &ifa->address.sin6;
|
||||
aa->ap.addrp.ph.param_type = SCTP_IPV6_ADDRESS;
|
||||
aa->ap.addrp.ph.param_length = (sizeof(struct sctp_ipv6addr_param));
|
||||
aa->ap.aph.ph.param_length = sizeof(struct sctp_asconf_paramhdr) +
|
||||
@ -1283,7 +1283,7 @@ sctp_asconf_queue_mgmt(struct sctp_tcb *stcb, struct sctp_ifa *ifa,
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&ifa->address.sa;
|
||||
sin = &ifa->address.sin;
|
||||
aa->ap.addrp.ph.param_type = SCTP_IPV4_ADDRESS;
|
||||
aa->ap.addrp.ph.param_length = (sizeof(struct sctp_ipv4addr_param));
|
||||
aa->ap.aph.ph.param_length = sizeof(struct sctp_asconf_paramhdr) +
|
||||
@ -1925,7 +1925,7 @@ sctp_addr_mgmt_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
{
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&ifa->address.sin6;
|
||||
sin6 = &ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
/* we skip unspecifed addresses */
|
||||
return;
|
||||
@ -1958,7 +1958,7 @@ sctp_addr_mgmt_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
SCTP_IPV6_V6ONLY(inp6))
|
||||
return;
|
||||
|
||||
sin = (struct sockaddr_in *)&ifa->address.sa;
|
||||
sin = &ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/* we skip unspecifed addresses */
|
||||
return;
|
||||
@ -2115,7 +2115,7 @@ sctp_asconf_iterator_stcb(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
else
|
||||
continue;
|
||||
}
|
||||
sin6 = (struct sockaddr_in6 *)&ifa->address.sin6;
|
||||
sin6 = &ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
/* we skip unspecifed addresses */
|
||||
continue;
|
||||
@ -2149,7 +2149,7 @@ sctp_asconf_iterator_stcb(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
SCTP_IPV6_V6ONLY(inp6))
|
||||
continue;
|
||||
|
||||
sin = (struct sockaddr_in *)&ifa->address.sa;
|
||||
sin = &ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/* we skip unspecifed addresses */
|
||||
continue;
|
||||
@ -2466,7 +2466,7 @@ sctp_find_valid_localaddr(struct sctp_tcb *stcb, int addr_locked)
|
||||
if (stcb->asoc.scope.ipv4_addr_legal) {
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&sctp_ifa->address.sa;
|
||||
sin = &sctp_ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/* skip unspecifed addresses */
|
||||
continue;
|
||||
@ -2500,7 +2500,7 @@ sctp_find_valid_localaddr(struct sctp_tcb *stcb, int addr_locked)
|
||||
if (sctp_ifa->localifa_flags & SCTP_ADDR_IFA_UNUSEABLE) {
|
||||
continue;
|
||||
}
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sa;
|
||||
sin6 = &sctp_ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
/*
|
||||
* we skip unspecifed
|
||||
@ -3125,7 +3125,7 @@ sctp_check_address_list_all(struct sctp_tcb *stcb, struct mbuf *m, int offset,
|
||||
switch (sctp_ifa->address.sa.sa_family) {
|
||||
#ifdef INET
|
||||
case AF_INET:
|
||||
sin = (struct sockaddr_in *)&sctp_ifa->address.sin;
|
||||
sin = &sctp_ifa->address.sin;
|
||||
if (prison_check_ip4(stcb->sctp_ep->ip_inp.inp.inp_cred,
|
||||
&sin->sin_addr) != 0) {
|
||||
continue;
|
||||
@ -3139,7 +3139,7 @@ sctp_check_address_list_all(struct sctp_tcb *stcb, struct mbuf *m, int offset,
|
||||
#endif
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sin6;
|
||||
sin6 = &sctp_ifa->address.sin6;
|
||||
if (prison_check_ip6(stcb->sctp_ep->ip_inp.inp.inp_cred,
|
||||
&sin6->sin6_addr) != 0) {
|
||||
continue;
|
||||
|
@ -562,21 +562,12 @@ static void
|
||||
sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp,
|
||||
struct sctp_tcb *stcb, struct sctp_nets *net)
|
||||
{
|
||||
struct sockaddr_storage store;
|
||||
union sctp_sockstore store;
|
||||
struct sctp_nets *r_net, *f_net;
|
||||
struct timeval tv;
|
||||
int req_prim = 0;
|
||||
uint16_t old_error_counter;
|
||||
|
||||
#ifdef INET
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
#endif
|
||||
#ifdef INET6
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
#endif
|
||||
|
||||
if (ntohs(cp->ch.chunk_length) != sizeof(struct sctp_heartbeat_chunk)) {
|
||||
/* Invalid length */
|
||||
return;
|
||||
@ -586,12 +577,11 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp,
|
||||
#ifdef INET
|
||||
case AF_INET:
|
||||
if (cp->heartbeat.hb_info.addr_len == sizeof(struct sockaddr_in)) {
|
||||
sin = (struct sockaddr_in *)&store;
|
||||
sin->sin_family = cp->heartbeat.hb_info.addr_family;
|
||||
sin->sin_len = cp->heartbeat.hb_info.addr_len;
|
||||
sin->sin_port = stcb->rport;
|
||||
memcpy(&sin->sin_addr, cp->heartbeat.hb_info.address,
|
||||
sizeof(sin->sin_addr));
|
||||
store.sin.sin_family = cp->heartbeat.hb_info.addr_family;
|
||||
store.sin.sin_len = cp->heartbeat.hb_info.addr_len;
|
||||
store.sin.sin_port = stcb->rport;
|
||||
memcpy(&store.sin.sin_addr, cp->heartbeat.hb_info.address,
|
||||
sizeof(store.sin.sin_addr));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
@ -600,12 +590,11 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp,
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
if (cp->heartbeat.hb_info.addr_len == sizeof(struct sockaddr_in6)) {
|
||||
sin6 = (struct sockaddr_in6 *)&store;
|
||||
sin6->sin6_family = cp->heartbeat.hb_info.addr_family;
|
||||
sin6->sin6_len = cp->heartbeat.hb_info.addr_len;
|
||||
sin6->sin6_port = stcb->rport;
|
||||
memcpy(&sin6->sin6_addr, cp->heartbeat.hb_info.address,
|
||||
sizeof(sin6->sin6_addr));
|
||||
store.sin6.sin6_family = cp->heartbeat.hb_info.addr_family;
|
||||
store.sin6.sin6_len = cp->heartbeat.hb_info.addr_len;
|
||||
store.sin6.sin6_port = stcb->rport;
|
||||
memcpy(&store.sin6.sin6_addr, cp->heartbeat.hb_info.address,
|
||||
sizeof(store.sin6.sin6_addr));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
@ -614,7 +603,7 @@ sctp_handle_heartbeat_ack(struct sctp_heartbeat_chunk *cp,
|
||||
default:
|
||||
return;
|
||||
}
|
||||
r_net = sctp_findnet(stcb, (struct sockaddr *)&store);
|
||||
r_net = sctp_findnet(stcb, &store.sa);
|
||||
if (r_net == NULL) {
|
||||
SCTPDBG(SCTP_DEBUG_INPUT1, "Huh? I can't find the address I sent it to, discard\n");
|
||||
return;
|
||||
@ -2030,22 +2019,13 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
struct sctp_tcb *stcb;
|
||||
struct sctp_init_chunk *init_cp, init_buf;
|
||||
struct sctp_init_ack_chunk *initack_cp, initack_buf;
|
||||
struct sockaddr_storage sa_store;
|
||||
struct sockaddr *initack_src = (struct sockaddr *)&sa_store;
|
||||
union sctp_sockstore store;
|
||||
struct sctp_association *asoc;
|
||||
int init_offset, initack_offset, initack_limit;
|
||||
int retval;
|
||||
int error = 0;
|
||||
uint8_t auth_chunk_buf[SCTP_PARAM_BUFFER_SIZE];
|
||||
|
||||
#ifdef INET
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
#endif
|
||||
#ifdef INET6
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
#endif
|
||||
#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
|
||||
struct socket *so;
|
||||
|
||||
@ -2269,23 +2249,21 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
#ifdef INET
|
||||
case SCTP_IPV4_ADDRESS:
|
||||
/* source addr is IPv4 */
|
||||
sin = (struct sockaddr_in *)initack_src;
|
||||
memset(sin, 0, sizeof(*sin));
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_len = sizeof(struct sockaddr_in);
|
||||
sin->sin_addr.s_addr = cookie->laddress[0];
|
||||
memset(&store.sin, 0, sizeof(struct sockaddr_in));
|
||||
store.sin.sin_family = AF_INET;
|
||||
store.sin.sin_len = sizeof(struct sockaddr_in);
|
||||
store.sin.sin_addr.s_addr = cookie->laddress[0];
|
||||
break;
|
||||
#endif
|
||||
#ifdef INET6
|
||||
case SCTP_IPV6_ADDRESS:
|
||||
/* source addr is IPv6 */
|
||||
sin6 = (struct sockaddr_in6 *)initack_src;
|
||||
memset(sin6, 0, sizeof(*sin6));
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_len = sizeof(struct sockaddr_in6);
|
||||
sin6->sin6_scope_id = cookie->scope_id;
|
||||
memcpy(&sin6->sin6_addr, cookie->laddress,
|
||||
sizeof(sin6->sin6_addr));
|
||||
memset(&store.sin6, 0, sizeof(struct sockaddr_in6));
|
||||
store.sin6.sin6_family = AF_INET6;
|
||||
store.sin6.sin6_len = sizeof(struct sockaddr_in6);
|
||||
store.sin6.sin6_scope_id = cookie->scope_id;
|
||||
memcpy(&store.sin6.sin6_addr, cookie->laddress,
|
||||
sizeof(store.sin6.sin6_addr));
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
@ -2366,7 +2344,7 @@ sctp_process_cookie_new(struct mbuf *m, int iphlen, int offset,
|
||||
sctp_check_address_list(stcb, m,
|
||||
initack_offset + sizeof(struct sctp_init_ack_chunk),
|
||||
initack_limit - (initack_offset + sizeof(struct sctp_init_ack_chunk)),
|
||||
initack_src, cookie->local_scope, cookie->site_scope,
|
||||
&store.sa, cookie->local_scope, cookie->site_scope,
|
||||
cookie->ipv4_scope, cookie->loopback_scope);
|
||||
|
||||
|
||||
|
@ -1881,7 +1881,7 @@ sctp_is_address_in_scope(struct sctp_ifa *ifa,
|
||||
if (scope->ipv4_addr_legal) {
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&ifa->address.sin;
|
||||
sin = &ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/* not in scope , unspecified */
|
||||
return (0);
|
||||
@ -1912,7 +1912,7 @@ sctp_is_address_in_scope(struct sctp_ifa *ifa,
|
||||
return (0);
|
||||
}
|
||||
/* ok to use deprecated addresses? */
|
||||
sin6 = (struct sockaddr_in6 *)&ifa->address.sin6;
|
||||
sin6 = &ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
/* skip unspecifed addresses */
|
||||
return (0);
|
||||
@ -1987,7 +1987,7 @@ sctp_add_addr_to_mbuf(struct mbuf *m, struct sctp_ifa *ifa, uint16_t * len)
|
||||
struct sctp_ipv4addr_param *ipv4p;
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&ifa->address.sin;
|
||||
sin = &ifa->address.sin;
|
||||
ipv4p = (struct sctp_ipv4addr_param *)parmh;
|
||||
parmh->param_type = htons(SCTP_IPV4_ADDRESS);
|
||||
parmh->param_length = htons(plen);
|
||||
@ -2002,7 +2002,7 @@ sctp_add_addr_to_mbuf(struct mbuf *m, struct sctp_ifa *ifa, uint16_t * len)
|
||||
struct sctp_ipv6addr_param *ipv6p;
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&ifa->address.sin6;
|
||||
sin6 = &ifa->address.sin6;
|
||||
ipv6p = (struct sctp_ipv6addr_param *)parmh;
|
||||
parmh->param_type = htons(SCTP_IPV6_ADDRESS);
|
||||
parmh->param_length = htons(plen);
|
||||
@ -13552,7 +13552,7 @@ sctp_v4src_match_nexthop(struct sctp_ifa *sifa, sctp_route_t * ro)
|
||||
}
|
||||
ifa = (struct ifaddr *)sifa->ifa;
|
||||
mask = (struct sockaddr_in *)(ifa->ifa_netmask);
|
||||
sin = (struct sockaddr_in *)&sifa->address.sin;
|
||||
sin = &sifa->address.sin;
|
||||
srcnetaddr.s_addr = (sin->sin_addr.s_addr & mask->sin_addr.s_addr);
|
||||
SCTPDBG(SCTP_DEBUG_OUTPUT1, "match_nexthop4: src address is ");
|
||||
SCTPDBG_ADDR(SCTP_DEBUG_OUTPUT2, &sifa->address.sa);
|
||||
|
@ -625,7 +625,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&sctp_ifap->address.sin;
|
||||
sin = &sctp_ifap->address.sin;
|
||||
if (SCTP_IFN_IS_IFT_LOOP(sctp_ifap->ifn_p) ||
|
||||
(IN4_ISLOOPBACK_ADDRESS(&sin->sin_addr))) {
|
||||
sctp_ifap->src_is_loop = 1;
|
||||
@ -645,7 +645,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, void *ifn, uint32_t ifn_index,
|
||||
/* ok to use deprecated addresses? */
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifap->address.sin6;
|
||||
sin6 = &sctp_ifap->address.sin6;
|
||||
if (SCTP_IFN_IS_IFT_LOOP(sctp_ifap->ifn_p) ||
|
||||
(IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr))) {
|
||||
sctp_ifap->src_is_loop = 1;
|
||||
@ -974,7 +974,7 @@ sctp_does_stcb_own_this_addr(struct sctp_tcb *stcb, struct sockaddr *to)
|
||||
{
|
||||
struct sockaddr_in *sin, *rsin;
|
||||
|
||||
sin = (struct sockaddr_in *)&laddr->ifa->address.sin;
|
||||
sin = &laddr->ifa->address.sin;
|
||||
rsin = (struct sockaddr_in *)to;
|
||||
if (sin->sin_addr.s_addr == rsin->sin_addr.s_addr) {
|
||||
SCTP_IPI_ADDR_RUNLOCK();
|
||||
@ -988,7 +988,7 @@ sctp_does_stcb_own_this_addr(struct sctp_tcb *stcb, struct sockaddr *to)
|
||||
{
|
||||
struct sockaddr_in6 *sin6, *rsin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&laddr->ifa->address.sin6;
|
||||
sin6 = &laddr->ifa->address.sin6;
|
||||
rsin6 = (struct sockaddr_in6 *)to;
|
||||
if (SCTP6_ARE_ADDR_EQUAL(sin6, rsin6)) {
|
||||
SCTP_IPI_ADDR_RUNLOCK();
|
||||
@ -2330,7 +2330,7 @@ sctp_findassociation_ep_asconf(struct mbuf *m, int offset,
|
||||
struct sctp_inpcb **inp_p, struct sctp_nets **netp, uint32_t vrf_id)
|
||||
{
|
||||
struct sctp_tcb *stcb;
|
||||
struct sockaddr_storage remote_store;
|
||||
union sctp_sockstore remote_store;
|
||||
struct sctp_paramhdr parm_buf, *phdr;
|
||||
int ptype;
|
||||
int zero_address = 0;
|
||||
@ -2372,7 +2372,7 @@ sctp_findassociation_ep_asconf(struct mbuf *m, int offset,
|
||||
__FUNCTION__);
|
||||
return (NULL);
|
||||
}
|
||||
sin6 = (struct sockaddr_in6 *)&remote_store;
|
||||
sin6 = &remote_store.sin6;
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_len = sizeof(*sin6);
|
||||
sin6->sin6_port = sh->src_port;
|
||||
@ -2399,7 +2399,7 @@ sctp_findassociation_ep_asconf(struct mbuf *m, int offset,
|
||||
__FUNCTION__);
|
||||
return (NULL);
|
||||
}
|
||||
sin = (struct sockaddr_in *)&remote_store;
|
||||
sin = &remote_store.sin;
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_len = sizeof(*sin);
|
||||
sin->sin_port = sh->src_port;
|
||||
@ -2422,7 +2422,7 @@ sctp_findassociation_ep_asconf(struct mbuf *m, int offset,
|
||||
}
|
||||
} else {
|
||||
stcb = sctp_findassociation_ep_addr(inp_p,
|
||||
(struct sockaddr *)&remote_store, netp,
|
||||
&remote_store.sa, netp,
|
||||
dst, NULL);
|
||||
}
|
||||
return (stcb);
|
||||
@ -3126,31 +3126,21 @@ sctp_inpcb_bind(struct socket *so, struct sockaddr *addr,
|
||||
* too (before adding).
|
||||
*/
|
||||
struct sctp_ifa *ifa;
|
||||
struct sockaddr_storage store_sa;
|
||||
union sctp_sockstore store;
|
||||
|
||||
memset(&store_sa, 0, sizeof(store_sa));
|
||||
memset(&store, 0, sizeof(store));
|
||||
switch (addr->sa_family) {
|
||||
#ifdef INET
|
||||
case AF_INET:
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&store_sa;
|
||||
memcpy(sin, addr, sizeof(struct sockaddr_in));
|
||||
sin->sin_port = 0;
|
||||
break;
|
||||
}
|
||||
memcpy(&store.sin, addr, sizeof(struct sockaddr_in));
|
||||
store.sin.sin_port = 0;
|
||||
break;
|
||||
#endif
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
{
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&store_sa;
|
||||
memcpy(sin6, addr, sizeof(struct sockaddr_in6));
|
||||
sin6->sin6_port = 0;
|
||||
break;
|
||||
}
|
||||
memcpy(&store.sin6, addr, sizeof(struct sockaddr_in6));
|
||||
store.sin6.sin6_port = 0;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
@ -3168,7 +3158,7 @@ sctp_inpcb_bind(struct socket *so, struct sockaddr *addr,
|
||||
* pass things in via the sctp_ifap argument
|
||||
* (Panda).
|
||||
*/
|
||||
ifa = sctp_find_ifa_by_addr((struct sockaddr *)&store_sa,
|
||||
ifa = sctp_find_ifa_by_addr(&store.sa,
|
||||
vrf_id, SCTP_ADDR_NOT_LOCKED);
|
||||
}
|
||||
if (ifa == NULL) {
|
||||
|
@ -252,7 +252,7 @@ sctp_sysctl_copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *st
|
||||
if (ipv4_addr_legal) {
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&sctp_ifa->address.sa;
|
||||
sin = &sctp_ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0)
|
||||
continue;
|
||||
if (prison_check_ip4(inp->ip_inp.inp.inp_cred,
|
||||
@ -271,7 +271,7 @@ sctp_sysctl_copy_out_local_addresses(struct sctp_inpcb *inp, struct sctp_tcb *st
|
||||
if (ipv6_addr_legal) {
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sa;
|
||||
sin6 = &sctp_ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr))
|
||||
continue;
|
||||
if (prison_check_ip6(inp->ip_inp.inp.inp_cred,
|
||||
|
@ -1188,7 +1188,7 @@ sctp_fill_up_addresses_vrf(struct sctp_inpcb *inp,
|
||||
if (ipv4_addr_legal) {
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&sctp_ifa->address.sa;
|
||||
sin = &sctp_ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/*
|
||||
* we skip
|
||||
@ -1233,7 +1233,7 @@ sctp_fill_up_addresses_vrf(struct sctp_inpcb *inp,
|
||||
if (ipv6_addr_legal) {
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sa;
|
||||
sin6 = &sctp_ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
/*
|
||||
* we skip
|
||||
@ -6922,7 +6922,7 @@ sctp_ingetaddr(struct socket *so, struct sockaddr **addr)
|
||||
if (laddr->ifa->address.sa.sa_family == AF_INET) {
|
||||
struct sockaddr_in *sin_a;
|
||||
|
||||
sin_a = (struct sockaddr_in *)&laddr->ifa->address.sa;
|
||||
sin_a = &laddr->ifa->address.sin;
|
||||
sin->sin_addr = sin_a->sin_addr;
|
||||
fnd = 1;
|
||||
break;
|
||||
|
@ -6710,7 +6710,7 @@ sctp_local_addr_count(struct sctp_tcb *stcb)
|
||||
if (ipv4_addr_legal) {
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
sin = (struct sockaddr_in *)&sctp_ifa->address.sa;
|
||||
sin = &sctp_ifa->address.sin;
|
||||
if (sin->sin_addr.s_addr == 0) {
|
||||
/*
|
||||
* skip unspecified
|
||||
@ -6738,7 +6738,7 @@ sctp_local_addr_count(struct sctp_tcb *stcb)
|
||||
if (ipv6_addr_legal) {
|
||||
struct sockaddr_in6 *sin6;
|
||||
|
||||
sin6 = (struct sockaddr_in6 *)&sctp_ifa->address.sa;
|
||||
sin6 = &sctp_ifa->address.sin6;
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -844,7 +844,7 @@ sctp6_connect(struct socket *so, struct sockaddr *addr, struct thread *p)
|
||||
#ifdef INET
|
||||
struct in6pcb *inp6;
|
||||
struct sockaddr_in6 *sin6;
|
||||
struct sockaddr_storage ss;
|
||||
union sctp_sockstore store;
|
||||
|
||||
#endif
|
||||
|
||||
@ -928,8 +928,8 @@ sctp6_connect(struct socket *so, struct sockaddr *addr, struct thread *p)
|
||||
}
|
||||
if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
|
||||
/* convert v4-mapped into v4 addr */
|
||||
in6_sin6_2_sin((struct sockaddr_in *)&ss, sin6);
|
||||
addr = (struct sockaddr *)&ss;
|
||||
in6_sin6_2_sin(&store.sin, sin6);
|
||||
addr = &store.sa;
|
||||
}
|
||||
#endif /* INET */
|
||||
/* Now do we connect? */
|
||||
@ -1057,7 +1057,7 @@ sctp6_getaddr(struct socket *so, struct sockaddr **addr)
|
||||
if (laddr->ifa->address.sa.sa_family == AF_INET6) {
|
||||
struct sockaddr_in6 *sin_a;
|
||||
|
||||
sin_a = (struct sockaddr_in6 *)&laddr->ifa->address.sin6;
|
||||
sin_a = &laddr->ifa->address.sin6;
|
||||
sin6->sin6_addr = sin_a->sin6_addr;
|
||||
fnd = 1;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user