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): 311da177e4SLinus Torvalds * lksctp developers <lksctp-developers@lists.sourceforge.net> 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 #if SCTP_DEBUG 511da177e4SLinus Torvalds int sctp_debug_flag = 1; /* Initially enable DEBUG */ 521da177e4SLinus Torvalds #endif /* SCTP_DEBUG */ 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds /* These are printable forms of Chunk ID's from section 3.1. */ 551da177e4SLinus Torvalds static const char *sctp_cid_tbl[SCTP_NUM_BASE_CHUNK_TYPES] = { 561da177e4SLinus Torvalds "DATA", 571da177e4SLinus Torvalds "INIT", 581da177e4SLinus Torvalds "INIT_ACK", 591da177e4SLinus Torvalds "SACK", 601da177e4SLinus Torvalds "HEARTBEAT", 611da177e4SLinus Torvalds "HEARTBEAT_ACK", 621da177e4SLinus Torvalds "ABORT", 631da177e4SLinus Torvalds "SHUTDOWN", 641da177e4SLinus Torvalds "SHUTDOWN_ACK", 651da177e4SLinus Torvalds "ERROR", 661da177e4SLinus Torvalds "COOKIE_ECHO", 671da177e4SLinus Torvalds "COOKIE_ACK", 681da177e4SLinus Torvalds "ECN_ECNE", 691da177e4SLinus Torvalds "ECN_CWR", 701da177e4SLinus Torvalds "SHUTDOWN_COMPLETE", 711da177e4SLinus Torvalds }; 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds /* Lookup "chunk type" debug name. */ 741da177e4SLinus Torvalds const char *sctp_cname(const sctp_subtype_t cid) 751da177e4SLinus Torvalds { 761da177e4SLinus Torvalds if (cid.chunk <= SCTP_CID_BASE_MAX) 771da177e4SLinus Torvalds return sctp_cid_tbl[cid.chunk]; 781da177e4SLinus Torvalds 791da177e4SLinus Torvalds switch (cid.chunk) { 801da177e4SLinus Torvalds case SCTP_CID_ASCONF: 811da177e4SLinus Torvalds return "ASCONF"; 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds case SCTP_CID_ASCONF_ACK: 841da177e4SLinus Torvalds return "ASCONF_ACK"; 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds case SCTP_CID_FWD_TSN: 871da177e4SLinus Torvalds return "FWD_TSN"; 881da177e4SLinus Torvalds 891da177e4SLinus Torvalds default: 903ff50b79SStephen Hemminger break; 913ff50b79SStephen Hemminger } 923ff50b79SStephen Hemminger 931da177e4SLinus Torvalds return "unknown chunk"; 941da177e4SLinus Torvalds } 951da177e4SLinus Torvalds 961da177e4SLinus Torvalds /* These are printable forms of the states. */ 971da177e4SLinus Torvalds const char *sctp_state_tbl[SCTP_STATE_NUM_STATES] = { 981da177e4SLinus Torvalds "STATE_EMPTY", 991da177e4SLinus Torvalds "STATE_CLOSED", 1001da177e4SLinus Torvalds "STATE_COOKIE_WAIT", 1011da177e4SLinus Torvalds "STATE_COOKIE_ECHOED", 1021da177e4SLinus Torvalds "STATE_ESTABLISHED", 1031da177e4SLinus Torvalds "STATE_SHUTDOWN_PENDING", 1041da177e4SLinus Torvalds "STATE_SHUTDOWN_SENT", 1051da177e4SLinus Torvalds "STATE_SHUTDOWN_RECEIVED", 1061da177e4SLinus Torvalds "STATE_SHUTDOWN_ACK_SENT", 1071da177e4SLinus Torvalds }; 1081da177e4SLinus Torvalds 1091da177e4SLinus Torvalds /* Events that could change the state of an association. */ 1101da177e4SLinus Torvalds const char *sctp_evttype_tbl[] = { 1111da177e4SLinus Torvalds "EVENT_T_unknown", 1121da177e4SLinus Torvalds "EVENT_T_CHUNK", 1131da177e4SLinus Torvalds "EVENT_T_TIMEOUT", 1141da177e4SLinus Torvalds "EVENT_T_OTHER", 1151da177e4SLinus Torvalds "EVENT_T_PRIMITIVE" 1161da177e4SLinus Torvalds }; 1171da177e4SLinus Torvalds 1181da177e4SLinus Torvalds /* Return value of a state function */ 1191da177e4SLinus Torvalds const char *sctp_status_tbl[] = { 1201da177e4SLinus Torvalds "DISPOSITION_DISCARD", 1211da177e4SLinus Torvalds "DISPOSITION_CONSUME", 1221da177e4SLinus Torvalds "DISPOSITION_NOMEM", 1231da177e4SLinus Torvalds "DISPOSITION_DELETE_TCB", 1241da177e4SLinus Torvalds "DISPOSITION_ABORT", 1251da177e4SLinus Torvalds "DISPOSITION_VIOLATION", 1261da177e4SLinus Torvalds "DISPOSITION_NOT_IMPL", 1271da177e4SLinus Torvalds "DISPOSITION_ERROR", 1281da177e4SLinus Torvalds "DISPOSITION_BUG" 1291da177e4SLinus Torvalds }; 1301da177e4SLinus Torvalds 1311da177e4SLinus Torvalds /* Printable forms of primitives */ 1321da177e4SLinus Torvalds static const char *sctp_primitive_tbl[SCTP_NUM_PRIMITIVE_TYPES] = { 1331da177e4SLinus Torvalds "PRIMITIVE_ASSOCIATE", 1341da177e4SLinus Torvalds "PRIMITIVE_SHUTDOWN", 1351da177e4SLinus Torvalds "PRIMITIVE_ABORT", 1361da177e4SLinus Torvalds "PRIMITIVE_SEND", 1371da177e4SLinus Torvalds "PRIMITIVE_REQUESTHEARTBEAT", 1381da177e4SLinus Torvalds }; 1391da177e4SLinus Torvalds 1401da177e4SLinus Torvalds /* Lookup primitive debug name. */ 1411da177e4SLinus Torvalds const char *sctp_pname(const sctp_subtype_t id) 1421da177e4SLinus Torvalds { 1431da177e4SLinus Torvalds if (id.primitive <= SCTP_EVENT_PRIMITIVE_MAX) 1441da177e4SLinus Torvalds return sctp_primitive_tbl[id.primitive]; 1451da177e4SLinus Torvalds return "unknown_primitive"; 1461da177e4SLinus Torvalds } 1471da177e4SLinus Torvalds 1481da177e4SLinus Torvalds static const char *sctp_other_tbl[] = { 1491da177e4SLinus Torvalds "NO_PENDING_TSN", 1501da177e4SLinus Torvalds "ICMP_PROTO_UNREACH", 1511da177e4SLinus Torvalds }; 1521da177e4SLinus Torvalds 1531da177e4SLinus Torvalds /* Lookup "other" debug name. */ 1541da177e4SLinus Torvalds const char *sctp_oname(const sctp_subtype_t id) 1551da177e4SLinus Torvalds { 1561da177e4SLinus Torvalds if (id.other <= SCTP_EVENT_OTHER_MAX) 1571da177e4SLinus Torvalds return sctp_other_tbl[id.other]; 1581da177e4SLinus Torvalds return "unknown 'other' event"; 1591da177e4SLinus Torvalds } 1601da177e4SLinus Torvalds 1611da177e4SLinus Torvalds static const char *sctp_timer_tbl[] = { 1621da177e4SLinus Torvalds "TIMEOUT_NONE", 1631da177e4SLinus Torvalds "TIMEOUT_T1_COOKIE", 1641da177e4SLinus Torvalds "TIMEOUT_T1_INIT", 1651da177e4SLinus Torvalds "TIMEOUT_T2_SHUTDOWN", 1661da177e4SLinus Torvalds "TIMEOUT_T3_RTX", 1671da177e4SLinus Torvalds "TIMEOUT_T4_RTO", 1681da177e4SLinus Torvalds "TIMEOUT_T5_SHUTDOWN_GUARD", 1691da177e4SLinus Torvalds "TIMEOUT_HEARTBEAT", 1701da177e4SLinus Torvalds "TIMEOUT_SACK", 1711da177e4SLinus Torvalds "TIMEOUT_AUTOCLOSE", 1721da177e4SLinus Torvalds }; 1731da177e4SLinus Torvalds 1741da177e4SLinus Torvalds /* Lookup timer debug name. */ 1751da177e4SLinus Torvalds const char *sctp_tname(const sctp_subtype_t id) 1761da177e4SLinus Torvalds { 1771da177e4SLinus Torvalds if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX) 1781da177e4SLinus Torvalds return sctp_timer_tbl[id.timeout]; 1791da177e4SLinus Torvalds return "unknown_timer"; 1801da177e4SLinus Torvalds } 181