Skip to content

Commit 51e56a8

Browse files
committed
dbg: add debug logs
Signed-off-by: Sergey Matov <sergey.matov@githedgehog.com>
1 parent 7548ecd commit 51e56a8

File tree

3 files changed

+123
-16
lines changed

3 files changed

+123
-16
lines changed

routing/src/bmp/bmp_render.rs

Lines changed: 112 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ use config::internal::status::{
1515
BgpNeighborStatus, BgpStatus, BgpVrfStatus, DataplaneStatus,
1616
};
1717

18+
use tracing::debug;
19+
1820
/// Update `DataplaneStatus` from a single BMP message.
1921
pub fn handle_bmp_message(status: &mut DataplaneStatus, msg: &BmpMessage) {
2022
match msg {
@@ -60,15 +62,22 @@ fn set_neighbor_session_state(n: &mut BgpNeighborStatus, st: BgpNeighborSessionS
6062
fn ensure_bgp(status: &mut DataplaneStatus) -> &mut BgpStatus {
6163
if status.bgp.is_none() {
6264
status.bgp = Some(BgpStatus::default());
65+
debug!("BMP: initialized DataplaneStatus.bgp");
6366
}
6467
status.bgp.as_mut().unwrap()
6568
}
6669

6770
fn ensure_vrf<'a>(bgp: &'a mut BgpStatus, vrf: &str) -> &'a mut BgpVrfStatus {
71+
if !bgp.vrfs.contains_key(vrf) {
72+
debug!("BMP: creating VRF status entry: vrf={vrf}");
73+
}
6874
bgp.vrfs.entry(vrf.to_string()).or_default()
6975
}
7076

7177
fn ensure_neighbor<'a>(vrf: &'a mut BgpVrfStatus, neigh_key: &str) -> &'a mut BgpNeighborStatus {
78+
if !vrf.neighbors.contains_key(neigh_key) {
79+
debug!("BMP: creating neighbor status entry: key={neigh_key}");
80+
}
7281
vrf.neighbors
7382
.entry(neigh_key.to_string())
7483
.or_insert_with(|| BgpNeighborStatus {
@@ -95,14 +104,25 @@ fn on_peer_up(status: &mut DataplaneStatus, pu: &PeerUpNotificationMessage) {
95104
let vrf = get_vrf_from_peer_header(peer);
96105
let key = key_from_peer_header(peer);
97106

107+
let peer_as = peer.peer_as();
108+
let bgp_id = peer.bgp_id().to_string();
109+
let peer_addr = peer.address().map(|a| a.to_string()).unwrap_or_else(|| "none".to_string());
110+
let peer_port = pu.remote_port().unwrap_or_default() as u32;
111+
98112
let bgp = ensure_bgp(status);
99113
let vrf_s = ensure_vrf(bgp, &vrf);
100114
let neigh = ensure_neighbor(vrf_s, &key);
101115

116+
let prev_state = neigh.session_state;
117+
let prev_peer_as = neigh.peer_as;
118+
let prev_remote_id = neigh.remote_router_id.clone();
119+
let prev_peer_port = neigh.peer_port;
120+
let prev_local_as = neigh.local_as;
121+
102122
// Update some basic fields we know now
103-
neigh.peer_as = peer.peer_as();
104-
neigh.remote_router_id = peer.bgp_id().to_string();
105-
neigh.peer_port = pu.remote_port().unwrap_or_default() as u32;
123+
neigh.peer_as = peer_as;
124+
neigh.remote_router_id = bgp_id.clone();
125+
neigh.peer_port = peer_port;
106126
set_neighbor_session_state(neigh, BgpNeighborSessionState::Established);
107127
if let BgpMessage::Open(open) = pu.sent_message() {
108128
neigh.local_as = open.my_as() as u32;
@@ -113,7 +133,28 @@ fn on_peer_up(status: &mut DataplaneStatus, pu: &PeerUpNotificationMessage) {
113133
received: Some(BgpMessageCounters::new()),
114134
sent: Some(BgpMessageCounters::new()),
115135
});
136+
debug!(
137+
"BMP: dp_status push: created message counters (peer-up) vrf={} key={}",
138+
vrf, key
139+
);
116140
}
141+
142+
debug!(
143+
"BMP: dp_status push (peer-up) vrf={} key={} peer_addr={} prev_state={:?} new_state={:?} prev_peer_as={} new_peer_as={} prev_remote_id={} new_remote_id={} prev_peer_port={} new_peer_port={} prev_local_as={} new_local_as={}",
144+
vrf,
145+
key,
146+
peer_addr,
147+
prev_state,
148+
neigh.session_state,
149+
prev_peer_as,
150+
neigh.peer_as,
151+
prev_remote_id,
152+
neigh.remote_router_id,
153+
prev_peer_port,
154+
neigh.peer_port,
155+
prev_local_as,
156+
neigh.local_as,
157+
);
117158
}
118159

119160
fn on_peer_down(status: &mut DataplaneStatus, pd: &PeerDownNotificationMessage) {
@@ -124,10 +165,29 @@ fn on_peer_down(status: &mut DataplaneStatus, pd: &PeerDownNotificationMessage)
124165
if let Some(bgp) = status.bgp.as_mut() {
125166
if let Some(vrf_s) = bgp.vrfs.get_mut(&vrf) {
126167
if let Some(neigh) = vrf_s.neighbors.get_mut(&key) {
168+
let prev_state = neigh.session_state;
169+
let prev_dropped = neigh.connections_dropped;
170+
127171
set_neighbor_session_state(neigh, BgpNeighborSessionState::Idle);
128172
neigh.connections_dropped = neigh.connections_dropped.saturating_add(1);
173+
174+
debug!(
175+
"BMP: dp_status push (peer-down) vrf={} key={} prev_state={:?} new_state={:?} prev_connections_dropped={} new_connections_dropped={}",
176+
vrf,
177+
key,
178+
prev_state,
179+
neigh.session_state,
180+
prev_dropped,
181+
neigh.connections_dropped
182+
);
183+
} else {
184+
debug!("BMP: peer-down for unknown neighbor: vrf={} key={}", vrf, key);
129185
}
186+
} else {
187+
debug!("BMP: peer-down for unknown vrf: vrf={} key={}", vrf, key);
130188
}
189+
} else {
190+
debug!("BMP: peer-down but DataplaneStatus.bgp is None (vrf={} key={})", vrf, key);
131191
}
132192
}
133193

@@ -136,29 +196,46 @@ fn on_route_monitoring(status: &mut DataplaneStatus, rm: &RouteMonitoringMessage
136196
let vrf = get_vrf_from_peer_header(peer);
137197
let key = key_from_peer_header(peer);
138198

199+
let post = post_policy_from_peer_type(peer.peer_type());
200+
139201
let bgp = ensure_bgp(status);
140202
let vrf_s = ensure_vrf(bgp, &vrf);
141203
let neigh = ensure_neighbor(vrf_s, &key);
142204

143205
// Ensure message counters exist
144-
let msgs = neigh.messages.get_or_insert_with(|| BgpMessages {
145-
received: Some(BgpMessageCounters::new()),
146-
sent: Some(BgpMessageCounters::new()),
206+
let msgs = neigh.messages.get_or_insert_with(|| {
207+
debug!(
208+
"BMP: dp_status push: created message counters (route-monitoring) vrf={} key={}",
209+
vrf, key
210+
);
211+
BgpMessages {
212+
received: Some(BgpMessageCounters::new()),
213+
sent: Some(BgpMessageCounters::new()),
214+
}
147215
});
148216

149217
// Count UPDATE messages received
218+
let mut bumped_update = false;
219+
let mut prev_update = None;
220+
let mut new_update = None;
221+
150222
if let BgpMessage::Update(_) = rm.update_message() {
151223
if let Some(rcv) = msgs.received.as_mut() {
224+
prev_update = Some(rcv.update);
152225
rcv.update = rcv.update.saturating_add(1);
226+
new_update = Some(rcv.update);
227+
bumped_update = true;
153228
}
154229
}
155230

156231
// Very rough pre/post-policy NLRI accounting example
157-
let post = post_policy_from_peer_type(peer.peer_type());
158232
let pref = neigh
159233
.ipv4_unicast_prefixes
160234
.get_or_insert_with(BgpNeighborPrefixes::default);
161235

236+
let prev_received = pref.received;
237+
let prev_received_pre = pref.received_pre_policy;
238+
162239
// We don't parse NLRI depth here; increment by 1 as a placeholder per RM message
163240
if post {
164241
pref.received_pre_policy = pref.received_pre_policy.saturating_add(0); // post-policy => don't bump pre
@@ -167,6 +244,20 @@ fn on_route_monitoring(status: &mut DataplaneStatus, rm: &RouteMonitoringMessage
167244
pref.received_pre_policy = pref.received_pre_policy.saturating_add(1);
168245
pref.received = pref.received.saturating_add(1);
169246
}
247+
248+
debug!(
249+
"BMP: dp_status push (route-monitoring) vrf={} key={} post_policy={} update_bumped={} update_prev={:?} update_new={:?} ipv4_received_prev={} ipv4_received_new={} ipv4_received_pre_prev={} ipv4_received_pre_new={}",
250+
vrf,
251+
key,
252+
post,
253+
bumped_update,
254+
prev_update,
255+
new_update,
256+
prev_received,
257+
pref.received,
258+
prev_received_pre,
259+
pref.received_pre_policy
260+
);
170261
}
171262

172263
fn on_statistics(status: &mut DataplaneStatus, sr: &StatisticsReportMessage) {
@@ -179,10 +270,21 @@ fn on_statistics(status: &mut DataplaneStatus, sr: &StatisticsReportMessage) {
179270
let neigh = ensure_neighbor(vrf_s, &key);
180271

181272
// Make sure we have message counters present
182-
let _ = neigh.messages.get_or_insert_with(|| BgpMessages {
183-
received: Some(BgpMessageCounters::new()),
184-
sent: Some(BgpMessageCounters::new()),
273+
let _ = neigh.messages.get_or_insert_with(|| {
274+
debug!(
275+
"BMP: dp_status push: created message counters (statistics-report) vrf={} key={}",
276+
vrf, key
277+
);
278+
BgpMessages {
279+
received: Some(BgpMessageCounters::new()),
280+
sent: Some(BgpMessageCounters::new()),
281+
}
185282
});
186283

284+
debug!(
285+
"BMP: dp_status push (statistics-report) vrf={} key={} (TODO: decode stats later)",
286+
vrf, key
287+
);
288+
187289
//TODO: smatov: add more later
188290
}

routing/src/bmp/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use concurrency::sync::{Arc, RwLock};
1212
use config::internal::status::DataplaneStatus;
1313
use netgauze_bmp_pkt::BmpMessage;
1414
use tokio::task::JoinHandle;
15-
use tracing::{error, info};
15+
use tracing::{error, info, debug};
1616

1717
/// Background BMP server runner that updates shared dataplane status.
1818
pub struct StatusHandler {
@@ -28,11 +28,14 @@ impl StatusHandler {
2828
#[async_trait::async_trait]
2929
impl handler::BmpHandler for StatusHandler {
3030
async fn on_message(&self, _peer: std::net::SocketAddr, msg: BmpMessage) {
31-
let mut guard = self
32-
.dp_status
33-
.write()
34-
.expect("dataplane status lock poisoned");
35-
bmp_render::handle_bmp_message(&mut *guard, &msg);
31+
{
32+
let mut guard = self
33+
.dp_status
34+
.write()
35+
.expect("dataplane status lock poisoned");
36+
bmp_render::handle_bmp_message(&mut *guard, &msg);
37+
}
38+
debug!("BMP: released dataplane status write guard after handling message");
3639
}
3740
}
3841

routing/src/bmp/server.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use tokio::net::{TcpListener, TcpStream};
1616
use tokio::task::JoinSet;
1717
use tokio_util::codec::FramedRead;
1818

19+
use tracing::debug;
1920
use crate::bmp::handler::BmpHandler;
2021

2122
#[derive(Clone, Debug)]
@@ -110,6 +111,7 @@ async fn handle_peer<H: BmpHandler>(
110111
while let Some(frame) = reader.next().await {
111112
match frame {
112113
Ok(msg) => {
114+
debug!("BMP: received message from {}: {:?}", peer, msg);
113115
// netgauze_bmp_pkt::BmpMessage for both v3 and v4. TODO: smatov: v4 handling
114116
handler.on_message(peer, msg).await;
115117
}

0 commit comments

Comments
 (0)