diff --git a/orca/src/diag_device.rs b/orca/src/diag_device.rs index 574c083..1b1d471 100644 --- a/orca/src/diag_device.rs +++ b/orca/src/diag_device.rs @@ -58,8 +58,16 @@ pub const LOG_CODES_FOR_RAW_PACKET_LOGGING: [u32; 11] = [ const BUFFER_LEN: usize = 1024 * 1024 * 10; const MEMORY_DEVICE_MODE: i32 = 2; + +#[cfg(target_arch = "arm")] const DIAG_IOCTL_REMOTE_DEV: u32 = 32; +#[cfg(target_arch = "x86_64")] +const DIAG_IOCTL_REMOTE_DEV: u64 = 32; + +#[cfg(target_arch = "arm")] const DIAG_IOCTL_SWITCH_LOGGING: u32 = 7; +#[cfg(target_arch = "x86_64")] +const DIAG_IOCTL_SWITCH_LOGGING: u64 = 7; pub struct DiagDevice { file: File, @@ -80,7 +88,7 @@ impl DiagReader for DiagDevice { } let ((leftover_bytes, _), container) = MessagesContainer::from_bytes((&self.read_buf[0..bytes_read], 0)) .map_err(DiagDeviceError::ParseMessagesContainerError)?; - if leftover_bytes.len() > 0 { + if !leftover_bytes.is_empty() { warn!("warning: {} leftover bytes when parsing MessagesContainer", leftover_bytes.len()); } @@ -134,7 +142,7 @@ impl DiagDevice { data_type: DataType::UserSpace, use_mdm: self.use_mdm > 0, mdm_field: -1, - hdlc_encapsulated_request: hdlc_encapsulate(&req_bytes, &CRC_CCITT), + hdlc_encapsulated_request: hdlc_encapsulate(req_bytes, &CRC_CCITT), }.to_bytes().expect("Failed to serialize RequestContainer"); unsafe { let fd = self.file.as_raw_fd(); @@ -212,10 +220,10 @@ impl DiagDevice { // Triggers the diag device's debug logging mode fn enable_frame_readwrite(fd: i32, mode: i32) -> DiagResult<()> { unsafe { - if libc::ioctl(fd, DIAG_IOCTL_SWITCH_LOGGING.into(), mode, 0, 0, 0) < 0 { + if libc::ioctl(fd, DIAG_IOCTL_SWITCH_LOGGING, mode, 0, 0, 0) < 0 { let ret = libc::ioctl( fd, - DIAG_IOCTL_SWITCH_LOGGING.into(), + DIAG_IOCTL_SWITCH_LOGGING, &mut [mode, -1, 0] as *mut _, // diag_logging_mode_param_t std::mem::size_of::<[i32; 3]>(), 0, 0, 0, 0 ); @@ -233,7 +241,7 @@ fn enable_frame_readwrite(fd: i32, mode: i32) -> DiagResult<()> { fn determine_use_mdm(fd: i32) -> DiagResult { let use_mdm: i32 = 0; unsafe { - if libc::ioctl(fd, DIAG_IOCTL_REMOTE_DEV.into(), &use_mdm as *const i32) < 0 { + if libc::ioctl(fd, DIAG_IOCTL_REMOTE_DEV, &use_mdm as *const i32) < 0 { let msg = format!("DIAG_IOCTL_REMOTE_DEV ioctl failed with error code {}", 0); return Err(DiagDeviceError::InitializationFailed(msg)) } diff --git a/orca/src/diag_reader.rs b/orca/src/diag_reader.rs index c0f1678..b8ef308 100644 --- a/orca/src/diag_reader.rs +++ b/orca/src/diag_reader.rs @@ -51,10 +51,10 @@ pub trait DiagReader { let mut result = Vec::new(); for msg in container.messages { for sub_msg in msg.data.split_inclusive(|&b| b == diag::MESSAGE_TERMINATOR) { - match hdlc_decapsulate(&sub_msg, &CRC_CCITT) { + match hdlc_decapsulate(sub_msg, &CRC_CCITT) { Ok(data) => match Message::from_bytes((&data, 0)) { Ok(((leftover_bytes, _), res)) => { - if leftover_bytes.len() > 0 { + if !leftover_bytes.is_empty() { warn!("warning: {} leftover bytes when parsing Message", leftover_bytes.len()); } result.push(Ok(res)); diff --git a/orca/src/gsmtap_parser.rs b/orca/src/gsmtap_parser.rs index 540e300..8ca9cfb 100644 --- a/orca/src/gsmtap_parser.rs +++ b/orca/src/gsmtap_parser.rs @@ -7,6 +7,12 @@ use thiserror::Error; pub struct GsmtapParser { } +impl Default for GsmtapParser { + fn default() -> Self { + GsmtapParser::new() + } +} + #[derive(Debug, Error)] pub enum GsmtapParserError { #[error("Invalid LteRrcOtaMessage ext header version {0}")] @@ -57,7 +63,7 @@ impl GsmtapParser { 15 => GsmtapType::LteRrc(LteRrcSubtype::UlDcch), pdu => return Err(GsmtapParserError::InvalidLteRrcOtaHeaderPduNum(ext_header_version, pdu)), }, - 0x0e | 0x0f | 0x10 => match packet.get_pdu_num() { + 0x0e..=0x10 => match packet.get_pdu_num() { 1 => GsmtapType::LteRrc(LteRrcSubtype::BcchBch), 2 => GsmtapType::LteRrc(LteRrcSubtype::BcchDlSch), 4 => GsmtapType::LteRrc(LteRrcSubtype::MCCH), diff --git a/orca/src/hdlc.rs b/orca/src/hdlc.rs index 9e0ba0f..3c99e1b 100644 --- a/orca/src/hdlc.rs +++ b/orca/src/hdlc.rs @@ -34,7 +34,7 @@ pub fn hdlc_encapsulate(data: &[u8], crc: &Crc) -> Vec { } } - for b in crc.checksum(&data).to_le_bytes() { + for b in crc.checksum(data).to_le_bytes() { match b { MESSAGE_TERMINATOR => result.extend([MESSAGE_ESCAPE_CHAR, ESCAPED_MESSAGE_TERMINATOR]), MESSAGE_ESCAPE_CHAR => result.extend([MESSAGE_ESCAPE_CHAR, ESCAPED_MESSAGE_ESCAPE_CHAR]), diff --git a/wavehunter/src/config.rs b/wavehunter/src/config.rs index 2b081a6..d8280f8 100644 --- a/wavehunter/src/config.rs +++ b/wavehunter/src/config.rs @@ -1,7 +1,6 @@ use crate::error::WavehunterError; use serde::Deserialize; -use toml; #[derive(Deserialize)] struct ConfigFile { @@ -33,9 +32,9 @@ pub fn parse_config

(path: P) -> Result where P: AsRe let parsed_config: ConfigFile = toml::from_str(&config_file) .map_err(WavehunterError::ConfigFileParsingError)?; let mut config = Config::default(); - parsed_config.qmdl_path.map(|path| config.qmdl_path = path); - parsed_config.port.map(|port| config.port = port); - parsed_config.debug_mode.map(|debug_mode| config.debug_mode = debug_mode); + if let Some(path) = parsed_config.qmdl_path { config.qmdl_path = path } + if let Some(port) = parsed_config.port { config.port = port } + if let Some(debug_mode) = parsed_config.debug_mode { config.debug_mode = debug_mode } Ok(config) }