diff --git a/src/microReticulum/Transport.cpp b/src/microReticulum/Transport.cpp index 89b5238b..56245194 100644 --- a/src/microReticulum/Transport.cpp +++ b/src/microReticulum/Transport.cpp @@ -3853,7 +3853,7 @@ static void remote_status_pack_interface(MsgPack::Packer& p, const Interface& if // ignore unknown keys; clients that look for them get the receiving // interface's last reported signal-quality stats, with nil for "not // reported by this interface" (e.g. non-radio interfaces such as UDP). - p.packMapSize(18); + p.packMapSize(23); // Cache std::string values so .c_str() / .size() reference stable storage. const std::string name_str = iface.toString(); @@ -3901,6 +3901,20 @@ static void remote_status_pack_interface(MsgPack::Packer& p, const Interface& if p.pack("txb"); p.serialize(static_cast(iface.txbytes())); + // rnstatus 1.5.x reads these without a presence check: `mtu` whenever + // `bitrate` is set, and `txdrp` (then `txdrb`) unconditionally. There is no + // TX drop accounting here, so they report zero rather than crash the client. + p.pack("mtu"); + p.serialize(static_cast(iface.HW_MTU() > 0 ? iface.HW_MTU() : Type::Reticulum::MTU)); + p.pack("txdrp"); + p.serialize(static_cast(0)); + p.pack("txdrb"); + p.serialize(static_cast(0)); + p.pack("txbuffered"); + p.serialize(static_cast(0)); + p.pack("txstalled"); + p.serialize(static_cast(0)); + p.pack("rxs"); p.packFloat64(iface.current_rx_speed());