From ee13f35d349bbf18b92fb54c68e8e37d823d10c4 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 3 Dec 2019 18:24:01 +0100 Subject: [PATCH] BGP: Add counter of FSM established transitions The counter is persistent through protocol up/down/restart events. --- proto/bgp/bgp.c | 6 ++++++ proto/bgp/bgp.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index c2b3bd18..c3ae2ab1 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -504,6 +504,8 @@ bgp_conn_enter_established_state(struct bgp_conn *conn) struct bgp_channel *c; BGP_TRACE(D_EVENTS, "BGP session established"); + p->last_established = current_time(); + p->fsm_established_transitions++; /* For multi-hop BGP sessions */ if (ipa_zero(p->source_addr)) @@ -616,6 +618,7 @@ static void bgp_conn_leave_established_state(struct bgp_proto *p) { BGP_TRACE(D_EVENTS, "BGP session closed"); + p->last_established = current_time(); p->conn = NULL; if (p->p.proto_state == PS_UP) @@ -2156,6 +2159,9 @@ bgp_show_proto_info(struct proto *P) tm_remains(p->conn->keepalive_timer), p->conn->keepalive_time); } + cli_msg(-1006, " FSM established transitions: %u", + p->fsm_established_transitions); + struct bgp_stats *s = &p->stats; cli_msg(-1006, " Statistics:"); cli_msg(-1006, " rx-open %u rx-update %u rx-notify %u rx-keepalive %u rx-refresh %u", diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h index 0fcce878..1e89365b 100644 --- a/proto/bgp/bgp.h +++ b/proto/bgp/bgp.h @@ -267,6 +267,8 @@ struct bgp_proto { struct bgp_socket *sock; /* Shared listening socket */ struct bfd_request *bfd_req; /* BFD request, if BFD is used */ struct bgp_stats stats; /* Packet statistics */ + uint fsm_established_transitions; /* Number of established transitions */ + btime last_established; /* Last time of enter/leave of established state */ ip_addr source_addr; /* Local address used as an advertised next hop */ ip_addr link_addr; /* Link-local version of source_addr */ event *event; /* Event for respawning and shutting process */