From 392a493c17bda0f5fe63e3ab1e912bcf687e4f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Thu, 2 Apr 2020 16:23:44 +0000 Subject: [PATCH] Add a command to list all tunnels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- src/common.h | 1 + src/list.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 3 ++- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/list.c diff --git a/src/common.h b/src/common.h index 7d7cfe4..a1518f9 100644 --- a/src/common.h +++ b/src/common.h @@ -68,6 +68,7 @@ void gt_set_port (struct sockaddr *, uint16_t); uint16_t gt_get_port (struct sockaddr *); int gt_toaddr (char *, size_t, struct sockaddr *); +int gt_list (int, char **); int gt_show (int, char **); int gt_bind (int, char **); int gt_path (int, char **); diff --git a/src/list.c b/src/list.c new file mode 100644 index 0000000..688a7b6 --- /dev/null +++ b/src/list.c @@ -0,0 +1,49 @@ +#include "common.h" +#include "ctl.h" + +#include "../argz/argz.h" + +#include +#include +#include +#include + +int +gt_list(int argc, char **argv) +{ + struct argz showz[] = { + {"list", NULL, NULL, argz_option}, + {NULL}}; + + if (argz(showz, argc, argv)) + return 1; + + char dir[64]; + + if (!ctl_rundir(dir, sizeof(dir))) + return 0; + + DIR *dp = opendir(dir); + + if (!dp) + return 0; + + struct dirent *d = NULL; + + while (d = readdir(dp), d) { + if (d->d_name[0] == '.') + continue; + + int fd = ctl_connect(d->d_name); + + if (fd < 0) + continue; + + printf("%s\n", d->d_name); + close(fd); + } + + closedir(dp); + + return 0; +} diff --git a/src/main.c b/src/main.c index 9a6e4a5..a3b44a8 100644 --- a/src/main.c +++ b/src/main.c @@ -78,7 +78,8 @@ main(int argc, char **argv) char *help; int (*call)(int, char **); } cmd[] = { - {"show", "show tunnel info", gt_show}, + {"list", "list all tunnels", gt_list}, + {"show", "show tunnel information", gt_show}, {"bench", "start a crypto bench", gt_bench}, {"bind", "start a new tunnel", gt_bind}, {"set", "change tunnel properties", gt_set},