Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
debug.c
Go to the documentation of this file.
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 
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 {
181  return sctp_timer_tbl[id.timeout];
182  return "unknown_timer";
183 }