always call filter_session on CoA
[l2tpns.git] / l2tpns.h
index 523cf4d..03619a4 100644 (file)
--- a/l2tpns.h
+++ b/l2tpns.h
@@ -1,5 +1,5 @@
 // L2TPNS Global Stuff
-// $Id: l2tpns.h,v 1.76 2005/06/04 15:42:36 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 <sys/types.h>
 #include <libcli.h>
 
-#define VERSION        "2.1.0"
+#define VERSION        "2.1.2"
 
 // Limits
 #define MAXTUNNEL      500             // could be up to 65535
@@ -76,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
@@ -111,7 +112,13 @@ enum {
        AccessReject,
        AccountingRequest,
        AccountingResponse,
-       AccessChallenge = 11
+       AccessChallenge = 11,
+       DisconnectRequest = 40,
+       DisconnectACK,
+       DisconnectNAK,
+       CoARequest,
+       CoAACK,
+       CoANAK
 };
 
 // Types
@@ -457,6 +464,8 @@ typedef struct
        uint16_t        radiusport[MAXRADSERVER];       // radius base ports
        uint8_t         numradiusservers;               // radius server count
 
+       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;
        int             radius_authprefer;
@@ -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); \
 }
@@ -696,11 +708,12 @@ extern int epollfd;
 
 struct event_data {
        enum {
-               FD_TYPE_CONTROL,
                FD_TYPE_CLI,
-               FD_TYPE_UDP,
-               FD_TYPE_TUN,
                FD_TYPE_CLUSTER,
+               FD_TYPE_TUN,
+               FD_TYPE_UDP,
+               FD_TYPE_CONTROL,
+               FD_TYPE_DAE,
                FD_TYPE_RADIUS,
                FD_TYPE_BGP,
        } type;