VK1ET : Check Bit Correction against ICAO cache
If we error correct a DF17 frame, check that the ICAOaddr exists in our recently seen ICAO cache. This reduces the likelyhood of birthday paradox solutions producing false ICAO addresses
This commit is contained in:
parent
542b94dedb
commit
e33591d65d
11
dump1090.c
11
dump1090.c
|
@ -1707,7 +1707,7 @@ void decodeModesMessage(struct modesMessage *mm, unsigned char *msg) {
|
||||||
mm->msgtype = msg[0] >> 3; // Downlink Format
|
mm->msgtype = msg[0] >> 3; // Downlink Format
|
||||||
mm->msgbits = modesMessageLenByType(mm->msgtype);
|
mm->msgbits = modesMessageLenByType(mm->msgtype);
|
||||||
mm->correctedbits = 0; // No errors fixed
|
mm->correctedbits = 0; // No errors fixed
|
||||||
mm->phase_corrected = 0;
|
mm->phase_corrected = 0;
|
||||||
mm->crc = modesChecksum(msg, mm->msgbits);
|
mm->crc = modesChecksum(msg, mm->msgbits);
|
||||||
|
|
||||||
if ((mm->crc) && (Modes.fix_errors) && (mm->msgtype == 17)) {
|
if ((mm->crc) && (Modes.fix_errors) && (mm->msgtype == 17)) {
|
||||||
|
@ -1723,9 +1723,12 @@ void decodeModesMessage(struct modesMessage *mm, unsigned char *msg) {
|
||||||
// IID against known good IID's. That's a TODO.
|
// IID against known good IID's. That's a TODO.
|
||||||
//
|
//
|
||||||
mm->correctedbits = fixBitErrors(msg, mm->msgbits);
|
mm->correctedbits = fixBitErrors(msg, mm->msgbits);
|
||||||
//if ((mm->errorbit == -1) && (Modes.aggressive)) {
|
// If we correct, validate ICAO addr to help filter birthday paradox solutions.
|
||||||
// mm->errorbit = fixTwoBitsErrors(msg, mm->msgbits);
|
if (mm->correctedbits) {
|
||||||
//}
|
uint32_t addr = (msg[1] << 16) | (msg[2] << 8) | (msg[3]);
|
||||||
|
if (!ICAOAddressWasRecentlySeen(addr))
|
||||||
|
mm->correctedbits = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Note that most of the other computation happens *after* we fix the
|
// Note that most of the other computation happens *after* we fix the
|
||||||
|
|
Loading…
Reference in a new issue