mirror of
https://passt.top/passt
synced 2025-06-01 13:55:38 +02:00
conf: Move mode detection into helper function
One of the first things we need to do is determine if we're in passt mode or pasta mode. Currently this is open-coded in main(), by examining argv[0]. We want to complexify this a bit in future to cover vhost-user mode as well. Prepare for this, by moving the mode detection into a new conf_mode() function. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
bb00a0499f
commit
4b17d042c7
3 changed files with 29 additions and 12 deletions
26
conf.c
26
conf.c
|
@ -991,6 +991,32 @@ pasta_opts:
|
|||
_exit(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* conf_mode() - Determine passt/pasta's operating mode from command line
|
||||
* @argc: Argument count
|
||||
* @argv: Command line arguments
|
||||
*
|
||||
* Return: mode to operate in, PASTA or PASST
|
||||
*/
|
||||
/* cppcheck-suppress constParameter */
|
||||
enum passt_modes conf_mode(int argc, char *argv[])
|
||||
{
|
||||
char argv0[PATH_MAX], *basearg0;
|
||||
|
||||
if (argc < 1)
|
||||
die("Cannot determine argv[0]");
|
||||
|
||||
strncpy(argv0, argv[0], PATH_MAX - 1);
|
||||
basearg0 = basename(argv0);
|
||||
if (strstr(basearg0, "pasta"))
|
||||
return MODE_PASTA;
|
||||
|
||||
if (strstr(basearg0, "passt"))
|
||||
return MODE_PASST;
|
||||
|
||||
die("Cannot determine mode, invoke as \"passt\" or \"pasta\"");
|
||||
}
|
||||
|
||||
/**
|
||||
* conf_print() - Print fundamental configuration parameters
|
||||
* @c: Execution context
|
||||
|
|
1
conf.h
1
conf.h
|
@ -6,6 +6,7 @@
|
|||
#ifndef CONF_H
|
||||
#define CONF_H
|
||||
|
||||
enum passt_modes conf_mode(int argc, char *argv[]);
|
||||
void conf(struct ctx *c, int argc, char **argv);
|
||||
|
||||
#endif /* CONF_H */
|
||||
|
|
14
passt.c
14
passt.c
|
@ -191,7 +191,6 @@ int main(int argc, char **argv)
|
|||
{
|
||||
struct epoll_event events[EPOLL_EVENTS];
|
||||
int nfds, i, devnull_fd = -1;
|
||||
char argv0[PATH_MAX], *name;
|
||||
struct ctx c = { 0 };
|
||||
struct rlimit limit;
|
||||
struct timespec now;
|
||||
|
@ -213,21 +212,12 @@ int main(int argc, char **argv)
|
|||
sigaction(SIGTERM, &sa, NULL);
|
||||
sigaction(SIGQUIT, &sa, NULL);
|
||||
|
||||
if (argc < 1)
|
||||
_exit(EXIT_FAILURE);
|
||||
c.mode = conf_mode(argc, argv);
|
||||
|
||||
strncpy(argv0, argv[0], PATH_MAX - 1);
|
||||
name = basename(argv0);
|
||||
if (strstr(name, "pasta")) {
|
||||
if (c.mode == MODE_PASTA) {
|
||||
sa.sa_handler = pasta_child_handler;
|
||||
if (sigaction(SIGCHLD, &sa, NULL))
|
||||
die_perror("Couldn't install signal handlers");
|
||||
|
||||
c.mode = MODE_PASTA;
|
||||
} else if (strstr(name, "passt")) {
|
||||
c.mode = MODE_PASST;
|
||||
} else {
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue