mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 16:04:49 +00:00
bgpd: bgp instance administrative shutdown.
* Fixed integration in FSM and packet handling. * Added CLI "show" output, incl. JSON. * For review and testing only. Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
This commit is contained in:
parent
9cf5943257
commit
cb9196e77a
@ -1548,6 +1548,8 @@ int bgp_start(struct peer *peer)
|
|||||||
peer->host);
|
peer->host);
|
||||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
|
||||||
peer->last_reset = PEER_DOWN_USER_SHUTDOWN;
|
peer->last_reset = PEER_DOWN_USER_SHUTDOWN;
|
||||||
|
else if (CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
|
peer->last_reset = PEER_DOWN_USER_SHUTDOWN;
|
||||||
else if (CHECK_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
|
else if (CHECK_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
|
||||||
peer->last_reset = PEER_DOWN_PFX_COUNT;
|
peer->last_reset = PEER_DOWN_PFX_COUNT;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -459,7 +459,8 @@ static int bgp_accept(struct thread *thread)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CHECK_FLAG(peer1->flags, PEER_FLAG_SHUTDOWN)) {
|
if (CHECK_FLAG(peer1->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(peer1->bgp->flags, BGP_FLAG_SHUTDOWN)) {
|
||||||
if (bgp_debug_neighbor_events(peer1))
|
if (bgp_debug_neighbor_events(peer1))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"[Event] connection from %s rejected(%s:%u:%s) due to admin shutdown",
|
"[Event] connection from %s rejected(%s:%u:%s) due to admin shutdown",
|
||||||
|
@ -198,6 +198,8 @@ void bgp_check_update_delay(struct bgp *bgp)
|
|||||||
PEER_FLAG_CONFIG_NODE)
|
PEER_FLAG_CONFIG_NODE)
|
||||||
&& !CHECK_FLAG(peer->flags,
|
&& !CHECK_FLAG(peer->flags,
|
||||||
PEER_FLAG_SHUTDOWN)
|
PEER_FLAG_SHUTDOWN)
|
||||||
|
&& !CHECK_FLAG(peer->bgp->flags,
|
||||||
|
BGP_FLAG_SHUTDOWN)
|
||||||
&& !peer->update_delay_over) {
|
&& !peer->update_delay_over) {
|
||||||
if (bgp_debug_neighbor_events(peer))
|
if (bgp_debug_neighbor_events(peer))
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
|
@ -9355,7 +9355,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
|||||||
json_object_int_add(json_peer,
|
json_object_int_add(json_peer,
|
||||||
"pfxSnt",
|
"pfxSnt",
|
||||||
(PAF_SUBGRP(paf))->scount);
|
(PAF_SUBGRP(paf))->scount);
|
||||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
json_object_string_add(json_peer, "state",
|
json_object_string_add(json_peer, "state",
|
||||||
"Idle (Admin)");
|
"Idle (Admin)");
|
||||||
else if (peer->afc_recv[afi][safi])
|
else if (peer->afc_recv[afi][safi])
|
||||||
@ -9474,7 +9475,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
|||||||
->scount);
|
->scount);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
vty_out(vty, " Idle (Admin)");
|
vty_out(vty, " Idle (Admin)");
|
||||||
else if (CHECK_FLAG(
|
else if (CHECK_FLAG(
|
||||||
peer->sflags,
|
peer->sflags,
|
||||||
@ -10971,7 +10973,8 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
|
|||||||
|
|
||||||
if (use_json) {
|
if (use_json) {
|
||||||
/* Administrative shutdown. */
|
/* Administrative shutdown. */
|
||||||
if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(p->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
json_object_boolean_true_add(json_neigh,
|
json_object_boolean_true_add(json_neigh,
|
||||||
"adminShutDown");
|
"adminShutDown");
|
||||||
|
|
||||||
@ -11077,7 +11080,8 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Administrative shutdown. */
|
/* Administrative shutdown. */
|
||||||
if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(p->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
vty_out(vty, " Administratively shut down\n");
|
vty_out(vty, " Administratively shut down\n");
|
||||||
|
|
||||||
/* BGP Version. */
|
/* BGP Version. */
|
||||||
@ -13651,7 +13655,8 @@ static int bgp_show_one_peer_group(struct vty *vty, struct peer_group *group)
|
|||||||
if (listcount(group->peer)) {
|
if (listcount(group->peer)) {
|
||||||
vty_out(vty, " Peer-group members:\n");
|
vty_out(vty, " Peer-group members:\n");
|
||||||
for (ALL_LIST_ELEMENTS(group->peer, node, nnode, peer)) {
|
for (ALL_LIST_ELEMENTS(group->peer, node, nnode, peer)) {
|
||||||
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
|
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
peer_status = "Idle (Admin)";
|
peer_status = "Idle (Admin)";
|
||||||
else if (CHECK_FLAG(peer->sflags,
|
else if (CHECK_FLAG(peer->sflags,
|
||||||
PEER_STATUS_PREFIX_OVERFLOW))
|
PEER_STATUS_PREFIX_OVERFLOW))
|
||||||
|
@ -6834,7 +6834,8 @@ int peer_ttl_security_hops_unset(struct peer *peer)
|
|||||||
*/
|
*/
|
||||||
int peer_clear(struct peer *peer, struct listnode **nnode)
|
int peer_clear(struct peer *peer, struct listnode **nnode)
|
||||||
{
|
{
|
||||||
if (!CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)) {
|
if (!CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)
|
||||||
|
|| !CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHUTDOWN)) {
|
||||||
if (CHECK_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW)) {
|
if (CHECK_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW)) {
|
||||||
UNSET_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW);
|
UNSET_FLAG(peer->sflags, PEER_STATUS_PREFIX_OVERFLOW);
|
||||||
if (peer->t_pmax_restart) {
|
if (peer->t_pmax_restart) {
|
||||||
|
@ -1463,7 +1463,8 @@ DECLARE_QOBJ_TYPE(peer)
|
|||||||
/* Check if suppress start/restart of sessions to peer. */
|
/* Check if suppress start/restart of sessions to peer. */
|
||||||
#define BGP_PEER_START_SUPPRESSED(P) \
|
#define BGP_PEER_START_SUPPRESSED(P) \
|
||||||
(CHECK_FLAG((P)->flags, PEER_FLAG_SHUTDOWN) \
|
(CHECK_FLAG((P)->flags, PEER_FLAG_SHUTDOWN) \
|
||||||
|| CHECK_FLAG((P)->sflags, PEER_STATUS_PREFIX_OVERFLOW))
|
|| CHECK_FLAG((P)->sflags, PEER_STATUS_PREFIX_OVERFLOW) \
|
||||||
|
|| CHECK_FLAG((P)->bgp->flags, BGP_FLAG_SHUTDOWN))
|
||||||
|
|
||||||
#define PEER_PASSWORD_MINLEN (1)
|
#define PEER_PASSWORD_MINLEN (1)
|
||||||
#define PEER_PASSWORD_MAXLEN (80)
|
#define PEER_PASSWORD_MAXLEN (80)
|
||||||
|
Loading…
Reference in New Issue
Block a user