Skip to content

Commit

Permalink
bgpd: add bmp adj-rib-in 64 bit gauge value
Browse files Browse the repository at this point in the history
There is no support for option 7, as per RFC7854.
Add the 64 bit counter in the peer structure.
Add the 64 bit bmp value write api.
Add the missing per peer statistic.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
  • Loading branch information
pguibert6WIND committed Apr 26, 2024
1 parent a6040ba commit e6374a2
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 0 deletions.
3 changes: 3 additions & 0 deletions bgpd/bgp_advertise.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,15 @@ void bgp_adj_in_set(struct bgp_dest *dest, struct peer *peer, struct attr *attr,
adj->uptime = monotime(NULL);
adj->addpath_rx_id = addpath_id;
BGP_ADJ_IN_ADD(dest, adj);
peer->stat_pfx_adj_rib_in++;
bgp_dest_lock_node(dest);
}

void bgp_adj_in_remove(struct bgp_dest **dest, struct bgp_adj_in *bai)
{
bgp_attr_unintern(&bai->attr);
if (bai->peer)
bai->peer->stat_pfx_adj_rib_in--;
BGP_ADJ_IN_DEL(*dest, bai);
*dest = bgp_dest_unlock_node(*dest);
peer_unlock(bai->peer); /* adj_in peer reference */
Expand Down
11 changes: 11 additions & 0 deletions bgpd/bgp_bmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1592,6 +1592,15 @@ static void bmp_stat_put_u32(struct stream *s, size_t *cnt, uint16_t type,
(*cnt)++;
}

static void bmp_stat_put_u64(struct stream *s, size_t *cnt, uint16_t type,
uint64_t value)
{
stream_putw(s, type);
stream_putw(s, 8);
stream_putq(s, value);
(*cnt)++;
}

static void bmp_stats(struct event *thread)
{
struct bmp_targets *bt = EVENT_ARG(thread);
Expand Down Expand Up @@ -1635,6 +1644,8 @@ static void bmp_stats(struct event *thread)
peer->stat_upd_7606);
bmp_stat_put_u32(s, &count, BMP_STATS_FRR_NH_INVALID,
peer->stat_pfx_nh_invalid);
bmp_stat_put_u64(s, &count, BMP_STATS_SIZE_ADJ_RIB_IN,
peer->stat_pfx_adj_rib_in);

stream_putl_at(s, count_pos, count);

Expand Down
1 change: 1 addition & 0 deletions bgpd/bgpd.h
Original file line number Diff line number Diff line change
Expand Up @@ -1667,6 +1667,7 @@ struct peer {
uint32_t stat_pfx_nh_invalid;
uint32_t stat_pfx_dup_withdraw;
uint32_t stat_upd_7606; /* RFC7606: treat-as-withdraw */
uint64_t stat_pfx_adj_rib_in; /* RFC7854 : Number of routes in Adj-RIBs-In */

/* BGP state count */
uint32_t established; /* Established */
Expand Down
1 change: 1 addition & 0 deletions doc/user/bmp.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ The `BMP` implementation in FRR has the following properties:
- 3: count of **prefixes** with loop in cluster id
- 4: count of **prefixes** with loop in AS-path
- 5: count of **prefixes** with loop in originator
- 7: count of **routes** in adj-rib-in
- 11: count of updates subjected to :rfc:`7607` "treat as withdrawal"
handling due to errors
- 65531: *experimental* count of prefixes rejected due to invalid next-hop
Expand Down

0 comments on commit e6374a2

Please sign in to comment.