From e18a6d830a52b796708779b8ae8b1e8fd0d97ff6 Mon Sep 17 00:00:00 2001 From: Radostin Stoyanov Date: Sun, 6 Jan 2019 15:44:27 +0000 Subject: [PATCH] config: Add check_options helper The purpose of this helper function is to perform actions common to different interfaces, after all CRIU options have been parsed. This can be used, for instance, to verify that a specific option was passed to CRIU via CLI, RPC or config file. Signed-off-by: Radostin Stoyanov Acked-by: Adrian Reber Signed-off-by: Andrei Vagin --- criu/config.c | 33 +++++++++++++++++++++++++++++++++ criu/cr-service.c | 5 +++-- criu/crtools.c | 25 +------------------------ criu/include/cr_options.h | 1 + 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/criu/config.c b/criu/config.c index 089a70038..89cc17620 100644 --- a/criu/config.c +++ b/criu/config.c @@ -802,3 +802,36 @@ bad_arg: long_opts[idx].name, optarg); return 1; } + +int check_options() +{ + if (opts.tcp_established_ok) + pr_info("Will dump/restore TCP connections\n"); + if (opts.tcp_skip_in_flight) + pr_info("Will skip in-flight TCP connections\n"); + if (opts.tcp_close) + pr_info("Will drop all TCP connections on restore\n"); + if (opts.link_remap_ok) + pr_info("Will allow link remaps on FS\n"); + if (opts.weak_sysctls) + pr_info("Will skip non-existant sysctls on restore\n"); + + if (opts.deprecated_ok) + pr_info("Turn deprecated stuff ON\n"); + else if (getenv("CRIU_DEPRECATED")) { + pr_info("Turn deprecated stuff ON via env\n"); + opts.deprecated_ok = true; + } + + if (!opts.restore_detach && opts.restore_sibling) { + pr_err("--restore-sibling only makes sense with --restore-detach\n"); + return 1; + } + + if (check_namespace_opts()) { + pr_err("Error: namespace flags conflict\n"); + return 1; + } + + return 0; +} diff --git a/criu/cr-service.c b/criu/cr-service.c index 37cc6f7df..231a37f30 100644 --- a/criu/cr-service.c +++ b/criu/cr-service.c @@ -639,8 +639,6 @@ static int setup_opts_from_req(int sk, CriuOpts *req) if (req->orphan_pts_master) opts.orphan_pts_master = true; - if (check_namespace_opts()) - goto err; /* Evaluate additional configuration file a second time to overwrite * all RPC settings. */ @@ -650,7 +648,10 @@ static int setup_opts_from_req(int sk, CriuOpts *req) if (i) goto err; } + log_set_loglevel(opts.log_level); + if (check_options()) + goto err; return 0; diff --git a/criu/crtools.c b/criu/crtools.c index a0077e5ab..0a1483b06 100644 --- a/criu/crtools.c +++ b/criu/crtools.c @@ -110,31 +110,8 @@ int main(int argc, char *argv[], char *envp[]) return cr_service_work(atoi(argv[2])); } - if (opts.deprecated_ok) - pr_msg("Turn deprecated stuff ON\n"); - if (opts.tcp_skip_in_flight) - pr_msg("Will skip in-flight TCP connections\n"); - if (opts.tcp_established_ok) - pr_info("Will dump TCP connections\n"); - if (opts.link_remap_ok) - pr_info("Will allow link remaps on FS\n"); - if (opts.weak_sysctls) - pr_msg("Will skip non-existant sysctls on restore\n"); - - if (getenv("CRIU_DEPRECATED")) { - pr_msg("Turn deprecated stuff ON via env\n"); - opts.deprecated_ok = true; - } - - if (check_namespace_opts()) { - pr_msg("Error: namespace flags conflict\n"); + if (check_options()) return 1; - } - - if (!opts.restore_detach && opts.restore_sibling) { - pr_msg("--restore-sibling only makes sense with --restore-detach\n"); - return 1; - } if (opts.imgs_dir == NULL) SET_CHAR_OPTS(imgs_dir, "."); diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h index c722e3ae2..9f152fac0 100644 --- a/criu/include/cr_options.h +++ b/criu/include/cr_options.h @@ -144,6 +144,7 @@ extern struct cr_options opts; char *rpc_cfg_file; extern int parse_options(int argc, char **argv, bool *usage_error, bool *has_exec_cmd, int state); +extern int check_options(); extern void init_opts(); #endif /* __CR_OPTIONS_H__ */