X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/b2bd9655946aa73a31b5e5d9baf417cd38938cd8..e5d919edc71f7a2f6df28244981533429dc685a2:/l2tpns.h diff --git a/l2tpns.h b/l2tpns.h index 0c2cd30..d89f3ee 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.109 2005/12/20 04:57:16 bodea Exp $ +// $Id: l2tpns.h,v 1.114 2006/04/23 23:18:32 bodea Exp $ #ifndef __L2TPNS_H__ #define __L2TPNS_H__ @@ -14,7 +14,7 @@ #include #include -#define VERSION "2.1.16" +#define VERSION "2.1.19" // Limits #define MAXTUNNEL 500 // could be up to 65535 @@ -147,7 +147,16 @@ enum { // reset state machine counters #define initialise_restart_count(_s, _fsm) \ - sess_local[_s]._fsm.conf_sent = sess_local[_s]._fsm.nak_sent = 0 + sess_local[_s]._fsm.conf_sent = \ + sess_local[_s]._fsm.nak_sent = 0 + +// no more attempts +#define zero_restart_count(_s, _fsm) ({ \ + sess_local[_s]._fsm.conf_sent = \ + config->ppp_max_configure; \ + sess_local[_s]._fsm.restart = \ + time_now + config->ppp_restart_time; \ +}) // increment ConfReq counter and reset timer #define restart_timer(_s, _fsm) ({ \ @@ -345,7 +354,7 @@ typedef struct } tunnelt; -// 160 bytes per radius session +// 164 bytes per radius session typedef struct // outstanding RADIUS requests { sessionidt session; // which session this applies to @@ -356,6 +365,8 @@ typedef struct // outstanding RADIUS requests uint8_t try; // which try we are on uint8_t state; // state of radius requests uint8_t chap; // set if CHAP used (is CHAP identifier) + uint8_t term_cause; // Stop record: Acct-Terminate-Cause + char const *term_msg; // terminate reason } radiust; @@ -674,6 +685,36 @@ typedef struct int used; // session ref count } ip_filtert; +// CDN result/error codes +#define CDN_NONE 0, 0 +#define CDN_TRY_ANOTHER 2, 7 +#define CDN_ADMIN_DISC 3, 0 +#define CDN_UNAVAILABLE 4, 0 + +// RADIUS Acct-Terminate-Cause values +#define TERM_USER_REQUEST 1 +#define TERM_LOST_CARRIER 2 +#define TERM_LOST_SERVICE 3 +#define TERM_IDLE_TIMEOUT 4 +#define TERM_SESSION_TIMEOUT 5 +#define TERM_ADMIN_RESET 6 +#define TERM_ADMIN_REBOOT 7 +#define TERM_PORT_ERROR 8 +#define TERM_NAS_ERROR 9 +#define TERM_NAS_REQUEST 10 +#define TERM_NAS_REBOOT 11 +#define TERM_PORT_UNNEEDED 12 +#define TERM_PORT_PREEMPTED 13 +#define TERM_PORT_SUSPENDED 14 +#define TERM_SERVICE_UNAVAILABLE 15 +#define TERM_CALLBACK 16 +#define TERM_USER_ERROR 17 +#define TERM_HOST_REQUEST 18 +#define TERM_SUPPLICANT_RESTART 19 +#define TERM_REAUTHENTICATION_FAILURE 20 +#define TERM_PORT_REINIT 21 +#define TERM_PORT_DISABLED 22 + // arp.c void sendarp(int ifr_idx, const unsigned char* mac, in_addr_t ip); @@ -703,7 +744,7 @@ void processrad(uint8_t *buf, int len, char socket_index); void radiusretry(uint16_t r); uint16_t radiusnew(sessionidt s); void radiusclear(uint16_t r, sessionidt s); -void processdae(uint8_t *buf, int len, struct sockaddr_in *addr, int alen); +void processdae(uint8_t *buf, int len, struct sockaddr_in *addr, int alen, struct in_addr *local); // l2tpns.c @@ -716,7 +757,7 @@ sessionidt sessionbyuser(char *username); void increment_counter(uint32_t *counter, uint32_t *wrap, uint32_t delta); void random_data(uint8_t *buf, int len); void sessionkill(sessionidt s, char *reason); -void sessionshutdown(sessionidt s, char *reason, int result, int error); +void sessionshutdown(sessionidt s, char const *reason, int cdn_result, int cdn_error, int term_cause); void filter_session(sessionidt s, int filter_in, int filter_out); void send_garp(in_addr_t ip); void tunnelsend(uint8_t *buf, uint16_t l, tunnelidt t);