If the transportSpecific value is configured to be 1, compute t3c using
the 802.1AS math instead of the 1588 math.

The 1588 defined computation using variable names from this project is:
    D = [(t4 - t1) - (t3 - t2) - c1 - c2]/2

The existing code combines the corrections into a variable t3c which we
can get the value of by isolating t3, c1 and c2:
    t3c = t3 + c1 + c2

The 802.1AS defined computation is:
    D = [(t4 - t1) - (t3 - t2) + c1 - c2]/2

Again, isolating t3, c1 and c2 for 802.1AS:
    t3c = t3 + c2 - c1

This has been tested against the MOTU Switch based on the KSZ9567 with
non-zero correction fields based on the 802.1AS equation as well as MOTU
audio interfaces that don't utilize the correction fields.

Signed-off-by: Dylan Robinson <dylan_robin...@motu.com>
---
 msg.h  | 3 +++
 port.c | 8 +++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/msg.h b/msg.h
index cbd09e7..484435d 100644
--- a/msg.h
+++ b/msg.h
@@ -37,6 +37,9 @@
 
 #define MAJOR_VERSION_MASK     0x0f
 
+/* Values for the transportSpecific field */
+#define TS_IEEE_8021AS (1<<4)
+
 /* Values for the messageType field */
 #define SYNC                  0x0
 #define DELAY_REQ             0x1
diff --git a/port.c b/port.c
index d551bef..a97b6f3 100644
--- a/port.c
+++ b/port.c
@@ -2433,7 +2433,13 @@ static void port_peer_delay(struct port *p)
        t3 = timestamp_to_tmv(fup->ts.pdu);
        c2 = correction_to_tmv(fup->header.correction);
 calc:
-       t3c = tmv_add(t3, tmv_add(c1, c2));
+       /* 802.1AS specifies the peer delay computation differently than 1588. 
Do
+        * the 802.1AS computation if transportSpecific matches 802.1AS 
profile. */
+       if (p->transportSpecific == TS_IEEE_8021AS) {
+               t3c = tmv_add(t3, tmv_sub(c2, c1));
+       } else {
+               t3c = tmv_add(t3, tmv_add(c1, c2));
+       }
 
        if (p->follow_up_info)
                port_nrate_calculate(p, t3c, t4);
-- 
2.30.2



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

Reply via email to