This is just some minor cleanup needed before starting to split out
functions into a new file. First it shuffles and changes the fmt_timecore
functions. It adds an additional check to not print negative timeframes
(the result would most probably be wrong anyway).
Second switch show_mrt_dump to use show_rib instead of calling
show_rib_detail or show_rib_brief directly.
This should not cause any visible change to bgpctl.
OK?
--
:wq Claudio
Index: bgpctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v
retrieving revision 1.251
diff -u -p -r1.251 bgpctl.c
--- bgpctl.c 19 Dec 2019 06:43:51 -0000 1.251
+++ bgpctl.c 19 Dec 2019 15:57:02 -0000
@@ -58,8 +58,7 @@ void print_neighbor_capa_mp(struct pee
void print_neighbor_capa_restart(struct peer *);
void print_neighbor_msgstats(struct peer *);
void print_timer(const char *, time_t);
-static char *fmt_timeframe(time_t t);
-static char *fmt_timeframe_core(time_t t);
+const char *fmt_timeframe(time_t t);
void show_fib_flags(u_int16_t);
void show_fib(struct kroute_full *);
void show_fib_table(struct ktable *);
@@ -821,30 +820,10 @@ print_neighbor_msgstats(struct peer *p)
p->stats.prefix_sent_eor, p->stats.prefix_rcvd_eor);
}
-void
-print_timer(const char *name, time_t d)
-{
- printf(" %-20s ", name);
-
- if (d <= 0)
- printf("%-20s\n", "due");
- else
- printf("due in %-13s\n", fmt_timeframe_core(d));
-}
-
#define TF_BUFS 8
#define TF_LEN 9
-static char *
-fmt_timeframe(time_t t)
-{
- if (t == 0)
- return ("Never");
- else
- return (fmt_timeframe_core(time(NULL) - t));
-}
-
-static char *
+static const char *
fmt_timeframe_core(time_t t)
{
char *buf;
@@ -878,6 +857,31 @@ fmt_timeframe_core(time_t t)
return (buf);
}
+const char *
+fmt_timeframe(time_t t)
+{
+ time_t now;
+
+ if (t == 0)
+ return ("Never");
+
+ now = time(NULL);
+ if (t > now) /* time in the future is not possible */
+ t = now;
+ return (fmt_timeframe_core(now - t));
+}
+
+void
+print_timer(const char *name, time_t d)
+{
+ printf(" %-20s ", name);
+
+ if (d <= 0)
+ printf("%-20s\n", "due");
+ else
+ printf("due in %-13s\n", fmt_timeframe_core(d));
+}
+
void
show_fib_flags(u_int16_t flags)
{
@@ -1880,10 +1884,14 @@ void
show_mrt_dump(struct mrt_rib *mr, struct mrt_peer *mp, void *arg)
{
struct ctl_show_rib ctl;
+ struct parse_result res;
struct ctl_show_rib_request *req = arg;
struct mrt_rib_entry *mre;
u_int16_t i, j;
+ memset(&res, 0, sizeof(res));
+ res.flags = req->flags;
+
for (i = 0; i < mr->nentries; i++) {
mre = &mr->entries[i];
bzero(&ctl, sizeof(ctl));
@@ -1937,14 +1945,13 @@ show_mrt_dump(struct mrt_rib *mr, struct
!match_aspath(mre->aspath, mre->aspath_len, &req->as))
continue;
+ show_rib(&ctl, mre->aspath, mre->aspath_len, &res);
if (req->flags & F_CTL_DETAIL) {
- show_rib_detail(&ctl, mre->aspath, mre->aspath_len, 0);
for (j = 0; j < mre->nattrs; j++)
show_attr(mre->attrs[j].attr,
mre->attrs[j].attr_len,
req->flags);
- } else
- show_rib_brief(&ctl, mre->aspath, mre->aspath_len);
+ }
}
}