Use system uptime not UTC time to calculate PPPoE session duration
authorkn <kn@openbsd.org>
Tue, 23 Nov 2021 19:13:45 +0000 (19:13 +0000)
committerkn <kn@openbsd.org>
Tue, 23 Nov 2021 19:13:45 +0000 (19:13 +0000)
commite0790d6de32ddc0a3a6ed1494960913eecd60cfb
treec31eb632616d2f6250c915cfe3b61837f63c7ba5
parent242bbb914c3b9e34783c84ccd568e11c9d2eb3b2
Use system uptime not UTC time to calculate PPPoE session duration

Systems without RTC are likely to boot with wrong time, but pppoe(4) used
microtime(9) anyway to remember when a new session began.

(In)adequately, ifconfig(8) used gettimeofday(2) and calculated the
difference between two absoloute dates to infer the PPPoE session duration.

This goes off the rails if the wall clock jumps in between, e.g. due to NTP
kicking in.

Use getmicrouptime(9) and clock_gettime(2)/CLOCK_BOOTTIME instead to rely
on the monotonically increasing system uptime instead to fix this.

Reported and tested by Peter J. Philipp <pjp AT delphinusdns DOT org> on
some octeon box without RTC.
I've seen this on a Edgerouter 4 as well (2m uptime, 19d session).

OK claudio
sbin/ifconfig/ifconfig.c
sys/net/if_pppoe.c