use bounds-checking lookup functions for string constants
This commit is contained in:
parent
5c3bc79ed4
commit
2a09904461
2 changed files with 194 additions and 151 deletions
231
constants.c
231
constants.c
|
|
@ -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
|
||||||
};
|
)
|
||||||
|
|
||||||
|
|
|
||||||
34
constants.h
34
constants.h
|
|
@ -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__ */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue