linux/net/sctp/debug.c
<<
>>
Prefs
   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, see
  26 * <http://www.gnu.org/licenses/>.
  27 *
  28 * Please send any bug reports or fixes you make to the
  29 * email address(es):
  30 *    lksctp developers <linux-sctp@vger.kernel.org>
  31 *
  32 * Written or modified by:
  33 *    La Monte H.P. Yarroll <piggy@acm.org>
  34 *    Karl Knutson          <karl@athena.chicago.il.us>
  35 *    Xingang Guo           <xingang.guo@intel.com>
  36 *    Jon Grimm             <jgrimm@us.ibm.com>
  37 *    Daisy Chang           <daisyc@us.ibm.com>
  38 *    Sridhar Samudrala     <sri@us.ibm.com>
  39 */
  40
  41#include <net/sctp/sctp.h>
  42
  43/* These are printable forms of Chunk ID's from section 3.1.  */
  44static const char *const sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = {
  45        "DATA",
  46        "INIT",
  47        "INIT_ACK",
  48        "SACK",
  49        "HEARTBEAT",
  50        "HEARTBEAT_ACK",
  51        "ABORT",
  52        "SHUTDOWN",
  53        "SHUTDOWN_ACK",
  54        "ERROR",
  55        "COOKIE_ECHO",
  56        "COOKIE_ACK",
  57        "ECN_ECNE",
  58        "ECN_CWR",
  59        "SHUTDOWN_COMPLETE",
  60};
  61
  62/* Lookup "chunk type" debug name. */
  63const char *sctp_cname(const sctp_subtype_t cid)
  64{
  65        if (cid.chunk <= SCTP_CID_BASE_MAX)
  66                return sctp_cid_tbl[cid.chunk];
  67
  68        switch (cid.chunk) {
  69        case SCTP_CID_ASCONF:
  70                return "ASCONF";
  71
  72        case SCTP_CID_ASCONF_ACK:
  73                return "ASCONF_ACK";
  74
  75        case SCTP_CID_FWD_TSN:
  76                return "FWD_TSN";
  77
  78        case SCTP_CID_AUTH:
  79                return "AUTH";
  80
  81        default:
  82                break;
  83        }
  84
  85        return "unknown chunk";
  86}
  87
  88/* These are printable forms of the states.  */
  89const char *const sctp_state_tbl[SCTP_STATE_NUM_STATES] = {
  90        "STATE_CLOSED",
  91        "STATE_COOKIE_WAIT",
  92        "STATE_COOKIE_ECHOED",
  93        "STATE_ESTABLISHED",
  94        "STATE_SHUTDOWN_PENDING",
  95        "STATE_SHUTDOWN_SENT",
  96        "STATE_SHUTDOWN_RECEIVED",
  97        "STATE_SHUTDOWN_ACK_SENT",
  98};
  99
 100/* Events that could change the state of an association.  */
 101const char *const sctp_evttype_tbl[] = {
 102        "EVENT_T_unknown",
 103        "EVENT_T_CHUNK",
 104        "EVENT_T_TIMEOUT",
 105        "EVENT_T_OTHER",
 106        "EVENT_T_PRIMITIVE"
 107};
 108
 109/* Return value of a state function */
 110const char *const sctp_status_tbl[] = {
 111        "DISPOSITION_DISCARD",
 112        "DISPOSITION_CONSUME",
 113        "DISPOSITION_NOMEM",
 114        "DISPOSITION_DELETE_TCB",
 115        "DISPOSITION_ABORT",
 116        "DISPOSITION_VIOLATION",
 117        "DISPOSITION_NOT_IMPL",
 118        "DISPOSITION_ERROR",
 119        "DISPOSITION_BUG"
 120};
 121
 122/* Printable forms of primitives */
 123static const char *const sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = {
 124        "PRIMITIVE_ASSOCIATE",
 125        "PRIMITIVE_SHUTDOWN",
 126        "PRIMITIVE_ABORT",
 127        "PRIMITIVE_SEND",
 128        "PRIMITIVE_REQUESTHEARTBEAT",
 129        "PRIMITIVE_ASCONF",
 130};
 131
 132/* Lookup primitive debug name. */
 133const char *sctp_pname(const sctp_subtype_t id)
 134{
 135        if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX)
 136                return sctp_primitive_tbl[id.primitive];
 137        return "unknown_primitive";
 138}
 139
 140static const char *const sctp_other_tbl[] = {
 141        "NO_PENDING_TSN",
 142        "ICMP_PROTO_UNREACH",
 143};
 144
 145/* Lookup "other" debug name. */
 146const char *sctp_oname(const sctp_subtype_t id)
 147{
 148        if (id.other <= SCTP_EVENT_OTHER_MAX)
 149                return sctp_other_tbl[id.other];
 150        return "unknown 'other' event";
 151}
 152
 153static const char *const sctp_timer_tbl[] = {
 154        "TIMEOUT_NONE",
 155        "TIMEOUT_T1_COOKIE",
 156        "TIMEOUT_T1_INIT",
 157        "TIMEOUT_T2_SHUTDOWN",
 158        "TIMEOUT_T3_RTX",
 159        "TIMEOUT_T4_RTO",
 160        "TIMEOUT_T5_SHUTDOWN_GUARD",
 161        "TIMEOUT_HEARTBEAT",
 162        "TIMEOUT_RECONF",
 163        "TIMEOUT_SACK",
 164        "TIMEOUT_AUTOCLOSE",
 165};
 166
 167/* Lookup timer debug name. */
 168const char *sctp_tname(const sctp_subtype_t id)
 169{
 170        BUILD_BUG_ON(SCTP_EVENT_TIMEOUT_MAX + 1 != ARRAY_SIZE(sctp_timer_tbl));
 171
 172        if (id.timeout < ARRAY_SIZE(sctp_timer_tbl))
 173                return sctp_timer_tbl[id.timeout];
 174        return "unknown_timer";
 175}
 176