You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
944 B
C

#pragma once
#include <stdint.h>
#include <arpa/inet.h>
#define OWD_MAGIC 0x4f574454
#define OWD_VERSION 1
#define OWD_DECL_DATA_END char _data_end[0]
#define OWD_DATA_LEN(HDR) (offsetof(__typeof__(HDR), _data_end))
enum owd_msg_type {
OWD_MSG_ERR,
OWD_MSG_SYNC_REQUEST,
OWD_MSG_SYNC_RESPONSE,
};
enum owd_error_code {
OWD_ERR_BAD_HEADER,
OWD_ERR_BAD_TYPE,
};
struct owd_timestamp {
uint32_t ts_upper;
uint32_t ts_lower;
};
struct owdhdr {
uint32_t magic;
uint8_t version;
uint8_t msg_type;
uint16_t length;
};
struct owd_msg_err {
struct owdhdr hdr;
uint8_t err;
OWD_DECL_DATA_END;
};
struct owd_msg_sync_response {
struct owdhdr hdr;
struct owd_timestamp ts;
OWD_DECL_DATA_END;
};
static inline void owd_hdr_populate(struct owdhdr *hdr, uint8_t msg_type, uint16_t length) {
hdr->magic = htonl(OWD_MAGIC);
hdr->version = OWD_VERSION;
hdr->msg_type = msg_type;
hdr->length = htons(length);
}