162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* SCTP kernel implementation 362306a36Sopenharmony_ci * (C) Copyright IBM Corp. 2001, 2004 462306a36Sopenharmony_ci * Copyright (c) 1999-2000 Cisco, Inc. 562306a36Sopenharmony_ci * Copyright (c) 1999-2001 Motorola, Inc. 662306a36Sopenharmony_ci * Copyright (c) 2001 Intel Corp. 762306a36Sopenharmony_ci * Copyright (c) 2001 Nokia, Inc. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * This file is part of the SCTP kernel implementation 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * These are the state tables for the SCTP state machine. 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * Please send any bug reports or fixes you make to the 1462306a36Sopenharmony_ci * email address(es): 1562306a36Sopenharmony_ci * lksctp developers <linux-sctp@vger.kernel.org> 1662306a36Sopenharmony_ci * 1762306a36Sopenharmony_ci * Written or modified by: 1862306a36Sopenharmony_ci * La Monte H.P. Yarroll <piggy@acm.org> 1962306a36Sopenharmony_ci * Karl Knutson <karl@athena.chicago.il.us> 2062306a36Sopenharmony_ci * Jon Grimm <jgrimm@us.ibm.com> 2162306a36Sopenharmony_ci * Hui Huang <hui.huang@nokia.com> 2262306a36Sopenharmony_ci * Daisy Chang <daisyc@us.ibm.com> 2362306a36Sopenharmony_ci * Ardelle Fan <ardelle.fan@intel.com> 2462306a36Sopenharmony_ci * Sridhar Samudrala <sri@us.ibm.com> 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#include <linux/skbuff.h> 3062306a36Sopenharmony_ci#include <net/sctp/sctp.h> 3162306a36Sopenharmony_ci#include <net/sctp/sm.h> 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 3462306a36Sopenharmony_ciprimitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES]; 3562306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 3662306a36Sopenharmony_ciother_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES]; 3762306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 3862306a36Sopenharmony_citimeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES]; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic const struct sctp_sm_table_entry *sctp_chunk_event_lookup( 4162306a36Sopenharmony_ci struct net *net, 4262306a36Sopenharmony_ci enum sctp_cid cid, 4362306a36Sopenharmony_ci enum sctp_state state); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistatic const struct sctp_sm_table_entry bug = { 4762306a36Sopenharmony_ci .fn = sctp_sf_bug, 4862306a36Sopenharmony_ci .name = "sctp_sf_bug" 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci#define DO_LOOKUP(_max, _type, _table) \ 5262306a36Sopenharmony_ci({ \ 5362306a36Sopenharmony_ci const struct sctp_sm_table_entry *rtn; \ 5462306a36Sopenharmony_ci \ 5562306a36Sopenharmony_ci if ((event_subtype._type > (_max))) { \ 5662306a36Sopenharmony_ci pr_warn("table %p possible attack: event %d exceeds max %d\n", \ 5762306a36Sopenharmony_ci _table, event_subtype._type, _max); \ 5862306a36Sopenharmony_ci rtn = &bug; \ 5962306a36Sopenharmony_ci } else \ 6062306a36Sopenharmony_ci rtn = &_table[event_subtype._type][(int)state]; \ 6162306a36Sopenharmony_ci \ 6262306a36Sopenharmony_ci rtn; \ 6362306a36Sopenharmony_ci}) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciconst struct sctp_sm_table_entry *sctp_sm_lookup_event( 6662306a36Sopenharmony_ci struct net *net, 6762306a36Sopenharmony_ci enum sctp_event_type event_type, 6862306a36Sopenharmony_ci enum sctp_state state, 6962306a36Sopenharmony_ci union sctp_subtype event_subtype) 7062306a36Sopenharmony_ci{ 7162306a36Sopenharmony_ci switch (event_type) { 7262306a36Sopenharmony_ci case SCTP_EVENT_T_CHUNK: 7362306a36Sopenharmony_ci return sctp_chunk_event_lookup(net, event_subtype.chunk, state); 7462306a36Sopenharmony_ci case SCTP_EVENT_T_TIMEOUT: 7562306a36Sopenharmony_ci return DO_LOOKUP(SCTP_EVENT_TIMEOUT_MAX, timeout, 7662306a36Sopenharmony_ci timeout_event_table); 7762306a36Sopenharmony_ci case SCTP_EVENT_T_OTHER: 7862306a36Sopenharmony_ci return DO_LOOKUP(SCTP_EVENT_OTHER_MAX, other, 7962306a36Sopenharmony_ci other_event_table); 8062306a36Sopenharmony_ci case SCTP_EVENT_T_PRIMITIVE: 8162306a36Sopenharmony_ci return DO_LOOKUP(SCTP_EVENT_PRIMITIVE_MAX, primitive, 8262306a36Sopenharmony_ci primitive_event_table); 8362306a36Sopenharmony_ci default: 8462306a36Sopenharmony_ci /* Yikes! We got an illegal event type. */ 8562306a36Sopenharmony_ci return &bug; 8662306a36Sopenharmony_ci } 8762306a36Sopenharmony_ci} 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define TYPE_SCTP_FUNC(func) {.fn = func, .name = #func} 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define TYPE_SCTP_DATA { \ 9262306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 9362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 9462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 9562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 9662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 9762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 9862306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 9962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \ 10062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 10162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_data_6_2), \ 10262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 10362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_data_fast_4_4), \ 10462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 10562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 10662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 10762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 10862306a36Sopenharmony_ci} /* TYPE_SCTP_DATA */ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci#define TYPE_SCTP_INIT { \ 11162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 11262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_1B_init), \ 11362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 11462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \ 11562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 11662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_1_siminit), \ 11762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 11862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \ 11962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 12062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \ 12162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 12262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \ 12362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 12462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_2_dupinit), \ 12562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 12662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_reshutack), \ 12762306a36Sopenharmony_ci} /* TYPE_SCTP_INIT */ 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci#define TYPE_SCTP_INIT_ACK { \ 13062306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 13162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_3_initack), \ 13262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 13362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_1C_ack), \ 13462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 13562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 13662306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 13762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 13862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 13962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 14062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 14162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 14262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 14362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 14462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 14562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 14662306a36Sopenharmony_ci} /* TYPE_SCTP_INIT_ACK */ 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci#define TYPE_SCTP_SACK { \ 14962306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 15062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 15162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 15262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 15362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 15462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \ 15562306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 15662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \ 15762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 15862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \ 15962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 16062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 16162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 16262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_sack_6_2), \ 16362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 16462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 16562306a36Sopenharmony_ci} /* TYPE_SCTP_SACK */ 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci#define TYPE_SCTP_HEARTBEAT { \ 16862306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 16962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 17062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 17162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 17262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 17362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 17462306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 17562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 17662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 17762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 17862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 17962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 18062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 18162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 18262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 18362306a36Sopenharmony_ci /* This should not happen, but we are nice. */ \ 18462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_beat_8_3), \ 18562306a36Sopenharmony_ci} /* TYPE_SCTP_HEARTBEAT */ 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci#define TYPE_SCTP_HEARTBEAT_ACK { \ 18862306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 18962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 19062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 19162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_violation), \ 19262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 19362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 19462306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 19562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \ 19662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 19762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \ 19862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 19962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \ 20062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 20162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_backbeat_8_3), \ 20262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 20362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 20462306a36Sopenharmony_ci} /* TYPE_SCTP_HEARTBEAT_ACK */ 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci#define TYPE_SCTP_ABORT { \ 20762306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 20862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_pdiscard), \ 20962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 21062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_wait_abort), \ 21162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 21262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_abort), \ 21362306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 21462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \ 21562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 21662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_abort), \ 21762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 21862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_abort), \ 21962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 22062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_1_abort), \ 22162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 22262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_abort), \ 22362306a36Sopenharmony_ci} /* TYPE_SCTP_ABORT */ 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci#define TYPE_SCTP_SHUTDOWN { \ 22662306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 22762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 22862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 22962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 23062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 23162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 23262306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 23362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \ 23462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 23562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown), \ 23662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 23762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \ 23862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 23962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_shut_ctsn), \ 24062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 24162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 24262306a36Sopenharmony_ci} /* TYPE_SCTP_SHUTDOWN */ 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci#define TYPE_SCTP_SHUTDOWN_ACK { \ 24562306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 24662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 24762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 24862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \ 24962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 25062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_8_5_1_E_sa), \ 25162306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 25262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_violation), \ 25362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 25462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_violation), \ 25562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 25662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \ 25762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 25862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_violation), \ 25962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 26062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_final), \ 26162306a36Sopenharmony_ci} /* TYPE_SCTP_SHUTDOWN_ACK */ 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_ci#define TYPE_SCTP_ERROR { \ 26462306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 26562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 26662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 26762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 26862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 26962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_err), \ 27062306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 27162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_operr_notify), \ 27262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 27362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_operr_notify), \ 27462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 27562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 27662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 27762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_operr_notify), \ 27862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 27962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 28062306a36Sopenharmony_ci} /* TYPE_SCTP_ERROR */ 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci#define TYPE_SCTP_COOKIE_ECHO { \ 28362306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 28462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_1D_ce), \ 28562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 28662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 28762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 28862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 28962306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 29062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 29162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 29262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 29362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 29462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 29562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 29662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 29762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 29862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_2_4_dupcook), \ 29962306a36Sopenharmony_ci} /* TYPE_SCTP_COOKIE_ECHO */ 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci#define TYPE_SCTP_COOKIE_ACK { \ 30262306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 30362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 30462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 30562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 30662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 30762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_5_1E_ca), \ 30862306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 30962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 31062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 31162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 31262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 31362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 31462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 31562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 31662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 31762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 31862306a36Sopenharmony_ci} /* TYPE_SCTP_COOKIE_ACK */ 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci#define TYPE_SCTP_ECN_ECNE { \ 32162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 32262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 32362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 32462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 32562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 32662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecne), \ 32762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 32862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecne), \ 32962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 33062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecne), \ 33162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 33262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecne), \ 33362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 33462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecne), \ 33562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 33662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 33762306a36Sopenharmony_ci} /* TYPE_SCTP_ECN_ECNE */ 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci#define TYPE_SCTP_ECN_CWR { \ 34062306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 34162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 34262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 34362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 34462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 34562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 34662306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 34762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \ 34862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 34962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \ 35062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 35162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_ecn_cwr), \ 35262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 35362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 35462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 35562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 35662306a36Sopenharmony_ci} /* TYPE_SCTP_ECN_CWR */ 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci#define TYPE_SCTP_SHUTDOWN_COMPLETE { \ 35962306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 36062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 36162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 36262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 36362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 36462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 36562306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 36662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 36762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 36862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 36962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 37062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 37162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 37262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 37362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 37462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_4_C), \ 37562306a36Sopenharmony_ci} /* TYPE_SCTP_SHUTDOWN_COMPLETE */ 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci/* The primary index for this table is the chunk type. 37862306a36Sopenharmony_ci * The secondary index for this table is the state. 37962306a36Sopenharmony_ci * 38062306a36Sopenharmony_ci * For base protocol (RFC 2960). 38162306a36Sopenharmony_ci */ 38262306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 38362306a36Sopenharmony_cichunk_event_table[SCTP_NUM_BASE_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = { 38462306a36Sopenharmony_ci TYPE_SCTP_DATA, 38562306a36Sopenharmony_ci TYPE_SCTP_INIT, 38662306a36Sopenharmony_ci TYPE_SCTP_INIT_ACK, 38762306a36Sopenharmony_ci TYPE_SCTP_SACK, 38862306a36Sopenharmony_ci TYPE_SCTP_HEARTBEAT, 38962306a36Sopenharmony_ci TYPE_SCTP_HEARTBEAT_ACK, 39062306a36Sopenharmony_ci TYPE_SCTP_ABORT, 39162306a36Sopenharmony_ci TYPE_SCTP_SHUTDOWN, 39262306a36Sopenharmony_ci TYPE_SCTP_SHUTDOWN_ACK, 39362306a36Sopenharmony_ci TYPE_SCTP_ERROR, 39462306a36Sopenharmony_ci TYPE_SCTP_COOKIE_ECHO, 39562306a36Sopenharmony_ci TYPE_SCTP_COOKIE_ACK, 39662306a36Sopenharmony_ci TYPE_SCTP_ECN_ECNE, 39762306a36Sopenharmony_ci TYPE_SCTP_ECN_CWR, 39862306a36Sopenharmony_ci TYPE_SCTP_SHUTDOWN_COMPLETE, 39962306a36Sopenharmony_ci}; /* state_fn_t chunk_event_table[][] */ 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci#define TYPE_SCTP_ASCONF { \ 40262306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 40362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 40462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 40562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 40662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 40762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 40862306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 40962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf), \ 41062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 41162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf), \ 41262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 41362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf), \ 41462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 41562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf), \ 41662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 41762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 41862306a36Sopenharmony_ci} /* TYPE_SCTP_ASCONF */ 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci#define TYPE_SCTP_ASCONF_ACK { \ 42162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 42262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 42362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 42462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 42562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 42662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 42762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 42862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \ 42962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 43062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \ 43162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 43262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \ 43362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 43462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_asconf_ack), \ 43562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 43662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 43762306a36Sopenharmony_ci} /* TYPE_SCTP_ASCONF_ACK */ 43862306a36Sopenharmony_ci 43962306a36Sopenharmony_ci/* The primary index for this table is the chunk type. 44062306a36Sopenharmony_ci * The secondary index for this table is the state. 44162306a36Sopenharmony_ci */ 44262306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 44362306a36Sopenharmony_ciaddip_chunk_event_table[SCTP_NUM_ADDIP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = { 44462306a36Sopenharmony_ci TYPE_SCTP_ASCONF, 44562306a36Sopenharmony_ci TYPE_SCTP_ASCONF_ACK, 44662306a36Sopenharmony_ci}; /*state_fn_t addip_chunk_event_table[][] */ 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_ci#define TYPE_SCTP_FWD_TSN { \ 44962306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 45062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 45162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 45262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 45362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 45462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 45562306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 45662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \ 45762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 45862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn), \ 45962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 46062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_fwd_tsn_fast), \ 46162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 46262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 46362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 46462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 46562306a36Sopenharmony_ci} /* TYPE_SCTP_FWD_TSN */ 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci/* The primary index for this table is the chunk type. 46862306a36Sopenharmony_ci * The secondary index for this table is the state. 46962306a36Sopenharmony_ci */ 47062306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 47162306a36Sopenharmony_ciprsctp_chunk_event_table[SCTP_NUM_PRSCTP_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = { 47262306a36Sopenharmony_ci TYPE_SCTP_FWD_TSN, 47362306a36Sopenharmony_ci}; /*state_fn_t prsctp_chunk_event_table[][] */ 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci#define TYPE_SCTP_RECONF { \ 47662306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 47762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 47862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 47962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 48062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 48162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 48262306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 48362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_reconf), \ 48462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 48562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_reconf), \ 48662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 48762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 48862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 48962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 49062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 49162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 49262306a36Sopenharmony_ci} /* TYPE_SCTP_RECONF */ 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci/* The primary index for this table is the chunk type. 49562306a36Sopenharmony_ci * The secondary index for this table is the state. 49662306a36Sopenharmony_ci */ 49762306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 49862306a36Sopenharmony_cireconf_chunk_event_table[SCTP_NUM_RECONF_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = { 49962306a36Sopenharmony_ci TYPE_SCTP_RECONF, 50062306a36Sopenharmony_ci}; /*state_fn_t reconf_chunk_event_table[][] */ 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_ci#define TYPE_SCTP_AUTH { \ 50362306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 50462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), \ 50562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 50662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \ 50762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 50862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 50962306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 51062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 51162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 51262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 51362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 51462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 51562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 51662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 51762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 51862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_eat_auth), \ 51962306a36Sopenharmony_ci} /* TYPE_SCTP_AUTH */ 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci/* The primary index for this table is the chunk type. 52262306a36Sopenharmony_ci * The secondary index for this table is the state. 52362306a36Sopenharmony_ci */ 52462306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 52562306a36Sopenharmony_ciauth_chunk_event_table[SCTP_NUM_AUTH_CHUNK_TYPES][SCTP_STATE_NUM_STATES] = { 52662306a36Sopenharmony_ci TYPE_SCTP_AUTH, 52762306a36Sopenharmony_ci}; /*state_fn_t auth_chunk_event_table[][] */ 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 53062306a36Sopenharmony_cipad_chunk_event_table[SCTP_STATE_NUM_STATES] = { 53162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ 53262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 53362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ 53462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 53562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ 53662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 53762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ 53862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 53962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ 54062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 54162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ 54262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 54362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ 54462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 54562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ 54662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_discard_chunk), 54762306a36Sopenharmony_ci}; /* chunk pad */ 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 55062306a36Sopenharmony_cichunk_event_table_unknown[SCTP_STATE_NUM_STATES] = { 55162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ 55262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ootb), 55362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ 55462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 55562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ 55662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 55762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ 55862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 55962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ 56062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 56162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ 56262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 56362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ 56462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 56562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ 56662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_unk_chunk), 56762306a36Sopenharmony_ci}; /* chunk unknown */ 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_ci 57062306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_ASSOCIATE { \ 57162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 57262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_asoc), \ 57362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 57462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 57562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 57662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 57762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 57862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 57962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 58062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 58162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 58262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 58362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 58462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 58562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 58662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_not_impl), \ 58762306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_ASSOCIATE */ 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_SHUTDOWN { \ 59062306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 59162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 59262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 59362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_shutdown), \ 59462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 59562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_shutdown),\ 59662306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 59762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_prm_shutdown), \ 59862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 59962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \ 60062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 60162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \ 60262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 60362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \ 60462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 60562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_primitive), \ 60662306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_SHUTDOWN */ 60762306a36Sopenharmony_ci 60862306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_ABORT { \ 60962306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 61062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 61162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 61262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_wait_prm_abort), \ 61362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 61462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_echoed_prm_abort), \ 61562306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 61662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \ 61762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 61862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_pending_prm_abort), \ 61962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 62062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_sent_prm_abort), \ 62162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 62262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_1_prm_abort), \ 62362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 62462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_shutdown_ack_sent_prm_abort), \ 62562306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_ABORT */ 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_SEND { \ 62862306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 62962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 63062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 63162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \ 63262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 63362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \ 63462306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 63562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_send), \ 63662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 63762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 63862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 63962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 64062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 64162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 64262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 64362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 64462306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_SEND */ 64562306a36Sopenharmony_ci 64662306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT { \ 64762306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 64862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 64962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 65062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 65162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 65262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 65362306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 65462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 65562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 65662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 65762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 65862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 65962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 66062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 66162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 66262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_requestheartbeat), \ 66362306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT */ 66462306a36Sopenharmony_ci 66562306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_ASCONF { \ 66662306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 66762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 66862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 66962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 67062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 67162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 67262306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 67362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \ 67462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 67562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \ 67662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 67762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \ 67862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 67962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_asconf), \ 68062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 68162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 68262306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_ASCONF */ 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_ci#define TYPE_SCTP_PRIMITIVE_RECONF { \ 68562306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 68662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 68762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 68862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 68962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 69062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_closed), \ 69162306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 69262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \ 69362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 69462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \ 69562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 69662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \ 69762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 69862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_prm_reconf), \ 69962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 70062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_error_shutdown), \ 70162306a36Sopenharmony_ci} /* TYPE_SCTP_PRIMITIVE_RECONF */ 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_ci/* The primary index for this table is the primitive type. 70462306a36Sopenharmony_ci * The secondary index for this table is the state. 70562306a36Sopenharmony_ci */ 70662306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 70762306a36Sopenharmony_ciprimitive_event_table[SCTP_NUM_PRIMITIVE_TYPES][SCTP_STATE_NUM_STATES] = { 70862306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_ASSOCIATE, 70962306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_SHUTDOWN, 71062306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_ABORT, 71162306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_SEND, 71262306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_REQUESTHEARTBEAT, 71362306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_ASCONF, 71462306a36Sopenharmony_ci TYPE_SCTP_PRIMITIVE_RECONF, 71562306a36Sopenharmony_ci}; 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci#define TYPE_SCTP_OTHER_NO_PENDING_TSN { \ 71862306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 71962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 72062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 72162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 72262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 72362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 72462306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 72562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_no_pending_tsn), \ 72662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 72762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_start_shutdown), \ 72862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 72962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 73062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 73162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_9_2_shutdown_ack), \ 73262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 73362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 73462306a36Sopenharmony_ci} 73562306a36Sopenharmony_ci 73662306a36Sopenharmony_ci#define TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH { \ 73762306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 73862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 73962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 74062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_cookie_wait_icmp_abort), \ 74162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 74262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 74362306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 74462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 74562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 74662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 74762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 74862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 74962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 75062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 75162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 75262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_ignore_other), \ 75362306a36Sopenharmony_ci} 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 75662306a36Sopenharmony_ciother_event_table[SCTP_NUM_OTHER_TYPES][SCTP_STATE_NUM_STATES] = { 75762306a36Sopenharmony_ci TYPE_SCTP_OTHER_NO_PENDING_TSN, 75862306a36Sopenharmony_ci TYPE_SCTP_OTHER_ICMP_PROTO_UNREACH, 75962306a36Sopenharmony_ci}; 76062306a36Sopenharmony_ci 76162306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_NONE { \ 76262306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 76362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 76462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 76562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 76662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 76762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 76862306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 76962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 77062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 77162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 77262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 77362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 77462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 77562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 77662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 77762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 77862306a36Sopenharmony_ci} 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE { \ 78162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 78262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 78362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 78462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_bug), \ 78562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 78662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t1_cookie_timer_expire), \ 78762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 78862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 78962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 79062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 79162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 79262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 79362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 79462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 79562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 79662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 79762306a36Sopenharmony_ci} 79862306a36Sopenharmony_ci 79962306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T1_INIT { \ 80062306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 80162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 80262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 80362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t1_init_timer_expire), \ 80462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 80562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 80662306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 80762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 80862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 80962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 81062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 81162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 81262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 81362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 81462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 81562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 81662306a36Sopenharmony_ci} 81762306a36Sopenharmony_ci 81862306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN { \ 81962306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 82062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 82162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 82262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 82362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 82462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 82562306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 82662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 82762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 82862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 82962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 83062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \ 83162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 83262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 83362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 83462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t2_timer_expire), \ 83562306a36Sopenharmony_ci} 83662306a36Sopenharmony_ci 83762306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T3_RTX { \ 83862306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 83962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 84062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 84162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 84262306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 84362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \ 84462306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 84562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \ 84662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 84762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \ 84862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 84962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 85062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 85162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_3_3_rtx), \ 85262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 85362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 85462306a36Sopenharmony_ci} 85562306a36Sopenharmony_ci 85662306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T4_RTO { \ 85762306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 85862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 85962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 86062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 86162306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 86262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 86362306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 86462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t4_timer_expire), \ 86562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 86662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 86762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 86862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 86962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 87062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 87162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 87262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 87362306a36Sopenharmony_ci} 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD { \ 87662306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 87762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 87862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 87962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 88062306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 88162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 88262306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 88362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 88462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 88562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \ 88662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 88762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_t5_timer_expire), \ 88862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 88962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 89062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 89162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 89262306a36Sopenharmony_ci} 89362306a36Sopenharmony_ci 89462306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT { \ 89562306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 89662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 89762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 89862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 89962306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 90062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 90162306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 90262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \ 90362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 90462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \ 90562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 90662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 90762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 90862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_sendbeat_8_3), \ 90962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 91062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 91162306a36Sopenharmony_ci} 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_SACK { \ 91462306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 91562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 91662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 91762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 91862306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 91962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 92062306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 92162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \ 92262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 92362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \ 92462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 92562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_do_6_2_sack), \ 92662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 92762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 92862306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 92962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 93062306a36Sopenharmony_ci} 93162306a36Sopenharmony_ci 93262306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE { \ 93362306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 93462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 93562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 93662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 93762306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 93862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 93962306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 94062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_autoclose_timer_expire), \ 94162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 94262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 94362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 94462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 94562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 94662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 94762306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 94862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 94962306a36Sopenharmony_ci} 95062306a36Sopenharmony_ci 95162306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_RECONF { \ 95262306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 95362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 95462306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 95562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 95662306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 95762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 95862306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 95962306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_send_reconf), \ 96062306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 96162306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 96262306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 96362306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 96462306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 96562306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 96662306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 96762306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 96862306a36Sopenharmony_ci} 96962306a36Sopenharmony_ci 97062306a36Sopenharmony_ci#define TYPE_SCTP_EVENT_TIMEOUT_PROBE { \ 97162306a36Sopenharmony_ci /* SCTP_STATE_CLOSED */ \ 97262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 97362306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_WAIT */ \ 97462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 97562306a36Sopenharmony_ci /* SCTP_STATE_COOKIE_ECHOED */ \ 97662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 97762306a36Sopenharmony_ci /* SCTP_STATE_ESTABLISHED */ \ 97862306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_send_probe), \ 97962306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_PENDING */ \ 98062306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 98162306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_SENT */ \ 98262306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 98362306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_RECEIVED */ \ 98462306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 98562306a36Sopenharmony_ci /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \ 98662306a36Sopenharmony_ci TYPE_SCTP_FUNC(sctp_sf_timer_ignore), \ 98762306a36Sopenharmony_ci} 98862306a36Sopenharmony_ci 98962306a36Sopenharmony_cistatic const struct sctp_sm_table_entry 99062306a36Sopenharmony_citimeout_event_table[SCTP_NUM_TIMEOUT_TYPES][SCTP_STATE_NUM_STATES] = { 99162306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_NONE, 99262306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T1_COOKIE, 99362306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T1_INIT, 99462306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T2_SHUTDOWN, 99562306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T3_RTX, 99662306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T4_RTO, 99762306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD, 99862306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_HEARTBEAT, 99962306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_RECONF, 100062306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_PROBE, 100162306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_SACK, 100262306a36Sopenharmony_ci TYPE_SCTP_EVENT_TIMEOUT_AUTOCLOSE, 100362306a36Sopenharmony_ci}; 100462306a36Sopenharmony_ci 100562306a36Sopenharmony_cistatic const struct sctp_sm_table_entry *sctp_chunk_event_lookup( 100662306a36Sopenharmony_ci struct net *net, 100762306a36Sopenharmony_ci enum sctp_cid cid, 100862306a36Sopenharmony_ci enum sctp_state state) 100962306a36Sopenharmony_ci{ 101062306a36Sopenharmony_ci if (state > SCTP_STATE_MAX) 101162306a36Sopenharmony_ci return &bug; 101262306a36Sopenharmony_ci 101362306a36Sopenharmony_ci if (cid == SCTP_CID_I_DATA) 101462306a36Sopenharmony_ci cid = SCTP_CID_DATA; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci if (cid <= SCTP_CID_BASE_MAX) 101762306a36Sopenharmony_ci return &chunk_event_table[cid][state]; 101862306a36Sopenharmony_ci 101962306a36Sopenharmony_ci switch ((u16)cid) { 102062306a36Sopenharmony_ci case SCTP_CID_FWD_TSN: 102162306a36Sopenharmony_ci case SCTP_CID_I_FWD_TSN: 102262306a36Sopenharmony_ci return &prsctp_chunk_event_table[0][state]; 102362306a36Sopenharmony_ci 102462306a36Sopenharmony_ci case SCTP_CID_ASCONF: 102562306a36Sopenharmony_ci return &addip_chunk_event_table[0][state]; 102662306a36Sopenharmony_ci 102762306a36Sopenharmony_ci case SCTP_CID_ASCONF_ACK: 102862306a36Sopenharmony_ci return &addip_chunk_event_table[1][state]; 102962306a36Sopenharmony_ci 103062306a36Sopenharmony_ci case SCTP_CID_RECONF: 103162306a36Sopenharmony_ci return &reconf_chunk_event_table[0][state]; 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_ci case SCTP_CID_AUTH: 103462306a36Sopenharmony_ci return &auth_chunk_event_table[0][state]; 103562306a36Sopenharmony_ci 103662306a36Sopenharmony_ci case SCTP_CID_PAD: 103762306a36Sopenharmony_ci return &pad_chunk_event_table[state]; 103862306a36Sopenharmony_ci } 103962306a36Sopenharmony_ci 104062306a36Sopenharmony_ci return &chunk_event_table_unknown[state]; 104162306a36Sopenharmony_ci} 1042