diff options
Diffstat (limited to 'bgpd/bgp_vty.c')
| -rw-r--r-- | bgpd/bgp_vty.c | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 22fbb1bb21..550adf93db 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -9948,26 +9948,9 @@ DEFPY (af_label_vpn_export, UNSET_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_LABEL_MANUAL_REG); - } else if (CHECK_FLAG(bgp->vpn_policy[afi].flags, - BGP_VPN_POLICY_TOVPN_LABEL_AUTO)) { + } else if (CHECK_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_LABEL_AUTO)) /* release any previous auto label */ - if (bgp->vpn_policy[afi].tovpn_label != MPLS_LABEL_NONE) { - - /* - * label has previously been automatically - * assigned by labelpool: release it - * - * NB if tovpn_label == MPLS_LABEL_NONE it - * means the automatic assignment is in flight - * and therefore the labelpool callback must - * detect that the auto label is not needed. - */ - - bgp_lp_release(LP_TYPE_VRF, - &bgp->vpn_policy[afi], - bgp->vpn_policy[afi].tovpn_label); - } - } + bgp_vpn_release_label(bgp, afi, false); if (yes) { if (label_auto) { @@ -15481,9 +15464,12 @@ CPP_NOTICE("Remove `gracefulRestartCapability` JSON field") if (use_json) { json_object *json_stat = NULL; + json_object *json_pfx_stat = NULL; + json_stat = json_object_new_object(); - /* Packet counts. */ + json_pfx_stat = json_object_new_object(); + /* Packet counts. */ atomic_size_t outq_count, inq_count; outq_count = atomic_load_explicit(&p->connection->obuf->count, memory_order_relaxed); @@ -15533,6 +15519,16 @@ CPP_NOTICE("Remove `gracefulRestartCapability` JSON field") json_object_int_add(json_stat, "totalSent", PEER_TOTAL_TX(p)); json_object_int_add(json_stat, "totalRecv", PEER_TOTAL_RX(p)); json_object_object_add(json_neigh, "messageStats", json_stat); + + /* Prefix statistics */ + json_object_int_add(json_pfx_stat, "inboundFiltered", p->stat_pfx_filter); + json_object_int_add(json_pfx_stat, "aspathLoop", p->stat_pfx_aspath_loop); + json_object_int_add(json_pfx_stat, "originatorLoop", p->stat_pfx_originator_loop); + json_object_int_add(json_pfx_stat, "clusterLoop", p->stat_pfx_cluster_loop); + json_object_int_add(json_pfx_stat, "invalidNextHop", p->stat_pfx_nh_invalid); + json_object_int_add(json_pfx_stat, "withdrawn", p->stat_pfx_withdraw); + json_object_int_add(json_pfx_stat, "attributesDiscarded", p->stat_pfx_discard); + json_object_object_add(json_neigh, "prefixStats", json_pfx_stat); } else { atomic_size_t outq_count, inq_count, open_out, open_in, notify_out, notify_in, update_out, update_in, @@ -15584,8 +15580,18 @@ CPP_NOTICE("Remove `gracefulRestartCapability` JSON field") refresh_in); vty_out(vty, " Capability: %10zu %10zu\n", dynamic_cap_out, dynamic_cap_in); - vty_out(vty, " Total: %10u %10u\n", - (uint32_t)PEER_TOTAL_TX(p), (uint32_t)PEER_TOTAL_RX(p)); + vty_out(vty, " Total: %10u %10u\n\n", (uint32_t)PEER_TOTAL_TX(p), + (uint32_t)PEER_TOTAL_RX(p)); + + /* Prefix statistics */ + vty_out(vty, " Prefix statistics:\n"); + vty_out(vty, " Inbound filtered: %u\n", p->stat_pfx_filter); + vty_out(vty, " AS-PATH loop: %u\n", p->stat_pfx_aspath_loop); + vty_out(vty, " Originator loop: %u\n", p->stat_pfx_originator_loop); + vty_out(vty, " Cluster loop: %u\n", p->stat_pfx_cluster_loop); + vty_out(vty, " Invalid next-hop: %u\n", p->stat_pfx_nh_invalid); + vty_out(vty, " Withdrawn: %u\n", p->stat_pfx_withdraw); + vty_out(vty, " Attributes discarded: %u\n\n", p->stat_pfx_discard); } if (use_json) { |
