X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/c34bfa1cfc1b1e10c21defcb045e8dd7cd47d30f..f6dea4dc93aa5204c17c5ca7f5e3566368d6e5dd:/l2tpns.h?ds=sidebyside diff --git a/l2tpns.h b/l2tpns.h index 0220517..dc6d8e6 100644 --- a/l2tpns.h +++ b/l2tpns.h @@ -1,5 +1,5 @@ // L2TPNS Global Stuff -// $Id: l2tpns.h,v 1.26 2004/11/02 04:35:04 bodea Exp $ +// $Id: l2tpns.h,v 1.35 2004/11/16 07:54:32 bodea Exp $ #ifndef __L2TPNS_H__ #define __L2TPNS_H__ @@ -15,7 +15,7 @@ #include #include -#define VERSION "2.0.2" +#define VERSION "2.0.8" // Limits #define MAXTUNNEL 500 // could be up to 65535 @@ -203,16 +203,16 @@ typedef struct sessions } sessiont; -#define SF_IPCP_ACKED (1<<0) // Has this session seen an IPCP Ack? +#define SF_IPCP_ACKED 1 // Has this session seen an IPCP Ack? +#define SF_LCP_ACKED 2 // LCP negotiated typedef struct { u32 cin; u32 cout; } sessioncountt; -#define SESSIONPFC 1 // PFC negotiated flags -#define SESSIONACFC 2 // ACFC negotiated flags -#define SESSIONLCPACK 4 // LCP negotiated +#define SESSIONPFC 1 // PFC negotiated flags +#define SESSIONACFC 2 // ACFC negotiated flags // 168 bytes per tunnel typedef struct tunnels @@ -427,6 +427,7 @@ struct configt int save_state; char accounting_dir[128]; ipt bind_address; + ipt peer_address; int send_garp; // Set to true to garp for vip address on startup int target_uid; @@ -459,18 +460,24 @@ struct configt int cluster_hb_timeout; // How many missed heartbeats trigger an election. #ifdef BGP +#define BGP_NUM_PEERS 2 u16 as_number; - char bgp_peer[2][64]; - u16 bgp_peer_as[2]; + struct { + char name[64]; + u16 as; + int keepalive; + int hold; + } neighbour[BGP_NUM_PEERS]; #endif }; +enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP, MAC }; struct config_descriptt { char *key; int offset; int size; - enum { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IP, MAC } type; + enum config_typet type; }; // arp.c @@ -486,9 +493,8 @@ void processipin(tunnelidt t, sessionidt s, u8 * p, u16 l); void processccp(tunnelidt t, sessionidt s, u8 * p, u16 l); void sendchap(tunnelidt t, sessionidt s); u8 *makeppp(u8 * b, int size, u8 * p, int l, tunnelidt t, sessionidt s, u16 mtype); -u8 *findppp(u8 * b, u8 mtype); void initlcp(tunnelidt t, sessionidt s); -void dumplcp(u8 *p, int l); +void send_ipin(sessionidt s, u8 * buf, int len); // radius.c @@ -501,75 +507,46 @@ void radiusclear(u16 r, sessionidt s); // l2tpns.c -clockt now(void); clockt backoff(u8 try); -void routeset(sessionidt, ipt ip, ipt mask, ipt gw, u8 add); -void inittun(void); -void initudp(void); -void initdata(int optdebug, char *optconfig); -void initippool(); sessionidt sessionbyip(ipt ip); sessionidt sessionbyuser(char *username); void sessionshutdown(sessionidt s, char *reason); -void sessionsendarp(sessionidt s); void send_garp(ipt ip); -void sessionkill(sessionidt s, char *reason); -void control16(controlt * c, u16 avp, u16 val, u8 m); -void control32(controlt * c, u16 avp, u32 val, u8 m); -void controls(controlt * c, u16 avp, char *val, u8 m); -void controlb(controlt * c, u16 avp, char *val, unsigned int len, u8 m); -controlt *controlnew(u16 mtype); -void controlnull(tunnelidt t); -void controladd(controlt * c, tunnelidt t, sessionidt s); void tunnelsend(u8 * buf, u16 l, tunnelidt t); -void tunnelkill(tunnelidt t, char *reason); -void tunnelshutdown(tunnelidt t, char *reason); void sendipcp(tunnelidt t, sessionidt s); -void processipout(u8 * buf, int len); -void processarp(u8 * buf, int len); void processudp(u8 * buf, int len, struct sockaddr_in *addr); -void processtun(u8 * buf, int len); -void processcontrol(u8 * buf, int len, struct sockaddr_in *addr); -int assign_ip_address(sessionidt s); -void free_ip_address(sessionidt s); void snoop_send_packet(char *packet, u16 size, ipt destination, u16 port); -void dump_acct_info(); -void mainloop(void); 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); int cmd_show_hist_open(struct cli_def *cli, char *command, char **argv, int argc); -#define log _log -#ifndef log_hex -#define log_hex(a,b,c,d) do{if (a <= config->debug) _log_hex(a,0,0,0,b,c,d);}while (0) -#endif +#undef LOG +#undef LOG_HEX +#define LOG(D, a, s, t, f, ...) ({ if (D <= config->debug) _log(D, a, s, t, f, ## __VA_ARGS__); }) +#define LOG_HEX(D, t, d, s) ({ if (D <= config->debug) _log_hex(D, t, d, s); }) + void _log(int level, ipt address, sessionidt s, tunnelidt t, const char *format, ...) __attribute__((format (printf, 5, 6))); -void _log_hex(int level, ipt address, sessionidt s, tunnelidt t, const char *title, const char *data, int maxsize); -void build_chap_response(char *challenge, u8 id, u16 challenge_length, char **challenge_response); +void _log_hex(int level, const char *title, const char *data, int maxsize); + int sessionsetup(tunnelidt t, sessionidt s); -int cluster_send_session(int s); -int cluster_send_tunnel(int t); -int cluster_send_goodbye(); -void init_cli(char *hostname); -void cli_do_file(FILE *fh); -void cli_do(int sockfd); -int cli_arg_help(struct cli_def *cli, int cr_ok, char *entry, ...); -#ifdef RINGBUFFER -void ringbuffer_dump(FILE *stream); -#endif -void initplugins(void); int run_plugins(int plugin_type, void *data); -void add_plugin(char *plugin_name); -void remove_plugin(char *plugin_name); -void plugins_done(void); -void tunnelclear(tunnelidt t); -void host_unreachable(ipt destination, u16 id, ipt source, char *packet, int packet_len); -void fix_address_pool(int sid); void rebuild_address_pool(void); -void send_ipin(sessionidt s, u8 * buf, int len); void throttle_session(sessionidt s, int rate_in, int rate_out); int load_session(sessionidt, sessiont *); void become_master(void); // We're the master; kick off any required master initializations. + + +// cli.c +void init_cli(char *hostname); +void cli_do_file(FILE *fh); +void cli_do(int sockfd); +int cli_arg_help(struct cli_def *cli, int cr_ok, char *entry, ...); + + +// icmp.c +void host_unreachable(ipt destination, u16 id, ipt source, char *packet, int packet_len); + + extern tunnelt *tunnel; extern sessiont *session; extern sessioncountt *sess_count; @@ -581,12 +558,12 @@ if (count++ < max) { \ void *array[20]; \ char **strings; \ int size, i; \ - log(0, 0, 0, t, "Backtrace follows"); \ + LOG(0, 0, 0, t, "Backtrace follows"); \ size = backtrace(array, 10); \ strings = backtrace_symbols(array, size); \ if (strings) for (i = 0; i < size; i++) \ { \ - log(0, 0, 0, t, "%s\n", strings[i]); \ + LOG(0, 0, 0, t, "%s\n", strings[i]); \ } \ free(strings); \ }