diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-11-20 17:08:41 -0800 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-12-02 21:26:41 -0800 |
commit | e2fccedb0136205d02e97a41851503e2b96d2a17 (patch) | |
tree | 053ce92764dfac3e71d3a21786eff2b79a74cb72 | |
parent | 1c7d1fc14974f44809b22521bd9796411d8ba440 (diff) | |
download | op-kernel-dev-e2fccedb0136205d02e97a41851503e2b96d2a17.zip op-kernel-dev-e2fccedb0136205d02e97a41851503e2b96d2a17.tar.gz |
[SCTP]: Switch sctp_assoc_is_match to net-endian.
Along with it, statics in input.c that end up calling it
(__sctp_lookup_association, sctp_lookup_association,
__sctp_rcv_init_lookup, __sctp_rcv_lookup). Callers
are adjusted.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/sctp/associola.c | 11 | ||||
-rw-r--r-- | net/sctp/input.c | 23 |
2 files changed, 20 insertions, 14 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index 3be8b60..4bd916c 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c @@ -927,19 +927,16 @@ struct sctp_transport *sctp_assoc_is_match(struct sctp_association *asoc, const union sctp_addr *paddr) { struct sctp_transport *transport; - union sctp_addr tmp, tmp2; - flip_to_n(&tmp, laddr); - flip_to_n(&tmp2, paddr); sctp_read_lock(&asoc->base.addr_lock); - if ((asoc->base.bind_addr.port == laddr->v4.sin_port) && - (asoc->peer.port == paddr->v4.sin_port)) { - transport = sctp_assoc_lookup_paddr(asoc, &tmp2); + if ((htons(asoc->base.bind_addr.port) == laddr->v4.sin_port) && + (htons(asoc->peer.port) == paddr->v4.sin_port)) { + transport = sctp_assoc_lookup_paddr(asoc, paddr); if (!transport) goto out; - if (sctp_bind_addr_match(&asoc->base.bind_addr, &tmp, + if (sctp_bind_addr_match(&asoc->base.bind_addr, laddr, sctp_sk(asoc->base.sk))) goto out; } diff --git a/net/sctp/input.c b/net/sctp/input.c index 1bb3f26..85b3441 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -127,7 +127,7 @@ int sctp_rcv(struct sk_buff *skb) struct sctphdr *sh; union sctp_addr src; union sctp_addr dest; - union sctp_addr tmp; + union sctp_addr tmp, tmp2; int family; struct sctp_af *af; @@ -179,9 +179,10 @@ int sctp_rcv(struct sk_buff *skb) !af->addr_valid(&dest, NULL, skb)) goto discard_it; - asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport); - flip_to_n(&tmp, &dest); + flip_to_n(&tmp2, &src); + + asoc = __sctp_rcv_lookup(skb, &tmp2, &tmp, &transport); if (!asoc) ep = __sctp_rcv_lookup_endpoint(&tmp); @@ -443,6 +444,7 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, struct sock *sk = NULL; struct sctp_association *asoc; struct sctp_transport *transport = NULL; + union sctp_addr tmp, tmp2; *app = NULL; *tpp = NULL; @@ -454,11 +456,13 @@ struct sock *sctp_err_lookup(int family, struct sk_buff *skb, /* Initialize local addresses for lookups. */ af->from_skb(&saddr, skb, 1); af->from_skb(&daddr, skb, 0); + flip_to_n(&tmp, &saddr); + flip_to_n(&tmp2, &daddr); /* Look for an association that matches the incoming ICMP error * packet. */ - asoc = __sctp_lookup_association(&saddr, &daddr, &transport); + asoc = __sctp_lookup_association(&tmp, &tmp2, &transport); if (!asoc) return NULL; @@ -833,7 +837,7 @@ static struct sctp_association *__sctp_lookup_association( /* Optimize here for direct hit, only listening connections can * have wildcards anyways. */ - hash = sctp_assoc_hashfn(local->v4.sin_port, peer->v4.sin_port); + hash = sctp_assoc_hashfn(ntohs(local->v4.sin_port), ntohs(peer->v4.sin_port)); head = &sctp_assoc_hashtable[hash]; read_lock(&head->lock); for (epb = head->chain; epb; epb = epb->next) { @@ -875,8 +879,11 @@ int sctp_has_association(const union sctp_addr *laddr, { struct sctp_association *asoc; struct sctp_transport *transport; + union sctp_addr tmp, tmp2; + flip_to_n(&tmp, laddr); + flip_to_n(&tmp2, paddr); - if ((asoc = sctp_lookup_association(laddr, paddr, &transport))) { + if ((asoc = sctp_lookup_association(&tmp, &tmp2, &transport))) { sctp_association_put(asoc); return 1; } @@ -914,6 +921,7 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb, sctp_init_chunk_t *init; struct sctp_transport *transport; struct sctp_af *af; + union sctp_addr tmp2; ch = (sctp_chunkhdr_t *) skb->data; @@ -961,8 +969,9 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb, continue; af->from_addr_param(paddr, params.addr, ntohs(sh->source), 0); + flip_to_n(&tmp2, paddr); - asoc = __sctp_lookup_association(laddr, paddr, &transport); + asoc = __sctp_lookup_association(laddr, &tmp2, &transport); if (asoc) return asoc; } |