From 2d3b63e4a5a580d52123bfd5dcc09fe374ce3272 Mon Sep 17 00:00:00 2001 From: Claudio Jeker Date: Wed, 12 Sep 2012 05:57:11 +0000 Subject: bgpctl bits for the GR support added to bgpd. OK sthen --- usr.sbin/bgpctl/bgpctl.c | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'usr.sbin/bgpctl/bgpctl.c') diff --git a/usr.sbin/bgpctl/bgpctl.c b/usr.sbin/bgpctl/bgpctl.c index 30f4715ca49..12defd069e2 100644 --- a/usr.sbin/bgpctl/bgpctl.c +++ b/usr.sbin/bgpctl/bgpctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bgpctl.c,v 1.164 2012/05/27 18:53:50 claudio Exp $ */ +/* $OpenBSD: bgpctl.c,v 1.165 2012/09/12 05:57:10 claudio Exp $ */ /* * Copyright (c) 2003 Henning Brauer @@ -52,6 +52,7 @@ int show_summary_terse_msg(struct imsg *, int); int show_neighbor_terse(struct imsg *); int show_neighbor_msg(struct imsg *, enum neighbor_views); void print_neighbor_capa_mp(struct peer *); +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); @@ -168,7 +169,7 @@ main(int argc, char *argv[]) case NONE: case IRRFILTER: usage(); - /* not reached */ + /* NOTREACHED */ case SHOW: case SHOW_SUMMARY: imsg_compose(ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1, NULL, 0); @@ -648,7 +649,7 @@ show_neighbor_msg(struct imsg *imsg, enum neighbor_views nv) if (p->capa.peer.mp[i]) hascapamp = 1; if (hascapamp || p->capa.peer.refresh || - p->capa.peer.restart || p->capa.peer.as4byte) { + p->capa.peer.grestart.restart || p->capa.peer.as4byte) { printf(" Neighbor capabilities:\n"); if (hascapamp) { printf(" Multiprotocol extensions: "); @@ -657,8 +658,11 @@ show_neighbor_msg(struct imsg *imsg, enum neighbor_views nv) } if (p->capa.peer.refresh) printf(" Route Refresh\n"); - if (p->capa.peer.restart) - printf(" Graceful Restart\n"); + if (p->capa.peer.grestart.restart) { + printf(" Graceful Restart"); + print_neighbor_capa_restart(p); + printf("\n"); + } if (p->capa.peer.as4byte) printf(" 4-byte AS numbers\n"); } @@ -725,6 +729,28 @@ print_neighbor_capa_mp(struct peer *p) } } +void +print_neighbor_capa_restart(struct peer *p) +{ + int comma; + u_int8_t i; + + if (p->capa.peer.grestart.timeout) + printf(": Timeout: %d, ", p->capa.peer.grestart.timeout); + for (i = 0, comma = 0; i < AID_MAX; i++) + if (p->capa.peer.grestart.flags[i] & CAPA_GR_PRESENT) { + if (!comma && + p->capa.peer.grestart.flags[i] & CAPA_GR_RESTART) + printf("restarted, "); + if (comma) + printf(", "); + printf("%s", aid2str(i)); + if (p->capa.peer.grestart.flags[i] & CAPA_GR_FORWARD) + printf(" (preserved)"); + comma = 1; + } +} + void print_neighbor_msgstats(struct peer *p) { @@ -753,6 +779,8 @@ print_neighbor_msgstats(struct peer *p) p->stats.prefix_sent_update, p->stats.prefix_rcvd_update); printf(" %-15s %10llu %10llu\n", "Withdraws", p->stats.prefix_sent_withdraw, p->stats.prefix_rcvd_withdraw); + printf(" %-15s %10llu %10llu\n", "End-of-Rib", + p->stats.prefix_sent_eor, p->stats.prefix_rcvd_eor); } void @@ -1107,8 +1135,8 @@ show_interface_msg(struct imsg *imsg) void show_rib_summary_head(void) { - printf( - "flags: * = Valid, > = Selected, I = via IBGP, A = Announced\n"); + printf("flags: * = Valid, > = Selected, I = via IBGP, A = Announced, " + "S = Stale\n"); printf("origin: i = IGP, e = EGP, ? = Incomplete\n\n"); printf("%-5s %-20s %-15s %5s %5s %s\n", "flags", "destination", "gateway", "lpref", "med", "aspath origin"); @@ -1152,6 +1180,8 @@ print_flags(u_int8_t flags, int sum) *p++ = 'A'; if (flags & F_PREF_INTERNAL) *p++ = 'I'; + if (flags & F_PREF_STALE) + *p++ = 'S'; if (flags & F_PREF_ELIGIBLE) *p++ = '*'; if (flags & F_PREF_ACTIVE) @@ -1163,6 +1193,8 @@ print_flags(u_int8_t flags, int sum) printf("internal"); else printf("external"); + if (flags & F_PREF_STALE) + printf(", stale"); if (flags & F_PREF_ELIGIBLE) printf(", valid"); if (flags & F_PREF_ACTIVE) -- cgit v1.2.3