The setup I use:
Raspberry Pi 5, Seeed WM1302, L76K GPS Module
Chirpstack Gateway OS
DISTRIB_ID='ChirpStack Gateway OS'
DISTRIB_RELEASE='4.9.0'
DISTRIB_REVISION='r28959-29397011cc'
DISTRIB_TARGET='bcm27xx/bcm2712'
DISTRIB_ARCH='aarch64_cortex-a76'
DISTRIB_DESCRIPTION='ChirpStack Gateway OS 4.9.0 Base'
DISTRIB_TAINTS='no-all'
Using the Semtech - LoRa(R) CoreCell 868MHz (SX1302CSS868GW1) as shield model because somehow my L76K can emit u-blox messages.
From what I have seen this is a rather niche problem we have been facing:
When the GPS signal goes bad the PPS signal will fall behind, and it will drift away from the internal counter of the SX1302 (INST). However, when the GPS signal is back at healthy levels again the Concentratord can't seem to recover from the previous invalid timing state, which then leads all received downlinks (including the Class-B beacons) to be rejected with TOO_EARLY code because the GPS timestamp of the said downlink is scheduled so so far away from the internal counter of SX1302 (INST). That leaves the restart of the Concentratord as the only option for recovery.
The Semtech's lora_pkt_fwd did not handle this, and it seems like Concentratord does not handle it either so I believe a reliable way to detect this kind of invalid state ((INST - PPS) > Threshold, despite having healthy GPS fix) would at least enable user to react quicker and preemptively reset the internal counter by restarting the Concentratord.
Would love to hear your thoughts or any pointers to be able to implement this and contribute to the Concentratord.