From a5f11a4aad209c1b86491f5896b1b3e2e7aad3d5 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Feb 2021 01:21:38 +0000 Subject: [PATCH] display whether or not voice traffic is encrypted in the activity log; --- dmr/DataPacket.cpp | 22 ++++++++++++++++++---- p25/VoicePacket.cpp | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/dmr/DataPacket.cpp b/dmr/DataPacket.cpp index bf73eaf8..25fa56dc 100644 --- a/dmr/DataPacket.cpp +++ b/dmr/DataPacket.cpp @@ -103,7 +103,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len) return true; lc::FullLC fullLC; - lc::LC * lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER); + lc::LC* lc = fullLC.decode(data + 2U, DT_VOICE_LC_HEADER); if (lc == NULL) return false; @@ -115,7 +115,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len) // validate source RID if (!acl::AccessControl::validateSrcId(srcId)) { - LogWarning(LOG_RF, "DMR Slot %u, DMR_SYNC_DATA denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId); + LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE_LC_HEADER denial, RID rejection, srcId = %u", m_slot->m_slotNo, srcId); delete lc; return false; } @@ -123,12 +123,22 @@ bool DataPacket::process(uint8_t* data, uint32_t len) // validate target TID, if the target is a talkgroup if (flco == FLCO_GROUP) { if (!acl::AccessControl::validateTGId(m_slot->m_slotNo, dstId)) { - LogWarning(LOG_RF, "DMR Slot %u, DMR_SYNC_DATA denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId); + LogWarning(LOG_RF, "DMR Slot %u, DT_VOICE_LC_HEADER denial, TGID rejection, srcId = %u, dstId = %u", m_slot->m_slotNo, srcId, dstId); delete lc; return false; } } + if (m_verbose) { + LogMessage(LOG_RF, "DMR Slot %u, DT_VOICE_LC_HEADER, srcId = %u, dstId = %u, FLCO = $%02X, FID = $%02X, PF = %u", m_slot->m_slotNo, lc->getSrcId(), lc->getDstId(), lc->getFLCO(), lc->getFID(), lc->getPF()); + } + + uint8_t fid = lc->getFID(); + + // NOTE: this is fiddly -- on Motorola a FID of 0x10 indicates a SU has transmitted with Enhanced Privacy enabled -- this might change + // and is not exact science! + bool encrypted = (fid & 0x10U) == 0x10U; + m_rfLC = lc; // The standby LC data @@ -186,7 +196,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len) Utils::dump(2U, "!!! *TX DMR Frame - DT_VOICE_LC_HEADER", data + 2U, DMR_FRAME_LENGTH_BYTES); } - ::ActivityLog("DMR", true, "Slot %u, received RF voice header from %u to %s%u", m_slot->m_slotNo, srcId, flco == FLCO_GROUP ? "TG " : "", dstId); + ::ActivityLog("DMR", true, "Slot %u, received RF %svoice header from %u to %s%u", m_slot->m_slotNo, encrypted ? "encrypted " : "", srcId, flco == FLCO_GROUP ? "TG " : "", dstId); return true; } else if (dataType == DT_VOICE_PI_HEADER) { @@ -586,6 +596,10 @@ void DataPacket::processNetwork(const data::Data& dmrData) dmrData.getSrcId(), dmrData.getFLCO() == FLCO_GROUP ? "TG" : "", dmrData.getDstId(), srcId, flco == FLCO_GROUP ? "TG" : "", dstId); + if (m_verbose) { + LogMessage(LOG_NET, "DMR Slot %u, DT_VOICE_LC_HEADER, srcId = %u, dstId = %u, FLCO = $%02X, FID = $%02X, PF = %u", m_slot->m_slotNo, lc->getSrcId(), lc->getDstId(), lc->getFLCO(), lc->getFID(), lc->getPF()); + } + m_netLC = lc; // The standby LC data diff --git a/p25/VoicePacket.cpp b/p25/VoicePacket.cpp index 39fc454a..c98beaa4 100644 --- a/p25/VoicePacket.cpp +++ b/p25/VoicePacket.cpp @@ -262,7 +262,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len) } } - ::ActivityLog("P25", true, "received RF voice transmission from %u to %s%u", srcId, m_rfLC.getGroup() ? "TG " : "", dstId); + ::ActivityLog("P25", true, "received RF %svoice transmission from %u to %s%u", m_rfLC.getEncrypted() ? "encrypted ": "", srcId, m_rfLC.getGroup() ? "TG " : "", dstId); if (m_p25->m_control) { if (m_rfLC.getGroup() && (m_lastPatchGroup != dstId) && @@ -1045,7 +1045,7 @@ void VoicePacket::writeNet_HDU(const lc::LC& control, const data::LowSpeedData& m_p25->m_trunk->writeRF_ControlData(255U, 0U, false); } - ::ActivityLog("P25", false, "received network transmission from %u to %s%u", srcId, group ? "TG " : "", dstId); + ::ActivityLog("P25", false, "received %snetwork transmission from %u to %s%u", m_netLC.getEncrypted() ? "encrypted " : "", srcId, group ? "TG " : "", dstId); m_rfLC.reset(); m_rfLC.setMI(mi);