9a99495265f87b9f1f217421ed17e764c3a17c47
[linux-flexiantxendom0-3.2.10.git] / net / sctp / sm_sideeffect.c
1 /* SCTP kernel reference Implementation
2  * Copyright (c) 1999 Cisco, Inc.
3  * Copyright (c) 1999-2001 Motorola, Inc.
4  * Copyright (c) 2001-2002 International Business Machines Corp.
5  *
6  * This file is part of the SCTP kernel reference Implementation
7  *
8  * These functions work with the state functions in sctp_sm_statefuns.c
9  * to implement that state operations.  These functions implement the
10  * steps which require modifying existing data structures.
11  *
12  * The SCTP reference implementation is free software;
13  * you can redistribute it and/or modify it under the terms of
14  * the GNU General Public License as published by
15  * the Free Software Foundation; either version 2, or (at your option)
16  * any later version.
17  *
18  * The SCTP reference implementation is distributed in the hope that it
19  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
20  *                 ************************
21  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22  * See the GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with GNU CC; see the file COPYING.  If not, write to
26  * the Free Software Foundation, 59 Temple Place - Suite 330,
27  * Boston, MA 02111-1307, USA.
28  *
29  * Please send any bug reports or fixes you make to the
30  * email address(es):
31  *    lksctp developers <lksctp-developers@lists.sourceforge.net>
32  *
33  * Or submit a bug report through the following website:
34  *    http://www.sf.net/projects/lksctp
35  *
36  * Written or modified by:
37  *    La Monte H.P. Yarroll <piggy@acm.org>
38  *    Karl Knutson          <karl@athena.chicago.il.us>
39  *    Jon Grimm             <jgrimm@austin.ibm.com>
40  *    Hui Huang             <hui.huang@nokia.com>
41  *    Dajiang Zhang         <dajiang.zhang@nokia.com>
42  *    Daisy Chang           <daisyc@us.ibm.com>
43  *    Sridhar Samudrala     <sri@us.ibm.com>
44  *    Ardelle Fan           <ardelle.fan@intel.com>
45  *
46  * Any bugs reported given to us we will try to fix... any fixes shared will
47  * be incorporated into the next SCTP release.
48  */
49
50 #include <linux/skbuff.h>
51 #include <linux/types.h>
52 #include <linux/socket.h>
53 #include <linux/ip.h>
54 #include <net/sock.h>
55 #include <net/sctp/sctp.h>
56 #include <net/sctp/sm.h>
57
58 /********************************************************************
59  * Helper functions
60  ********************************************************************/
61
62 /* A helper function for delayed processing of INET ECN CE bit. */
63 static void sctp_do_ecn_ce_work(struct sctp_association *asoc, 
64                                 __u32 lowest_tsn)
65 {
66         /* Save the TSN away for comparison when we receive CWR */
67
68         asoc->last_ecne_tsn = lowest_tsn;
69         asoc->need_ecne = 1;
70 }
71
72 /* Helper function for delayed processing of SCTP ECNE chunk.  */
73 /* RFC 2960 Appendix A
74  *
75  * RFC 2481 details a specific bit for a sender to send in
76  * the header of its next outbound TCP segment to indicate to
77  * its peer that it has reduced its congestion window.  This
78  * is termed the CWR bit.  For SCTP the same indication is made
79  * by including the CWR chunk.  This chunk contains one data
80  * element, i.e. the TSN number that was sent in the ECNE chunk.
81  * This element represents the lowest TSN number in the datagram
82  * that was originally marked with the CE bit.
83  */
84 static struct sctp_chunk *sctp_do_ecn_ecne_work(struct sctp_association *asoc,
85                                            __u32 lowest_tsn,
86                                            struct sctp_chunk *chunk)
87 {
88         struct sctp_chunk *repl;
89
90         /* Our previously transmitted packet ran into some congestion
91          * so we should take action by reducing cwnd and ssthresh
92          * and then ACK our peer that we we've done so by
93          * sending a CWR.
94          */
95
96         /* First, try to determine if we want to actually lower
97          * our cwnd variables.  Only lower them if the ECNE looks more
98          * recent than the last response.
99          */
100         if (TSN_lt(asoc->last_cwr_tsn, lowest_tsn)) {
101                 struct sctp_transport *transport;
102
103                 /* Find which transport's congestion variables
104                  * need to be adjusted.
105                  */
106                 transport = sctp_assoc_lookup_tsn(asoc, lowest_tsn);
107
108                 /* Update the congestion variables. */
109                 if (transport)
110                         sctp_transport_lower_cwnd(transport,
111                                                   SCTP_LOWER_CWND_ECNE);
112                 asoc->last_cwr_tsn = lowest_tsn;
113         }
114
115         /* Always try to quiet the other end.  In case of lost CWR,
116          * resend last_cwr_tsn.
117          */
118         repl = sctp_make_cwr(asoc, asoc->last_cwr_tsn, chunk);
119
120         /* If we run out of memory, it will look like a lost CWR.  We'll
121          * get back in sync eventually.
122          */
123         return repl;
124 }
125
126 /* Helper function to do delayed processing of ECN CWR chunk.  */
127 static void sctp_do_ecn_cwr_work(struct sctp_association *asoc,
128                                  __u32 lowest_tsn)
129 {
130         /* Turn off ECNE getting auto-prepended to every outgoing
131          * packet
132          */
133         asoc->need_ecne = 0;
134 }
135
136 /* Generate SACK if necessary.  We call this at the end of a packet.  */
137 int sctp_gen_sack(struct sctp_association *asoc, int force,
138                   sctp_cmd_seq_t *commands)
139 {
140         __u32 ctsn, max_tsn_seen;
141         struct sctp_chunk *sack;
142         int error = 0;
143
144         if (force)
145                 asoc->peer.sack_needed = 1;
146
147         ctsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map);
148         max_tsn_seen = sctp_tsnmap_get_max_tsn_seen(&asoc->peer.tsn_map);
149
150         /* From 12.2 Parameters necessary per association (i.e. the TCB):
151          *
152          * Ack State : This flag indicates if the next received packet
153          *           : is to be responded to with a SACK. ...
154          *           : When DATA chunks are out of order, SACK's
155          *           : are not delayed (see Section 6).
156          *
157          * [This is actually not mentioned in Section 6, but we
158          * implement it here anyway. --piggy]
159          */
160         if (max_tsn_seen != ctsn)
161                 asoc->peer.sack_needed = 1;
162
163         /* From 6.2  Acknowledgement on Reception of DATA Chunks:
164          *
165          * Section 4.2 of [RFC2581] SHOULD be followed. Specifically,
166          * an acknowledgement SHOULD be generated for at least every
167          * second packet (not every second DATA chunk) received, and
168          * SHOULD be generated within 200 ms of the arrival of any
169          * unacknowledged DATA chunk. ...
170          */
171         if (!asoc->peer.sack_needed) {
172                 /* We will need a SACK for the next packet.  */
173                 asoc->peer.sack_needed = 1;
174                 goto out;
175         } else {
176                 if (asoc->a_rwnd > asoc->rwnd)
177                         asoc->a_rwnd = asoc->rwnd;
178                 sack = sctp_make_sack(asoc);
179                 if (!sack)
180                         goto nomem;
181
182                 asoc->peer.sack_needed = 0;
183
184                 error = sctp_outq_tail(&asoc->outqueue, sack);
185
186                 /* Stop the SACK timer.  */
187                 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
188                                 SCTP_TO(SCTP_EVENT_TIMEOUT_SACK));
189         }
190 out:
191         return error;
192 nomem:
193         error = -ENOMEM;
194         return error;
195 }
196
197 /* When the T3-RTX timer expires, it calls this function to create the
198  * relevant state machine event.
199  */
200 void sctp_generate_t3_rtx_event(unsigned long peer)
201 {
202         int error;
203         struct sctp_transport *transport = (struct sctp_transport *) peer;
204         struct sctp_association *asoc = transport->asoc;
205
206         /* Check whether a task is in the sock.  */
207
208         sctp_bh_lock_sock(asoc->base.sk);
209         if (sock_owned_by_user(asoc->base.sk)) {
210                 SCTP_DEBUG_PRINTK("%s:Sock is busy.\n", __FUNCTION__);
211
212                 /* Try again later.  */
213                 if (!mod_timer(&transport->T3_rtx_timer, jiffies + (HZ/20)))
214                         sctp_transport_hold(transport);
215                 goto out_unlock;
216         }
217
218         /* Is this transport really dead and just waiting around for
219          * the timer to let go of the reference?
220          */
221         if (transport->dead)
222                 goto out_unlock;
223
224         /* Run through the state machine.  */
225         error = sctp_do_sm(SCTP_EVENT_T_TIMEOUT,
226                            SCTP_ST_TIMEOUT(SCTP_EVENT_TIMEOUT_T3_RTX),
227                            asoc->state,
228                            asoc->ep, asoc,
229                            transport, GFP_ATOMIC);
230
231         if (error)
232                 asoc->base.sk->sk_err = -error;
233
234 out_unlock:
235         sctp_bh_unlock_sock(asoc->base.sk);
236         sctp_transport_put(transport);
237 }
238
239 /* This is a sa interface for producing timeout events.  It works
240  * for timeouts which use the association as their parameter.
241  */
242 static void sctp_generate_timeout_event(struct sctp_association *asoc,
243                                         sctp_event_timeout_t timeout_type)
244 {
245         int error = 0;
246
247         sctp_bh_lock_sock(asoc->base.sk);
248         if (sock_owned_by_user(asoc->base.sk)) {
249                 SCTP_DEBUG_PRINTK("%s:Sock is busy: timer %d\n",
250                                   __FUNCTION__,
251                                   timeout_type);
252
253                 /* Try again later.  */
254                 if (!mod_timer(&asoc->timers[timeout_type], jiffies + (HZ/20)))
255                         sctp_association_hold(asoc);
256                 goto out_unlock;
257         }
258
259         /* Is this association really dead and just waiting around for
260          * the timer to let go of the reference?
261          */
262         if (asoc->base.dead)
263                 goto out_unlock;
264
265         /* Run through the state machine.  */
266         error = sctp_do_sm(SCTP_EVENT_T_TIMEOUT,
267                            SCTP_ST_TIMEOUT(timeout_type),
268                            asoc->state, asoc->ep, asoc,
269                            (void *)timeout_type, GFP_ATOMIC);
270
271         if (error)
272                 asoc->base.sk->sk_err = -error;
273
274 out_unlock:
275         sctp_bh_unlock_sock(asoc->base.sk);
276         sctp_association_put(asoc);
277 }
278
279 void sctp_generate_t1_cookie_event(unsigned long data)
280 {
281         struct sctp_association *asoc = (struct sctp_association *) data;
282         sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_T1_COOKIE);
283 }
284
285 void sctp_generate_t1_init_event(unsigned long data)
286 {
287         struct sctp_association *asoc = (struct sctp_association *) data;
288         sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_T1_INIT);
289 }
290
291 void sctp_generate_t2_shutdown_event(unsigned long data)
292 {
293         struct sctp_association *asoc = (struct sctp_association *) data;
294         sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_T2_SHUTDOWN);
295 }
296
297 void sctp_generate_t5_shutdown_guard_event(unsigned long data)
298 {
299         struct sctp_association *asoc = (struct sctp_association *)data;
300         sctp_generate_timeout_event(asoc,
301                                     SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD);
302
303 } /* sctp_generate_t5_shutdown_guard_event() */
304
305 void sctp_generate_autoclose_event(unsigned long data)
306 {
307         struct sctp_association *asoc = (struct sctp_association *) data;
308         sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_AUTOCLOSE);
309 }
310
311 /* Generate a heart beat event.  If the sock is busy, reschedule.   Make
312  * sure that the transport is still valid.
313  */
314 void sctp_generate_heartbeat_event(unsigned long data)
315 {
316         int error = 0;
317         struct sctp_transport *transport = (struct sctp_transport *) data;
318         struct sctp_association *asoc = transport->asoc;
319
320         sctp_bh_lock_sock(asoc->base.sk);
321         if (sock_owned_by_user(asoc->base.sk)) {
322                 SCTP_DEBUG_PRINTK("%s:Sock is busy.\n", __FUNCTION__);
323
324                 /* Try again later.  */
325                 if (!mod_timer(&transport->hb_timer, jiffies + (HZ/20)))
326                         sctp_transport_hold(transport);
327                 goto out_unlock;
328         }
329
330         /* Is this structure just waiting around for us to actually
331          * get destroyed?
332          */
333         if (transport->dead)
334                 goto out_unlock;
335
336         error = sctp_do_sm(SCTP_EVENT_T_TIMEOUT,
337                            SCTP_ST_TIMEOUT(SCTP_EVENT_TIMEOUT_HEARTBEAT),
338                            asoc->state, asoc->ep, asoc,
339                            transport, GFP_ATOMIC);
340
341          if (error)
342                  asoc->base.sk->sk_err = -error;
343
344 out_unlock:
345         sctp_bh_unlock_sock(asoc->base.sk);
346         sctp_transport_put(transport);
347 }
348
349 /* Inject a SACK Timeout event into the state machine.  */
350 void sctp_generate_sack_event(unsigned long data)
351 {
352         struct sctp_association *asoc = (struct sctp_association *) data;
353         sctp_generate_timeout_event(asoc, SCTP_EVENT_TIMEOUT_SACK);
354 }
355
356 sctp_timer_event_t *sctp_timer_events[SCTP_NUM_TIMEOUT_TYPES] = {
357         NULL,
358         sctp_generate_t1_cookie_event,
359         sctp_generate_t1_init_event,
360         sctp_generate_t2_shutdown_event,
361         NULL,
362         sctp_generate_t5_shutdown_guard_event,
363         sctp_generate_heartbeat_event,
364         sctp_generate_sack_event,
365         sctp_generate_autoclose_event,
366 };
367
368
369 /* RFC 2960 8.2 Path Failure Detection
370  *
371  * When its peer endpoint is multi-homed, an endpoint should keep a
372  * error counter for each of the destination transport addresses of the
373  * peer endpoint.
374  *
375  * Each time the T3-rtx timer expires on any address, or when a
376  * HEARTBEAT sent to an idle address is not acknowledged within a RTO,
377  * the error counter of that destination address will be incremented.
378  * When the value in the error counter exceeds the protocol parameter
379  * 'Path.Max.Retrans' of that destination address, the endpoint should
380  * mark the destination transport address as inactive, and a
381  * notification SHOULD be sent to the upper layer.
382  *
383  */
384 static void sctp_do_8_2_transport_strike(struct sctp_association *asoc,
385                                          struct sctp_transport *transport)
386 {
387         /* The check for association's overall error counter exceeding the
388          * threshold is done in the state function.
389          */
390         asoc->overall_error_count++;
391
392         if (transport->active &&
393             (transport->error_count++ >= transport->error_threshold)) {
394                 SCTP_DEBUG_PRINTK("transport_strike: transport "
395                                   "IP:%d.%d.%d.%d failed.\n",
396                                   NIPQUAD(transport->ipaddr.v4.sin_addr));
397                 sctp_assoc_control_transport(asoc, transport,
398                                              SCTP_TRANSPORT_DOWN,
399                                              SCTP_FAILED_THRESHOLD);
400         }
401
402         /* E2) For the destination address for which the timer
403          * expires, set RTO <- RTO * 2 ("back off the timer").  The
404          * maximum value discussed in rule C7 above (RTO.max) may be
405          * used to provide an upper bound to this doubling operation.
406          */
407         transport->rto = min((transport->rto * 2), transport->asoc->rto_max);
408 }
409
410 /* Worker routine to handle INIT command failure.  */
411 static void sctp_cmd_init_failed(sctp_cmd_seq_t *commands,
412                                  struct sctp_association *asoc,
413                                  unsigned error)
414 {
415         struct sctp_ulpevent *event;
416
417         event = sctp_ulpevent_make_assoc_change(asoc,0, SCTP_CANT_STR_ASSOC,
418                                                 (__u16)error, 0, 0,
419                                                 GFP_ATOMIC);
420
421         if (event)
422                 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP,
423                                 SCTP_ULPEVENT(event));
424
425         /* SEND_FAILED sent later when cleaning up the association. */
426         asoc->outqueue.error = error;
427         sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL());
428 }
429
430 /* Worker routine to handle SCTP_CMD_ASSOC_FAILED.  */
431 static void sctp_cmd_assoc_failed(sctp_cmd_seq_t *commands,
432                                   struct sctp_association *asoc,
433                                   sctp_event_t event_type,
434                                   sctp_subtype_t subtype,
435                                   struct sctp_chunk *chunk,
436                                   unsigned error)
437 {
438         struct sctp_ulpevent *event;
439
440         /* Cancel any partial delivery in progress. */
441         sctp_ulpq_abort_pd(&asoc->ulpq, GFP_ATOMIC);
442
443         event = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_COMM_LOST,
444                                                 (__u16)error, 0, 0,
445                                                 GFP_ATOMIC);
446         if (event)
447                 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP,
448                                 SCTP_ULPEVENT(event));
449
450         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
451                         SCTP_STATE(SCTP_STATE_CLOSED));
452
453         /* SEND_FAILED sent later when cleaning up the association. */
454         asoc->outqueue.error = error;
455         sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL());
456 }
457
458 /* Process an init chunk (may be real INIT/INIT-ACK or an embedded INIT
459  * inside the cookie.  In reality, this is only used for INIT-ACK processing
460  * since all other cases use "temporary" associations and can do all
461  * their work in statefuns directly.
462  */
463 static int sctp_cmd_process_init(sctp_cmd_seq_t *commands,
464                                  struct sctp_association *asoc,
465                                  struct sctp_chunk *chunk,
466                                  sctp_init_chunk_t *peer_init, int gfp)
467 {
468         int error;
469
470         /* We only process the init as a sideeffect in a single
471          * case.   This is when we process the INIT-ACK.   If we
472          * fail during INIT processing (due to malloc problems),
473          * just return the error and stop processing the stack.
474          */
475         if (!sctp_process_init(asoc, chunk->chunk_hdr->type,
476                                sctp_source(chunk), peer_init, gfp))
477                 error = -ENOMEM;
478         else
479                 error = 0;
480
481         return error;
482 }
483
484 /* Helper function to break out starting up of heartbeat timers.  */
485 static void sctp_cmd_hb_timers_start(sctp_cmd_seq_t *cmds,
486                                      struct sctp_association *asoc)
487 {
488         struct sctp_transport *t;
489         struct list_head *pos;
490
491         /* Start a heartbeat timer for each transport on the association.
492          * hold a reference on the transport to make sure none of
493          * the needed data structures go away.
494          */
495         list_for_each(pos, &asoc->peer.transport_addr_list) {
496                 t = list_entry(pos, struct sctp_transport, transports);
497
498                 if (!mod_timer(&t->hb_timer, sctp_transport_timeout(t)))
499                         sctp_transport_hold(t);
500         }
501 }
502
503 static void sctp_cmd_hb_timers_stop(sctp_cmd_seq_t *cmds,
504                                     struct sctp_association *asoc)
505 {
506         struct sctp_transport *t;
507         struct list_head *pos;
508
509         /* Stop all heartbeat timers. */
510
511         list_for_each(pos, &asoc->peer.transport_addr_list) {
512                 t = list_entry(pos, struct sctp_transport, transports);
513                 if (del_timer(&t->hb_timer))
514                         sctp_transport_put(t);
515         }
516 }
517
518 /* Helper function to update the heartbeat timer. */
519 static void sctp_cmd_hb_timer_update(sctp_cmd_seq_t *cmds,
520                                      struct sctp_association *asoc,
521                                      struct sctp_transport *t)
522 {
523         /* Update the heartbeat timer.  */
524         if (!mod_timer(&t->hb_timer, sctp_transport_timeout(t)))
525                 sctp_transport_hold(t);
526 }
527
528 /* Helper function to handle the reception of an HEARTBEAT ACK.  */
529 static void sctp_cmd_transport_on(sctp_cmd_seq_t *cmds,
530                                   struct sctp_association *asoc,
531                                   struct sctp_transport *t,
532                                   struct sctp_chunk *chunk)
533 {
534         sctp_sender_hb_info_t *hbinfo;
535
536         /* 8.3 Upon the receipt of the HEARTBEAT ACK, the sender of the
537          * HEARTBEAT should clear the error counter of the destination
538          * transport address to which the HEARTBEAT was sent.
539          * The association's overall error count is also cleared.
540          */
541         t->error_count = 0;
542         t->asoc->overall_error_count = 0;
543
544         /* Mark the destination transport address as active if it is not so
545          * marked.
546          */
547         if (!t->active)
548                 sctp_assoc_control_transport(asoc, t, SCTP_TRANSPORT_UP,
549                                              SCTP_HEARTBEAT_SUCCESS);
550
551         /* The receiver of the HEARTBEAT ACK should also perform an
552          * RTT measurement for that destination transport address
553          * using the time value carried in the HEARTBEAT ACK chunk.
554          */
555         hbinfo = (sctp_sender_hb_info_t *) chunk->skb->data;
556         sctp_transport_update_rto(t, (jiffies - hbinfo->sent_at));
557 }
558
559 /* Helper function to do a transport reset at the expiry of the hearbeat
560  * timer.
561  */
562 static void sctp_cmd_transport_reset(sctp_cmd_seq_t *cmds,
563                                      struct sctp_association *asoc,
564                                      struct sctp_transport *t)
565 {
566         sctp_transport_lower_cwnd(t, SCTP_LOWER_CWND_INACTIVE);
567
568         /* Mark one strike against a transport.  */
569         sctp_do_8_2_transport_strike(asoc, t);
570 }
571
572 /* Helper function to process the process SACK command.  */
573 static int sctp_cmd_process_sack(sctp_cmd_seq_t *cmds,
574                                  struct sctp_association *asoc,
575                                  sctp_sackhdr_t *sackh)
576 {
577         int err;
578
579         if (sctp_outq_sack(&asoc->outqueue, sackh)) {
580                 /* There are no more TSNs awaiting SACK.  */
581                 err = sctp_do_sm(SCTP_EVENT_T_OTHER,
582                                  SCTP_ST_OTHER(SCTP_EVENT_NO_PENDING_TSN),
583                                  asoc->state, asoc->ep, asoc, NULL,
584                                  GFP_ATOMIC);
585         } else {
586                 /* Windows may have opened, so we need
587                  * to check if we have DATA to transmit
588                  */
589                 err = sctp_outq_flush(&asoc->outqueue, 0);
590         }
591
592         return err;
593 }
594
595 /* Helper function to set the timeout value for T2-SHUTDOWN timer and to set
596  * the transport for a shutdown chunk.
597  */
598 static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds, 
599                               struct sctp_association *asoc,
600                               struct sctp_chunk *chunk)
601 {
602         struct sctp_transport *t;
603
604         t = sctp_assoc_choose_shutdown_transport(asoc);
605         asoc->shutdown_last_sent_to = t;
606         asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = t->rto;
607         chunk->transport = t;
608 }
609
610 /* Helper function to change the state of an association. */
611 static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds, 
612                                struct sctp_association *asoc,
613                                sctp_state_t state)
614 {
615         struct sock *sk = asoc->base.sk;
616
617         asoc->state = state;
618
619         if (sctp_style(sk, TCP)) {
620                 /* Change the sk->sk_state of a TCP-style socket that has 
621                  * sucessfully completed a connect() call.
622                  */
623                 if (sctp_state(asoc, ESTABLISHED) && sctp_sstate(sk, CLOSED))
624                         sk->sk_state = SCTP_SS_ESTABLISHED;
625
626                 /* Set the RCV_SHUTDOWN flag when a SHUTDOWN is received. */
627                 if (sctp_state(asoc, SHUTDOWN_RECEIVED) &&
628                     sctp_sstate(sk, ESTABLISHED))
629                         sk->sk_shutdown |= RCV_SHUTDOWN;
630         }
631
632         if (sctp_state(asoc, ESTABLISHED) ||
633             sctp_state(asoc, CLOSED) ||
634             sctp_state(asoc, SHUTDOWN_RECEIVED)) {
635                 /* Wake up any processes waiting in the asoc's wait queue in
636                  * sctp_wait_for_connect() or sctp_wait_for_sndbuf().
637                  */
638                 if (waitqueue_active(&asoc->wait))
639                         wake_up_interruptible(&asoc->wait);
640
641                 /* Wake up any processes waiting in the sk's sleep queue of
642                  * a TCP-style or UDP-style peeled-off socket in
643                  * sctp_wait_for_accept() or sctp_wait_for_packet().
644                  * For a UDP-style socket, the waiters are woken up by the
645                  * notifications.
646                  */
647                 if (!sctp_style(sk, UDP))
648                         sk->sk_state_change(sk);
649         }
650 }
651
652 /* Helper function to delete an association. */
653 static void sctp_cmd_delete_tcb(sctp_cmd_seq_t *cmds,
654                                 struct sctp_association *asoc)
655 {
656         struct sock *sk = asoc->base.sk;
657
658         /* If it is a non-temporary association belonging to a TCP-style
659          * listening socket, do not free it so that accept() can pick it
660          * up later.
661          */ 
662         if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING) && (!asoc->temp))
663                 return;
664
665         sctp_unhash_established(asoc);
666         sctp_association_free(asoc);
667 }
668
669 /* These three macros allow us to pull the debugging code out of the
670  * main flow of sctp_do_sm() to keep attention focused on the real
671  * functionality there.
672  */
673 #define DEBUG_PRE \
674         SCTP_DEBUG_PRINTK("sctp_do_sm prefn: " \
675                           "ep %p, %s, %s, asoc %p[%s], %s\n", \
676                           ep, sctp_evttype_tbl[event_type], \
677                           (*debug_fn)(subtype), asoc, \
678                           sctp_state_tbl[state], state_fn->name)
679
680 #define DEBUG_POST \
681         SCTP_DEBUG_PRINTK("sctp_do_sm postfn: " \
682                           "asoc %p, status: %s\n", \
683                           asoc, sctp_status_tbl[status])
684
685 #define DEBUG_POST_SFX \
686         SCTP_DEBUG_PRINTK("sctp_do_sm post sfx: error %d, asoc %p[%s]\n", \
687                           error, asoc, \
688                           sctp_state_tbl[(asoc && sctp_id2assoc(ep->base.sk, \
689                           sctp_assoc2id(asoc)))?asoc->state:SCTP_STATE_CLOSED])
690
691 /*
692  * This is the master state machine processing function.
693  *
694  * If you want to understand all of lksctp, this is a
695  * good place to start.
696  */
697 int sctp_do_sm(sctp_event_t event_type, sctp_subtype_t subtype,
698                sctp_state_t state,
699                struct sctp_endpoint *ep,
700                struct sctp_association *asoc,
701                void *event_arg,
702                int gfp)
703 {
704         sctp_cmd_seq_t commands;
705         const sctp_sm_table_entry_t *state_fn;
706         sctp_disposition_t status;
707         int error = 0;
708         typedef const char *(printfn_t)(sctp_subtype_t);
709
710         static printfn_t *table[] = {
711                 NULL, sctp_cname, sctp_tname, sctp_oname, sctp_pname,
712         };
713         printfn_t *debug_fn  __attribute__ ((unused)) = table[event_type];
714
715         /* Look up the state function, run it, and then process the
716          * side effects.  These three steps are the heart of lksctp.
717          */
718         state_fn = sctp_sm_lookup_event(event_type, state, subtype);
719
720         sctp_init_cmd_seq(&commands);
721
722         DEBUG_PRE;
723         status = (*state_fn->fn)(ep, asoc, subtype, event_arg, &commands);
724         DEBUG_POST;
725
726         error = sctp_side_effects(event_type, subtype, state,
727                                   ep, asoc, event_arg, status, 
728                                   &commands, gfp);
729         DEBUG_POST_SFX;
730
731         return error;
732 }
733
734 #undef DEBUG_PRE
735 #undef DEBUG_POST
736
737 /*****************************************************************
738  * This the master state function side effect processing function.
739  *****************************************************************/
740 int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
741                       sctp_state_t state,
742                       struct sctp_endpoint *ep,
743                       struct sctp_association *asoc,
744                       void *event_arg,
745                       sctp_disposition_t status,
746                       sctp_cmd_seq_t *commands,
747                       int gfp)
748 {
749         int error;
750
751         /* FIXME - Most of the dispositions left today would be categorized
752          * as "exceptional" dispositions.  For those dispositions, it
753          * may not be proper to run through any of the commands at all.
754          * For example, the command interpreter might be run only with
755          * disposition SCTP_DISPOSITION_CONSUME.
756          */
757         if (0 != (error = sctp_cmd_interpreter(event_type, subtype, state,
758                                                ep, asoc,
759                                                event_arg, status,
760                                                commands, gfp)))
761                 goto bail;
762
763         switch (status) {
764         case SCTP_DISPOSITION_DISCARD:
765                 SCTP_DEBUG_PRINTK("Ignored sctp protocol event - state %d, "
766                                   "event_type %d, event_id %d\n",
767                                   state, event_type, subtype.chunk);
768                 break;
769
770         case SCTP_DISPOSITION_NOMEM:
771                 /* We ran out of memory, so we need to discard this
772                  * packet.
773                  */
774                 /* BUG--we should now recover some memory, probably by
775                  * reneging...
776                  */
777                 error = -ENOMEM;
778                 break;
779
780         case SCTP_DISPOSITION_DELETE_TCB:
781                 /* This should now be a command. */
782                 break;
783
784         case SCTP_DISPOSITION_CONSUME:
785         case SCTP_DISPOSITION_ABORT:
786                 /*
787                  * We should no longer have much work to do here as the
788                  * real work has been done as explicit commands above.
789                  */
790                 break;
791
792         case SCTP_DISPOSITION_VIOLATION:
793                 printk(KERN_ERR "sctp protocol violation state %d "
794                        "chunkid %d\n", state, subtype.chunk);
795                 break;
796
797         case SCTP_DISPOSITION_NOT_IMPL:
798                 printk(KERN_WARNING "sctp unimplemented feature in state %d, "
799                        "event_type %d, event_id %d\n",
800                        state, event_type, subtype.chunk);
801                 break;
802
803         case SCTP_DISPOSITION_BUG:
804                 printk(KERN_ERR "sctp bug in state %d, "
805                        "event_type %d, event_id %d\n",
806                        state, event_type, subtype.chunk);
807                 BUG();
808                 break;
809
810         default:
811                 printk(KERN_ERR "sctp impossible disposition %d "
812                        "in state %d, event_type %d, event_id %d\n",
813                        status, state, event_type, subtype.chunk);
814                 BUG();
815                 break;
816         };
817
818 bail:
819         return error;
820 }
821
822 /********************************************************************
823  * 2nd Level Abstractions
824  ********************************************************************/
825
826 /* This is the side-effect interpreter.  */
827 int sctp_cmd_interpreter(sctp_event_t event_type, sctp_subtype_t subtype,
828                          sctp_state_t state, struct sctp_endpoint *ep,
829                          struct sctp_association *asoc, void *event_arg,
830                          sctp_disposition_t status, sctp_cmd_seq_t *commands,
831                          int gfp)
832 {
833         int error = 0;
834         int force;
835         sctp_cmd_t *cmd;
836         struct sctp_chunk *new_obj;
837         struct sctp_chunk *chunk = NULL;
838         struct sctp_packet *packet;
839         struct list_head *pos;
840         struct timer_list *timer;
841         unsigned long timeout;
842         struct sctp_transport *t;
843         sctp_sackhdr_t sackh;
844         int local_cork = 0;
845
846         if (SCTP_EVENT_T_TIMEOUT != event_type)
847                 chunk = (struct sctp_chunk *) event_arg;
848
849         /* Note:  This whole file is a huge candidate for rework.
850          * For example, each command could either have its own handler, so
851          * the loop would look like:
852          *     while (cmds)
853          *         cmd->handle(x, y, z)
854          * --jgrimm
855          */
856         while (NULL != (cmd = sctp_next_cmd(commands))) {
857                 switch (cmd->verb) {
858                 case SCTP_CMD_NOP:
859                         /* Do nothing. */
860                         break;
861
862                 case SCTP_CMD_NEW_ASOC:
863                         /* Register a new association.  */
864                         if (local_cork) {
865                                 sctp_outq_uncork(&asoc->outqueue); 
866                                 local_cork = 0;
867                         }
868                         asoc = cmd->obj.ptr;
869                         /* Register with the endpoint.  */
870                         sctp_endpoint_add_asoc(ep, asoc);
871                         sctp_hash_established(asoc);
872                         break;
873
874                 case SCTP_CMD_UPDATE_ASSOC:
875                        sctp_assoc_update(asoc, cmd->obj.ptr);
876                        break;
877
878                 case SCTP_CMD_PURGE_OUTQUEUE:
879                        sctp_outq_teardown(&asoc->outqueue);
880                        break;
881
882                 case SCTP_CMD_DELETE_TCB:                       
883                         if (local_cork) {
884                                 sctp_outq_uncork(&asoc->outqueue);
885                                 local_cork = 0;
886                         }
887                         /* Delete the current association.  */
888                         sctp_cmd_delete_tcb(commands, asoc);
889                         asoc = NULL;
890                         break;
891
892                 case SCTP_CMD_NEW_STATE:
893                         /* Enter a new state.  */
894                         sctp_cmd_new_state(commands, asoc, cmd->obj.state);
895                         break;
896
897                 case SCTP_CMD_REPORT_TSN:
898                         /* Record the arrival of a TSN.  */
899                         sctp_tsnmap_mark(&asoc->peer.tsn_map, cmd->obj.u32);
900                         break;
901
902                 case SCTP_CMD_GEN_SACK:
903                         /* Generate a Selective ACK.
904                          * The argument tells us whether to just count
905                          * the packet and MAYBE generate a SACK, or
906                          * force a SACK out.
907                          */
908                         force = cmd->obj.i32;
909                         error = sctp_gen_sack(asoc, force, commands);
910                         break;
911
912                 case SCTP_CMD_PROCESS_SACK:
913                         /* Process an inbound SACK.  */
914                         error = sctp_cmd_process_sack(commands, asoc,
915                                                       cmd->obj.ptr);
916                         break;
917
918                 case SCTP_CMD_GEN_INIT_ACK:
919                         /* Generate an INIT ACK chunk.  */
920                         new_obj = sctp_make_init_ack(asoc, chunk, GFP_ATOMIC,
921                                                      0);
922                         if (!new_obj)
923                                 goto nomem;
924
925                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
926                                         SCTP_CHUNK(new_obj));
927                         break;
928
929                 case SCTP_CMD_PEER_INIT:
930                         /* Process a unified INIT from the peer.
931                          * Note: Only used during INIT-ACK processing.  If
932                          * there is an error just return to the outter
933                          * layer which will bail.
934                          */
935                         error = sctp_cmd_process_init(commands, asoc, chunk,
936                                                       cmd->obj.ptr, gfp);
937                         break;
938
939                 case SCTP_CMD_GEN_COOKIE_ECHO:
940                         /* Generate a COOKIE ECHO chunk.  */
941                         new_obj = sctp_make_cookie_echo(asoc, chunk);
942                         if (!new_obj) {
943                                 if (cmd->obj.ptr)
944                                         sctp_chunk_free(cmd->obj.ptr);
945                                 goto nomem;
946                         }
947                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
948                                         SCTP_CHUNK(new_obj));
949
950                         /* If there is an ERROR chunk to be sent along with
951                          * the COOKIE_ECHO, send it, too.
952                          */
953                         if (cmd->obj.ptr)
954                                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
955                                                 SCTP_CHUNK(cmd->obj.ptr));
956                         break;
957
958                 case SCTP_CMD_GEN_SHUTDOWN:
959                         /* Generate SHUTDOWN when in SHUTDOWN_SENT state.
960                          * Reset error counts.
961                          */
962                         asoc->overall_error_count = 0;
963
964                         /* Generate a SHUTDOWN chunk.  */
965                         new_obj = sctp_make_shutdown(asoc, chunk);
966                         if (!new_obj)
967                                 goto nomem;
968                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
969                                         SCTP_CHUNK(new_obj));
970                         break;
971
972                 case SCTP_CMD_CHUNK_ULP:
973                         /* Send a chunk to the sockets layer.  */
974                         SCTP_DEBUG_PRINTK("sm_sideff: %s %p, %s %p.\n",
975                                           "chunk_up:", cmd->obj.ptr,
976                                           "ulpq:", &asoc->ulpq);
977                         sctp_ulpq_tail_data(&asoc->ulpq, cmd->obj.ptr,
978                                             GFP_ATOMIC);
979                         break;
980
981                 case SCTP_CMD_EVENT_ULP:
982                         /* Send a notification to the sockets layer.  */
983                         SCTP_DEBUG_PRINTK("sm_sideff: %s %p, %s %p.\n",
984                                           "event_up:",cmd->obj.ptr,
985                                           "ulpq:",&asoc->ulpq);
986                         sctp_ulpq_tail_event(&asoc->ulpq, cmd->obj.ptr);
987                         break;
988
989                 case SCTP_CMD_REPLY:
990                         /* If an caller has not already corked, do cork. */
991                         if (!asoc->outqueue.cork) {
992                                 sctp_outq_cork(&asoc->outqueue);
993                                 local_cork = 1;
994                         }
995                         /* Send a chunk to our peer.  */
996                         error = sctp_outq_tail(&asoc->outqueue, cmd->obj.ptr);
997                         break;
998
999                 case SCTP_CMD_SEND_PKT:
1000                         /* Send a full packet to our peer.  */
1001                         packet = cmd->obj.ptr;
1002                         sctp_packet_transmit(packet);
1003                         sctp_ootb_pkt_free(packet);
1004                         break;
1005
1006                 case SCTP_CMD_RETRAN:
1007                         /* Mark a transport for retransmission.  */
1008                         sctp_retransmit(&asoc->outqueue, cmd->obj.transport,
1009                                         SCTP_RTXR_T3_RTX);
1010                         break;
1011
1012                 case SCTP_CMD_TRANSMIT:
1013                         /* Kick start transmission. */
1014                         error = sctp_outq_uncork(&asoc->outqueue);
1015                         local_cork = 0;
1016                         break;
1017
1018                 case SCTP_CMD_ECN_CE:
1019                         /* Do delayed CE processing.   */
1020                         sctp_do_ecn_ce_work(asoc, cmd->obj.u32);
1021                         break;
1022
1023                 case SCTP_CMD_ECN_ECNE:
1024                         /* Do delayed ECNE processing. */
1025                         new_obj = sctp_do_ecn_ecne_work(asoc, cmd->obj.u32,
1026                                                         chunk);
1027                         if (new_obj)
1028                                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
1029                                                 SCTP_CHUNK(new_obj));
1030                         break;
1031
1032                 case SCTP_CMD_ECN_CWR:
1033                         /* Do delayed CWR processing.  */
1034                         sctp_do_ecn_cwr_work(asoc, cmd->obj.u32);
1035                         break;
1036
1037                 case SCTP_CMD_SETUP_T2:
1038                         sctp_cmd_setup_t2(commands, asoc, cmd->obj.ptr);
1039                         break;
1040
1041                 case SCTP_CMD_TIMER_START:
1042                         timer = &asoc->timers[cmd->obj.to];
1043                         timeout = asoc->timeouts[cmd->obj.to];
1044                         if (!timeout)
1045                                 BUG();
1046
1047                         timer->expires = jiffies + timeout;
1048                         sctp_association_hold(asoc);
1049                         add_timer(timer);
1050                         break;
1051
1052                 case SCTP_CMD_TIMER_RESTART:
1053                         timer = &asoc->timers[cmd->obj.to];
1054                         timeout = asoc->timeouts[cmd->obj.to];
1055                         if (!mod_timer(timer, jiffies + timeout))
1056                                 sctp_association_hold(asoc);
1057                         break;
1058
1059                 case SCTP_CMD_TIMER_STOP:
1060                         timer = &asoc->timers[cmd->obj.to];
1061                         if (timer_pending(timer) && del_timer(timer))
1062                                 sctp_association_put(asoc);
1063                         break;
1064
1065                 case SCTP_CMD_INIT_RESTART:
1066                         /* Do the needed accounting and updates
1067                          * associated with restarting an initialization
1068                          * timer.
1069                          */
1070                         asoc->counters[SCTP_COUNTER_INIT_ERROR]++;
1071                         asoc->timeouts[cmd->obj.to] *= 2;
1072                         if (asoc->timeouts[cmd->obj.to] >
1073                             asoc->max_init_timeo) {
1074                                 asoc->timeouts[cmd->obj.to] =
1075                                         asoc->max_init_timeo;
1076                         }
1077
1078                         /* If we've sent any data bundled with
1079                          * COOKIE-ECHO we need to resend.
1080                          */
1081                         list_for_each(pos, &asoc->peer.transport_addr_list) {
1082                                 t = list_entry(pos, struct sctp_transport,
1083                                                transports);
1084                                 sctp_retransmit_mark(&asoc->outqueue, t, 0);
1085                         }
1086
1087                         sctp_add_cmd_sf(commands,
1088                                         SCTP_CMD_TIMER_RESTART,
1089                                         SCTP_TO(cmd->obj.to));
1090                         break;
1091
1092                 case SCTP_CMD_INIT_FAILED:
1093                         sctp_cmd_init_failed(commands, asoc, cmd->obj.u32);
1094                         break;
1095
1096                 case SCTP_CMD_ASSOC_FAILED:
1097                         sctp_cmd_assoc_failed(commands, asoc, event_type,
1098                                               subtype, chunk, cmd->obj.u32);
1099                         break;
1100
1101                 case SCTP_CMD_COUNTER_INC:
1102                         asoc->counters[cmd->obj.counter]++;
1103                         break;
1104
1105                 case SCTP_CMD_COUNTER_RESET:
1106                         asoc->counters[cmd->obj.counter] = 0;
1107                         break;
1108
1109                 case SCTP_CMD_REPORT_DUP:
1110                         sctp_tsnmap_mark_dup(&asoc->peer.tsn_map,
1111                                              cmd->obj.u32);
1112                         break;
1113
1114                 case SCTP_CMD_REPORT_BAD_TAG:
1115                         SCTP_DEBUG_PRINTK("vtag mismatch!\n");
1116                         break;
1117
1118                 case SCTP_CMD_STRIKE:
1119                         /* Mark one strike against a transport.  */
1120                         sctp_do_8_2_transport_strike(asoc, cmd->obj.transport);
1121                         break;
1122
1123                 case SCTP_CMD_TRANSPORT_RESET:
1124                         t = cmd->obj.transport;
1125                         sctp_cmd_transport_reset(commands, asoc, t);
1126                         break;
1127
1128                 case SCTP_CMD_TRANSPORT_ON:
1129                         t = cmd->obj.transport;
1130                         sctp_cmd_transport_on(commands, asoc, t, chunk);
1131                         break;
1132
1133                 case SCTP_CMD_HB_TIMERS_START:
1134                         sctp_cmd_hb_timers_start(commands, asoc);
1135                         break;
1136
1137                 case SCTP_CMD_HB_TIMER_UPDATE:
1138                         t = cmd->obj.transport;
1139                         sctp_cmd_hb_timer_update(commands, asoc, t);
1140                         break;
1141
1142                 case SCTP_CMD_HB_TIMERS_STOP:
1143                         sctp_cmd_hb_timers_stop(commands, asoc);
1144                         break;
1145
1146                 case SCTP_CMD_REPORT_ERROR:
1147                         error = cmd->obj.error;
1148                         break;
1149
1150                 case SCTP_CMD_PROCESS_CTSN:
1151                         /* Dummy up a SACK for processing. */
1152                         sackh.cum_tsn_ack = cmd->obj.u32;
1153                         sackh.a_rwnd = 0;
1154                         sackh.num_gap_ack_blocks = 0;
1155                         sackh.num_dup_tsns = 0;
1156                         sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_SACK,
1157                                         SCTP_SACKH(&sackh));
1158                         break;
1159
1160                 case SCTP_CMD_DISCARD_PACKET:
1161                         /* We need to discard the whole packet.  */
1162                         chunk->pdiscard = 1;
1163                         break;
1164
1165                 case SCTP_CMD_RTO_PENDING:
1166                         t = cmd->obj.transport;
1167                         t->rto_pending = 1;
1168                         break;
1169
1170                 case SCTP_CMD_PART_DELIVER:
1171                         sctp_ulpq_partial_delivery(&asoc->ulpq, cmd->obj.ptr,
1172                                                    GFP_ATOMIC);
1173                         break;
1174
1175                 case SCTP_CMD_RENEGE:
1176                         sctp_ulpq_renege(&asoc->ulpq, cmd->obj.ptr,
1177                                          GFP_ATOMIC);
1178                         break;
1179
1180                 default:
1181                         printk(KERN_WARNING "Impossible command: %u, %p\n",
1182                                cmd->verb, cmd->obj.ptr);
1183                         break;
1184                 };
1185                 if (error)
1186                         break;
1187         }
1188
1189 out:
1190         if (local_cork)
1191                 sctp_outq_uncork(&asoc->outqueue);
1192         return error;
1193 nomem:
1194         error = -ENOMEM;
1195         goto out;
1196 }
1197