use bounds-checking lookup functions for string constants

This commit is contained in:
Brendan O'Dea 2005-01-05 13:37:56 +00:00
parent 5c3bc79ed4
commit 2a09904461
2 changed files with 194 additions and 151 deletions

View file

@ -1,23 +1,37 @@
// L2TPNS: constants // L2TPNS: constants
char const *cvs_id_constants = "$Id: constants.c,v 1.3 2004-06-28 02:43:13 fred_nerk Exp $"; char const *cvs_id_constants = "$Id: constants.c,v 1.4 2005-01-05 13:37:56 bodea Exp $";
#include <stdio.h>
#include "constants.h" #include "constants.h"
#include <memory.h>
const char *lcp_types[MAX_LCP_TYPE+1] = { #define CONSTANT(table, ...) \
"Reserved", static char const *table ## s[] = { \
"Maximum-Receive-Unit", __VA_ARGS__ \
"Async-Control-Map", }; \
"Authentication-Protocol", char const *table(int index) \
"Quality-Protocol", { \
"Magic-Number", static char n[16]; \
"Reserved 6", if (index >= 0 && index < sizeof(table ## s) / sizeof(table ## s[0]) \
"Protocol-Field-Compression", && table ## s[index]) \
"Address-and-Control-Field-Compression", return table ## s[index]; \
}; snprintf(n, sizeof(n), "%d", index); \
return n; \
}
const char *avpnames[MAX_AVPNAME+1] = { 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 "Message Type", // 0
"Result Code", // 1 "Result Code", // 1
"Protocol Version", // 2 "Protocol Version", // 2
@ -38,7 +52,7 @@ const char *avpnames[MAX_AVPNAME+1] = {
"Maximum BPS", // 17 "Maximum BPS", // 17
"Bearer Type", // 18 (2 = Analog, 1 = Digital) "Bearer Type", // 18 (2 = Analog, 1 = Digital)
"Framing Type", // 19 (2 = Async, 1 = Sync) "Framing Type", // 19 (2 = Async, 1 = Sync)
"Reserved 20", // 20 0, // 20
"Called Number", // 21 "Called Number", // 21
"Calling Number", // 22 "Calling Number", // 22
"Sub Address", // 23 "Sub Address", // 23
@ -57,84 +71,127 @@ const char *avpnames[MAX_AVPNAME+1] = {
"Random Vector", // 36 "Random Vector", // 36
"Private Group ID", // 37 "Private Group ID", // 37
"Rx Connect Speed", // 38 "Rx Connect Speed", // 38
"Sequencing Required", // 39 "Sequencing Required" // 39
}; )
const char *stopccn_result_codes[MAX_STOPCCN_RESULT_CODE+1] = { CONSTANT(stopccn_result_code,
"Reserved", 0, // 0
"General request to clear control connection", "General request to clear control connection", // 1
"General error--Error Code indicates the problem", "General error--Error Code indicates the problem", // 2
"Control channel already exists", "Control channel already exists", // 3
"Requester is not authorized to establish a control channel", "Requester is not authorized to establish a"
"The protocol version of the requester is not supported", " control channel", // 4
"Requester is being shut down", "The protocol version of the requester is not"
"Finite State Machine error", " supported", // 5
}; "Requester is being shut down", // 6
"Finite State Machine error" // 7
)
const char *cdn_result_codes[MAX_CDN_RESULT_CODE+1] = { CONSTANT(cdn_result_code,
"Reserved", 0, // 0
"Call disconnected due to loss of carrier", "Call disconnected due to loss of carrier", // 1
"Call disconnected for the reason indicated in error code", "Call disconnected for the reason indicated in"
"Call disconnected for administrative reasons", " error code", // 2
"Call failed due to lack of appropriate facilities being available (temporary condition)", "Call disconnected for administrative reasons", // 3
"Call failed due to lack of appropriate facilities being available (permanent condition)", "Call failed due to lack of appropriate facilities"
"Invalid destination", " being available (temporary condition)", // 4
"Call failed due to no carrier detected", "Call failed due to lack of appropriate facilities"
"Call failed due to detection of a busy signal", " being available (permanent condition)", // 5
"Call failed due to lack of a dial tone", "Invalid destination", // 6
"Call was not established within time allotted by LAC", "Call failed due to no carrier detected", // 7
"Call was connected but no appropriate framing was detected", "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 *error_codes[MAX_ERROR_CODE+1] = { CONSTANT(error_code,
"No general error", "No general error", // 0
"No control connection exists yet for this LAC-LNS pair", "No control connection exists yet for this LAC-LNS"
"Length is wrong", " pair", // 1
"One of the field values was out of range or reserved field was non-zero", "Length is wrong", // 2
"Insufficient resources to handle this operation now", "One of the field values was out of range or"
"The Session ID is invalid in this context", " reserved field was non-zero", // 3
"A generic vendor-specific error occurred in the LAC", "Insufficient resources to handle this operation"
"Try another LNS", " now", // 4
"Session or tunnel was shutdown due to receipt of an unknown AVP with the M-bit set", "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 *authtypes[MAX_AUTHTYPE+1] = { CONSTANT(auth_type,
"Reserved", 0, // 0
"Textual username/password exchange", "Textual username/password exchange", // 1
"PPP CHAP", "PPP CHAP", // 2
"PPP PAP", "PPP PAP", // 3
"No Authentication", "No Authentication", // 4
"Microsoft CHAP Version 1 (MSCHAPv1)", "Microsoft CHAP Version 1 (MSCHAPv1)" // 5
}; )
const char *radius_states[MAX_RADIUS_STATE+1] = { CONSTANT(ppp_lcp_type,
"RADIUSNULL", 0, // 0
"RADIUSCHAP", "ConfigReq", // 1
"RADIUSAUTH", "ConfigAck", // 2
"RADIUSIPCP", "ConfigNak", // 3
"RADIUSSTART", "ConfigRej", // 4
"RADIUSSTOP", "TerminateReq", // 5
"RADIUSWAIT", "TerminateAck", // 6
NULL "CodeRej", // 7
}; "ProtocolRej", // 8
"EchoReq", // 9
"EchoReply", // 10
"DiscardRequest", // 11
"IdentRequest" // 12
)
const char *l2tp_message_types[MAX_L2TP_MESSAGE_TYPE+1] = { CONSTANT(radius_state,
"reserved", "RADIUSNULL", // 0
"SCCRQ", "RADIUSCHAP", // 1
"SCCRP", "RADIUSAUTH", // 2
"SCCCN", "RADIUSIPCP", // 3
"RADIUSSTART", // 4
"RADIUSSTOP", // 5
"RADIUSWAIT" // 6
)
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 "StopCCN", // 4
"reserved", 0, // 5
"HELLO", "HELLO", // 6
"OCRQ", "OCRQ", // 7
"OCRP", "OCRP", // 8
"OCCN", "OCCN", // 9
"ICRQ", // 10 "ICRQ", // 10
"ICRP", "ICRP", // 11
"ICCN", "ICCN", // 12
"reserved", 0, // 13
"CDN", "CDN", // 14
"WEN", // 15 "WEN", // 15
"SLI", "SLI" // 16
}; )

View file

@ -1,29 +1,15 @@
#ifndef __CONSTANTS_H__ #ifndef __CONSTANTS_H__
#define __CONSTANTS_H__ #define __CONSTANTS_H__
#define MAX_LCP_TYPE 8 char const *lcp_type(int type);
extern const char *lcp_types[MAX_LCP_TYPE+1]; char const *avp_name(int avp);
char const *stopccn_result_code(int code);
#define MAX_AVPNAME 40 char const *cdn_result_code(int code);
extern const char *avpnames[MAX_AVPNAME+1]; char const *error_code(int code);
char const *auth_type(int type);
#define MAX_STOPCCN_RESULT_CODE 7 char const *ppp_lcp_type(int type);
extern const char *stopccn_result_codes[MAX_STOPCCN_RESULT_CODE+1]; char const *radius_state(int state);
char const *radius_code(int code);
#define MAX_CDN_RESULT_CODE 11 char const *l2tp_message_type(int type);
extern const char *cdn_result_codes[MAX_CDN_RESULT_CODE+1];
#define MAX_ERROR_CODE 8
extern const char *error_codes[MAX_ERROR_CODE+1];
#define MAX_AUTHTYPE 5
extern const char *authtypes[MAX_AUTHTYPE+1];
// Can remove the NULL end now
#define MAX_RADIUS_STATE 8
extern const char *radius_states[MAX_RADIUS_STATE+1];
#define MAX_L2TP_MESSAGE_TYPE 16
extern const char *l2tp_message_types[MAX_L2TP_MESSAGE_TYPE+1];
#endif /* __CONSTANTS_H__ */ #endif /* __CONSTANTS_H__ */