From 3cc87c8471668009b3426013fded8c6ec5a382da Mon Sep 17 00:00:00 2001 From: Kevin Webb Date: Tue, 26 Jan 2010 21:40:14 +0000 Subject: [PATCH] Fix to make ulogd daemonize properly with drl. --- drl/raterouter.h | 2 +- drl/ulogd_DRL.c | 71 ++++++++++++++++++++++++++---------------------- ulogd.c | 21 +++++++------- 3 files changed, 50 insertions(+), 44 deletions(-) diff --git a/drl/raterouter.h b/drl/raterouter.h index 5e89e89..06f8069 100644 --- a/drl/raterouter.h +++ b/drl/raterouter.h @@ -60,7 +60,7 @@ enum failure_behaviors { PANIC = 1, QUORUM = 2 }; * * This is used for FPS only. See estimate.c */ -#define FLOW_START_THRESHOLD (6000) +#define FLOW_START_THRESHOLD (10000) #define CLOSE_ENOUGH (0.90) diff --git a/drl/ulogd_DRL.c b/drl/ulogd_DRL.c index 97f24bc..170ab43 100644 --- a/drl/ulogd_DRL.c +++ b/drl/ulogd_DRL.c @@ -1735,32 +1735,6 @@ static void reconfig() { pthread_rwlock_unlock(&limiter.limiter_lock); } -static ulog_output_t drl_op = { - .name = "drl", - .output = &_output_drl, - .signal = NULL, /* This appears to be broken. Using my own handler. */ - .init = NULL, - .fini = NULL, -}; - -/* Tests the amount of time it takes to call reconfig(). */ -static void time_reconfig(int iterations) { - struct timeval start, end; - int i; - - gettimeofday(&start, NULL); - for (i = 0; i < iterations; ++i) { - reconfig(); - } - gettimeofday(&end, NULL); - - printf("%d reconfigs() took %d seconds and %d microseconds.\n", - iterations, end.tv_sec - start.tv_sec, end.tv_usec - start.tv_usec); - exit(0); - - // Seems to take about 85ms / iteration -} - static int stop_enforcement(drl_instance_t *instance) { char cmd[300]; int i; @@ -1839,13 +1813,9 @@ static void *signal_thread_func(void *args) { break; } } - } -/* register output plugin with ulogd */ -static void _drl_reg_op(void) -{ - ulog_output_t *op = &drl_op; +static int drl_plugin_init() { sigset_t signal_mask; sigemptyset(&signal_mask); @@ -1868,8 +1838,6 @@ static void _drl_reg_op(void) exit(EXIT_FAILURE); } - register_output(op); - /* start up the thread that will periodically estimate the * local rate and set the local limits * see estimate.c @@ -1886,6 +1854,43 @@ static void _drl_reg_op(void) printlog(LOG_CRITICAL, "--Switching enforcement on.--\n"); pthread_rwlock_unlock(&limiter.limiter_lock); } + + return 0; +} + +static ulog_output_t drl_op = { + .name = "drl", + .output = &_output_drl, + .signal = NULL, /* This appears to be broken. Using my own handler. */ + .init = &drl_plugin_init, + .fini = NULL, +}; + +#if 0 +/* Tests the amount of time it takes to call reconfig(). */ +static void time_reconfig(int iterations) { + struct timeval start, end; + int i; + + gettimeofday(&start, NULL); + for (i = 0; i < iterations; ++i) { + reconfig(); + } + gettimeofday(&end, NULL); + + printf("%d reconfigs() took %d seconds and %d microseconds.\n", + iterations, end.tv_sec - start.tv_sec, end.tv_usec - start.tv_usec); + exit(0); + + // Seems to take about 85ms / iteration +} +#endif + +/* register output plugin with ulogd */ +static void _drl_reg_op(void) +{ + ulog_output_t *op = &drl_op; + register_output(op); } void _init(void) diff --git a/ulogd.c b/ulogd.c index 9b998a9..4553d4d 100644 --- a/ulogd.c +++ b/ulogd.c @@ -769,6 +769,17 @@ int main(int argc, char* argv[]) } } + if (daemonize){ + if (fork()) { + exit(0); + } + if (logfile != stdout) + fclose(stdout); + fclose(stderr); + fclose(stdin); + setsid(); + } + logfile_open(logf_ce.u.string); for (p = ulogd_outputs; p; p = p->next) { @@ -781,16 +792,6 @@ int main(int argc, char* argv[]) interh_dump(); keyh_dump(); #endif - if (daemonize){ - if (fork()) { - exit(0); - } - if (logfile != stdout) - fclose(stdout); - fclose(stderr); - fclose(stdin); - setsid(); - } /* send SIGINT to the term handler, since they hit CTRL-C */ signal(SIGINT, &sigterm_handler); -- 2.43.0