diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2009-06-19 23:49:34 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2009-06-19 23:49:34 +0200 |
commit | bf1aec970e9ac0600266fe7a045847a62f18ac3b (patch) | |
tree | 4b6a27829ddded655066f135a8e23da598e1d59a /conf | |
parent | 789772ed4586213d6a7fbb867b9296a01ce1b9c0 (diff) | |
download | bird-bf1aec970e9ac0600266fe7a045847a62f18ac3b.tar bird-bf1aec970e9ac0600266fe7a045847a62f18ac3b.zip |
Adds support for soft reconfiguration.
Diffstat (limited to 'conf')
-rw-r--r-- | conf/conf.c | 15 | ||||
-rw-r--r-- | conf/conf.h | 4 |
2 files changed, 11 insertions, 8 deletions
diff --git a/conf/conf.c b/conf/conf.c index 71e81b5..710d5c2 100644 --- a/conf/conf.c +++ b/conf/conf.c @@ -189,7 +189,7 @@ global_commit(struct config *new, struct config *old) } static int -config_do_commit(struct config *c) +config_do_commit(struct config *c, int type) { int force_restart, nobs; @@ -205,7 +205,7 @@ config_do_commit(struct config *c) DBG("rt_commit\n"); rt_commit(c, old_config); DBG("protos_commit\n"); - protos_commit(c, old_config, force_restart); + protos_commit(c, old_config, force_restart, type); new_config = NULL; /* Just to be sure nobody uses that now */ if (old_config) nobs = --old_config->obstacle_count; @@ -236,7 +236,7 @@ config_done(void *unused UNUSED) c = future_config; future_config = NULL; log(L_INFO "Switching to queued configuration..."); - if (!config_do_commit(c)) + if (!config_do_commit(c, RECONFIG_HARD)) break; } } @@ -244,6 +244,7 @@ config_done(void *unused UNUSED) /** * config_commit - commit a configuration * @c: new configuration + * @type: type of reconfiguration (RECONFIG_SOFT or RECONFIG_HARD) * * When a configuration is parsed and prepared for use, the * config_commit() function starts the process of reconfiguration. @@ -263,11 +264,11 @@ config_done(void *unused UNUSED) * are accepted. */ int -config_commit(struct config *c) +config_commit(struct config *c, int type) { if (!config) /* First-time configuration */ { - config_do_commit(c); + config_do_commit(c, RECONFIG_HARD); return CONF_DONE; } if (old_config) /* Reconfiguration already in progress */ @@ -288,7 +289,7 @@ config_commit(struct config *c) future_config = c; return CONF_QUEUED; } - if (config_do_commit(c)) + if (config_do_commit(c, type)) { config_done(NULL); return CONF_DONE; @@ -321,7 +322,7 @@ order_shutdown(void) init_list(&c->tables); c->shutdown = 1; shutting_down = 1; - config_commit(c); + config_commit(c, RECONFIG_HARD); shutting_down = 2; } diff --git a/conf/conf.h b/conf/conf.h index ef27f3f..8c2d549 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -50,7 +50,9 @@ struct config *config_alloc(byte *name); int config_parse(struct config *); int cli_parse(struct config *); void config_free(struct config *); -int config_commit(struct config *); +int config_commit(struct config *, int type); +#define RECONFIG_HARD 0 +#define RECONFIG_SOFT 1 void cf_error(char *msg, ...) NORET; void config_add_obstacle(struct config *); void config_del_obstacle(struct config *); |