mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-07-19 22:38:09 -07:00
Implement review suggestions
Co-authored-by: Brad Warren <bmw@users.noreply.github.com>
This commit is contained in:
committed by
Will Greenberg
parent
7e1cd0ce09
commit
f3d694373f
@@ -1,11 +1,11 @@
|
|||||||
use deku::prelude::*;
|
use deku::prelude::*;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
#[derive(Debug, Clone, PartialEq, DekuRead, DekuWrite)]
|
||||||
#[deku(bit_order = "lsb", ctx = "_: deku::ctx::Order")]
|
#[deku(bit_order = "lsb")]
|
||||||
pub struct ServingCellTiming {
|
pub struct ServingCellTiming {
|
||||||
#[deku(assert_eq = "1")]
|
#[deku(assert_eq = "1")]
|
||||||
pub version: u8,
|
pub version: u8,
|
||||||
#[deku(bits = 5, assert = "*num_records <= 20")]
|
#[deku(bits = 5, assert = "(1..=20).contains(num_records)")]
|
||||||
pub num_records: u8,
|
pub num_records: u8,
|
||||||
#[deku(bits = 4, assert = "*starting_sub_fn <= 9")]
|
#[deku(bits = 4, assert = "*starting_sub_fn <= 9")]
|
||||||
pub starting_sub_fn: u8,
|
pub starting_sub_fn: u8,
|
||||||
@@ -25,7 +25,7 @@ pub struct ServingCellTiming {
|
|||||||
pub starting_ul_frame_timing_offs: u32, // in Ts units
|
pub starting_ul_frame_timing_offs: u32, // in Ts units
|
||||||
#[deku(bits = 11, pad_bits_after = "2")]
|
#[deku(bits = 11, pad_bits_after = "2")]
|
||||||
pub starting_ul_timing_advance: u16, // in 16 Ts units
|
pub starting_ul_timing_advance: u16, // in 16 Ts units
|
||||||
#[deku(count = "*num_records")]
|
#[deku(count = "num_records")]
|
||||||
pub timing_adjustment: Vec<TimingAdjustment>,
|
pub timing_adjustment: Vec<TimingAdjustment>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,6 +39,6 @@ pub struct TimingAdjustment {
|
|||||||
pub dl_frame_timing_adjustment: i16, // in Ts units
|
pub dl_frame_timing_adjustment: i16, // in Ts units
|
||||||
#[deku(bits = 5, assert = "(-16..=15).contains(ul_frame_timing_adjustment)")]
|
#[deku(bits = 5, assert = "(-16..=15).contains(ul_frame_timing_adjustment)")]
|
||||||
pub ul_frame_timing_adjustment: i8, // in Ts units
|
pub ul_frame_timing_adjustment: i8, // in Ts units
|
||||||
#[deku(bits = 8, assert = "(-128..=127).contains(timing_advance)")]
|
#[deku(assert = "(-128..=127).contains(timing_advance)")]
|
||||||
pub timing_advance: i8, // in 16 Ts units
|
pub timing_advance: i8, // in 16 Ts units
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-16
@@ -1,5 +1,5 @@
|
|||||||
//! Diag MAC RACH serialization/deserialization. As with most of our diag
|
//! Diag MAC RACH serialization/deserialization. As with most of our diag
|
||||||
//! parsers, these structs were derived SCAT:
|
//! parsers, these structs were derived from SCAT:
|
||||||
//! https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L853
|
//! https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L853
|
||||||
|
|
||||||
use deku::prelude::*;
|
use deku::prelude::*;
|
||||||
@@ -9,7 +9,7 @@ pub struct Packet {
|
|||||||
#[deku(assert_eq = "1")]
|
#[deku(assert_eq = "1")]
|
||||||
pub version: u8,
|
pub version: u8,
|
||||||
pub num_subpackets: u8,
|
pub num_subpackets: u8,
|
||||||
#[deku(pad_bytes_before = "2", count = "*num_subpackets")]
|
#[deku(pad_bytes_before = "2", count = "num_subpackets")]
|
||||||
pub subpackets: Vec<Subpacket>,
|
pub subpackets: Vec<Subpacket>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,11 +44,13 @@ pub mod rach {
|
|||||||
pub struct Attempt {
|
pub struct Attempt {
|
||||||
#[deku(ctx = "version")]
|
#[deku(ctx = "version")]
|
||||||
pub header: AttemptHeader,
|
pub header: AttemptHeader,
|
||||||
|
// since we may not have meaningful msg fields, they're marked private and the get_msg
|
||||||
|
// functions should be used instead
|
||||||
#[deku(ctx = "version")]
|
#[deku(ctx = "version")]
|
||||||
pub msg1: Msg1,
|
msg1: Msg1,
|
||||||
pub msg2: Msg2,
|
msg2: Msg2,
|
||||||
#[deku(ctx = "version")]
|
#[deku(ctx = "version")]
|
||||||
pub msg3: Msg3,
|
msg3: Msg3,
|
||||||
#[deku(cond = "version == 0x31 || version == 0x32")]
|
#[deku(cond = "version == 0x31 || version == 0x32")]
|
||||||
pub additional_info: Option<AdditionalInfo>,
|
pub additional_info: Option<AdditionalInfo>,
|
||||||
}
|
}
|
||||||
@@ -143,27 +145,33 @@ pub mod rach {
|
|||||||
|
|
||||||
impl Msg3 {
|
impl Msg3 {
|
||||||
pub fn get_grant(&self) -> u32 {
|
pub fn get_grant(&self) -> u32 {
|
||||||
match &self.grant {
|
match self.grant {
|
||||||
Msg3Grant::V1 { grant } => *grant & 0xfffff,
|
Msg3Grant::V1 { grant } => grant,
|
||||||
Msg3Grant::V32 { grant } => *grant & 0xfffff,
|
Msg3Grant::V32 { grant } => grant,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(DekuRead, DekuWrite, Debug, Clone, PartialEq)]
|
#[derive(DekuRead, DekuWrite, Debug, Clone, PartialEq)]
|
||||||
#[deku(ctx = "version: u8", id = "version")]
|
#[deku(ctx = "version: u8", id = "version")]
|
||||||
pub enum Msg3Grant {
|
pub enum Msg3Grant {
|
||||||
#[deku(id_pat = "0..0x32")]
|
#[deku(id_pat = "0..0x32")]
|
||||||
V1 {
|
V1 {
|
||||||
#[deku(endian = "little")]
|
#[deku(endian = "little", map = "Msg3Grant::map_grant")]
|
||||||
grant: u32,
|
grant: u32,
|
||||||
},
|
},
|
||||||
#[deku(id_pat = "0x32..")]
|
#[deku(id_pat = "0x32..")]
|
||||||
V32 {
|
V32 {
|
||||||
#[deku(endian = "big")]
|
#[deku(endian = "big", map = "Msg3Grant::map_grant")]
|
||||||
grant: u32,
|
grant: u32,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Msg3Grant {
|
||||||
|
fn map_grant(grant: u32) -> Result<u32, DekuError> {
|
||||||
|
Ok(grant & 0xfffff)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(DekuRead, DekuWrite, Debug, Clone, PartialEq)]
|
#[derive(DekuRead, DekuWrite, Debug, Clone, PartialEq)]
|
||||||
#[deku(ctx = "version: u8", id = "version")]
|
#[deku(ctx = "version: u8", id = "version")]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//! Diag ML1 measurement log serialization/deserialization. As with most of our
|
//! Diag ML1 measurement log serialization/deserialization. As with most of our
|
||||||
//! diag parsers, these structs were derived SCAT:
|
//! diag parsers, these structs were derived from SCAT:
|
||||||
//! Neighbor cell measurements: https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L192
|
//! Neighbor cell measurements: https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L192
|
||||||
//! Serving cell measurements: https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L114
|
//! Serving cell measurements: https://github.com/fgsect/scat/blob/9763cb5b1dcd5ee980f5b0ead9a8d520c8c51a51/src/scat/parsers/qualcomm/diagltelogparser.py#L114
|
||||||
|
|
||||||
@@ -27,7 +27,8 @@ pub mod serving_cell {
|
|||||||
pub header: MeasurementAndEvaluationHeader,
|
pub header: MeasurementAndEvaluationHeader,
|
||||||
#[deku(bits = 12, pad_bits_after = "20")]
|
#[deku(bits = 12, pad_bits_after = "20")]
|
||||||
meas_rsrp: u16,
|
meas_rsrp: u16,
|
||||||
avg_rsrp: u32,
|
#[deku(bits = 12, pad_bits_after = "20")]
|
||||||
|
avg_rsrp: u16,
|
||||||
#[deku(bits = 10, pad_bits_after = "22")]
|
#[deku(bits = 10, pad_bits_after = "22")]
|
||||||
meas_rsrq: u16,
|
meas_rsrq: u16,
|
||||||
#[deku(pad_bits_before = "10", bits = 11, pad_bits_after = "11")]
|
#[deku(pad_bits_before = "10", bits = 11, pad_bits_after = "11")]
|
||||||
@@ -170,7 +171,7 @@ pub mod neighbor_cells {
|
|||||||
#[deku(bits = 10, pad_bits_after = "10")]
|
#[deku(bits = 10, pad_bits_after = "10")]
|
||||||
avg_rsrq: u16,
|
avg_rsrq: u16,
|
||||||
#[deku(bits = 6, pad_bits_after = "6")]
|
#[deku(bits = 6, pad_bits_after = "6")]
|
||||||
s_rxlev: u16,
|
s_rxlev: u8,
|
||||||
n_freq_offset: u16,
|
n_freq_offset: u16,
|
||||||
val5: u16,
|
val5: u16,
|
||||||
ant0_offset: u32,
|
ant0_offset: u32,
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ pub enum LogBody {
|
|||||||
LteMacUl { packet: mac::Packet },
|
LteMacUl { packet: mac::Packet },
|
||||||
#[deku(id = "0xb114")]
|
#[deku(id = "0xb114")]
|
||||||
LteLl1ServingCellTiming {
|
LteLl1ServingCellTiming {
|
||||||
#[deku(ctx = "deku::ctx::Order::Lsb0")]
|
|
||||||
data: ll1::ServingCellTiming,
|
data: ll1::ServingCellTiming,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ pub enum RntiType {
|
|||||||
#[deku(id = "3")]
|
#[deku(id = "3")]
|
||||||
C,
|
C,
|
||||||
#[deku(id = "4")]
|
#[deku(id = "4")]
|
||||||
Ri,
|
Si,
|
||||||
#[deku(id = "5")]
|
#[deku(id = "5")]
|
||||||
Sps,
|
Sps,
|
||||||
#[deku(id = "6")]
|
#[deku(id = "6")]
|
||||||
@@ -106,13 +106,13 @@ pub fn mac_subpacket_to_gsmtap(
|
|||||||
ETRAPIDSubheader {
|
ETRAPIDSubheader {
|
||||||
extended: false,
|
extended: false,
|
||||||
type_field: true,
|
type_field: true,
|
||||||
rapid: msg1.get_preamble_index(),
|
rapid: msg1.get_preamble_index() & 0b111111
|
||||||
}
|
}
|
||||||
.to_bytes()?,
|
.to_bytes()?,
|
||||||
);
|
);
|
||||||
payload.extend(
|
payload.extend(
|
||||||
RACHResponse {
|
RACHResponse {
|
||||||
tac: msg2.ta,
|
tac: msg2.ta & 0b11111111111,
|
||||||
ul_grant: msg3.get_grant(),
|
ul_grant: msg3.get_grant(),
|
||||||
tc_rnti: msg2.tc_rnti,
|
tc_rnti: msg2.tc_rnti,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user