IEEE 1588-2019 specified new UInteger4 type minorVersionPTP field in header, and minorVersionNumber data in portDS. It has the value 1 for IEEE 1588-2019, and has the value 0 for IEEE 1588-2008. However missing minorVersionNumber definition in PORT_DATA_SET and VERSION_NUMBER management TLVs was an oversight in this standard.
This patch is to bump to IEEE 1588-2019 version directly in message, considering v2.1 and even future v2.x are all backward compatible. For PORT_DATA_SET and VERSION_NUMBER TLVs, keep using only versionNumber (major version) per current active IEEE 1588-2019 standard regardless. Signed-off-by: Yangbo Lu <yangbo...@nxp.com> --- Changes for v2: - Made v2.1 as macros. Changes for v3: - Fixed pmc versionNumber printing issue. Changes for v4: - kept using only major version in TLVs per 2019 standard. --- msg.c | 5 +---- msg.h | 9 +++++++-- pmc.c | 7 ++++--- port.c | 2 +- port_private.h | 2 +- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/msg.c b/msg.c index d1619d4..c4516ad 100644 --- a/msg.c +++ b/msg.c @@ -27,9 +27,6 @@ #include "print.h" #include "tlv.h" -#define VERSION_MASK 0x0f -#define VERSION 0x02 - int assume_two_step = 0; /* @@ -80,7 +77,7 @@ static void announce_post_recv(struct announce_msg *m) static int hdr_post_recv(struct ptp_header *m) { - if ((m->ver & VERSION_MASK) != VERSION) + if ((m->ver & MAJOR_VERSION_MASK) != PTP_MAJOR_VERSION) return -EPROTO; m->messageLength = ntohs(m->messageLength); m->correction = net2host64(m->correction); diff --git a/msg.h b/msg.h index a71df16..b7423ee 100644 --- a/msg.h +++ b/msg.h @@ -30,7 +30,12 @@ #include "tlv.h" #include "tmv.h" -#define PTP_VERSION 2 +/* Version definition for IEEE 1588-2019 */ +#define PTP_MAJOR_VERSION 2 +#define PTP_MINOR_VERSION 1 +#define PTP_VERSION (PTP_MINOR_VERSION << 4 | PTP_MAJOR_VERSION) + +#define MAJOR_VERSION_MASK 0x0f /* Values for the messageType field */ #define SYNC 0x0 @@ -89,7 +94,7 @@ enum controlField { struct ptp_header { uint8_t tsmt; /* transportSpecific | messageType */ - uint8_t ver; /* reserved | versionPTP */ + uint8_t ver; /* minorVersionPTP | versionPTP */ UInteger16 messageLength; UInteger8 domainNumber; Octet reserved1; diff --git a/pmc.c b/pmc.c index 3678800..1e569b5 100644 --- a/pmc.c +++ b/pmc.c @@ -413,12 +413,13 @@ static void pmc_show(struct ptp_message *msg, FILE *fp) IFMT "logSyncInterval %hhd" IFMT "delayMechanism %hhu" IFMT "logMinPdelayReqInterval %hhd" - IFMT "versionNumber %hhu", + IFMT "versionNumber %u", pid2str(&p->portIdentity), ps_str[p->portState], p->logMinDelayReqInterval, p->peerMeanPathDelay >> 16, p->logAnnounceInterval, p->announceReceiptTimeout, p->logSyncInterval, p->delayMechanism, - p->logMinPdelayReqInterval, p->versionNumber); + p->logMinPdelayReqInterval, + p->versionNumber & MAJOR_VERSION_MASK); break; case TLV_PORT_DATA_SET_NP: pnp = (struct port_ds_np *) mgt->data; @@ -507,7 +508,7 @@ static void pmc_show(struct ptp_message *msg, FILE *fp) case TLV_VERSION_NUMBER: mtd = (struct management_tlv_datum *) mgt->data; fprintf(fp, "VERSION_NUMBER " - IFMT "versionNumber %hhu", mtd->val); + IFMT "versionNumber %hhu", mtd->val & MAJOR_VERSION_MASK); break; case TLV_DELAY_MECHANISM: mtd = (struct management_tlv_datum *) mgt->data; diff --git a/port.c b/port.c index eb3b319..25479a1 100644 --- a/port.c +++ b/port.c @@ -3132,7 +3132,7 @@ struct port *port_open(const char *phc_device, p->portIdentity.portNumber = number; p->state = PS_INITIALIZING; p->delayMechanism = config_get_int(cfg, p->name, "delay_mechanism"); - p->versionNumber = PTP_VERSION; + p->versionNumber = PTP_MAJOR_VERSION; p->slave_event_monitor = clock_slave_monitor(clock); if (!port_is_uds(p) && unicast_client_initialize(p)) { diff --git a/port_private.h b/port_private.h index 842ee06..2a98ef4 100644 --- a/port_private.h +++ b/port_private.h @@ -142,7 +142,7 @@ struct port { enum link_state link_status; struct fault_interval flt_interval_pertype[FT_CNT]; enum fault_type last_fault_type; - unsigned int versionNumber; /*UInteger4*/ + UInteger8 versionNumber; /* UInteger4 */ struct PortStats stats; /* foreignMasterDS */ LIST_HEAD(fm, foreign_clock) foreign_masters; -- 2.25.1 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel