correct some issues handling U2U call routing;

pull/134/head
Bryan Biedenkapp 3 days ago
parent 479a0e90f3
commit d68848872a

@ -287,7 +287,7 @@ master:
privateCallRouting:
# Flag indicating whether private/unit-to-unit calls may be routed.
# When disabled, all private/unit-to-unit setup, grant, media, and signaling traffic is rejected.
enabled: false
enable: false
# Action used when the destination unit has no current route: reject, or flood.
# WARNING: The flood policy can result in unintended network-wide message propagation and should be used with caution.

@ -413,7 +413,7 @@ void TrafficNetwork::setOptions(yaml::Node& conf, bool printOptions)
m_restrictGrantToAffOnly = conf["restrictGrantToAffiliatedOnly"].as<bool>(false);
yaml::Node& privateCallRouting = conf["privateCallRouting"];
m_privateCallRoutingEnabled = privateCallRouting["enabled"].as<bool>(false);
m_privateCallRoutingEnabled = privateCallRouting["enable"].as<bool>(false);
m_privateCallUnknownDestination = privateCallRouting["unknownDestination"].as<std::string>("reject");
m_privateCallLearnFromTraffic = privateCallRouting["learnFromTraffic"].as<bool>(true);
m_privateCallRouteLifetime = privateCallRouting["routeLifetime"].as<uint32_t>(300U);

@ -606,7 +606,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
*/
// repeat traffic to nodes peered to us as master
if (m_network->peerCount() > 0U && !noConnectedPeerRepeat) {
if (m_network->peerCount() > 0U) {
uint32_t i = 0U;
udp::BufferQueue queue = udp::BufferQueue();
@ -620,6 +620,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
continue;
}
// are we routing private calls?
if (m_network->m_privateCallRoutingEnabled) {
// is this peer an upstream neighbor peer?
bool neighbor = false;
@ -638,8 +639,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
return false;
});
if (it != m_statusPVCall.end()) {
if (m_statusPVCall[dstId].dstPeerId != 0U &&
peer.first != m_statusPVCall[dstId].dstPeerId) {
if (m_statusPVCall[dstId].dstPeerId != 0U && peer.first != m_statusPVCall[dstId].dstPeerId) {
continue;
}
}
@ -664,8 +664,8 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
m_network->writePeerQueue(&queue, peer.first, ssrc, { NET_FUNC::PROTOCOL, NET_SUBFUNC::PROTOCOL_SUBFUNC_DMR }, outboundPeerBuffer, len, pktSeq, streamId);
if (m_network->m_debug) {
LogDebugEx(LOG_DMR, "TagDMRData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, seqNo = %u, srcId = %u, dstId = %u, flco = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u, fromUpstream = %u",
ssrc, peerId, peer.first, seqNo, srcId, dstId, flco, slotNo, len, pktSeq, streamId, fromUpstream);
LogDebugEx(LOG_DMR, "TagDMRData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, seqNo = %u, srcId = %u, dstId = %u, flco = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u, fromUpstream = %u, pci = %u, ncpr = %u",
ssrc, peerId, peer.first, seqNo, srcId, dstId, flco, slotNo, len, pktSeq, streamId, fromUpstream, privateCallInProgress, noConnectedPeerRepeat);
}
i++;

@ -617,7 +617,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
*/
// repeat traffic to nodes peered to us as master
if (m_network->peerCount() > 0U && !noConnectedPeerRepeat) {
if (m_network->peerCount() > 0U) {
uint32_t i = 0U;
udp::BufferQueue queue = udp::BufferQueue();
@ -649,8 +649,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
return false;
});
if (it != m_statusPVCall.end()) {
if (m_statusPVCall[dstId].dstPeerId != 0U &&
peer.first != m_statusPVCall[dstId].dstPeerId) {
if (m_statusPVCall[dstId].dstPeerId != 0U && peer.first != m_statusPVCall[dstId].dstPeerId) {
continue;
}
}
@ -675,8 +674,8 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
m_network->writePeerQueue(&queue, peer.first, ssrc, { NET_FUNC::PROTOCOL, NET_SUBFUNC::PROTOCOL_SUBFUNC_NXDN }, outboundPeerBuffer, len, pktSeq, streamId);
if (m_network->m_debug) {
LogDebugEx(LOG_NXDN, "TagNXDNData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, messageType = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u, fromUpstream = %u",
ssrc, peerId, peer.first, messageType, srcId, dstId, len, pktSeq, streamId, fromUpstream);
LogDebugEx(LOG_NXDN, "TagNXDNData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, messageType = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u, fromUpstream = %u, pci = %u, ncpr = %u",
ssrc, peerId, peer.first, messageType, srcId, dstId, len, pktSeq, streamId, fromUpstream, privateCallInProgress, noConnectedPeerRepeat);
}
i++;

@ -724,13 +724,13 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
}
}
}
/*
** MASTER TRAFFIC
*/
// repeat traffic to nodes connected to us as peers
if (m_network->peerCount() > 0U && !noConnectedPeerRepeat) {
if (m_network->peerCount() > 0U) {
uint32_t i = 0U;
udp::BufferQueue queue = udp::BufferQueue();
@ -767,8 +767,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
return false;
});
if (it != m_statusPVCall.end()) {
if (m_statusPVCall[dstId].dstPeerId != 0U &&
peer.first != m_statusPVCall[dstId].dstPeerId) {
if (m_statusPVCall[dstId].dstPeerId != 0U && peer.first != m_statusPVCall[dstId].dstPeerId) {
continue;
}
}
@ -797,10 +796,10 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
routeRewrite(outboundPeerBuffer, peer.first, duid, dstId);
m_network->writePeerQueue(&queue, peer.first, ssrc, { NET_FUNC::PROTOCOL, NET_SUBFUNC::PROTOCOL_SUBFUNC_P25 }, outboundPeerBuffer, len, pktSeq, streamId);
if (m_network->m_debug) {
LogDebugEx(LOG_P25, "TagP25Data::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, duid = $%02X, lco = $%02X, MFId = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u, fromUpstream = %u",
ssrc, peerId, peer.first, duid, lco, MFId, srcId, dstId, len, pktSeq, streamId, fromUpstream);
}
//if (m_network->m_debug) {
LogDebugEx(LOG_P25, "TagP25Data::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, duid = $%02X, lco = $%02X, MFId = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u, fromUpstream = %u, pci = %u, ncpr = %u",
ssrc, peerId, peer.first, duid, lco, MFId, srcId, dstId, len, pktSeq, streamId, fromUpstream, privateCallInProgress, noConnectedPeerRepeat);
//}
i++;
}

@ -576,7 +576,7 @@ bool TagP25P2Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peer
*/
// repeat traffic to nodes peered to us as master
if (m_network->peerCount() > 0U && !noConnectedPeerRepeat) {
if (m_network->peerCount() > 0U) {
uint32_t i = 0U;
udp::BufferQueue queue = udp::BufferQueue();
@ -608,8 +608,7 @@ bool TagP25P2Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peer
return false;
});
if (it != m_statusPVCall.end()) {
if (m_statusPVCall[dstId].dstPeerId != 0U &&
peer.first != m_statusPVCall[dstId].dstPeerId) {
if (m_statusPVCall[dstId].dstPeerId != 0U && peer.first != m_statusPVCall[dstId].dstPeerId) {
continue;
}
}
@ -634,8 +633,8 @@ bool TagP25P2Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peer
m_network->writePeerQueue(&queue, peer.first, ssrc, { NET_FUNC::PROTOCOL, NET_SUBFUNC::PROTOCOL_SUBFUNC_P25_P2 }, outboundPeerBuffer, len, pktSeq, streamId);
if (m_network->m_debug) {
LogDebugEx(LOG_DMR, "TagDMRData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, srcId = %u, dstId = %u, duid = $%02X, macMCO = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u, fromUpstream = %u",
ssrc, peerId, peer.first, srcId, dstId, duid, macMCO, slotNo, len, pktSeq, streamId, fromUpstream);
LogDebugEx(LOG_DMR, "TagDMRData::processFrame()", "Master, ssrc = %u, srcPeer = %u, dstPeer = %u, srcId = %u, dstId = %u, duid = $%02X, macMCO = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u, fromUpstream = %u, pci = %u, ncpr = %u",
ssrc, peerId, peer.first, srcId, dstId, duid, macMCO, slotNo, len, pktSeq, streamId, fromUpstream, privateCallInProgress, noConnectedPeerRepeat);
}
i++;

Loading…
Cancel
Save

Powered by TurnKey Linux.