- Don't send CDN for each session when shutting down tunnels (this is
[l2tpns.git] / constants.c
index 46258b1..1b6918f 100644 (file)
+// L2TPNS: constants
+
+char const *cvs_id_constants = "$Id: constants.c,v 1.5 2005/05/05 10:02:07 bodea Exp $";
+
+#include <stdio.h>
 #include "constants.h"
-#include <memory.h>
 
-const char *lcp_types[MAX_LCP_TYPE+1] = {
-       "Reserved",
-       "Maximum-Receive-Unit",
-       "Reserved 2",
-       "Authentication-Protocol",
-       "Quality-Protocol",
-       "Magic-Number",
-       "Reserved 6",
-       "Protocol-Field-Compression",
-       "Address-and-Control-Field-Compression",
-};
+#define CONSTANT(table, ...) \
+    static char const *table ## s[] = { \
+       __VA_ARGS__ \
+    }; \
+    char const *table(int index) \
+    { \
+       static char n[16]; \
+       if (index >= 0 && index < sizeof(table ## s) / sizeof(table ## s[0]) \
+           && table ## s[index]) \
+               return table ## s[index]; \
+       snprintf(n, sizeof(n), "%d", index); \
+       return n; \
+    }
+
+CONSTANT(lcp_type,
+    0,                                                 // 0
+    "Maximum-Receive-Unit",                            // 1
+    "Async-Control-Map",                               // 2
+    "Authentication-Protocol",                         // 3
+    "Quality-Protocol",                                        // 4
+    "Magic-Number",                                    // 5
+    0,                                                 // 6
+    "Protocol-Field-Compression",                      // 7
+    "Address-and-Control-Field-Compression"            // 8
+)
+
+CONSTANT(avp_name,
+    "Message Type",                                    // 0
+    "Result Code",                                     // 1
+    "Protocol Version",                                        // 2
+    "Framing Capabilities",                            // 3
+    "Bearer Capabilities",                             // 4
+    "Tie Breaker",                                     // 5
+    "Firmware Revision",                               // 6
+    "Host Name",                                       // 7
+    "Vendor Name",                                     // 8
+    "Assigned Tunnel ID",                              // 9
+    "Receive Window Size",                             // 10
+    "Challenge",                                       // 11
+    "Q.931 Cause Code",                                        // 12
+    "Challenge Response",                              // 13
+    "Assigned Session ID",                             // 14
+    "Call Serial Number",                              // 15
+    "Minimum BPS",                                     // 16
+    "Maximum BPS",                                     // 17
+    "Bearer Type",                                     // 18 (2 = Analog, 1 = Digital)
+    "Framing Type",                                    // 19 (2 = Async, 1 = Sync)
+    0,                                                 // 20
+    "Called Number",                                   // 21
+    "Calling Number",                                  // 22
+    "Sub Address",                                     // 23
+    "Tx Connect Speed",                                        // 24
+    "Physical Channel ID",                             // 25
+    "Initial Received LCP CONFREQ",                    // 26
+    "Last Sent LCP CONFREQ",                           // 27
+    "Last Received LCP CONFREQ",                       // 28
+    "Proxy Authen Type",                               // 29
+    "Proxy Authen Name",                               // 30
+    "Proxy Authen Challenge",                          // 31
+    "Proxy Authen ID",                                 // 32
+    "Proxy Authen Response",                           // 33
+    "Call Errors",                                     // 34
+    "ACCM",                                            // 35
+    "Random Vector",                                   // 36
+    "Private Group ID",                                        // 37
+    "Rx Connect Speed",                                        // 38
+    "Sequencing Required"                              // 39
+)
 
-const char *avpnames[MAX_AVPNAME+1] = {
-       "Message Type", // 0
-       "Result Code", // 1
-       "Protocol Version", // 2
-       "Framing Capabilities", // 3
-       "Bearer Capabilities", // 4
-       "Tie Breaker", // 5
-       "Firmware Revision", // 6
-       "Host Name", // 7
-       "Vendor Name", // 8
-       "Assigned Tunnel ID", // 9
-       "Receive Window Size", // 10
-       "Challenge", // 11
-       "Q.931 Cause Code", // 12
-       "Challenge Response", // 13
-       "Assigned Session ID", // 14
-       "Call Serial Number", // 15
-       "Minimum BPS", // 16
-       "Maximum BPS", // 17
-       "Bearer Type", // 18 (2 = Analog, 1 = Digital)
-       "Framing Type", // 19 (2 = Async, 1 = Sync)
-       "Reserved 20", // 20
-       "Called Number", // 21
-       "Calling Number", // 22
-       "Sub Address", // 23
-       "Tx Connect Speed", // 24
-       "Physical Channel ID", // 25
-       "Initial Received LCP CONFREQ", // 26
-       "Last Sent LCP CONFREQ", // 27
-       "Last Received LCP CONFREQ", // 28
-       "Proxy Authen Type", // 29
-       "Proxy Authen Name", // 30
-       "Proxy Authen Challenge", // 31
-       "Proxy Authen ID", // 32
-       "Proxy Authen Response", // 33
-       "Call Errors", // 34
-       "ACCM", // 35
-       "Random Vector", // 36
-       "Private Group ID", // 37
-       "Rx Connect Speed", // 38
-       "Sequencing Required", // 39
-};
+CONSTANT(stopccn_result_code,
+    0,                                                 // 0
+    "General request to clear control connection",     // 1
+    "General error--Error Code indicates the problem", // 2
+    "Control channel already exists",                  // 3
+    "Requester is not authorized to establish a"
+       " control channel",                             // 4
+    "The protocol version of the requester is not"
+       " supported",                                   // 5
+    "Requester is being shut down",                    // 6
+    "Finite State Machine error"                       // 7
+)
 
-const char *stopccn_result_codes[MAX_STOPCCN_RESULT_CODE+1] = {
-       "Reserved",
-       "General request to clear control connection",
-       "General error--Error Code indicates the problem",
-       "Control channel already exists",
-       "Requester is not authorized to establish a control channel",
-       "The protocol version of the requester is not supported",
-       "Requester is being shut down",
-       "Finite State Machine error",
-};
+CONSTANT(cdn_result_code,
+    0,                                                 // 0
+    "Call disconnected due to loss of carrier",                // 1
+    "Call disconnected for the reason indicated in"
+       " error code",                                  // 2
+    "Call disconnected for administrative reasons",    // 3
+    "Call failed due to lack of appropriate facilities"
+       " being available (temporary condition)",       // 4
+    "Call failed due to lack of appropriate facilities"
+       " being available (permanent condition)",       // 5
+    "Invalid destination",                             // 6
+    "Call failed due to no carrier detected",          // 7
+    "Call failed due to detection of a busy signal",   // 8
+    "Call failed due to lack of a dial tone",          // 9
+    "Call was not established within time allotted by"
+       " LAC",                                         // 10
+    "Call was connected but no appropriate framing was"
+       " detected"                                     // 11
+)
 
-const char *cdn_result_codes[MAX_CDN_RESULT_CODE+1] = {
-       "Reserved",
-       "Call disconnected due to loss of carrier",
-       "Call disconnected for the reason indicated in error code",
-       "Call disconnected for administrative reasons",
-       "Call failed due to lack of appropriate facilities being available (temporary condition)",
-       "Call failed due to lack of appropriate facilities being available (permanent condition)",
-       "Invalid destination",
-       "Call failed due to no carrier detected",
-       "Call failed due to detection of a busy signal",
-       "Call failed due to lack of a dial tone",
-       "Call was not established within time allotted by LAC",
-       "Call was connected but no appropriate framing was detected",
-};
+CONSTANT(error_code,
+    "No general error",                                        // 0
+    "No control connection exists yet for this LAC-LNS"
+       " pair",                                        // 1
+    "Length is wrong",                                 // 2
+    "One of the field values was out of range or"
+       " reserved field was non-zero",                 // 3
+    "Insufficient resources to handle this operation"
+       " now",                                         // 4
+    "The Session ID is invalid in this context",       // 5
+    "A generic vendor-specific error occurred in the"
+       " LAC",                                         // 6
+    "Try another LNS",                                 // 7
+    "Session or tunnel was shutdown due to receipt of"
+       " an unknown AVP with the M-bit set"            // 8
+)
 
-const char *error_codes[MAX_ERROR_CODE+1] = {
-       "No general error",
-       "No control connection exists yet for this LAC-LNS pair",
-       "Length is wrong",
-       "One of the field values was out of range or reserved field was non-zero",
-       "Insufficient resources to handle this operation now",
-       "The Session ID is invalid in this context",
-       "A generic vendor-specific error occurred in the LAC",
-       "Try another LNS",
-       "Session or tunnel was shutdown due to receipt of an unknown AVP with the M-bit set",
-};
+CONSTANT(auth_type,
+    0,                                                 // 0
+    "Textual username/password exchange",              // 1
+    "PPP CHAP",                                                // 2
+    "PPP PAP",                                         // 3
+    "No Authentication",                               // 4
+    "Microsoft CHAP Version 1 (MSCHAPv1)"              // 5
+)
 
-const char *authtypes[MAX_AUTHTYPE+1] = {
-       "Reserved",
-       "Textual username/password exchange",
-       "PPP CHAP",
-       "PPP PAP",
-       "No Authentication",
-       "Microsoft CHAP Version 1 (MSCHAPv1)",
-};
+CONSTANT(ppp_lcp_type,
+    0,                                                 // 0
+    "ConfigReq",                                       // 1
+    "ConfigAck",                                       // 2
+    "ConfigNak",                                       // 3
+    "ConfigRej",                                       // 4
+    "TerminateReq",                                    // 5
+    "TerminateAck",                                    // 6
+    "CodeRej",                                         // 7
+    "ProtocolRej",                                     // 8
+    "EchoReq",                                         // 9
+    "EchoReply",                                       // 10
+    "DiscardRequest",                                  // 11
+    "IdentRequest"                                     // 12
+)
 
-const char *radius_states[MAX_RADIUS_STATE+1] = {
-       "RADIUSNULL",
-       "RADIUSCHAP",
-       "RADIUSAUTH",
-       "RADIUSIPCP",
-       "RADIUSSTART",
-       "RADIUSSTOP",
-       "RADIUSWAIT",
-       NULL
-};
+CONSTANT(radius_state,
+    "RADIUSNULL",                                      // 0
+    "RADIUSCHAP",                                      // 1
+    "RADIUSAUTH",                                      // 2
+    "RADIUSIPCP",                                      // 3
+    "RADIUSSTART",                                     // 4
+    "RADIUSSTOP",                                      // 5
+    "RADIUSINTERIM",                                   // 6
+    "RADIUSWAIT"                                       // 7
+)
 
-const char *l2tp_message_types[MAX_L2TP_MESSAGE_TYPE+1] = {
-       "reserved",
-       "SCCRQ",
-       "SCCRP",
-       "SCCCN",
-       "StopCCN", // 4
-       "reserved",
-       "HELLO",
-       "OCRQ",
-       "OCRP",
-       "OCCN",
-       "ICRQ", // 10
-       "ICRP",
-       "ICCN",
-       "reserved",
-       "CDN",
-       "WEN", // 15
-       "SLI",
-};
+CONSTANT(radius_code,
+    0,                                                 // 0
+    "Access-Request",                                  // 1
+    "Access-Accept",                                   // 2
+    "Access-Reject",                                   // 3
+    "Accounting-Request",                              // 4
+    "Accounting-Response",                             // 5
+    0,                                                 // 6
+    0,                                                 // 7
+    0,                                                 // 8
+    0,                                                 // 9
+    0,                                                 // 10
+    "Access-Challenge",                                        // 11
+    "Status-Server (experimental)",                    // 12
+    "Status-Client (experimental)"                     // 13
+)
 
+CONSTANT(l2tp_message_type,
+    0,                                                 // 0
+    "SCCRQ",                                           // 1
+    "SCCRP",                                           // 2
+    "SCCCN",                                           // 3
+    "StopCCN",                                         // 4
+    0,                                                 // 5
+    "HELLO",                                           // 6
+    "OCRQ",                                            // 7
+    "OCRP",                                            // 8
+    "OCCN",                                            // 9
+    "ICRQ",                                            // 10
+    "ICRP",                                            // 11
+    "ICCN",                                            // 12
+    0,                                                 // 13
+    "CDN",                                             // 14
+    "WEN",                                             // 15
+    "SLI"                                              // 16
+)