Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion reticulum-sidecar/patches/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ Ranked multi-path slots (up to 3 per destination) plus global / per-peer RF-vs-n

| Field | Value |
| ----- | ----- |
| **Base commit** | `70b7399` (+ prior mesh-client overlays) |
| **Base commit** | `b4c0358` (+ prior mesh-client overlays) |
| **Upstream PR** | none yet (mesh-client-local) |

**Touches:** `constants.rs`, `path_table.rs`, `messages.rs`, `actor/{inbound,mod,rpc,outbound,persistence}.rs`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
From: mesh-client
Subject: Exclude RF sinks from announce rebroadcast enqueue

With enable_transport, rebroadcasted mesh announces were enqueued onto every
eligible OUT iface including flow-controlled BLE RNodes. Host TX mpsc filled
while FC drained slowly. Local announces still use
broadcast_local_announce_on_interfaces (unchanged). Inlines iface_is_rf_sink
(RNode name or bitrate < 100 kbps).

diff --git a/crates/rns-transport/src/actor/mod.rs b/crates/rns-transport/src/actor/mod.rs
index e8f1d61..6bfa911 100644
--- a/crates/rns-transport/src/actor/mod.rs
+++ b/crates/rns-transport/src/actor/mod.rs
@@ -39,6 +39,16 @@ mod rpc;
@@ -40,6 +40,16 @@ mod rpc;
const LOCAL_LINK_INITIATOR_INTERFACE: InterfaceId = InterfaceId::MAX;
const LOCAL_LINK_RESPONDER_INTERFACE: InterfaceId = InterfaceId::MAX - 1;

Expand All @@ -27,10 +19,10 @@ diff --git a/crates/rns-transport/src/actor/mod.rs b/crates/rns-transport/src/ac
#[derive(Clone)]
struct LocalLinkRoute {
initiator_tx: mpsc::Sender<crate::link_messages::DestinationEvent>,
@@ -1700,6 +1710,11 @@ impl TransportActor {
/// optionally one). Eligibility mirrors Python's AP/roaming/boundary mode
@@ -1833,6 +1843,11 @@ impl TransportActor {
/// gates. Enqueueing lets `process_announce_queues` apply ANNOUNCE_CAP
/// spacing and hop priority.
/// spacing and hop priority. Python retains at most one queued entry per
/// destination, replacing it only when a newer announce is emitted.
+ ///
+ /// Flow-controlled RF sinks (RNode / low-bitrate) are skipped for
+ /// *rebroadcast* — transport-enabled leaves otherwise enqueue every mesh
Expand All @@ -39,7 +31,7 @@ diff --git a/crates/rns-transport/src/actor/mod.rs b/crates/rns-transport/src/ac
fn broadcast_announce_on_interfaces(&mut self, raw: &[u8], except: Option<InterfaceId>) {
let destination_hash = rns_wire::header::PacketHeader::unpack(raw)
.ok()
@@ -1711,10 +1726,20 @@ impl TransportActor {
@@ -1845,10 +1860,20 @@ impl TransportActor {
// shared Arc for free.
let shared = Bytes::copy_from_slice(raw);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
From: mesh-client
Subject: Expose host TX mpsc fill on GetInterfaceStats

Add tx_queue_used / tx_queue_max to InterfaceStatRpcEntry so mesh-client
can show live RNode outbound queue depth (and early buffering) without
scraping PACKET DROPPED logs.

diff --git a/crates/rns-runtime/src/remote_management.rs b/crates/rns-runtime/src/remote_management.rs
index ea0b8ba..e3b0479 100644
--- a/crates/rns-runtime/src/remote_management.rs
+++ b/crates/rns-runtime/src/remote_management.rs
@@ -551,6 +551,8 @@
@@ -551,6 +551,8 @@ mod tests {
announce_cap: 0.02,
ifac_size: 0,
tx_drops: 0,
Expand All @@ -18,9 +12,10 @@ diff --git a/crates/rns-runtime/src/remote_management.rs b/crates/rns-runtime/sr
TransportQueryResponse::InterfaceStats(stats)
}
diff --git a/crates/rns-runtime/src/reticulum.rs b/crates/rns-runtime/src/reticulum.rs
index e83762b..03bc46d 100644
--- a/crates/rns-runtime/src/reticulum.rs
+++ b/crates/rns-runtime/src/reticulum.rs
@@ -2089,6 +2089,8 @@
@@ -2090,6 +2090,8 @@ fn rpc_response_to_transport_response(
announce_cap: entry.announce_cap,
ifac_size: entry.ifac_size,
tx_drops: entry.tx_drops,
Expand All @@ -29,7 +24,7 @@ diff --git a/crates/rns-runtime/src/reticulum.rs b/crates/rns-runtime/src/reticu
})
.collect();
TransportQueryResponse::InterfaceStats(entries)
@@ -10268,6 +10270,8 @@
@@ -10318,6 +10320,8 @@ loglevel = 7
announce_cap: 0.02,
ifac_size: 0,
tx_drops: 0,
Expand All @@ -38,7 +33,7 @@ diff --git a/crates/rns-runtime/src/reticulum.rs b/crates/rns-runtime/src/reticu
};
let mut second = first.clone();
second.id = 2;
@@ -10413,6 +10417,8 @@
@@ -10463,6 +10467,8 @@ loglevel = 7
announce_cap: 0.02,
ifac_size: 0,
tx_drops: 0,
Expand All @@ -48,9 +43,10 @@ diff --git a/crates/rns-runtime/src/reticulum.rs b/crates/rns-runtime/src/reticu
let mut missing_mtu_interface = master_interface.clone();
missing_mtu_interface.id = 82;
diff --git a/crates/rns-runtime/src/rpc.rs b/crates/rns-runtime/src/rpc.rs
index c8bf0e4..e333fca 100644
--- a/crates/rns-runtime/src/rpc.rs
+++ b/crates/rns-runtime/src/rpc.rs
@@ -179,6 +179,10 @@
@@ -179,6 +179,10 @@ pub struct InterfaceStatEntry {
pub announce_cap: f64,
pub ifac_size: usize,
pub tx_drops: u64,
Expand All @@ -61,7 +57,7 @@ diff --git a/crates/rns-runtime/src/rpc.rs b/crates/rns-runtime/src/rpc.rs
}

#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -566,6 +570,8 @@
@@ -566,6 +570,8 @@ fn response_to_py_value(resp: &RpcResponse) -> PyValue {
.unwrap_or(PyValue::None),
),
("tx_drops", PyValue::Int(i128::from(e.tx_drops))),
Expand All @@ -70,7 +66,7 @@ diff --git a/crates/rns-runtime/src/rpc.rs b/crates/rns-runtime/src/rpc.rs
];
if let Some(blocked_ips) = e.blocked_ips {
fields.push(("blocked_ips", PyValue::Int(i128::from(blocked_ips))));
@@ -859,6 +865,8 @@
@@ -859,6 +865,8 @@ fn parse_interface_stats(value: &PyValue) -> Result<Vec<InterfaceStatEntry>, Rpc
.map(|v| v as usize)
.unwrap_or(0),
tx_drops: dict_get(m, "tx_drops").and_then(py_u64).unwrap_or(0),
Expand All @@ -79,7 +75,7 @@ diff --git a/crates/rns-runtime/src/rpc.rs b/crates/rns-runtime/src/rpc.rs
})
})
.collect()
@@ -1786,6 +1794,8 @@
@@ -1786,6 +1794,8 @@ mod tests {
announce_cap: 0.02,
ifac_size: 0,
tx_drops: 1,
Expand All @@ -89,9 +85,10 @@ diff --git a/crates/rns-runtime/src/rpc.rs b/crates/rns-runtime/src/rpc.rs
}

diff --git a/crates/rns-runtime/src/rpc_server.rs b/crates/rns-runtime/src/rpc_server.rs
index f7d945e..efa9a8f 100644
--- a/crates/rns-runtime/src/rpc_server.rs
+++ b/crates/rns-runtime/src/rpc_server.rs
@@ -404,6 +404,8 @@
@@ -404,6 +404,8 @@ async fn process_rpc_request(
announce_cap: e.announce_cap,
ifac_size: e.ifac_size,
tx_drops: e.tx_drops,
Expand All @@ -101,9 +98,10 @@ diff --git a/crates/rns-runtime/src/rpc_server.rs b/crates/rns-runtime/src/rpc_s
.collect();
RpcResponse::InterfaceStats(rpc_entries)
diff --git a/crates/rns-transport/src/actor/rpc.rs b/crates/rns-transport/src/actor/rpc.rs
index 2ec775d..1d900a0 100644
--- a/crates/rns-transport/src/actor/rpc.rs
+++ b/crates/rns-transport/src/actor/rpc.rs
@@ -120,6 +120,8 @@
@@ -120,6 +120,8 @@ impl TransportActor {
announce_cap: entry.announce_cap,
ifac_size: entry.ifac_size,
tx_drops: entry.tx_drops.load(std::sync::atomic::Ordering::Relaxed),
Expand All @@ -113,9 +111,10 @@ diff --git a/crates/rns-transport/src/actor/rpc.rs b/crates/rns-transport/src/ac
})
.collect();
diff --git a/crates/rns-transport/src/messages.rs b/crates/rns-transport/src/messages.rs
index 8d810ae..fff523f 100644
--- a/crates/rns-transport/src/messages.rs
+++ b/crates/rns-transport/src/messages.rs
@@ -884,6 +884,10 @@
@@ -1025,6 +1025,10 @@ pub struct InterfaceStatRpcEntry {
pub announce_cap: f64,
pub ifac_size: usize,
pub tx_drops: u64,
Expand Down
Loading