From 8371ec0c073580f39ecfd8b8f4188c6feb68de2f Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 10 Mar 2026 15:58:58 +0000 Subject: [PATCH] oops --- rust/babblerd/src/lib.rs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/rust/babblerd/src/lib.rs b/rust/babblerd/src/lib.rs index fc87c960..885cc773 100644 --- a/rust/babblerd/src/lib.rs +++ b/rust/babblerd/src/lib.rs @@ -213,10 +213,11 @@ pub mod babel { } } - #[tracing::instrument(skip(read, write))] + #[tracing::instrument(skip(read, write, send))] async fn query( read: &mut Lines>, write: &mut OwnedWriteHalf, + send: &broadcast::Sender, cmd: &str, ) -> io::Result> { write.write_all(cmd.as_bytes()).await?; @@ -226,16 +227,24 @@ pub mod babel { return Ok(None); }; tracing::info!("[babel] {:?}", line); - if line == "ok" { - return Ok(Some(true)); + let ret = if line == "ok" { + Ok(Some(true)) } else if line == "bad" { tracing::warn!("malformed message sent to babeld"); - return Ok(Some(false)); + Ok(Some(false)) + } else { + Ok(None) + }; + let Ok(_) = send.send(line) else { + return Ok(None); + }; + if !matches!(ret, Ok(None)) { + return ret; } } } - #[tracing::instrument(skip(self, recv, send))] + #[tracing::instrument(skip_all)] async fn supervise( &self, mut recv: mpsc::Receiver, @@ -256,25 +265,26 @@ pub mod babel { } } tracing::info!("babeld ok"); + /* TODO(evan): push rather than pull if Self::query(&mut babel_lines, &mut writer, "monitor\n") .await? .is_none() { return Ok(()); }; + */ let mut interval = tokio::time::interval(Duration::from_secs(5)); interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay); loop { tokio::select! { _ = interval.tick() => { - if Self::query(&mut babel_lines, &mut writer, "dump\n") + if Self::query(&mut babel_lines, &mut writer, &send, "dump\n") .await? .is_none() { return Ok(()); }; - }, babble = recv.recv() => { tracing::debug!("[babble] {:?}", babble); @@ -283,10 +293,10 @@ pub mod babel { }; match babble { Babble::AddIface(iface) => { - Self::query(&mut babel_lines, &mut writer, format!("interface {iface}\n").as_ref()).await?; + Self::query(&mut babel_lines, &mut writer, &send, format!("interface {iface}\n").as_ref()).await?; } Babble::RemoveIface(iface) => { - Self::query(&mut babel_lines, &mut writer, format!("flush interface {iface}\n").as_ref()).await?; + Self::query(&mut babel_lines, &mut writer, &send, format!("flush interface {iface}\n").as_ref()).await?; } } },