chiark / gitweb /
server/admin: Fix tokenization of statistics output.
[tripe] / server / admin.c
index 7917b26fb434b021c6204230bcefb7b3428be9a1..bd5cc0295cc067de64170e51edfa8354eea9829e 100644 (file)
@@ -338,6 +338,7 @@ static void a_vwrite(admin *a, const char *status, const char *tag,
                     const char *fmt, va_list ap)
 {
   dstr d = DSTR_INIT;
+
   if (tag) dstr_puts(&d, "BG");
   dstr_puts(&d, status);
   if (tag) quotify(&d, tag);
@@ -351,6 +352,7 @@ static void a_write(admin *a, const char *status, const char *tag,
                    const char *fmt, ...)
 {
   va_list ap;
+
   va_start(ap, fmt);
   a_vwrite(a, status, tag, fmt, ap);
   va_end(ap);
@@ -372,6 +374,7 @@ static void a_ok(admin *a) { a_write(a, "OK", 0, A_END); }
 static void a_info(admin *a, const char *fmt, ...)
 {
   va_list ap;
+
   va_start(ap, fmt);
   a_vwrite(a, "INFO", 0, fmt, ap);
   va_end(ap);
@@ -380,6 +383,7 @@ static void a_info(admin *a, const char *fmt, ...)
 static void a_fail(admin *a, const char *fmt, ...)
 {
   va_list ap;
+
   va_start(ap, fmt);
   a_vwrite(a, "FAIL", 0, fmt, ap);
   va_end(ap);
@@ -425,7 +429,7 @@ static void a_rawalert(unsigned f_and, unsigned f_eq, const char *status,
   dstr_destroy(&d);
 }
 
-static void a_valert(unsigned f_and, unsigned f_eq, const char *tag,
+static void a_valert(unsigned f_and, unsigned f_eq, const char *status,
                     const char *fmt, va_list ap)
 {
   dstr d = DSTR_INIT;
@@ -433,17 +437,18 @@ static void a_valert(unsigned f_and, unsigned f_eq, const char *tag,
   if (!(flags & F_INIT))
     return;
   a_vformat(&d, fmt, ap);
-  a_rawalert(f_and, f_eq, tag, fmt ? d.buf : 0, fmt ? d.len : 0);
+  a_rawalert(f_and, f_eq, status, fmt ? d.buf : 0, fmt ? d.len : 0);
   dstr_destroy(&d);
 }
 
 #if 0 /*unused*/
-static void a_alert(unsigned f_and, unsigned f_eq, const char *tag,
+static void a_alert(unsigned f_and, unsigned f_eq, const char *status,
                    const char *fmt, ...)
 {
   va_list ap;
+
   va_start(ap, fmt);
-  a_valert(f_and, f_eq, tag, fmt, ap);
+  a_valert(f_and, f_eq, status, fmt, ap);
   va_end(ap);
 }
 #endif
@@ -570,9 +575,7 @@ static void a_sigdie(int sig, void *v)
  */
 
 static void a_sighup(int sig, void *v)
-{
-  a_warn("SERVER", "ignore", "signal", "SIGHUP", A_END);
-}
+  { a_warn("SERVER", "ignore", "signal", "SIGHUP", A_END); }
 
 /* --- @a_parsetime@ --- *
  *
@@ -1174,9 +1177,7 @@ static void acmd_trace(admin *a, unsigned ac, char *av[])
 #endif
 
 static void acmd_watch(admin *a, unsigned ac, char *av[])
-{
-  traceish(a, ac, av, "watch", w_opts, &a->f);
-}
+  { traceish(a, ac, av, "watch", w_opts, &a->f); }
 
 static void alertcmd(admin *a, unsigned f_and, unsigned f_eq,
                     const char *tag, unsigned ac, char *av[])
@@ -1199,10 +1200,7 @@ static void acmd_warn(admin *a, unsigned ac, char *av[])
   { alertcmd(a, AF_WARN, AF_WARN, "WARN", ac, av); }
 
 static void acmd_port(admin *a, unsigned ac, char *av[])
-{
-  a_info(a, "%u", p_port(), A_END);
-  a_ok(a);
-}
+  { a_info(a, "%u", p_port(), A_END); a_ok(a); }
 
 static void acmd_daemon(admin *a, unsigned ac, char *av[])
 {
@@ -1224,6 +1222,7 @@ static void acmd_daemon(admin *a, unsigned ac, char *av[])
 static void acmd_list(admin *a, unsigned ac, char *av[])
 {
   peer *p;
+
   for (p = p_first(); p; p = p_next(p))
     a_info(a, "%s", p_name(p), A_END);
   a_ok(a);
@@ -1239,6 +1238,17 @@ static void acmd_ifname(admin *a, unsigned ac, char *av[])
   }
 }
 
+static void acmd_setifname(admin *a, unsigned ac, char *av[])
+{
+  peer *p;
+
+  if ((p = a_findpeer(a, av[0])) != 0) {
+    a_notify("NEWIFNAME", "?PEER", p, "%s", p_ifname(p), "%s", av[1], A_END);
+    p_setifname(p, av[1]);
+    a_ok(a);
+  }  
+}
+
 static void acmd_getchal(admin *a, unsigned ac, char *av[])
 {
   buf b;
@@ -1328,17 +1338,27 @@ static void acmd_stats(admin *a, unsigned ac, char *av[])
   a_info(a, "start-time=%s", timestr(st->t_start), A_END);
   a_info(a, "last-packet-time=%s", timestr(st->t_last), A_END);
   a_info(a, "last-keyexch-time=%s", timestr(st->t_kx), A_END);
-  a_info(a, "packets-in=%lu bytes-in=%lu", st->n_in, st->sz_in, A_END);
-  a_info(a, "packets-out=%lu bytes-out=%lu",
-        st->n_out, st->sz_out, A_END);
-  a_info(a, "keyexch-packets-in=%lu keyexch-bytes-in=%lu",
-        st->n_kxin, st->sz_kxin, A_END);
-  a_info(a, "keyexch-packets-out=%lu keyexch-bytes-out=%lu",
-        st->n_kxout, st->sz_kxout, A_END);
-  a_info(a, "ip-packets-in=%lu ip-bytes-in=%lu",
-        st->n_ipin, st->sz_ipin, A_END);
-  a_info(a, "ip-packets-out=%lu ip-bytes-out=%lu",
-        st->n_ipout, st->sz_ipout, A_END);
+  a_info(a, "packets-in=%lu", st->n_in, "bytes-in=%lu", st->sz_in, A_END);
+  a_info(a,
+        "packets-out=%lu", st->n_out,
+        "bytes-out=%lu", st->sz_out,
+        A_END);
+  a_info(a,
+        "keyexch-packets-in=%lu", st->n_kxin,
+        "keyexch-bytes-in=%lu", st->sz_kxin,
+        A_END);
+  a_info(a,
+        "keyexch-packets-out=%lu", st->n_kxout,
+        "keyexch-bytes-out=%lu", st->sz_kxout,
+        A_END);
+  a_info(a,
+        "ip-packets-in=%lu", st->n_ipin,
+        "ip-bytes-in=%lu", st->sz_ipin,
+        A_END);
+  a_info(a,
+        "ip-packets-out=%lu", st->n_ipout, 
+        "ip-bytes-out=%lu", st->sz_ipout,
+        A_END);
   a_info(a, "rejected-packets=%lu", st->n_reject, A_END);
   a_ok(a);
 }
@@ -1346,6 +1366,7 @@ static void acmd_stats(admin *a, unsigned ac, char *av[])
 static void acmd_kill(admin *a, unsigned ac, char *av[])
 {
   peer *p;
+
   if ((p = a_findpeer(a, av[0])) != 0) {
     p_destroy(p);
     a_ok(a);
@@ -1355,6 +1376,7 @@ static void acmd_kill(admin *a, unsigned ac, char *av[])
 static void acmd_forcekx(admin *a, unsigned ac, char *av[])
 {
   peer *p;
+
   if ((p = a_findpeer(a, av[0])) != 0) {
     kx_start(&p->kx, 1);
     a_ok(a);
@@ -1381,6 +1403,7 @@ static void acmd_version(admin *a, unsigned ac, char *av[])
 static void acmd_tunnels(admin *a, unsigned ac, char *av[])
 {
   int i;
+
   for (i = 0; tunnels[i]; i++)
     a_info(a, "%s", tunnels[i]->name, A_END);
   a_ok(a);
@@ -1417,6 +1440,7 @@ static const acmd acmdtab[] = {
   { "quit",    0,                      0,      0,      acmd_quit },
   { "reload",  0,                      0,      0,      acmd_reload },
   { "servinfo",        0,                      0,      0,      acmd_servinfo },
+  { "setifname", "PEER NEW-NAME",      2,      2,      acmd_setifname },
   { "stats",   "PEER",                 1,      1,      acmd_stats },
 #ifndef NTRACE
   { "trace",   "[OPTIONS]",            0,      1,      acmd_trace },
@@ -1431,6 +1455,7 @@ static const acmd acmdtab[] = {
 static void acmd_help(admin *a, unsigned ac, char *av[])
 {
   const acmd *c;
+
   for (c = acmdtab; c->name; c++) {
     if (c->help)
       a_info(a, "%s", c->name, "*%s", c->help, A_END);
@@ -1675,10 +1700,7 @@ static void a_accept(int fd, unsigned mode, void *v)
  * Use:                Informs the admin module that it's a daemon.
  */
 
-void a_daemon(void)
-{
-  flags |= F_DAEMON;
-}
+void a_daemon(void) { flags |= F_DAEMON; }
 
 /* --- @a_init@ --- *
  *