From 3d9849649ec617b45a57a50c93244c13ea8244e0 Mon Sep 17 00:00:00 2001 From: Arturo Borrero Gonzalez Date: Tue, 9 May 2017 09:41:15 +0200 Subject: conntrackd: request resync at startup If a node goes to live, ask the other for resync at startup. This has to be done usually by hand, but I guess is an operation common enough to add some bits to ease people life here. Signed-off-by: Arturo Borrero Gonzalez Signed-off-by: Pablo Neira Ayuso --- src/main.c | 2 ++ src/read_config_lex.l | 1 + src/read_config_yy.y | 14 +++++++++++++- src/resync.c | 8 ++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 1a57cf8..fb20f1d 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,7 @@ #include "log.h" #include "helper.h" #include "systemd.h" +#include "resync.h" #include #include @@ -431,6 +432,7 @@ int main(int argc, char *argv[]) dlog(LOG_NOTICE, "-- starting in console mode --"); sd_ct_init(); + resync_at_startup(); /* * run main process diff --git a/src/read_config_lex.l b/src/read_config_lex.l index a378269..120bc00 100644 --- a/src/read_config_lex.l +++ b/src/read_config_lex.l @@ -136,6 +136,7 @@ notrack [N|n][O|o][T|t][R|r][A|a][C|c][K|k] "ExpectMax" { return T_HELPER_EXPECT_MAX; } "ExpectTimeout" { return T_HELPER_EXPECT_TIMEOUT; } "Systemd" { return T_SYSTEMD; } +"StartupResync" { return T_STARTUP_RESYNC; } {is_on} { return T_ON; } {is_off} { return T_OFF; } diff --git a/src/read_config_yy.y b/src/read_config_yy.y index 2c08d4e..3bb7c5f 100644 --- a/src/read_config_yy.y +++ b/src/read_config_yy.y @@ -81,7 +81,7 @@ enum { %token T_OPTIONS T_TCP_WINDOW_TRACKING T_EXPECT_SYNC %token T_HELPER T_HELPER_QUEUE_NUM T_HELPER_QUEUE_LEN T_HELPER_POLICY %token T_HELPER_EXPECT_TIMEOUT T_HELPER_EXPECT_MAX -%token T_SYSTEMD +%token T_SYSTEMD T_STARTUP_RESYNC %token T_IP T_PATH_VAL %token T_NUMBER @@ -768,6 +768,7 @@ sync_mode_ftfw_line: resend_queue_size | purge | window_size | disable_external_cache + | startup_resync ; sync_mode_notrack_list: @@ -777,6 +778,7 @@ sync_mode_notrack_line: timeout | purge | disable_internal_cache | disable_external_cache + | startup_resync ; disable_internal_cache: T_DISABLE_INTERNAL_CACHE T_ON @@ -804,6 +806,16 @@ resend_queue_size: T_RESEND_QUEUE_SIZE T_NUMBER conf.resend_queue_size = $2; }; +startup_resync: T_STARTUP_RESYNC T_ON +{ + conf.startup_resync = 1; +}; + +startup_resync: T_STARTUP_RESYNC T_OFF +{ + conf.startup_resync = 0; +}; + window_size: T_WINDOWSIZE T_NUMBER { conf.window_size = $2; diff --git a/src/resync.c b/src/resync.c index dbb2b6f..5394245 100644 --- a/src/resync.c +++ b/src/resync.c @@ -38,3 +38,11 @@ void resync_send(int (*do_cache_to_tx)(void *data1, void *data2)) cache_iterate(STATE(mode)->internal->exp.data, NULL, do_cache_to_tx); } + +void resync_at_startup(void) +{ + if (CONFIG(startup_resync) == 0) + return; + + resync_req(); +} -- cgit v1.2.3