diff options
author | Mark Stapp <mjs@voltanet.io> | 2021-02-15 14:11:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-15 14:11:25 +0100 |
commit | b10e30232e5d7865ecae41f54f15fb3833546ebd (patch) | |
tree | 69c1122ae942ee8d80828f5d273b3c494b58ca54 /bgpd | |
parent | Merge pull request #8055 from Orange-OpenSource/ospf-sr (diff) | |
parent | bgpd: send correct BMP down message when nht fails (diff) | |
download | frr-b10e30232e5d7865ecae41f54f15fb3833546ebd.tar.xz frr-b10e30232e5d7865ecae41f54f15fb3833546ebd.zip |
Merge pull request #8067 from qlyoung/fix-bmp-incorrect-peer-down-message
bgpd: send correct BMP down message when nht fails
Diffstat (limited to 'bgpd')
-rw-r--r-- | bgpd/bgp_bmp.c | 15 | ||||
-rw-r--r-- | bgpd/bgp_bmp.h | 2 | ||||
-rw-r--r-- | bgpd/bgpd.h | 42 |
3 files changed, 55 insertions, 4 deletions
diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c index 82e27884c..c93713668 100644 --- a/bgpd/bgp_bmp.c +++ b/bgpd/bgp_bmp.c @@ -434,10 +434,19 @@ static struct stream *bmp_peerstate(struct peer *peer, bool down) case PEER_DOWN_CLOSE_SESSION: type = BMP_PEERDOWN_REMOTE_CLOSE; break; + case PEER_DOWN_WAITING_NHT: + type = BMP_PEERDOWN_LOCAL_FSM; + stream_putw(s, BGP_FSM_TcpConnectionFails); + break; + /* + * TODO: Map remaining PEER_DOWN_* reasons to RFC event codes. + * TODO: Implement BMP_PEERDOWN_LOCAL_NOTIFY. + * + * See RFC7854 ss. 4.9 + */ default: - type = BMP_PEERDOWN_LOCAL_NOTIFY; - stream_put(s, peer->last_reset_cause, - peer->last_reset_cause_size); + type = BMP_PEERDOWN_LOCAL_FSM; + stream_putw(s, BMP_PEER_DOWN_NO_RELEVANT_EVENT_CODE); break; } stream_putc_at(s, type_pos, type); diff --git a/bgpd/bgp_bmp.h b/bgpd/bgp_bmp.h index d6b22d0cb..2c3ba570e 100644 --- a/bgpd/bgp_bmp.h +++ b/bgpd/bgp_bmp.h @@ -269,6 +269,8 @@ struct bmp_bgp_peer { /* per struct bgp * data */ PREDECL_HASH(bmp_bgph) +#define BMP_PEER_DOWN_NO_RELEVANT_EVENT_CODE 0x00 + struct bmp_bgp { struct bmp_bgph_item bbi; diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 9f453bf1e..7a8f99163 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -921,7 +921,47 @@ struct bgp_peer_gr { bgp_peer_gr_action_ptr action_fun; }; -/* BGP finite state machine events. */ +/* + * BGP FSM event codes, per RFC 4271 ss. 8.1 + */ +enum bgp_fsm_rfc_codes { + BGP_FSM_ManualStart = 1, + BGP_FSM_ManualStop = 2, + BGP_FSM_AutomaticStart = 3, + BGP_FSM_ManualStart_with_PassiveTcpEstablishment = 4, + BGP_FSM_AutomaticStart_with_PassiveTcpEstablishment = 5, + BGP_FSM_AutomaticStart_with_DampPeerOscillations = 6, + BGP_FSM_AutomaticStart_with_DampPeerOscillations_and_PassiveTcpEstablishment = + 7, + BGP_FSM_AutomaticStop = 8, + BGP_FSM_ConnectRetryTimer_Expires = 9, + BGP_FSM_HoldTimer_Expires = 10, + BGP_FSM_KeepaliveTimer_Expires = 11, + BGP_FSM_DelayOpenTimer_Expires = 12, + BGP_FSM_IdleHoldTimer_Expires = 13, + BGP_FSM_TcpConnection_Valid = 14, + BGP_FSM_Tcp_CR_Invalid = 15, + BGP_FSM_Tcp_CR_Acked = 16, + BGP_FSM_TcpConnectionConfirmed = 17, + BGP_FSM_TcpConnectionFails = 18, + BGP_FSM_BGPOpen = 19, + BGP_FSM_BGPOpen_with_DelayOpenTimer_running = 20, + BGP_FSM_BGPHeaderErr = 21, + BGP_FSM_BGPOpenMsgErr = 22, + BGP_FSM_OpenCollisionDump = 23, + BGP_FSM_NotifMsgVerErr = 24, + BGP_FSM_NotifMsg = 25, + BGP_FSM_KeepAliveMsg = 26, + BGP_FSM_UpdateMsg = 27, + BGP_FSM_UpdateMsgErr = 28 +}; + +/* + * BGP finite state machine events + * + * Note: these do not correspond to RFC-defined event codes. Those are + * defined elsewhere. + */ enum bgp_fsm_events { BGP_Start = 1, BGP_Stop, |