147505b8bSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
260c778b2SVlad Yasevich /* SCTP kernel implementation
31da177e4SLinus Torvalds * (C) Copyright IBM Corp. 2001, 2004
41da177e4SLinus Torvalds * Copyright (c) 1999-2000 Cisco, Inc.
51da177e4SLinus Torvalds * Copyright (c) 1999-2001 Motorola, Inc.
61da177e4SLinus Torvalds * Copyright (c) 2001 Intel Corp.
71da177e4SLinus Torvalds * Copyright (c) 2001 Nokia, Inc.
81da177e4SLinus Torvalds *
960c778b2SVlad Yasevich * This file is part of the SCTP kernel implementation
101da177e4SLinus Torvalds *
111da177e4SLinus Torvalds * These are the state tables for the SCTP state machine.
121da177e4SLinus Torvalds *
131da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the
141da177e4SLinus Torvalds * email address(es):
1591705c61SDaniel Borkmann * lksctp developers <linux-sctp@vger.kernel.org>
161da177e4SLinus Torvalds *
171da177e4SLinus Torvalds * Written or modified by:
181da177e4SLinus Torvalds * La Monte H.P. Yarroll <piggy@acm.org>
191da177e4SLinus Torvalds * Karl Knutson <karl@athena.chicago.il.us>
201da177e4SLinus Torvalds * Jon Grimm <jgrimm@us.ibm.com>
211da177e4SLinus Torvalds * Hui Huang <hui.huang@nokia.com>
221da177e4SLinus Torvalds * Daisy Chang <daisyc@us.ibm.com>
231da177e4SLinus Torvalds * Ardelle Fan <ardelle.fan@intel.com>
241da177e4SLinus Torvalds * Sridhar Samudrala <sri@us.ibm.com>
251da177e4SLinus Torvalds */
261da177e4SLinus Torvalds
27145ce502SJoe Perches #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
28145ce502SJoe Perches
291da177e4SLinus Torvalds #include <linux/skbuff.h>
301da177e4SLinus Torvalds #include <net/sctp/sctp.h>
311da177e4SLinus Torvalds #include <net/sctp/sm.h>
321da177e4SLinus Torvalds
338ee821aeSXin Long static const struct sctp_sm_table_entry
341da177e4SLinus Torvalds primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES];
358ee821aeSXin Long static const struct sctp_sm_table_entry
361da177e4SLinus Torvalds other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES];
378ee821aeSXin Long static const struct sctp_sm_table_entry
381da177e4SLinus Torvalds timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES];
391da177e4SLinus Torvalds
408ee821aeSXin Long static const struct sctp_sm_table_entry *sctp_chunk_event_lookup(
4152106019SXin Long struct net *net,
426d85e68fSXin Long enum sctp_cid cid,
4352106019SXin Long enum sctp_state state);
441da177e4SLinus Torvalds
451da177e4SLinus Torvalds
468ee821aeSXin Long static const struct sctp_sm_table_entry bug = {
471da177e4SLinus Torvalds .fn = sctp_sf_bug,
481da177e4SLinus Torvalds .name = "sctp_sf_bug"
491da177e4SLinus Torvalds };
501da177e4SLinus Torvalds
511da177e4SLinus Torvalds #define DO_LOOKUP(_max, _type, _table) \
52145ce502SJoe Perches ({ \
538ee821aeSXin Long const struct sctp_sm_table_entry *rtn; \
54145ce502SJoe Perches \
551da177e4SLinus Torvalds if ((event_subtype._type > (_max))) { \
56145ce502SJoe Perches pr_warn("table %p possible attack: event %d exceeds max %d\n", \
571da177e4SLinus Torvalds _table, event_subtype._type, _max); \
58145ce502SJoe Perches rtn = &bug; \
59145ce502SJoe Perches } else \
60145ce502SJoe Perches rtn = &_table[event_subtype._type][(int)state]; \
61145ce502SJoe Perches \
62145ce502SJoe Perches rtn; \
63145ce502SJoe Perches })
641da177e4SLinus Torvalds
sctp_sm_lookup_event(struct net * net,enum sctp_event_type event_type,enum sctp_state state,union sctp_subtype event_subtype)658ee821aeSXin Long const struct sctp_sm_table_entry *sctp_sm_lookup_event(
66bfc6f827SXin Long struct net *net,
6788ee48c1SXin Long enum sctp_event_type event_type,
6852106019SXin Long enum sctp_state state,
69bfc6f827SXin Long union sctp_subtype event_subtype)
701da177e4SLinus Torvalds {
711da177e4SLinus Torvalds switch (event_type) {
721da177e4SLinus Torvalds case SCTP_EVENT_T_CHUNK:
7355e26eb9SEric W. Biederman return sctp_chunk_event_lookup(net, event_subtype.chunk, state);
741da177e4SLinus Torvalds case SCTP_EVENT_T_TIMEOUT:
75145ce502SJoe Perches return DO_LOOKUP(SCTP_EVENT_TIMEOUT_MAX, timeout,
761da177e4SLinus Torvalds timeout_event_table);
771da177e4SLinus Torvalds case SCTP_EVENT_T_OTHER:
78145ce502SJoe Perches return DO_LOOKUP(SCTP_EVENT_OTHER_MAX, other,
79145ce502SJoe Perches other_event_table);
801da177e4SLinus Torvalds case SCTP_EVENT_T_PRIMITIVE:
81145ce502SJoe Perches return DO_LOOKUP(SCTP_EVENT_PRIMITIVE_MAX, primitive,
821da177e4SLinus Torvalds primitive_event_table);
831da177e4SLinus Torvalds default:
841da177e4SLinus Torvalds /* Yikes! We got an illegal event type. */
851da177e4SLinus Torvalds return &bug;
863ff50b79SStephen Hemminger }
871da177e4SLinus Torvalds }
881da177e4SLinus Torvalds
891ed176a8SPeter Zijlstra #define TYPE_SCTP_FUNC(func) {.fn = func, .name = #func}
901ed176a8SPeter Zijlstra
911da177e4SLinus Torvalds #define TYPE_SCTP_DATA { \
921da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
93ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
941da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
951ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
961da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
971ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
981da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
991ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \
1001da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1011ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \
1021da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_data_fast_4_4), \
1041da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
1051ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1061da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
1071ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1081da177e4SLinus Torvalds } /* TYPE_SCTP_DATA */
1091da177e4SLinus Torvalds
1101da177e4SLinus Torvalds #define TYPE_SCTP_INIT { \
1111da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
1121ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_1B_init), \
1131da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
1141ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \
1151da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
1161ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \
1171da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
1181ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
1191da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1201ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
1211da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
1231da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
1241ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
1251da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
1261ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_reshutack), \
1271da177e4SLinus Torvalds } /* TYPE_SCTP_INIT */
1281da177e4SLinus Torvalds
1291da177e4SLinus Torvalds #define TYPE_SCTP_INIT_ACK { \
1301da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
131610ab73aSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_5_2_3_initack), \
1321da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
1331ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_1C_ack), \
1341da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
1351ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1361da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
1371ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1381da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1391ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1401da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1411ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1421da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
1431ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1441da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
1451ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1461da177e4SLinus Torvalds } /* TYPE_SCTP_INIT_ACK */
1471da177e4SLinus Torvalds
1481da177e4SLinus Torvalds #define TYPE_SCTP_SACK { \
1491da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
150ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
1511da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
1521ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1531da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
1541ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
1551da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
1561ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
1571da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
1591da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1611da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
1621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
1631da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
1641ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1651da177e4SLinus Torvalds } /* TYPE_SCTP_SACK */
1661da177e4SLinus Torvalds
1671da177e4SLinus Torvalds #define TYPE_SCTP_HEARTBEAT { \
1681da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
169ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
1701da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
1711ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1721da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
1731ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1741da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
1751ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1761da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1771ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1781da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1791ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1801da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
1811ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1821da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
1831da177e4SLinus Torvalds /* This should not happen, but we are nice. */ \
1841ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
1851da177e4SLinus Torvalds } /* TYPE_SCTP_HEARTBEAT */
1861da177e4SLinus Torvalds
1871da177e4SLinus Torvalds #define TYPE_SCTP_HEARTBEAT_ACK { \
1881da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
189ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
1901da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
1911ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_violation), \
1921da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
1931ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
1941da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
1951ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
1961da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
1971ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
1981da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
1991ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
2001da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2011ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
2021da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2041da177e4SLinus Torvalds } /* TYPE_SCTP_HEARTBEAT_ACK */
2051da177e4SLinus Torvalds
2061da177e4SLinus Torvalds #define TYPE_SCTP_ABORT { \
2071da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
2081ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_pdiscard), \
2091da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
2101ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_wait_abort), \
2111da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
2121ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_abort), \
2131da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
2141ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \
2151da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
2161ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_abort), \
2171da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
2181ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_abort), \
2191da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2201ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \
2211da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_abort), \
2231da177e4SLinus Torvalds } /* TYPE_SCTP_ABORT */
2241da177e4SLinus Torvalds
2251da177e4SLinus Torvalds #define TYPE_SCTP_SHUTDOWN { \
2261da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
227ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
2281da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
2291ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2301da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
2311ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2321da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
2331ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \
2341da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
235cf896d51SWei Yongjun TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \
2361da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
2371ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \
2381da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2392e3f92daSWei Yongjun TYPE_SCTP_FUNC(sctp_sf_do_9_2_shut_ctsn), \
2401da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2411ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2421da177e4SLinus Torvalds } /* TYPE_SCTP_SHUTDOWN */
2431da177e4SLinus Torvalds
2441da177e4SLinus Torvalds #define TYPE_SCTP_SHUTDOWN_ACK { \
2451da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
2461ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ootb), \
2471da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
2481ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \
2491da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
2501ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \
2511da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
2521ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_violation), \
2531da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
2541ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_violation), \
2551da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
2561ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \
2571da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_violation), \
2591da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \
2611da177e4SLinus Torvalds } /* TYPE_SCTP_SHUTDOWN_ACK */
2621da177e4SLinus Torvalds
2631da177e4SLinus Torvalds #define TYPE_SCTP_ERROR { \
2641da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
265ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
2661da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
2671ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2681da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
2691ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_err), \
2701da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
2711ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
2721da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
2731ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
2741da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
2751ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2761da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2771ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
2781da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2791ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
2801da177e4SLinus Torvalds } /* TYPE_SCTP_ERROR */
2811da177e4SLinus Torvalds
2821da177e4SLinus Torvalds #define TYPE_SCTP_COOKIE_ECHO { \
2831da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
2841ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_1D_ce), \
2851da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
2861ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2871da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
2881ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2891da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
2901ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2911da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
2921ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2931da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
2941ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2951da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
2961ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2971da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
2981ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
2991da177e4SLinus Torvalds } /* TYPE_SCTP_COOKIE_ECHO */
3001da177e4SLinus Torvalds
3011da177e4SLinus Torvalds #define TYPE_SCTP_COOKIE_ACK { \
3021da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
3031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3041da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
3051ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3061da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
3071ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_5_1E_ca), \
3081da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
3091ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3101da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
3111ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3121da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
3131ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3141da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
3151ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3161da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
3171ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3181da177e4SLinus Torvalds } /* TYPE_SCTP_COOKIE_ACK */
3191da177e4SLinus Torvalds
3201da177e4SLinus Torvalds #define TYPE_SCTP_ECN_ECNE { \
3211da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
3221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3231da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
3241ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3251da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
3261ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
3271da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
3281ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
3291da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
3301ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
3311da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
3321ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
3331da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
3341ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
3351da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
3361ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3371da177e4SLinus Torvalds } /* TYPE_SCTP_ECN_ECNE */
3381da177e4SLinus Torvalds
3391da177e4SLinus Torvalds #define TYPE_SCTP_ECN_CWR { \
3401da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
3411ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3421da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
3431ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3441da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
3451ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3461da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
3471ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
3481da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
3491ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
3501da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
3511ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
3521da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
3531ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3541da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
3551ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3561da177e4SLinus Torvalds } /* TYPE_SCTP_ECN_CWR */
3571da177e4SLinus Torvalds
3581da177e4SLinus Torvalds #define TYPE_SCTP_SHUTDOWN_COMPLETE { \
3591da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
3601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3611da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
3621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3631da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
3641ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3651da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
3661ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3671da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
3681ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3691da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
3701ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3711da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
3721ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
3731da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
3741ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_4_C), \
3751da177e4SLinus Torvalds } /* TYPE_SCTP_SHUTDOWN_COMPLETE */
3761da177e4SLinus Torvalds
3771da177e4SLinus Torvalds /* The primary index for this table is the chunk type.
3781da177e4SLinus Torvalds * The secondary index for this table is the state.
3791da177e4SLinus Torvalds *
3801da177e4SLinus Torvalds * For base protocol (RFC 2960).
3811da177e4SLinus Torvalds */
3828ee821aeSXin Long static const struct sctp_sm_table_entry
3838ee821aeSXin Long chunk_event_table[SCTP_NUM_BASE_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
3841da177e4SLinus Torvalds TYPE_SCTP_DATA,
3851da177e4SLinus Torvalds TYPE_SCTP_INIT,
3861da177e4SLinus Torvalds TYPE_SCTP_INIT_ACK,
3871da177e4SLinus Torvalds TYPE_SCTP_SACK,
3881da177e4SLinus Torvalds TYPE_SCTP_HEARTBEAT,
3891da177e4SLinus Torvalds TYPE_SCTP_HEARTBEAT_ACK,
3901da177e4SLinus Torvalds TYPE_SCTP_ABORT,
3911da177e4SLinus Torvalds TYPE_SCTP_SHUTDOWN,
3921da177e4SLinus Torvalds TYPE_SCTP_SHUTDOWN_ACK,
3931da177e4SLinus Torvalds TYPE_SCTP_ERROR,
3941da177e4SLinus Torvalds TYPE_SCTP_COOKIE_ECHO,
3951da177e4SLinus Torvalds TYPE_SCTP_COOKIE_ACK,
3961da177e4SLinus Torvalds TYPE_SCTP_ECN_ECNE,
3971da177e4SLinus Torvalds TYPE_SCTP_ECN_CWR,
3981da177e4SLinus Torvalds TYPE_SCTP_SHUTDOWN_COMPLETE,
3991da177e4SLinus Torvalds }; /* state_fn_t chunk_event_table[][] */
4001da177e4SLinus Torvalds
4011da177e4SLinus Torvalds #define TYPE_SCTP_ASCONF { \
4021da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
4031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4041da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
4051ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4061da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
4071ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4081da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
4091ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
4101da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
411ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
4121da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
413ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
4141da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
415ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
4161da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
4171ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4181da177e4SLinus Torvalds } /* TYPE_SCTP_ASCONF */
4191da177e4SLinus Torvalds
4201da177e4SLinus Torvalds #define TYPE_SCTP_ASCONF_ACK { \
4211da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
4221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4231da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
4241ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4251da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
4261ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4271da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
4281ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
4291da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
430ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
4311da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
432ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
4331da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
434ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
4351da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
4361ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4371da177e4SLinus Torvalds } /* TYPE_SCTP_ASCONF_ACK */
4381da177e4SLinus Torvalds
4391da177e4SLinus Torvalds /* The primary index for this table is the chunk type.
4401da177e4SLinus Torvalds * The secondary index for this table is the state.
4411da177e4SLinus Torvalds */
4428ee821aeSXin Long static const struct sctp_sm_table_entry
4438ee821aeSXin Long addip_chunk_event_table[SCTP_NUM_ADDIP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
4441da177e4SLinus Torvalds TYPE_SCTP_ASCONF,
4451da177e4SLinus Torvalds TYPE_SCTP_ASCONF_ACK,
4461da177e4SLinus Torvalds }; /*state_fn_t addip_chunk_event_table[][] */
4471da177e4SLinus Torvalds
4481da177e4SLinus Torvalds #define TYPE_SCTP_FWD_TSN { \
4491da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
450ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
4511da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
4521ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4531da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
4541ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4551da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
4561ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \
4571da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
4581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \
4591da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
4601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn_fast), \
4611da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
4621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4631da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
4641ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
4651da177e4SLinus Torvalds } /* TYPE_SCTP_FWD_TSN */
4661da177e4SLinus Torvalds
4671da177e4SLinus Torvalds /* The primary index for this table is the chunk type.
4681da177e4SLinus Torvalds * The secondary index for this table is the state.
4691da177e4SLinus Torvalds */
4708ee821aeSXin Long static const struct sctp_sm_table_entry
4718ee821aeSXin Long prsctp_chunk_event_table[SCTP_NUM_PRSCTP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
4721da177e4SLinus Torvalds TYPE_SCTP_FWD_TSN,
4731da177e4SLinus Torvalds }; /*state_fn_t prsctp_chunk_event_table[][] */
4741da177e4SLinus Torvalds
475d884aa63SXin Long #define TYPE_SCTP_RECONF { \
476d884aa63SXin Long /* SCTP_STATE_CLOSED */ \
477d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
478d884aa63SXin Long /* SCTP_STATE_COOKIE_WAIT */ \
479d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
480d884aa63SXin Long /* SCTP_STATE_COOKIE_ECHOED */ \
481d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
482d884aa63SXin Long /* SCTP_STATE_ESTABLISHED */ \
483d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_do_reconf), \
484d884aa63SXin Long /* SCTP_STATE_SHUTDOWN_PENDING */ \
485d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_do_reconf), \
486d884aa63SXin Long /* SCTP_STATE_SHUTDOWN_SENT */ \
487d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
488d884aa63SXin Long /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
489d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
490d884aa63SXin Long /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
491d884aa63SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
492d884aa63SXin Long } /* TYPE_SCTP_RECONF */
493d884aa63SXin Long
494d884aa63SXin Long /* The primary index for this table is the chunk type.
495d884aa63SXin Long * The secondary index for this table is the state.
496d884aa63SXin Long */
4978ee821aeSXin Long static const struct sctp_sm_table_entry
4988ee821aeSXin Long reconf_chunk_event_table[SCTP_NUM_RECONF_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
499d884aa63SXin Long TYPE_SCTP_RECONF,
500d884aa63SXin Long }; /*state_fn_t reconf_chunk_event_table[][] */
501d884aa63SXin Long
502bbd0d598SVlad Yasevich #define TYPE_SCTP_AUTH { \
503bbd0d598SVlad Yasevich /* SCTP_STATE_CLOSED */ \
504bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb), \
505bbd0d598SVlad Yasevich /* SCTP_STATE_COOKIE_WAIT */ \
506bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
507bbd0d598SVlad Yasevich /* SCTP_STATE_COOKIE_ECHOED */ \
508bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
509bbd0d598SVlad Yasevich /* SCTP_STATE_ESTABLISHED */ \
510bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
511bbd0d598SVlad Yasevich /* SCTP_STATE_SHUTDOWN_PENDING */ \
512bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
513bbd0d598SVlad Yasevich /* SCTP_STATE_SHUTDOWN_SENT */ \
514bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
515bbd0d598SVlad Yasevich /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
516bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
517bbd0d598SVlad Yasevich /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
518bbd0d598SVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
519bbd0d598SVlad Yasevich } /* TYPE_SCTP_AUTH */
520bbd0d598SVlad Yasevich
521bbd0d598SVlad Yasevich /* The primary index for this table is the chunk type.
522bbd0d598SVlad Yasevich * The secondary index for this table is the state.
523bbd0d598SVlad Yasevich */
5248ee821aeSXin Long static const struct sctp_sm_table_entry
5258ee821aeSXin Long auth_chunk_event_table[SCTP_NUM_AUTH_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
526bbd0d598SVlad Yasevich TYPE_SCTP_AUTH,
527bbd0d598SVlad Yasevich }; /*state_fn_t auth_chunk_event_table[][] */
528bbd0d598SVlad Yasevich
5298ee821aeSXin Long static const struct sctp_sm_table_entry
530745a3211SXin Long pad_chunk_event_table[SCTP_STATE_NUM_STATES] = {
531745a3211SXin Long /* SCTP_STATE_CLOSED */
532745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
533745a3211SXin Long /* SCTP_STATE_COOKIE_WAIT */
534745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
535745a3211SXin Long /* SCTP_STATE_COOKIE_ECHOED */
536745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
537745a3211SXin Long /* SCTP_STATE_ESTABLISHED */
538745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
539745a3211SXin Long /* SCTP_STATE_SHUTDOWN_PENDING */
540745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
541745a3211SXin Long /* SCTP_STATE_SHUTDOWN_SENT */
542745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
543745a3211SXin Long /* SCTP_STATE_SHUTDOWN_RECEIVED */
544745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
545745a3211SXin Long /* SCTP_STATE_SHUTDOWN_ACK_SENT */
546745a3211SXin Long TYPE_SCTP_FUNC(sctp_sf_discard_chunk),
547745a3211SXin Long }; /* chunk pad */
548745a3211SXin Long
549745a3211SXin Long static const struct sctp_sm_table_entry
5501da177e4SLinus Torvalds chunk_event_table_unknown[SCTP_STATE_NUM_STATES] = {
5511da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */
552ece25dfaSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_ootb),
5531da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */
5541ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5551da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */
5561ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5571da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */
5581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5591da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */
5601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5611da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */
5621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5631da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */
5641ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5651da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */
5661ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
5671da177e4SLinus Torvalds }; /* chunk unknown */
5681da177e4SLinus Torvalds
5691da177e4SLinus Torvalds
5701da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_ASSOCIATE { \
5711da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
5721ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_asoc), \
5731da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
5741ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5751da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
5761ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5771da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
5781ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5791da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
5801ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5811da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
5821ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5831da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
5841ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5851da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
5861ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_not_impl), \
5871da177e4SLinus Torvalds } /* TYPE_SCTP_PRIMITIVE_ASSOCIATE */
5881da177e4SLinus Torvalds
5891da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_SHUTDOWN { \
5901da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
5911ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
5921da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
5931ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_shutdown), \
5941da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
5951ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_shutdown),\
5961da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
5971ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_prm_shutdown), \
5981da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
5991ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
6001da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
6011ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
6021da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
6031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
6041da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
6051ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
6061da177e4SLinus Torvalds } /* TYPE_SCTP_PRIMITIVE_SHUTDOWN */
6071da177e4SLinus Torvalds
6081da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_ABORT { \
6091da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
6101ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6111da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
6121ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_abort), \
6131da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
6141ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_abort), \
6151da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
6161ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \
6171da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
6181ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_prm_abort), \
6191da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
6201ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_prm_abort), \
6211da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
6221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \
6231da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
6241ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_prm_abort), \
6251da177e4SLinus Torvalds } /* TYPE_SCTP_PRIMITIVE_ABORT */
6261da177e4SLinus Torvalds
6271da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_SEND { \
6281da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
6291ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6301da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
6311ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
6321da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
6331ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
6341da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
6351ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
6361da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
6371ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
6381da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
6391ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
6401da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
6411ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
6421da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
6431ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
6441da177e4SLinus Torvalds } /* TYPE_SCTP_PRIMITIVE_SEND */
6451da177e4SLinus Torvalds
6461da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT { \
6471da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
6481ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6491da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
6501ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6511da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
6521ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6531da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
6541ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6551da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
6561ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6571da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
6581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6591da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
6601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6611da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
6621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
6631da177e4SLinus Torvalds } /* TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT */
6641da177e4SLinus Torvalds
6651da177e4SLinus Torvalds #define TYPE_SCTP_PRIMITIVE_ASCONF { \
6661da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
6671ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6681da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
6691ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6701da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
6711ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6721da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
6731ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
6741da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
675ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
6761da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
677ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
6781da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
679ba8a06daSVlad Yasevich TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
6801da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
6811ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
6824553e88dSWei Yongjun } /* TYPE_SCTP_PRIMITIVE_ASCONF */
6831da177e4SLinus Torvalds
6847a090b04SXin Long #define TYPE_SCTP_PRIMITIVE_RECONF { \
6857a090b04SXin Long /* SCTP_STATE_CLOSED */ \
6867a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6877a090b04SXin Long /* SCTP_STATE_COOKIE_WAIT */ \
6887a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6897a090b04SXin Long /* SCTP_STATE_COOKIE_ECHOED */ \
6907a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_error_closed), \
6917a090b04SXin Long /* SCTP_STATE_ESTABLISHED */ \
6927a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
6937a090b04SXin Long /* SCTP_STATE_SHUTDOWN_PENDING */ \
6947a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
6957a090b04SXin Long /* SCTP_STATE_SHUTDOWN_SENT */ \
6967a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
6977a090b04SXin Long /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
6987a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
6997a090b04SXin Long /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
7007a090b04SXin Long TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
7017a090b04SXin Long } /* TYPE_SCTP_PRIMITIVE_RECONF */
7027a090b04SXin Long
7031da177e4SLinus Torvalds /* The primary index for this table is the primitive type.
7041da177e4SLinus Torvalds * The secondary index for this table is the state.
7051da177e4SLinus Torvalds */
7068ee821aeSXin Long static const struct sctp_sm_table_entry
7078ee821aeSXin Long primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES] = {
7081da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_ASSOCIATE,
7091da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_SHUTDOWN,
7101da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_ABORT,
7111da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_SEND,
7121da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT,
7131da177e4SLinus Torvalds TYPE_SCTP_PRIMITIVE_ASCONF,
7147a090b04SXin Long TYPE_SCTP_PRIMITIVE_RECONF,
7151da177e4SLinus Torvalds };
7161da177e4SLinus Torvalds
7171da177e4SLinus Torvalds #define TYPE_SCTP_OTHER_NO_PENDING_TSN { \
7181da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
7191ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7201da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
7211ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7221da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
7231ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7241da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
725e1cdd553SWei Yongjun TYPE_SCTP_FUNC(sctp_sf_do_no_pending_tsn), \
7261da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
7271ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_start_shutdown), \
7281da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
7291ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7301da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
7311ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \
7321da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
7331ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7341da177e4SLinus Torvalds }
7351da177e4SLinus Torvalds
7361da177e4SLinus Torvalds #define TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH { \
7371da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
7381ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7391da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
7401ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_cookie_wait_icmp_abort), \
7411da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
7421ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7431da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
7441ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7451da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
7461ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7471da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
7481ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7491da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
7501ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7511da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
7521ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
7531da177e4SLinus Torvalds }
7541da177e4SLinus Torvalds
7558ee821aeSXin Long static const struct sctp_sm_table_entry
7568ee821aeSXin Long other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES] = {
7571da177e4SLinus Torvalds TYPE_SCTP_OTHER_NO_PENDING_TSN,
7581da177e4SLinus Torvalds TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH,
7591da177e4SLinus Torvalds };
7601da177e4SLinus Torvalds
7611da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_NONE { \
7621da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
7631ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7641da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
7651ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7661da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
7671ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7681da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
7691ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7701da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
7711ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7721da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
7731ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7741da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
7751ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7761da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
7771ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7781da177e4SLinus Torvalds }
7791da177e4SLinus Torvalds
7801da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE { \
7811da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
7821ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7831da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
7841ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_bug), \
7851da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
7861ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t1_cookie_timer_expire), \
7871da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
7881ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7891da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
7901ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7911da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
7921ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7931da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
7941ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7951da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
7961ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
7971da177e4SLinus Torvalds }
7981da177e4SLinus Torvalds
7991da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T1_INIT { \
8001da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8011ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8021da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8031ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t1_init_timer_expire), \
8041da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
8051ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8061da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
8071ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8081da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
8091ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8101da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
8111ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8121da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
8131ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8141da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
8151ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8161da177e4SLinus Torvalds }
8171da177e4SLinus Torvalds
8181da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN { \
8191da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8201ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8211da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8221ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8231da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
8241ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8251da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
8261ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8271da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
8281ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8291da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
8301ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \
8311da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
8321ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8331da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
8341ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \
8351da177e4SLinus Torvalds }
8361da177e4SLinus Torvalds
8371da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T3_RTX { \
8381da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8391ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8401da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8411ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8421da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
8431ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
8441da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
8451ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
8461da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
8471ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
8481da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
8491ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8501da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
8511ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
8521da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
8531ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8541da177e4SLinus Torvalds }
8551da177e4SLinus Torvalds
8561da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T4_RTO { \
8571da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8581ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8591da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8601ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8611da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
8621ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8631da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
8641ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t4_timer_expire), \
8651da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
8661ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8671da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
8681ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8691da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
8701ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8711da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
8721ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8731da177e4SLinus Torvalds }
8741da177e4SLinus Torvalds
8751da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD { \
8761da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8771ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8781da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8791ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8801da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
8811ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8821da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
8831ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8841da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
885f8d96052SThomas Graf TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \
8861da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
8871ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \
8881da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
8891ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8901da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
8911ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8921da177e4SLinus Torvalds }
8931da177e4SLinus Torvalds
8941da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT { \
8951da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
8961ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8971da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
8981ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
8991da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
9001ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9011da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
9021ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
9031da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
9041ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
9051da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
9061ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9071da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
9081ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
9091da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
9101ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9111da177e4SLinus Torvalds }
9121da177e4SLinus Torvalds
9131da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_SACK { \
9141da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
9151ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9161da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
9171ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9181da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
9191ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9201da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
9211ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
9221da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
9231ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
9241da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
9251ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
9261da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
9271ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9281da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
9291ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9301da177e4SLinus Torvalds }
9311da177e4SLinus Torvalds
9321da177e4SLinus Torvalds #define TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE { \
9331da177e4SLinus Torvalds /* SCTP_STATE_CLOSED */ \
9341ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9351da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_WAIT */ \
9361ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9371da177e4SLinus Torvalds /* SCTP_STATE_COOKIE_ECHOED */ \
9381ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9391da177e4SLinus Torvalds /* SCTP_STATE_ESTABLISHED */ \
9401ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_autoclose_timer_expire), \
9411da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_PENDING */ \
9421ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9431da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_SENT */ \
9441ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9451da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
9461ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9471da177e4SLinus Torvalds /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
9481ed176a8SPeter Zijlstra TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9491da177e4SLinus Torvalds }
9501da177e4SLinus Torvalds
9517b9438deSXin Long #define TYPE_SCTP_EVENT_TIMEOUT_RECONF { \
9527b9438deSXin Long /* SCTP_STATE_CLOSED */ \
9537b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9547b9438deSXin Long /* SCTP_STATE_COOKIE_WAIT */ \
9557b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9567b9438deSXin Long /* SCTP_STATE_COOKIE_ECHOED */ \
9577b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9587b9438deSXin Long /* SCTP_STATE_ESTABLISHED */ \
9597b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_send_reconf), \
9607b9438deSXin Long /* SCTP_STATE_SHUTDOWN_PENDING */ \
9617b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9627b9438deSXin Long /* SCTP_STATE_SHUTDOWN_SENT */ \
9637b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9647b9438deSXin Long /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
9657b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9667b9438deSXin Long /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
9677b9438deSXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
9687b9438deSXin Long }
9697b9438deSXin Long
970*92548ec2SXin Long #define TYPE_SCTP_EVENT_TIMEOUT_PROBE { \
971*92548ec2SXin Long /* SCTP_STATE_CLOSED */ \
972*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
973*92548ec2SXin Long /* SCTP_STATE_COOKIE_WAIT */ \
974*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
975*92548ec2SXin Long /* SCTP_STATE_COOKIE_ECHOED */ \
976*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
977*92548ec2SXin Long /* SCTP_STATE_ESTABLISHED */ \
978*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_send_probe), \
979*92548ec2SXin Long /* SCTP_STATE_SHUTDOWN_PENDING */ \
980*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
981*92548ec2SXin Long /* SCTP_STATE_SHUTDOWN_SENT */ \
982*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
983*92548ec2SXin Long /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
984*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
985*92548ec2SXin Long /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
986*92548ec2SXin Long TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
987*92548ec2SXin Long }
988*92548ec2SXin Long
9898ee821aeSXin Long static const struct sctp_sm_table_entry
9908ee821aeSXin Long timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES] = {
9911da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_NONE,
9921da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE,
9931da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T1_INIT,
9941da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN,
9951da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T3_RTX,
9961da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T4_RTO,
9971da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD,
9981da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT,
9997b9438deSXin Long TYPE_SCTP_EVENT_TIMEOUT_RECONF,
1000*92548ec2SXin Long TYPE_SCTP_EVENT_TIMEOUT_PROBE,
10011da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_SACK,
10021da177e4SLinus Torvalds TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE,
10031da177e4SLinus Torvalds };
10041da177e4SLinus Torvalds
sctp_chunk_event_lookup(struct net * net,enum sctp_cid cid,enum sctp_state state)10058ee821aeSXin Long static const struct sctp_sm_table_entry *sctp_chunk_event_lookup(
100652106019SXin Long struct net *net,
10076d85e68fSXin Long enum sctp_cid cid,
100852106019SXin Long enum sctp_state state)
10091da177e4SLinus Torvalds {
10101da177e4SLinus Torvalds if (state > SCTP_STATE_MAX)
10111da177e4SLinus Torvalds return &bug;
10121da177e4SLinus Torvalds
10130fc2ea92SXin Long if (cid == SCTP_CID_I_DATA)
10149d4ceaf1SXin Long cid = SCTP_CID_DATA;
10159d4ceaf1SXin Long
101675202e76SBill Nottingham if (cid <= SCTP_CID_BASE_MAX)
10171da177e4SLinus Torvalds return &chunk_event_table[cid][state];
10181da177e4SLinus Torvalds
10192f757634SXin Long switch ((u16)cid) {
10202f757634SXin Long case SCTP_CID_FWD_TSN:
10212f757634SXin Long case SCTP_CID_I_FWD_TSN:
10221da177e4SLinus Torvalds return &prsctp_chunk_event_table[0][state];
10231da177e4SLinus Torvalds
10242f757634SXin Long case SCTP_CID_ASCONF:
10251da177e4SLinus Torvalds return &addip_chunk_event_table[0][state];
10261da177e4SLinus Torvalds
10272f757634SXin Long case SCTP_CID_ASCONF_ACK:
10281da177e4SLinus Torvalds return &addip_chunk_event_table[1][state];
10291da177e4SLinus Torvalds
10302f757634SXin Long case SCTP_CID_RECONF:
1031d884aa63SXin Long return &reconf_chunk_event_table[0][state];
1032d884aa63SXin Long
10332f757634SXin Long case SCTP_CID_AUTH:
1034bbd0d598SVlad Yasevich return &auth_chunk_event_table[0][state];
1035745a3211SXin Long
1036745a3211SXin Long case SCTP_CID_PAD:
1037745a3211SXin Long return &pad_chunk_event_table[state];
1038bbd0d598SVlad Yasevich }
1039bbd0d598SVlad Yasevich
10401da177e4SLinus Torvalds return &chunk_event_table_unknown[state];
10411da177e4SLinus Torvalds }
1042