Use 64 bit clock to prevent overflows

Large offsets between nodes may overflow the previous 48 bit clock
leading to an incorrect reconstructed clock value after the correction
with the 64 bit offset.
This commit is contained in:
Rodrigo Arias 2021-08-11 11:50:07 +02:00
parent 60d6bbb337
commit 755f2e84f3
2 changed files with 3 additions and 8 deletions

8
ovni.c
View File

@ -389,17 +389,13 @@ flush_evbuf()
static void
ovni_ev_set_clock(struct ovni_ev *ev)
{
ev->header.clock_lo = (uint32_t) (rthread.clockvalue & 0xffffffff);
ev->header.clock_hi = (uint16_t) ((rthread.clockvalue >> 32) & 0xffff);
ev->header.clock = rthread.clockvalue;
}
uint64_t
ovni_ev_get_clock(struct ovni_ev *ev)
{
uint64_t clock;
clock = ((uint64_t) ev->header.clock_hi) << 32 | ((uint64_t) ev->header.clock_lo);
return clock;
return ev->header.clock;
}
void

3
ovni.h
View File

@ -52,8 +52,7 @@ struct __attribute__((__packed__)) ovni_ev_header {
uint8_t model;
uint8_t class;
uint8_t value;
uint32_t clock_lo;
uint16_t clock_hi;
uint64_t clock;
};
struct __attribute__((__packed__)) ovni_ev {