mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
BLE transport: recv buffer sizing, advertising interval, socket tuning, PHY logging
- Size receive buffer from negotiated recv_mtu instead of hardcoded 4096 (prevents silent truncation if MTU exceeds buffer size) - Set advertising interval to 400-600ms for deterministic behavior instead of depending on BlueZ driver defaults - Enable power_forced_active on L2CAP sockets to prevent sniff-mode latency spikes during data transfer (best-effort, logged on failure) - Log negotiated PHY and MTU at connection establishment for diagnostics
This commit is contained in:
@@ -165,6 +165,13 @@ mod bluer_impl {
|
||||
let recv_mtu = conn
|
||||
.recv_mtu()
|
||||
.map_err(|e| map_io_err("recv_mtu", e))? as u16;
|
||||
|
||||
// Log negotiated PHY for diagnostics (2M vs 1M)
|
||||
match conn.as_ref().phy() {
|
||||
Ok(phy) => debug!(addr = %remote, phy, send_mtu, recv_mtu, "BLE connection established"),
|
||||
Err(_) => debug!(addr = %remote, send_mtu, recv_mtu, "BLE connection established (PHY query unsupported)"),
|
||||
}
|
||||
|
||||
Ok(Self { conn, remote, send_mtu, recv_mtu })
|
||||
}
|
||||
}
|
||||
@@ -339,6 +346,11 @@ mod bluer_impl {
|
||||
.set_recv_mtu(self.mtu)
|
||||
.map_err(|e| map_io_err("set_recv_mtu", e))?;
|
||||
|
||||
// Prevent sniff mode to reduce latency during data transfer
|
||||
if let Err(e) = listener.as_ref().set_power_forced_active(true) {
|
||||
debug!(error = %e, "BLE listener: set_power_forced_active not supported");
|
||||
}
|
||||
|
||||
debug!(psm, mtu = self.mtu, "BLE listener bound");
|
||||
|
||||
Ok(BluerAcceptor {
|
||||
@@ -363,6 +375,11 @@ mod bluer_impl {
|
||||
.set_recv_mtu(self.mtu)
|
||||
.map_err(|e| map_io_err("set_recv_mtu", e))?;
|
||||
|
||||
// Prevent sniff mode to reduce latency during data transfer
|
||||
if let Err(e) = socket.set_power_forced_active(true) {
|
||||
debug!(error = %e, "BLE connect: set_power_forced_active not supported");
|
||||
}
|
||||
|
||||
let conn = socket
|
||||
.connect(target_sa)
|
||||
.await
|
||||
@@ -381,6 +398,8 @@ mod bluer_impl {
|
||||
s
|
||||
},
|
||||
local_name: Some("fips".to_string()),
|
||||
min_interval: Some(std::time::Duration::from_millis(400)),
|
||||
max_interval: Some(std::time::Duration::from_millis(600)),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
|
||||
@@ -401,6 +401,7 @@ impl<I: BleIo> BleTransport<I> {
|
||||
self.packet_tx.clone(),
|
||||
self.transport_id,
|
||||
Arc::clone(&self.stats),
|
||||
recv_mtu,
|
||||
));
|
||||
|
||||
let conn = BleConnection {
|
||||
@@ -491,6 +492,7 @@ impl<I: BleIo> BleTransport<I> {
|
||||
packet_tx,
|
||||
transport_id,
|
||||
Arc::clone(&stats),
|
||||
recv_mtu,
|
||||
));
|
||||
|
||||
let conn = BleConnection {
|
||||
@@ -757,6 +759,7 @@ async fn accept_loop<A>(
|
||||
packet_tx.clone(),
|
||||
transport_id,
|
||||
Arc::clone(&stats),
|
||||
recv_mtu,
|
||||
));
|
||||
|
||||
let conn = BleConnection {
|
||||
@@ -802,8 +805,9 @@ async fn receive_loop<S: BleStream>(
|
||||
packet_tx: PacketTx,
|
||||
transport_id: TransportId,
|
||||
stats: Arc<BleStats>,
|
||||
recv_mtu: u16,
|
||||
) {
|
||||
let mut buf = vec![0u8; 4096];
|
||||
let mut buf = vec![0u8; recv_mtu as usize];
|
||||
loop {
|
||||
match stream.recv(&mut buf).await {
|
||||
Ok(0) => {
|
||||
|
||||
Reference in New Issue
Block a user