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

Reply via email to