`show protocols' now shows time of last state change and protocol-dependent
status information (obtained via newly introduced hook protocol->get_status).
This commit is contained in:
parent
5954dcfab7
commit
9685deb910
2 changed files with 14 additions and 15 deletions
26
nest/proto.c
26
nest/proto.c
|
@ -53,6 +53,7 @@ proto_enqueue(list *l, struct proto *p)
|
||||||
q = (struct proto *) q->n.next;
|
q = (struct proto *) q->n.next;
|
||||||
insert_node(&p->n, q->n.prev);
|
insert_node(&p->n, q->n.prev);
|
||||||
}
|
}
|
||||||
|
p->last_state_change = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -446,27 +447,22 @@ proto_state_name(struct proto *p)
|
||||||
#undef P
|
#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
|
static void
|
||||||
proto_do_show(struct proto *p, int verbose)
|
proto_do_show(struct proto *p, int verbose)
|
||||||
{
|
{
|
||||||
cli_msg(-1002, "%-8s %-8s %-8s %s%s",
|
byte buf[256], reltime[TM_RELTIME_BUFFER_SIZE];
|
||||||
|
|
||||||
|
buf[0] = 0;
|
||||||
|
if (p->proto->get_status)
|
||||||
|
p->proto->get_status(p, buf);
|
||||||
|
tm_format_reltime(reltime, p->last_state_change);
|
||||||
|
cli_msg(-1002, "%-8s %-8s %-8s %-5s %-5s %s",
|
||||||
p->name,
|
p->name,
|
||||||
p->proto->name,
|
p->proto->name,
|
||||||
p->table->name,
|
p->table->name,
|
||||||
proto_state_name(p),
|
proto_state_name(p),
|
||||||
proto_goal_name(p));
|
reltime,
|
||||||
|
buf);
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
cli_msg(-1006, "\tPreference: %d", p->preference);
|
cli_msg(-1006, "\tPreference: %d", p->preference);
|
||||||
|
@ -492,7 +488,7 @@ proto_show(struct symbol *s, int verbose)
|
||||||
cli_msg(9002, "%s is not a protocol", s->name);
|
cli_msg(9002, "%s is not a protocol", s->name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cli_msg(-2002, "name proto table state");
|
cli_msg(-2002, "name proto table state since info");
|
||||||
if (s)
|
if (s)
|
||||||
proto_do_show(((struct proto_config *)s->def)->proto, verbose);
|
proto_do_show(((struct proto_config *)s->def)->proto, verbose);
|
||||||
else
|
else
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "lib/lists.h"
|
#include "lib/lists.h"
|
||||||
#include "lib/resource.h"
|
#include "lib/resource.h"
|
||||||
|
#include "lib/timer.h"
|
||||||
|
|
||||||
struct iface;
|
struct iface;
|
||||||
struct ifa;
|
struct ifa;
|
||||||
|
@ -45,6 +46,7 @@ struct protocol {
|
||||||
void (*dump_attrs)(struct rte *); /* Dump protocol-dependent attributes */
|
void (*dump_attrs)(struct rte *); /* Dump protocol-dependent attributes */
|
||||||
int (*start)(struct proto *); /* Start the instance */
|
int (*start)(struct proto *); /* Start the instance */
|
||||||
int (*shutdown)(struct proto *); /* Stop the instance */
|
int (*shutdown)(struct proto *); /* Stop the instance */
|
||||||
|
void (*get_status)(struct proto *, byte *buf); /* Get instance status (for `show protocols' command) */
|
||||||
};
|
};
|
||||||
|
|
||||||
void protos_build(void);
|
void protos_build(void);
|
||||||
|
@ -98,6 +100,7 @@ struct proto {
|
||||||
unsigned proto_state; /* Protocol state machine (see below) */
|
unsigned proto_state; /* Protocol state machine (see below) */
|
||||||
unsigned core_state; /* Core state machine (see below) */
|
unsigned core_state; /* Core state machine (see below) */
|
||||||
unsigned core_goal; /* State we want to reach (see below) */
|
unsigned core_goal; /* State we want to reach (see below) */
|
||||||
|
bird_clock_t last_state_change; /* Time of last state transition */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* General protocol hooks:
|
* General protocol hooks:
|
||||||
|
|
Loading…
Reference in a new issue