- unlink(config->pid_file);
-
- /* kill CLI children */
- signal(SIGTERM, SIG_IGN);
- kill(0, SIGTERM);
- return 0;
-}
-
-static void sighup_handler(int sig)
-{
- if (log_stream && log_stream != stderr)
- {
- fclose(log_stream);
- log_stream = NULL;
- }
-
- read_config_file();
-}
-
-static void sigalrm_handler(int sig)
-{
- // Log current traffic stats
-
- snprintf(config->bandwidth, sizeof(config->bandwidth),
- "UDP-ETH:%1.0f/%1.0f ETH-UDP:%1.0f/%1.0f TOTAL:%0.1f IN:%u OUT:%u",
- (udp_rx / 1024.0 / 1024.0 * 8),
- (eth_tx / 1024.0 / 1024.0 * 8),
- (eth_rx / 1024.0 / 1024.0 * 8),
- (udp_tx / 1024.0 / 1024.0 * 8),
- ((udp_tx + udp_rx + eth_tx + eth_rx) / 1024.0 / 1024.0 * 8),
- udp_rx_pkt, eth_rx_pkt);
-
- udp_tx = udp_rx = 0;
- udp_rx_pkt = eth_rx_pkt = 0;
- eth_tx = eth_rx = 0;
-
- if (config->dump_speed)
- printf("%s\n", config->bandwidth);
-
- // Update the internal time counter
- time(&time_now);
- strftime(time_now_string, sizeof(time_now_string), "%Y-%m-%d %H:%M:%S", localtime(&time_now));
- alarm(1);
-
- {
- // Run timer hooks
- struct param_timer p = { time_now };
- run_plugins(PLUGIN_TIMER, &p);
- }
-
-}
-
-static void sigterm_handler(int sig)
-{
- LOG(1, 0, 0, 0, "Shutting down cleanly\n");
- if (config->save_state)
- dump_state();
-
- main_quit++;
-}
-
-static void sigquit_handler(int sig)
-{
- int i;
-
- LOG(1, 0, 0, 0, "Shutting down without saving sessions\n");
- for (i = 1; i < MAXSESSION; i++)
- {
- if (session[i].opened)
- sessionkill(i, "L2TPNS Closing");
- }
- for (i = 1; i < MAXTUNNEL; i++)
- {
- if (tunnel[i].ip || tunnel[i].state)
- tunnelshutdown(i, "L2TPNS Closing");
- }
-
- main_quit++;
-}
-
-static void sigchild_handler(int sig)
-{
- while (waitpid(-1, NULL, WNOHANG) > 0)
- ;
-}
-
-static void read_state()
-{
- struct stat sb;
- int i;
- ippoolt itmp;
- FILE *f;
- char magic[sizeof(DUMP_MAGIC) - 1];
- u32 buf[2];
-
- if (!config->save_state)
- {
- unlink(STATEFILE);
- return ;
- }
-
- if (stat(STATEFILE, &sb) < 0)
- {
- unlink(STATEFILE);
- return ;
- }
-
- if (sb.st_mtime < (time(NULL) - 60))
- {
- LOG(0, 0, 0, 0, "State file is too old to read, ignoring\n");
- unlink(STATEFILE);
- return ;
- }