Don't show all tunnels

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2019-07-19 22:40:31 +00:00
parent ed82531fc0
commit 67ea65b1a8
3 changed files with 28 additions and 43 deletions

View File

@@ -299,6 +299,7 @@ gt_bind(int argc, char **argv)
res.ret = errno; res.ret = errno;
break; break;
case CTL_STATUS: case CTL_STATUS:
memcpy(res.status.tun_name, tun_name, sizeof(tun_name)); // XXX
res.status.pid = pid; res.status.pid = pid;
res.status.mtu = mtu; res.status.mtu = mtu;
res.status.chacha = chacha; res.status.chacha = chacha;

View File

@@ -27,6 +27,7 @@ struct ctl_msg {
} path; } path;
struct mud_path path_status; struct mud_path path_status;
struct { struct {
char tun_name[64];
long pid; long pid;
size_t mtu; size_t mtu;
int chacha; int chacha;

View File

@@ -12,7 +12,7 @@
#include <unistd.h> #include <unistd.h>
static int static int
gt_show_dev_status(int fd, const char *dev) gt_show_print_status(int fd)
{ {
struct ctl_msg res, req = {.type = CTL_STATUS}; struct ctl_msg res, req = {.type = CTL_STATUS};
@@ -42,7 +42,7 @@ gt_show_dev_status(int fd, const char *dev)
" %zu" " %zu"
" %s" " %s"
"\n", "\n",
dev, res.status.tun_name,
res.status.pid, res.status.pid,
bindstr[0] ? bindstr : "-", bindstr[0] ? bindstr : "-",
gt_get_port((struct sockaddr *)&res.status.bind), gt_get_port((struct sockaddr *)&res.status.bind),
@@ -62,7 +62,7 @@ gt_show_dev_status(int fd, const char *dev)
" %zu" " %zu"
" %s" " %s"
"\n", "\n",
dev, res.status.tun_name,
res.status.pid, res.status.pid,
bindstr[0] ? bindstr : "-", bindstr[0] ? bindstr : "-",
gt_get_port((struct sockaddr *)&res.status.bind), gt_get_port((struct sockaddr *)&res.status.bind),
@@ -75,30 +75,6 @@ gt_show_dev_status(int fd, const char *dev)
return 0; return 0;
} }
static int
gt_show_dev(const char *dev)
{
int fd = ctl_connect(GT_RUNDIR, dev);
if (fd < 0) {
if (fd == -1)
perror("show");
return -1;
}
int ret = gt_show_dev_status(fd, dev);
if (ret == -1)
perror(dev);
if (ret == -2)
gt_log("%s: bad reply from server\n", dev);
ctl_delete(fd);
return ret;
}
int int
gt_show(int argc, char **argv) gt_show(int argc, char **argv)
{ {
@@ -111,27 +87,34 @@ gt_show(int argc, char **argv)
if (argz(showz, argc, argv)) if (argz(showz, argc, argv))
return 1; return 1;
if (dev) int fd = ctl_connect(GT_RUNDIR, dev);
return !!gt_show_dev(dev);
DIR *dp = opendir(GT_RUNDIR); if (fd < 0) {
switch (fd) {
if (!dp) { case -1:
if (errno == ENOENT) perror("show");
return 0; break;
perror("show"); case -2:
gt_log("no device\n");
break;
case -3:
gt_log("please choose a device\n");
break;
default:
gt_log("couldn't connect\n");
}
return 1; return 1;
} }
int ret = 0; int ret = gt_show_print_status(fd);
struct dirent *d = NULL;
while (d = readdir(dp), d) { if (ret == -2)
if (d->d_name[0] != '.') gt_log("bad reply from server\n");
ret |= !!gt_show_dev(d->d_name);
}
closedir(dp); if (ret == -1)
perror("show");
return ret; ctl_delete(fd);
return !!ret;
} }