EFM OAM のフレームフォーマット
EFM OAM (IEEE802.3ah)は LACP と同じくSlow Protocol<に分類されます。
そのため、L2 マルチキャストアドレスとプロトコルタイプは LACP と同じく、「0180:c200:0002」と「Ox8809」です。
EFM OAM のフレームフォーマットは下記の通りです。
Flag
Flag は 16 bit の領域がありますが、うち 11 bit は予約 (未割当) です。
- 1 bit 目 = Link Fault: 相手からの OAM を受信していないことを、相手に伝えます
- 2 bit 目 = Dying Gasp: 自身に深刻な障害があったことを相手に伝えます
- 3 bit 目 = Critical Event: 想定外の重大なイベントがあったことを相手に伝えます
- 4 bit 目 = Local Stable: 自身が Discovery プロセスを終えたことを相手に伝えます
- 5 bit 目 = Remote Stable: 相手が Discovery プロセスを終えたことを認知したことを相手に伝えます
Code
EFM OAM のフレームタイプには以下の6種類があり、それぞれコードにより識別されます。これらのコードの総称をOAMPDUと言います。
- Information (Code Ox00)
- Event Notification (Code Ox01)
- Variable Request (Code Ox02)
- Variable Response (Code Ox03)
- Loopback Control (Code Ox04)
- Organization Specific (Code OxFE)
各フレームタイプの使われ方の概要は以下の通りです。
1. Information (Code=Ox00)
フレームフォーマットは下記の通りです。
Information Typeには以下の種類があります。
Information Type | 内容 |
---|---|
Ox00 | TLVの終わり |
Ox01 | Local Information |
Ox02 | Remote Information |
Ox03-OxFD | 予約(未割当) |
OxFE | Organization Specific Information 組織で自由に割り当ててよい情報 |
OxFF | 予約(未割当) |
必要な Information を好きなだけ乗せ、最後に Ox00 で終わります。
この Information は「Discovery プロセス」で使われます。
まずは Local Information で相手に自身の情報を伝え、相手からの情報を受信したら Remote Information に情報を乗せ、Remote Stable Flag を 1 にして相手に認知したことを知らせます。相手から同様に Remote Stable Flag = 1 の情報を受信したら Local Stable Flag を 1 にします。
Discovery プロセスにも関連しますが、EFM OAM には2 つのモードがあります。
1つはActive モードで、これは相手が EFM OAM をサポートしているか否かに関係なく、リンクアップと同時にこの Information を投げます。その後は全てのコードのフレームを自ら投げることができます。ただし、Passive モードの相手からの Variable Request や Loopback Control に対しては応答してはいけません。
もう1つはPassive モードで、これは相手から Information を受信した場合にのみ返信します。また、自身に異常を検知した場合は Event Notification を投げることができます。Variable Request や Loopback Control を受信した場合の返信をしてもよいですが、こちらから Variable Request や Loopback Control を投げることはできません。
どちらのモードかは Local Information の "OAM configuration" の中にある Mode Flag で判別することができます。
2. Event Notification (Code=Ox01)
フレームフォーマットは下記の通りです。
Event Typeには以下の種類があります。
Event Type | 内容 |
---|---|
Ox00 | TLVの終わり |
Ox01 | Errored Symbol Period Event |
Ox02 | Errored Frame Event |
Ox03 | Errored Frame Period Event |
Ox04 | Errored Frame Seconds Summary Event |
Ox05-OxFD | 予約(未割当) |
OxFE | Organization Specific Information 組織で自由に割り当ててよい情報 |
OxFF | 予約(未割当) |
必要なEventを好きなだけ乗せ、最後にOx00で終わります。
Erroed Symbol Period Event
シンボルエラー (Window シンボルあたり) を通知します。
Type = Ox01
Length = Ox28 (40 Byte)
Value = 以下の通り
Field | Byte | 内容 |
---|---|---|
TimeStamp | 2 | イベント発生時間(100ms単位) |
Window | 8 | 時間枠(Window * 1シンボル数の必要処理時間) |
Threshold | 8 | エラー閾値 (0~) |
Errors | 8 | Window内で発生したシンボルエラー数 |
Total Errors | 8 | OAMが起動してからの累積シンボルエラー数 |
Total Events | 4 | OAMが起動してからのErrored Symbol Period Event の累積イベント数 |
なお、シンボルエラーとは、4B/5B や 8B/10B 等の符号化時の未定義記号を受信したときを言います。詳細はこちらをご参照下さい。
また、シンボル数とは 4B/5B 符号化であれば 5 bit のことです。なので例えば Window = 100 の場合は 500 bit 処理するのに必要な時間枠を意味します。
Errored Frame Event
コーディングエラー(シンボルエラー)以外のエラー(単位時間あたり)を通知します。
Type = Ox02
Length = Ox1A(26 Byte)
Value = 以下の通り
Field | Byte | 内容 |
---|---|---|
TimeStamp | 2 | イベント発生時間(100ms単位) |
Window | 2 | 時間枠 (1秒~60秒) |
Threshold | 4 | エラー閾値 (0~) |
Errors | 4 | Window内で発生したエラー数 |
Total Errors | 8 | OAMが起動してからの累積エラー数 |
Total Events | 4 | OAMが起動してからのErrored Frame Event の累積イベント数 |
Errored Frame Period Event
コーディングエラー (シンボルエラー) 以外のエラー (Window フレームあたり) を通知します。
Type = Ox03
Length = Ox1C(28 Byte)
Value = 以下の通り
Field | Byte | 内容 |
---|---|---|
TimeStamp | 2 | イベント発生時間(100ms単位) |
Window | 4 | 時間枠(Window * 64Byteフレームの必要処理時間) |
Threshold | 4 | エラー閾値 (0~) |
Errors | 4 | Window内で発生したエラー数 |
Total Errors | 8 | OAMが起動してからの累積エラー数 |
Total Events | 4 | OAMが起動してからのErrored Frame Period Event の累積イベント数 |
Errored Frame Seconds Summary
コーディングエラー (シンボルエラー) 以外のエラー (Window フレームあたり) を通知します。
Type = Ox04
Length = Ox16(22 Byte)
Value = 以下の通り
Field | Byte | 内容 |
---|---|---|
TimeStamp | 2 | イベント発生時間(100ms単位) |
Window | 2 | 時間枠(10~900秒) |
Threshold | 2 | エラー閾値 (0~) |
Errors | 2 | Window内で発生したエラー数 |
Total Errors | 8 | OAMが起動してからの累積エラー数 |
Total Events | 4 | OAMが起動してからのErrored Frame Seconds Summaryの累積イベント数 |
Organization Specific Event
ベンダ等が自由に定義できる領域です。
Type = OxFE
Length = 自由に定義可能
Value = 以下の通り
Field | Byte | 内容 |
---|---|---|
OUI | 3 | Organizationally Unique Identifier |
Varies | * | 自由に定義可能 |
3. Variable Request (Code=Ox02) / 4. Variable Response (Code=Ox03)
フレームフォーマットは下記の通りです。
このフレームは要求・応答形式で、自由に定義可能です。TLV形式でなくても構いません。応用例としてはL2pingも可能ですが、もっと汎用的なL2pingのツールとしてCFMが存在します。
5. Loopback Control (Code=Ox04)
フレームフォーマットは下記の通りです。
Loopback Commandは以下の通りです。
Command | 内容 |
---|---|
Ox00 | 予約(未割当) |
Ox01 | Enable Remote Loopback |
Ox02 | Disable Remote Loopback |
Ox03-FF | 予約(未割当) |
Loopback Control は Active モードのスイッチのみが送信でき、ランダムの bit がそのまま相手から返ってくることで、リンクに問題がないことを確認します。
なお、IEEE802.3ah では何かしらの OAMPDU を一定時間 (デフォルト 5 秒以内) 受信しないと、相手が通信できない状態になったと判断します。keepalive としてどのタイプの OAMPDU を使うかは、実装に委ねられています。
IEEE802.3ah を利用した UDLD 検知の実装として、例えば Loopback に関する応答が無いにも関わらず、相手から通常の Ethernet フレームが送信されてきたら片方向リンク障害と判断することができます。
コメント