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;
!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);
struct sock *sk = NULL;
struct sctp_association *asoc;
struct sctp_transport *transport = NULL;
+ union sctp_addr tmp, tmp2;
*app = NULL; *tpp = NULL;
/* 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;
/* 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) {
{
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;
}
sctp_init_chunk_t *init;
struct sctp_transport *transport;
struct sctp_af *af;
+ union sctp_addr tmp2;
ch = (sctp_chunkhdr_t *) skb->data;
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;
}