root/net/sctp/debug.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sctp_cname
  2. sctp_pname
  3. sctp_oname
  4. sctp_tname

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

/* [<][>][^][v][top][bottom][index][help] */