mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 11:48:50 +00:00
bgpd: Reset message statistics with clear command
Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
This commit is contained in:
parent
b542c4a3c7
commit
3cb14f2605
@ -9430,7 +9430,7 @@ static int bgp_clear_prefix(struct vty *vty, const char *view_name,
|
|||||||
/* one clear bgp command to rule them all */
|
/* one clear bgp command to rule them all */
|
||||||
DEFUN (clear_ip_bgp_all,
|
DEFUN (clear_ip_bgp_all,
|
||||||
clear_ip_bgp_all_cmd,
|
clear_ip_bgp_all_cmd,
|
||||||
"clear [ip] bgp [<view|vrf> VIEWVRFNAME] [<ipv4|ipv6|l2vpn> [<unicast|multicast|vpn|labeled-unicast|flowspec|evpn>]] <*|A.B.C.D$neighbor|X:X::X:X$neighbor|WORD$neighbor|(1-4294967295)|external|peer-group PGNAME> [<soft [<in|out>]|in [prefix-filter]|out>]",
|
"clear [ip] bgp [<view|vrf> VIEWVRFNAME] [<ipv4|ipv6|l2vpn> [<unicast|multicast|vpn|labeled-unicast|flowspec|evpn>]] <*|A.B.C.D$neighbor|X:X::X:X$neighbor|WORD$neighbor|(1-4294967295)|external|peer-group PGNAME> [<soft [<in|out>]|in [prefix-filter]|out|message-stats>]",
|
||||||
CLEAR_STR
|
CLEAR_STR
|
||||||
IP_STR
|
IP_STR
|
||||||
BGP_STR
|
BGP_STR
|
||||||
@ -9452,7 +9452,8 @@ DEFUN (clear_ip_bgp_all,
|
|||||||
BGP_SOFT_OUT_STR
|
BGP_SOFT_OUT_STR
|
||||||
BGP_SOFT_IN_STR
|
BGP_SOFT_IN_STR
|
||||||
"Push out prefix-list ORF and do inbound soft reconfig\n"
|
"Push out prefix-list ORF and do inbound soft reconfig\n"
|
||||||
BGP_SOFT_OUT_STR)
|
BGP_SOFT_OUT_STR
|
||||||
|
"Reset message statistics\n")
|
||||||
{
|
{
|
||||||
char *vrf = NULL;
|
char *vrf = NULL;
|
||||||
|
|
||||||
@ -9509,7 +9510,7 @@ DEFUN (clear_ip_bgp_all,
|
|||||||
clr_sort = clear_external;
|
clr_sort = clear_external;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [<soft [<in|out>]|in [prefix-filter]|out>] */
|
/* [<soft [<in|out>]|in [prefix-filter]|out|message-stats>] */
|
||||||
if (argv_find(argv, argc, "soft", &idx)) {
|
if (argv_find(argv, argc, "soft", &idx)) {
|
||||||
if (argv_find(argv, argc, "in", &idx)
|
if (argv_find(argv, argc, "in", &idx)
|
||||||
|| argv_find(argv, argc, "out", &idx))
|
|| argv_find(argv, argc, "out", &idx))
|
||||||
@ -9524,6 +9525,8 @@ DEFUN (clear_ip_bgp_all,
|
|||||||
: BGP_CLEAR_SOFT_IN;
|
: BGP_CLEAR_SOFT_IN;
|
||||||
} else if (argv_find(argv, argc, "out", &idx)) {
|
} else if (argv_find(argv, argc, "out", &idx)) {
|
||||||
clr_type = BGP_CLEAR_SOFT_OUT;
|
clr_type = BGP_CLEAR_SOFT_OUT;
|
||||||
|
} else if (argv_find(argv, argc, "message-stats", &idx)) {
|
||||||
|
clr_type = BGP_CLEAR_MESSAGE_STATS;
|
||||||
} else
|
} else
|
||||||
clr_type = BGP_CLEAR_SOFT_NONE;
|
clr_type = BGP_CLEAR_SOFT_NONE;
|
||||||
|
|
||||||
|
32
bgpd/bgpd.c
32
bgpd/bgpd.c
@ -7509,6 +7509,34 @@ int peer_ttl_security_hops_unset(struct peer *peer)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void peer_reset_message_stats(struct peer *peer)
|
||||||
|
{
|
||||||
|
if (peer) {
|
||||||
|
atomic_store_explicit(&peer->open_in, 0, memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->open_out, 0, memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->update_in, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->update_out, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->keepalive_in, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->keepalive_out, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->notify_in, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->notify_out, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->refresh_in, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->refresh_out, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->dynamic_cap_in, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
atomic_store_explicit(&peer->dynamic_cap_out, 0,
|
||||||
|
memory_order_relaxed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If peer clear is invoked in a loop for all peers on the BGP instance,
|
* If peer clear is invoked in a loop for all peers on the BGP instance,
|
||||||
* it may end up freeing the doppelganger, and if this was the next node
|
* it may end up freeing the doppelganger, and if this was the next node
|
||||||
@ -7621,6 +7649,10 @@ int peer_clear_soft(struct peer *peer, afi_t afi, safi_t safi,
|
|||||||
return BGP_ERR_SOFT_RECONFIG_UNCONFIGURED;
|
return BGP_ERR_SOFT_RECONFIG_UNCONFIGURED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stype == BGP_CLEAR_MESSAGE_STATS)
|
||||||
|
peer_reset_message_stats(peer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1905,7 +1905,8 @@ enum bgp_clear_type {
|
|||||||
BGP_CLEAR_SOFT_OUT,
|
BGP_CLEAR_SOFT_OUT,
|
||||||
BGP_CLEAR_SOFT_IN,
|
BGP_CLEAR_SOFT_IN,
|
||||||
BGP_CLEAR_SOFT_BOTH,
|
BGP_CLEAR_SOFT_BOTH,
|
||||||
BGP_CLEAR_SOFT_IN_ORF_PREFIX
|
BGP_CLEAR_SOFT_IN_ORF_PREFIX,
|
||||||
|
BGP_CLEAR_MESSAGE_STATS
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Macros. */
|
/* Macros. */
|
||||||
|
Loading…
Reference in New Issue
Block a user