]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/sctp/associola.c
[CRYPTO] dm-crypt: Select CRYPTO_CBC
[linux-2.6-omap-h63xx.git] / net / sctp / associola.c
index 7824aeaa3d60d89737de29a4c8c2ca2e108bf30a..ad0057db0f91884b39a393b06759bdc383c9776b 100644 (file)
@@ -61,7 +61,7 @@
 #include <net/sctp/sm.h>
 
 /* Forward declarations for internal functions. */
-static void sctp_assoc_bh_rcv(struct sctp_association *asoc);
+static void sctp_assoc_bh_rcv(struct work_struct *work);
 
 
 /* 1st Level Abstractions. */
@@ -269,9 +269,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 
        /* Create an input queue.  */
        sctp_inq_init(&asoc->base.inqueue);
-       sctp_inq_set_th_handler(&asoc->base.inqueue,
-                                   (void (*)(void *))sctp_assoc_bh_rcv,
-                                   asoc);
+       sctp_inq_set_th_handler(&asoc->base.inqueue, sctp_assoc_bh_rcv);
 
        /* Create an output queue.  */
        sctp_outq_init(asoc, &asoc->outqueue);
@@ -487,8 +485,8 @@ void sctp_assoc_rm_peer(struct sctp_association *asoc,
        SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_rm_peer:association %p addr: ",
                                 " port: %d\n",
                                 asoc,
-                                (&peer->ipaddr_h),
-                                peer->ipaddr_h.v4.sin_port);
+                                (&peer->ipaddr),
+                                ntohs(peer->ipaddr.v4.sin_port));
 
        /* If we are to remove the current retran_path, update it
         * to the next peer before removing this peer from the list.
@@ -533,19 +531,17 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
        struct sctp_transport *peer;
        struct sctp_sock *sp;
        unsigned short port;
-       union sctp_addr tmp;
-       flip_to_n(&tmp, addr);
 
        sp = sctp_sk(asoc->base.sk);
 
        /* AF_INET and AF_INET6 share common port field. */
-       port = addr->v4.sin_port;
+       port = ntohs(addr->v4.sin_port);
 
        SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_add_peer:association %p addr: ",
                                 " port: %d state:%d\n",
                                 asoc,
                                 addr,
-                                addr->v4.sin_port,
+                                port,
                                 peer_state);
 
        /* Set the port if it has not been set yet.  */
@@ -553,7 +549,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
                asoc->peer.port = port;
 
        /* Check to see if this is a duplicate. */
-       peer = sctp_assoc_lookup_paddr(asoc, &tmp);
+       peer = sctp_assoc_lookup_paddr(asoc, addr);
        if (peer) {
                if (peer->state == SCTP_UNKNOWN) {
                        if (peer_state == SCTP_ACTIVE)
@@ -564,7 +560,7 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
                return peer;
        }
 
-       peer = sctp_transport_new(&tmp, gfp);
+       peer = sctp_transport_new(addr, gfp);
        if (!peer)
                return NULL;
 
@@ -735,7 +731,7 @@ void sctp_assoc_control_transport(struct sctp_association *asoc,
         * user.
         */
        memset(&addr, 0, sizeof(struct sockaddr_storage));
-       flip_to_n((union sctp_addr *)&addr, &transport->ipaddr_h);
+       memcpy(&addr, &transport->ipaddr, transport->af_specific->sockaddr_len);
        event = sctp_ulpevent_make_peer_addr_change(asoc, &addr,
                                0, spc_state, error, GFP_ATOMIC);
        if (event)
@@ -948,8 +944,11 @@ out:
 }
 
 /* Do delayed input processing.  This is scheduled by sctp_rcv(). */
-static void sctp_assoc_bh_rcv(struct sctp_association *asoc)
+static void sctp_assoc_bh_rcv(struct work_struct *work)
 {
+       struct sctp_association *asoc =
+               container_of(work, struct sctp_association,
+                            base.inqueue.immediate);
        struct sctp_endpoint *ep;
        struct sctp_chunk *chunk;
        struct sock *sk;
@@ -1070,7 +1069,7 @@ void sctp_assoc_update(struct sctp_association *asoc,
                        trans = list_entry(pos, struct sctp_transport,
                                           transports);
                        if (!sctp_assoc_lookup_paddr(asoc, &trans->ipaddr))
-                               sctp_assoc_add_peer(asoc, &trans->ipaddr_h,
+                               sctp_assoc_add_peer(asoc, &trans->ipaddr,
                                                    GFP_ATOMIC, trans->state);
                }
 
@@ -1138,8 +1137,8 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
                                 " %p addr: ",
                                 " port: %d\n",
                                 asoc,
-                                (&t->ipaddr_h),
-                                t->ipaddr_h.v4.sin_port);
+                                (&t->ipaddr),
+                                ntohs(t->ipaddr.v4.sin_port));
 }
 
 /* Choose the transport for sending a INIT packet.  */
@@ -1163,8 +1162,8 @@ struct sctp_transport *sctp_assoc_choose_init_transport(
                                 " %p addr: ",
                                 " port: %d\n",
                                 asoc,
-                                (&t->ipaddr_h),
-                                t->ipaddr_h.v4.sin_port);
+                                (&t->ipaddr),
+                                ntohs(t->ipaddr.v4.sin_port));
 
        return t;
 }
@@ -1309,7 +1308,7 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
        /* Use scoping rules to determine the subset of addresses from
         * the endpoint.
         */
-       scope = sctp_scope(&asoc->peer.active_path->ipaddr_h);
+       scope = sctp_scope(&asoc->peer.active_path->ipaddr);
        flags = (PF_INET6 == asoc->base.sk->sk_family) ? SCTP_ADDR6_ALLOWED : 0;
        if (asoc->peer.ipv4_address)
                flags |= SCTP_ADDR4_PEERSUPP;