Add inhibit_announce config option.

This option will accomplish 2 things. On the master, it will stop the
announce messages being sent (by disabling FD_MANNO_TIMER timer). On
slave, it will not configure announce message timeouts (by disabling
FD_ANNOUNCE_TIMEOUT timer).

This config option is needed for the Automotive profile as part of
skipping the Best Master Clock Algorithm (BMCA).

Signed-off-by: Vedang Patel <vedang.patel@intel.com>
master
Vedang Patel 2018-10-03 09:41:51 -07:00 committed by Richard Cochran
parent 83be05256b
commit 1cbeec80cd
5 changed files with 26 additions and 4 deletions

View File

@ -242,6 +242,7 @@ struct config_item config_tab[] = {
PORT_ITEM_INT("hybrid_e2e", 0, 0, 1),
PORT_ITEM_INT("ignore_transport_specific", 0, 0, 1),
PORT_ITEM_INT("ingressLatency", 0, INT_MIN, INT_MAX),
PORT_ITEM_INT("inhibit_announce", 0, 0, 1),
PORT_ITEM_INT("inhibit_multicast_service", 0, 0, 1),
GLOB_ITEM_INT("initial_delay", 0, 0, INT_MAX),
GLOB_ITEM_INT("kernel_leap", 1, 0, 1),

View File

@ -34,6 +34,7 @@ masterOnly 0
G.8275.portDS.localPriority 128
asCapable auto
BMCA ptp
inhibit_announce 0
#
# Run time options
#

19
port.c
View File

@ -1592,6 +1592,7 @@ int port_initialize(struct port *p)
p->logMinDelayReqInterval = config_get_int(cfg, p->name, "logMinDelayReqInterval");
p->peerMeanPathDelay = 0;
p->logAnnounceInterval = config_get_int(cfg, p->name, "logAnnounceInterval");
p->inhibit_announce = config_get_int(cfg, p->name, "inhibit_announce");
p->announceReceiptTimeout = config_get_int(cfg, p->name, "announceReceiptTimeout");
p->syncReceiptTimeout = config_get_int(cfg, p->name, "syncReceiptTimeout");
p->transportSpecific = config_get_int(cfg, p->name, "transportSpecific");
@ -2310,7 +2311,9 @@ static void port_e2e_transition(struct port *p, enum port_state next)
break;
case PS_MASTER:
case PS_GRAND_MASTER:
set_tmo_log(p->fda.fd[FD_MANNO_TIMER], 1, -10); /*~1ms*/
if (!p->inhibit_announce) {
set_tmo_log(p->fda.fd[FD_MANNO_TIMER], 1, -10); /*~1ms*/
}
port_set_sync_tx_tmo(p);
break;
case PS_PASSIVE:
@ -2353,7 +2356,9 @@ static void port_p2p_transition(struct port *p, enum port_state next)
break;
case PS_MASTER:
case PS_GRAND_MASTER:
set_tmo_log(p->fda.fd[FD_MANNO_TIMER], 1, -10); /*~1ms*/
if (!p->inhibit_announce) {
set_tmo_log(p->fda.fd[FD_MANNO_TIMER], 1, -10); /*~1ms*/
}
port_set_sync_tx_tmo(p);
break;
case PS_PASSIVE:
@ -2474,9 +2479,9 @@ static enum fsm_event bc_event(struct port *p, int fd_index)
case FD_SYNC_RX_TIMER:
pr_debug("port %hu: %s timeout", portnum(p),
fd_index == FD_SYNC_RX_TIMER ? "rx sync" : "announce");
if (p->best)
if (p->best) {
fc_clear(p->best);
port_set_announce_tmo(p);
}
/*
* Clear out the event returned by poll(). It is only cleared
@ -2487,6 +2492,12 @@ static enum fsm_event bc_event(struct port *p, int fd_index)
port_clr_tmo(p->fda.fd[FD_SYNC_RX_TIMER]);
}
if (p->inhibit_announce) {
port_clr_tmo(p->fda.fd[FD_ANNOUNCE_TIMER]);
} else {
port_set_announce_tmo(p);
}
delay_req_prune(p);
if (clock_slave_only(p->clock) && p->delayMechanism != DM_P2P &&
port_renew_transport(p)) {

View File

@ -98,6 +98,7 @@ struct port {
enum port_state (*state_machine)(enum port_state state,
enum fsm_event event, int mdiff);
int bmca;
int inhibit_announce;
/* portDS */
struct PortIdentity portIdentity;
enum port_state state; /*portState*/

View File

@ -701,6 +701,14 @@ assume the slave role. masterOnly (which is a per-port config option) can then
be used to set individual ports to take master role. BMCA is used in the
Automotive profile to speed up the start time for grand master and slaves. The
default value is 'ptp' which runs the BMCA related state machines.
.TP
.B inhibit_announce
This will disable the timer for announce messages (i.e. FD_MANNO_TIMER) and
also the announce message timeout timer (i.e. FD_ANNOUNCE_TIMER). This is used
by the Automotive profile as part of switching over to a static BMCA. if this
option is enabled, ignore_source_id has to be enabled in the slave because it
has no way to identify master identity in Sync and Follow_Up messages. The
default is 0 (disabled).
.SH UNICAST DISCOVERY OPTIONS