X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/10b6ddcfc1600dfdfe2390350970ff399939f1d7..e020fbba4d413aada69619e5048f0ae4132611b5:/l2tpns.h diff --git a/l2tpns.h b/l2tpns.h index 724a959..03619a4 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.75 2005/06/02 11:32:31 bodea Exp $ +// $Id: l2tpns.h,v 1.80 2005/06/28 14:48:27 bodea Exp $ #ifndef __L2TPNS_H__ #define __L2TPNS_H__ @@ -15,7 +15,7 @@ #include #include -#define VERSION "2.1.0" +#define VERSION "2.1.2" // Limits #define MAXTUNNEL 500 // could be up to 65535 @@ -23,6 +23,7 @@ #define MAXTBFS 6000 // Maximum token bucket filters. Might need up to 2 * session. #define RADIUS_SHIFT 6 +#define RADIUS_FDS (1 << RADIUS_SHIFT) #define RADIUS_MASK ((1 << RADIUS_SHIFT) - 1) #define MAXRADIUS (1 << (8 + RADIUS_SHIFT)) @@ -75,6 +76,7 @@ #define ACCT_SHUT_TIME 600 // 1 minute for counters of shutdown sessions #define L2TPPORT 1701 // L2TP port #define RADPORT 1645 // old radius port... +#define DAEPORT 3799 // DAE port #define PKTARP 0x0806 // ARP packet type #define PKTIP 0x0800 // IPv4 packet type #define PKTIPV6 0x86DD // IPv6 packet type @@ -110,7 +112,13 @@ enum { AccessReject, AccountingRequest, AccountingResponse, - AccessChallenge = 11 + AccessChallenge = 11, + DisconnectRequest = 40, + DisconnectACK, + DisconnectNAK, + CoARequest, + CoAACK, + CoANAK }; // Types @@ -455,7 +463,8 @@ typedef struct in_addr_t radiusserver[MAXRADSERVER]; // radius servers uint16_t radiusport[MAXRADSERVER]; // radius base ports uint8_t numradiusservers; // radius server count - short num_radfds; // Number of radius filehandles allocated + + uint16_t radius_dae_port; // local port for radius dae char radius_authtypes_s[32]; // list of valid authentication types (chap, pap) in order of preference int radius_authtypes; @@ -611,6 +620,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); // l2tpns.c @@ -624,11 +634,13 @@ 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 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); void sendipcp(tunnelidt t, sessionidt s); void processudp(uint8_t *buf, int len, struct sockaddr_in *addr); void snoop_send_packet(char *packet, uint16_t size, in_addr_t destination, uint16_t port); +int find_filter(char const *name, size_t len); int ip_filter(uint8_t *buf, int len, uint8_t filter); int cmd_show_ipcache(struct cli_def *cli, char *command, char **argv, int argc); int cmd_show_hist_idle(struct cli_def *cli, char *command, char **argv, int argc); @@ -672,12 +684,12 @@ if (count++ < max) { \ void *array[20]; \ char **strings; \ int size, i; \ - LOG(0, 0, t, "Backtrace follows"); \ + LOG(0, 0, t, "Backtrace follows:\n"); \ size = backtrace(array, 10); \ strings = backtrace_symbols(array, size); \ if (strings) for (i = 0; i < size; i++) \ { \ - LOG(0, 0, t, "%s\n", strings[i]); \ + LOG(0, 0, t, " %s\n", strings[i]); \ } \ free(strings); \ } @@ -692,7 +704,21 @@ extern struct Tstats *_statistics; extern in_addr_t my_address; extern int tun_write(uint8_t *data, int size); extern int clifd; - +extern int epollfd; + +struct event_data { + enum { + FD_TYPE_CLI, + FD_TYPE_CLUSTER, + FD_TYPE_TUN, + FD_TYPE_UDP, + FD_TYPE_CONTROL, + FD_TYPE_DAE, + FD_TYPE_RADIUS, + FD_TYPE_BGP, + } type; + int index; // for RADIUS, BGP +}; #define TIME (config->current_time)