^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* SCTP kernel implementation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * (C) Copyright IBM Corp. 2001, 2004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 1999-2000 Cisco, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 1999-2001 Motorola, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright (c) 2001 Intel Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Copyright (c) 2001 Nokia, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * This file is part of the SCTP kernel implementation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * These are the state tables for the SCTP state machine.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * Please send any bug reports or fixes you make to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * email address(es):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * lksctp developers <linux-sctp@vger.kernel.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * Written or modified by:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * La Monte H.P. Yarroll <piggy@acm.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * Karl Knutson <karl@athena.chicago.il.us>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * Jon Grimm <jgrimm@us.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * Hui Huang <hui.huang@nokia.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * Daisy Chang <daisyc@us.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * Ardelle Fan <ardelle.fan@intel.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * Sridhar Samudrala <sri@us.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #include <net/sctp/sctp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #include <net/sctp/sm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) static const struct sctp_sm_table_entry *sctp_chunk_event_lookup(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) struct net *net,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) enum sctp_cid cid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) enum sctp_state state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) static const struct sctp_sm_table_entry bug = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .fn = sctp_sf_bug,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) .name = "sctp_sf_bug"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define DO_LOOKUP(_max, _type, _table) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) const struct sctp_sm_table_entry *rtn; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) if ((event_subtype._type > (_max))) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) pr_warn("table %p possible attack: event %d exceeds max %d\n", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) _table, event_subtype._type, _max); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) rtn = &bug; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) } else \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) rtn = &_table[event_subtype._type][(int)state]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) rtn; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) const struct sctp_sm_table_entry *sctp_sm_lookup_event(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct net *net,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) enum sctp_event_type event_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) enum sctp_state state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) union sctp_subtype event_subtype)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) switch (event_type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) case SCTP_EVENT_T_CHUNK:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) return sctp_chunk_event_lookup(net, event_subtype.chunk, state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) case SCTP_EVENT_T_TIMEOUT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) return DO_LOOKUP(SCTP_EVENT_TIMEOUT_MAX, timeout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) timeout_event_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) case SCTP_EVENT_T_OTHER:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) return DO_LOOKUP(SCTP_EVENT_OTHER_MAX, other,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) other_event_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) case SCTP_EVENT_T_PRIMITIVE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) return DO_LOOKUP(SCTP_EVENT_PRIMITIVE_MAX, primitive,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) primitive_event_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* Yikes! We got an illegal event type. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) return &bug;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define TYPE_SCTP_FUNC(func) {.fn = func, .name = #func}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define TYPE_SCTP_DATA { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) TYPE_SCTP_FUNC(sctp_sf_eat_data_fast_4_4), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) } /* TYPE_SCTP_DATA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define TYPE_SCTP_INIT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) TYPE_SCTP_FUNC(sctp_sf_do_5_1B_init), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) TYPE_SCTP_FUNC(sctp_sf_do_9_2_reshutack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) } /* TYPE_SCTP_INIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define TYPE_SCTP_INIT_ACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) TYPE_SCTP_FUNC(sctp_sf_do_5_2_3_initack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) TYPE_SCTP_FUNC(sctp_sf_do_5_1C_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) } /* TYPE_SCTP_INIT_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define TYPE_SCTP_SACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) } /* TYPE_SCTP_SACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define TYPE_SCTP_HEARTBEAT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /* This should not happen, but we are nice. */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) } /* TYPE_SCTP_HEARTBEAT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define TYPE_SCTP_HEARTBEAT_ACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) TYPE_SCTP_FUNC(sctp_sf_violation), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) } /* TYPE_SCTP_HEARTBEAT_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define TYPE_SCTP_ABORT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) TYPE_SCTP_FUNC(sctp_sf_pdiscard), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) TYPE_SCTP_FUNC(sctp_sf_cookie_wait_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) } /* TYPE_SCTP_ABORT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define TYPE_SCTP_SHUTDOWN { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) TYPE_SCTP_FUNC(sctp_sf_do_9_2_shut_ctsn), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) } /* TYPE_SCTP_SHUTDOWN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #define TYPE_SCTP_SHUTDOWN_ACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) TYPE_SCTP_FUNC(sctp_sf_violation), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) TYPE_SCTP_FUNC(sctp_sf_violation), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) TYPE_SCTP_FUNC(sctp_sf_violation), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) } /* TYPE_SCTP_SHUTDOWN_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define TYPE_SCTP_ERROR { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_err), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) TYPE_SCTP_FUNC(sctp_sf_operr_notify), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) } /* TYPE_SCTP_ERROR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) #define TYPE_SCTP_COOKIE_ECHO { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) TYPE_SCTP_FUNC(sctp_sf_do_5_1D_ce), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) } /* TYPE_SCTP_COOKIE_ECHO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define TYPE_SCTP_COOKIE_ACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) TYPE_SCTP_FUNC(sctp_sf_do_5_1E_ca), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) } /* TYPE_SCTP_COOKIE_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) #define TYPE_SCTP_ECN_ECNE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) TYPE_SCTP_FUNC(sctp_sf_do_ecne), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) } /* TYPE_SCTP_ECN_ECNE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #define TYPE_SCTP_ECN_CWR { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) } /* TYPE_SCTP_ECN_CWR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) #define TYPE_SCTP_SHUTDOWN_COMPLETE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) TYPE_SCTP_FUNC(sctp_sf_do_4_C), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) } /* TYPE_SCTP_SHUTDOWN_COMPLETE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) /* The primary index for this table is the chunk type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) * For base protocol (RFC 2960).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) chunk_event_table[SCTP_NUM_BASE_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) TYPE_SCTP_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) TYPE_SCTP_INIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) TYPE_SCTP_INIT_ACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) TYPE_SCTP_SACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) TYPE_SCTP_HEARTBEAT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) TYPE_SCTP_HEARTBEAT_ACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) TYPE_SCTP_ABORT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) TYPE_SCTP_SHUTDOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) TYPE_SCTP_SHUTDOWN_ACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) TYPE_SCTP_ERROR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) TYPE_SCTP_COOKIE_ECHO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) TYPE_SCTP_COOKIE_ACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) TYPE_SCTP_ECN_ECNE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) TYPE_SCTP_ECN_CWR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) TYPE_SCTP_SHUTDOWN_COMPLETE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) }; /* state_fn_t chunk_event_table[][] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) #define TYPE_SCTP_ASCONF { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) TYPE_SCTP_FUNC(sctp_sf_do_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) } /* TYPE_SCTP_ASCONF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) #define TYPE_SCTP_ASCONF_ACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) } /* TYPE_SCTP_ASCONF_ACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) /* The primary index for this table is the chunk type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) addip_chunk_event_table[SCTP_NUM_ADDIP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) TYPE_SCTP_ASCONF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) TYPE_SCTP_ASCONF_ACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) }; /*state_fn_t addip_chunk_event_table[][] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) #define TYPE_SCTP_FWD_TSN { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn_fast), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) } /* TYPE_SCTP_FWD_TSN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) /* The primary index for this table is the chunk type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) prsctp_chunk_event_table[SCTP_NUM_PRSCTP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) TYPE_SCTP_FWD_TSN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) }; /*state_fn_t prsctp_chunk_event_table[][] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) #define TYPE_SCTP_RECONF { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) TYPE_SCTP_FUNC(sctp_sf_do_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) TYPE_SCTP_FUNC(sctp_sf_do_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) } /* TYPE_SCTP_RECONF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) /* The primary index for this table is the chunk type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) reconf_chunk_event_table[SCTP_NUM_RECONF_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) TYPE_SCTP_RECONF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) }; /*state_fn_t reconf_chunk_event_table[][] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define TYPE_SCTP_AUTH { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) TYPE_SCTP_FUNC(sctp_sf_ootb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) TYPE_SCTP_FUNC(sctp_sf_eat_auth), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) } /* TYPE_SCTP_AUTH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) /* The primary index for this table is the chunk type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) auth_chunk_event_table[SCTP_NUM_AUTH_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) TYPE_SCTP_AUTH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) }; /*state_fn_t auth_chunk_event_table[][] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) chunk_event_table_unknown[SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) /* SCTP_STATE_CLOSED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) TYPE_SCTP_FUNC(sctp_sf_ootb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) /* SCTP_STATE_COOKIE_WAIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) /* SCTP_STATE_COOKIE_ECHOED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) /* SCTP_STATE_ESTABLISHED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) /* SCTP_STATE_SHUTDOWN_PENDING */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) /* SCTP_STATE_SHUTDOWN_SENT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) /* SCTP_STATE_SHUTDOWN_RECEIVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) /* SCTP_STATE_SHUTDOWN_ACK_SENT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) TYPE_SCTP_FUNC(sctp_sf_unk_chunk),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) }; /* chunk unknown */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) #define TYPE_SCTP_PRIMITIVE_ASSOCIATE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) TYPE_SCTP_FUNC(sctp_sf_do_prm_asoc), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) TYPE_SCTP_FUNC(sctp_sf_not_impl), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) } /* TYPE_SCTP_PRIMITIVE_ASSOCIATE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) #define TYPE_SCTP_PRIMITIVE_SHUTDOWN { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_shutdown),\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) TYPE_SCTP_FUNC(sctp_sf_do_9_2_prm_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) } /* TYPE_SCTP_PRIMITIVE_SHUTDOWN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) #define TYPE_SCTP_PRIMITIVE_ABORT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_prm_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) } /* TYPE_SCTP_PRIMITIVE_ABORT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) #define TYPE_SCTP_PRIMITIVE_SEND { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) } /* TYPE_SCTP_PRIMITIVE_SEND */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) #define TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) } /* TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) #define TYPE_SCTP_PRIMITIVE_ASCONF { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) } /* TYPE_SCTP_PRIMITIVE_ASCONF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) #define TYPE_SCTP_PRIMITIVE_RECONF { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) TYPE_SCTP_FUNC(sctp_sf_error_closed), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) } /* TYPE_SCTP_PRIMITIVE_RECONF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) /* The primary index for this table is the primitive type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) * The secondary index for this table is the state.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) primitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) TYPE_SCTP_PRIMITIVE_ASSOCIATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) TYPE_SCTP_PRIMITIVE_SHUTDOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) TYPE_SCTP_PRIMITIVE_ABORT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) TYPE_SCTP_PRIMITIVE_SEND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) TYPE_SCTP_PRIMITIVE_ASCONF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) TYPE_SCTP_PRIMITIVE_RECONF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) #define TYPE_SCTP_OTHER_NO_PENDING_TSN { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) TYPE_SCTP_FUNC(sctp_sf_do_no_pending_tsn), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) TYPE_SCTP_FUNC(sctp_sf_do_9_2_start_shutdown), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) #define TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) TYPE_SCTP_FUNC(sctp_sf_cookie_wait_icmp_abort), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) TYPE_SCTP_FUNC(sctp_sf_ignore_other), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) other_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) TYPE_SCTP_OTHER_NO_PENDING_TSN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) #define TYPE_SCTP_EVENT_TIMEOUT_NONE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) #define TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) TYPE_SCTP_FUNC(sctp_sf_bug), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) TYPE_SCTP_FUNC(sctp_sf_t1_cookie_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) #define TYPE_SCTP_EVENT_TIMEOUT_T1_INIT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) TYPE_SCTP_FUNC(sctp_sf_t1_init_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) #define TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) #define TYPE_SCTP_EVENT_TIMEOUT_T3_RTX { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) #define TYPE_SCTP_EVENT_TIMEOUT_T4_RTO { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) TYPE_SCTP_FUNC(sctp_sf_t4_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) #define TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) #define TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) #define TYPE_SCTP_EVENT_TIMEOUT_SACK { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) #define TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) TYPE_SCTP_FUNC(sctp_sf_autoclose_timer_expire), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) #define TYPE_SCTP_EVENT_TIMEOUT_RECONF { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) /* SCTP_STATE_CLOSED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) /* SCTP_STATE_COOKIE_WAIT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) /* SCTP_STATE_COOKIE_ECHOED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) /* SCTP_STATE_ESTABLISHED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) TYPE_SCTP_FUNC(sctp_sf_send_reconf), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) /* SCTP_STATE_SHUTDOWN_PENDING */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) /* SCTP_STATE_SHUTDOWN_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) static const struct sctp_sm_table_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) timeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) TYPE_SCTP_EVENT_TIMEOUT_NONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) TYPE_SCTP_EVENT_TIMEOUT_T1_INIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) TYPE_SCTP_EVENT_TIMEOUT_T3_RTX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) TYPE_SCTP_EVENT_TIMEOUT_T4_RTO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) TYPE_SCTP_EVENT_TIMEOUT_RECONF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) TYPE_SCTP_EVENT_TIMEOUT_SACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) static const struct sctp_sm_table_entry *sctp_chunk_event_lookup(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) struct net *net,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) enum sctp_cid cid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) enum sctp_state state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) if (state > SCTP_STATE_MAX)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) return &bug;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) if (cid == SCTP_CID_I_DATA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) cid = SCTP_CID_DATA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) if (cid <= SCTP_CID_BASE_MAX)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) return &chunk_event_table[cid][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) switch ((u16)cid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) case SCTP_CID_FWD_TSN:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) case SCTP_CID_I_FWD_TSN:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) return &prsctp_chunk_event_table[0][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) case SCTP_CID_ASCONF:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) return &addip_chunk_event_table[0][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) case SCTP_CID_ASCONF_ACK:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) return &addip_chunk_event_table[1][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) case SCTP_CID_RECONF:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) return &reconf_chunk_event_table[0][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) case SCTP_CID_AUTH:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) return &auth_chunk_event_table[0][state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) return &chunk_event_table_unknown[state];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) }