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