lib: add diag parsing for LTE MAC DL packets

This commit is contained in:
Will Greenberg
2025-07-30 15:43:02 -07:00
committed by Cooper Quintin
parent ed2781a4be
commit f8581559e7
4 changed files with 42 additions and 22 deletions
+17
View File
@@ -210,6 +210,14 @@ pub enum LogBody {
#[deku(count = "hdr_len.saturating_sub(8)")] #[deku(count = "hdr_len.saturating_sub(8)")]
msg: Vec<u8>, msg: Vec<u8>,
}, },
#[deku(id = "0xb063")]
LteMacDl {
version: u8,
#[deku(pad_bytes_after = "2")]
num_subpacket: u8,
#[deku(count = "num_subpacket")]
subpackets: Vec<LteMacDlSubpacket>,
},
#[deku(id = "0x713a")] #[deku(id = "0x713a")]
UmtsNasOtaMessage { UmtsNasOtaMessage {
is_uplink: u8, is_uplink: u8,
@@ -224,6 +232,15 @@ pub enum LogBody {
}, },
} }
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
pub struct LteMacDlSubpacket {
pub id: u8,
pub version: u8,
pub size: u16,
#[deku(count = "size - 4")]
pub data: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)] #[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
#[deku(ctx = "log_type: u16", id = "log_type")] #[deku(ctx = "log_type: u16", id = "log_type")]
pub enum Nas4GMessageDirection { pub enum Nas4GMessageDirection {
+15 -12
View File
@@ -40,22 +40,25 @@ pub enum DiagDeviceError {
ParseMessagesContainerError(deku::DekuError), ParseMessagesContainerError(deku::DekuError),
} }
pub const LOG_CODES_FOR_RAW_PACKET_LOGGING: [u32; 11] = [ pub const LOG_CODES_FOR_RAW_PACKET_LOGGING: [u32; 13] = [
// Layer 2: // Layer 2:
log_codes::LOG_GPRS_MAC_SIGNALLING_MESSAGE_C, // 0x5226 log_codes::LOG_GPRS_MAC_SIGNALLING_MESSAGE_C,
// Layer 3: // Layer 3:
log_codes::LOG_GSM_RR_SIGNALING_MESSAGE_C, // 0x512f log_codes::LOG_GSM_RR_SIGNALING_MESSAGE_C,
log_codes::WCDMA_SIGNALLING_MESSAGE, // 0x412f log_codes::WCDMA_SIGNALLING_MESSAGE,
log_codes::LOG_LTE_RRC_OTA_MSG_LOG_C, // 0xb0c0 log_codes::LOG_LTE_RRC_OTA_MSG_LOG_C,
log_codes::LOG_NR_RRC_OTA_MSG_LOG_C, // 0xb821 log_codes::LOG_NR_RRC_OTA_MSG_LOG_C,
// NAS: // NAS:
log_codes::LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C, // 0x713a log_codes::LOG_UMTS_NAS_OTA_MESSAGE_LOG_PACKET_C,
log_codes::LOG_LTE_NAS_ESM_OTA_IN_MSG_LOG_C, // 0xb0e2 log_codes::LOG_LTE_NAS_ESM_OTA_IN_MSG_LOG_C,
log_codes::LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C, // 0xb0e3 log_codes::LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C,
log_codes::LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C, // 0xb0ec log_codes::LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C,
log_codes::LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C, // 0xb0ed log_codes::LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C,
// MAC
log_codes::LOG_LTE_MAC_DL,
log_codes::LOG_LTE_MAC_UL,
// User IP traffic: // User IP traffic:
log_codes::LOG_DATA_PROTOCOL_LOGGING_C, // 0x11eb log_codes::LOG_DATA_PROTOCOL_LOGGING_C,
]; ];
const BUFFER_LEN: usize = 1024 * 1024 * 10; const BUFFER_LEN: usize = 1024 * 1024 * 10;
+7 -10
View File
@@ -13,16 +13,13 @@ pub enum GsmtapParserError {
} }
pub fn parse(msg: Message) -> Result<Option<(Timestamp, GsmtapMessage)>, GsmtapParserError> { pub fn parse(msg: Message) -> Result<Option<(Timestamp, GsmtapMessage)>, GsmtapParserError> {
if let Message::Log { let Message::Log { timestamp, body, .. } = msg else {
timestamp, body, .. return Ok(None);
} = msg };
{
match log_to_gsmtap(body)? { match log_to_gsmtap(body)? {
Some(msg) => Ok(Some((timestamp, msg))), Some(msg) => Ok(Some((timestamp, msg))),
None => Ok(None), None => Ok(None),
}
} else {
Ok(None)
} }
} }
+3
View File
@@ -36,6 +36,9 @@ pub const LOG_LTE_NAS_ESM_OTA_OUT_MSG_LOG_C: u32 = 0xb0e3;
pub const LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C: u32 = 0xb0ec; pub const LOG_LTE_NAS_EMM_OTA_IN_MSG_LOG_C: u32 = 0xb0ec;
pub const LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C: u32 = 0xb0ed; pub const LOG_LTE_NAS_EMM_OTA_OUT_MSG_LOG_C: u32 = 0xb0ed;
pub const LOG_LTE_MAC_DL: u32 = 0xb063;
pub const LOG_LTE_MAC_UL: u32 = 0xb064;
pub const LTE_BCCH_BCH_V0: u32 = 1; pub const LTE_BCCH_BCH_V0: u32 = 1;
pub const LTE_BCCH_DL_SCH_V0: u32 = 2; pub const LTE_BCCH_DL_SCH_V0: u32 = 2;
pub const LTE_MCCH_V0: u32 = 3; pub const LTE_MCCH_V0: u32 = 3;