if (!addr)
return -ENOMEM;
- memcpy(&addr->a_h, new, sizeof(*new));
+ memcpy(&addr->a, new, sizeof(*new));
/* Fix up the port if it has not yet been set.
* Both v4 and v6 have the port at the same offset.
*/
- if (!addr->a_h.v4.sin_port)
- addr->a_h.v4.sin_port = bp->port;
+ if (!addr->a.v4.sin_port)
+ addr->a.v4.sin_port = htons(bp->port);
- flip_to_n(&addr->a, &addr->a_h);
+ flip_to_h(&addr->a_h, &addr->a);
addr->use_as_src = use_as_src;
int retval = 0;
int len;
struct sctp_af *af;
+ union sctp_addr tmp;
/* Convert the raw address to standard address format */
while (addrs_len) {
}
af->from_addr_param(&addr, rawaddr, port, 0);
- retval = sctp_add_bind_addr(bp, &addr, 1, gfp);
+ flip_to_n(&tmp, &addr);
+ retval = sctp_add_bind_addr(bp, &tmp, 1, gfp);
if (retval) {
/* Can't finish building the list, clean up. */
sctp_bind_addr_clean(bp);
int flags)
{
int error = 0;
+ union sctp_addr tmp;
+ flip_to_n(&tmp, addr);
if (sctp_is_any(addr)) {
error = sctp_copy_local_addr_list(dest, scope, gfp, flags);
(((AF_INET6 == addr->sa.sa_family) &&
(flags & SCTP_ADDR6_ALLOWED) &&
(flags & SCTP_ADDR6_PEERSUPP))))
- error = sctp_add_bind_addr(dest, addr, 1, gfp);
+ error = sctp_add_bind_addr(dest, &tmp, 1, gfp);
}
return error;
(((AF_INET6 == addr->a_h.sa.sa_family) &&
(copy_flags & SCTP_ADDR6_ALLOWED) &&
(copy_flags & SCTP_ADDR6_PEERSUPP)))) {
- error = sctp_add_bind_addr(bp, &addr->a_h, 1,
+ error = sctp_add_bind_addr(bp, &addr->a, 1,
GFP_ATOMIC);
if (error)
goto end_copy;
/* Also, add the destination address. */
if (list_empty(&retval->base.bind_addr.address_list)) {
- sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, 1,
+ union sctp_addr tmp;
+ flip_to_n(&tmp, &chunk->dest);
+ sctp_add_bind_addr(&retval->base.bind_addr, &tmp, 1,
GFP_ATOMIC);
}
struct sctp_af *af;
unsigned short snum;
int ret = 0;
- union sctp_addr tmp;
/* Common sockaddr verification. */
af = sctp_sockaddr_af(sp, addr, len);
sctp_write_lock(&ep->base.addr_lock);
/* Use GFP_ATOMIC since BHs are disabled. */
- flip_to_h(&tmp, addr);
- ret = sctp_add_bind_addr(bp, &tmp, 1, GFP_ATOMIC);
+ ret = sctp_add_bind_addr(bp, addr, 1, GFP_ATOMIC);
sctp_write_unlock(&ep->base.addr_lock);
sctp_local_bh_enable();
addr = (union sctp_addr *)addr_buf;
af = sctp_get_af_specific(addr->v4.sin_family);
memcpy(&saveaddr, addr, af->sockaddr_len);
- saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port);
retval = sctp_add_bind_addr(bp, &saveaddr, 0,
GFP_ATOMIC);
addr_buf += af->sockaddr_len;