X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/aa750c5e057eda0b37c9e9a824dc2c23a9d09490..39f5a61eb8fe16979cfa07e2f5c52a36b24e7ebb:/l2tpns.c diff --git a/l2tpns.c b/l2tpns.c index 688cdc0..3fc7f82 100644 --- a/l2tpns.c +++ b/l2tpns.c @@ -4,7 +4,7 @@ // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced // vim: sw=8 ts=8 -char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.28 2004-09-20 23:34:35 fred_nerk Exp $"; +char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.31 2004-10-25 15:07:51 bodea Exp $"; #include #include @@ -2180,8 +2180,7 @@ int regular_cleanups(void) if (++count >= MAX_ACTIONS) break; } } - - if (config->accounting_dir && next_acct <= TIME) + if (*config->accounting_dir && next_acct <= TIME) { // Dump accounting data next_acct = TIME + ACCT_TIME; @@ -2459,55 +2458,56 @@ void mainloop(void) } // Init data structures -void initdata(void) +void initdata(int optdebug, char *optconfig) { int i; char *p; - if ((_statistics = shared_malloc(sizeof(struct Tstats))) == MAP_FAILED) + if (!(_statistics = shared_malloc(sizeof(struct Tstats)))) { log(0, 0, 0, 0, "Error doing malloc for _statistics: %s\n", strerror(errno)); exit(1); } - if ((config = shared_malloc(sizeof(struct configt))) == MAP_FAILED) + if (!(config = shared_malloc(sizeof(struct configt)))) { log(0, 0, 0, 0, "Error doing malloc for configuration: %s\n", strerror(errno)); exit(1); } memset(config, 0, sizeof(struct configt)); time(&config->start_time); - strncpy(config->config_file, CONFIGFILE, sizeof(config->config_file) - 1); - if ((tunnel = shared_malloc(sizeof(tunnelt) * MAXTUNNEL)) == MAP_FAILED); + config->debug = optdebug; + strncpy(config->config_file, optconfig, strlen(optconfig)); + if (!(tunnel = shared_malloc(sizeof(tunnelt) * MAXTUNNEL))) { log(0, 0, 0, 0, "Error doing malloc for tunnels: %s\n", strerror(errno)); exit(1); } - if ((session = shared_malloc(sizeof(sessiont) * MAXSESSION)) == MAP_FAILED) + if (!(session = shared_malloc(sizeof(sessiont) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for sessions: %s\n", strerror(errno)); exit(1); } - if ((sess_count = shared_malloc(sizeof(sessioncountt) * MAXSESSION)) == MAP_FAILED) + if (!(sess_count = shared_malloc(sizeof(sessioncountt) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for sessions_count: %s\n", strerror(errno)); exit(1); } - if ((radius = shared_malloc(sizeof(radiust) * MAXRADIUS)) == MAP_FAILED) + if (!(radius = shared_malloc(sizeof(radiust) * MAXRADIUS))) { log(0, 0, 0, 0, "Error doing malloc for radius: %s\n", strerror(errno)); exit(1); } - if ((ip_address_pool = shared_malloc(sizeof(ippoolt) * MAXIPPOOL)) == MAP_FAILED) + if (!(ip_address_pool = shared_malloc(sizeof(ippoolt) * MAXIPPOOL))) { log(0, 0, 0, 0, "Error doing malloc for ip_address_pool: %s\n", strerror(errno)); exit(1); } #ifdef RINGBUFFER - if ((ringbuffer = shared_malloc(sizeof(struct Tringbuffer))) == MAP_FAILED) + if (!(ringbuffer = shared_malloc(sizeof(struct Tringbuffer)))) { log(0, 0, 0, 0, "Error doing malloc for ringbuffer: %s\n", strerror(errno)); exit(1); @@ -2515,16 +2515,14 @@ void initdata(void) memset(ringbuffer, 0, sizeof(struct Tringbuffer)); #endif - if ((cli_session_actions = shared_malloc(sizeof(struct cli_session_actions) * MAXSESSION)) - == MAP_FAILED) + if (!(cli_session_actions = shared_malloc(sizeof(struct cli_session_actions) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for cli session actions: %s\n", strerror(errno)); exit(1); } memset(cli_session_actions, 0, sizeof(struct cli_session_actions) * MAXSESSION); - if ((cli_tunnel_actions = shared_malloc(sizeof(struct cli_tunnel_actions) * MAXSESSION)) - == MAP_FAILED) + if (!(cli_tunnel_actions = shared_malloc(sizeof(struct cli_tunnel_actions) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for cli tunnel actions: %s\n", strerror(errno)); exit(1); @@ -2557,7 +2555,7 @@ void initdata(void) _statistics->start_time = _statistics->last_reset = time(NULL); #ifdef BGP - if ((bgp_peers = shared_malloc(sizeof(struct bgp_peer) * BGP_NUM_PEERS)) == MAP_FAILED) + if (!(bgp_peers = shared_malloc(sizeof(struct bgp_peer) * BGP_NUM_PEERS))) { log(0, 0, 0, 0, "Error doing malloc for bgp: %s\n", strerror(errno)); exit(1); @@ -2909,13 +2907,14 @@ int main(int argc, char *argv[]) { int o; int optdebug = 0; + char *optconfig = CONFIGFILE; _program_name = strdup(argv[0]); time(&basetime); // start clock // scan args - while ((o = getopt(argc, argv, "vc:h:a:")) >= 0) + while ((o = getopt(argc, argv, "dvc:h:")) >= 0) { switch (o) { @@ -2927,10 +2926,12 @@ int main(int argc, char *argv[]) case 'v': optdebug++; break; + case 'c': + optconfig = optarg; + break; case 'h': snprintf(hostname, sizeof(hostname), "%s", optarg); break; - case '?': default: printf("Args are:\n" "\t-d\tDetach from terminal\n" @@ -2952,9 +2953,7 @@ int main(int argc, char *argv[]) initiptables(); initplugins(); - initdata(); - - config->debug = optdebug; + initdata(optdebug, optconfig); init_tbf(); init_cli(); @@ -3529,7 +3528,6 @@ int sessionsetup(tunnelidt t, sessionidt s) CSTAT(call_sessionsetup); - log(3, session[s].ip, s, t, "Doing session setup for session\n"); if (!session[s].ip || session[s].ip == 0xFFFFFFFE) @@ -3539,7 +3537,11 @@ int sessionsetup(tunnelidt t, sessionidt s) log(3, 0, s, t, " No IP allocated. Assigned %s from pool\n", inet_toa(htonl(session[s].ip))); else + { log(0, 0, s, t, " No IP allocated. The IP address pool is FULL!\n"); + sessionshutdown(s, "No IP addresses available"); + return 0; + } }