From b419c56405c8ef89026481167c7ad70c6946bd62 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Thu, 6 Feb 2025 16:21:56 -0500 Subject: [PATCH] reject U2U voice channel grant for P25, DMR and NXDN if the unit being called isn't registered; --- src/host/dmr/packet/ControlSignaling.cpp | 8 ++++++++ src/host/nxdn/packet/ControlSignaling.cpp | 8 ++++++++ src/host/p25/packet/ControlSignaling.cpp | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/src/host/dmr/packet/ControlSignaling.cpp b/src/host/dmr/packet/ControlSignaling.cpp index 2835a18f..304d345f 100644 --- a/src/host/dmr/packet/ControlSignaling.cpp +++ b/src/host/dmr/packet/ControlSignaling.cpp @@ -868,6 +868,14 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_ } } + if (!grp && !m_tscc->m_ignoreAffiliationCheck) { + // is this the target registered? + if (!m_tscc->m_affiliations->isUnitReg(dstId)) { + LogWarning(LOG_RF, "DMR Slot %u, CSBK, RAND (Random Access, IND_VOICE_CALL (Individual Voice Call) ignored, no unit registration, dstId = %u", m_tscc->m_slotNo, dstId); + return false; + } + } + uint32_t availChNo = m_tscc->m_affiliations->getAvailableChannelForSlot(slot); if (!m_tscc->m_affiliations->rfCh()->isRFChAvailable() || availChNo == 0U) { if (grp) { diff --git a/src/host/nxdn/packet/ControlSignaling.cpp b/src/host/nxdn/packet/ControlSignaling.cpp index 8d2bc00f..80fc82bf 100644 --- a/src/host/nxdn/packet/ControlSignaling.cpp +++ b/src/host/nxdn/packet/ControlSignaling.cpp @@ -479,6 +479,14 @@ bool ControlSignaling::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uin } } + if (!grp && !m_nxdn->m_ignoreAffiliationCheck) { + // is this the target registered? + if (!m_nxdn->m_affiliations.isUnitReg(dstId)) { + LogWarning(LOG_RF, "NXDN, %s ignored, no unit registration, dstId = %u", rcch->toString().c_str(), dstId); + return false; + } + } + if (!m_nxdn->m_affiliations.rfCh()->isRFChAvailable()) { if (grp) { if (!net) { diff --git a/src/host/p25/packet/ControlSignaling.cpp b/src/host/p25/packet/ControlSignaling.cpp index e377fbda..58f694d8 100644 --- a/src/host/p25/packet/ControlSignaling.cpp +++ b/src/host/p25/packet/ControlSignaling.cpp @@ -2200,6 +2200,14 @@ bool ControlSignaling::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_ } } + if (!grp && !m_p25->m_ignoreAffiliationCheck) { + // is this the target registered? + if (!m_p25->m_affiliations.isUnitReg(dstId)) { + LogWarning(LOG_NET, P25_TSDU_STR ", TSBKO, IOSP_UU_VCH (Unit-to-Unit Voice Channel Request) ignored, no unit registration, dstId = %u", dstId); + return false; + } + } + if (!m_p25->m_affiliations.rfCh()->isRFChAvailable()) { if (grp) { if (!net) {