]> Pileus Git - ~andy/linux/blobdiff - net/sctp/associola.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[~andy/linux] / net / sctp / associola.c
index 31ed008c8e13e88b88935c5d83a503bdc089076e..5ae60920067470463420f0b3aa879e7c0999f200 100644 (file)
@@ -22,9 +22,8 @@
  * See the GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with GNU CC; see the file COPYING.  If not, write to
- * the Free Software Foundation, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * along with GNU CC; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
  * Please send any bug reports or fixes you make to the
  * email address(es):
@@ -90,14 +89,12 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 
        /* Initialize the object handling fields.  */
        atomic_set(&asoc->base.refcnt, 1);
-       asoc->base.dead = false;
 
        /* Initialize the bind addr area.  */
        sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
 
        asoc->state = SCTP_STATE_CLOSED;
        asoc->cookie_life = ms_to_ktime(sp->assocparams.sasoc_cookie_life);
-       asoc->frag_point = 0;
        asoc->user_frag = sp->user_frag;
 
        /* Set the association max_retrans and RTO values from the
@@ -110,8 +107,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        asoc->rto_max = msecs_to_jiffies(sp->rtoinfo.srto_max);
        asoc->rto_min = msecs_to_jiffies(sp->rtoinfo.srto_min);
 
-       asoc->overall_error_count = 0;
-
        /* Initialize the association's heartbeat interval based on the
         * sock configured value.
         */
@@ -132,18 +127,15 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
         */
        asoc->param_flags = sp->param_flags;
 
-       /* Initialize the maximum mumber of new data packets that can be sent
+       /* Initialize the maximum number of new data packets that can be sent
         * in a burst.
         */
        asoc->max_burst = sp->max_burst;
 
        /* initialize association timers */
-       asoc->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0;
        asoc->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] = asoc->rto_initial;
        asoc->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] = asoc->rto_initial;
        asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = asoc->rto_initial;
-       asoc->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0;
-       asoc->timeouts[SCTP_EVENT_TIMEOUT_T4_RTO] = 0;
 
        /* sctpimpguide Section 2.12.2
         * If the 'T5-shutdown-guard' timer is used, it SHOULD be set to the
@@ -152,7 +144,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        asoc->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD]
                = 5 * asoc->rto_max;
 
-       asoc->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = 0;
        asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] = asoc->sackdelay;
        asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] = sp->autoclose * HZ;
 
@@ -172,11 +163,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        asoc->max_init_timeo =
                 msecs_to_jiffies(sp->initmsg.sinit_max_init_timeo);
 
-       /* Allocate storage for the ssnmap after the inbound and outbound
-        * streams have been negotiated during Init.
-        */
-       asoc->ssnmap = NULL;
-
        /* Set the local window size for receive.
         * This is also the rcvbuf space per association.
         * RFC 6 - A SCTP receiver MUST be able to receive a minimum of
@@ -189,25 +175,15 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 
        asoc->a_rwnd = asoc->rwnd;
 
-       asoc->rwnd_over = 0;
-       asoc->rwnd_press = 0;
-
        /* Use my own max window until I learn something better.  */
        asoc->peer.rwnd = SCTP_DEFAULT_MAXWINDOW;
 
-       /* Set the sndbuf size for transmit.  */
-       asoc->sndbuf_used = 0;
-
        /* Initialize the receive memory counter */
        atomic_set(&asoc->rmem_alloc, 0);
 
        init_waitqueue_head(&asoc->wait);
 
        asoc->c.my_vtag = sctp_generate_tag(ep);
-       asoc->peer.i.init_tag = 0;     /* INIT needs a vtag of 0. */
-       asoc->c.peer_vtag = 0;
-       asoc->c.my_ttag   = 0;
-       asoc->c.peer_ttag = 0;
        asoc->c.my_port = ep->base.bind_addr.port;
 
        asoc->c.initial_tsn = sctp_generate_tsn(ep);
@@ -218,7 +194,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        asoc->adv_peer_ack_point = asoc->ctsn_ack_point;
        asoc->highest_sacked = asoc->ctsn_ack_point;
        asoc->last_cwr_tsn = asoc->ctsn_ack_point;
-       asoc->unack_data = 0;
 
        /* ADDIP Section 4.1 Asconf Chunk Procedures
         *
@@ -237,7 +212,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
 
        /* Make an empty list of remote transport addresses.  */
        INIT_LIST_HEAD(&asoc->peer.transport_addr_list);
-       asoc->peer.transport_count = 0;
 
        /* RFC 2960 5.1 Normal Establishment of an Association
         *
@@ -251,20 +225,15 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
         * already received one packet.]
         */
        asoc->peer.sack_needed = 1;
-       asoc->peer.sack_cnt = 0;
        asoc->peer.sack_generation = 1;
 
        /* Assume that the peer will tell us if he recognizes ASCONF
         * as part of INIT exchange.
-        * The sctp_addip_noauth option is there for backward compatibilty
+        * The sctp_addip_noauth option is there for backward compatibility
         * and will revert old behavior.
         */
-       asoc->peer.asconf_capable = 0;
        if (net->sctp.addip_noauth)
                asoc->peer.asconf_capable = 1;
-       asoc->asconf_addr_del_pending = NULL;
-       asoc->src_out_of_asoc_ok = 0;
-       asoc->new_transport = NULL;
 
        /* Create an input queue.  */
        sctp_inq_init(&asoc->base.inqueue);
@@ -276,12 +245,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        if (!sctp_ulpq_init(&asoc->ulpq, asoc))
                goto fail_init;
 
-       memset(&asoc->peer.tsn_map, 0, sizeof(struct sctp_tsnmap));
-
-       asoc->need_ecne = 0;
-
-       asoc->assoc_id = 0;
-
        /* Assume that peer would support both address types unless we are
         * told otherwise.
         */
@@ -297,9 +260,6 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
        asoc->default_timetolive = sp->default_timetolive;
        asoc->default_rcv_context = sp->default_rcv_context;
 
-       /* SCTP_GET_ASSOC_STATS COUNTERS */
-       memset(&asoc->stats, 0, sizeof(struct sctp_priv_assoc_stats));
-
        /* AUTH related initializations */
        INIT_LIST_HEAD(&asoc->endpoint_shared_keys);
        err = sctp_auth_asoc_copy_shkeys(ep, asoc, gfp);
@@ -307,9 +267,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
                goto fail_init;
 
        asoc->active_key_id = ep->active_key_id;
-       asoc->asoc_shared_key = NULL;
 
-       asoc->default_hmac_id = 0;
        /* Save the hmacs and chunks list into this association */
        if (ep->auth_hmacs_list)
                memcpy(asoc->c.auth_hmacs, ep->auth_hmacs_list,
@@ -994,17 +952,13 @@ int sctp_cmp_addr_exact(const union sctp_addr *ss1,
  */
 struct sctp_chunk *sctp_get_ecne_prepend(struct sctp_association *asoc)
 {
-       struct sctp_chunk *chunk;
+       if (!asoc->need_ecne)
+               return NULL;
 
        /* Send ECNE if needed.
         * Not being able to allocate a chunk here is not deadly.
         */
-       if (asoc->need_ecne)
-               chunk = sctp_make_ecne(asoc, asoc->last_ecne_tsn);
-       else
-               chunk = NULL;
-
-       return chunk;
+       return sctp_make_ecne(asoc, asoc->last_ecne_tsn);
 }
 
 /*
@@ -1265,7 +1219,7 @@ void sctp_assoc_update(struct sctp_association *asoc,
                }
        }
 
-       /* SCTP-AUTH: Save the peer parameters from the new assocaitions
+       /* SCTP-AUTH: Save the peer parameters from the new associations
         * and also move the association shared keys over
         */
        kfree(asoc->peer.peer_random);
@@ -1393,7 +1347,7 @@ void sctp_assoc_sync_pmtu(struct sock *sk, struct sctp_association *asoc)
 }
 
 /* Should we send a SACK to update our peer? */
-static inline int sctp_peer_needs_update(struct sctp_association *asoc)
+static inline bool sctp_peer_needs_update(struct sctp_association *asoc)
 {
        struct net *net = sock_net(asoc->base.sk);
        switch (asoc->state) {
@@ -1405,12 +1359,12 @@ static inline int sctp_peer_needs_update(struct sctp_association *asoc)
                    ((asoc->rwnd - asoc->a_rwnd) >= max_t(__u32,
                           (asoc->base.sk->sk_rcvbuf >> net->sctp.rwnd_upd_shift),
                           asoc->pathmtu)))
-                       return 1;
+                       return true;
                break;
        default:
                break;
        }
-       return 0;
+       return false;
 }
 
 /* Increase asoc's rwnd by len and send any window update SACK if needed. */
@@ -1490,7 +1444,7 @@ void sctp_assoc_rwnd_decrease(struct sctp_association *asoc, unsigned int len)
 
        /* If we've reached or overflowed our receive buffer, announce
         * a 0 rwnd if rwnd would still be positive.  Store the
-        * the pottential pressure overflow so that the window can be restored
+        * the potential pressure overflow so that the window can be restored
         * back to original value.
         */
        if (rx_count >= asoc->base.sk->sk_rcvbuf)