时间感知系统包含最佳主时钟选择功能和同步功能。 这些功能包括特定于端口的方面以及与时间感知系统相关的方面。 这些函数分布在许多实体中,这些实体一起描述了兼容实现的行为。 这些功能由许多状态机指定。
时间感知系统的媒体无关层模型如图10-1所示。 它包括一个SiteSync实体,ClockMaster实体和ClockSlave实体,用于整个时间感知系统,以及每个端口的一个PortSync和一个MD实体。 MD实体执行媒体相关功能,这些功能在相应媒体的子句中描述。 除了实体之外,图10-1还显示了通过PortSyncSync,MDSyncSend和MDSyncReceive结构在实体之间流动的信息(分别参见10.2.2.3,10.2.2.1和10.2.2.2)。
SiteSync,ClockMaster,ClockSlave和PortSync实体每个都包含许多协作状态机,本节后面将对其进行描述(MD实体状态机在相应的媒体相关子句中进行了描述)。 ClockMaster实体通过应用程序接口从外部时间源(称为ClockSource实体(见9.2))接收信息,并将信息提供给SiteSync实体。 ClockSlave实体从SiteSync实体接收主时间同步和当前的主时间信息,并通过一个或多个应用服务接口将信息提供给外部应用程序,称为clockTarget实体(见9.3到9.6)。 SiteSync实体作为一个整体执行与时间感知系统相关联的最佳主时钟选择部分,即,它使用在每个端口上接收的最佳主信息来确定哪个端口已收到最佳信息,并更新所有端口的角色端口(有关端口角色的讨论,请参见10.3.1)。它还将SlavePort上接收的同步信息分发给角色为MasterPort的所有端口(见10.3.1)。 SlavePort的PortSync实体从相关链路另一端的时间感知系统接收最佳主选择信息,将其与当前最佳主信息进行比较,并将比较结果转发给站点同步实体。 SlavePort的PortSync实体还从与端口关联的MD实体接收时间同步信息,并将其转发到SiteSync实体。 MasterPort的PortSync实体将最佳主选择和时间同步信息发送到端口的MD实体,后者又发送相应的消息。
注 - 本章不要求连接到同一gPTP通信路径的时间感知系统的PortSync实体之间一一对应(见3.9),即可以将两个以上的时间感知系统连接到gPTP,使用共享介质并满足本条要求的通信路径。 但是,媒体相关章节可能有额外的要求,将gPTP通信路径限制为该媒体的点对点链路; 在这种情况下,每个链接都有两个PortSync实体,可以认为它们是一对一的对应关系。 其中一个例子是第11章中规定的全双工,点对点媒体相关层。此外,一个或多个gPTP通信路径可以在逻辑上是点对点但遍历相同的共享媒体。
LocalClock实体是一个自由运行的时钟(见3.3),它为时间感知系统提供相对于任意时期的公共时间。 时间感知系统包含LocalClock实体。 LocalClock实体的要求在B.1中指定。 所有时间戳都是相对于LocalClock实体获取的(见8.4.3)。 LocalClock实体还提供currentTime的值(见10.2.3.12),它在状态机中用于指定各种定时器。
注 - LocalClock实体的epoch可以是启用时间感知系统的时间。
10.2中描述了时间同步状态机。 最好的主时钟选择状态机在10.3中描述。 Announce消息的属性和格式在10.4和10.5中描述。 协议的时序特性在10.6中描述。
时间感知系统可能具有特级大师能力。时间感知系统可以可选地通过管理接口被配置为具有特级大师能力。
注意 - 虽然不支持特级大师的时间感知系统永远不能成为gPTP域的特级大师,但这样的时间感知系统包含最佳主选择功能,调用最佳主选择算法,并传递从当前特级大师接收到的同步信息。
时间感知系统中的时间同步功能由许多协作状态机指定。 图10-2本身并不是状态机,但它说明了机器,它们之间的相互关系,用于在它们之间进行通信的主要变量和结构,它们的局部变量和性能参数。 图10-2包括本标准的媒体相关子句中描述的状态机,以说明这些状态机与本节中描述的与媒体无关的层状态机之间的相互关系。 图10-2没有显示第9章中描述的应用程序接口函数,也没有显示介质相关层和LLC之间的服务接口原语。
ClockMasterSyncReceive,ClockMasterSyncOffset和ClockMasterSyncSend状态机对于不支持超级主控的时间感知系统是可选的(见8.6.2.1和10.1.2)。 这些状态机可能存在于不具备大师能力的时间感知系统中; 但是,如果时间感知系统不支持超级主机,则SiteSyncSync状态机不会使用它们通过ClockMasterSyncSend状态机提供给SiteSyncSync状态机的任何信息。
图10-2中与媒体无关的图层状态机如下:
a) ClockMasterSyncReceive(每个时间感知系统一个实例):从ClockSource实体接收ClockSourceTime.invoke函数和LocalClock实体滴答的通知(见10.2.3.18),更新masterTime,并向ClockMasterSyncOffset和ClockMasterSyncSend状态机提供masterTime。对于不支持超级主控的时间感知系统,此状态机是可选的(参见8.6.2.1和10.1.2)。
b) ClockMasterSyncOffset(每个时间感知系统一个实例):从ClockSlave实体接收syncReceiptTime,从ClockMasterSyncReceive状态机接收masterTime,如果时间感知系统不是主控制器,则计算masterTime和syncReceiptTime之间的相位偏移和频率偏移,并提供ClockMasterSyncSend状态机的频率和相位偏移。对于不支持超级主控的时间感知系统,此状态机是可选的(参见8.6.2.1和10.1.2)。
c) ClockMasterSyncSend(每个时间感知系统一个实例):从ClockMasterSyncReceive状态机接收masterTime,从ClockMasterSyncOffset状态机接收masterTime和syncReceiptTime之间的相位和频率偏移,并提供masterTime(即同步时间)以及相位和频率使用PortSyncSync结构偏移到SiteSync实体。对于不支持超级主控的时间感知系统,此状态机是可选的(参见8.6.2.1和10.1.2)。
d) PortSyncSyncReceive(每个端口一个实例):从相应端口的MD实体接收时间同步信息,计算累积的rateRatio,计算syncReceiptTimeoutTime,并将信息发送到SiteSync实体。
e) SiteSyncSync(每个时间感知系统一个实例):从当前从端口的PortSync实体或从ClockMaster实体接收时间同步信息,累积rateRatio和syncReceiptTimeoutTime,并将信息发送到所有的PortSync实体。端口和ClockSlave实体。
f) PortSyncSyncSend(每个端口一个实例):从SiteSync实体接收时间同步信息,请求相应端口的MD实体发送时间同步事件消息,从MD实体接收此事件消息的 < s y n c E v e n t E g r e s s T i m e s t a m p > <syncEventEgressTimestamp> <syncEventEgressTimestamp> ,使用从SiteSync实体接收的最新时间同步信息和时间戳来计算MD实体在一般消息(例如,对于全双工IEEE 802.3媒体)或后续事件中发送的时间同步信息消息(例如,对于IEEE 802.11媒体),并将后一信息发送到MD实体。
g) ClockSlaveSync(每个时间感知系统一个实例):从SiteSync实体接收时间同步信息,计算clockSlaveTime和syncReceiptTime,设置syncReceiptLocalTime,GmTimeBaseIndicator,lastGmPhaseChange,lastGmFreqChange,将clockSlaveTime发送到ClockMaster实体,并向ClockTarget提供信息实体(通过ClockTargetPhaseDiscontinuity接口,见9.6)使该实体能够确定是否发生了相位或频率不连续。
该结构包含当请求MD实体导致发送时间同步信息时由端口的PortSync实体发送到该端口的MD实体的信息。 该结构包含反映该时间用户系统接收的最新时间同步信息的信息,并用于确定时间同步事件消息的内容,并可能分离将由该端口发送的一般消息。
结构如下:
MDSyncSend {
followUpCorrectionField,
sourcePortIdentity,
logMessageInterval,
preciseOriginTimestamp,
upstreamTxTime,
rateRatio,
gmTimeBaseIndicator,
lastGmPhaseChange,
lastGmFreqChange
}
结构的成员定义如下。
followUpCorrectionField包含自grandmaster捕获preciseOriginTimestamp以来的累计时间。 这等于相对于特级大师在大师发送接收的时间同步事件消息的时间,截断到最接近的纳秒之间以及上游时间感知系统发送该事件消息的时间之间的经过时间。followUpCorrectionField等于此端口的PortSync实体最近收到的PortSyncSync结构的followUpCorrectionField成员的值(见10.2.2.3.4)。
sourcePortIdentity是此端口的portIdentity(参见8.5.2)。
logMessageInterval是此端口的currentLogSyncInterval的值(见10.6.2.3)。
preciseOriginTimestamp是特级大师的ClockMaster实体的sourceTime,当主控发送接收到的时间同步信息时,会截断任何小数纳秒。 preciseOriginTimestamp是此端口的PortSync实体最近收到的PortSyncSync结构的preciseOriginTimestamp成员的值(见10.2.2.3.7)。
upstreamTxTime是与接收时间同步信息相对应的 < s y n c E v e n t I n g r e s s T i m e s t a m p > <syncEventIngressTimestamp> <syncEventIngressTimestamp>的值减去连接到该端口的链路上的平均传播时间除以neighborRateRatio(见10.2.4.6)。 upstreamTxTime是此端口的PortSync实体最近收到的PortSyncSync结构的upstreamTxTime成员的值(参见10.2.2.3.8)。
rateRatio是来自此端口的PortSync实体的最近收到的PortSyncSync结构的rateRatio成员的值(见10.2.2.3.9)。 它等于主时钟频率与该时间感知系统的LocalClock实体频率的比率(见10.2.7.1.4)。
gmTimeBaseIndicator是当前特级大师的ClockSource实体的timeBaseIndicator。 它被设置为等于接收的时间同步信息的gmTimeBaseIndicator。 gmTimeBaseIndicator是此端口的PortSync实体最近收到的PortSyncSync结构的gmTimeBaseIndicator成员的值(参见10.2.2.3.10)。
lastGmPhaseChange是当前大师的时间减去前一个大师的时间,当前大师成为大师的时间,或当前大师在最近的gmTimeBaseIndicator更改时的时间步变。 它被设置为等于接收的时间同步信息的lastGmPhaseChange。 lastGmPhaseChange是此端口的PortSync实体最近收到的PortSyncSync结构的lastGmPhaseChange成员的值(见10.2.2.3.11)。
lastGmFreqChange是当前特级大师相对于前一个大师的小数频率偏移,在当前大师变为大师时,或者在gmTimeBaseIndicator最后一次更改之前相对于自身。 它被设置为等于接收的时间同步信息的lastGmFreqChange。 lastGmFreqChange是此端口的PortSync实体最近收到的PortSyncSync结构的lastGmFreqChange成员的值(参见10.2.2.3.12)。
此结构包含由端口的MD实体发送到该端口的PortSync实体的信息。 它为PortSync实体提供主时钟定时信息和接收时间同步事件消息的时间戳,该消息补偿了上游链路上的传播时间。 在端口的MD实体接收到时间同步信息时,将信息发送到PortSync实体。 该信息又由PortSync实体提供给SiteSync实体。 SiteSync实体使用该信息来计算本地振荡器相对于主设备的速率比,并将其传送到其他PortSync实体以用于计算主时钟定时信息。
结构如下:
MDSyncReceive {
followUpCorrectionField,
sourcePortIdentity,
logMessageInterval,
preciseOriginTimestamp,
upstreamTxTime,
rateRatio,
gmTimeBaseIndicator,
lastGmPhaseChange,
lastGmFreqChange
}
结构各个成员定义如下。
followUpCorrectionField包含相对于主控的经过时间,主控方发送接收到的时间同步信息的时间,截断到最接近的纳秒,以及上游时间感知系统发送此信息的时间。
注1 - followUpCorrectionField和preciseOriginTimestamp的总和是与上游时间感知系统发送最近接收的时间同步事件消息的时间相对应的同步时间。
注2 - 对于使用单独的事件和一般消息的媒体(例如,第11章中描述的全双工,点对点媒体),与最近接收的网络同步信息对应的事件消息是事件消息,对应于最近收到的一般消息。对于基于下一事件消息中的事件消息时间戳(例如,第12章中描述的IEEE 802.11媒体)放置同步信息的介质,对应于最近接收的网络同步信息的事件消息是先前的事件消息;在这种情况下,当前事件消息中的时间同步信息是指先前的事件消息。
sourcePortIdentity是此端口接收的时间同步事件消息的sourcePortIdentity的值。 它是发送事件消息的上游MasterPort的portIdentity。
logMessageInterval是此端口接收的时间同步事件消息的logMessageInterval的值。 它是发送事件消息的上游MasterPort的currentLogSyncInterval(见10.6.2.3)。
precisionOriginTimestamp是grandmaster的ClockMaster实体的sourceTime,当主时钟发送时间同步事件消息时,任何小数纳秒被截断。
upstreamTxTime是与时间同步事件消息的接收相对应的 < s y n c E v e n t I n g r e s s T i m e s t a m p > <syncEventIngressTimestamp> <syncEventIngressTimestamp>的值,减去连接到该端口的链路上的平均传播时间除以neighborRateRatio(见10.2.4.6)。
rateRatio是接收的时间同步信息的rateRatio的值。 它等于主终端的频率与连接到该端口的链路另一端的时间感知系统的LocalClock实体的频率之比,即发送最近收到的时间感知系统时间同步事件消息(见10.2.7.1.4)。
gmTimeBaseIndicator是当前特级大师的ClockSource实体的timeBaseIndicator。 它被设置为等于接收的时间同步信息的gmTimeBaseIndicator。
lastGmPhaseChange是当前大师的时间减去前一个大师的时间,当前大师成为大师的时间,或当前大师在最近的gmTimeBaseIndicator更改时的时间步变。 它被设置为等于接收的时间同步信息的lastGmPhaseChange。
lastGmFreqChange是当前特级大师相对于前一个大师的小数频率偏移,在当前大师变为大师时,或者在gmTimeBaseIndicator最后一次更改之前相对于自身。 它被设置为等于接收的时间同步信息的lastGmFreqChange。
此结构由PortSync和ClockMaster实体发送到SiteSync实体,也从SiteSync实体发送到PortSync和ClockSlave实体。
当从PortSync或ClockMaster实体发送时,它向SiteSync实体提供主时钟定时信息,接收时间同步事件消息的时间戳,补偿上游链路上的传播时间,以及如果发生同步接收超时的时间然后,不接收后续的同步消息。 SiteSync实体使用该信息来计算本地振荡器相对于主设备的速率比,并将其传送到其他PortSync实体以用于计算主时钟定时信息。
当从SiteSync实体发送到PortSync或ClockMaster实体时,该结构包含计算同步信息所需的信息,该信息将包含在时间同步事件和将要发送的一般消息的相应字段中,并且还用于计算同步ClockSlave实体将提供给ClockTarget实体的时间。
结构如下:
PortSyncSync {
localPortNumber,
syncReceiptTimeoutTime,
followUpCorrectionField,
sourcePortIdentity,
logMessageInterval,
preciseOriginTimestamp,
upstreamTxTime,
rateRatio,
gmTimeBaseIndicator,
lastGmPhaseChange,
lastGmFreqChange
}
对于从PortSync或ClockMaster实体向SiteSync实体发送结构的情况,PortSyncSync结构的参数在以下子条款中定义。 如果结构从SiteSync实体发送到PortSync或ClockSlave实体,则会从最近收到的PortSyncSync结构复制成员值,其中接收此结构的端口具有SlavePort的端口角色。
如果结构由PortSync实体发送,则localPortNumber是PortSync实体发送此结构的端口的端口号。 如果结构由ClockMaster实体发送,则localPortNumber为零。
如果结构由PortSync实体发送,则syncReceiptTimeoutTime是本地时间的值(即,自由运行的本地振荡器时间),如果此时未接收到后续的时间同步事件消息,则发生同步接收超时。如果结构由ClockMaster实体发送,则syncReceiptTimeoutTime为FFFFFFFFFFFFFFFF16 [见10.2.8.2.1,项目h)]。
如果结构由PortSync实体发送,则followUpCorrectionField是MDSyncReceive结构的followUpcorrectionField成员的值,其接收导致发送此结构(参见10.2.2.2.2)。如果结构由ClockMaster实体发送,则followUpCorrectionField是ClockMaster时间的亚纳秒部分。
10.2.2.3.5 sourcePortIdentity(PortIdentity)
如果结构由PortSync实体发送,则sourcePortIdentity是MDSyncReceive结构的sourcePortIdentity成员的值,其接收导致发送此结构(参见10.2.2.2.3)。如果结构由ClockMaster实体发送,则sourcePortIdentity的clockIdentity成员是此时间感知系统的clockIdentity,sourcePortIdentity的portNumber成员为0。
如果结构是由PortSync实体发送的,则logMessageInterval是MDSyncReceive结构的logMessageInterval成员的值,其接收导致发送此结构(参见10.2.2.2.4)。
如果结构由ClockMaster实体发送,则logMessageInterval是clockMasterLogSyncInterval的值(见10.6.2.4)。
如果结构由PortSync实体发送,则precisionOriginTimestamp是MDSyncReceive结构的preciseOriginTimestamp成员的值,其接收导致发送此结构(参见10.2.2.2.5)。如果结构由ClockMaster实体发送,则precisionOriginTimestamp是ClockMaster时间被截断到下一个较低的纳秒。
如果结构由PortSync实体发送,则upstreamTxTime是MDSyncReceive结构的upstreamTxTime成员的值,其接收导致发送此结构(参见10.2.2.2.6)。
如果结构由ClockMaster实体发送,则upstreamTxTime是与ClockMaster时间对应的本地振荡器时间。
如果结构由PortSync实体发送,则rateRatio是MDSyncReceive结构的rateRatio成员的值,其接收导致发送此结构(参见10.2.2.2.7)。它等于主终端的频率与连接到该端口的链路另一端的时间感知系统的LocalClock实体的频率之比,即最近发送的时间感知系统 - 收到时间同步事件消息(见10.2.7.1.4)。如果结构由ClockMaster实体发送,则rateRatio等于gmRateRatio(见10.2.3.14)。
如果结构由PortSync实体发送,则gmTimeBaseIndicator是MDSyncReceive结构的gmTimeBaseIndicator成员的值,其接收导致发送此结构(参见10.2.2.2.8)。如果结构由ClockMaster实体发送,则gmTimeBaseIndicator等于clockSourceTimeBaseIndicator(见10.2.3.8)。
如果结构由PortSync实体发送,则lastGmPhaseChange是MDSyncReceive结构的lastGmPhaseChange成员的值,其接收导致发送此结构(参见10.2.2.2.8)。
如果结构由ClockMaster实体发送,则lastGmPhaseChange等于clockSourcePhaseOffset(见10.2.3.7)。
如果结构由PortSync实体发送,则lastGmFreqChange是MDSyncReceive结构的lastGmFreqChange成员的值,其接收导致发送此结构(参见10.2.2.2.8)。
如果结构由ClockMaster实体发送,则lastGmFreqChange等于clockSourceFreqOffset(见10.2.3.6)。
10.2.3.1 BEGIN: 由系统初始化控制的布尔值。如果BEGIN为true,则所有状态机(包括每端口状态机)都会持续执行其初始状态。
10.2.3.2 clockMasterSyncInterval: 一个变量,包含连续消息之间的平均时间间隔,ClockMaster实体向SiteSync实体提供时间同步信息。该值由1000000000×2clockMasterLogSyncInterval给出,其中clockMasterLogSyncInterval是ClockMaster实体连续提供时间同步信息之间的平均时间的2的对数(见10.6.2.3)。 clockMasterSyncInterval的数据类型是UScaledNs。
10.2.3.3 clockSlaveTime: 在从机上以LocalClock实体的粒度维持的同步时间[即,ClockSlave实体每个localClockTickInterval(见10.2.3.18)计算一个新值]。 clockSlaveTime的数据类型是ExtendedTimestamp。
10.2.3.4 syncReceiptTime: 接收由ClockSlave实体在PortSyncSync结构中包含的即时时间同步信息计算的同步时间。 syncReceiptTime的数据类型是ExtendedTimestamp。
10.2.3.5 syncReceiptLocalTime: 与syncReceiptTime对应的currentTime的值(即,相对于LocalClock实体的时间)。 syncReceiptLocalTime的数据类型是UScaledNs。
10.2.3.6 clockSourceFreqOffset: ClockSource实体频率相对于当前主控频率的小数频率偏移。 clockSourceFreqOffset的数据类型为Double。
10.2.3.7 clockSourcePhaseOffset: ClockSource实体提供的时间减去同步时间。 clockSourcePhaseOffset的数据类型是ScaledNs。
10.2.3.8 clockSourceTimeBaseIndicator: 一个全局变量,设置为等于ClockSourceTime.invoke应用程序接口函数的timeBaseIndicator参数(见9.2.2.2)。该参数由ClockSource实体设置,并且每当时基更改时由该实体更改。 clockSourceTimeBaseIndicator的数据类型是UInteger16。
10.2.3.9 clockSourceTimeBaseIndicatorOld: 一个全局变量,设置为等于clockSourceTimeBaseIndicator的先前值。 clockSourceTimeBaseIndicatorOld的数据类型是UInteger16。
10.2.3.10 clockSourceLastGmPhaseChange: 一个全局变量,设置为等于ClockSourceTime.invoke应用程序接口函数的lastGmPhaseChange参数(见9.2.2.3)。该参数由ClockSource实体设置,并且每当时基更改时由该实体更改。 clockSourceLastGmPhaseChange的数据类型是ScaledNs。
10.2.3.11 clockSourceLastGmFreqChange: 一个全局变量,设置为等于ClockSourceTime.invoke应用程序接口函数的lastGmFreqChange参数(见9.2.2.4)。该参数由ClockSource实体设置,并且每当时基更改时由该实体更改。 clockSourceLastGmFreqChange的数据类型为Double。
10.2.3.12 currentTime: 相对于LocalClock实体时钟的当前时间值。 currentTime的数据类型是UScaledNs。
10.2.3.13 gmPresent: 一个布尔值,指示域中是否存在支持grandmaster的时间感知系统。如果为TRUE,则存在具有大师能力的时间感知系统;如果为FALSE,则不存在具有大师能力的时间感知系统。
10.2.3.14 gmRateRatio: ClockSource实体的频率与LocalClock实体的频率的测量比率。 gmRateRatio的数据类型为Double。
10.2.3.15 gmTimeBaseIndicator: 通过PortSyncSync结构提供给ClockSlaveSync状态机的gmTimeBaseIndicator的最新值。 gmTimeBaseIndicator的数据类型是UInteger16。
10.2.3.16 lastGmPhaseChange: 通过PortSyncSync结构提供给ClockSlaveSync状态机的lastGmPhaseChange的最新值。 lastGmPhaseChange的数据类型是ScaledNs。
10.2.3.17 lastGmFreqChange: 通过PortSyncSync结构提供给ClockSlaveSync状态机的lastGmFreqChange的最新值。 lastGmFreqChange的数据类型为Double。
10.2.3.18 localClockTickInterval: LocalClock实体的两个连续重要时刻(即“滴答”)之间的时间间隔。 localClockTickInterval的数据类型是TimeInterval。
10.2.3.19 localTime: 当从ClockSource实体接收到最新的ClockSourceTime.invoke函数(见9.2)时,或当LocalClock实体最近更新其时间时currentTime的值。 localTime的数据类型是UScaledNs。
10.2.3.20 selectedRole: 一个长度为numberPorts + 1的Enumeration2数组(见8.6.1)。 selectedRole [j]设置为等于portNumber为j的端口角色(见表10-1)。
10.2.3.21 masterTime: ClockMaster实体根据从ClockSource和LocalClock实体接收的信息维护的时间。 masterTime的数据类型是ExtendedTimestamp。
10.2.3.22 thisClock: 当前时间感知系统的clockIdentity。 thisClock的数据类型是ClockIdentity。
10.2.4.1 asCapable: 当且仅当确定此时间感知系统和连接到此端口的链路另一端的时间感知系统可以通过IEEE 802.1AS相互操作时,该值为TRUE协议。这意味着
a) 这个时间感知系统能够执行IEEE 802.1AS协议,
b) 链路另一端的时间感知系统能够执行IEEE 802.1AS协议,以及
c) 在这个时间感知系统和链路另一端的时间感知系统之间没有非IEEE-802.1AS系统,这些系统引入了足够的损伤,B.3的端到端时间同步性能不能得到满足。
asCapable的确定对于每种媒体是不同的,并且在相应的媒体依赖条款中描述。
10.2.4.2 syncReceiptTimeoutTimeInterval: 如果在间隔期间未收到时间同步信息,则发生同步接收超时的时间间隔。 syncReceiptTimeoutTimeInterval的值等于syncReceiptTimeout(参见10.6.3.1)乘以该端口所连接链路另一端的端口的syncInterval(见10.2.4.5)。链路另一端的端口的syncInterval值是根据收到的Sync消息的logMessageInterval计算的(见10.5.2.2.11)。 syncReceiptTimeoutTimeInterval的数据类型是UScaledNs。
10.2.4.3 currentLogSyncInterval: 发送连续时间同步事件消息之间的平均时间间隔(以秒为单位)的2的对数的当前值(见10.6.2.3)。此值在LinkDelaySyncIntervalSetting状态机中设置(参见11.2.17)。 currentLogSyncInterval的数据类型是Integer8。
10.2.4.4 initialLogSyncInterval: 发送连续时间同步事件消息之间的平均时间间隔(以秒为单位)的对数的初始值(见10.6.2.3)。 initialLogSyncInterval的数据类型是Integer8。
10.2.4.5 syncInterval: 包含端口的平均时间同步事件消息传输间隔的变量。此值在LinkDelaySyncIntervalSetting状态机中设置(参见11.2.17)。 syncInterval的数据类型是UScaledNs。
10.2.4.6 neighborRateRatio: 连接到该端口的链路另一端的timeaware系统的LocalClock实体的频率与该时间感知系统的LocalClock实体的频率的测量比率。 neighborRateRatio的数据类型为Double。
10.2.4.7 neighborPropDelay: 连接到该端口的链路上测量的传播延迟,相对于链路另一端的时间感知系统的LocalClock实体(即,在时间感知系统的时基中表示)链接的另一端)。 neighborPropDelay的数据类型是UScaledNs。
10.2.4.8 delayAsymmetry: 连接到该端口的链路上传播延迟相对于主时基的不对称性,如8.3中所定义。如果未建模传播延迟不对称性,则delayAsymmetry为零。
10.2.4.9 computeNeighborRateRatio: 由LinkDelaySyncIntervalSetting状态机(见11.2.17)设置的布尔值,指示是否要通过此端口计算neighborRateRatio。
10.2.4.10 computeNeighborPropDelay: 由LinkDelaySyncIntervalSetting状态机(见11.2.17)设置的布尔值,指示是否要通过此端口计算neighborPropDelay。
10.2.4.11 portEnabled [以下项目中的术语端口a)到c)是物理端口]: 如果时间感知系统的MAC中继实体和生成树协议实体可以使用由提供的MAC服务,则设置布尔值端口的MAC实体,用于在连接的LAN之间传输和接收帧,即,当且仅当以下情况时,portEnabled为TRUE:
a) MAC_Operational(见IEEE Std 802.1D-2004的6.4.2)为TRUE;和
b) 端口的管理桥接端口状态(参见IEEE Sd 802.1D-2004的14.8.2.2)已启用;和
c) AuthControlledPortStatus被授权(如果端口是网络访问端口;请参阅IEEE Std 802.1XTM-2010 [B5])。
10.2.4.12 pttPortEnabled: 如果启用了端口的时间同步和最佳主选择功能,则设置布尔值。
注 - 预计pttPortEnabled的值将通过管理接口设置(见14.6.4)。通过同时具有portEnabled和pttPortEnabled变量,可以为数据传输启用端口,但不能为同步传输启用端口。
10.2.4.13 thisPort: 当前端口的portNumber。 thisPort的数据类型是UInteger16。
10.2.5.1 random(): 返回统一分布的伪随机数,其数据类型为UInteger16(即,该函数返回 [ 0 , 2 16 − 1 ] [0,2^{16}-1] [0,216−1]范围内均匀分布的伪随机整数)。
10.2.6.1.1 rcvdPSSync: 一个布尔变量,当从PortSync实体的PortSyncSyncReceive状态机或ClockMaster实体的ClockMasterSyncSend状态机收到PortSyncSync结构(见10.2.2.3)时,该变量通知当前状态机。 此状态机重置此变量。
10.2.6.1.2 rcvdPSSyncPtr: 指向由rcvdPSSync指示的接收的PortSyncSync结构的指针。
10.2.6.1.3 txPSSyncPtr: 指向状态机发送的PortSyncSync结构的指针。
10.2.6.2.1 setPSSyncSend(rcvdPSSyncIndPtr): 创建要传输的PortSyncSync结构,并返回指向此结构的指针。 成员将从收到的rcvdPSSyncPtr指向的PortSyncSync结构中复制。
10.2.6.2.2 txPSSync(txPSSyncPtr): 将txPSSyncPtr指向的PortSyncSync结构的副本发送到每个PortSync实体的PortSyncSyncSend状态机和此时间感知系统的ClockSlave实体的ClockSlaveSync状态机。
SiteSyncSync状态机应实现图10-3中状态图所指定的功能,10.2.6.1中规定的局部变量,10.2.6.2中规定的功能,10.2.2.3中规定的结构,以及相关的全局变量和 10.2.3至10.2.5中规定的功能。 状态机从当前从端口的PortSync实体(PortSyncSyncReceive状态机)或从ClockMaster实体(ClockMasterSyncSend状态机)接收时间同步信息,累积rateRatio和syncReceiptTimeoutTime。 如果信息是由PortSync实体发送的,则状态机还会在上游时间感知系统上接收端口的portIdentity,该系统将信息发送到此时间感知系统(如果信息是由ClockMaster实体发送的,则此portIdentity 是零)。 状态机将PortSyncSync结构发送到所有端口的PortSync实体和ClockSlave实体。
10.2.7.1.1 rcvdMDSync: 一个布尔变量,当从同一端口的MD实体的MDSyncReceiveSM状态机收到MDSyncReceive结构时,该变量通知当前状态机(见10.2.2.1)。此状态机重置此变量。
10.2.7.1.2 rcvdMDSyncPtr: 指向由rcvdMDSync指示的接收的MDSyncReceive结构的指针。
10.2.7.1.3 txPSSyncPtr: 指向状态机发送的PortSyncSync结构的指针。
10.2.7.1.4 rateRatio: 一个Double变量,它保存了grandmaster频率与LocalClock实体频率的比率。该频率比通过(a)在主时钟感知系统中测量主时钟频率与LocalClock频率的比率以及在主时钟节点的ClockMasterSend状态机中将rateRatio初始化为该值来计算,并且(b)累积,每个时间感知系统的PortSyncSyncReceive状态机,连接到该端口的链路远端的时间感知系统的LocalClock实体的频率偏移到该时间感知系统的LocalClock实体的频率。
10.2.7.2.1 setPSSyncPSSR(rcvdMDSyncPtr,syncReceiptTimeoutTimeInterval,rateRatio): 创建要传输的PortSyncSync结构,并返回指向此结构的指针。成员设置如下:
a) 将localPortNumber设置为等于thisPort,
b) followUpCorrectionField,sourcePortIdentity,logMessageInterval和preciseOriginTimestamp从接收到的MDSyncReceive结构中复制,
c) upstreamTxTime设置为等于rcvdMDSyncPtr指向的MDSyncReceive结构的upstreamTxTime成员,
d) 将syncReceiptTimeoutTime设置为等于currentTime加syncReceiptTimeoutTimeInterval(见10.2.4.2),并且
e) 函数参数rateRatio设置为等于局部变量rateRatio(在调用setPSSyncReceive之前计算(见图10-4)。然后将PortSyncSync结构的rateRatio成员设置为等于函数参数rateRatio。
10.2.7.2.2 txPSSyncPSSR(txPSSyncPtr): 将txPSSyncPtr指向的PortSyncSync结构的副本发送到此时间感知系统的SiteSyncSync状态机。
PortSyncSyncReceive状态机应实现图10-4中状态图指定的功能,10.2.7.1中规定的局部变量,10.2.7.2中规定的功能,10.2.2.1和10.2.2.3中规定的结构,以及 10.2.3至10.2.5中规定的相关全局变量和函数。 状态机从同一端口的MD实体(MDSyncReceiveSM状态机)接收时间同步信息,累积rateRatio和syncReceiptTimeoutTime。 状态机向rateRatio添加LocalClock实体相对于连接到该端口的链路的远端的上游时间感知系统的LocalClock实体的分数频率偏移。 状态机计算syncReceiptTimeoutTime。 状态机将此信息发送到SiteSync实体(SiteSyncSync状态机)。
10.2.8.1.1 syncSendTime: 相对于LocalClock实体的时间(以秒为单位),此时将通过PortSyncSync结构将同步信息发送到SiteSync实体。 syncSendTime的数据类型是UScaledNs。
10.2.8.1.2 txPSSyncPtr: 指向状态机发送的PortSyncSync结构的指针。
10.2.8.2.1 setPSSyncCMSS(gmRateRatio): 创建要传输的PortSyncSync结构,并返回指向此结构的指针。成员设置如下:
a) localPortNumber设置为0
b) 将precisionOriginTimestamp设置为等于masterTime,并截断任何小数纳秒
c) followUpCorrectionField设置为等于的总和
1) masterTime.fractionalNanoseconds的小数纳秒部分,
2) 数量gmRateRatio×(currentTime - localTime)
d) sourcePortIdentity的clockIdentity成员设置为等于此时间感知系统的clockIdentity
e) sourcePortIdentity的portNumber成员设置为0
注 - 该数量和localPortNumber是多余的;两者都被保留,以便SiteSync实体可以以相同 的方式处理从PortSync实体或ClockMaster实体接收的PortSyncSync结构。
f) logMessageInterval设置为clockMasterLogSyncInterval
g) upstreamTxTime设置为等于localTime
h) 将syncReceiptTimeoutTime设置为等于FFFFFFFFFFFFFFFF16
注 - ClockMaster实体不接收同步消息,并且没有同步接收超时的概念。 syncReceiptTimeoutTime设置为最大可能值,大约5.84×106年。
i) rateRatio设置为等于gmRateRatio
j) gmTimeBaseIndicator设置为clockSourceTimeBaseIndicator
k) lastGmPhaseChange设置为等于clockSourcePhaseOffset,并且
l)lastGmFreqChange设置为clockSourceFreqOffset
10.2.8.2.2 txPSSyncCMSS(txPSSyncPtr): 将txPSSyncPtr指向的PortSyncSync结构的副本发送到SiteSync状态机。
ClockMasterSyncSend状态机应实现图10-5中状态图所指定的功能,10.2.8.1中规定的局部变量,10.2.8.2中规定的功能,10.2.2.3中规定的结构,以及相关的全局变量和10.2.3至10.2.5中规定的功能。状态机从ClockMasterSyncReceive状态机接收masterTime和clockSourceTimeBaseIndicator,并从ClockMasterSyncOffset状态机接收masterTime和syncReceiptTime之间的相位和频率偏移。它通过PortSyncSync结构向SiteSync实体提供masterTime(即同步时间)和相位和频率偏移。
ClockMasterSyncSend状态机对于非主控的时间感知系统是可选的(见8.6.2.1,10.1.2和10.2.1)。该状态机可以存在于不具有超级主管能力的时间感知系统中;但是,如果时间感知系统不支持超级主机,则SiteSyncSync状态机不会使用它提供给SiteSyncSync状态机的任何信息。
10.2.9.1.1 rcvdSyncReceiptTime: 一个布尔变量,用于在从ClockSlave实体收到syncReceiptTime时通知当前状态机。 此状态机重置此变量。
10.2.9.2.1 computeClockSourceFreqOffset():使用ClockMasterSyncReceive状态机计算的masterTime的连续值(见10.2.10)和ClockSlaveSync状态机计算的syncReceiptTime的连续值来计算clockSourceFreqOffset(见10.2.3.6)(见10.2。12)。 只要满足B.2.4中规定的性能要求,任何使用此信息计算clockSourceFreqOffset的方案都是可接受的。
注 - 作为一个例子,clockSourceFreqOffset可以估计为ClockSource实体测量的时间间隔的持续时间与networkTime值计算的相同时间间隔的持续时间之比小于1。
ClockMasterSyncOffset状态机应实现图10-6中状态图所指定的功能,10.2.9.1中规定的局部变量,以及10.2.3至10.2.5中规定的相关全局变量和功能。状态机从ClockSlaveSync状态机接收syncReceiptTime,从ClockMasterSyncReceive状态机接收masterTime。如果此时间感知系统当前不是主控器,即,如果selectedRole [0]等于PassivePort,则计算clockSourcePhaseOffset和clockSourceFrequency偏移量。
ClockMasterSyncOffset状态机对于非主控的时间感知系统是可选的(见8.6.2.1,10.1.2和10.2.1)。该状态机可以存在于不具有超级主管能力的时间感知系统中;但是,如果时间感知系统不支持超级主机,则SiteSyncSync状态机不会使用它通过ClockMasterSyncSend状态机提供给SiteSyncSync状态机的任何信息。
10.2.10.1.1 rcvdClockSourceReq: 一个布尔变量,当从Clock源实体收到ClockSourceTime.invoke函数时,它通知当前状态机。 此状态机重置此变量。
10.2.10.1.2 rcvdClockSourceReqPtr: 指向接收到的ClockSourceTime.invoke函数参数的指针。
10.2.10.1.3 rcvdLocalClockTick: 一个布尔变量,在LocalClock实体更新其时间时通知当前状态机。 此状态机重置此变量。
10.2.10.2.1 computeGmRateRatio(): 使用连续的ClockSourceTime.invoke函数(见9.2.2.1)传递的sourceTime值和localTime的相应值(见10.2.3.19)计算gmRateRatio(见10.2.3.14)。 只要满足B.2.4中规定的性能要求,任何使用此信息的方案,以及由连续的ClockSourceTime.invoke函数和localTime的相应值传达的任何其他信息来计算gmRateRatio都是可接受的。
注 - 作为一个例子,gmRateRatio可以被估计为提供时间的ClockSource实体到这个时间感知系统的经过时间与该时间感知系统的LocalClock实体的经过时间之比。 可以计算接收到的ClockSourceTime.invoke函数和第二个接收的ClockSourceTime.invoke函数之间的时间间隔,该函数稍后可以计算一些ClockSourceTime.invoke函数,即
其中连续接收的ClockSourceTime.invoke函数从0到N索引,第一个这样的函数索引为0,localTimej是当接收到索引为j的ClockSourceTime.invoke函数时localTime的值。
10.2.10.2.2 updateMasterTime(): 根据从ClockSource和LocalClock实体接收的信息更新全局变量masterTime(见10.2.3.21)。 应用程序有责任适当地过滤主时间。 作为一个示例,当接收到此函数时,masterTime可以设置为等于ClockSourceTime.invoke函数的sourceTime成员,并且当rcvdLocalClockTick为TRUE时,可以通过localClockTickInterval(见10.2.3.18)除以gmRateRatio(见10.2.3.14)递增。
ClockMasterSyncReceive状态机应实现图10-7中状态图所指定的功能,10.2.10.1中规定的局部变量,以及10.2.3至10.2.5中规定的相关全局变量和功能。状态机通过ClockSourceTime.invoke函数和从LocalClock实体接收的信息,使用从ClockSource实体接收的信息更新全局变量masterTime。它还计算gmRateRatio,即ClockSource实体频率与LocalClock实体频率的比率。
ClockMasterSyncReceive状态机对于不是主控的时间感知系统是可选的(见8.6.2.1,10.1.2和10.2.1)。该状态机可以存在于不具有超级主管能力的时间感知系统中;但是,如果时间感知系统不支持超级主机,则SiteSyncSync状态机不会使用它通过ClockMasterSyncSend状态机提供给SiteSyncSync状态机的任何信息。
10.2.11.1.1 rcvdPSSync: 一个布尔变量,当从时间感知系统的SiteSync实体的SiteSyncSync状态机收到PortSyncSync结构时,该变量通知当前状态机(见10.2.2.3)。 此状态机重置此变量。
10.2.11.1.2 rcvdPSSyncPtr: 指向由rcvdPSSync指示的接收的PortSyncSync结构的指针。
10.2.11.1.3 lastSourcePortIdentity: 最近收到的PortSyncSync结构的sourcePortIdentity成员。 lastSourcePortIdentity的数据类型是PortIdentity。
10.2.11.1.4 lastPreciseOriginTimestamp: 最近收到的PortSyncSync结构的preciseOriginTimestamp成员。 lastPreciseOriginTimestamp的数据类型是Timestamp。
10.2.11.1.5 lastFollowUpCorrectionField: 最近收到的PortSyncSync成员的followUpCorrectionField成员。 lastFollowUpCorrectionField的数据类型是ScaledNs。
10.2.11.1.6 lastRateRatio: 最近收到的PortSyncSync结构的rateRatio成员。 lastRateRatio的数据类型为Double。
10.2.11.1.7 lastUpstreamTxTime: 最近收到的PortSyncSync成员的upstreamTxTime。 lastUpstreamTxTime的数据类型是UScaledNs。
10.2.11.1.8 lastSyncSentTime: 发送最新MDSyncSend结构时currentTime的值(即相对于LocalClock实体的时间)。 lastSyncSentTime的数据类型是UScaledNs。
10.2.11.1.9 lastRcvdPortNum: 最近收到时间同步信息的端口的portNumber。 lastReceivedPortNum的数据类型是UInteger16。
10.2.11.1.10 lastGmTimeBaseIndicator: 最近收到的PortSyncSync成员的gmTimeBaseIndicator。 lastGmTimeBaseIndicator的数据类型是UInteger16。
10.2.11.1.11 lastGmPhaseChange: 最近收到的PortSyncSync成员的lastGmPhaseChange。 lastGmPhaseChange的数据类型是ScaledNs。
10.2.11.1.12 lastGmFreqChange: 最近收到的PortSyncSync成员的lastGmFreqChange。 lastGmPhaseChange的数据类型为Double。
10.2.11.1.13 txMDSyncSendPtr: 指向发送到此端口的MD实体的MDSyncSend结构的指针。
10.2.11.1.14 syncReceiptTimeoutTime: 最近收到的PortSyncSync结构的syncReceiptTimeoutTime成员的值。 syncReceiptTimeoutTime的数据类型是UScaledNs。
10.2.11.2.1 setMDSync(): 创建MDSyncSend结构,并返回指向此结构的指针。 成员设置如下:
a) 如果lastSourcePortIdentity的clockIdentity成员(见10.2.11.1.3)等于thisClock(见10.2.3.22),则sourcePortIdentity被设置为该端口的portIdentity; 否则,它被设置为lastSourcePortIdentity
b) 将logMessageInterval设置为等于此端口的currentLogSyncInterval值(见10.6.2.3)
c) 将precisionOriginTimestamp设置为等于lastPreciseOriginTimestamp(见10.2.11.1.4)
d) rateRatio设置为lastRateRatio(见10.2.11.1.6)
e) followUpCorrectionField设置为lastFollowUpCorrectionField(见10.2.11.1.5)
f) upstreamTxTime设置为lastUpstreamTxTime(见10.2.11.1.7)
10.2.11.2.2 txMDSync(txMDSyncPtr): 将txMDSyncSendPtr指向的MDSyncSend结构发送到该端口的MD实体的MDSyncSendSM状态机。
PortSyncSyncSend状态机应实现图10-8中状态图所指定的功能,10.2.11.1中规定的局部变量,10.2.11.2中规定的功能,10.2.2.1至10.2.2.3中规定的结构,以及 10.2.3至10.2.5中规定的相关全局变量和函数。 状态机从SiteSyncSync状态机接收时间同步信息,对应于从端口上的最新同步信息的接收,如果此时间感知系统不是主控器,或者来自ClockMasterSyncSend状态机,如果这样时间感知系统是大师。 如果此端口是MasterPort,则状态机会将时间同步信息发送到MDSyncSendSM状态机。
10.2.12.1.1 rcvdPSSync: 一个布尔变量,当从SiteSync实体的SiteSyncSync状态机收到PortSyncSync结构时,该变量通知当前状态机。 此状态机重置此变量。
10.2.12.1.2 rcvdLocalClockTick: 一个布尔变量,在LocalClock实体更新其时间时通知当前状态机。 此状态机重置此变量。
10.2.12.1.3 rcvdPSSyncPtr: 指向收到的PortSyncSync结构的指针。
10.2.12.2.1 updateSlaveTime(): 根据从SiteSync和LocalClock实体收到的信息更新全局变量clockSlaveTime(见10.2.3.3)。 应用程序有责任适当地过滤从属时间(例如,参见B.3和B.4)。 作为一个示例,clockSlaveTime可以通过localClockTickInterval(见10.2.3.18)除以接收的PortSyncSync结构的rateRatio成员来递增。 如果没有时间感知系统具有大师级能力,即gmPresent为FALSE,则clockSlaveTime被设置为LocalClock提供的时间。 当rcvdLocalClockTick为TRUE时,将调用此函数。
10.2.12.2.2 invokeApplicationInterfaceFunction(functionName): 调用名为functionName的应用程序接口函数。 在这种情况下,functionName是 clockTargetPhaseDiscontinuity.result(见9.6.2)。
ClockSlaveSync状态机应实现图10-9中状态图所指定的功能,10.2.12.1中规定的局部变量,以及10.2.3至10.2.5中规定的相关全局变量和功能。 状态机从SiteSyncSync状态机接收PortSyncSync结构。 它计算syncReceiptTime和clockSlaveTime,并设置syncReceiptLocalTime(即相对于对应于syncReceiptTime的LocalClock实体的时间),GmTimeBaseIndicator,lastGmPhaseChange和lastGmFreqChange。 它为ClockMasterSyncOffset状态机提供clockSlaveTime,并向ClockTarget实体提供信息(通过ClockTargetPhaseDiscontinuity接口,见9.6),以使该实体能够确定是否发生了相位或频率不连续。