use bounds-checking lookup functions for string constants
[l2tpns.git] / constants.c
1 // L2TPNS: constants
2
3 char const *cvs_id_constants = "$Id: constants.c,v 1.4 2005/01/05 13:37:56 bodea Exp $";
4
5 #include <stdio.h>
6 #include "constants.h"
7
8 #define CONSTANT(table, ...) \
9 static char const *table ## s[] = { \
10 __VA_ARGS__ \
11 }; \
12 char const *table(int index) \
13 { \
14 static char n[16]; \
15 if (index >= 0 && index < sizeof(table ## s) / sizeof(table ## s[0]) \
16 && table ## s[index]) \
17 return table ## s[index]; \
18 snprintf(n, sizeof(n), "%d", index); \
19 return n; \
20 }
21
22 CONSTANT(lcp_type,
23 0, // 0
24 "Maximum-Receive-Unit", // 1
25 "Async-Control-Map", // 2
26 "Authentication-Protocol", // 3
27 "Quality-Protocol", // 4
28 "Magic-Number", // 5
29 0, // 6
30 "Protocol-Field-Compression", // 7
31 "Address-and-Control-Field-Compression" // 8
32 )
33
34 CONSTANT(avp_name,
35 "Message Type", // 0
36 "Result Code", // 1
37 "Protocol Version", // 2
38 "Framing Capabilities", // 3
39 "Bearer Capabilities", // 4
40 "Tie Breaker", // 5
41 "Firmware Revision", // 6
42 "Host Name", // 7
43 "Vendor Name", // 8
44 "Assigned Tunnel ID", // 9
45 "Receive Window Size", // 10
46 "Challenge", // 11
47 "Q.931 Cause Code", // 12
48 "Challenge Response", // 13
49 "Assigned Session ID", // 14
50 "Call Serial Number", // 15
51 "Minimum BPS", // 16
52 "Maximum BPS", // 17
53 "Bearer Type", // 18 (2 = Analog, 1 = Digital)
54 "Framing Type", // 19 (2 = Async, 1 = Sync)
55 0, // 20
56 "Called Number", // 21
57 "Calling Number", // 22
58 "Sub Address", // 23
59 "Tx Connect Speed", // 24
60 "Physical Channel ID", // 25
61 "Initial Received LCP CONFREQ", // 26
62 "Last Sent LCP CONFREQ", // 27
63 "Last Received LCP CONFREQ", // 28
64 "Proxy Authen Type", // 29
65 "Proxy Authen Name", // 30
66 "Proxy Authen Challenge", // 31
67 "Proxy Authen ID", // 32
68 "Proxy Authen Response", // 33
69 "Call Errors", // 34
70 "ACCM", // 35
71 "Random Vector", // 36
72 "Private Group ID", // 37
73 "Rx Connect Speed", // 38
74 "Sequencing Required" // 39
75 )
76
77 CONSTANT(stopccn_result_code,
78 0, // 0
79 "General request to clear control connection", // 1
80 "General error--Error Code indicates the problem", // 2
81 "Control channel already exists", // 3
82 "Requester is not authorized to establish a"
83 " control channel", // 4
84 "The protocol version of the requester is not"
85 " supported", // 5
86 "Requester is being shut down", // 6
87 "Finite State Machine error" // 7
88 )
89
90 CONSTANT(cdn_result_code,
91 0, // 0
92 "Call disconnected due to loss of carrier", // 1
93 "Call disconnected for the reason indicated in"
94 " error code", // 2
95 "Call disconnected for administrative reasons", // 3
96 "Call failed due to lack of appropriate facilities"
97 " being available (temporary condition)", // 4
98 "Call failed due to lack of appropriate facilities"
99 " being available (permanent condition)", // 5
100 "Invalid destination", // 6
101 "Call failed due to no carrier detected", // 7
102 "Call failed due to detection of a busy signal", // 8
103 "Call failed due to lack of a dial tone", // 9
104 "Call was not established within time allotted by"
105 " LAC", // 10
106 "Call was connected but no appropriate framing was"
107 " detected" // 11
108 )
109
110 CONSTANT(error_code,
111 "No general error", // 0
112 "No control connection exists yet for this LAC-LNS"
113 " pair", // 1
114 "Length is wrong", // 2
115 "One of the field values was out of range or"
116 " reserved field was non-zero", // 3
117 "Insufficient resources to handle this operation"
118 " now", // 4
119 "The Session ID is invalid in this context", // 5
120 "A generic vendor-specific error occurred in the"
121 " LAC", // 6
122 "Try another LNS", // 7
123 "Session or tunnel was shutdown due to receipt of"
124 " an unknown AVP with the M-bit set" // 8
125 )
126
127 CONSTANT(auth_type,
128 0, // 0
129 "Textual username/password exchange", // 1
130 "PPP CHAP", // 2
131 "PPP PAP", // 3
132 "No Authentication", // 4
133 "Microsoft CHAP Version 1 (MSCHAPv1)" // 5
134 )
135
136 CONSTANT(ppp_lcp_type,
137 0, // 0
138 "ConfigReq", // 1
139 "ConfigAck", // 2
140 "ConfigNak", // 3
141 "ConfigRej", // 4
142 "TerminateReq", // 5
143 "TerminateAck", // 6
144 "CodeRej", // 7
145 "ProtocolRej", // 8
146 "EchoReq", // 9
147 "EchoReply", // 10
148 "DiscardRequest", // 11
149 "IdentRequest" // 12
150 )
151
152 CONSTANT(radius_state,
153 "RADIUSNULL", // 0
154 "RADIUSCHAP", // 1
155 "RADIUSAUTH", // 2
156 "RADIUSIPCP", // 3
157 "RADIUSSTART", // 4
158 "RADIUSSTOP", // 5
159 "RADIUSWAIT" // 6
160 )
161
162 CONSTANT(radius_code,
163 0, // 0
164 "Access-Request", // 1
165 "Access-Accept", // 2
166 "Access-Reject", // 3
167 "Accounting-Request", // 4
168 "Accounting-Response", // 5
169 0, // 6
170 0, // 7
171 0, // 8
172 0, // 9
173 0, // 10
174 "Access-Challenge", // 11
175 "Status-Server (experimental)", // 12
176 "Status-Client (experimental)" // 13
177 )
178
179 CONSTANT(l2tp_message_type,
180 0, // 0
181 "SCCRQ", // 1
182 "SCCRP", // 2
183 "SCCCN", // 3
184 "StopCCN", // 4
185 0, // 5
186 "HELLO", // 6
187 "OCRQ", // 7
188 "OCRP", // 8
189 "OCCN", // 9
190 "ICRQ", // 10
191 "ICRP", // 11
192 "ICCN", // 12
193 0, // 13
194 "CDN", // 14
195 "WEN", // 15
196 "SLI" // 16
197 )