D.3.1 概述
如图D. 2所示,OAM子层具有以下功能:
a) Multiplexer:该功能负责将来自高层(如MAC Client子层)的帧、来Control功能模块的OAMPDU和来自Parser的环回帧发送到下层(如MAC子层);
b) Parser:该功能区分OAMPDU、MAC Client帧和环回帧并将它们发送至相应的实体,分别是Control、高层和Multiplexer;
c) Control:该功能负责提供OAM Client实体和功能与OAM子层间的内部接口。它包括Discovery流程,负责发现远端DTE OAM功能的存在和能力,还包括Transmit流程,负责控制OAMPDU到Multiplexer功能模块的发送,以及一组Receive规则,负责控制OAMPDU的接收。
D.3.2 状态图变量
D.3.2.1 常量
OAM_subtype
该常量表示OAMPDU的Subtype域的值。
Slow_Protocols_Multicast
该常量表示Slow Protocols Multicast Address值。
Slow_Protocols_Type
该常量表示Slow Protocols Length/Type域的值。
D.3.2.2 变量
BEGIN
描述:该变量可复位OAM功能。
取值:TRUE,当OAM子层复位或local_oam_enable置为DISABLE时;
FALSE,当(重)初始化完成和local_oam_enable置为ENABLE时。
ind_DA
ind_SA
ind_mac_service_data_unit
ind_reception_status
描述:MA_DATA.indication服务原语的参数。
ind_subtype
描述:Slow Protocol帧中Length/Type域后的字节的值。
取值:整型
local_critical_event
描述:OAM_CTL.request服务原语的参数,指示DTE经过了一个不期望的严重事件状态。
取值:FALSE,表示严重事件没有发生;
TRUE,表示严重事件已经发生。
local_dying_gasp
描述:OAM_CTL.request服务原语的参数,指示DTE经过了一个不可恢复的错误状态。
取值:FALSE,表示不可恢复的本地错误没有发生;
TRUE,表示不可恢复的本地错误已经发生。
local_link_status
描述:OAM_CTL.request服务原语的参数,指示已经建立链路的状态。
取值:FAIL,表示存在链路故障;
OK,表示无链路故障。
local_lost_link_timer_done
描述:OAM_CTL.indication服务原语的参数,用于指示local_lost_link_timer已经超时。
取值:TRUE,表示local_lost_link_timer已经超时;
FALSE,表示local_lost_link_timer没有超时。
local_mux_action
OAM_CTL.request
描述:OAM_CTL.request服务原语的参数,负责控制通过Multiplexer功能模块的来自MAC Client的帧。
取值:FWD,表示Multiplexer将MAC Client帧发送至下层;
DISCARD,表示Multiplexer丢弃MAC Client帧。
local_oam_enable
描述:用于激活/去激活OAM子层实体。
取值:DISABLE,表示接口不使用OAM子层功能;
ENABLE,表示接口使用OAM子层功能。
local_oam_mode
描述:用于配置OAM子层实体处于主动(Active)或被动(Passive)模式。
取值:PASSIVE,表示OAM子层实体配置为被动模式;
ACTIVE,表示OAM子层实体配置为主动模式。
local_par_action
描述:OAM_CTL.request服务原语的参数,负责控制通过Paser功能模块的非OAMPDU流。
取值:FWD,表示Parser把接收到的非OAMPDU发送至上层;
LB,表示在远端环回测试中Paser将接收到的非OAMPDU发送至Multiplexer;
DISCARD,表示Parser丢弃接收到的非OAMPDU。
local_pdu
描述:作为Discovery流程的一部分用于控制OAMPDU的发送和接收。
取值:LF_INFO,表示只允许发送携带Link Fault critical link event set但没有
Information TLV的Information OAMPDU,并且置允许接收Information OAMPDU;
PX_INFO, 表示不允许发送任何OAMPDU, 并且只允许接收Information
OAMPDU;
INFO,表示只允许发送和接收Information OAMPDU;
ANY,表示可以发送和接收任何允许的OAMPDU。
local_satisfied
描述:OAM_CTL.request服务原语的参数,指示OAM Client发现本地和远端OAM配置一致。
取值:FALSE,表示任一端的OAM Client没有发现或不满意本地和远端设置;
TRUE,表示OAM Client满意本地和远端设置。
local_stable
描述:由Discovery状态图设置的一个变量,用于指示本地OAM Client知道和满意远端OAM状态信息。
取值:FALSE,指示本地DTE没有发现或不满意远端状态信息;
TRUE,指示本地DTE已经发现并满意远端状态信息。
local_unidirectional
描述:OAM_CTL.request服务原语的一个参数,指示链路接收方向不可操作时DTE可以发送OAMPDU。
取值:FALSE,表示当接收通道不可操作时DTE不能发送OAMPDU;
TRUE,表示当接收通道不可操作时DTE可以发送OAMPDU。
pdu_req
描述:表示OAMPDU的发送请求,用在Transmit状态图中。
取值:NONE,表示无OAMPDU.request;
CRITICAL,表示携带一个或多个critical link event OAM_CTL.request参数集
(local_dying_gasp, local_link_status, local_critical_event)的OAMPDU.request;
NORMAL,表示不携带critical link event集的OAMPDU.request。
remote_stable
描述:OAM_CTL.request服务原语的参数。OAM Client从接收到的OAMPDU中提取远端状态信息,该参数用于指示远端OAM Clien知道并满意本地OAM状态信息。
取值:FALSE,指示远端DTE没有发现或不满意本地状态信息;
TRUE,指示远端DTE已经发现并满意本地状态信息。
remote_state_valid
描述: OAM_CTL.request 服务原语的参数, 用于指示OAM Client 已经从LocalInformation TLV或接收到的Information OAMPDU中收到远端状态信息。
取值:FALSE,指示OAM Client没有发现远端状态信息;
TRUE,指示OAM Client已经发现远端状态信息。
req_DA
req_SA
req_mac_service_data_unit
req_frame_check_sequence
描述:MA_DATA.request服务原语的参数。
D.3.2.3 消息
CTL:OAMI.indication
描述:该服务原语用于将接收到的具有特定参数的帧发送至内部OAM功能模块。
CTL:OAMI.request
LBF:OAMI.request
描述:该服务原语用于发送具有特定参数的帧。
MAC:MA_DATA.indication
MCF:MA_DATA.indication
描述:该服务原语用于将接收到的具有特定参数的帧发送至Client。
MAC:MA_DATA.request
MCF:MA_DATA.request
描述:该服务原语用于发送具有特定参数的帧。
MADI
描述: MA_DATA.indication(ind_DA, ind_SA, ind_mac_service_data_unit,ind_reception_status)的缩写。
MADR
描述: MA_DATA.request(req_DA, req_SA, req_mac_service_data_unit,req_frame_check_sequence)的缩写。
OAMII
描述: OAMI.indication(DA, SA, oam_service_data_unit, frame_check_sequence,reception_status)的缩写。
OAMIR
描述:OAMI.request(DA, SA, oam_service_data_unit, frame_check_sequence)的缩写。
RxOAMPDU
描述:ind_DA = Slow_Protocols_Multicast * ind_Length/Type = Slow_Protocols_Type*ind_subtype = OAM_subtype的缩写。
rxOK
描述:ind_reception_status = receiveOK的缩写。
valid_pdu_req
描述:(local_pdu≠RX_INFO * pdu_req=NORMAL * pdu_cnt≠0)+ (local_pdu=ANY *pdu_req=CRITICAL)的缩写。
D.3.2.4 计数器
pdu_cnt
描述:该计数器用于限制每秒发送OAMPDU的数量并保证在Transmit状态图中每秒至少发送OAMPDU。
D.3.2.5 定时器
local_lost_link_timer
描述:用于复位Discovery状态图。
周期:5s±10%
pdu_timer
描述:用于保证OAM子层符合每秒发送OAMPDU最大数量要求并且每秒至少发送一个
OAMPDU。
周期:1s±10%
D.3.3 Control
D.3.3.1 概述
Control功能模块提供与OAM Client的接口,该接口对于发送和接收OAMPDU以及传送控制和状态参数是必须的。Control功能模块还包含促使链路建立OAM的Discovery流程,以及控制OAMPDU发送至Multiplexer模块的Transmit流程,另外还包含控制OAMPDU接收的的规程。
D.3.3.2 OAM Discovery
D.3.3.2.1 状态图
OAM提供了一种发现远端DTE OAM子层功能的一种机制,即Discovey流程。OAM子层实体应实现图D. 4所示的OAM Discovery状态图。

OAM子层在每个状态周期性的发送特定OAMPDU,通常每秒一次。当local_pdu置为LF_INFO时,OAM子层发送Flags域置Link Fault比特且无任何Information TLV的Information OAMPDU。当local_pdu置为RX_INFO时,OAM子层不发送任何OAMPDU。当local_pdu置为INFO时,只发送Information OAMPDU。当local_pdu置为ANY时,可发送任何允许的OAMPDU。
D.3.3.2.2 FAULT状态
当进入FAULT状态时,应根据local_link_status值设置local_pdu。如果local_link_status置为FAIL,则local_pdu置为LF_INFO,否则置为RX_INFO,而local_stable置为FALSE。当local_link_status置为FAIL时,DTE应保持此状态向远端DTE指示链路故障。这可通过每秒一次发送Flags 域置Link Fault 比特且数据域无任何Information TLV 的InformationOAMPDU来实现。某些物理编码子层可支持Information OAMPDU的单向传输。
如果OAM被复位、去激活、local_lost_link_timer超时或local_link_status为FAIL,Discovery流程返回FAULT状态。
D.3.3.2.3 ACTIVE_SEND_LOCAL状态
当local_link_status置为OK时,DTE应评估local_oam_mode。配置为主动模式的DTE应发送仅包含Local Information TLV 的Information OAMPDU , 该状态称为ACTIVE_SEND_LOCAL。当处于该状态时,本地DTE等待接收来自远端DTE的InformationOAMPDU。
D.3.3.2.4 PASSIVE_WAIT状态
配置为被动模式的的DTE在发送任何带有Local Information TLV 的InformationOAMPDU前必须等待直到收到带有Local Information TLV的Information OAMPDU为止。该状态称为PASSIVE_WAIT 。因为必须等待直到收到带有Local Information TLV 的Information OAMPDU,所以当连接到另一个被动模式DTE时,被动模式DTE无法完成OAMDdiscovery流程。
D.3.3.2.5 SEND_LOCAL_REMOTE状态
当接收到来自远端DTE带有Local Information TLV的Information OAMPDU时,本地DTE 开始发送包含Local Information TLV 和Remote Information TLV 的InformationOAMPDU。该状态称为SEND_LOCAL_REMOTE。在任意时刻,如果本地或远端DTE的设置改变从而导致本地OAM Client 不满意设置, 则Discovery 流程返回到SEND_LOCAL_REMOTE状态。
D.3.3.2.6 SEND_LOCAL_REMOTE_OK状态
如果本地OAM Client 认定本地和远端DTE 的设置是可接受的, 则进入SEND_LOCAL_REMOTE_OK状态。任意时刻如果本地OAM Client的设置改变从而导致远端OAM Client不满意设置,则OAM Discovery成SEND_LOCAL_REMOTE_OK状态。
D.3.3.2.7 SEND_ANY状态
当OAMPDU接收到指示远端DTE满意各自设置时,本地DTE进入SEND_ANY状态。在全操作链路上这是OAM期待的正常操作状态。
D.3.3.2.8 发送Discovery状态至对端
Flag域的Local Stable和Local Evaluating比特将本地Discovery流程的状态传至对端。当OAM Discovery流程开始时,本地DTE通过将Local Stable比特置为0和Local Evaluating比特置为1,指示OAM Discovery流程没有完成。
在发现远端DTE设置后,如果本地OAM Client不满意远端设置,则将Local Stable比特和Local Evaluating比特置为0来指示Discovery流程不能成功完成。如果满意对端设置,则本地DTE将Local Stable比特置为1和Local Evaluating比特置为0来指示本地OAM Client满意对端设置。
当Local Stable置为1,Local Evaluating置为0,而Remote Stable置为1,RemoteEvaluating置为0时,指示双方OAM Client都满意对端设置,OAM Discovery流程成功完成且local_pdu置为SEND_ANY。
D.3.3.3 Transmit
D.3.3.3.1 状态图
OAM子层实体应实现图D. 5所示的Transmit状态图。

D.3.3.3.2 RESET状态
初始化时进入RESET状态,并启动一个1s的计时器pdu_timer。变量pdu_cnt被10重置,10是每秒可发送OAMPDU的最大数目。RESET状态之后进入WAIT_FOR_TX状态。
D.3.3.3.3 WAIT_FOR_TX状态
当处于WAIT_FOR_TX状态时,Transmit流程等待下面三种情况之一的发生:
a) pdu_timer超时
(1) 前一秒内发送一个或多个OAMPDU;
(2) 前一秒内没有发送任何OAMPDU并且没有任何合法的未判定的发送
OAMPDU请求。
b) 发送OAMPDU的合法请求出现
D.3.3.3.4 pdu_timer超时
当处于WAIT_FOR_TX状态时,如果pdu_timer超时并且在前1s内发送了一个或多个OAMPDU,则transmit流程转移到RESET状态。但如果pdu_timer超时并且在前1s内没有发送OAMPDU, 也没有发送OAMPDU的合法请求出现, 则Transmit 流程转移到发送Information OAMPDU 的TX_OAMPDU状态。这防止Discovery 流程发生重起。如果local_pdu置为LF_INFO,则Transmit流程应保证Information OAMPDU的Flag域置LinkFault比特,数据域没有Information TLV。
如果OAM子层实体配置成不发送任何OAMPDU,如变量local_pdu置为RX_INFO,则Transmit功能模块将通过返回至RESET状态来重起。
D.3.3.3.5 发送OAMPDU的合法请求
当处于WAIT_FOR_TX状态时,如果出现一个合法的发送OAMPDU请求,则Transmit流程在TX_OAMPDU状态发送被请求的OAMPDU。如果发送的OAMPDU的Flag域不包含任何严重链路事件,则在DEC_PDU_CNT状态下减小变量pdu_cnt。合法请求应是下面中的一种:
a) 来自OAM Client的OAMPDU.request服务原语,其中变量local_pdu置为INFO或ANY且pdu_cnt不等于0;
b) 来自OAM Client的OAM_CTL.request服务原语,其中携带一个或多个严重事件参数集且变量local_pdu置为ANY。当变量local_pdu置为ANY时,Discovery流程已经完成并且处于SEND_ANY状态。Discovery流程要在严重事件而不是LinkFault,被发送到对端OAM实体前完成。
D.3.3.3.6 TX_OAMPDU状态
TX_OAMDPU状态产生请求向Multiplexer发送OAMPDU的CTL:OAMI.request服务原语。该请求产生后,pdu_timer超时则Transmit流程返回至RESET状态,如果pdu_timer没有超时则Transmit流程返回至WAIT_FOR_TX状态。
D.3.3.3.7 Transmit规程
以下规程控制CTL:OAMIR服务原语的产生:
a) 当local_pdu置为LF_INFO时,只能产生Flag域置Link Fault比特且没有Information TLV的Information OAMPDU;
b) 当local_pdu置为RX_INFO时,不应产生CTL:OAMIR服务原语;
c) 当local_pdu置为INFO时,只能产生Information OAMPDU;
d) 当local_pdu置为ANY时,
(1) 带有一个或多个严重链路事件参数集的OAM_CTL.request服务原语应产生一个CTL:OAMIR服务原语,并请求发送Flag域置相应比特的InformationOAMPDU;
(2) OAMPDU.request服务原语应产生一个CTL:OAMIR服务原语,并请求发送特殊的OAMPDU。
D.3.3.3.8 Receive规程
CTL:OAMII服务原语指示接收到一个OAMPDU并根据下面的规程轮流向OAM Client实体产生OAMPDU.indication服务原语:
a) 当local_pdu 不置为ANY时,应将Information OAMPDU发送至OAMClient并丢弃非Information OAMPDU。
b) 当local_pdu置为ANY时,应将所有的OAMPDU(包括不知道编码域的OAMPDU)发送至OAM Client。期望OAM Client忽略不知道或不支持OAMPDU。
D.3.4 Multiplexer
D.3.4.1 流程图
OAM子层应实现图D. 6所示的Multiplexer流程图。
D.3.4.2 WAIT_FOR_TX状态
D.3.4.2.1 概述
初始化时进入WAIT_FOR_TX状态。当处于WAIT_FOR_TX状态时,Multiplexer等待下面两种状态之一的发生:
a) 出现合法的OAMPDU发送请求;
b) 转发MAC Client帧或从Parser环回帧的合法请求。

D.3.4.2.2 合法的OAMPDU发送请求
当处于WAIT_FOR_TX状态时,如果出现OAMPDU发送请求,则Multiplexer功能模块在TX_FRAME状态发送被请求OAMPDU。
D.3.4.2.3 合法的转发或环回帧请求
当处于WAIT_FOR_TX状态时,如果出现合法的转发或环回帧请求而没有OAMPDU发送请求,则Multiplexer将检查物理层的状态和单向配置(在CHECK_PHY+LINK状态下),或者在TX_FRAME状态下发送帧或者返回WAIT_FOR_TX状态。
转发来自上层的帧的合法请求由变量MCF:MADR指示,和帧变量local_mux_action置为FWD时一样Multiplexer将对帧进行转发。从Parser功能模块环回帧的请求由变量LBF:OAMIR指示。当任一请求发生时,为了在TX_FRAM状态下发送帧至下层,变量local_unidirectional应置为FALSE或变量local_link_status置为OK。因为在单向链路上只能发送带有Link Fault critical link event indication set且无Information TLV的InformationOAMPDU,所以应对链路状态进行评估以确保不支持可选单向OAM能力的设备能进行相同动作。当local_link_status为OK时,不必考虑单向OAM能力或设置都将发送MAC Client帧。
D.3.4.3 TX_FRAME状态
Multiplexer流程到达TX_FRAME状态,应提供帧透明传输能力。OAMPDU的发送不应影响底层帧的发送(如MAC层发送帧功能是同步的,并且从不中断)。帧发送至下层后,Multiplexer流程WAIT_FOR_TX状态。
D.3.5 Parser
D.3.5.1 流程图

Parser对从下层收到的帧进行解码,将OAMPDU送至Control功能模块,MAC Client帧送至高层,而环回帧送至Multiplexer功能模块。复位后,Parser功能模块进入WAIT_FOR_RX状态。当产生MAC:MADI服务原语时,应检测帧的接收。当接收帧时,Parser功能模块进入PARSE状态。
D.3.5.2 OAMPDU的接收
当判定收到的帧是OAMPDU时进入RX_OAMPDU状态。收到的OAMPDU通过CTL:OAMII服务原语被送至OAM Control功能模块。根据接收规程,OAM Control功能模块会将收到的OAMPDU送至OAM Client。此外,local_lost_link_timer被复位,Parser功能模块返回到WAIT_FOR_RX状态。
D.3.5.3 非non-OAMPDU的接收
根据local_par_action参数设置来处理收到的非OAMPDU。
D.3.5.3.1 FWD模式下非OAMPDU的接收
当判定收到的帧不是OAMPDU并且local_par_action变量置为FWD时,进入RX_DATA状态。收到的帧通过MCF:MADI服务原语送至上层。Parser返回至WAIT_FOR_RX状态。
D.3.5.3.2 LB模式下非OAMPDU的接收
当判定收到的帧不是OAMPDU 并且local_par_action 变量置为LB 时, 进入RX_LOOPBACK状态。收到的帧通过LBF:OAMIR服务原语送至Multiplexer功能模块并环回到远端DTE。帧送至Multiplexer功能模块后,Parser功能模块返回至WAIT_FOR_RX状态。
D.3.5.3.3 DISCARD模式下非OAMPDU的接收
如果local_par_action参数置为DISCARD,Parser功能模块返回至WAIT_FOR_RX状态。


