mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 22:30:43 +00:00
bgpd/bmp: print active outbound connections
... including timer & details about current state and last failure. Fixes: #5401 Signed-off-by: David Lamparter <equinox@diac24.net>
This commit is contained in:
parent
3286ca0750
commit
150470da79
@ -2079,9 +2079,12 @@ DEFPY(show_bmp,
|
|||||||
struct bmp_bgp *bmpbgp;
|
struct bmp_bgp *bmpbgp;
|
||||||
struct bmp_targets *bt;
|
struct bmp_targets *bt;
|
||||||
struct bmp_listener *bl;
|
struct bmp_listener *bl;
|
||||||
|
struct bmp_active *ba;
|
||||||
struct bmp *bmp;
|
struct bmp *bmp;
|
||||||
struct ttable *tt;
|
struct ttable *tt;
|
||||||
char buf[SU_ADDRSTRLEN];
|
char buf[SU_ADDRSTRLEN];
|
||||||
|
char uptime[BGP_UPTIME_LEN];
|
||||||
|
char *out;
|
||||||
|
|
||||||
frr_each(bmp_bgph, &bmp_bgph, bmpbgp) {
|
frr_each(bmp_bgph, &bmp_bgph, bmpbgp) {
|
||||||
vty_out(vty, "BMP state for BGP %s:\n\n",
|
vty_out(vty, "BMP state for BGP %s:\n\n",
|
||||||
@ -2130,6 +2133,51 @@ DEFPY(show_bmp,
|
|||||||
sockunion2str(&bl->addr, buf,
|
sockunion2str(&bl->addr, buf,
|
||||||
SU_ADDRSTRLEN), bl->port);
|
SU_ADDRSTRLEN), bl->port);
|
||||||
|
|
||||||
|
vty_out(vty, "\n Outbound connections:\n");
|
||||||
|
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
|
||||||
|
ttable_add_row(tt, "remote|state||timer");
|
||||||
|
ttable_rowseps(tt, 0, BOTTOM, true, '-');
|
||||||
|
frr_each (bmp_actives, &bt->actives, ba) {
|
||||||
|
const char *state_str = "?";
|
||||||
|
|
||||||
|
if (ba->bmp) {
|
||||||
|
peer_uptime(ba->bmp->t_up.tv_sec,
|
||||||
|
uptime, sizeof(uptime),
|
||||||
|
false, NULL);
|
||||||
|
ttable_add_row(tt, "%s:%d|Up|%s|%s",
|
||||||
|
ba->hostname, ba->port,
|
||||||
|
ba->bmp->remote, uptime);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
uptime[0] = '\0';
|
||||||
|
|
||||||
|
if (ba->t_timer) {
|
||||||
|
long trem = thread_timer_remain_second(
|
||||||
|
ba->t_timer);
|
||||||
|
|
||||||
|
peer_uptime(monotime(NULL) - trem,
|
||||||
|
uptime, sizeof(uptime),
|
||||||
|
false, NULL);
|
||||||
|
state_str = "RetryWait";
|
||||||
|
} else if (ba->t_read) {
|
||||||
|
state_str = "Connecting";
|
||||||
|
} else if (ba->resq.callback) {
|
||||||
|
state_str = "Resolving";
|
||||||
|
}
|
||||||
|
|
||||||
|
ttable_add_row(tt, "%s:%d|%s|%s|%s",
|
||||||
|
ba->hostname, ba->port,
|
||||||
|
state_str,
|
||||||
|
ba->last_err ? ba->last_err : "",
|
||||||
|
uptime);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
out = ttable_dump(tt, "\n");
|
||||||
|
vty_out(vty, "%s", out);
|
||||||
|
XFREE(MTYPE_TMP, out);
|
||||||
|
ttable_del(tt);
|
||||||
|
|
||||||
vty_out(vty, "\n %zu connected clients:\n",
|
vty_out(vty, "\n %zu connected clients:\n",
|
||||||
bmp_session_count(&bt->sessions));
|
bmp_session_count(&bt->sessions));
|
||||||
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
|
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
|
||||||
@ -2138,7 +2186,6 @@ DEFPY(show_bmp,
|
|||||||
|
|
||||||
frr_each (bmp_session, &bt->sessions, bmp) {
|
frr_each (bmp_session, &bt->sessions, bmp) {
|
||||||
uint64_t total;
|
uint64_t total;
|
||||||
char uptime[BGP_UPTIME_LEN];
|
|
||||||
size_t q, kq;
|
size_t q, kq;
|
||||||
|
|
||||||
pullwr_stats(bmp->pullwr, &total, &q, &kq);
|
pullwr_stats(bmp->pullwr, &total, &q, &kq);
|
||||||
@ -2153,7 +2200,7 @@ DEFPY(show_bmp,
|
|||||||
bmp->cnt_mirror_overruns,
|
bmp->cnt_mirror_overruns,
|
||||||
total, q, kq);
|
total, q, kq);
|
||||||
}
|
}
|
||||||
char *out = ttable_dump(tt, "\n");
|
out = ttable_dump(tt, "\n");
|
||||||
vty_out(vty, "%s", out);
|
vty_out(vty, "%s", out);
|
||||||
XFREE(MTYPE_TMP, out);
|
XFREE(MTYPE_TMP, out);
|
||||||
ttable_del(tt);
|
ttable_del(tt);
|
||||||
|
Loading…
Reference in New Issue
Block a user