160c778b2SVlad Yasevich /* SCTP kernel implementation 21da177e4SLinus Torvalds * (C) Copyright IBM Corp. 2001, 2004 31da177e4SLinus Torvalds * Copyright (c) 1999-2000 Cisco, Inc. 41da177e4SLinus Torvalds * Copyright (c) 1999-2001 Motorola, Inc. 51da177e4SLinus Torvalds * Copyright (c) 2001 Intel Corp. 61da177e4SLinus Torvalds * 760c778b2SVlad Yasevich * This file is part of the SCTP kernel implementation 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * This file converts numerical ID value to alphabetical names for SCTP 101da177e4SLinus Torvalds * terms such as chunk type, parameter time, event type, etc. 111da177e4SLinus Torvalds * 1260c778b2SVlad Yasevich * This SCTP implementation is free software; 131da177e4SLinus Torvalds * you can redistribute it and/or modify it under the terms of 141da177e4SLinus Torvalds * the GNU General Public License as published by 151da177e4SLinus Torvalds * the Free Software Foundation; either version 2, or (at your option) 161da177e4SLinus Torvalds * any later version. 171da177e4SLinus Torvalds * 1860c778b2SVlad Yasevich * This SCTP implementation is distributed in the hope that it 191da177e4SLinus Torvalds * will be useful, but WITHOUT ANY WARRANTY; without even the implied 201da177e4SLinus Torvalds * ************************ 211da177e4SLinus Torvalds * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 221da177e4SLinus Torvalds * See the GNU General Public License for more details. 231da177e4SLinus Torvalds * 241da177e4SLinus Torvalds * You should have received a copy of the GNU General Public License 251da177e4SLinus Torvalds * along with GNU CC; see the file COPYING. If not, write to 261da177e4SLinus Torvalds * the Free Software Foundation, 59 Temple Place - Suite 330, 271da177e4SLinus Torvalds * Boston, MA 02111-1307, USA. 281da177e4SLinus Torvalds * 291da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the 301da177e4SLinus Torvalds * email address(es): 3191705c61SDaniel Borkmann * lksctp developers <linux-sctp@vger.kernel.org> 321da177e4SLinus Torvalds * 331da177e4SLinus Torvalds * Or submit a bug report through the following website: 341da177e4SLinus Torvalds * http://www.sf.net/projects/lksctp 351da177e4SLinus Torvalds * 361da177e4SLinus Torvalds * Written or modified by: 371da177e4SLinus Torvalds * La Monte H.P. Yarroll <piggy@acm.org> 381da177e4SLinus Torvalds * Karl Knutson <karl@athena.chicago.il.us> 391da177e4SLinus Torvalds * Xingang Guo <xingang.guo@intel.com> 401da177e4SLinus Torvalds * Jon Grimm <jgrimm@us.ibm.com> 411da177e4SLinus Torvalds * Daisy Chang <daisyc@us.ibm.com> 421da177e4SLinus Torvalds * Sridhar Samudrala <sri@us.ibm.com> 431da177e4SLinus Torvalds * 441da177e4SLinus Torvalds * Any bugs reported given to us we will try to fix... any fixes shared will 451da177e4SLinus Torvalds * be incorporated into the next SCTP release. 461da177e4SLinus Torvalds */ 471da177e4SLinus Torvalds 481da177e4SLinus Torvalds #include <net/sctp/sctp.h> 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds /* These are printable forms of Chunk ID's from section 3.1. */ 5136cbd3dcSJan Engelhardt static const char *const sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = { 521da177e4SLinus Torvalds "DATA", 531da177e4SLinus Torvalds "INIT", 541da177e4SLinus Torvalds "INIT_ACK", 551da177e4SLinus Torvalds "SACK", 561da177e4SLinus Torvalds "HEARTBEAT", 571da177e4SLinus Torvalds "HEARTBEAT_ACK", 581da177e4SLinus Torvalds "ABORT", 591da177e4SLinus Torvalds "SHUTDOWN", 601da177e4SLinus Torvalds "SHUTDOWN_ACK", 611da177e4SLinus Torvalds "ERROR", 621da177e4SLinus Torvalds "COOKIE_ECHO", 631da177e4SLinus Torvalds "COOKIE_ACK", 641da177e4SLinus Torvalds "ECN_ECNE", 651da177e4SLinus Torvalds "ECN_CWR", 661da177e4SLinus Torvalds "SHUTDOWN_COMPLETE", 671da177e4SLinus Torvalds }; 681da177e4SLinus Torvalds 691da177e4SLinus Torvalds /* Lookup "chunk type" debug name. */ 701da177e4SLinus Torvalds const char *sctp_cname(const sctp_subtype_t cid) 711da177e4SLinus Torvalds { 721da177e4SLinus Torvalds if (cid.chunk <= SCTP_CID_BASE_MAX) 731da177e4SLinus Torvalds return sctp_cid_tbl[cid.chunk]; 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds switch (cid.chunk) { 761da177e4SLinus Torvalds case SCTP_CID_ASCONF: 771da177e4SLinus Torvalds return "ASCONF"; 781da177e4SLinus Torvalds 791da177e4SLinus Torvalds case SCTP_CID_ASCONF_ACK: 801da177e4SLinus Torvalds return "ASCONF_ACK"; 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds case SCTP_CID_FWD_TSN: 831da177e4SLinus Torvalds return "FWD_TSN"; 841da177e4SLinus Torvalds 85906f8257SWei Yongjun case SCTP_CID_AUTH: 86906f8257SWei Yongjun return "AUTH"; 87906f8257SWei Yongjun 881da177e4SLinus Torvalds default: 893ff50b79SStephen Hemminger break; 903ff50b79SStephen Hemminger } 913ff50b79SStephen Hemminger 921da177e4SLinus Torvalds return "unknown chunk"; 931da177e4SLinus Torvalds } 941da177e4SLinus Torvalds 951da177e4SLinus Torvalds /* These are printable forms of the states. */ 9636cbd3dcSJan Engelhardt const char *const sctp_state_tbl[SCTP_STATE_NUM_STATES] = { 971da177e4SLinus Torvalds "STATE_CLOSED", 981da177e4SLinus Torvalds "STATE_COOKIE_WAIT", 991da177e4SLinus Torvalds "STATE_COOKIE_ECHOED", 1001da177e4SLinus Torvalds "STATE_ESTABLISHED", 1011da177e4SLinus Torvalds "STATE_SHUTDOWN_PENDING", 1021da177e4SLinus Torvalds "STATE_SHUTDOWN_SENT", 1031da177e4SLinus Torvalds "STATE_SHUTDOWN_RECEIVED", 1041da177e4SLinus Torvalds "STATE_SHUTDOWN_ACK_SENT", 1051da177e4SLinus Torvalds }; 1061da177e4SLinus Torvalds 1071da177e4SLinus Torvalds /* Events that could change the state of an association. */ 10836cbd3dcSJan Engelhardt const char *const sctp_evttype_tbl[] = { 1091da177e4SLinus Torvalds "EVENT_T_unknown", 1101da177e4SLinus Torvalds "EVENT_T_CHUNK", 1111da177e4SLinus Torvalds "EVENT_T_TIMEOUT", 1121da177e4SLinus Torvalds "EVENT_T_OTHER", 1131da177e4SLinus Torvalds "EVENT_T_PRIMITIVE" 1141da177e4SLinus Torvalds }; 1151da177e4SLinus Torvalds 1161da177e4SLinus Torvalds /* Return value of a state function */ 11736cbd3dcSJan Engelhardt const char *const sctp_status_tbl[] = { 1181da177e4SLinus Torvalds "DISPOSITION_DISCARD", 1191da177e4SLinus Torvalds "DISPOSITION_CONSUME", 1201da177e4SLinus Torvalds "DISPOSITION_NOMEM", 1211da177e4SLinus Torvalds "DISPOSITION_DELETE_TCB", 1221da177e4SLinus Torvalds "DISPOSITION_ABORT", 1231da177e4SLinus Torvalds "DISPOSITION_VIOLATION", 1241da177e4SLinus Torvalds "DISPOSITION_NOT_IMPL", 1251da177e4SLinus Torvalds "DISPOSITION_ERROR", 1261da177e4SLinus Torvalds "DISPOSITION_BUG" 1271da177e4SLinus Torvalds }; 1281da177e4SLinus Torvalds 1291da177e4SLinus Torvalds /* Printable forms of primitives */ 13036cbd3dcSJan Engelhardt static const char *const sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = { 1311da177e4SLinus Torvalds "PRIMITIVE_ASSOCIATE", 1321da177e4SLinus Torvalds "PRIMITIVE_SHUTDOWN", 1331da177e4SLinus Torvalds "PRIMITIVE_ABORT", 1341da177e4SLinus Torvalds "PRIMITIVE_SEND", 1351da177e4SLinus Torvalds "PRIMITIVE_REQUESTHEARTBEAT", 136906f8257SWei Yongjun "PRIMITIVE_ASCONF", 1371da177e4SLinus Torvalds }; 1381da177e4SLinus Torvalds 1391da177e4SLinus Torvalds /* Lookup primitive debug name. */ 1401da177e4SLinus Torvalds const char *sctp_pname(const sctp_subtype_t id) 1411da177e4SLinus Torvalds { 1421da177e4SLinus Torvalds if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX) 1431da177e4SLinus Torvalds return sctp_primitive_tbl[id.primitive]; 1441da177e4SLinus Torvalds return "unknown_primitive"; 1451da177e4SLinus Torvalds } 1461da177e4SLinus Torvalds 14736cbd3dcSJan Engelhardt static const char *const sctp_other_tbl[] = { 1481da177e4SLinus Torvalds "NO_PENDING_TSN", 1491da177e4SLinus Torvalds "ICMP_PROTO_UNREACH", 1501da177e4SLinus Torvalds }; 1511da177e4SLinus Torvalds 1521da177e4SLinus Torvalds /* Lookup "other" debug name. */ 1531da177e4SLinus Torvalds const char *sctp_oname(const sctp_subtype_t id) 1541da177e4SLinus Torvalds { 1551da177e4SLinus Torvalds if (id.other <= SCTP_EVENT_OTHER_MAX) 1561da177e4SLinus Torvalds return sctp_other_tbl[id.other]; 1571da177e4SLinus Torvalds return "unknown 'other' event"; 1581da177e4SLinus Torvalds } 1591da177e4SLinus Torvalds 16036cbd3dcSJan Engelhardt static const char *const sctp_timer_tbl[] = { 1611da177e4SLinus Torvalds "TIMEOUT_NONE", 1621da177e4SLinus Torvalds "TIMEOUT_T1_COOKIE", 1631da177e4SLinus Torvalds "TIMEOUT_T1_INIT", 1641da177e4SLinus Torvalds "TIMEOUT_T2_SHUTDOWN", 1651da177e4SLinus Torvalds "TIMEOUT_T3_RTX", 1661da177e4SLinus Torvalds "TIMEOUT_T4_RTO", 1671da177e4SLinus Torvalds "TIMEOUT_T5_SHUTDOWN_GUARD", 1681da177e4SLinus Torvalds "TIMEOUT_HEARTBEAT", 1691da177e4SLinus Torvalds "TIMEOUT_SACK", 1701da177e4SLinus Torvalds "TIMEOUT_AUTOCLOSE", 1711da177e4SLinus Torvalds }; 1721da177e4SLinus Torvalds 1731da177e4SLinus Torvalds /* Lookup timer debug name. */ 1741da177e4SLinus Torvalds const char *sctp_tname(const sctp_subtype_t id) 1751da177e4SLinus Torvalds { 1761da177e4SLinus Torvalds if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX) 1771da177e4SLinus Torvalds return sctp_timer_tbl[id.timeout]; 1781da177e4SLinus Torvalds return "unknown_timer"; 1791da177e4SLinus Torvalds } 180