summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2021-02-15 14:11:25 +0100
committerGitHub <noreply@github.com>2021-02-15 14:11:25 +0100
commitb10e30232e5d7865ecae41f54f15fb3833546ebd (patch)
tree69c1122ae942ee8d80828f5d273b3c494b58ca54 /bgpd
parentMerge pull request #8055 from Orange-OpenSource/ospf-sr (diff)
parentbgpd: send correct BMP down message when nht fails (diff)
downloadfrr-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.c15
-rw-r--r--bgpd/bgp_bmp.h2
-rw-r--r--bgpd/bgpd.h42
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,