According to 802.1AS, ports are always expected to transmit announce
messages, even if they never want to become the grand master. Instead
of using a slave only BMC state machine as in 1588, 802.1AS offers a
"grand master capable" flag which allows clocks to not send sync
messages.

This patch keeps a port from transmitting sync (but not announce)
messages when there is no other master.

Signed-off-by: Richard Cochran <[email protected]>
---
 port.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/port.c b/port.c
index 13a34a2..df94e8c 100644
--- a/port.c
+++ b/port.c
@@ -532,6 +532,31 @@ static int port_ignore(struct port *p, struct ptp_message 
*m)
        return 0;
 }
 
+/*
+ * Test whether a 802.1AS port may transmit a sync message.
+ */
+static int port_incapable(struct port *p)
+{
+       struct ClockIdentity cid;
+       struct PortIdentity pid;
+
+       if (!port_is_ieee8021as(p)) {
+               return 0;
+       }
+       if (clock_gm_capable(p->clock)) {
+               return 0;
+       }
+       cid = clock_identity(p->clock);
+       pid = clock_parent_identity(p->clock);
+       if (!memcmp(&cid, &pid.clockIdentity, sizeof(cid))) {
+               /*
+                * We are the GM, but without gmCapable set.
+                */
+               return 1;
+       }
+       return 0;
+}
+
 static int port_is_ieee8021as(struct port *p)
 {
        return p->pod.follow_up_info ? 1 : 0;
@@ -1148,6 +1173,9 @@ static int port_tx_sync(struct port *p)
        if (!port_capable(p)) {
                return 0;
        }
+       if (port_incapable(p)) {
+               return 0;
+       }
        msg = msg_allocate();
        if (!msg)
                return -1;
-- 
1.7.10.4


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Linuxptp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to