socket_zep: fix undefined timestamp conversion behavior
This commit is contained in:
parent
d90d546053
commit
83bc4b162f
@ -35,6 +35,9 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define _UNIX_NTP_ERA_OFFSET (2208988800U)
|
#define _UNIX_NTP_ERA_OFFSET (2208988800U)
|
||||||
|
/* can't use timex.h's US_PER_SEC as timeval's tv_usec is signed long
|
||||||
|
* (https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/basedefs/time.h.html) */
|
||||||
|
#define TV_USEC_PER_SEC (1000000L)
|
||||||
|
|
||||||
static size_t _zep_hdr_fill_v2_data(socket_zep_t *dev, zep_v2_data_hdr_t *hdr,
|
static size_t _zep_hdr_fill_v2_data(socket_zep_t *dev, zep_v2_data_hdr_t *hdr,
|
||||||
size_t payload_len)
|
size_t payload_len)
|
||||||
@ -49,7 +52,10 @@ static size_t _zep_hdr_fill_v2_data(socket_zep_t *dev, zep_v2_data_hdr_t *hdr,
|
|||||||
hdr->lqi_mode = 1;
|
hdr->lqi_mode = 1;
|
||||||
hdr->lqi_val = 0xff; /* TODO: set */
|
hdr->lqi_val = 0xff; /* TODO: set */
|
||||||
hdr->time.seconds = byteorder_htonl(tv.tv_sec + _UNIX_NTP_ERA_OFFSET);
|
hdr->time.seconds = byteorder_htonl(tv.tv_sec + _UNIX_NTP_ERA_OFFSET);
|
||||||
hdr->time.fraction = byteorder_htonl((tv.tv_usec * 1000000) / 232);
|
assert(tv.tv_usec < TV_USEC_PER_SEC);
|
||||||
|
hdr->time.fraction = byteorder_htonl(
|
||||||
|
(uint32_t)((uint64_t)tv.tv_usec * TV_USEC_PER_SEC) / 232U
|
||||||
|
);
|
||||||
hdr->seq = byteorder_htonl(dev->seq);
|
hdr->seq = byteorder_htonl(dev->seq);
|
||||||
memset(hdr->resv, 0, sizeof(hdr->resv));
|
memset(hdr->resv, 0, sizeof(hdr->resv));
|
||||||
hdr->length = payload_len;
|
hdr->length = payload_len;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user