From b64763a0542e4b77ed108e20b69a214d3a20fa70 Mon Sep 17 00:00:00 2001 From: Vincent Thiberville Date: Fri, 21 Jul 2023 11:05:48 +0200 Subject: [PATCH] feat: add backlog_wait_time_actual in status message This is a rather new field, seemingly present since the 5.9 kernel. --- src/status.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/status.rs b/src/status.rs index 9ead4f3..4af270f 100644 --- a/src/status.rs +++ b/src/status.rs @@ -20,7 +20,8 @@ const BACKLOG: Field = 28..32; pub const MINIMAL_STATUS_MESSAGE_LEN: usize = BACKLOG.end; const FEATURE_BITMAP: Field = 32..36; const BACKLOG_WAIT_TIME: Field = 36..40; -pub const MAXIMAL_STATUS_MESSAGE_LEN: usize = BACKLOG_WAIT_TIME.end; +const BACKLOG_WAIT_TIME_ACTUAL: Field = 36..40; +pub const MAXIMAL_STATUS_MESSAGE_LEN: usize = BACKLOG_WAIT_TIME_ACTUAL.end; #[derive(Debug, PartialEq, Eq, Clone, Default)] #[non_exhaustive] @@ -47,6 +48,8 @@ pub struct StatusMessage { pub feature_bitmap: Option, /// Message queue wait timeout pub backlog_wait_time: Option, + /// Time spent waiting while message limit exceeded + pub backlog_wait_time_actual: Option, } impl StatusMessage { @@ -139,6 +142,15 @@ impl> StatusMessageBuffer { Some(NativeEndian::read_u32(&buf[BACKLOG_WAIT_TIME])) } } + + pub fn backlog_wait_time_actual(&self) -> Option { + let buf = self.buffer.as_ref(); + if buf.len() < BACKLOG_WAIT_TIME_ACTUAL.end { + None + } else { + Some(NativeEndian::read_u32(&buf[BACKLOG_WAIT_TIME_ACTUAL])) + } + } } impl + AsMut<[u8]>> StatusMessageBuffer { @@ -187,6 +199,13 @@ impl + AsMut<[u8]>> StatusMessageBuffer { NativeEndian::write_u32(&mut buf[BACKLOG_WAIT_TIME], value) } } + + pub fn set_backlog_wait_time_actual(&mut self, value: u32) { + let buf = &mut self.buffer.as_mut(); + if buf.len() >= BACKLOG_WAIT_TIME_ACTUAL.end { + NativeEndian::write_u32(&mut buf[BACKLOG_WAIT_TIME_ACTUAL], value) + } + } } impl> Parseable> for StatusMessage { @@ -203,6 +222,7 @@ impl> Parseable> for StatusMessage { backlog: buf.backlog(), feature_bitmap: buf.feature_bitmap(), backlog_wait_time: buf.backlog_wait_time(), + backlog_wait_time_actual: buf.backlog_wait_time_actual(), }) } } @@ -228,5 +248,8 @@ impl Emitable for StatusMessage { if let Some(backlog_wait_time) = self.backlog_wait_time { buffer.set_backlog_wait_time(backlog_wait_time); } + if let Some(backlog_wait_time_actual) = self.backlog_wait_time_actual { + buffer.set_backlog_wait_time_actual(backlog_wait_time_actual); + } } }