Author: tuexen
Date: Sun Sep  7 09:06:26 2014
New Revision: 271221
URL: http://svnweb.freebsd.org/changeset/base/271221

Log:
  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

Modified:
  head/sys/netinet/sctp_asconf.c
  head/sys/netinet/sctp_input.c
  head/sys/netinet/sctp_output.c
  head/sys/netinet/sctp_pcb.c
  head/sys/netinet/sctp_sysctl.c
  head/sys/netinet/sctp_usrreq.c
  head/sys/netinet/sctputil.c
  head/sys/netinet6/sctp6_usrreq.c

Modified: head/sys/netinet/sctp_asconf.c
==============================================================================
--- head/sys/netinet/sctp_asconf.c      Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet/sctp_asconf.c      Sun Sep  7 09:06:26 2014        
(r271221)
@@ -148,7 +148,7 @@ sctp_process_asconf_add_ip(struct sockad
 {
        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 sockad
 #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 sockad
                        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 sockad
                        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 soc
     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 soc
 #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 soc
                        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 soc
                        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 s
     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 s
 #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 s
                        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 s
                        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 *
                {
                        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 *
                {
                        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 *
                {
                        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 *
                            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_in
                                        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_in
                                    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_tc
                                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_tc
                                        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_
                        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_
 #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;

Modified: head/sys/netinet/sctp_input.c
==============================================================================
--- head/sys/netinet/sctp_input.c       Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet/sctp_input.c       Sun Sep  7 09:06:26 2014        
(r271221)
@@ -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_he
 #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_he
 #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_he
        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, 
        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, 
 #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, 
        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);
 
 

Modified: head/sys/netinet/sctp_output.c
==============================================================================
--- head/sys/netinet/sctp_output.c      Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet/sctp_output.c      Sun Sep  7 09:06:26 2014        
(r271221)
@@ -1881,7 +1881,7 @@ sctp_is_address_in_scope(struct sctp_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
                                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, st
                        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, st
                        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
        }
        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);

Modified: head/sys/netinet/sctp_pcb.c
==============================================================================
--- head/sys/netinet/sctp_pcb.c Sun Sep  7 08:16:27 2014        (r271220)
+++ head/sys/netinet/sctp_pcb.c Sun Sep  7 09:06:26 2014        (r271221)
@@ -625,7 +625,7 @@ sctp_add_addr_to_vrf(uint32_t vrf_id, vo
                {
                        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, vo
                        /* 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
                                {
                                        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
                                {
                                        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 mb
     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 mb
                                    __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 mb
                                    __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 mb
                }
        } 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 @@ continue_anyway:
                 * 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 @@ continue_anyway:
                         * 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) {

Modified: head/sys/netinet/sctp_sysctl.c
==============================================================================
--- head/sys/netinet/sctp_sysctl.c      Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet/sctp_sysctl.c      Sun Sep  7 09:06:26 2014        
(r271221)
@@ -252,7 +252,7 @@ sctp_sysctl_copy_out_local_addresses(str
                                        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(str
                                        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,

Modified: head/sys/netinet/sctp_usrreq.c
==============================================================================
--- head/sys/netinet/sctp_usrreq.c      Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet/sctp_usrreq.c      Sun Sep  7 09:06:26 2014        
(r271221)
@@ -1188,7 +1188,7 @@ sctp_fill_up_addresses_vrf(struct sctp_i
                                        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_i
                                        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
                        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;

Modified: head/sys/netinet/sctputil.c
==============================================================================
--- head/sys/netinet/sctputil.c Sun Sep  7 08:16:27 2014        (r271220)
+++ head/sys/netinet/sctputil.c Sun Sep  7 09:06:26 2014        (r271221)
@@ -6710,7 +6710,7 @@ sctp_local_addr_count(struct sctp_tcb *s
                                        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 *s
                                        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;
                                                }

Modified: head/sys/netinet6/sctp6_usrreq.c
==============================================================================
--- head/sys/netinet6/sctp6_usrreq.c    Sun Sep  7 08:16:27 2014        
(r271220)
+++ head/sys/netinet6/sctp6_usrreq.c    Sun Sep  7 09:06:26 2014        
(r271221)
@@ -844,7 +844,7 @@ sctp6_connect(struct socket *so, struct 
 #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 
        }
        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 
                        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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to