D.2.1 层间服务接口
图D. 1描绘了OAM使用的层间接口。

D.2.2 操作原则
OAM遵循下列原则:
a) OAM子层对上层是一个标准的IEEE 802.3 MAC服务接口,这里的上层包括MAC Client和Link Aggregation;
b) OAM子层对下层使用一个标准的IEEE 802.3 MAC服务接口,这里的下层包括MAC和MAC Control;
c) 来自上层的帧通过OAMPDU复用到OAM子层;
d) OAM子层解析收到的帧并把OAMPDU发送到MAC Client,非OAMPDU则送至上层。在OAM远端环回模式下,OAMPDU被环回到下层;当对端OAM实体处于OAM远端环回模式下时,OAM子层将丢弃OAMPDU,上层(如桥)将不对环回帧进行处理;
e) OAM子层不要求识别物理层;
f) OAM在单一链路上传递,仅在OAM Client实体间或OAM子层实体间传送,不会被OAM Client转发;
g) OAM通过使用Organization Specific OAMPDU、Organization SpecificInformation TLV和Organization Specific Event TLV进行扩展,但扩展后的功能超出本标准讨论的范围。
D.2.3 MAC数据服务接口实例
上层如MAC Client通过标准的MAC数据服务接口与OAM子层通信。同样的,OAM子层通过相同的标准服务接口与下层如MAC Control或MAC通信。
本节使用了2个MAC数据服务接口实例,每个服务原语前加上一个前缀以指示相关的两个接口,如图D. 1所示。使用的前缀说明如下:
a) MCF:在上层和OAM子层间的接口上发送的原语使用该前缀,MCF是MAC Client Frame的缩写;
b) MAC:在下层(如MAC子层等)和OAM子层间的接口上发送的原语使用该前缀。
D.2.4 OAM Client的作用
OAM Client对于建立和管理链路OAM有重要的作用。OAM Client使能和配置OAM子层实体。在OAM发现流程中,OAM Client监控来自远端DTE的OAMPDU,并根据本地和远端状态、配置参数来使能链路上的OAM功能。
OAM建立后,OAM Client负责管理OAMPDU响应。例如,OAM Client不响应非法请求如变量请求和来自被动模式DTE的Lookback Control OAMPDU。OAM Client还通过响应特殊的OAMPDU和变更本地配置参数来管理OAM远端环回模式。
链路事件通知在对等OAM实体间传递,OAM Client通过发送和接收特殊的OAMPDU来进行事件通知。为了增加远端DTE接收到特定事件通知的机会,OAM Client会重复发送事件通知。
D.2.5 OAM Client互操作
D.2.5.1 基本要求
OAM子层实体与OAM Client通信时使用下列新的层间服务接口(强制):
OAMPDU.request
OAMPDU.indication
OAM_CTL.request
OAM_CTL.indication
D.2.5.2 OAMPDU.request
D.2.5.2.1 功能
该原语规定了从OAM Client实体到OAM Client实体的数据发送。
D.2.5.2.2 服务原语的语法
服务原语描述如下:
OAMPDU.request (
source_address,
flags,
code,
data
)
source_address参数规定了一个独立的MAC地址。
flags参数用于产生待发送OAMPDU的Flags域。因为OAM_CTL.request服务原语中已
经包含了Flags域中的指示比特2:0,所以flags参数中仅包含Flags域中的指示比特15:3。
code参数用于产生待发送OAMPDU的Code域。
data参数用于产生待发送OAMPDU的Data域。
D.2.5.2.3 产生时间
该原语在OAMPDU发送至对等实体时由OAM Client实体产生,是对等实体对OAMClient请求的响应或者是对发送至OAM Client的内部产生数据的响应。
D.2.5.2.4 接收的效果
接收到该原语后,OAM子层实体将接收到的信息插入所有的OAMPDU域,包括DA、SA、Length/Type和Subtype,并将形成的OAMPDU发送至较低的协议层最终发送给对等OAM Client实体。
D.2.5.3 OAMPDU.indication
D.2.5.3.1 功能
该原语规定了从OAM子层实体到OAM Client实体的数据传送。
D.2.5.3.2 服务原语的语法
服务原语描述如下:
OAMPDU.indication (
source_address,
flags,
code,
data
)
source_address参数是接收到的OAMPDU的源MAC地址。
flags参数是接收到的OAMPDU完整的Flags域。
code参数是接收到的OAMPDU的Code域。
data参数是接收到的OAMPDU的Data域。
D.2.5.3.3 产生时间
该原语从OAM子层实体传送至OAM Client实体,向本地OAM子层实体指示一个OAMPDU的到达。该原语仅通知格式合法且被正确接收的OAMPDU的到达。
D.2.5.3.4 接收的效果
未规定。
D.2.5.4 OAM_CTL.request
D.2.5.4.1 功能
该原语规定了从OAM Client实体到OAM子层实体的控制信息传送。
D.2.5.4.2 服务原语的语法
服务原语描述如下:
OAM_CTL.request (
local_unidirectional,
local_link_status,
local_dying_gasp,
local_critical_event,
local_satisfied,
remote_state_valid,
remote_stable,
local_mux_action,
local_par_action,
information_data
)
local_unidirectional参数用来指示发送点支持单向(unidirectional)链路上的OAMPDU传送。
local_link_status、local_dying_gasp和local_critical_event参数用来指示应传送给对等OAM实体的紧急事件:
local_link_status参数用于传递物理层确定的链路状态,当设置为FAIL时,会导致OAM子层实体发送Information OAMPDU,其中Flags域中的Link Fault比特被设置但没有Information TLV;
local_dying_gasp参数用于通知本地不可恢复的错误状态。如果设置了该参数,则会导致OAM子层实体发送Information OAMPDU,其中Flags域中的Dying Gasp比特被设置;local_critical_event参数用于通知未定义的严重链路事件,如果设置了该参数,则会导致OAM子层实体发送Information OAMPDU,其中Flags域中的Critical Event比特被设置。local_satisfied、remote_state_valid和remote_stable参数用于发现流程。OAM Client对本地配置和收到的Local Information TLV中的远端配置进行比较后,将对ocal_satisfied参数进行设置。
local_mux_action和local_par_action参数用于控制OAM子层的Multiplexer和Parser功能的状态。
information_data参数包含Local Information TLV域。如果有用,Transmit流程的Information OAMPDU可包含Remote Information和Organization Specific Information TLV域。
D.2.5.4.3 产生时间
该原语从OAM Client实体发送至OAM实体,用于更新控制信息。
D.2.5.4.4 接收的效果
接收到该原语后,OAM子层会产生Information OAMPDU或更新以后发送的InformationOAMPDU的特定域。此外,会根据新更改的控制信息对OAM功能重新进行评估。
D.2.5.5 OAM_CTL.indication
D.2.5.5.1 功能
该原语规定了从OAM子层实体到OAM Client实体的控制信息传送。
D.2.5.5.2 服务原语的语法
服务原语描述如下:
OAM_CTL.indication (
local_pdu,
local_stable,
local_lost_link_timer_done
)
local_pdu和local_stable参数在发现流程中被OAM子层用于指示OAM Client状态信息。
local_lost_link_timer_done参数用于传递local_lost_link_timer的超时信息。
D.2.5.5.3 产生时间
该原语从OAM子层实体传送至OAM Client实体并指示本地状态信息已经发生改变。
D.2.5.5.4 接收的效果
未规定。
D.2.6 OAM内部服务接口实例
OAM子层使用OAM内部服务接口进行内部通信,并使用了2个OAM内部服务接口实例。每个服务原语分配了一个前缀,用于指示相关的两个接口。前缀说明如下:
a) LBF:在Parser和Multiplexer间的接口上发送的服务原语使用该前缀,LBF是look back frame的缩写;
b) CTL:在Control和其他OAM功能间的接口上发送的服务原语使用该前缀,CTL是Control功能的缩写。
D.2.7 内部功能块图

D.2.8 OAM内部互操作
D.2.8.1 基本要求
OAM子层实体使用下列新的内部服务接口(强制):
OAMI.request
OAMI.indication
D.2.8.2 OAMI.request
D.2.8.2.1 功能
该原语规定了到Multiplexer功能块的帧传送,是一种OAM子层内部的动作。
D.2.8.2.2 服务原语的语法
服务原语描述如下:
OAMI.request (
destination_address,
source_address,
oam_service_data_unit,
frame_check_sequence
)
destination_address参数定义了一个多播地址。
source_address参数定义了一个单独的MAC地址。
oam_service_data_unit参数规定了在OAM子层实体内发送的服务数据单元,包括Length/Type、Subtype、Flags、Code和Data/Pad域,OAM子层实体将有充足的相关信息来确定数据单元的长度。
frame_check_sequence参数规定了帧中的帧校验序列域。
D.2.8.2.3 产生时间
当一个帧经过Multiplexer功能块要环回至远端DTE时,Parser功能块产生该原语。当OAMPDU经过Multiplexer功能块被传送至对等OAM实体时,Control功能块也会产生该原语,这是OAM子层内部的动作。
D.2.8.2.4 接收的效果
接收到该原语后,Multiplexer功能块会将格式正确的帧通过MAC数据服务接口传送至下层。
D.2.8.3 OAMI.indication
D.2.8.3.1 功能
该原语规定了到Control功能块的帧传送,是一种OAM子层内部的动作。
D.2.8.3.2 服务原语的语法
OAMI.indication (
destination_adress,
source_address,
oam_service_data_unit,
frame_check_sequence,
reception_status
)
destination_adress参数定义了一个多播地址,由收到的帧的DA域决定。
source_adress参数定义了一个单独的MAC地址,由收到的帧的DA域决定。
oam_service_data_unit参数规定的OAM服务数据单元和内部OAM功能块接收到的一致。
frame_check_sequence参数是收到的帧FCS域规定的循环冗余校验值。
reception_status参数用于将状态信息传送至内部OAM功能块。reception_status的取值见4.3.2节。
D.2.8.3.3 产生时间
当Parser功能块将接收到的OAMPDU传送到Control功能块时产生该原语,并且只有当OAMPDU格式正确且被正确接收时该原语才会产生。
D.2.8.3.4 接收的效果
收到该原语后,Control功能块会更新内部状态变量并通过OAMPDU.indication服务原语将OAMPDU传送至OAM Client。
D.2.9 模式
D.2.9.1 要求
DTE的OAM子层可支持主动和/或被动模式。当OAM被使能时,应选择支持主动或被动模式。表D. 1列出了主动和被动模式DTE的动作。


D.2.9.2 主动模式
主动模式的DTE根据Discovery流程规定(如图D. 4所示)对Information OAMPDU交换进行初始化。Discovery流程实现后,就允许主动模式的DTE在与远端主动模式的OAM对等实体连接时发送任何OAMPDU。如果远端OAM实体处于被动模式则主动模式DTE的操作会受限。主动模式DTE不响应来自被动模式DTE的远端环回命令和变量请求。
D.2.9.3 被动模式
被动模式的DTE不对Discovery流程进行初始化。被动模式DTE响应远端DTE发起的Discovery流程初始化。被动DTE不应发送Variable Request OAMPDU或Loopback ControlOAMPDU。
D.2.10 OAM事件
OAM定义了一组影响链路操作的事件。OAM包含与远端DTE进行通信的机制。
D.2.10.1 严重链路事件
表D. 2列出了严重链路事件定义。严重链路事件由OAMPDU中的Flags域承载。

注:包含Critical Event、Dying Gasp和Link Fault标志的特定故障定义可特殊实现,但不在本标准规定范围内。
D.2.10.2 链路事件
链路事件通过Link Event TLV来通知,包括Errored Symbol Period Event和ErroredFrame Event。
D.2.10.3 本地事件处理流程
本地事件通过下面描述的两种机制之一通知对端DTE。
a) D.2.10.1 节定义的严重链路事件通过OAM_CTL.request服务原语通OAM子层。OAM子层对严重链路事件的响应是设置或清除后续产生的所有OAMPDU的Flags域中的相关比特。
b) OAM Client为每个事件发送包含Link Event TLV的Event NotificationOAMPDU,但不通知远端DTE。OAM Client使用OAMPDU.request服务原语来发送Event Notification OAMPDU。为了提高劣化链路上远端DTE接收的可靠性,OAM Client可重复发送Event Notification OAMPDU。
D.2.10.4 远端事件处理流程
本地OAM Client可通过下面描述的两种机制之一检测远端事件。
a) 本地OAM子层应通过收到的OAMPDU中的Flags域来检测D.2.10.1 节定义的严重链路事件。OAM子层使用OAMPDU.indication服务原语来通知OAMClient。在接收来自远端DTE的指示Link Fault的Information OAMPDU时,建议OAM Client将OAM_CTL.request服务原语中的local_link_status参数设置为OK,这种处理方式可避免链路两端处于死锁状态使两端的DTE均无法接收帧。
b) 本地OAM 子层应通过接收Event Notification OAMPDU 以及通过OAMPDU.indication服务原语OAMPDU传送给OAM Client来检测其它所有的链路事件。OAM Client将丢弃接收到的重复的Event Notification OAMPDU。
D.2.11 OAM远端环回
D.2.11.1 基本功能
OAM提供了一个数据链路层帧级的远端环回模式,该模式可选。OAM远端环回可用于故障定位和链路性能测试。当远端DTE处于OAM远端环回模式时,在任意时刻可要求本地和远端DTE统计性能并进行比较。在环回帧发送到远端DTE之前、期间或之后,均可产生这种询问请求。此外,由OAM子层对环回帧进行分析以确定链路运行是否正常。图D. 3描绘了OAM环回帧经过本地和远端DTE各子层的传输路径。

D.2.11.2 初始化OAM远端环回
为了初始化OAM远端环回,本地OAM Client通过OAM_CTL.request服务原语将local_mux_action参数和local_par_action参数置为DISCARD。本地OAM Client发送携带Enable OAM Remote Lookback命令的Loopback Control OAMPDU。远端OAM Client收到Loopback Control OAMPDU 后, 首先将它的local_par_action 参数置为LB 并通过OAM_CTL.request服务原语将它的local_mux_action参数置为DISCARD,然后发送一个Information OAMPDU来指示其参数状态的更新。本地OAM Client收到远端OAM Client发送的指示状态已经更新的Information OAMPDU后,会将local_mux_action置为FWD。如果OAM Client已经发送了Loopback Control OAMPDU并正在等待来自对端DTE的指示已处于远端OAM环回模式的响应Information OAMPDU,同时又收到对端发来的OAM远程环回命令,则推荐采用以下规则:
a) 如果本地DTE的source_address比对端的高(higher),则本地DTE在接收到对端命令后应进入OAM远端环回模式;
b) 如果本地DTE的source_address比对端的低(lower),则本地DTE不处理对端发来的OAM远端环回命令。如果不遵循以上原则,则两端OAM Client可能会同时发送OAM远端环回命令并导致不确定的结果。
D.2.11.3 OAM远端环回期间
当处于OAM远端环回模式时:
a) 本地DTE 从MAC Client 发送帧并从OAM Client 或OAM 子层发送OAMPDU;
b) 在远端OAM子层实体中,每个非OAMPDU(包括其它Slow Protocol帧)不做任何改变就进行环回;
c) 远端DTE收到的OAMPDU被送至远端OAM Client;
d) 为了使Discovery流程不处于重起状态,两端DTE都应向对端发送OAMPDU,也可以向对端发送其它OAMPDU;
e) 本地DTE收到的帧由OAM子层进行解析,OAMPDU送至OAM Client而其它所有的帧都将被丢弃。
D.2.11.4 退出OAM远端环回
当本地DTE 期望结束OAM 远端环回测试时, 本地OAM Client 将自己的loacal_mux_action参数置为DISCARD,并发送携带Disable OAM Remote Loopback命令的Lookback Control OAMPDU。远端OAM Client收到携带Disable OAM Remote Loopback命令的Lookback Control OAMPDU后,首先通过OAM_CTL.request服务原语将自己的 local_par_action和local_mux_action参数置为FWD,然后发送指示参数更新的InformationOAMPDU。收到指示local_par_action 和local_mux_action参数置为FWD的InformationOAMPDU 后, 本地OAM Client 也通过OAM_CTL.request 服务原语将自己的local_par_action和local_mux_action参数置为FWD。远端Parser继续处理接收到的非OAMPDU并向上送至MAC Client,而本地Multiplexer继续转发来自本地MAC Client的所有帧。
D.2.11.5 OAM远端环回期间的OAMPDU丢失
在OAM远端环回测试之前、期间或之后都有可能会丢失OAMPDU。丢失LookbackControl OAMPDU和Information OAMPDU会对OAM远端环回的运行造成特殊影响。通过检查所有接收到的Information OAMPDU,本地OAM Client可以确认远端OAM Client是否已经收到Lookback Control OAMPDU。因为要连续发送Information OAMPDU以保证Discovery流程不处于重起状态,所以偶尔丢失一个Information OAMPDU不会严重影响OAM远端环回模式的运行。
D.2.11.6 OAM远端环回期间的帧丢失
当链路处于OAM远端环回模式时,远端OAM子层实体不应发送MAC Client帧。根据远端DTE对OAM环回的实现方式,不是所有接收到的帧都会被环回至本地DTE。本地和远端DTE之间的时钟差异是导致帧丢失的原因之一,因为帧发送速率和接收速率之间的差值会使任一端DTE的缓存区溢出。传输中发生错误的帧将被接收帧的MAC子层丢弃。远端DTE插入的OAMPDU也会影响环回帧的可用带宽。在确定OAM远程环回模式下的帧发送速率时,应考虑拓扑结构(如点到点仿真、不对称链路等)。当双向链路的的数据速率不对称时,如果接收带宽小于发送带宽则会发生帧丢失。
应统计被远端DTE的OAM子层丢弃的环回帧的数目,这可区分帧丢失是由链路错误造成还是被OAM子层丢弃,从而有助于检测链路运行状况。
D.2.11.7 OAM远端环回的定时考虑
为了使OAM远端环回操作更有效率,必须严格限制远端OAM Client收到LookbackControl OAMPDU后的响应时间。
为了保证正确的操作,在收到携带Enable OAM Remote Loopback命令的LookbackControl OAMPDU之后一秒内,OAM Client必须进行以下操作
a) 通过OAM_CTL.request 服务原语将local_par_action 参数置为LB ,local_mux_action参数置为DISCARD;
b) 发送Information OAMPDU。为了保证正确的操作,在收到携带Disable OAM Remote Loopback命令的Lookback Control OAMPDU之后一秒内,OAM Client必须进行以下操作:
a) 通过OAM_CTL.request 服务原语将local_par_action 参数和local_mux_action参数置为FWD;
b) 发送Information OAMPDU。在远端OAM Client发送指示local_par_action参数已经改变的Information OAMPDU之前,远端MAC Client可能会发送帧,这些远端MAC Client帧将被本地DTE丢弃。
D.2.12 单向OAM操作
当链路的一个方向无法运行并传送数据时,OAM应提供一种基于OAMPDU的机制来通知远端DTE。出于诊断目的的链路单向运行能力可帮助实现错误检测与通知等维护工作。一些物理层设备可支持单向OAM操作。当链路处于单向OAM模式时,OAM子层应保证仅向链路发送Information OAMPDU,该OAMPDU携带了Link Fault critical link event指示但没有Information TLV,且每秒发送一个。


