From 6b07b4e460251549e8b04fb279f351c69cd04962 Mon Sep 17 00:00:00 2001 From: Will Greenberg Date: Wed, 30 Jul 2025 16:00:04 -0700 Subject: [PATCH] lib: support mac ul as well --- lib/src/diag.rs | 17 ++++++++++++++--- lib/src/gsmtap_parser.rs | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/src/diag.rs b/lib/src/diag.rs index 2a0eeb0..519dbfa 100644 --- a/lib/src/diag.rs +++ b/lib/src/diag.rs @@ -211,12 +211,14 @@ pub enum LogBody { msg: Vec, }, #[deku(id = "0xb063")] - LteMacDl { + LteMac { + #[deku(ctx = "log_type")] + direction: LteMacMessageDirection, version: u8, #[deku(pad_bytes_after = "2")] num_subpacket: u8, #[deku(count = "num_subpacket")] - subpackets: Vec, + subpackets: Vec, }, #[deku(id = "0x713a")] UmtsNasOtaMessage { @@ -233,7 +235,7 @@ pub enum LogBody { } #[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)] -pub struct LteMacDlSubpacket { +pub struct LteMacSubpacket { pub id: u8, pub version: u8, pub size: u16, @@ -241,6 +243,15 @@ pub struct LteMacDlSubpacket { pub data: Vec, } +#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)] +#[deku(ctx = "log_type: u16", id = "log_type")] +pub enum LteMacMessageDirection { + #[deku(id_pat = "0xb063")] + Downlink, + #[deku(id_pat = "0xb064")] + Uplink, +} + #[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)] #[deku(ctx = "log_type: u16", id = "log_type")] pub enum Nas4GMessageDirection { diff --git a/lib/src/gsmtap_parser.rs b/lib/src/gsmtap_parser.rs index e1c512b..65c2312 100644 --- a/lib/src/gsmtap_parser.rs +++ b/lib/src/gsmtap_parser.rs @@ -150,9 +150,9 @@ fn log_to_gsmtap(value: LogBody) -> Result, GsmtapParserEr payload: msg, })) }, - LogBody::LteMacDl { subpackets, .. } => { + LogBody::LteMac { direction, subpackets, .. } => { let mut header = GsmtapHeader::new(GsmtapType::LteMac); - header.uplink = false; + header.uplink = matches!(direction, LteMacMessageDirection::Uplink); let mut payload = Vec::new(); for packet in subpackets { payload.extend(packet.to_bytes().unwrap());