-
Notifications
You must be signed in to change notification settings - Fork 23
Description
Hey,
Found an issue with the parrot feature when using parrotOnlyToOriginatingPeer: true on the FNE with a CC/VC split architecture.
The problem:
When a site has a dedicated CC and separate VC (VC configured as authoritative: false), parrot playback never works. The VC logs this:
W: [NON-AUTHORITATIVE] Ignoring network traffic, destination not permitted, dstId = 9990
What's happening:
In TagP25Data.cpp around line 807, when m_parrotOnlyOriginating is true, the grant demand gets sent directly to pkt.peerId - which is the VC. But since the VC is non-authoritative, it ignores it because there's no active grant from the CC.
The FNE already tracks which VC belongs to which CC via ccPeerId(), but the parrot code doesn't use it.
Suggested fix:
When the originating peer is a VC (has a valid ccPeerId), send the grant demand to the CC instead:
if (m_network->m_parrotOnlyOriginating) {
uint32_t targetPeerId = pkt.peerId;
// If peer is a VC, route grant demand to its CC
auto it = m_network->m_peers.find(pkt.peerId);
if (it != m_network->m_peers.end() && it->second->ccPeerId() != 0) {
targetPeerId = it->second->ccPeerId();
}
m_network->writePeer(targetPeerId, targetPeerId, ...);
}
This way the CC gets the grant demand, assigns the channel properly, and radios actually switch to the VC frequency to hear the parrot.
Cheers!