1
0
Fork 0
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:
David Gibson 2025-03-12 13:18:32 +11:00 committed by Stefano Brivio
parent bb00a0499f
commit 4b17d042c7
3 changed files with 29 additions and 12 deletions

26
conf.c
View file

@ -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
View file

@ -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
View file

@ -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)