11// SPDX-License-Identifier: Apache-2.0
22// Copyright Open Network Fabric Authors
33
4- //! Minimal & safe renderer for NetGauze BMP messages into DataplaneStatus.
5- //! Keeps API usage conservative and aligned with the code you pasted.
4+ //! BMP message handlers to update internal DataplaneStatus model.
65
76use netgauze_bgp_pkt:: BgpMessage ;
8- use netgauze_bmp_pkt:: { BmpMessage , BmpPeerType } ;
97use netgauze_bmp_pkt:: v3:: {
108 BmpMessageValue , PeerDownNotificationMessage , PeerUpNotificationMessage ,
119 RouteMonitoringMessage , StatisticsReportMessage ,
1210} ;
11+ use netgauze_bmp_pkt:: { BmpMessage , BmpPeerType } ;
1312
1413use config:: internal:: status:: {
1514 BgpMessageCounters , BgpMessages , BgpNeighborPrefixes , BgpNeighborSessionState ,
1615 BgpNeighborStatus , BgpStatus , BgpVrfStatus , DataplaneStatus ,
1716} ;
1817
19- // -----------------------------------------------------------------------------
20- // Public entry points
21- // -----------------------------------------------------------------------------
22-
23- /// Backward-compat shim for older callers (typo in earlier drafts).
2418#[ inline]
2519pub fn hande_bmp_message ( status : & mut DataplaneStatus , msg : & BmpMessage ) {
2620 handle_bmp_message ( status, msg)
@@ -41,11 +35,6 @@ pub fn handle_bmp_message(status: &mut DataplaneStatus, msg: &BmpMessage) {
4135 BmpMessage :: V4 ( _) => { }
4236 }
4337}
44-
45- // -----------------------------------------------------------------------------
46- // Helpers: mapping / extraction
47- // -----------------------------------------------------------------------------
48-
4938fn key_from_peer_header ( peer : & netgauze_bmp_pkt:: PeerHeader ) -> String {
5039 // Build a stable-ish key: "<bgp_id>-<peer_as>-<ip|-none>-<rd?>"
5140 let id = peer. bgp_id ( ) ;
@@ -84,10 +73,7 @@ fn ensure_vrf<'a>(bgp: &'a mut BgpStatus, vrf: &str) -> &'a mut BgpVrfStatus {
8473 bgp. vrfs . entry ( vrf. to_string ( ) ) . or_default ( )
8574}
8675
87- fn ensure_neighbor < ' a > (
88- vrf : & ' a mut BgpVrfStatus ,
89- neigh_key : & str ,
90- ) -> & ' a mut BgpNeighborStatus {
76+ fn ensure_neighbor < ' a > ( vrf : & ' a mut BgpVrfStatus , neigh_key : & str ) -> & ' a mut BgpNeighborStatus {
9177 vrf. neighbors
9278 . entry ( neigh_key. to_string ( ) )
9379 . or_insert_with ( || BgpNeighborStatus {
@@ -109,10 +95,6 @@ fn post_policy_from_peer_type(pt: BmpPeerType) -> bool {
10995 }
11096}
11197
112- // -----------------------------------------------------------------------------
113- // Handlers
114- // -----------------------------------------------------------------------------
115-
11698fn on_peer_up ( status : & mut DataplaneStatus , pu : & PeerUpNotificationMessage ) {
11799 let peer = pu. peer_header ( ) ;
118100 let vrf = get_vrf_from_peer_header ( peer) ;
@@ -127,13 +109,10 @@ fn on_peer_up(status: &mut DataplaneStatus, pu: &PeerUpNotificationMessage) {
127109 neigh. remote_router_id = peer. bgp_id ( ) . to_string ( ) ;
128110 neigh. peer_port = pu. remote_port ( ) . unwrap_or_default ( ) as u32 ;
129111 set_neighbor_session_state ( neigh, BgpNeighborSessionState :: Established ) ;
130-
131- // Optional: try to infer local_as from the OPEN we sent (kept simple)
132112 if let BgpMessage :: Open ( open) = pu. sent_message ( ) {
133113 neigh. local_as = open. my_as ( ) as u32 ;
134114 }
135115
136- // Initialize empty message counters on establishment
137116 if neigh. messages . is_none ( ) {
138117 neigh. messages = Some ( BgpMessages {
139118 received : Some ( BgpMessageCounters :: new ( ) ) ,
@@ -187,9 +166,7 @@ fn on_route_monitoring(status: &mut DataplaneStatus, rm: &RouteMonitoringMessage
187166
188167 // We don't parse NLRI depth here; increment by 1 as a placeholder per RM message
189168 if post {
190- pref. received_pre_policy = pref
191- . received_pre_policy
192- . saturating_add ( 0 ) ; // post-policy => don't bump pre
169+ pref. received_pre_policy = pref. received_pre_policy . saturating_add ( 0 ) ; // post-policy => don't bump pre
193170 pref. received = pref. received . saturating_add ( 1 ) ;
194171 } else {
195172 pref. received_pre_policy = pref. received_pre_policy . saturating_add ( 1 ) ;
@@ -212,6 +189,5 @@ fn on_statistics(status: &mut DataplaneStatus, sr: &StatisticsReportMessage) {
212189 sent : Some ( BgpMessageCounters :: new ( ) ) ,
213190 } ) ;
214191
215- // You can walk `sr.counters()` and map specific statistics to your model later.
216- // For now, we keep StatisticsReport as a no-op for counters.
192+ //TODO: smatov: add more later
217193}
0 commit comments