Currently, the time properties flags only added to the flag
field of Announce message header.

According to 802.1AS-2011 Chapter 10.5.2.2.6 Flags (Octet2), ptpTimescale
applies to all message types. Thus, add ptpTimescale bit to the flag field
of the header of Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up,
Follow_Up, Sync and Signaling messages.

Signed-off-by: Tan Tee Min <tee.min....@linux.intel.com>
---
 port.c           | 8 ++++++++
 port_signaling.c | 2 ++
 2 files changed, 10 insertions(+)

diff --git a/port.c b/port.c
index 6baf5c8..7bc3563 100644
--- a/port.c
+++ b/port.c
@@ -1463,6 +1463,7 @@ static void port_syfufsm(struct port *p, enum syfu_event 
event,
 
 static int port_pdelay_request(struct port *p)
 {
+       struct timePropertiesDS tp = clock_time_properties(p->clock);
        struct ptp_message *msg;
        int err;
 
@@ -1489,6 +1490,7 @@ static int port_pdelay_request(struct port *p)
        msg->header.control            = CTL_OTHER;
        msg->header.logMessageInterval = port_is_ieee8021as(p) ?
                p->logPdelayReqInterval : 0x7f;
+       msg->header.flagField[1]       |= tp.flags & PTP_TIMESCALE;
 
        if (unicast_client_enabled(p) && p->unicast_master_table->peer_name) {
                msg->address = p->unicast_master_table->peer_addr.address;
@@ -1633,6 +1635,7 @@ int port_tx_announce(struct port *p, struct address *dst, 
uint16_t sequence_id)
 
 int port_tx_sync(struct port *p, struct address *dst, uint16_t sequence_id)
 {
+       struct timePropertiesDS tp = clock_time_properties(p->clock);
        struct ptp_message *msg, *fup;
        int err, event;
 
@@ -1681,6 +1684,7 @@ int port_tx_sync(struct port *p, struct address *dst, 
uint16_t sequence_id)
        msg->header.sequenceId         = sequence_id;
        msg->header.control            = CTL_SYNC;
        msg->header.logMessageInterval = p->logSyncInterval;
+       msg->header.flagField[1]       |= tp.flags & PTP_TIMESCALE;
 
        if (p->timestamping != TS_ONESTEP && p->timestamping != TS_P2P1STEP) {
                msg->header.flagField[0] |= TWO_STEP;
@@ -1717,6 +1721,7 @@ int port_tx_sync(struct port *p, struct address *dst, 
uint16_t sequence_id)
        fup->header.sequenceId         = sequence_id;
        fup->header.control            = CTL_FOLLOW_UP;
        fup->header.logMessageInterval = p->logSyncInterval;
+       fup->header.flagField[1]       |= tp.flags & PTP_TIMESCALE;
 
        fup->follow_up.preciseOriginTimestamp = tmv_to_Timestamp(msg->hwts.ts);
 
@@ -2194,6 +2199,7 @@ void process_follow_up(struct port *p, struct ptp_message 
*m)
 
 int process_pdelay_req(struct port *p, struct ptp_message *m)
 {
+       struct timePropertiesDS tp = clock_time_properties(p->clock);
        struct ptp_message *rsp, *fup;
        enum transport_event event;
        int err;
@@ -2258,6 +2264,7 @@ int process_pdelay_req(struct port *p, struct ptp_message 
*m)
        rsp->header.sequenceId         = m->header.sequenceId;
        rsp->header.control            = CTL_OTHER;
        rsp->header.logMessageInterval = 0x7f;
+       rsp->header.flagField[1]       |= tp.flags & PTP_TIMESCALE;
 
        /*
         * NB - We do not have any fraction nanoseconds for the correction
@@ -2306,6 +2313,7 @@ int process_pdelay_req(struct port *p, struct ptp_message 
*m)
        fup->header.sequenceId         = m->header.sequenceId;
        fup->header.control            = CTL_OTHER;
        fup->header.logMessageInterval = 0x7f;
+       fup->header.flagField[1]       |= tp.flags & PTP_TIMESCALE;
 
        fup->pdelay_resp_fup.requestingPortIdentity = 
m->header.sourcePortIdentity;
 
diff --git a/port_signaling.c b/port_signaling.c
index ed217c0..e028449 100644
--- a/port_signaling.c
+++ b/port_signaling.c
@@ -57,6 +57,7 @@ struct ptp_message *port_signaling_uc_construct(struct port 
*p,
                                                struct address *address,
                                                struct PortIdentity *tpid)
 {
+       struct timePropertiesDS tp = clock_time_properties(p->clock);
        struct ptp_message *msg;
 
        msg = port_signaling_construct(p, tpid);
@@ -64,6 +65,7 @@ struct ptp_message *port_signaling_uc_construct(struct port 
*p,
                return NULL;
        }
 
+       msg->header.flagField[1] |= tp.flags & PTP_TIMESCALE;
        msg->header.flagField[0] |= UNICAST;
        msg->address = *address;
 
-- 
1.9.1



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to