2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-29 05:18:00 +00:00

crtools: do a few minor cleanups

Signed-off-by: Andrei Vagin <avagin@gmail.com>
This commit is contained in:
Andrei Vagin 2025-05-20 14:47:55 +00:00 committed by Radostin Stoyanov
parent 3cbb864ae0
commit 6eb5bb06bc

View File

@ -74,40 +74,55 @@ static int image_dir_mode(void)
return -1; return -1;
} }
static int parse_criu_mode(char *mode, char *subcommand) struct {
{ char *cmd;
if (!strcmp(mode, "dump")) int mode;
opts.mode = CR_DUMP; } commands[] = {
else if (!strcmp(mode, "pre-dump")) { "dump", CR_DUMP },
opts.mode = CR_PRE_DUMP; { "pre-dump", CR_PRE_DUMP },
else if (!strcmp(mode, "restore")) { "restore", CR_RESTORE },
opts.mode = CR_RESTORE; { "lazy-pages", CR_LAZY_PAGES },
else if (!strcmp(mode, "lazy-pages")) { "check", CR_CHECK },
opts.mode = CR_LAZY_PAGES; { "page-server", CR_PAGE_SERVER },
else if (!strcmp(mode, "check")) { "service", CR_SERVICE },
opts.mode = CR_CHECK; { "swrk", CR_SWRK },
else if (!strcmp(mode, "page-server")) { "dedup", CR_DEDUP },
opts.mode = CR_PAGE_SERVER; { "exec", CR_EXEC_DEPRECATED },
else if (!strcmp(mode, "service")) { "show", CR_SHOW_DEPRECATED },
opts.mode = CR_SERVICE; };
else if (!strcmp(mode, "swrk"))
opts.mode = CR_SWRK;
else if (!strcmp(mode, "dedup"))
opts.mode = CR_DEDUP;
else if (!strcmp(mode, "cpuinfo") && subcommand == NULL)
return -2;
else if (!strcmp(mode, "cpuinfo") && !strcmp(subcommand, "dump"))
opts.mode = CR_CPUINFO_DUMP;
else if (!strcmp(mode, "cpuinfo") && !strcmp(subcommand, "check"))
opts.mode = CR_CPUINFO_CHECK;
else if (!strcmp(mode, "exec"))
opts.mode = CR_EXEC_DEPRECATED;
else if (!strcmp(mode, "show"))
opts.mode = CR_SHOW_DEPRECATED;
else
return -1;
return 0; static int parse_criu_mode(int argc, char **argv, int *optind)
{
char *cmd = argv[*optind];
bool has_sub_command = (argc - *optind) > 1;
char *subcommand = has_sub_command ? argv[*optind + 1] : NULL;
int i;
for (i = 0; i < ARRAY_SIZE(commands); i++) {
if (strcmp(cmd, commands[i].cmd))
continue;
opts.mode = commands[i].mode;
return 0;
}
if (!strcmp(cmd, "cpuinfo")) {
if (subcommand == NULL) {
pr_err("cpuinfo requires an action: dump or check\n");
return -1;
}
if (!strcmp(subcommand, "dump"))
opts.mode = CR_CPUINFO_DUMP;
else if (!strcmp(subcommand, "check"))
opts.mode = CR_CPUINFO_CHECK;
else {
pr_err("unknown cpuinfo sub-command: %s\n", subcommand);
return -1;
}
(*optind)++;
return 0;
}
pr_err("unknown command: %s\n", argv[*optind]);
return -1;
} }
int main(int argc, char *argv[], char *envp[]) int main(int argc, char *argv[], char *envp[])
@ -117,7 +132,7 @@ int main(int argc, char *argv[], char *envp[])
bool has_exec_cmd = false; bool has_exec_cmd = false;
bool has_sub_command; bool has_sub_command;
int state = PARSING_GLOBAL_CONF; int state = PARSING_GLOBAL_CONF;
char *subcommand; char *cmd;
BUILD_BUG_ON(CTL_32 != SYSCTL_TYPE__CTL_32); BUILD_BUG_ON(CTL_32 != SYSCTL_TYPE__CTL_32);
BUILD_BUG_ON(__CTL_STR != SYSCTL_TYPE__CTL_STR); BUILD_BUG_ON(__CTL_STR != SYSCTL_TYPE__CTL_STR);
@ -168,16 +183,11 @@ int main(int argc, char *argv[], char *envp[])
return 1; return 1;
} }
has_sub_command = (argc - optind) > 1; cmd = argv[optind];
subcommand = has_sub_command ? argv[optind + 1] : NULL; ret = parse_criu_mode(argc, argv, &optind);
ret = parse_criu_mode(argv[optind], subcommand); if (ret)
if (ret == -1) {
pr_err("unknown command: %s\n", argv[optind]);
goto usage; goto usage;
} else if (ret == -2) {
pr_err("cpuinfo requires an action: dump or check\n");
goto usage;
}
/* /*
* util_init initializes criu_run_id and compel_run_id so that sockets * util_init initializes criu_run_id and compel_run_id so that sockets
* are generated with an unique name identifying the specific process * are generated with an unique name identifying the specific process
@ -232,14 +242,13 @@ int main(int argc, char *argv[], char *envp[])
return 1; return 1;
memcpy(opts.exec_cmd, &argv[optind + 1], (argc - optind - 1) * sizeof(char *)); memcpy(opts.exec_cmd, &argv[optind + 1], (argc - optind - 1) * sizeof(char *));
opts.exec_cmd[argc - optind - 1] = NULL; opts.exec_cmd[argc - optind - 1] = NULL;
} else if (opts.mode != CR_CPUINFO_DUMP && opts.mode != CR_CPUINFO_CHECK && has_sub_command) { } else if (has_sub_command) {
/* No subcommands except for cpuinfo and restore --exec-cmd */ pr_err("excessive parameter%s for command %s\n", (argc - optind) > 2 ? "s" : "", cmd);
pr_err("excessive parameter%s for command %s\n", (argc - optind) > 2 ? "s" : "", argv[optind]);
goto usage; goto usage;
} }
if (opts.stream && image_dir_mode() == -1) { if (opts.stream && image_dir_mode() == -1) {
pr_err("--stream cannot be used with the %s command\n", argv[optind]); pr_err("--stream cannot be used with the %s command\n", cmd);
goto usage; goto usage;
} }
@ -290,14 +299,13 @@ int main(int argc, char *argv[], char *envp[])
if (opts.img_parent) if (opts.img_parent)
pr_info("Will do snapshot from %s\n", opts.img_parent); pr_info("Will do snapshot from %s\n", opts.img_parent);
if (opts.mode == CR_DUMP) { switch (opts.mode) {
case CR_DUMP:
if (!opts.tree_id) if (!opts.tree_id)
goto opt_pid_missing; goto opt_pid_missing;
return cr_dump_tasks(opts.tree_id); return cr_dump_tasks(opts.tree_id);
} case CR_PRE_DUMP:
if (opts.mode == CR_PRE_DUMP) {
if (!opts.tree_id) if (!opts.tree_id)
goto opt_pid_missing; goto opt_pid_missing;
@ -307,9 +315,7 @@ int main(int argc, char *argv[], char *envp[])
} }
return cr_pre_dump_tasks(opts.tree_id) != 0; return cr_pre_dump_tasks(opts.tree_id) != 0;
} case CR_RESTORE:
if (opts.mode == CR_RESTORE) {
if (opts.tree_id) if (opts.tree_id)
pr_warn("Using -t with criu restore is obsoleted\n"); pr_warn("Using -t with criu restore is obsoleted\n");
@ -322,43 +328,41 @@ int main(int argc, char *argv[], char *envp[])
} }
return ret != 0; return ret != 0;
}
if (opts.mode == CR_LAZY_PAGES) case CR_LAZY_PAGES:
return cr_lazy_pages(opts.daemon_mode) != 0; return cr_lazy_pages(opts.daemon_mode) != 0;
if (opts.mode == CR_CHECK) case CR_CHECK:
return cr_check() != 0; return cr_check() != 0;
if (opts.mode == CR_PAGE_SERVER) case CR_PAGE_SERVER:
return cr_page_server(opts.daemon_mode, false, -1) != 0; return cr_page_server(opts.daemon_mode, false, -1) != 0;
if (opts.mode == CR_SERVICE) case CR_SERVICE:
return cr_service(opts.daemon_mode); return cr_service(opts.daemon_mode);
if (opts.mode == CR_DEDUP) case CR_DEDUP:
return cr_dedup() != 0; return cr_dedup() != 0;
if (opts.mode == CR_CPUINFO_DUMP) { case CR_CPUINFO_DUMP:
return cpuinfo_dump(); return cpuinfo_dump();
}
if (opts.mode == CR_CPUINFO_CHECK) { case CR_CPUINFO_CHECK:
return cpuinfo_check(); return cpuinfo_check();
}
if (opts.mode == CR_EXEC_DEPRECATED) { case CR_EXEC_DEPRECATED:
pr_err("The \"exec\" action is deprecated by the Compel library.\n"); pr_err("The \"exec\" action is deprecated by the Compel library.\n");
return -1; return -1;
}
if (opts.mode == CR_SHOW_DEPRECATED) { case CR_SHOW_DEPRECATED:
pr_err("The \"show\" action is deprecated by the CRIT utility.\n"); pr_err("The \"show\" action is deprecated by the CRIT utility.\n");
pr_err("To view an image use the \"crit decode -i $name --pretty\" command.\n"); pr_err("To view an image use the \"crit decode -i $name --pretty\" command.\n");
return -1; return -1;
}
pr_err("unknown command: %s\n", argv[optind]); case CR_UNSET:
default:
pr_err("unknown command: %s\n", cmd);
}
usage: usage:
pr_msg("\n" pr_msg("\n"
"Usage:\n" "Usage:\n"