struct sctphdr *sh;
        union sctp_addr src;
        union sctp_addr dest;
-       union sctp_addr tmp, tmp2;
        int family;
        struct sctp_af *af;
 
            !af->addr_valid(&dest, NULL, skb))
                goto discard_it;
 
-       flip_to_n(&tmp, &dest);
-       flip_to_n(&tmp2, &src);
-
-       asoc = __sctp_rcv_lookup(skb, &tmp2, &tmp, &transport);
+       asoc = __sctp_rcv_lookup(skb, &src, &dest, &transport);
 
        if (!asoc)
-               ep = __sctp_rcv_lookup_endpoint(&tmp);
+               ep = __sctp_rcv_lookup_endpoint(&dest);
 
        /* Retrieve the common input handling substructure. */
        rcvr = asoc ? &asoc->base : &ep->base;
        chunk->sctp_hdr = sh;
 
        /* Set the source and destination addresses of the incoming chunk.  */
-       sctp_init_addrs(chunk, &tmp2, &tmp);
+       sctp_init_addrs(chunk, &src, &dest);
 
        /* Remember where we came from.  */
        chunk->transport = transport;
        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(&tmp, &tmp2, &transport);
+       asoc = __sctp_lookup_association(&saddr, &daddr, &transport);
        if (!asoc)
                return NULL;
 
 
                             int is_saddr)
 {
        void *from;
-       __u16 *port;
+       __be16 *port;
        struct sctphdr *sh;
 
        port = &addr->v6.sin6_port;
 
        sh = (struct sctphdr *) skb->h.raw;
        if (is_saddr) {
-               *port  = ntohs(sh->source);
+               *port  = sh->source;
                from = &skb->nh.ipv6h->saddr;
        } else {
-               *port = ntohs(sh->dest);
+               *port = sh->dest;
                from = &skb->nh.ipv6h->daddr;
        }
        ipv6_addr_copy(&addr->v6.sin6_addr, from);
 
                             int is_saddr)
 {
        void *from;
-       __u16 *port;
+       __be16 *port;
        struct sctphdr *sh;
 
        port = &addr->v4.sin_port;
 
        sh = (struct sctphdr *) skb->h.raw;
        if (is_saddr) {
-               *port  = ntohs(sh->source);
+               *port  = sh->source;
                from = &skb->nh.iph->saddr;
        } else {
-               *port = ntohs(sh->dest);
+               *port = sh->dest;
                from = &skb->nh.iph->daddr;
        }
        memcpy(&addr->v4.sin_addr.s_addr, from, sizeof(struct in_addr));
 
        struct sk_buff *skb;
        sctp_scope_t scope;
        struct sctp_af *af;
-       union sctp_addr tmp;
 
        /* Create the bare association.  */
        scope = sctp_scope(sctp_source(chunk));
        af = sctp_get_af_specific(ipver2af(skb->nh.iph->version));
        if (unlikely(!af))
                goto fail;
-       af->from_skb(&tmp, skb, 1);
-       flip_to_n(&asoc->c.peer_addr, &tmp);
+       af->from_skb(&asoc->c.peer_addr, skb, 1);
 nodata:
        return asoc;