uip: rate-limit the dropped-fragment log

uip has no reassembly, so every fragment it receives is discarded and
logged. A neighbour that broadcasts fragmented traffic therefore produces a
continuous stream of "ip: fragment dropped." rather than an occasional one,
at roughly thirteen lines a second on a quiet segment, which buries every
other console message.

The message carries real information: a sudden burst of it says something
about the network. What carries none is repeating it per fragment. Report
the count once per five second window instead, which keeps the signal and
ends the flood.

The count is printed through the no_syslog primitives, as the original
message was, so the flood cannot move from the console into the log ring.
itoa() writes through write_char(), which also feeds the ring, so it gets
a no_syslog twin beside it rather than a private copy of its digits.
This commit is contained in:
bloqaudio committed 2026-09-25 08:20:27 -05:00
1 parent 88454ec7d7
commit d0374541c5
4 files changed
+35 -1

No files matched your search

+13
View File
@@ -277,6 +277,19 @@ void itoa(uint8_t v)
}
void itoa_no_syslog(uint8_t v)
{
uint8_t t = (v / 100);
uint8_t print_zeros = t;
if (print_zeros)
write_char_no_syslog('0' + t);
t = (v / 10) % 10;
print_zeros |= t;
if (print_zeros)
write_char_no_syslog('0' + t);
write_char_no_syslog('0' + (v % 10));
}
/* Same as itoa(), one decade wider: enough for a port number. Kept separate
* rather than widening itoa() itself, because every existing caller passes a
* byte and would start paying for 16-bit divisions it does not need. */