[SCTP]: Beginning of conversion to net-endian for embedded sctp_addr.
Part 1: rename sctp_chunk->source, sctp_sockaddr_entry->a, sctp_transport->ipaddr and sctp_transport->saddr (to ..._h) The next patch will reintroduce these fields and keep them as net-endian mirrors of the original (renamed) ones. Split in two patches to make sure that we hadn't forgotten any instanes. Later in the series we'll eliminate uses of host-endian variants (basically switching users to net-endian counterparts as we progress through that mess). Then host-endian ones will die. Other embedded host-endian sctp_addr will be easier to switch directly, so we leave them alone for now. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
30330ee00c
commit
09ef7fecea
12 changed files with 91 additions and 91 deletions
|
@ -713,7 +713,7 @@ struct sctp_chunk {
|
||||||
unsigned long sent_at;
|
unsigned long sent_at;
|
||||||
|
|
||||||
/* What is the origin IP address for this chunk? */
|
/* What is the origin IP address for this chunk? */
|
||||||
union sctp_addr source;
|
union sctp_addr source_h;
|
||||||
/* Destination address for this chunk. */
|
/* Destination address for this chunk. */
|
||||||
union sctp_addr dest;
|
union sctp_addr dest;
|
||||||
|
|
||||||
|
@ -756,7 +756,7 @@ const union sctp_addr *sctp_source(const struct sctp_chunk *chunk);
|
||||||
/* This is a structure for holding either an IPv6 or an IPv4 address. */
|
/* This is a structure for holding either an IPv6 or an IPv4 address. */
|
||||||
struct sctp_sockaddr_entry {
|
struct sctp_sockaddr_entry {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
union sctp_addr a;
|
union sctp_addr a_h;
|
||||||
__u8 use_as_src;
|
__u8 use_as_src;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -842,7 +842,7 @@ struct sctp_transport {
|
||||||
int dead;
|
int dead;
|
||||||
|
|
||||||
/* This is the peer's IP address and port. */
|
/* This is the peer's IP address and port. */
|
||||||
union sctp_addr ipaddr;
|
union sctp_addr ipaddr_h;
|
||||||
|
|
||||||
/* These are the functions we call to handle LLP stuff. */
|
/* These are the functions we call to handle LLP stuff. */
|
||||||
struct sctp_af *af_specific;
|
struct sctp_af *af_specific;
|
||||||
|
@ -900,7 +900,7 @@ struct sctp_transport {
|
||||||
/* Destination */
|
/* Destination */
|
||||||
struct dst_entry *dst;
|
struct dst_entry *dst;
|
||||||
/* Source address. */
|
/* Source address. */
|
||||||
union sctp_addr saddr;
|
union sctp_addr saddr_h;
|
||||||
|
|
||||||
/* When was the last time(in jiffies) that a data packet was sent on
|
/* When was the last time(in jiffies) that a data packet was sent on
|
||||||
* this transport? This is used to adjust the cwnd when the transport
|
* this transport? This is used to adjust the cwnd when the transport
|
||||||
|
|
|
@ -442,7 +442,7 @@ void sctp_assoc_set_primary(struct sctp_association *asoc,
|
||||||
asoc->peer.primary_path = transport;
|
asoc->peer.primary_path = transport;
|
||||||
|
|
||||||
/* Set a default msg_name for events. */
|
/* Set a default msg_name for events. */
|
||||||
memcpy(&asoc->peer.primary_addr, &transport->ipaddr,
|
memcpy(&asoc->peer.primary_addr, &transport->ipaddr_h,
|
||||||
sizeof(union sctp_addr));
|
sizeof(union sctp_addr));
|
||||||
|
|
||||||
/* If the primary path is changing, assume that the
|
/* If the primary path is changing, assume that the
|
||||||
|
@ -487,8 +487,8 @@ void sctp_assoc_rm_peer(struct sctp_association *asoc,
|
||||||
SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_rm_peer:association %p addr: ",
|
SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_rm_peer:association %p addr: ",
|
||||||
" port: %d\n",
|
" port: %d\n",
|
||||||
asoc,
|
asoc,
|
||||||
(&peer->ipaddr),
|
(&peer->ipaddr_h),
|
||||||
peer->ipaddr.v4.sin_port);
|
peer->ipaddr_h.v4.sin_port);
|
||||||
|
|
||||||
/* If we are to remove the current retran_path, update it
|
/* If we are to remove the current retran_path, update it
|
||||||
* to the next peer before removing this peer from the list.
|
* to the next peer before removing this peer from the list.
|
||||||
|
@ -669,7 +669,7 @@ void sctp_assoc_del_peer(struct sctp_association *asoc,
|
||||||
|
|
||||||
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
||||||
transport = list_entry(pos, struct sctp_transport, transports);
|
transport = list_entry(pos, struct sctp_transport, transports);
|
||||||
if (sctp_cmp_addr_exact(addr, &transport->ipaddr)) {
|
if (sctp_cmp_addr_exact(addr, &transport->ipaddr_h)) {
|
||||||
/* Do book keeping for removing the peer and free it. */
|
/* Do book keeping for removing the peer and free it. */
|
||||||
sctp_assoc_rm_peer(asoc, transport);
|
sctp_assoc_rm_peer(asoc, transport);
|
||||||
break;
|
break;
|
||||||
|
@ -689,7 +689,7 @@ struct sctp_transport *sctp_assoc_lookup_paddr(
|
||||||
|
|
||||||
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
||||||
t = list_entry(pos, struct sctp_transport, transports);
|
t = list_entry(pos, struct sctp_transport, transports);
|
||||||
if (sctp_cmp_addr_exact(address, &t->ipaddr))
|
if (sctp_cmp_addr_exact(address, &t->ipaddr_h))
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,7 +733,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
|
||||||
* user.
|
* user.
|
||||||
*/
|
*/
|
||||||
memset(&addr, 0, sizeof(struct sockaddr_storage));
|
memset(&addr, 0, sizeof(struct sockaddr_storage));
|
||||||
flip_to_n((union sctp_addr *)&addr, &transport->ipaddr);
|
flip_to_n((union sctp_addr *)&addr, &transport->ipaddr_h);
|
||||||
event = sctp_ulpevent_make_peer_addr_change(asoc, &addr,
|
event = sctp_ulpevent_make_peer_addr_change(asoc, &addr,
|
||||||
0, spc_state, error, GFP_ATOMIC);
|
0, spc_state, error, GFP_ATOMIC);
|
||||||
if (event)
|
if (event)
|
||||||
|
@ -1043,8 +1043,8 @@ void sctp_assoc_update(struct sctp_association *asoc,
|
||||||
/* Remove any peer addresses not present in the new association. */
|
/* Remove any peer addresses not present in the new association. */
|
||||||
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
||||||
trans = list_entry(pos, struct sctp_transport, transports);
|
trans = list_entry(pos, struct sctp_transport, transports);
|
||||||
if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr))
|
if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr_h))
|
||||||
sctp_assoc_del_peer(asoc, &trans->ipaddr);
|
sctp_assoc_del_peer(asoc, &trans->ipaddr_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the case is A (association restart), use
|
/* If the case is A (association restart), use
|
||||||
|
@ -1067,8 +1067,8 @@ void sctp_assoc_update(struct sctp_association *asoc,
|
||||||
list_for_each(pos, &new->peer.transport_addr_list) {
|
list_for_each(pos, &new->peer.transport_addr_list) {
|
||||||
trans = list_entry(pos, struct sctp_transport,
|
trans = list_entry(pos, struct sctp_transport,
|
||||||
transports);
|
transports);
|
||||||
if (!sctp_assoc_lookup_paddr(asoc, &trans->ipaddr))
|
if (!sctp_assoc_lookup_paddr(asoc, &trans->ipaddr_h))
|
||||||
sctp_assoc_add_peer(asoc, &trans->ipaddr,
|
sctp_assoc_add_peer(asoc, &trans->ipaddr_h,
|
||||||
GFP_ATOMIC, trans->state);
|
GFP_ATOMIC, trans->state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1136,8 +1136,8 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
|
||||||
" %p addr: ",
|
" %p addr: ",
|
||||||
" port: %d\n",
|
" port: %d\n",
|
||||||
asoc,
|
asoc,
|
||||||
(&t->ipaddr),
|
(&t->ipaddr_h),
|
||||||
t->ipaddr.v4.sin_port);
|
t->ipaddr_h.v4.sin_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Choose the transport for sending a INIT packet. */
|
/* Choose the transport for sending a INIT packet. */
|
||||||
|
@ -1161,8 +1161,8 @@ struct sctp_transport *sctp_assoc_choose_init_transport(
|
||||||
" %p addr: ",
|
" %p addr: ",
|
||||||
" port: %d\n",
|
" port: %d\n",
|
||||||
asoc,
|
asoc,
|
||||||
(&t->ipaddr),
|
(&t->ipaddr_h),
|
||||||
t->ipaddr.v4.sin_port);
|
t->ipaddr_h.v4.sin_port);
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -1307,7 +1307,7 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
|
||||||
/* Use scoping rules to determine the subset of addresses from
|
/* Use scoping rules to determine the subset of addresses from
|
||||||
* the endpoint.
|
* the endpoint.
|
||||||
*/
|
*/
|
||||||
scope = sctp_scope(&asoc->peer.active_path->ipaddr);
|
scope = sctp_scope(&asoc->peer.active_path->ipaddr_h);
|
||||||
flags = (PF_INET6 == asoc->base.sk->sk_family) ? SCTP_ADDR6_ALLOWED : 0;
|
flags = (PF_INET6 == asoc->base.sk->sk_family) ? SCTP_ADDR6_ALLOWED : 0;
|
||||||
if (asoc->peer.ipv4_address)
|
if (asoc->peer.ipv4_address)
|
||||||
flags |= SCTP_ADDR4_PEERSUPP;
|
flags |= SCTP_ADDR4_PEERSUPP;
|
||||||
|
|
|
@ -77,7 +77,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
|
||||||
/* Extract the addresses which are relevant for this scope. */
|
/* Extract the addresses which are relevant for this scope. */
|
||||||
list_for_each(pos, &src->address_list) {
|
list_for_each(pos, &src->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
error = sctp_copy_one_addr(dest, &addr->a, scope,
|
error = sctp_copy_one_addr(dest, &addr->a_h, scope,
|
||||||
gfp, flags);
|
gfp, flags);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -91,7 +91,7 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
|
||||||
list_for_each(pos, &src->address_list) {
|
list_for_each(pos, &src->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry,
|
addr = list_entry(pos, struct sctp_sockaddr_entry,
|
||||||
list);
|
list);
|
||||||
error = sctp_copy_one_addr(dest, &addr->a,
|
error = sctp_copy_one_addr(dest, &addr->a_h,
|
||||||
SCTP_SCOPE_LINK, gfp,
|
SCTP_SCOPE_LINK, gfp,
|
||||||
flags);
|
flags);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
|
@ -155,13 +155,13 @@ int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new,
|
||||||
if (!addr)
|
if (!addr)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
memcpy(&addr->a, new, sizeof(*new));
|
memcpy(&addr->a_h, new, sizeof(*new));
|
||||||
|
|
||||||
/* Fix up the port if it has not yet been set.
|
/* Fix up the port if it has not yet been set.
|
||||||
* Both v4 and v6 have the port at the same offset.
|
* Both v4 and v6 have the port at the same offset.
|
||||||
*/
|
*/
|
||||||
if (!addr->a.v4.sin_port)
|
if (!addr->a_h.v4.sin_port)
|
||||||
addr->a.v4.sin_port = bp->port;
|
addr->a_h.v4.sin_port = bp->port;
|
||||||
|
|
||||||
addr->use_as_src = use_as_src;
|
addr->use_as_src = use_as_src;
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ int sctp_del_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *del_addr)
|
||||||
|
|
||||||
list_for_each_safe(pos, temp, &bp->address_list) {
|
list_for_each_safe(pos, temp, &bp->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_cmp_addr_exact(&addr->a, del_addr)) {
|
if (sctp_cmp_addr_exact(&addr->a_h, del_addr)) {
|
||||||
/* Found the exact match. */
|
/* Found the exact match. */
|
||||||
list_del(pos);
|
list_del(pos);
|
||||||
kfree(addr);
|
kfree(addr);
|
||||||
|
@ -237,8 +237,8 @@ union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp,
|
||||||
|
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
af = sctp_get_af_specific(addr->a.v4.sin_family);
|
af = sctp_get_af_specific(addr->a_h.v4.sin_family);
|
||||||
len = af->to_addr_param(&addr->a, &rawaddr);
|
len = af->to_addr_param(&addr->a_h, &rawaddr);
|
||||||
memcpy(addrparms.v, &rawaddr, len);
|
memcpy(addrparms.v, &rawaddr, len);
|
||||||
addrparms.v += len;
|
addrparms.v += len;
|
||||||
addrparms_len += len;
|
addrparms_len += len;
|
||||||
|
@ -305,7 +305,7 @@ int sctp_bind_addr_match(struct sctp_bind_addr *bp,
|
||||||
|
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if (opt->pf->cmp_addr(&laddr->a, addr, opt))
|
if (opt->pf->cmp_addr(&laddr->a_h, addr, opt))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,13 +339,13 @@ union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp,
|
||||||
return NULL;
|
return NULL;
|
||||||
flip_to_h(&tmp, addr);
|
flip_to_h(&tmp, addr);
|
||||||
|
|
||||||
if (opt->pf->cmp_addr(&laddr->a, &tmp, opt))
|
if (opt->pf->cmp_addr(&laddr->a_h, &tmp, opt))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
addr_buf += af->sockaddr_len;
|
addr_buf += af->sockaddr_len;
|
||||||
}
|
}
|
||||||
if (i == addrcnt)
|
if (i == addrcnt)
|
||||||
return &laddr->a;
|
return &laddr->a_h;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -305,7 +305,7 @@ int sctp_endpoint_is_peeled_off(struct sctp_endpoint *ep,
|
||||||
bp = &ep->base.bind_addr;
|
bp = &ep->base.bind_addr;
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_has_association(&addr->a, paddr)) {
|
if (sctp_has_association(&addr->a_h, paddr)) {
|
||||||
sctp_read_unlock(&ep->base.addr_lock);
|
sctp_read_unlock(&ep->base.addr_lock);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,17 +161,17 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport,
|
||||||
/* Fill in the dest address from the route entry passed with the skb
|
/* Fill in the dest address from the route entry passed with the skb
|
||||||
* and the source address from the transport.
|
* and the source address from the transport.
|
||||||
*/
|
*/
|
||||||
ipv6_addr_copy(&fl.fl6_dst, &transport->ipaddr.v6.sin6_addr);
|
ipv6_addr_copy(&fl.fl6_dst, &transport->ipaddr_h.v6.sin6_addr);
|
||||||
ipv6_addr_copy(&fl.fl6_src, &transport->saddr.v6.sin6_addr);
|
ipv6_addr_copy(&fl.fl6_src, &transport->saddr_h.v6.sin6_addr);
|
||||||
|
|
||||||
fl.fl6_flowlabel = np->flow_label;
|
fl.fl6_flowlabel = np->flow_label;
|
||||||
IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
|
IP6_ECN_flow_xmit(sk, fl.fl6_flowlabel);
|
||||||
if (ipv6_addr_type(&fl.fl6_src) & IPV6_ADDR_LINKLOCAL)
|
if (ipv6_addr_type(&fl.fl6_src) & IPV6_ADDR_LINKLOCAL)
|
||||||
fl.oif = transport->saddr.v6.sin6_scope_id;
|
fl.oif = transport->saddr_h.v6.sin6_scope_id;
|
||||||
else
|
else
|
||||||
fl.oif = sk->sk_bound_dev_if;
|
fl.oif = sk->sk_bound_dev_if;
|
||||||
fl.fl_ip_sport = inet_sk(sk)->sport;
|
fl.fl_ip_sport = inet_sk(sk)->sport;
|
||||||
fl.fl_ip_dport = transport->ipaddr.v6.sin6_port;
|
fl.fl_ip_dport = transport->ipaddr_h.v6.sin6_port;
|
||||||
|
|
||||||
if (np->opt && np->opt->srcrt) {
|
if (np->opt && np->opt->srcrt) {
|
||||||
struct rt0_hdr *rt0 = (struct rt0_hdr *) np->opt->srcrt;
|
struct rt0_hdr *rt0 = (struct rt0_hdr *) np->opt->srcrt;
|
||||||
|
@ -290,11 +290,11 @@ static void sctp_v6_get_saddr(struct sctp_association *asoc,
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if ((laddr->use_as_src) &&
|
if ((laddr->use_as_src) &&
|
||||||
(laddr->a.sa.sa_family == AF_INET6) &&
|
(laddr->a_h.sa.sa_family == AF_INET6) &&
|
||||||
(scope <= sctp_scope(&laddr->a))) {
|
(scope <= sctp_scope(&laddr->a_h))) {
|
||||||
bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a);
|
bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a_h);
|
||||||
if (!baddr || (matchlen < bmatchlen)) {
|
if (!baddr || (matchlen < bmatchlen)) {
|
||||||
baddr = &laddr->a;
|
baddr = &laddr->a_h;
|
||||||
matchlen = bmatchlen;
|
matchlen = bmatchlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,10 +332,10 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
|
||||||
/* Add the address to the local list. */
|
/* Add the address to the local list. */
|
||||||
addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC);
|
addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
addr->a.v6.sin6_family = AF_INET6;
|
addr->a_h.v6.sin6_family = AF_INET6;
|
||||||
addr->a.v6.sin6_port = 0;
|
addr->a_h.v6.sin6_port = 0;
|
||||||
addr->a.v6.sin6_addr = ifp->addr;
|
addr->a_h.v6.sin6_addr = ifp->addr;
|
||||||
addr->a.v6.sin6_scope_id = dev->ifindex;
|
addr->a_h.v6.sin6_scope_id = dev->ifindex;
|
||||||
INIT_LIST_HEAD(&addr->list);
|
INIT_LIST_HEAD(&addr->list);
|
||||||
list_add_tail(&addr->list, addrlist);
|
list_add_tail(&addr->list, addrlist);
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,12 +155,12 @@ static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_commo
|
||||||
if (epb->type == SCTP_EP_TYPE_ASSOCIATION) {
|
if (epb->type == SCTP_EP_TYPE_ASSOCIATION) {
|
||||||
asoc = sctp_assoc(epb);
|
asoc = sctp_assoc(epb);
|
||||||
peer = asoc->peer.primary_path;
|
peer = asoc->peer.primary_path;
|
||||||
primary = &peer->saddr;
|
primary = &peer->saddr_h;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_for_each(pos, &epb->bind_addr.address_list) {
|
list_for_each(pos, &epb->bind_addr.address_list) {
|
||||||
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
addr = (union sctp_addr *)&laddr->a;
|
addr = (union sctp_addr *)&laddr->a_h;
|
||||||
af = sctp_get_af_specific(addr->sa.sa_family);
|
af = sctp_get_af_specific(addr->sa.sa_family);
|
||||||
if (primary && af->cmp_addr(addr, primary)) {
|
if (primary && af->cmp_addr(addr, primary)) {
|
||||||
seq_printf(seq, "*");
|
seq_printf(seq, "*");
|
||||||
|
@ -180,7 +180,7 @@ static void sctp_seq_dump_remote_addrs(struct seq_file *seq, struct sctp_associa
|
||||||
primary = &(assoc->peer.primary_addr);
|
primary = &(assoc->peer.primary_addr);
|
||||||
list_for_each(pos, &assoc->peer.transport_addr_list) {
|
list_for_each(pos, &assoc->peer.transport_addr_list) {
|
||||||
transport = list_entry(pos, struct sctp_transport, transports);
|
transport = list_entry(pos, struct sctp_transport, transports);
|
||||||
addr = (union sctp_addr *)&transport->ipaddr;
|
addr = (union sctp_addr *)&transport->ipaddr_h;
|
||||||
af = sctp_get_af_specific(addr->sa.sa_family);
|
af = sctp_get_af_specific(addr->sa.sa_family);
|
||||||
if (af->cmp_addr(addr, primary)) {
|
if (af->cmp_addr(addr, primary)) {
|
||||||
seq_printf(seq, "*");
|
seq_printf(seq, "*");
|
||||||
|
|
|
@ -150,9 +150,9 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist,
|
||||||
/* Add the address to the local list. */
|
/* Add the address to the local list. */
|
||||||
addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC);
|
addr = t_new(struct sctp_sockaddr_entry, GFP_ATOMIC);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
addr->a.v4.sin_family = AF_INET;
|
addr->a_h.v4.sin_family = AF_INET;
|
||||||
addr->a.v4.sin_port = 0;
|
addr->a_h.v4.sin_port = 0;
|
||||||
addr->a.v4.sin_addr.s_addr = ifa->ifa_local;
|
addr->a_h.v4.sin_addr.s_addr = ifa->ifa_local;
|
||||||
list_add_tail(&addr->list, addrlist);
|
list_add_tail(&addr->list, addrlist);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,17 +223,17 @@ int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope,
|
||||||
sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags);
|
sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags);
|
||||||
list_for_each(pos, &sctp_local_addr_list) {
|
list_for_each(pos, &sctp_local_addr_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_in_scope(&addr->a, scope)) {
|
if (sctp_in_scope(&addr->a_h, scope)) {
|
||||||
/* Now that the address is in scope, check to see if
|
/* Now that the address is in scope, check to see if
|
||||||
* the address type is really supported by the local
|
* the address type is really supported by the local
|
||||||
* sock as well as the remote peer.
|
* sock as well as the remote peer.
|
||||||
*/
|
*/
|
||||||
if ((((AF_INET == addr->a.sa.sa_family) &&
|
if ((((AF_INET == addr->a_h.sa.sa_family) &&
|
||||||
(copy_flags & SCTP_ADDR4_PEERSUPP))) ||
|
(copy_flags & SCTP_ADDR4_PEERSUPP))) ||
|
||||||
(((AF_INET6 == addr->a.sa.sa_family) &&
|
(((AF_INET6 == addr->a_h.sa.sa_family) &&
|
||||||
(copy_flags & SCTP_ADDR6_ALLOWED) &&
|
(copy_flags & SCTP_ADDR6_ALLOWED) &&
|
||||||
(copy_flags & SCTP_ADDR6_PEERSUPP)))) {
|
(copy_flags & SCTP_ADDR6_PEERSUPP)))) {
|
||||||
error = sctp_add_bind_addr(bp, &addr->a, 1,
|
error = sctp_add_bind_addr(bp, &addr->a_h, 1,
|
||||||
GFP_ATOMIC);
|
GFP_ATOMIC);
|
||||||
if (error)
|
if (error)
|
||||||
goto end_copy;
|
goto end_copy;
|
||||||
|
@ -482,7 +482,7 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
|
||||||
if (!laddr->use_as_src)
|
if (!laddr->use_as_src)
|
||||||
continue;
|
continue;
|
||||||
sctp_v4_dst_saddr(&dst_saddr, dst, bp->port);
|
sctp_v4_dst_saddr(&dst_saddr, dst, bp->port);
|
||||||
if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a))
|
if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a_h))
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
sctp_read_unlock(addr_lock);
|
sctp_read_unlock(addr_lock);
|
||||||
|
@ -502,8 +502,8 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc,
|
||||||
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
|
|
||||||
if ((laddr->use_as_src) &&
|
if ((laddr->use_as_src) &&
|
||||||
(AF_INET == laddr->a.sa.sa_family)) {
|
(AF_INET == laddr->a_h.sa.sa_family)) {
|
||||||
fl.fl4_src = laddr->a.v4.sin_addr.s_addr;
|
fl.fl4_src = laddr->a_h.v4.sin_addr.s_addr;
|
||||||
if (!ip_route_output_key(&rt, &fl)) {
|
if (!ip_route_output_key(&rt, &fl)) {
|
||||||
dst = &rt->u.dst;
|
dst = &rt->u.dst;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
|
@ -1031,7 +1031,7 @@ struct sctp_chunk *sctp_chunkify(struct sk_buff *skb,
|
||||||
void sctp_init_addrs(struct sctp_chunk *chunk, union sctp_addr *src,
|
void sctp_init_addrs(struct sctp_chunk *chunk, union sctp_addr *src,
|
||||||
union sctp_addr *dest)
|
union sctp_addr *dest)
|
||||||
{
|
{
|
||||||
memcpy(&chunk->source, src, sizeof(union sctp_addr));
|
memcpy(&chunk->source_h, src, sizeof(union sctp_addr));
|
||||||
memcpy(&chunk->dest, dest, sizeof(union sctp_addr));
|
memcpy(&chunk->dest, dest, sizeof(union sctp_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1040,10 +1040,10 @@ const union sctp_addr *sctp_source(const struct sctp_chunk *chunk)
|
||||||
{
|
{
|
||||||
/* If we have a known transport, use that. */
|
/* If we have a known transport, use that. */
|
||||||
if (chunk->transport) {
|
if (chunk->transport) {
|
||||||
return &chunk->transport->ipaddr;
|
return &chunk->transport->ipaddr_h;
|
||||||
} else {
|
} else {
|
||||||
/* Otherwise, extract it from the IP header. */
|
/* Otherwise, extract it from the IP header. */
|
||||||
return &chunk->source;
|
return &chunk->source_h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2594,7 +2594,7 @@ static int sctp_asconf_param_success(struct sctp_association *asoc,
|
||||||
sctp_write_lock(&asoc->base.addr_lock);
|
sctp_write_lock(&asoc->base.addr_lock);
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
saddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
saddr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_cmp_addr_exact(&saddr->a, &addr))
|
if (sctp_cmp_addr_exact(&saddr->a_h, &addr))
|
||||||
saddr->use_as_src = 1;
|
saddr->use_as_src = 1;
|
||||||
}
|
}
|
||||||
sctp_write_unlock(&asoc->base.addr_lock);
|
sctp_write_unlock(&asoc->base.addr_lock);
|
||||||
|
|
|
@ -441,8 +441,8 @@ static void sctp_do_8_2_transport_strike(struct sctp_association *asoc,
|
||||||
SCTP_DEBUG_PRINTK_IPADDR("transport_strike:association %p",
|
SCTP_DEBUG_PRINTK_IPADDR("transport_strike:association %p",
|
||||||
" transport IP: port:%d failed.\n",
|
" transport IP: port:%d failed.\n",
|
||||||
asoc,
|
asoc,
|
||||||
(&transport->ipaddr),
|
(&transport->ipaddr_h),
|
||||||
transport->ipaddr.v4.sin_port);
|
transport->ipaddr_h.v4.sin_port);
|
||||||
sctp_assoc_control_transport(asoc, transport,
|
sctp_assoc_control_transport(asoc, transport,
|
||||||
SCTP_TRANSPORT_DOWN,
|
SCTP_TRANSPORT_DOWN,
|
||||||
SCTP_FAILED_THRESHOLD);
|
SCTP_FAILED_THRESHOLD);
|
||||||
|
@ -833,9 +833,9 @@ static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
|
||||||
|
|
||||||
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
|
||||||
t = list_entry(pos, struct sctp_transport, transports);
|
t = list_entry(pos, struct sctp_transport, transports);
|
||||||
if (!sctp_cmp_addr_exact(&t->ipaddr,
|
if (!sctp_cmp_addr_exact(&t->ipaddr_h,
|
||||||
&asoc->peer.primary_addr)) {
|
&asoc->peer.primary_addr)) {
|
||||||
sctp_assoc_del_peer(asoc, &t->ipaddr);
|
sctp_assoc_del_peer(asoc, &t->ipaddr_h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -852,7 +852,7 @@ static sctp_disposition_t sctp_sf_heartbeat(const struct sctp_endpoint *ep,
|
||||||
|
|
||||||
hbinfo.param_hdr.type = SCTP_PARAM_HEARTBEAT_INFO;
|
hbinfo.param_hdr.type = SCTP_PARAM_HEARTBEAT_INFO;
|
||||||
hbinfo.param_hdr.length = htons(sizeof(sctp_sender_hb_info_t));
|
hbinfo.param_hdr.length = htons(sizeof(sctp_sender_hb_info_t));
|
||||||
hbinfo.daddr = transport->ipaddr;
|
hbinfo.daddr = transport->ipaddr_h;
|
||||||
hbinfo.sent_at = jiffies;
|
hbinfo.sent_at = jiffies;
|
||||||
hbinfo.hb_nonce = transport->hb_nonce;
|
hbinfo.hb_nonce = transport->hb_nonce;
|
||||||
|
|
||||||
|
@ -1167,8 +1167,8 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc,
|
||||||
list_for_each(pos2, &asoc->peer.transport_addr_list) {
|
list_for_each(pos2, &asoc->peer.transport_addr_list) {
|
||||||
addr = list_entry(pos2, struct sctp_transport,
|
addr = list_entry(pos2, struct sctp_transport,
|
||||||
transports);
|
transports);
|
||||||
if (sctp_cmp_addr_exact(&new_addr->ipaddr,
|
if (sctp_cmp_addr_exact(&new_addr->ipaddr_h,
|
||||||
&addr->ipaddr)) {
|
&addr->ipaddr_h)) {
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1179,7 +1179,7 @@ static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc,
|
||||||
|
|
||||||
/* If a new address was added, ABORT the sender. */
|
/* If a new address was added, ABORT the sender. */
|
||||||
if (!found && new_addr) {
|
if (!found && new_addr) {
|
||||||
sctp_sf_send_restart_abort(&new_addr->ipaddr, init, commands);
|
sctp_sf_send_restart_abort(&new_addr->ipaddr_h, init, commands);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return success if all addresses were found. */
|
/* Return success if all addresses were found. */
|
||||||
|
|
|
@ -551,7 +551,7 @@ static int sctp_send_asconf_add_ip(struct sock *sk,
|
||||||
laddr = list_entry(p, struct sctp_sockaddr_entry, list);
|
laddr = list_entry(p, struct sctp_sockaddr_entry, list);
|
||||||
sctp_read_unlock(&asoc->base.addr_lock);
|
sctp_read_unlock(&asoc->base.addr_lock);
|
||||||
|
|
||||||
chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs,
|
chunk = sctp_make_asconf_update_ip(asoc, &laddr->a_h, addrs,
|
||||||
addrcnt, SCTP_PARAM_ADD_IP);
|
addrcnt, SCTP_PARAM_ADD_IP);
|
||||||
if (!chunk) {
|
if (!chunk) {
|
||||||
retval = -ENOMEM;
|
retval = -ENOMEM;
|
||||||
|
@ -779,7 +779,7 @@ static int sctp_send_asconf_del_ip(struct sock *sk,
|
||||||
saddr = list_entry(pos1,
|
saddr = list_entry(pos1,
|
||||||
struct sctp_sockaddr_entry,
|
struct sctp_sockaddr_entry,
|
||||||
list);
|
list);
|
||||||
if (sctp_cmp_addr_exact(&saddr->a, &saveaddr))
|
if (sctp_cmp_addr_exact(&saddr->a_h, &saveaddr))
|
||||||
saddr->use_as_src = 0;
|
saddr->use_as_src = 0;
|
||||||
}
|
}
|
||||||
addr_buf += af->sockaddr_len;
|
addr_buf += af->sockaddr_len;
|
||||||
|
@ -3218,7 +3218,7 @@ static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
|
||||||
status.sstat_fragmentation_point = asoc->frag_point;
|
status.sstat_fragmentation_point = asoc->frag_point;
|
||||||
status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
|
status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
|
||||||
flip_to_n((union sctp_addr *)&status.sstat_primary.spinfo_address,
|
flip_to_n((union sctp_addr *)&status.sstat_primary.spinfo_address,
|
||||||
&transport->ipaddr);
|
&transport->ipaddr_h);
|
||||||
/* Map ipv4 address into v4-mapped-on-v6 address. */
|
/* Map ipv4 address into v4-mapped-on-v6 address. */
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
||||||
(union sctp_addr *)&status.sstat_primary.spinfo_address);
|
(union sctp_addr *)&status.sstat_primary.spinfo_address);
|
||||||
|
@ -3767,7 +3767,7 @@ static int sctp_getsockopt_peer_addrs_old(struct sock *sk, int len,
|
||||||
to = (void __user *)getaddrs.addrs;
|
to = (void __user *)getaddrs.addrs;
|
||||||
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
||||||
from = list_entry(pos, struct sctp_transport, transports);
|
from = list_entry(pos, struct sctp_transport, transports);
|
||||||
memcpy(&temp, &from->ipaddr, sizeof(temp));
|
memcpy(&temp, &from->ipaddr_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||||
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
||||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||||
|
@ -3816,7 +3816,7 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
|
||||||
|
|
||||||
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
list_for_each(pos, &asoc->peer.transport_addr_list) {
|
||||||
from = list_entry(pos, struct sctp_transport, transports);
|
from = list_entry(pos, struct sctp_transport, transports);
|
||||||
memcpy(&temp, &from->ipaddr, sizeof(temp));
|
memcpy(&temp, &from->ipaddr_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||||
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len;
|
||||||
if(space_left < addrlen)
|
if(space_left < addrlen)
|
||||||
|
@ -3882,14 +3882,14 @@ static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len,
|
||||||
if (sctp_list_single_entry(&bp->address_list)) {
|
if (sctp_list_single_entry(&bp->address_list)) {
|
||||||
addr = list_entry(bp->address_list.next,
|
addr = list_entry(bp->address_list.next,
|
||||||
struct sctp_sockaddr_entry, list);
|
struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_is_any(&addr->a)) {
|
if (sctp_is_any(&addr->a_h)) {
|
||||||
sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags);
|
sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags);
|
||||||
list_for_each(pos, &sctp_local_addr_list) {
|
list_for_each(pos, &sctp_local_addr_list) {
|
||||||
addr = list_entry(pos,
|
addr = list_entry(pos,
|
||||||
struct sctp_sockaddr_entry,
|
struct sctp_sockaddr_entry,
|
||||||
list);
|
list);
|
||||||
if ((PF_INET == sk->sk_family) &&
|
if ((PF_INET == sk->sk_family) &&
|
||||||
(AF_INET6 == addr->a.sa.sa_family))
|
(AF_INET6 == addr->a_h.sa.sa_family))
|
||||||
continue;
|
continue;
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
|
@ -3927,9 +3927,9 @@ static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_add
|
||||||
list_for_each(pos, &sctp_local_addr_list) {
|
list_for_each(pos, &sctp_local_addr_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if ((PF_INET == sk->sk_family) &&
|
if ((PF_INET == sk->sk_family) &&
|
||||||
(AF_INET6 == addr->a.sa.sa_family))
|
(AF_INET6 == addr->a_h.sa.sa_family))
|
||||||
continue;
|
continue;
|
||||||
memcpy(&temp, &addr->a, sizeof(temp));
|
memcpy(&temp, &addr->a_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
||||||
&temp);
|
&temp);
|
||||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||||
|
@ -3962,9 +3962,9 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port,
|
||||||
list_for_each(pos, &sctp_local_addr_list) {
|
list_for_each(pos, &sctp_local_addr_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
if ((PF_INET == sk->sk_family) &&
|
if ((PF_INET == sk->sk_family) &&
|
||||||
(AF_INET6 == addr->a.sa.sa_family))
|
(AF_INET6 == addr->a_h.sa.sa_family))
|
||||||
continue;
|
continue;
|
||||||
memcpy(&temp, &addr->a, sizeof(temp));
|
memcpy(&temp, &addr->a_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
|
||||||
&temp);
|
&temp);
|
||||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||||
|
@ -4038,7 +4038,7 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
|
||||||
if (sctp_list_single_entry(&bp->address_list)) {
|
if (sctp_list_single_entry(&bp->address_list)) {
|
||||||
addr = list_entry(bp->address_list.next,
|
addr = list_entry(bp->address_list.next,
|
||||||
struct sctp_sockaddr_entry, list);
|
struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_is_any(&addr->a)) {
|
if (sctp_is_any(&addr->a_h)) {
|
||||||
cnt = sctp_copy_laddrs_to_user_old(sk, bp->port,
|
cnt = sctp_copy_laddrs_to_user_old(sk, bp->port,
|
||||||
getaddrs.addr_num,
|
getaddrs.addr_num,
|
||||||
to);
|
to);
|
||||||
|
@ -4052,7 +4052,7 @@ static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len,
|
||||||
|
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
memcpy(&temp, &addr->a, sizeof(temp));
|
memcpy(&temp, &addr->a_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||||
temp.v4.sin_port = htons(temp.v4.sin_port);
|
temp.v4.sin_port = htons(temp.v4.sin_port);
|
||||||
|
@ -4128,7 +4128,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
|
||||||
if (sctp_list_single_entry(&bp->address_list)) {
|
if (sctp_list_single_entry(&bp->address_list)) {
|
||||||
addr = list_entry(bp->address_list.next,
|
addr = list_entry(bp->address_list.next,
|
||||||
struct sctp_sockaddr_entry, list);
|
struct sctp_sockaddr_entry, list);
|
||||||
if (sctp_is_any(&addr->a)) {
|
if (sctp_is_any(&addr->a_h)) {
|
||||||
cnt = sctp_copy_laddrs_to_user(sk, bp->port,
|
cnt = sctp_copy_laddrs_to_user(sk, bp->port,
|
||||||
&to, space_left);
|
&to, space_left);
|
||||||
if (cnt < 0) {
|
if (cnt < 0) {
|
||||||
|
@ -4141,7 +4141,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
|
||||||
|
|
||||||
list_for_each(pos, &bp->address_list) {
|
list_for_each(pos, &bp->address_list) {
|
||||||
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
addr = list_entry(pos, struct sctp_sockaddr_entry, list);
|
||||||
memcpy(&temp, &addr->a, sizeof(temp));
|
memcpy(&temp, &addr->a_h, sizeof(temp));
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
|
||||||
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
|
||||||
if(space_left < addrlen)
|
if(space_left < addrlen)
|
||||||
|
@ -4195,7 +4195,7 @@ static int sctp_getsockopt_primary_addr(struct sock *sk, int len,
|
||||||
return -ENOTCONN;
|
return -ENOTCONN;
|
||||||
|
|
||||||
flip_to_n((union sctp_addr *)&prim.ssp_addr,
|
flip_to_n((union sctp_addr *)&prim.ssp_addr,
|
||||||
&asoc->peer.primary_path->ipaddr);
|
&asoc->peer.primary_path->ipaddr_h);
|
||||||
|
|
||||||
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp,
|
sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp,
|
||||||
(union sctp_addr *)&prim.ssp_addr);
|
(union sctp_addr *)&prim.ssp_addr);
|
||||||
|
|
|
@ -61,12 +61,12 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
|
||||||
gfp_t gfp)
|
gfp_t gfp)
|
||||||
{
|
{
|
||||||
/* Copy in the address. */
|
/* Copy in the address. */
|
||||||
peer->ipaddr = *addr;
|
peer->ipaddr_h = *addr;
|
||||||
peer->af_specific = sctp_get_af_specific(addr->sa.sa_family);
|
peer->af_specific = sctp_get_af_specific(addr->sa.sa_family);
|
||||||
peer->asoc = NULL;
|
peer->asoc = NULL;
|
||||||
|
|
||||||
peer->dst = NULL;
|
peer->dst = NULL;
|
||||||
memset(&peer->saddr, 0, sizeof(union sctp_addr));
|
memset(&peer->saddr_h, 0, sizeof(union sctp_addr));
|
||||||
|
|
||||||
/* From 6.3.1 RTO Calculation:
|
/* From 6.3.1 RTO Calculation:
|
||||||
*
|
*
|
||||||
|
@ -232,7 +232,7 @@ void sctp_transport_pmtu(struct sctp_transport *transport)
|
||||||
{
|
{
|
||||||
struct dst_entry *dst;
|
struct dst_entry *dst;
|
||||||
|
|
||||||
dst = transport->af_specific->get_dst(NULL, &transport->ipaddr, NULL);
|
dst = transport->af_specific->get_dst(NULL, &transport->ipaddr_h, NULL);
|
||||||
|
|
||||||
if (dst) {
|
if (dst) {
|
||||||
transport->pathmtu = dst_mtu(dst);
|
transport->pathmtu = dst_mtu(dst);
|
||||||
|
@ -249,15 +249,15 @@ void sctp_transport_route(struct sctp_transport *transport,
|
||||||
{
|
{
|
||||||
struct sctp_association *asoc = transport->asoc;
|
struct sctp_association *asoc = transport->asoc;
|
||||||
struct sctp_af *af = transport->af_specific;
|
struct sctp_af *af = transport->af_specific;
|
||||||
union sctp_addr *daddr = &transport->ipaddr;
|
union sctp_addr *daddr = &transport->ipaddr_h;
|
||||||
struct dst_entry *dst;
|
struct dst_entry *dst;
|
||||||
|
|
||||||
dst = af->get_dst(asoc, daddr, saddr);
|
dst = af->get_dst(asoc, daddr, saddr);
|
||||||
|
|
||||||
if (saddr)
|
if (saddr)
|
||||||
memcpy(&transport->saddr, saddr, sizeof(union sctp_addr));
|
memcpy(&transport->saddr_h, saddr, sizeof(union sctp_addr));
|
||||||
else
|
else
|
||||||
af->get_saddr(asoc, dst, daddr, &transport->saddr);
|
af->get_saddr(asoc, dst, daddr, &transport->saddr_h);
|
||||||
|
|
||||||
transport->dst = dst;
|
transport->dst = dst;
|
||||||
if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) {
|
if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) {
|
||||||
|
@ -270,7 +270,7 @@ void sctp_transport_route(struct sctp_transport *transport,
|
||||||
* association's active path for getsockname().
|
* association's active path for getsockname().
|
||||||
*/
|
*/
|
||||||
if (asoc && (transport == asoc->peer.active_path))
|
if (asoc && (transport == asoc->peer.active_path))
|
||||||
opt->pf->af->to_sk_saddr(&transport->saddr,
|
opt->pf->af->to_sk_saddr(&transport->saddr_h,
|
||||||
asoc->base.sk);
|
asoc->base.sk);
|
||||||
} else
|
} else
|
||||||
transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT;
|
transport->pathmtu = SCTP_DEFAULT_MAXSEGMENT;
|
||||||
|
|
Loading…
Reference in a new issue