Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[safe/jmp/linux-2.6] / net / sctp / transport.c
index 4a36803..d67501f 100644 (file)
@@ -64,9 +64,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
        /* Copy in the address.  */
        peer->ipaddr = *addr;
        peer->af_specific = sctp_get_af_specific(addr->sa.sa_family);
-       peer->asoc = NULL;
-
-       peer->dst = NULL;
        memset(&peer->saddr, 0, sizeof(union sctp_addr));
 
        /* From 6.3.1 RTO Calculation:
@@ -76,34 +73,21 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
         * parameter 'RTO.Initial'.
         */
        peer->rto = msecs_to_jiffies(sctp_rto_initial);
-       peer->rtt = 0;
-       peer->rttvar = 0;
-       peer->srtt = 0;
-       peer->rto_pending = 0;
-       peer->hb_sent = 0;
-       peer->fast_recovery = 0;
 
        peer->last_time_heard = jiffies;
        peer->last_time_ecne_reduced = jiffies;
 
-       peer->init_sent_count = 0;
-
        peer->param_flags = SPP_HB_DISABLE |
                            SPP_PMTUD_ENABLE |
                            SPP_SACKDELAY_ENABLE;
-       peer->hbinterval  = 0;
 
        /* Initialize the default path max_retrans.  */
        peer->pathmaxrxt  = sctp_max_retrans_path;
-       peer->error_count = 0;
 
        INIT_LIST_HEAD(&peer->transmitted);
        INIT_LIST_HEAD(&peer->send_ready);
        INIT_LIST_HEAD(&peer->transports);
 
-       peer->T3_rtx_timer.expires = 0;
-       peer->hb_timer.expires = 0;
-
        setup_timer(&peer->T3_rtx_timer, sctp_generate_t3_rtx_event,
                        (unsigned long)peer);
        setup_timer(&peer->hb_timer, sctp_generate_heartbeat_event,
@@ -115,15 +99,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
        get_random_bytes(&peer->hb_nonce, sizeof(peer->hb_nonce));
 
        atomic_set(&peer->refcnt, 1);
-       peer->dead = 0;
-
-       peer->malloced = 0;
-
-       /* Initialize the state information for SFR-CACC */
-       peer->cacc.changeover_active = 0;
-       peer->cacc.cycling_changeover = 0;
-       peer->cacc.next_tsn_at_change = 0;
-       peer->cacc.cacc_saw_newack = 0;
 
        return peer;
 }
@@ -197,7 +172,7 @@ static void sctp_transport_destroy(struct sctp_transport *transport)
 /* Start T3_rtx timer if it is not already running and update the heartbeat
  * timer.  This routine is called every time a DATA chunk is sent.
  */
-void sctp_transport_reset_timers(struct sctp_transport *transport, int force)
+void sctp_transport_reset_timers(struct sctp_transport *transport)
 {
        /* RFC 2960 6.3.2 Retransmission Timer Rules
         *
@@ -207,7 +182,7 @@ void sctp_transport_reset_timers(struct sctp_transport *transport, int force)
         * address.
         */
 
-       if (force || !timer_pending(&transport->T3_rtx_timer))
+       if (!timer_pending(&transport->T3_rtx_timer))
                if (!mod_timer(&transport->T3_rtx_timer,
                               jiffies + transport->rto))
                        sctp_transport_hold(transport);
@@ -405,15 +380,16 @@ void sctp_transport_update_rto(struct sctp_transport *tp, __u32 rtt)
 void sctp_transport_raise_cwnd(struct sctp_transport *transport,
                               __u32 sack_ctsn, __u32 bytes_acked)
 {
+       struct sctp_association *asoc = transport->asoc;
        __u32 cwnd, ssthresh, flight_size, pba, pmtu;
 
        cwnd = transport->cwnd;
        flight_size = transport->flight_size;
 
        /* See if we need to exit Fast Recovery first */
-       if (transport->fast_recovery &&
-           TSN_lte(transport->fast_recovery_exit, sack_ctsn))
-               transport->fast_recovery = 0;
+       if (asoc->fast_recovery &&
+           TSN_lte(asoc->fast_recovery_exit, sack_ctsn))
+               asoc->fast_recovery = 0;
 
        /* The appropriate cwnd increase algorithm is performed if, and only
         * if the cumulative TSN whould advanced and the congestion window is
@@ -442,7 +418,7 @@ void sctp_transport_raise_cwnd(struct sctp_transport *transport,
                 *    2) the destination's path MTU.  This upper bound protects
                 *    against the ACK-Splitting attack outlined in [SAVAGE99].
                 */
-               if (transport->fast_recovery)
+               if (asoc->fast_recovery)
                        return;
 
                if (bytes_acked > pmtu)
@@ -493,6 +469,8 @@ void sctp_transport_raise_cwnd(struct sctp_transport *transport,
 void sctp_transport_lower_cwnd(struct sctp_transport *transport,
                               sctp_lower_cwnd_t reason)
 {
+       struct sctp_association *asoc = transport->asoc;
+
        switch (reason) {
        case SCTP_LOWER_CWND_T3_RTX:
                /* RFC 2960 Section 7.2.3, sctpimpguide
@@ -503,11 +481,11 @@ void sctp_transport_lower_cwnd(struct sctp_transport *transport,
                 *      partial_bytes_acked = 0
                 */
                transport->ssthresh = max(transport->cwnd/2,
-                                         4*transport->asoc->pathmtu);
-               transport->cwnd = transport->asoc->pathmtu;
+                                         4*asoc->pathmtu);
+               transport->cwnd = asoc->pathmtu;
 
-               /* T3-rtx also clears fast recovery on the transport */
-               transport->fast_recovery = 0;
+               /* T3-rtx also clears fast recovery */
+               asoc->fast_recovery = 0;
                break;
 
        case SCTP_LOWER_CWND_FAST_RTX:
@@ -523,15 +501,15 @@ void sctp_transport_lower_cwnd(struct sctp_transport *transport,
                 *      cwnd = ssthresh
                 *      partial_bytes_acked = 0
                 */
-               if (transport->fast_recovery)
+               if (asoc->fast_recovery)
                        return;
 
                /* Mark Fast recovery */
-               transport->fast_recovery = 1;
-               transport->fast_recovery_exit = transport->asoc->next_tsn - 1;
+               asoc->fast_recovery = 1;
+               asoc->fast_recovery_exit = asoc->next_tsn - 1;
 
                transport->ssthresh = max(transport->cwnd/2,
-                                         4*transport->asoc->pathmtu);
+                                         4*asoc->pathmtu);
                transport->cwnd = transport->ssthresh;
                break;
 
@@ -551,7 +529,7 @@ void sctp_transport_lower_cwnd(struct sctp_transport *transport,
                if (time_after(jiffies, transport->last_time_ecne_reduced +
                                        transport->rtt)) {
                        transport->ssthresh = max(transport->cwnd/2,
-                                                 4*transport->asoc->pathmtu);
+                                                 4*asoc->pathmtu);
                        transport->cwnd = transport->ssthresh;
                        transport->last_time_ecne_reduced = jiffies;
                }
@@ -567,7 +545,7 @@ void sctp_transport_lower_cwnd(struct sctp_transport *transport,
                 * interval.
                 */
                transport->cwnd = max(transport->cwnd/2,
-                                        4*transport->asoc->pathmtu);
+                                        4*asoc->pathmtu);
                break;
        }
 
@@ -652,7 +630,6 @@ void sctp_transport_reset(struct sctp_transport *t)
        t->error_count = 0;
        t->rto_pending = 0;
        t->hb_sent = 0;
-       t->fast_recovery = 0;
 
        /* Initialize the state information for SFR-CACC */
        t->cacc.changeover_active = 0;