以太网OAM机制概述

摘要:OAM(Operations, Administration, and Maintenance)机制可以让运营商更加便利地监控网络质量以及快速定位链路故障。IEEE802.3-2005 Clause57对以太网OAM进行了详细定义。本文对以太网的OAM机制进行详细描述。


概述

OAM(Operations, Administration, and Maintenance)机制可以让运营商更加便利地监控网络质量以及快速定位链路故障。IEEE802.3-2005 Clause57对以太网的OAM进行了详细定义。OAM子层是IEEE802.3的可选子层,位于LLC层(或MAC Client)和MAC层(或MAC Control子层)之间,主要功能有:

  • 远端故障指示:当本地接收链路出现故障时,可以指示对端设备;
  • 远端环回:可提供在数据链路层上的帧环回功能,以便测试链路性能以及定位故障位置;
  • 链路监视:可指示对端多种的链路事件、可查询各种MIB变量。

控制流程

OAM子层与上下层之间的服务接口如下图所示。

OAM子层的服务接口

OAM Client在OAM机制中起到关键的功能,但其不在IEEE802.3-2005 Clause57的定义范围之内。其作用有:

  • 使能和配置OAM子层实体;
  • 在OAM发现过程(OAM Discovery Process)中负责监视收到的OAMPDU,并根据本地和对端的状态和配置决定是否允许在对端之间建立OAM连接;
  • 在OAM建立之后,负责生成OAMPDU Response或者过滤非法的OAMPDU;
  • 负责管理远端回环的开启与关闭;
  • 负责发送和接收关于各种链路事件(Link Events)的特殊PAMPDU。

OAM子层对上层MAC Client提供标准的IEEE802.3 MAC服务接口(MA_DATA.request以及MA_DATA.indication);OAM子层对OAM Client提供两组服务接口,控制信息的交互采用OAM_CTL.requestOAM_CTL.indication,数据信息的交互采用OAMPDU.requestOAMPDU.request。在OAM子层内,所有的发送帧(*.request)均最终通过复用器(Multiplexer)复用并调用底层的标准IEEE802.3 MAC服务接口MA_DATA.request进行发送;OAM子层通过底层的服务接口MA_DATA.indication获取接收帧,并通过解析器(Parser)解析分路到MAC_Client、OAM_Client或直接环回置Multiplexer,如下图(OAM子层的内部模块关系图)所示。

OAM子层的内部模块关系图

上图中,Control为OAM子层中的控制模块,该模块除了负责提供OAM Client与OAM子层间的服务接口,还负责以下功能:

  • 根据OAM Client的控制信息,负责OAM发现过程
  • 负责OAMPDU(OAM协议数据单元,可以理解为OAM帧)的传输过程
  • 负责OAMPDU的接收规则

这三个过程组成了OAM机制的核心工作流程,下文将详细介绍。

OAM发现过程

OAM发现过程用于判断对端设备是否具有OAM功能以及其OAM的配置是否相匹配,是双方设备进行OAM交互的第一个步骤。OAM发现过程如下图所示:

OAM发现过程状态转移图

  • 若当前未处于发现过程,检查以下触发条件是否满足:

    • OAM子层的复位信号(BEGIN)置为TURE
    • 定时器(local_lost_link_timer)已超时(在一定时间内没有任何OAMPDU)
    • 底层上报本地接收链路存在故障(local_link_status = FAIL)
  • 若满足上述任何一个触发条件,OAM子层则进入发现过程的FAULT state。在该状态,停止定时器local_lost_link_timer;将local_stable置为FASLE(意为本地设备没有接收到或不认可远端设备的OAM状态信息);若local_link_stautus = FAIL,则将local_pdu置为LF_INFO,否则将local_pdu置为RX_INFO

    local_pdu管理着发现过程中哪种OAMPDU可以被发送或接收:

    • LF_INFO:仅有Information OAMPDU可以被发送且该Information OAMPDU的Link Fault critical link event被标记,同时不允许该OAMPDU携带任何Information TLV; 仅允许接收Information OAMPDU
    • RX_INFO: 不允许发送任何OAMPDU;仅允许接收Information OAMPDU
    • INFO: 仅允许发送和接收Information OAMPDU
    • ANY:可以发送和接收任何OAMPDU
  • local_link_status = OK时(底层接收链路恢复正常),设备检查自己的OAM模式(local_oam_mode):

    • 若设备为主动模式(local_oam_mode = ACTIVE),则进入ACTIVE_SEND_LOCAL状态,将local_pdu置为INFO,并开始发送仅包含Local Information TLV的Information OAMPDU;
    • 若设备为主动模式(local_oam_mode = PASSIVE),则进入PASSIVE_WAIT_LOCAL状态,将local_pdu置为RX_INFO即等待接收含有Local Information TLV的Information OAMPDU;
  • 当设备接收到Information OAMPDU并其中含有Local Information TLV,则设备进入SEND_LOCAL_REMOTE状态。在该状态中,local_stable置为FASLE;并将local_pdu置为INFO,开始发送同时包含Local Information TLV和Remote Information TLV的Information OAMPDU。

    当任意时刻本地设备或对端设备发生变化导致本地的OAM Client不认可对端设备的参数设置(local_satisfied = FALSE),则本地设备会重新进入到SEND_LOCAL_REMOTE状态。

  • 当本地和远端的OAM参数设置相匹配时(local_satisfied = TRUE),则设备进入SEND_LOCAL_REMOTE_OK状态。在该状态中,local_stable置为TRUElocal_pdu置为INFO

    当任意时刻本地设备发生变化导致对端的OAM Client不认可本地设备的参数设置时(remote_stable = FALSE),则会本地设备重新进入到SEND_LOCAL_REMOTE_OK状态。

  • 当本地设备接收到远端认可本地参数设备时,本地设备进入SEND_ANY状态。该状态是OAM链路通信中的期望状态。

OAM发现过程中,两端的设备使用OAMPDU的Flag字段中的Remote StableRemote EvaluatingLocal Stable以及Local Evaluationg交互两端的发现状态。其中:

  • Remote StableRemote Evaluating为上一次接收到的OAMPDU中的Local StableLocal Evaluating的拷贝;
  • Local StableLocal Evaluating编码的含义为:
    • 01: 发现过程进行中,尚未结束;
    • 00: 发现过程无法完成,本端设备不认可对端设备的设置;
    • 10: 发现过程完成,本端设备认可对端设备的设置
    • 11`: 保留

传输过程

传输过程是指OAM子层发送任意OAMPDU的控制过程。具体流程如下图所示:

OAM发送过程状态转移图

  • OAM子层复位信号(BEGIN)置为TRUE后,OAM子层进入RESET状态。在该状态,将开启一个1秒钟的定时器(pdu_timer)以及将最大可以发送的OAMPDU数目重置为10(pdu_cnt = 10)
  • Reset状态结束后,将进入WAIT_FOR_TX状态。在该状态中等待三种事件的发生,并进行不同的状态跳转:

    • pdu_timer超时。若pdu_timer超时且之前有OAMPDU发出(pdu_cnt<10),则回到RESET状态;若超时前没有任何OAMPDU发出,则进入TX_OAMPDU状态,发送一个Information OAMPDU,以免重新进入发现过程;
    • pdu_timer未超时,收了发送有效的发送请求信号(valid_pdu_req),则进入DEC_PDU_CNT状态;valid_pdu_req有效的条件有两个:1)若当local_pduINFOANY时OAM Client发出一个OAMPDU.requestpdu_cnt不为0;2) OAM Client发出一个OAM_CTRL.requestlocal_pduANY(发现过程已完成)。
  • DEC_PDU_CNT状态中,若请求发送的OAMPDU不携带紧急链路事件的标记位(pdu_req = NORMAL)则对local_pdu进行减一;

  • TX_OAMPDU状态中,生成CTL:OAMI.request(然后将由复用器Multiplexer调用进行底层服务进行发送);而后,若pdu_timer超时则跳转到RESET状态,反之,跳转到WAIT_FOR_TX状态。

接收规则

在OAM子层的接收链路中,解析器Parser通过CTL:OAMI.indication通知Control接收到一个OAMPDU,Control根据以下的接收规则确定是否向OAM Client产生OAMPDU.indication:

  • 当local_pdu不为ANY时,仅有Information OAMPDU会上报,其余的OAMPDU将被丢弃;
  • 当local_pdu为ANY时,所有的OAMPDU均会被上报,包括一些未知Code Field域的OAMPDU。

主要功能

如上所述,OAM的主要功能包括:远端故障指示、远端环回以及链路监视。以下我们将简要论述。

参考
[http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_One/Home/Catalog/200911/655240_97665_0.htm]

远端故障指示

远端故障指示是告知对端发生了严重的错误,会导致链路不可用。远端故障指示采用OAM协议报文中Flags域中的3个比特位通知对端。当发生这些事件时,会立即产生一个比特位置位Information报文,在之后发送的其他报文中,该比特位也会置位,直到故障解除。

  • 链路故障(Link Fault):对端链路信号丢失,在光口上,收端收不到信号时,在发端发送。在电口上,一般不会产生这个事件,因为在电口上,采用RJ-45接头的收发端在一根电缆中,仅有收端出现故障而发端无故障的概率几乎没有。
  • 临终遗言(Dying Gasp):不可预知的状态发生,比如电源中断,则利用电池或电容中的电量发出报文。
  • 紧急事件(Critical Event):不能确定的紧急事件发生。

链路监视

链路监视用于发现错误和低效的连接。802.3 OAM定义了四种一般链路事件来描述链路的质量。如果端口上所收到的报文的错误统计在给定的周期内达到了预设的值,OAM就报错,同时,发送一般链路事件报文给对端,告诉对端:你发出的报文错误很多。这种OAM报文的Code为01。

  • 错误信号周期(Errored Symbol Period) :就是误码率,目前不支持误码率的检测。
  • 错误帧(Errored Frame):在指定时间内的错误帧数超过阈值,会产生本事件。
  • 错误帧周期(Errored Frame Period):在指定的连续帧数内的错误帧数超过阈值,会产生本事件。
  • 错误帧秒数(Errored Frame Seconds Summary):若在一秒内有错误帧出现,则计数为一个错误帧秒数;在指定的时间内的错误帧秒数超过阈值,会产生本事件。

应用中可以根据具体的要求选用一种或几种事件,设置阈值和周期,对链路进行监控。

远端环回

由于处于物理层,802.3的环回同其他OAM类协议的环回有所不同。802.3的环回是一种物理状态,而不是报文处理流程。

远端环回分为主动端和被动端。主动端发起环回,向被动端发送一个回环报文,被动端收到环回报文后,将本端设置为环回状态。在这种状态下,被动端收到的所有非OAM报文均被原封不动地返回且不再发送除OAM报文之外的其他报文。这时,主动端将收到的所有非OAM报文丢弃。这种状态是一种测试状态,显然,其他协议将不能正常工作,对于上层协议来说,该链路实际上处于Down状态。

OAM的环回功能使得主动端能够单独对双向物理链路进行检测,这时,它可以发送测试报文,对链路进行探测,确定链路的通断、性能等。主动端最后发送解除环回的报文,使被动端恢复正常。