# L2スイッチング / イーサネットリングプロテクション（EPSR）

イーサネットリングプロテクション（EPSR = Ethernet Protected Switched Ring）は、リング構成のEthernetネットワークに特化したレイヤー2のループ防止・冗長化機能（RFC3619）です。
EPSRは、スパニングツリープロトコル（STP/RSTP/MSTP）と同様な機能を提供するものですが、トポロジーを限定し、各スイッチの役割をあらかじめ固定しておくことで、障害の検出と経路の切り替えをより高速に行います（最短50ミリ秒未満）。
本製品は、EPSRリングを構成するノードのうち、トランジットノードとして機能することができます。
Note

本製品は、EPSRにG.8032のサブリングを組み合わせた構成をサポートしています。詳しくは、G.8032とEPSRを組み合わせた構成をご覧ください。

この章では、EPSRの概要と使用方法について説明します。

## 概要

EPSRは、リング構成のEthernetネットワークでのみ動作します。
EPSRリングは複数のスイッチ（ノード）で構成され、そのうちの1台はリングの動作を制御するマスターノードとして、他はトランジットノードとして設定します。
各スイッチは2つのポートでEthernetリングに接続します。マスターノード上のポートは、一方をプライマリーポート、もう一方をセカンダリーポートとして設定します。データトラフィックに対し、プライマリーポートは常時フォワーディング状態ですが、セカンダリーポートは通常ブロッキング状態であり、リングに障害が発生したときだけフォワーディング状態に切り替わります。障害から復旧したときは再度ブロッキング状態に戻ります。
次にリングの基本的な構成を示します。

### EPSRドメイン

EPSRの保護機能（ループ防止・冗長化機能）は、EPSRドメインと呼ばれる単位ごとに実行されます。EPSRドメインで定義されるのはおもに次の情報です。

- EPSRノード
  EPSR対応スイッチのこと。それぞれ2つのポート（トランクグループは1ポート扱い）でEthernetリングに接続する。役割上次の2つに分類される。
  - マスターノード（1台）
  - トランジットノード（複数台）
- コントロールVLAN
  EPSRドメインの動作を制御するためのVLAN。制御メッセージだけがやりとりされる。各EPSRドメインに1つだけ設定。2つのポート（タグ付き）で構成される。
- データVLAN
  保護対象のVLAN。通常のトラフィックが運ばれる。各EPSRドメインには複数のデータVLANを指定可。リング上ではコントロールVLANの2ポートを共有する（リング上のデータVLANはタグ付きでもタグなしでもよい）。さらに、通常はユーザー接続用のメンバーポートを持つ

### マスターノードとトランジットノード

EPSRドメインを構成するリング上の各スイッチは、役割上マスターノードとトランジットノードに分類されます。マスターノードは、該当EPSRドメインの動作を制御するスイッチで、各ドメインに1台だけ設定できます。その他のスイッチはトランジットノードとなります。
各ノードは2つのポート（トランクグループは1ポート扱い）でEPSRドメインのEthernetリングに接続します。リング上での通信は、制御トラフィック、データトラフィックともにこの2ポートを通じて行われるため、これらのリング接続用ポートはタグ付きに設定することとなります。
Note

EPSRのリング接続用ポート（コントロールVLANが所属するポート）ではLDF検出機能が自動的に無効となります。

### プライマリーポートとセカンダリーポート

マスターノードでは、2つのリング接続用ポートをプライマリーポートとセカンダリーポートに設定します。
プライマリーポートは、コントロールVLAN、データVLANの両方に対して、つねにフォワーディング状態にある（送受信を行える）ポートです。
一方、セカンダリーポートは、コントロールVLANに対してはつねにフォワーディング状態ですが、データVLANに対してはループを防ぐため通常はブロッキング状態になっています。リングに障害が発生した場合は、データVLANに対してもフォワーディング状態となり、送受信を行います。リングが障害から回復したときは、再びブロッキング状態となってループを防止します。

### コントロールVLANとデータVLAN

EPSRドメインは、制御メッセージを運ぶコントロールVLANと、通常データを運ぶデータVLANで構成されます。
コントロールVLANは各ドメインに1つだけ設定でき、各スイッチ上においては純粋に2つのポート（トランクグループは1ポート扱い）で構成しなくてはなりません。
Note

リング接続用ポートとして、LACPチャンネルグループ（自動設定のトランクグループ）は使用できません。スタティックチャンネルグループ（手動設定のトランクグループ）なら可能です。

Note

リング接続用ポートは、片方がトランクグループならもう一方もトランクグループに、片方が単一ポートならもう一方も単一ポートにしなくてはなりません。一方がトランクグループでもう一方が単一ポートの設定はできません。

一方、データVLANは1つのEPSRドメインに対して複数設定できます。データVLANは、リング上ではコントロールVLANの2ポートを共有して通信を行います。また、通常データVLANは、リング接続ポート以外にユーザー接続用のメンバーポートを持ちます。

### 制御メッセージ

コントロールVLANでは、次の制御メッセージがやりとりされます。EPSRでは、これらの制御メッセージを使って、リング障害の発生・回復を検出し、通信回復のための処置を行います。

表 1：EPSR制御メッセージ
メッセージ名 | 機能
Healthcheck | リング障害を検出するため、マスターノードが定期的にプライマリーポートから送出するメッセージ。マスターノードは、一定の時間内にセカンダリーポートでHealthcheckメッセージを受信できなかった場合、リングに障害が発生したと判断する。障害発生中もマスターノードはHealthcheckメッセージを送出し続け、セカンダリーポートで再び受信した場合にリングが障害から回復したと判断する
Ring Up | リングが障害から回復したと判断したマスターノードが、トランジットノードに対してFDBをクリアするよう指示するために送出するメッセージ。ただし、後述するDouble Failからの回復時にかぎり、トランジットノードが送出する場合もある
Ring Down | リングに障害が発生した判断したマスターノードが、トランジットノードに対してFDBをクリアするよう指示するために送出するメッセージ
Link Down | 自身のリング接続用ポートがリンクダウンしたことを検出したトランジットノードが、リング障害の発生をマスターノードに伝えるために送出するメッセージ。Link Downメッセージを受信したマスターノードは、リングに障害が発生したと判断して、Healthcheckメッセージがタイムアウトしたときと同様のアクションをとる
Link Forward Request | 自身のリング接続用ポートがリンクアップしたことを検出したトランジットノードが、該当ポートをフォワーディング状態に遷移させてよいかマスターノードに許可を求めるためのメッセージ。オプション機能であるエンハンストリカバリー有効時にのみ使用される
Permit Link Forward | Link Forward Requestメッセージを受信したマスターノードが、送信元のトランジットノードに対して、フォワーディング状態への遷移を許可するために送信するメッセージ。オプション機能であるエンハンストリカバリー有効時にのみ使用される

### 障害検出機能

EPSRでは、リング障害（ケーブルやスイッチの障害）を検出するために、次の2つの手段を用います。

- Healthcheckメッセージ（マスターノードによるポーリング）
- Link Downメッセージ（トランジットノードによる障害通知）

#### Healthcheckメッセージ

マスターノードは、コントロールVLAN上において、プライマリーポートからHealthcheckメッセージを定期的に送出します。一定の時間内にセカンダリーポートでHealthcheckメッセージを受信できなかった場合は、リングに障害が発生したと判断します。
マスターノードは、障害発生中もHealthcheckメッセージを送出し続け、セカンダリーポートで再び受信できるようになると、リングが障害から回復したと判断します。

#### Link Downメッセージ

トランジットノードは、リングに接続しているポートがリンクダウンしたことを検出すると、もう一方のポートからLink Downメッセージを送出して、障害発生をマスターノードに伝えます。
Link Downメッセージを受信したマスターノードは、リングに障害が発生したと判断して、Healthcheckメッセージがタイムアウトしたときと同様のアクションをとります。

### 基本動作

次に、EPSRの基本的な動作について説明します。

#### 正常動作時

EPSRドメインを構成するリングに障害が発生していない場合、マスターノードがプライマリーポートから送出したHealthcheckメッセージは、一定時間内にセカンダリーポートに到着します。
マスターノードはリングが「Complete」状態にあると見なし、データVLANに対してセカンダリーポートをブロックします。

#### 障害発生時

マスターノードは、一定時間内にセカンダリーポートでHealthcheckメッセージを受信できなかった場合、または、トランジットノードからLink Downメッセージを受信した場合、リングに障害が発生したと判断します。
マスターノードはリングを「Failed」状態に移行させ、データVLANに対してセカンダリーポートのブロックを解除します。またFDBをクリアしてMACアドレスを再学習します。
さらに、マスターノードはRing Downメッセージをすべてのトランジットノードに送信して、FDBをクリアするよう指示します。これにより、リング上での通信が復旧します。

なお、マスターノードは、障害の回復を検出するため障害発生中もHealthcheckメッセージを通常どおり送出し続けます。

#### 障害回復時

障害が回復すると、マスターノードはセカンダリーポートで再びHealthcheckメッセージを受信できるようになります。
この場合、マスターノードはリングを「Complete」状態に復帰させ、データVLANに対してセカンダリーポートを再度ブロックします。またFDBをクリアしてMACアドレスを再学習します。
さらに、マスターノードはRing Upメッセージをすべてのトランジットノードに送信して、FDBをクリアするよう指示します。これにより、リング上での通信が正常時の動作に復旧します。
なお、障害発生箇所に接続されているトランジットノードは、リング接続用ポートのリンクアップにより障害の回復を検知できますが、このとき、復旧したポートをデータVLANに対してただちにフォワーディング状態に戻すとループが起こる可能性があるため、該当ポートをブロッキング状態においたまま（プリフォワーディング状態）、マスターノードからRing Upメッセージが届くのを待って、FDBをクリアし、該当ポートをフォワーディング状態に戻します。

#### Double Fail（単一ノード両端リンク障害）への対応

あるノードの両端のリンクに障害が発生している状態を「Double Fail」と呼びます。この状態から片方のリンクが復旧したときの動作は以下のとおりです。
次の図では、トランジットノードであるスイッチBでDouble Failが発生しています。このとき、スイッチBはリングとの接続性を完全に失っているため、スイッチB配下のデータVLANはEPSRドメインから孤立した状態となります。

この状態から、スイッチBの下流（マスターノードのセカンダリーポートに近い側）にあたるB・C間のリンクが復旧すると、該当リンクの下流にあたるスイッチCでは両方のポートがリンクアップし、プリフォワーディング状態に移行します。
プリフォワーディング状態に遷移したノードは、Ring Upメッセージが届くまでの間、リンクアップしたポート上でデータVLANをブロックします。

(1) しかし、スイッチBの上流にあたるA・B間のリンクが依然ダウンしているため、マスターノードはプライマリーポートから送出したHealthcheckメッセージをセカンダリーポートで受信することができず、Ring Upメッセージの送出機会がありません。
(2) すると、スイッチCはRing Upメッセージを受信できないため、プリフォワーディング状態からフォワーディング状態に移行できず、スイッチB・C間でデータVLANがブロックされたままとなります。
結果、単一リンク障害と同じ状態にもかかわらず、スイッチBの上流（A・B間）はダウン、下流（B・C間）はブロックされて、スイッチB配下のデータVLANはEPSRドメインから孤立した状態のままとなります。
(3) この問題を解決するため、Double Fail状態となったスイッチBは、片側ポートのリンクアップ後、4秒経過してももう一方のポートがリンクアップしない場合、マスターノードの代わりにRing Upメッセージを送出してスイッチCをフォワーディング状態に遷移させます。
これにより、EPSRドメインはスイッチA・B間だけが切れた単一リンク障害の構成となり、スイッチB配下のデータVLANもEPSRドメインとの接続性を回復します。
この後、スイッチBの上流（A・B間）リンクが復旧したときは、通常どおりマスターノードがHealthcheckの成功によってリングの回復を検出し、Ring Upメッセージを送出してリングを完全復旧させることができます。

#### エンハンストリカバリー（複数ノード/複数リンク障害への対応）

前述のDouble Failよりさらに複雑な障害として、複数ノード/複数リンクの同時障害があります。
たとえば次の図では、スイッチB・C間とD・A間でリンク障害が発生しています。このとき、スイッチA・BとスイッチC・Dは互いに接続性がなく、結果的にEPSRドメインがスイッチA・BとC・Dの2つの部分に分割された状態となります。

初期設定では、この状態からどちらか一方のリンクが復旧しても、該当リンク上におけるデータVLANの通信は復旧しません（EPSRドメインの2分割状態は変化しません）。
たとえば次の図では、スイッチB・C間のリンクが復旧していますが、スイッチB・Cともにプリフォワーディング状態で停止してしまい、復旧したB・C間のリンクではデータVLANがブロックされたままとなります。

前述のとおり、単一ノードの両端リンク障害（Double Fail）から片側のリンクが復旧した場合は、トランジットノードがRing Upメッセージを送信して、復旧したリンクの対向ノードをフォワーディング状態に遷移させますが、本例はDouble Failに当たらないため、どのトランジットノードもRing Upメッセージを送信できず、結果的に復旧したリンクの両端に位置するスイッチB・Cがプリフォワーディング状態から抜け出せないのです。
初期設定において、本例のような障害から回復できるのは、障害の発生していたすべてのリンクが復旧し、マスターノードが「リングの回復」を認識したときだけです。
しかし、オプション機能である「エンハンストリカバリー」を有効化すると、本例のような複雑な障害からも部分的な回復が可能になります。EPSRリング上のすべてのノードでエンハンストリカバリーを有効化した場合の動作は以下のとおりです。
先の例と同じように、スイッチB・C間とD・A間でリンク障害が発生している状態から、スイッチB・C間のリンクが復旧した場合、スイッチB・Cでは両方のポートがリンクアップし、プリフォワーディング状態に移行します。
エンハンストリカバリー無効時（初期設定）は、プリフォワーディング状態に遷移したトランジットノードは、Ring Upメッセージが届くまでの間、リンクアップしたポート上でデータVLANをブロックしますが、エンハンストリカバリー有効時は、Link Forward Request（LFR）メッセージを送信して、マスターノードにフォワーディング状態に遷移するための許可を求めます。

LFRメッセージを受信したマスターノードは、Healthcheckメッセージでリングがまだ完全復旧していないことを確認すると、Permit Link Forward（PLF）メッセージで応答して、トランジットノードにフォワーディング状態への遷移を許可します。

自分宛てのPLFメッセージを受信したトランジットノードは、プリフォワーディングからフォワーディング状態に遷移して、ポートのブロッキングを解除します。
Note

マスターノードがダウンしている場合やエンハンストリカバリーに対応していない場合、他にも障害箇所があってマスターノードと通信できない場合などは、PLFメッセージを受信できませんが、その場合はマスターノード不在、すなわち、リングが完全でない（ループしていない）とみなし、一定時間後にプリフォワーディングからフォワーディング状態に遷移し、ポートのブロッキングを解除します。

これにより、EPSRドメインはスイッチD・A間だけが切れた単一リンク障害の構成となり、スイッチA・B・C・D間の通信も回復します。
Note

エンハンストリカバリー有効時にトランジットノードがDouble Failとなってしまった場合は、両端を接続し復旧してください。

## 基本設定

EPSRを使用するための基本設定について説明します。ここでは次のような構成を例に各スイッチの設定方法を説明します。

スイッチB、C、D（トランジットノード）の設定

1. EPSRの動作に必要なEPSRサービスを有効にします。これにはservice epsrコマンドを使います。

       awplus(config)# service epsr

2. VLANモードに移行して、コントロールVLAN（VLAN 2）とデータVLAN（VLAN 100）を作成します。

       awplus(config)# vlan database
       awplus(config-vlan)# vlan 2,100
       awplus(config-vlan)# exit
       awplus(config)#

3. コントロールVLAN（VLAN 2）とデータVLAN（VLAN 100）にポートを割り当てます。
   - コントロールVLANはちょうど2ポート（トランクグループは1ポート扱い）で構成しなくてはならず、さらに両ポートともタグ付きに設定する必要があります。
   - データVLANは、リング接続用のポート2つとユーザー接続用のポートで構成します。リング接続用のポートは、コントロールVLANのメンバーポートと同じポートで、通常はタグ付きに設定します。この場合、リング接続用ポート上ではネイティブVLAN（タグなしパケットの所属先VLAN）が不要なのでnone（なし）に設定しておきます。一方、ユーザー接続用のポートは通常タグなしに設定します。

       awplus(config)# interface port1.0.1-port1.0.2
       awplus(config-if)# switchport mode trunk
       awplus(config-if)# switchport trunk native vlan none
       awplus(config-if)# switchport trunk allowed vlan add 2,100
       awplus(config-if)# exit
       awplus(config)# interface port1.0.3-port1.0.4
       awplus(config-if)# switchport access vlan 100
       awplus(config-if)# exit
       awplus(config)#

   Note

   コントロールVLANにはレイヤー3以上の設定（IPアドレスの設定など）を行わないでください。コントロールVLANはリングを構成・制御するためだけに存在するVLANです。

   Note

   リング接続用ポートとして、LACPチャンネルグループ（自動設定のトランクグループ）は使用できません。スタティックチャンネルグループ（手動設定のトランクグループ）なら可能です。

   Note

   リング接続用ポートは、片方がトランクグループならもう一方もトランクグループに、片方が単一ポートならもう一方も単一ポートにしなくてはなりません。一方がトランクグループでもう一方が単一ポートの設定はできません。

   Note

   リング接続用ポート上において、データVLANをタグなしに設定してもかまいません。この場合は、リング接続用ポートのネイティブVLANとしてデータVLANのVLAN IDを指定しておきます。

4. EPSRドメイン「Test」を作成し、トランジットノードとして動作するよう設定します。トランジットノードでは、コントロールVLANだけを指定してください。

       awplus(config)# epsr configuration
       awplus(config-epsr)# epsr Test mode transit controlvlan 2

5. EPSRドメイン「Test」のデータVLANを指定します。

       awplus(config-epsr)# epsr Test datavlan 100

   Note

   リング接続用ポートが所属していないVLANを指定した場合はエラーとなり設定できません。

6. EPSRドメイン「Test」を有効にします。

       awplus(config-epsr)# epsr Test state enabled

以上で設定は完了です。
エンハンストリカバリー（以下、ERと略します）を使用する場合は、各ノードに次の設定を追加してください。この設定は、EPSRドメインを有効化する前に行ってください。

    awplus(config-epsr)# epsr Test enhancedrecovery enable

同一EPSRドメイン内において、ERが有効なノードと無効なノードが混在していてもかまいませんが、その場合は構成によりERの効果が得られないケースがあります。

- マスターノードでのみERを有効化した場合、ERの効果はまったく発揮されません。
- 一部のトランジットノードでのみERを有効化した場合、下記のノード間のリンクでのみERの効果が発揮されます。
  - ERが有効なトランジットノード・ERが有効なトランジットノード
  - ERが有効なトランジットノード・マスターノード（ERは有効でも無効でもよい）
  なお、トランジットノードだけでなくマスターノードでもERを有効にすると、全般的に回復が早くなります。
  マスターノードでERが無効の場合、ERが有効なトランジットノードはPLFメッセージを受信できないため、LFRメッセージのタイムアウトを待ってからフォワーディング状態に遷移します（「マスターノードが不在」のケースと同じ）。
  PLFメッセージを受信できない場合、トランジットノードはLFRメッセージを4回送信しますが、個々のLFRメッセージの応答待ち時間は6秒固定なので、最初のLFRメッセージを送信してから、マスターノード不在と判定するまで24秒かかることになります。

可能であれば、すべてのノードでエンハンストリカバリーを有効にしたほうが、複合障害から部分回復できる可能性が高くなり、また、全般的に回復までの所要時間が短くなります。
EPSRドメインの情報を確認するにはshow epsrコマンドを使います。
EPSRドメインの統計カウンターを確認するにはshow epsr countersコマンドを使います。