]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
`show interfaces' and `show protocols' works.
authorMartin Mares <mj@ucw.cz>
Tue, 30 Nov 1999 12:57:14 +0000 (12:57 +0000)
committerMartin Mares <mj@ucw.cz>
Tue, 30 Nov 1999 12:57:14 +0000 (12:57 +0000)
doc/reply_codes
nest/config.Y
nest/iface.c
nest/proto.c
nest/protocol.h

index 9a6cbe3f49cc31ebaf641ad358f4d84ea9545ff5..89c8b5a5a9b714f1a791d38d913708b2c346aca1 100644 (file)
@@ -1,8 +1,8 @@
 Reply codes of BIRD command-line interface
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 0xxx   Action suceessfully completed
-1xxx   Table heading
-2xxx   Table entry
+1xxx   Table entry
+2xxx   Table heading
 8xxx   Run-time error
 9xxx   Parse-time error
 <space>        Continuation
@@ -11,14 +11,13 @@ Reply codes of BIRD command-line interface
 0000   OK
 0001   Welcome
 
+1000   BIRD version
+1001   Interface list
 1002   Protocol list
-
-2000   BIRD version
-2001   Interface list
-2002   Protocol list
-2003   Interface address
-2004   Interface flags
-2005   Interface summary
+1003   Interface address
+1004   Interface flags
+1005   Interface summary
+1006   Protocol details
 
 8000   Reply too long
 
index 7d3cbd724149f39bceb80fd51cffc4ff33aa0af9..7ea27892b37a4eee191c9a569c9db3236859dc3b 100644 (file)
@@ -191,12 +191,15 @@ password_list:
 CF_CLI_HELP(SHOW,,[[Show status information]])
 
 CF_CLI(SHOW STATUS,,, [[Show router status]]) {
-  cli_msg(2000, "BIRD " BIRD_VERSION);
+  cli_msg(1000, "BIRD " BIRD_VERSION);
   /* FIXME: Should include uptime, shutdown flag et cetera */
 } ;
 
 CF_CLI(SHOW PROTOCOLS, optsym, [<name>], [[Show routing protocols]])
-{ proto_show($3); } ;
+{ proto_show($3, 0); } ;
+
+CF_CLI(SHOW PROTOCOLS VERBOSE, optsym, [<name>], [[Show routing protocol details]])
+{ proto_show($4, 1); } ;
 
 CF_CLI(SHOW INTERFACES,,, [[Show network interfaces]])
 { if_show(); } ;
index 4b024e10feea5b83bf2a06d2452e2e28cd06f61e..a2746b173e6c854d83d4ef0c11a3e0d4f15443a6 100644 (file)
@@ -646,7 +646,7 @@ if_show_addr(struct ifa *a)
     bsprintf(opp, ", opposite %I", a->opposite);
   else
     opp[0] = 0;
-  cli_msg(-2003, "\t%I/%d (%s%s%s, scope %s)",
+  cli_msg(-1003, "\t%I/%d (%s%s%s, scope %s)",
          a->ip, a->pxlen,
          (a->flags & IA_PRIMARY) ? "Primary" : (a->flags & IA_SECONDARY) ? "Secondary" : "???",
          broad, opp,
@@ -662,14 +662,14 @@ if_show(void)
 
   WALK_LIST(i, iface_list)
     {
-      cli_msg(-2001, "%s %s (index=%d)", i->name, (i->flags & IF_UP) ? "up" : "DOWN", i->index);
+      cli_msg(-1001, "%s %s (index=%d)", i->name, (i->flags & IF_UP) ? "up" : "DOWN", i->index);
       if (i->flags & IF_UNNUMBERED)
        type = "UnNum-PtP";
       else if (!(i->flags & IF_MULTIACCESS))
        type = "PtP";
       else
        type = "MultiAccess";
-      cli_msg(-2004, "\t%s%s%s Admin%s Link%s%s%s MTU=%d",
+      cli_msg(-1004, "\t%s%s%s Admin%s Link%s%s%s MTU=%d",
              type,
              (i->flags & IF_BROADCAST) ? " Broadcast" : "",
              (i->flags & IF_MULTICAST) ? " Multicast" : "",
@@ -693,13 +693,14 @@ if_show_summary(void)
   struct iface *i;
   byte addr[STD_ADDRESS_P_LENGTH + 16];
 
+  cli_msg(-2005, "interface state address");
   WALK_LIST(i, iface_list)
     {
       if (i->addr)
        bsprintf(addr, "%I/%d", i->addr->ip, i->addr->pxlen);
       else
        addr[0] = 0;
-      cli_msg(-2005, "%s\t%s\t%s", i->name, (i->flags & IF_UP) ? "up" : "DOWN", addr);
+      cli_msg(-1005, "%-9s %-5s %s", i->name, (i->flags & IF_UP) ? "up" : "DOWN", addr);
     }
   cli_msg(0, "");
 }
index 32e0b3be9244be6abf400e0ddcbbff371edac0ba..29f961d4449ed92e05621fe2cc8b0434ec91f85f 100644 (file)
@@ -422,10 +422,69 @@ proto_flush_all(void *unused)
   return 0;
 }
 
+/*
+ *  CLI Commands
+ */
+
+static char *
+proto_state_name(struct proto *p)
+{
+#define P(x,y) ((x << 4) | y)
+  switch (P(p->proto_state, p->core_state))
+    {
+    case P(PS_DOWN, FS_HUNGRY):                return "down";
+    case P(PS_START, FS_HUNGRY):       return "start";
+    case P(PS_UP, FS_HUNGRY):
+    case P(PS_UP, FS_FEEDING):         return "feed";
+    case P(PS_STOP, FS_HUNGRY):                return "stop";
+    case P(PS_UP, FS_HAPPY):           return "up";
+    case P(PS_STOP, FS_FLUSHING):
+    case P(PS_DOWN, FS_FLUSHING):      return "flush";
+    default:                           return "???";
+    }
+#undef P
+}
+
+static char *
+proto_goal_name(struct proto *p)
+{
+  if (p->disabled)
+    return " <disabled>";
+  if (p->core_goal == p->core_state)
+    return "";
+  if (p->core_goal == FS_HAPPY)
+    return " <starting>";
+  return " <shutting down>";
+}
+
+static void
+proto_do_show(list *l, int verbose)
+{
+  struct proto *p;
+
+  WALK_LIST(p, *l)
+    {
+      cli_msg(-1002, "%-8s %-8s %-8s %s%s",
+             p->name,
+             p->proto->name,
+             p->table->name,
+             proto_state_name(p),
+             proto_goal_name(p));
+      if (verbose)
+       {
+         cli_msg(-1006, "\tPreference: %d", p->preference);
+         cli_msg(-1006, "\tInput filter: %s", filter_name(p->in_filter));
+         cli_msg(-1006, "\tOutput filter: %s", filter_name(p->out_filter));
+       }
+    }
+}
+
 void
-proto_show(struct symbol *s)
+proto_show(struct symbol *s, int verbose)
 {
-  cli_msg(-1002, "");
-  cli_msg(-2002, "");
+  cli_msg(-2002, "name     proto    table    state");
+  proto_do_show(&proto_list, verbose);
+  proto_do_show(&flush_proto_list, verbose);
+  proto_do_show(&inactive_proto_list, verbose);
   cli_msg(0, "");
 }
index d9b5b17fc3b73c83669f4e19b37d3949ac69fed9..2a21c119b2ac5d44255349ce896d115962a89577 100644 (file)
@@ -144,7 +144,7 @@ struct proto {
 void proto_build(struct proto_config *);
 void *proto_new(struct proto_config *, unsigned size);
 void *proto_config_new(struct protocol *, unsigned size);
-void proto_show(struct symbol *);
+void proto_show(struct symbol *, int);
 
 extern list proto_list;