summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_advertise.c16
-rw-r--r--bgpd/bgp_advertise.h19
-rw-r--r--bgpd/bgp_vty.c8
3 files changed, 34 insertions, 9 deletions
diff --git a/bgpd/bgp_advertise.c b/bgpd/bgp_advertise.c
index e0fa58d468..adf40a0bb9 100644
--- a/bgpd/bgp_advertise.c
+++ b/bgpd/bgp_advertise.c
@@ -185,10 +185,12 @@ bgp_advertise_clean (struct peer *peer, struct bgp_adj_out *adj,
struct bgp_advertise *adv;
struct bgp_advertise_attr *baa;
struct bgp_advertise *next;
+ struct bgp_advertise_fifo *fhead;
adv = adj->adv;
baa = adv->baa;
next = NULL;
+ fhead = &peer->sync[afi][safi]->withdraw;
if (baa)
{
@@ -200,10 +202,12 @@ bgp_advertise_clean (struct peer *peer, struct bgp_adj_out *adj,
/* Unintern BGP advertise attribute. */
bgp_advertise_unintern (peer->hash[afi][safi], baa);
+
+ fhead = &peer->sync[afi][safi]->update;
}
/* Unlink myself from advertisement FIFO. */
- FIFO_DEL (adv);
+ BGP_ADV_FIFO_DEL (fhead, adv);
/* Free memory. */
bgp_advertise_free (adj->adv);
@@ -263,7 +267,7 @@ bgp_adj_out_set (struct bgp_node *rn, struct peer *peer, struct prefix *p,
/* Add new advertisement to advertisement attribute list. */
bgp_advertise_add (adv->baa, adv);
- FIFO_ADD (&peer->sync[afi][safi]->update, &adv->fifo);
+ BGP_ADV_FIFO_ADD (&peer->sync[afi][safi]->update, &adv->fifo);
}
void
@@ -297,7 +301,7 @@ bgp_adj_out_unset (struct bgp_node *rn, struct peer *peer, struct prefix *p,
adv->adj = adj;
/* Add to synchronization entry for withdraw announcement. */
- FIFO_ADD (&peer->sync[afi][safi]->withdraw, &adv->fifo);
+ BGP_ADV_FIFO_ADD (&peer->sync[afi][safi]->withdraw, &adv->fifo);
/* Schedule packet write. */
BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
@@ -389,9 +393,9 @@ bgp_sync_init (struct peer *peer)
{
sync = XCALLOC (MTYPE_BGP_SYNCHRONISE,
sizeof (struct bgp_synchronize));
- FIFO_INIT (&sync->update);
- FIFO_INIT (&sync->withdraw);
- FIFO_INIT (&sync->withdraw_low);
+ BGP_ADV_FIFO_INIT (&sync->update);
+ BGP_ADV_FIFO_INIT (&sync->withdraw);
+ BGP_ADV_FIFO_INIT (&sync->withdraw_low);
peer->sync[afi][safi] = sync;
peer->hash[afi][safi] = hash_create (baa_hash_key, baa_hash_cmp);
}
diff --git a/bgpd/bgp_advertise.h b/bgpd/bgp_advertise.h
index 4ebde907db..672d42d8c6 100644
--- a/bgpd/bgp_advertise.h
+++ b/bgpd/bgp_advertise.h
@@ -26,6 +26,7 @@ struct bgp_advertise_fifo
{
struct bgp_advertise *next;
struct bgp_advertise *prev;
+ u_int32_t count;
};
/* BGP advertise attribute. */
@@ -127,6 +128,24 @@ struct bgp_synchronize
#define BGP_ADJ_OUT_ADD(N,A) BGP_INFO_ADD(N,A,adj_out)
#define BGP_ADJ_OUT_DEL(N,A) BGP_INFO_DEL(N,A,adj_out)
+#define BGP_ADV_FIFO_ADD(F, N) \
+ do { \
+ FIFO_ADD((F), (N)); \
+ (F)->count++; \
+ } while (0)
+
+#define BGP_ADV_FIFO_DEL(F, N) \
+ do { \
+ FIFO_DEL((N)); \
+ (F)->count--; \
+ } while (0)
+
+#define BGP_ADV_FIFO_INIT(F) \
+ do { \
+ FIFO_INIT((F)); \
+ (F)->count = 0; \
+ } while (0)
+
/* Prototypes. */
extern void bgp_adj_out_set (struct bgp_node *, struct peer *, struct prefix *,
struct attr *, afi_t, safi_t, struct bgp_info *);
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index c6fc9288d9..12e6b8b845 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -7174,7 +7174,7 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi, char *del
vty_out(vty, "%c", *delimit);
if (!delimit)
- vty_out (vty, "%5u %7d %7d %8d %4d %4lu",
+ vty_out (vty, "%5u %7d %7d %8d %4d %4lu ",
peer->as,
peer->open_in + peer->update_in + peer->keepalive_in
+ peer->notify_in + peer->refresh_in
@@ -7184,7 +7184,8 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi, char *del
+ peer->dynamic_cap_out,
0,
0,
- (unsigned long) peer->obuf->count);
+ peer->sync[afi][safi]->update.count +
+ peer->sync[afi][safi]->withdraw.count);
else
vty_out (vty, "%5u %c %7d %c %7d %c %8d %c %4d %c %4lu %c",
peer->as, *delimit,
@@ -7196,7 +7197,8 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi, char *del
+ peer->dynamic_cap_out, *delimit,
0, *delimit,
0, *delimit,
- (unsigned long) peer->obuf->count, *delimit);
+ peer->sync[afi][safi]->update.count +
+ peer->sync[afi][safi]->withdraw.count, *delimit);
vty_out (vty, "%8s",
peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN));