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 *
862306a36Sopenharmony_ci * This file is part of the SCTP kernel implementation
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci * This file converts numerical ID value to alphabetical names for SCTP
1162306a36Sopenharmony_ci * terms such as chunk type, parameter time, event type, etc.
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 *    Xingang Guo           <xingang.guo@intel.com>
2162306a36Sopenharmony_ci *    Jon Grimm             <jgrimm@us.ibm.com>
2262306a36Sopenharmony_ci *    Daisy Chang	    <daisyc@us.ibm.com>
2362306a36Sopenharmony_ci *    Sridhar Samudrala	    <sri@us.ibm.com>
2462306a36Sopenharmony_ci */
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#include <net/sctp/sctp.h>
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* These are printable forms of Chunk ID's from section 3.1.  */
2962306a36Sopenharmony_cistatic const char *const sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = {
3062306a36Sopenharmony_ci	"DATA",
3162306a36Sopenharmony_ci	"INIT",
3262306a36Sopenharmony_ci	"INIT_ACK",
3362306a36Sopenharmony_ci	"SACK",
3462306a36Sopenharmony_ci	"HEARTBEAT",
3562306a36Sopenharmony_ci	"HEARTBEAT_ACK",
3662306a36Sopenharmony_ci	"ABORT",
3762306a36Sopenharmony_ci	"SHUTDOWN",
3862306a36Sopenharmony_ci	"SHUTDOWN_ACK",
3962306a36Sopenharmony_ci	"ERROR",
4062306a36Sopenharmony_ci	"COOKIE_ECHO",
4162306a36Sopenharmony_ci	"COOKIE_ACK",
4262306a36Sopenharmony_ci	"ECN_ECNE",
4362306a36Sopenharmony_ci	"ECN_CWR",
4462306a36Sopenharmony_ci	"SHUTDOWN_COMPLETE",
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci/* Lookup "chunk type" debug name. */
4862306a36Sopenharmony_ciconst char *sctp_cname(const union sctp_subtype cid)
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci	if (cid.chunk <= SCTP_CID_BASE_MAX)
5162306a36Sopenharmony_ci		return sctp_cid_tbl[cid.chunk];
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	switch (cid.chunk) {
5462306a36Sopenharmony_ci	case SCTP_CID_ASCONF:
5562306a36Sopenharmony_ci		return "ASCONF";
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	case SCTP_CID_ASCONF_ACK:
5862306a36Sopenharmony_ci		return "ASCONF_ACK";
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci	case SCTP_CID_FWD_TSN:
6162306a36Sopenharmony_ci		return "FWD_TSN";
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci	case SCTP_CID_AUTH:
6462306a36Sopenharmony_ci		return "AUTH";
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	case SCTP_CID_RECONF:
6762306a36Sopenharmony_ci		return "RECONF";
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci	case SCTP_CID_I_DATA:
7062306a36Sopenharmony_ci		return "I_DATA";
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	case SCTP_CID_I_FWD_TSN:
7362306a36Sopenharmony_ci		return "I_FWD_TSN";
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	default:
7662306a36Sopenharmony_ci		break;
7762306a36Sopenharmony_ci	}
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci	return "unknown chunk";
8062306a36Sopenharmony_ci}
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci/* These are printable forms of the states.  */
8362306a36Sopenharmony_ciconst char *const sctp_state_tbl[SCTP_STATE_NUM_STATES] = {
8462306a36Sopenharmony_ci	"STATE_CLOSED",
8562306a36Sopenharmony_ci	"STATE_COOKIE_WAIT",
8662306a36Sopenharmony_ci	"STATE_COOKIE_ECHOED",
8762306a36Sopenharmony_ci	"STATE_ESTABLISHED",
8862306a36Sopenharmony_ci	"STATE_SHUTDOWN_PENDING",
8962306a36Sopenharmony_ci	"STATE_SHUTDOWN_SENT",
9062306a36Sopenharmony_ci	"STATE_SHUTDOWN_RECEIVED",
9162306a36Sopenharmony_ci	"STATE_SHUTDOWN_ACK_SENT",
9262306a36Sopenharmony_ci};
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci/* Events that could change the state of an association.  */
9562306a36Sopenharmony_ciconst char *const sctp_evttype_tbl[] = {
9662306a36Sopenharmony_ci	"EVENT_T_unknown",
9762306a36Sopenharmony_ci	"EVENT_T_CHUNK",
9862306a36Sopenharmony_ci	"EVENT_T_TIMEOUT",
9962306a36Sopenharmony_ci	"EVENT_T_OTHER",
10062306a36Sopenharmony_ci	"EVENT_T_PRIMITIVE"
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci/* Return value of a state function */
10462306a36Sopenharmony_ciconst char *const sctp_status_tbl[] = {
10562306a36Sopenharmony_ci	"DISPOSITION_DISCARD",
10662306a36Sopenharmony_ci	"DISPOSITION_CONSUME",
10762306a36Sopenharmony_ci	"DISPOSITION_NOMEM",
10862306a36Sopenharmony_ci	"DISPOSITION_DELETE_TCB",
10962306a36Sopenharmony_ci	"DISPOSITION_ABORT",
11062306a36Sopenharmony_ci	"DISPOSITION_VIOLATION",
11162306a36Sopenharmony_ci	"DISPOSITION_NOT_IMPL",
11262306a36Sopenharmony_ci	"DISPOSITION_ERROR",
11362306a36Sopenharmony_ci	"DISPOSITION_BUG"
11462306a36Sopenharmony_ci};
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci/* Printable forms of primitives */
11762306a36Sopenharmony_cistatic const char *const sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = {
11862306a36Sopenharmony_ci	"PRIMITIVE_ASSOCIATE",
11962306a36Sopenharmony_ci	"PRIMITIVE_SHUTDOWN",
12062306a36Sopenharmony_ci	"PRIMITIVE_ABORT",
12162306a36Sopenharmony_ci	"PRIMITIVE_SEND",
12262306a36Sopenharmony_ci	"PRIMITIVE_REQUESTHEARTBEAT",
12362306a36Sopenharmony_ci	"PRIMITIVE_ASCONF",
12462306a36Sopenharmony_ci};
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci/* Lookup primitive debug name. */
12762306a36Sopenharmony_ciconst char *sctp_pname(const union sctp_subtype id)
12862306a36Sopenharmony_ci{
12962306a36Sopenharmony_ci	if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX)
13062306a36Sopenharmony_ci		return sctp_primitive_tbl[id.primitive];
13162306a36Sopenharmony_ci	return "unknown_primitive";
13262306a36Sopenharmony_ci}
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_cistatic const char *const sctp_other_tbl[] = {
13562306a36Sopenharmony_ci	"NO_PENDING_TSN",
13662306a36Sopenharmony_ci	"ICMP_PROTO_UNREACH",
13762306a36Sopenharmony_ci};
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci/* Lookup "other" debug name. */
14062306a36Sopenharmony_ciconst char *sctp_oname(const union sctp_subtype id)
14162306a36Sopenharmony_ci{
14262306a36Sopenharmony_ci	if (id.other <= SCTP_EVENT_OTHER_MAX)
14362306a36Sopenharmony_ci		return sctp_other_tbl[id.other];
14462306a36Sopenharmony_ci	return "unknown 'other' event";
14562306a36Sopenharmony_ci}
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_cistatic const char *const sctp_timer_tbl[] = {
14862306a36Sopenharmony_ci	"TIMEOUT_NONE",
14962306a36Sopenharmony_ci	"TIMEOUT_T1_COOKIE",
15062306a36Sopenharmony_ci	"TIMEOUT_T1_INIT",
15162306a36Sopenharmony_ci	"TIMEOUT_T2_SHUTDOWN",
15262306a36Sopenharmony_ci	"TIMEOUT_T3_RTX",
15362306a36Sopenharmony_ci	"TIMEOUT_T4_RTO",
15462306a36Sopenharmony_ci	"TIMEOUT_T5_SHUTDOWN_GUARD",
15562306a36Sopenharmony_ci	"TIMEOUT_HEARTBEAT",
15662306a36Sopenharmony_ci	"TIMEOUT_RECONF",
15762306a36Sopenharmony_ci	"TIMEOUT_PROBE",
15862306a36Sopenharmony_ci	"TIMEOUT_SACK",
15962306a36Sopenharmony_ci	"TIMEOUT_AUTOCLOSE",
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci/* Lookup timer debug name. */
16362306a36Sopenharmony_ciconst char *sctp_tname(const union sctp_subtype id)
16462306a36Sopenharmony_ci{
16562306a36Sopenharmony_ci	BUILD_BUG_ON(SCTP_EVENT_TIMEOUT_MAX + 1 != ARRAY_SIZE(sctp_timer_tbl));
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	if (id.timeout < ARRAY_SIZE(sctp_timer_tbl))
16862306a36Sopenharmony_ci		return sctp_timer_tbl[id.timeout];
16962306a36Sopenharmony_ci	return "unknown_timer";
17062306a36Sopenharmony_ci}
171