thanks. Changes: - Handle session shutdown gracefully regarding leaving the bundle (bug that is caused when a all session leaves a bundle then another join) - IP assignment is done only for the first session in the bundle (save IP waste for multiple MLPPP sessions) - Route is being added only for the first session in the bundle (less routes on l2tpns system) - Fix route deletion problem for MLPPP sessions (bug that caused when a session leaves a bundle) - Uniformity of sequence number space satisfied (according to RFC1990) - Fix reassembling fragmented packets and handling lost fragments (according to RFC 1990) - FragmentatConnection to l2tpns.cvs.sourceforge.net closed by remote host.n across N session rather than two) - Sequence numbers extraction mask has been corrected (bug in extracting sequence numbers) - some clustering support fixes - Upload/Download statistics has been corrected - add "kill_timedout_sessions" config option
228 lines
6.3 KiB
C
228 lines
6.3 KiB
C
// L2TPNS: constants
|
|
|
|
char const *cvs_id_constants = "$Id: constants.c,v 1.8 2009-12-08 14:49:28 bodea Exp $";
|
|
|
|
#include <stdio.h>
|
|
#include "constants.h"
|
|
|
|
#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(l2tp_code,
|
|
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
|
|
)
|
|
|
|
CONSTANT(l2tp_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
|
|
)
|
|
|
|
CONSTANT(l2tp_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
|
|
)
|
|
|
|
CONSTANT(l2tp_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
|
|
)
|
|
|
|
CONSTANT(l2tp_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
|
|
)
|
|
|
|
CONSTANT(ppp_phase,
|
|
"Dead", // 0
|
|
"Establish", // 1
|
|
"Authenticate", // 2
|
|
"Network", // 3
|
|
"Terminate", // 4
|
|
)
|
|
|
|
CONSTANT(ppp_state,
|
|
"Initial", // 0
|
|
"Starting", // 1
|
|
"Closed", // 2
|
|
"Stopped", // 3
|
|
"Closing", // 4
|
|
"Stopping", // 5
|
|
"Request-Sent", // 6
|
|
"Ack-Received", // 7
|
|
"Ack-Sent", // 8
|
|
"Opened" // 9
|
|
)
|
|
|
|
CONSTANT(ppp_auth_type,
|
|
0, // 0
|
|
"Textual username/password exchange", // 1
|
|
"PPP CHAP", // 2
|
|
"PPP PAP", // 3
|
|
"No Authentication", // 4
|
|
"Microsoft CHAP Version 1 (MSCHAPv1)" // 5
|
|
)
|
|
|
|
CONSTANT(ppp_code,
|
|
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
|
|
)
|
|
|
|
CONSTANT(ppp_lcp_option,
|
|
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(radius_state,
|
|
"RADIUSNULL", // 0
|
|
"RADIUSCHAP", // 1
|
|
"RADIUSAUTH", // 2
|
|
"RADIUSSTART", // 3
|
|
"RADIUSSTOP", // 4
|
|
"RADIUSINTERIM", // 5
|
|
"RADIUSWAIT", // 6
|
|
"RADIUSJUSTAUTH" // 7
|
|
)
|
|
|
|
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", // 12
|
|
"Status-Client", // 13
|
|
0, 0, 0, 0, 0, 0, // 14-19
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20-29
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 30-39
|
|
"Disconnect-Request", // 40
|
|
"Disconnect-ACK", // 41
|
|
"Disconnect-NAK", // 42
|
|
"CoA-Request", // 43
|
|
"CoA-ACK", // 44
|
|
"CoA-NAK" // 45
|
|
)
|