summaryrefslogtreecommitdiff
path: root/usr.sbin/relayctl
diff options
context:
space:
mode:
authorReyk Floeter <reyk@cvs.openbsd.org>2007-09-07 08:33:32 +0000
committerReyk Floeter <reyk@cvs.openbsd.org>2007-09-07 08:33:32 +0000
commit348c2857dcafa5676b8db26793f62df3485a5e65 (patch)
treeaf65590e4de5147b93f96c82897cf1e5d6d53e63 /usr.sbin/relayctl
parent2179eb1d1009a7f7883b1e73676776fa3e92855a (diff)
add a "show sessions" command to dump the complete list of running relay
sessions.
Diffstat (limited to 'usr.sbin/relayctl')
-rw-r--r--usr.sbin/relayctl/parser.c3
-rw-r--r--usr.sbin/relayctl/parser.h3
-rw-r--r--usr.sbin/relayctl/relayctl.86
-rw-r--r--usr.sbin/relayctl/relayctl.c42
4 files changed, 49 insertions, 5 deletions
diff --git a/usr.sbin/relayctl/parser.c b/usr.sbin/relayctl/parser.c
index 70983b0d64a..6f507d1335e 100644
--- a/usr.sbin/relayctl/parser.c
+++ b/usr.sbin/relayctl/parser.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: parser.c,v 1.11 2007/05/29 22:41:48 pyr Exp $ */
+/* $OpenBSD: parser.c,v 1.12 2007/09/07 08:33:31 reyk Exp $ */
/*
* Copyright (c) 2006 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -78,6 +78,7 @@ static const struct token t_show[] = {
{KEYWORD, "summary", SHOW_SUM, NULL},
{KEYWORD, "hosts", SHOW_HOSTS, NULL},
{KEYWORD, "relays", SHOW_RELAYS, NULL},
+ {KEYWORD, "sessions", SHOW_SESSIONS, NULL},
{ENDTOKEN, "", NONE, NULL}
};
diff --git a/usr.sbin/relayctl/parser.h b/usr.sbin/relayctl/parser.h
index 0f9509f7dbf..1116677893c 100644
--- a/usr.sbin/relayctl/parser.h
+++ b/usr.sbin/relayctl/parser.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: parser.h,v 1.4 2007/02/22 03:32:40 reyk Exp $ */
+/* $OpenBSD: parser.h,v 1.5 2007/09/07 08:33:31 reyk Exp $ */
/*
* Copyright (c) 2006 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -21,6 +21,7 @@ enum actions {
SHOW_SUM,
SHOW_HOSTS,
SHOW_RELAYS,
+ SHOW_SESSIONS,
SERV_DISABLE,
SERV_ENABLE,
TABLE_DISABLE,
diff --git a/usr.sbin/relayctl/relayctl.8 b/usr.sbin/relayctl/relayctl.8
index bb1ddcb3840..d9f2c88a150 100644
--- a/usr.sbin/relayctl/relayctl.8
+++ b/usr.sbin/relayctl/relayctl.8
@@ -1,4 +1,4 @@
-.\" $OpenBSD: relayctl.8,v 1.10 2007/08/02 16:10:58 pyr Exp $
+.\" $OpenBSD: relayctl.8,v 1.11 2007/09/07 08:33:31 reyk Exp $
.\"
.\" Copyright (c) 2006 Pierre-Yves Ritschard <pyr@spootnik.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: August 2 2007 $
+.Dd $Mdocdate: September 7 2007 $
.Dt HOSTSTATECTL 8
.Os
.Sh NAME
@@ -61,6 +61,8 @@ Show detailed status of hosts, tables, and services.
Show detailed status of relays including the current and average
access statistics.
The statistics will be updated every minute.
+.It Cm show sessions
+Dump the complete list of running relay sessions.
.It Cm show summary
Display a list of all relays, services, tables, and hosts.
.It Cm table disable Op Ar name | id
diff --git a/usr.sbin/relayctl/relayctl.c b/usr.sbin/relayctl/relayctl.c
index 9c39215729e..2a3702d73ab 100644
--- a/usr.sbin/relayctl/relayctl.c
+++ b/usr.sbin/relayctl/relayctl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: relayctl.c,v 1.21 2007/09/07 08:31:36 reyk Exp $ */
+/* $OpenBSD: relayctl.c,v 1.22 2007/09/07 08:33:31 reyk Exp $ */
/*
* Copyright (c) 2006 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -44,6 +44,7 @@
__dead void usage(void);
int show_summary_msg(struct imsg *, int);
+int show_session_msg(struct imsg *);
int show_command_output(struct imsg *);
char *print_service_status(int);
char *print_host_status(int, int);
@@ -146,6 +147,9 @@ main(int argc, char *argv[])
printf("Type\t%4s\t%-24s\t%-7s\tStatus\n",
"Id", "Name", "Avlblty");
break;
+ case SHOW_SESSIONS:
+ imsg_compose(ibuf, IMSG_CTL_SESSION, 0, 0, -1, NULL, 0);
+ break;
case SERV_ENABLE:
imsg_compose(ibuf, IMSG_CTL_SERVICE_ENABLE, 0, 0, -1,
&res->id, sizeof(res->id));
@@ -202,6 +206,9 @@ main(int argc, char *argv[])
case SHOW_RELAYS:
done = show_summary_msg(&imsg, res->action);
break;
+ case SHOW_SESSIONS:
+ done = show_session_msg(&imsg);
+ break;
case SERV_DISABLE:
case SERV_ENABLE:
case TABLE_DISABLE:
@@ -378,6 +385,39 @@ show_summary_msg(struct imsg *imsg, int type)
}
int
+show_session_msg(struct imsg *imsg)
+{
+ struct session *con;
+ char a[128], b[128];
+ struct timeval tv_now;
+
+ switch (imsg->hdr.type) {
+ case IMSG_CTL_SESSION:
+ con = imsg->data;
+
+ (void)print_host(&con->in.ss, a, sizeof(a));
+ (void)print_host(&con->out.ss, b, sizeof(b));
+ printf("session %u:%u %s:%u -> %s:%u\t%s\n",
+ imsg->hdr.peerid, con->id,
+ a, ntohs(con->in.port), b, ntohs(con->out.port),
+ con->done ? "DONE" : "RUNNING");
+
+ if (gettimeofday(&tv_now, NULL))
+ fatal("show_session_msg: gettimeofday");
+ print_time(&tv_now, &con->tv_start, a, sizeof(a));
+ print_time(&tv_now, &con->tv_last, b, sizeof(b));
+ printf("\tage %s, idle %s, relay %u\n", a, b, con->relayid);
+ break;
+ case IMSG_CTL_END:
+ return (1);
+ default:
+ errx(1, "wrong message in session: %u", imsg->hdr.type);
+ break;
+ }
+ return (0);
+}
+
+int
show_command_output(struct imsg *imsg)
{
switch (imsg->hdr.type) {