diff --git a/configs/fne-config.example.yml b/configs/fne-config.example.yml index 69782dd9..58072975 100644 --- a/configs/fne-config.example.yml +++ b/configs/fne-config.example.yml @@ -174,6 +174,8 @@ master: disallowAdjStsBcast: false # Flag indicating whether or not a P25 ADJ_STS_BCAST will pass to connected external peers. disallowExtAdjStsBcast: true + # Flag indicating whether or not a radio monitor will pass to any peers. + disallowRadioMonitor: true # Flag indicating whether or not a conventional site can override affiliation rules. allowConvSiteAffOverride: true # Flag indicating whether or not In-Call Control feedback is enabled. diff --git a/src/fne/network/TrafficNetwork.cpp b/src/fne/network/TrafficNetwork.cpp index f03061bd..ddd617db 100644 --- a/src/fne/network/TrafficNetwork.cpp +++ b/src/fne/network/TrafficNetwork.cpp @@ -116,6 +116,7 @@ TrafficNetwork::TrafficNetwork(HostFNE* host, const std::string& address, uint16 m_callCollisionTimeout(5U), m_disallowAdjStsBcast(false), m_disallowExtAdjStsBcast(true), + m_disallowRadioMonitor(true), m_allowConvSiteAffOverride(false), m_disallowCallTerm(false), m_restrictGrantToAffOnly(false), @@ -205,6 +206,7 @@ void TrafficNetwork::setOptions(yaml::Node& conf, bool printOptions) { m_disallowAdjStsBcast = conf["disallowAdjStsBcast"].as(false); m_disallowExtAdjStsBcast = conf["disallowExtAdjStsBcast"].as(true); + m_disallowRadioMonitor = conf["disallowRadioMonitor"].as(true); m_allowConvSiteAffOverride = conf["allowConvSiteAffOverride"].as(true); m_enableRIDInCallCtrl = conf["enableRIDInCallCtrl"].as(false); m_disallowInCallCtrl = conf["disallowInCallCtrl"].as(false); @@ -355,6 +357,7 @@ void TrafficNetwork::setOptions(yaml::Node& conf, bool printOptions) LogInfo(" Disable Packet Data: %s", m_disablePacketData ? "yes" : "no"); LogInfo(" Dump Packet Data: %s", m_dumpPacketData ? "yes" : "no"); LogInfo(" Disable P25 ADJ_STS_BCAST to neighbor peers: %s", m_disallowExtAdjStsBcast ? "yes" : "no"); + LogInfo(" Disable P25 Radio Monitor to any peers: %s", m_disallowRadioMonitor ? "yes" : "no"); LogInfo(" Disable P25 TDULC call termination broadcasts to any peers: %s", m_disallowCallTerm ? "yes" : "no"); LogInfo(" Allow conventional sites to override affiliation and receive all traffic: %s", m_allowConvSiteAffOverride ? "yes" : "no"); LogInfo(" Enable RID In-Call Control: %s", m_enableRIDInCallCtrl ? "yes" : "no"); diff --git a/src/fne/network/TrafficNetwork.h b/src/fne/network/TrafficNetwork.h index 85e5dbfe..27d7f4d3 100644 --- a/src/fne/network/TrafficNetwork.h +++ b/src/fne/network/TrafficNetwork.h @@ -369,6 +369,7 @@ namespace network bool m_disallowAdjStsBcast; bool m_disallowExtAdjStsBcast; + bool m_disallowRadioMonitor; bool m_allowConvSiteAffOverride; bool m_disallowCallTerm; bool m_restrictGrantToAffOnly; diff --git a/src/fne/network/callhandler/TagP25Data.cpp b/src/fne/network/callhandler/TagP25Data.cpp index b73c87a3..c52d39f2 100644 --- a/src/fne/network/callhandler/TagP25Data.cpp +++ b/src/fne/network/callhandler/TagP25Data.cpp @@ -1210,6 +1210,11 @@ bool TagP25Data::processTSDUFrom(uint8_t* buffer, uint32_t peerId, uint8_t duid) } } break; + case TSBKO::IOSP_RAD_MON: + case TSBKO::IOSP_RAD_MON_ENH: + if (m_network->m_disallowRadioMonitor) + return false; + break; default: break; } @@ -1300,6 +1305,11 @@ bool TagP25Data::processTSDUTo(uint8_t* buffer, uint32_t peerId, uint8_t duid) } } break; + case TSBKO::IOSP_RAD_MON: + case TSBKO::IOSP_RAD_MON_ENH: + if (m_network->m_disallowRadioMonitor) + return false; + break; default: break; }