Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/sctp/debug.c
15109 views
1
/* SCTP kernel implementation
2
* (C) Copyright IBM Corp. 2001, 2004
3
* Copyright (c) 1999-2000 Cisco, Inc.
4
* Copyright (c) 1999-2001 Motorola, Inc.
5
* Copyright (c) 2001 Intel Corp.
6
*
7
* This file is part of the SCTP kernel implementation
8
*
9
* This file converts numerical ID value to alphabetical names for SCTP
10
* terms such as chunk type, parameter time, event type, etc.
11
*
12
* This SCTP implementation is free software;
13
* you can redistribute it and/or modify it under the terms of
14
* the GNU General Public License as published by
15
* the Free Software Foundation; either version 2, or (at your option)
16
* any later version.
17
*
18
* This SCTP implementation is distributed in the hope that it
19
* will be useful, but WITHOUT ANY WARRANTY; without even the implied
20
* ************************
21
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22
* See the GNU General Public License for more details.
23
*
24
* You should have received a copy of the GNU General Public License
25
* along with GNU CC; see the file COPYING. If not, write to
26
* the Free Software Foundation, 59 Temple Place - Suite 330,
27
* Boston, MA 02111-1307, USA.
28
*
29
* Please send any bug reports or fixes you make to the
30
* email address(es):
31
* lksctp developers <[email protected]>
32
*
33
* Or submit a bug report through the following website:
34
* http://www.sf.net/projects/lksctp
35
*
36
* Written or modified by:
37
* La Monte H.P. Yarroll <[email protected]>
38
* Karl Knutson <[email protected]>
39
* Xingang Guo <[email protected]>
40
* Jon Grimm <[email protected]>
41
* Daisy Chang <[email protected]>
42
* Sridhar Samudrala <[email protected]>
43
*
44
* Any bugs reported given to us we will try to fix... any fixes shared will
45
* be incorporated into the next SCTP release.
46
*/
47
48
#include <net/sctp/sctp.h>
49
50
#if SCTP_DEBUG
51
int sctp_debug_flag = 1; /* Initially enable DEBUG */
52
#endif /* SCTP_DEBUG */
53
54
/* These are printable forms of Chunk ID's from section 3.1. */
55
static const char *const sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = {
56
"DATA",
57
"INIT",
58
"INIT_ACK",
59
"SACK",
60
"HEARTBEAT",
61
"HEARTBEAT_ACK",
62
"ABORT",
63
"SHUTDOWN",
64
"SHUTDOWN_ACK",
65
"ERROR",
66
"COOKIE_ECHO",
67
"COOKIE_ACK",
68
"ECN_ECNE",
69
"ECN_CWR",
70
"SHUTDOWN_COMPLETE",
71
};
72
73
/* Lookup "chunk type" debug name. */
74
const char *sctp_cname(const sctp_subtype_t cid)
75
{
76
if (cid.chunk <= SCTP_CID_BASE_MAX)
77
return sctp_cid_tbl[cid.chunk];
78
79
switch (cid.chunk) {
80
case SCTP_CID_ASCONF:
81
return "ASCONF";
82
83
case SCTP_CID_ASCONF_ACK:
84
return "ASCONF_ACK";
85
86
case SCTP_CID_FWD_TSN:
87
return "FWD_TSN";
88
89
case SCTP_CID_AUTH:
90
return "AUTH";
91
92
default:
93
break;
94
}
95
96
return "unknown chunk";
97
}
98
99
/* These are printable forms of the states. */
100
const char *const sctp_state_tbl[SCTP_STATE_NUM_STATES] = {
101
"STATE_CLOSED",
102
"STATE_COOKIE_WAIT",
103
"STATE_COOKIE_ECHOED",
104
"STATE_ESTABLISHED",
105
"STATE_SHUTDOWN_PENDING",
106
"STATE_SHUTDOWN_SENT",
107
"STATE_SHUTDOWN_RECEIVED",
108
"STATE_SHUTDOWN_ACK_SENT",
109
};
110
111
/* Events that could change the state of an association. */
112
const char *const sctp_evttype_tbl[] = {
113
"EVENT_T_unknown",
114
"EVENT_T_CHUNK",
115
"EVENT_T_TIMEOUT",
116
"EVENT_T_OTHER",
117
"EVENT_T_PRIMITIVE"
118
};
119
120
/* Return value of a state function */
121
const char *const sctp_status_tbl[] = {
122
"DISPOSITION_DISCARD",
123
"DISPOSITION_CONSUME",
124
"DISPOSITION_NOMEM",
125
"DISPOSITION_DELETE_TCB",
126
"DISPOSITION_ABORT",
127
"DISPOSITION_VIOLATION",
128
"DISPOSITION_NOT_IMPL",
129
"DISPOSITION_ERROR",
130
"DISPOSITION_BUG"
131
};
132
133
/* Printable forms of primitives */
134
static const char *const sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = {
135
"PRIMITIVE_ASSOCIATE",
136
"PRIMITIVE_SHUTDOWN",
137
"PRIMITIVE_ABORT",
138
"PRIMITIVE_SEND",
139
"PRIMITIVE_REQUESTHEARTBEAT",
140
"PRIMITIVE_ASCONF",
141
};
142
143
/* Lookup primitive debug name. */
144
const char *sctp_pname(const sctp_subtype_t id)
145
{
146
if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX)
147
return sctp_primitive_tbl[id.primitive];
148
return "unknown_primitive";
149
}
150
151
static const char *const sctp_other_tbl[] = {
152
"NO_PENDING_TSN",
153
"ICMP_PROTO_UNREACH",
154
};
155
156
/* Lookup "other" debug name. */
157
const char *sctp_oname(const sctp_subtype_t id)
158
{
159
if (id.other <= SCTP_EVENT_OTHER_MAX)
160
return sctp_other_tbl[id.other];
161
return "unknown 'other' event";
162
}
163
164
static const char *const sctp_timer_tbl[] = {
165
"TIMEOUT_NONE",
166
"TIMEOUT_T1_COOKIE",
167
"TIMEOUT_T1_INIT",
168
"TIMEOUT_T2_SHUTDOWN",
169
"TIMEOUT_T3_RTX",
170
"TIMEOUT_T4_RTO",
171
"TIMEOUT_T5_SHUTDOWN_GUARD",
172
"TIMEOUT_HEARTBEAT",
173
"TIMEOUT_SACK",
174
"TIMEOUT_AUTOCLOSE",
175
};
176
177
/* Lookup timer debug name. */
178
const char *sctp_tname(const sctp_subtype_t id)
179
{
180
if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX)
181
return sctp_timer_tbl[id.timeout];
182
return "unknown_timer";
183
}
184
185