ntp: add extension field to provide network correction
To be able to verify PTP corrections, the client will need to know both the correction of the request received by the server and the correction of the response. Add a new experimental NTP extension field that the clients will use to request the correction and servers return the value.
This commit is contained in:
parent
6372a9f93f
commit
d9ae724c60
2 changed files with 17 additions and 0 deletions
11
ntp.h
11
ntp.h
|
@ -116,8 +116,10 @@ typedef struct {
|
|||
/* Non-authentication extension fields and corresponding internal flags */
|
||||
|
||||
#define NTP_EF_EXP_MONO_ROOT 0xF323
|
||||
#define NTP_EF_EXP_NET_CORRECTION 0xF324
|
||||
|
||||
#define NTP_EF_FLAG_EXP_MONO_ROOT 0x1
|
||||
#define NTP_EF_FLAG_EXP_NET_CORRECTION 0x2
|
||||
|
||||
/* Pre-NTPv5 experimental extension field */
|
||||
typedef struct {
|
||||
|
@ -130,6 +132,15 @@ typedef struct {
|
|||
|
||||
#define NTP_EF_EXP_MONO_ROOT_MAGIC 0xF5BEDD9AU
|
||||
|
||||
/* Experimental extension field to provide PTP corrections */
|
||||
typedef struct {
|
||||
uint32_t magic;
|
||||
NTP_int64 correction;
|
||||
uint32_t reserved[3];
|
||||
} NTP_EFExpNetCorrection;
|
||||
|
||||
#define NTP_EF_EXP_NET_CORRECTION_MAGIC 0x07AC2CEBU
|
||||
|
||||
/* Authentication extension fields */
|
||||
|
||||
#define NTP_EF_NTS_UNIQUE_IDENTIFIER 0x0104
|
||||
|
|
|
@ -375,6 +375,7 @@ do_size_checks(void)
|
|||
assert(offsetof(NTP_Packet, transmit_ts) == 40);
|
||||
|
||||
assert(sizeof (NTP_EFExpMonoRoot) == 24);
|
||||
assert(sizeof (NTP_EFExpNetCorrection) == 24);
|
||||
}
|
||||
|
||||
/* ================================================== */
|
||||
|
@ -1595,6 +1596,11 @@ parse_packet(NTP_Packet *packet, int length, NTP_PacketInfo *info)
|
|||
NTP_EF_EXP_MONO_ROOT_MAGIC))
|
||||
info->ext_field_flags |= NTP_EF_FLAG_EXP_MONO_ROOT;
|
||||
break;
|
||||
case NTP_EF_EXP_NET_CORRECTION:
|
||||
if (is_exp_ef(ef_body, ef_body_length, sizeof (NTP_EFExpNetCorrection),
|
||||
NTP_EF_EXP_NET_CORRECTION_MAGIC))
|
||||
info->ext_field_flags |= NTP_EF_FLAG_EXP_NET_CORRECTION;
|
||||
break;
|
||||
default:
|
||||
DEBUG_LOG("Unknown extension field type=%x", (unsigned int)ef_type);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue