(57)【特許請求の範囲】
【請求項１】
論理データパスセットと関連付けられたフォワーディング動作を実現する管理対象フォワーディングエレメントのセットを管理する物理コントロールプレーンデータを生成するネットワーク制御システムであって、
（i）前記論理データパスセットを定義する入力データを受信し、前記論理データパスセット用のデータの第１の変換を行って前記論理データパスセット用の中間データタプルを生成し、（ii）前記管理対象フォワーディングエレメントのセットが動作するホストのセットに前記中間データタプルを配信する第１コントローラインスタンスと、
（i）前記論理データパスセット用の前記中間データタプルを受信し、（ii）該中間データタプルを、前記ホストの特定の１つで動作する前記管理対象フォワーディングエレメントによって使用される物理コントロールプレーンデータに変換する、前記特定のホストで動作する第２コントローラインスタンスと、
を有することを特徴とするネットワーク制御システム。
【請求項２】
前記特定のホストは第１ホストであり、前記管理対象フォワーディングエレメントは第１管理対象フォワーディングエレメントであり、
前記ネットワーク制御システムは、
（ｉ）前記論理データパスセット用の前記中間データタプルを受信し、（ii）該中間データタプルを、前記ホストの１つの第２ホストで動作する第２管理対象フォワーディングエレメントによって使用される物理コントロールプレーンデータに変換する前記第２ホストで動作する第３コントローラインスタンス
を更に有することを特徴とする請求項１に記載のネットワーク制御システム。
【請求項３】
前記第１ホストで動作する前記第１管理対象フォワーディングエレメントによって使用される前記物理コントロールプレーンデータは、前記第２ホストで動作する前記第２管理対象フォワーディングエレメントによって使用される前記物理コントロールプレーンデータとは異なるデータであることを特徴とする請求項２に記載のネットワーク制御システム。
【請求項４】
前記第１コントローラインスタンスから前記中間データタプルを受信し、該中間データタプルを前記第２コントローラインスタンスに配信する第４コントローラインスタンスと、
前記第１コントローラインスタンスから前記中間データタプルを受信し、該中間データタプルを前記第３コントローラインスタンスに配信する第５コントローラインスタンスと、
を更に有することを特徴とする請求項２に記載のネットワーク制御システム。
【請求項５】
前記第１コントローラインスタンスは、前記論理データパスセットに対するマスタコントローラインスタンスであり、
前記第４コントローラインスタンスは、前記第１管理対象フォワーディングエレメントに対するマスタコントローラインスタンスであり、
前記第５コントローラインスタンスは、前記第２管理対象フォワーディングエレメントに対するマスタコントローラインスタンスである
ことを特徴とする請求項４に記載のネットワーク制御システム。
【請求項６】
異なる論理データパスセット及び異なる管理対象フォワーディングエレメントのマスタとして、異なるコントローラインスタンスを識別する調整マネージャを更に有することを特徴とする請求項５に記載のネットワーク制御システム。
【請求項７】
前記入力データは、論理コントロールプレーンデータであり、
前記中間データタプルは、ユニバーサル物理コントロールプレーン（ＵＰＣＰ）データであり、
前記管理対象フォワーディングエレメントによって使用される前記物理コントロールプレーンデータは、カスタマイズド物理コントロールプレーン（ＣＰＣＰ）データである
ことを特徴とする請求項１に記載のネットワーク制御システム。
【請求項８】
前記ＵＰＣＰデータは、前記管理対象フォワーディングエレメントのセットの各々の属性の汎用表現に関して記述されたデータタプルであり、
前記ＣＰＣＰデータは、特定の管理対象フォワーディングエレメントに特有の属性のカスタマイズされた表現を有する
ことを特徴とする請求項７に記載のネットワーク制御システム。
【請求項９】
複数の前記管理対象フォワーディングエレメントは複数のソフトウェア仮想スイッチであることを特徴とする請求項１に記載のネットワーク制御システム。
【請求項１０】
前記中間データタプルは、中間データタプルの第１のセットであり、
前記第１コントローラインスタンスは、
前記入力データを前記論理データパスセット用の中間データタプルの第２のセットに変換する制御アプリケーションと、
前記中間データタプルの第２のセットを前記中間データタプルの第１のセットに変換する仮想化アプリケーションと、
を含むことを特徴とする請求項１に記載のネットワーク制御システム。
【請求項１１】
前記入力データは、論理コントロールプレーンデータであり、
前記中間データタプルの第２のセットは、論理転送プレーンデータであり、
前記中間データタプルの第１のセットは、ユニバーサル物理コントロールプレーンデータであり、
前記管理対象フォワーディングエレメントによって使用される前記物理コントロールプレーンデータは、カスタマイズド物理コントロールプレーンデータである
ことを特徴とする請求項１０に記載のネットワーク制御システム。
【請求項１２】
前記第２コントローラインスタンスは、前記中間データタプルを物理コントロールプレーンデータにマッピングするテーブルマッピングエンジンであることを特徴とする請求項１に記載のネットワーク制御システム。
【請求項１３】
前記第２コントローラインスタンスは、前記管理対象フォワーディングエレメントと通信して前記物理コントロールプレーンデータを前記ホスト内の前記管理対象フォワーディングエレメントに配信するインタフェースを更に有することを特徴とする請求項１２に記載のネットワーク制御システム。
【請求項１４】
前記インタフェースは、前記物理コントロールプレーンデータを生成するために、前記管理対象フォワーディングエレメントから管理対象フォワーディングエレメント詳細データを受信するためのものであることを特徴とする請求項１３に記載のネットワーク制御システム。
【請求項１５】
前記管理対象フォワーディングエレメント詳細データは物理ポート番号を含むことを特徴とする請求項１４に記載のネットワーク制御システム。
【請求項１６】
ネットワーク制御システムにおける第１コントローラインスタンスであって、前記第１コントローラインスタンスは、ホスト装置内で、前記第１コントローラインスタンスによって制御される管理対象フォワーディングエレメントと協調して動作し、前記第１コントローラインスタンスは、
前記ホスト装置とは異なるサーバ装置内で動作する第２コントローラインスタンスから、前記管理対象フォワーディングエレメントによって実装される論理データパスセット用の中間データタプルであって前記論理データパスセットを定義する入力データに基づいて第３コントローラインスタンスによって生成された中間データタプルのセットを受信するコントローラ間通信インタフェースと、
前記論理データパスセット用の前記中間データタプルを前記ホスト装置の前記管理対象フォワーディングエレメントによって使用される物理コントロールプレーンデータに変換する変換モジュールと、
前記物理コントロールプレーンデータを前記ホスト装置内の前記管理対象フォワーディングエレメントに配信する管理対象フォワーディングエレメントインタフェースと、
を有することを特徴とする第１コントローラインスタンス。
【請求項１７】
前記第２コントローラインスタンスと前記第３コントローラインスタンスは、同一のコントローラインスタンスであることを特徴とする請求項１６に記載の第１コントローラインスタンス。
【請求項１８】
前記第２コントローラインスタンスは、前記第１コントローラインスタンスから前記中間データタプルを受信し、該中間データタプルを前記第１コントローラインスタンスに配信することを特徴とする請求項１６に記載の第１コントローラインスタンス。
【請求項１９】
前記第１コントローラインスタンスは、シャーシコントローラであり、
前記第２コントローラインスタンスは、前記管理対象フォワーディングエレメントのマスタであり、
前記第３コントローラインスタンスは、前記論理データパスセットのマスタである
ことを特徴とする請求項１８に記載の第１コントローラインスタンス。
【請求項２０】
前記入力データは、論理コントロールプレーンデータを含み、
前記中間データタプルは、ユニバーサル物理コントロールプレーンデータを含み、
前記管理対象フォワーディングエレメントによって使用される前記物理コントロールプレーンデータは、カスタマイズド物理コントロールプレーンデータを含む
ことを特徴とする請求項１６に記載の第１コントローラインスタンス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユニバーサルフローを変換するためのシャーシコントローラに関する。
【背景技術】
【０００２】
現在の企業の多くは、種々の接続、アプリケーション及びシステムをサポートするスイッチ、ハブ、ルータ、サーバ、ワークステーション及び他のネットワーク装置を含む大規模で高度なネットワークを有する。仮想マシンの移動、動的な作業負荷、マルチテナンシ、並びに顧客別のサービス品質及びセキュリティ構成を含むコンピュータのネットワーク化の更なる高度化により、ネットワーク制御に対してより適切なパラダイムが必要となる。ネットワークは、従来、個々の構成要素の低レベルの設定により管理されてきた。多くの場合、ネットワーク構成は基盤ネットワークに依存する。例えば、アクセス制御リスト（「ＡＣＬ」）エントリを用いてユーザのアクセスをブロックするには、ユーザの現在のＩＰアドレスを知っている必要がある。より複雑なタスクは、より広範なネットワークの知識を必要とする。ゲストユーザのポート８０トラフィックにＨＴＴＰプロキシを強制的に横断させるには、各ゲストの現在のネットワークトポロジ及び場所を知っている必要がある。ネットワークスイッチングエレメントが多数のユーザ間で共有される場合、この処理は益々困難になる。
【０００３】
それに応じて、ソフトウェア定義ネットワーク（ＳＤＮ）と呼ばれる新しいネットワーク制御パラダイムに向けての動きが高まりつつある。ＳＤＮパラダイムにおいて、ネットワークにおいて１つ以上のサーバ上で動作するネットワークコントローラは、ユーザ毎に共有ネットワークスイッチングエレメントのフォワーディング挙動を管理する制御論理を制御、維持及び実現する。多くの場合、ネットワーク管理の判断を行うにはネットワーク状態を認識する必要がある。管理の判断を容易に行うために、ネットワークコントローラは、ネットワーク状態のビューを作成及び維持し、その上で管理アプリケーションがネットワーク状態のビューにアクセスできるアプリケーションプログラミングインタフェースを提供する。
【０００４】
大規模なネットワーク（データセンタ及び社内ネットワークの双方を含む）を維持する主な目的のいくつかは、拡張性、移動性及びマルチテナント性である。これらの目的の１つに対処するために採られる多くの方法は、結果として他の方法の少なくとも１つを妨害することになる。例えばある方法は、Ｌ２領域内で仮想マシンにネットワークモビリティを容易に提供できるが、Ｌ２領域を拡張することはできない。また、ユーザを隔離し続けることにより、移動性は非常に複雑になる。従って、拡張性、移動性及びマルチテナンシの目的を満足できる改善された解決方法が必要である。
【発明の概要】
【０００５】
本発明のいくつかの実施形態は、数人の異なるユーザが互いの転送論理を制御又は閲覧することさえ許可することなく、１つ以上の共有フォワーディングエレメントにより異なるユーザに対していくつかの異なる論理データパス（ＬＤＰ）セットを指定できるようにするネットワーク制御システムを提供する。これらの共有フォワーディングエレメントは、ＬＤＰセットを実現するためにネットワーク制御システムにより管理されるため、以下において管理対象スイッチングエレメント又は管理対象フォワーディングエレメントと呼ばれる。
【０００６】
いくつかの実施形態において、ネットワーク制御システムは、システムがユーザからＬＤＰセットを受け入れ、これらのＬＤＰセットを実現するようにスイッチングエレメントを構成できるようにする１つ以上のコントローラ（以下においてコントローラインスタンスとも呼ばれる）を有する。これらのコントローラにより、システムは、異なるユーザが同一のスイッチングエレメントを共有する一方で互いのＬＤＰセット及び論理ネットワークを閲覧又は制御するのを防止するような方法で、共有スイッチングエレメント間の接続により規定されるこれらの共有スイッチングエレメント及び論理ネットワークの制御を仮想化できる。
【０００７】
いくつかの実施形態において、各コントローラインスタンスは、ユーザ入力を論理コントロールプレーン（ＬＣＰ）データから論理フォワーディングプレーン（ＬＦＰ）データに変換して、次にＬＦＰデータを物理コントロールプレーン（ＰＣＰ）データに変換する１つ以上のモジュールを実行する装置（例えば、汎用コンピュータ）である。いくつかの実施形態におけるこれらのモジュールは、制御モジュール及び仮想化モジュールを有する。制御モジュールは、ユーザが論理データパスセット（ＬＤＰＳ）を指定及びポピュレートできるようにし、仮想化モジュールは、ＬＤＰＳを物理スイッチングインフラストラクチャにマッピングすることで指定されたＬＤＰＳを実現する。制御モジュール及び仮想化モジュールは、いくつかの実施形態においては２つの別個のアプリケーションであるが、他の実施形態においては同一のアプリケーションの一部である。
【０００８】
実施形態のうちのいくつかにおいて、コントローラの制御モジュールは、ユーザ又は別のソースから、ＬＤＰＳを記述するＬＣＰデータ（例えば、論理スイッチングエレメントと関連付けられた接続を記述するデータ）を受信する。次に制御モジュールは、このデータを後に仮想化モジュールに供給されるＬＦＰデータに変換する。次に仮想化モジュールは、ＬＦＰデータからＰＣＰデータを生成する。ＰＣＰデータは、管理対象スイッチングエレメントに伝搬される。いくつかの実施形態において、制御モジュール及び仮想化モジュールは、ｎＬｏｇエンジンを使用して、ＬＣＰデータからＬＦＰデータを生成し、ＬＦＰデータからＰＣＰデータを生成する。
【０００９】
いくつかの実施形態のネットワーク制御システムは、異なるタスクを実行するために異なるコントローラを使用する。例えばいくつかの実施形態において、ネットワーク制御システムは３種類のコントローラを使用する。第１コントローラの種類は、アプリケーションプロトコルインタフェース（ＡＰＩ）コントローラである。ＡＰＩコントローラは、ＡＰＩの呼び出しによりユーザから構成データ及びユーザクエリを受信し、そのユーザクエリの応答に関与する。ＡＰＩコントローラは、受信した構成データを他のコントローラに更に広める。従って、いくつかの実施形態のＡＰＩコントローラは、ユーザとネットワーク制御システムとの間のインタフェースとなる。
【００１０】
第２コントローラの種類は、ＬＤＰセットを実現する管理対象スイッチングエレメントに対するフローエントリの汎用表現であるユニバーサルフローエントリを計算することでＬＤＰセットの実現に関与する論理コントローラである。いくつかの実施形態における論理コントローラは、管理対象スイッチングエレメントと直接には対話しないが、ユニバーサルフローエントリを第３コントローラの種類である物理コントローラにプッシュする。
【００１１】
異なる実施形態における物理コントローラは、異なる機序を有する。いくつかの実施形態において、物理コントローラは、ユニバーサルフローエントリからカスタマイズドフローエントリを生成し、これらのカスタマイズドフローエントリを管理対象スイッチングエレメントにプッシュダウンする。他の実施形態において、物理コントローラは、特定の管理物理スイッチングエレメントに対して、特定のスイッチングエレメントに対するカスタマイズドフローエントリの生成に関与する第４コントローラの種類であるシャーシコントローラを識別し、論理コントローラから受信するユニバーサルフローエントリをシャーシコントローラに転送する。次にシャーシコントローラは、ユニバーサルフローエントリからカスタマイズドフローエントリを生成し、これらのカスタマイズドフローエントリを管理対象スイッチングエレメントにプッシュする。更に他の実施形態において、物理コントローラは、他の管理対象スイッチングエレメントに対するカスタマイズドフローエントリを生成するようにシャーシコントローラに指示しつつ、いくつかの管理対象スイッチングエレメントに対するそのようなフローエントリを生成する。
【００１２】
上述の発明の概要は、本発明のいくつかの実施形態に対する簡単な概要であり、本明細書において開示される本発明の全ての主題の概要となることは意図していない。下記の発明を実施するための形態及び発明を実施するための形態において参照される図面の簡単な説明で、発明の概要及び他の実施形態において説明される実施形態が更に説明される。従って、本明細書により説明される全ての実施形態を理解するには、発明の概要、発明を実施するための形態及び図面の簡単な説明の全体を検討する必要がある。また、請求される主題は、主題の主旨から逸脱することなく他の特定の形式で実施されうるため、発明の概要、発明を実施するための形態及び図面の簡単な説明における詳細な説明により限定されるのではなく、添付の特許請求の範囲により規定される。
【図面の簡単な説明】
【００１３】
本発明の新規な特徴は、添付の特許請求の範囲で定義されるが、説明の目的のため、本発明のいくつかの実施形態を、以下の図面を参照して説明する。
【図１】本発明の実施形態における仮想化ネットワークシステムを示す図。
【図２】マルチユーザ・サーバ・ホスティング・システムのスイッチ・インフラストラクチャを示す図。
【図３】エッジスイッチングエレメントを管理するネットワークコントローラを示す図。
【図４】スイッチングエレメントの集合にわたり実現される複数の論理スイッチングエレメントの一例を示す図。
【図５】コントローラインスタンスの種々の処理層を介して管理されるスイッチングエレメントを制御する命令の伝搬を示す図。
【図６】実施形態におけるマルチインスタンス、分散ネットワーク制御システムを示す図。
【図７】スイッチングエレメントに対してマスタコントローラインスタンスを指定する一例を示す図。
【図８】コントローラインスタンスの動作の例を示す図。
【図９】入力変換アプリケーションに対するソフトウェアアーキテクチャを概念的に示す図。
【図１０】本発明の実施形態における制御アプリケーションを示す図。
【図１１】本発明の実施形態における仮想化アプリケーションを示す図。
【図１２】ＲＥ出力テーブルにおける異なるテーブルを概念的に示す図。
【図１３】本発明の実施形態における制御アプリケーション及び仮想化アプリケーションのテーブルマッピング動作を示す簡略図。
【図１４】統合アプリケーションの一例を示す図。
【図１５】統合アプリケーションの別の例を示す図。
【図１６】ネットワーク制御システムのアーキテクチャの一例を概念的に示す図。
【図１７】ネットワーク制御システムのアーキテクチャの一例を概念的に示す図。
【図１８】シャーシ制御アプリケーションに対するアーキテクチャの一例を示す図。
【図１９Ａ】、
【図１９Ｂ】ユニバーサル物理コントロールプレーンデータに基づく２つの管理対象スイッチングエレメント間のトンネルの作成の一例を示す図。
【図２０】実施形態における、ユニバーサル物理コントロールプレーンデータからカスタマイズド物理コントロールプレーンデータを生成するために実行する処理を概念的に示す図。
【図２１】実施形態における、カスタマイズドトンネルフロー命令を生成し、カスタマイズド命令を管理対象スイッチングエレメントに送出するために実行する処理を概念的に示す図。
【図２２Ａ】、
【図２２Ｂ】ユニバーサルトンネルフロー命令をカスタマイズド命令に変換するシャーシコントローラの動作の一例を７つの異なる段階において概念的に示す図。
【図２３】本発明の実施形態を実現するのに用いられる電子システムを概念的に示す図。
【発明を実施するための形態】
【００１４】
以下、本発明の詳細な説明において、本発明のさまざまな詳細、例示及び実施形態を説明する。ただし、本発明は、以下に説明される実施形態に限定されるものではなく、以下の特定の詳細及び例示を用いることなく実施されてもよいことは、当業者には明らかであろう。
【００１５】
本発明のいくつかの実施形態は、数人の異なるユーザが互いの転送論理を制御又は閲覧することさえ許可することなく、１つ以上の共有フォワーディングエレメント（shared forwarding elements）により異なるユーザに対していくつかの異なるＬＤＰセットを指定できるようにするネットワーク制御システムを提供する。いくつかの実施形態における共有フォワーディングエレメントは、仮想ネットワークスイッチ又は物理ネットワークスイッチ、ソフトウェアスイッチ（例えば、オープン・ｖスイッチ（Open vSwitch））、ルータ及び／又は他のスイッチング装置、並びにこれらのスイッチと、ルータと、及び／又は他のスイッチング装置との間に接続を確立する他のあらゆるネットワークエレメント（例えば、ロードバランサ等）を含みうる。そのようなフォワーディングエレメント（forwarding elements）（例えば、物理スイッチ又はルータ）を、以下ではスイッチングエレメント（switching elements）とも呼ぶ。既製のスイッチとは対照的に、ソフトウェアフォワーディングエレメントは、いくつかの実施形態においては、スタンドアロン装置（例えば、スタンドアロンコンピュータ）のメモリにそのスイッチングテーブル及びスイッチング論理を格納することで形成されるスイッチングエレメントであるが、他の実施形態においては、ハイパーバイザ及びそのハイパーバイザに加え１つ以上の仮想マシンを更に実行する装置（例えば、コンピュータ）のメモリにそのスイッチングテーブル及びスイッチング論理を格納することで形成されるスイッチングエレメントである。
【００１６】
これらの管理／共有スイッチングエレメントは、ＬＤＰセットを実現するためにネットワーク制御システムにより管理されるため、以下において管理対象スイッチングエレメント又は管理対象フォワーディングエレメントと呼ばれる。いくつかの実施形態において、制御システムは、以下において更に説明するように、ＰＣＰデータをこれらのスイッチングエレメントにプッシュすることでこれらを管理する。一般にスイッチングエレメントは、データ（例えば、データパケット）を受信し、例えば受信したデータパケットをドロップすること、あるソース装置から受信されるパケットを別の宛先装置に渡すこと、パケットを処理して宛先装置に渡すこと等の１つ以上の処理動作をデータに対して実行する。いくつかの実施形態において、スイッチングエレメントにプッシュされるＰＣＰデータは、スイッチングエレメントにより（例えば、スイッチングエレメントの汎用プロセッサにより）、スイッチングエレメント（例えば、スイッチングエレメントの専用スイッチング回路）が自身が受信するデータパケットを処理する方法を指定する物理フォワーディングプレーンデータに変換される。
【００１７】
いくつかの実施形態において、ネットワーク制御システムは、システムがユーザからＬＤＰセットを受け入れ、これらのＬＤＰセットを実現するようにスイッチングエレメントを構成できるようにする１つ以上のコントローラ（以下においてコントローラインスタンスとも呼ばれる）を有する。これらのコントローラにより、システムは、異なるユーザが同一の管理対象スイッチングエレメントを共有する一方で互いのＬＤＰセット及び論理ネットワークを閲覧又は制御するのを防止するような方法で、共有スイッチングエレメント間の接続により規定されるこれらの共有スイッチングエレメント及び論理ネットワークの制御を仮想化できる。
【００１８】
いくつかの実施形態において、各コントローラインスタンスは、ユーザ入力をＬＣＰからＬＦＰに変換して、次にＬＦＰデータをＰＣＰデータに変換する１つ以上のモジュールを実行する装置（例えば、汎用コンピュータ）である。いくつかの実施形態におけるこれらのモジュールは、制御モジュール及び仮想化モジュールを有する。制御モジュールは、ユーザがＬＤＰＳを指定及びポピュレートできるようにし、仮想化モジュールは、ＬＤＰＳを物理スイッチングインフラストラクチャにマッピングすることで指定されたＬＤＰＳを実現する。いくつかの実施形態において、制御モジュール及び仮想化モジュールは、リレーショナルデータベースデータ構造に書き込まれるレコードに関して指定又はマッピングされたデータを表現する。すなわち、リレーショナルデータベースデータ構造は、制御モジュールを介して受信された論理データパス入力及び仮想化モジュールにより論理データパス入力がマッピングされる物理データの双方を格納する。いくつかの実施形態において、制御アプリケーション及び仮想化アプリケーションは、いくつかの実施形態においては２つの別個のアプリケーションであるが、他の実施形態においては同一のアプリケーションの一部である。
【００１９】
以上で、ネットワーク制御システムのいくつかの例を説明した。以下、より詳細な実施形態を説明する。第Ｉ章では、いくつかの実施形態のネットワーク制御システムについて説明する。続く第II章では、ネットワーク制御システムによるユニバーサルフォワーディング状態の変換について説明する。第III章では、本発明のいくつかの実施形態を実現するのに用いられる電子システムについて説明する。
【００２０】
Ｉ．ネットワーク制御システム
Ａ．フローを制御層にプッシュするための外部層
図１は、本発明のいくつかの実施形態の仮想化ネットワークシステム１００を示す。このシステムにより、多数のユーザは、ネットワーク・インフラストラクチャ・スイッチングエレメント（例えば、スイッチ、仮想スイッチ、ソフトウェアスイッチ等）の共有集合上の多数の異なるＬＤＰセットを作成及び制御できる。ユーザがユーザの論理データパス（ＬＤＰ）セットの集合（すなわち、ユーザのスイッチング論理）を作成及び制御することを許可する際、システムは、他のユーザのスイッチング論理を閲覧又は変更するためにユーザが別のユーザのＬＤＰセットの集合へ直接アクセスすることを許可しない。しかし、システムは、異なるユーザが仮想化スイッチング論理を通してパケットを互いに渡すことを望む場合、ユーザに対してそのような通信を許可しない。
【００２１】
図１に示されるように、システム１００は、１つ以上のスイッチングエレメント１０５と、ネットワークコントローラ１１０とを含む。スイッチングエレメントは、システム１００のネットワーク・インフラストラクチャ・スイッチングエレメントを形成するＮ個のスイッチング装置（Ｎは１以上の数である）を有する。いくつかの実施形態において、ネットワーク・インフラストラクチャ・スイッチングエレメントは、仮想ネットワークスイッチ又は物理ネットワークスイッチ、ソフトウェアスイッチ（例えば、Ｏｐｅｎ  ｖＳｗｉｔｃｈ）、ルータ及び／又は他のスイッチング装置、並びにこれらのスイッチと、ルータと、及び／又は他のスイッチング装置との間に接続を確立する他のあらゆるネットワークエレメント（例えば、ロードバランサ等）を含む。そのような全てのネットワーク・インフラストラクチャ・スイッチングエレメントを以下においてスイッチングエレメント又はフォワーディングエレメントと呼ぶ。
【００２２】
仮想スイッチング装置又は物理スイッチング装置１０５は、一般に、制御スイッチング論理１２５及びフォワーディングスイッチング論理１３０を含む。いくつかの実施形態において、制御スイッチング論理１２５は、（１）入力パケットに適用される規則、（２）破棄されるパケット及び（３）入力パケットに適用されるパケット処理方法を指定する。仮想スイッチングエレメント又は物理スイッチングエレメント１０５は、転送論理１３０を管理するテーブルをポピュレートするために制御論理１２５を使用する。転送論理１３０は、入力パケットに対してルックアップ動作を実行し、入力パケットを宛先アドレスに転送する。
【００２３】
図１に更に示されるように、ネットワークコントローラ１１０は制御アプリケーション１１５を含む。制御アプリケーション１１５により、スイッチング論理は、ＬＤＰセットに関して１人以上のユーザに対して（例えば、１人以上の管理者又はユーザにより）指定される。ネットワークコントローラ１１０は、ＬＤＰセットをスイッチング装置１０５にプッシュされる制御スイッチング論理に変換する仮想化アプリケーション１２０を更に含む。このアプリケーションにおいて、制御アプリケーション及び仮想化アプリケーションをいくつかの実施形態の場合に「制御エンジン」及び「仮想化エンジン」と呼ぶ。
【００２４】
いくつかの実施形態において、仮想化システム１００は、２つ以上のネットワークコントローラ１１０を有する。ネットワークコントローラは、各々が特定のＬＤＰＳに対するスイッチング装置の集合に対して制御論理を指定することに関与する論理コントローラを有する。ネットワークコントローラは物理コントローラを更に備え、各物理コントローラは、自身が管理する責任を有するスイッチングエレメントの集合に制御論理をプッシュする。換言すると、論理コントローラは、特定のＬＤＰＳを実現するスイッチングエレメントの集合に対してのみ制御論理を指定し、物理コントローラは、スイッチングエレメントが実現するＬＤＰセットに関係なく自身が管理するスイッチングエレメントに制御論理をプッシュする。
【００２５】
いくつかの実施形態において、ネットワークコントローラの仮想化アプリケーションは、データレコード（例えば、データタプル）に関して仮想化アプリケーションにより追跡されるスイッチエレメントの状態のコピーを格納するためにリレーショナルデータベースデータ構造を使用する。これらのデータレコードは、全ての物理スイッチングエレメント又は仮想スイッチングエレメントのグラフ及び物理ネットワークトポロジ内のそれらの相互接続、並びにそれらのフォワーディングテーブルを表す。例えばいくつかの実施形態において、ネットワークインフラストラクチャ内の各スイッチングエレメントは、リレーショナルデータベースデータ構造における１つ以上のデータレコードにより表される。しかし、他の実施形態において、仮想化アプリケーションに対するリレーショナルデータベースデータ構造は、スイッチングエレメントの一部のみに関する状態情報を格納する。例えば、以下において更に詳細に説明するように、いくつかの実施形態における仮想化アプリケーションは、ネットワークインフラストラクチャのエッジにおけるスイッチングエレメントしか追跡しない。更に他の実施形態において、仮想化アプリケーションは、ネットワークにおけるエッジスイッチングエレメント及びエッジスイッチングエレメント間の通信を容易にするネットワークにおけるいくつかの非エッジスイッチングエレメントに関する状態情報を格納する。
【００２６】
いくつかの実施形態において、リレーショナルデータベースデータ構造は、仮想化ネットワークシステム１００における制御モデルの中核である。ある方法の下では、アプリケーションは、リレーショナルデータベースデータ構造から読み出し、リレーショナルデータベースデータ構造に書き込むことでネットワークを制御する。具体的には、いくつかの実施形態において、アプリケーション制御論理は、（１）リレーショナルデータベースデータ構造においてネットワークエンティティレコードと関連付けられた現在の状態を読み出し、（２）これらのレコードに作用することでネットワーク状態を変更しうる。このモデルの下では、仮想化アプリケーション１２０は、スイッチングエレメント１０５のテーブル（例えば、コントロールプレーンフローテーブル）におけるレコードを変更する必要がある場合、最初にテーブルを表す１つ以上のレコードをリレーショナルデータベースデータ構造に書き込む。次に仮想化アプリケーションは、この変更をスイッチングエレメントのテーブルに伝搬する。
【００２７】
いくつかの実施形態において、制御アプリケーションは、リレーショナルデータベースデータ構造を更に使用して、各ユーザが指定したＬＤＰＳに対する論理構成及び論理状態を格納する。これらの実施形態において、実際のスイッチングエレメントの状態を表すリレーショナルデータベースデータ構造における情報は、リレーショナルデータベースデータ構造に格納された全情報の部分集合のみを説明する。
【００２８】
いくつかの実施形態において、制御アプリケーション及び仮想化アプリケーションは、ユーザが指定したＬＤＰＳに対する論理構成及び論理状態を格納するために２次データ構造を使用する。これらの実施形態におけるこの２次データ構造は、異なるネットワークコントローラ間の通信媒体となる。例えば、特定のＬＤＰＳに関与しない論理コントローラを使用してユーザがその特定のＬＤＰＳを指定する場合、論理コントローラは、これらの論理コントローラの２次データ構造を介して、特定のＬＤＰＳに関与する別の論理コントローラに特定のＬＤＰＳに対する論理構成を渡す。いくつかの実施形態において、ユーザから特定のＬＤＰＳに対する論理構成を受信する論理コントローラは、仮想化ネットワークシステムにおいて構成データを他の全てのコントローラに渡す。このように、全ての論理コントローラにおける２次格納構造は、いくつかの実施形態において全てのユーザに対する全てのＬＤＰセット用の論理構成データを含む。
【００２９】
いくつかの実施形態において、コントローラインスタンスのオペレーティングシステム（不図示）は、異なる実施形態の制御アプリケーション及び仮想化アプリケーション、並びにスイッチングエレメント１０５に対して異なる通信構造体（不図示）の集合を提供する。例えばいくつかの実施形態において、オペレーティングシステムは、（１）いずれか１人のユーザに対して物理スイッチングを実行するスイッチングエレメント１０５と、（２）ユーザに対するスイッチング論理をスイッチングエレメントにプッシュするために使用される仮想化アプリケーション１２０との間の通信インタフェース（不図示）を管理対象スイッチングエレメントに提供する。これらの実施形態のうちのいくつかにおいて、仮想化アプリケーションは、外部アプリケーション（例えば、仮想化アプリケーション）がスイッチングエレメントのコントロールプレーン機能性を制御できるようにするＡＰＩの集合を指定する一般的に知られているスイッチアクセスインタフェースを介して、スイッチングエレメントの制御スイッチング論理１２５を管理する。具体的には、管理対象スイッチングエレメント通信インタフェースは、仮想化アプリケーションが管理対象スイッチングエレメント通信インタフェースを使用してリレーショナルデータベースデータ構造に格納されたレコードをスイッチングエレメントに送出できるようにＡＰＩの集合を実現する。
【００３０】
そのように知られているスイッチアクセスインタフェースの２つの例としては、オープン・フロー（OpenFlow）インタフェース及びオープン仮想スイッチ通信インタフェースがある。それらは、以下の２つの文献、McKeown, N. (2008年)、OpenFlow: Enabling Innovation in Campus Networks (http://www.openflowswitch.org//documents/openflow-wp-latest.pdf から検索可能である)及びPettit, J. (2010年)、Virtual Switching in an Era of Advanced Edges (http://openvswitch.org/papers/dccaves2010.pdf から検索可能である）にそれぞれ記載されている。これらの２つの文献は、参考として本明細書に取り入れられる。
【００３１】
なお、データレコードを格納するためにリレーショナルデータベースデータ構造が使用される前述及び後述するこれらの実施形態の場合、オブジェクト指向データオブジェクト形式のデータを格納できるデータ構造が代わりに又は接続的に使用されうる。そのようなデータ構造の一例としては、ＮＩＢデータ構造がある。ＮＩＢデータ構造を使用するいくつかの例は、双方とも２０１１年７月６日に出願された米国特許出願第１３／１７７，５２９号及び米国特許出願第１３／１７７，５３３号に記載される。なお、米国特許出願第１３／１７７，５２９号及び米国特許出願第１３／１７７，５３３号は、参考として本明細書に取り入れられる。
【００３２】
図１は、制御スイッチング論理１２５の周囲の囲み１３５を描くことによりスイッチアクセスＡＰＩの使用を概念的に示す。これらのＡＰＩを介して、仮想化アプリケーションは、コントロールプレーンフローテーブルにおいてエントリを読み出して書き込みうる。スイッチングエレメントのコントロールプレーンリソース（例えば、コントロールプレーンテーブル）への仮想化アプリケーションの接続性は、いくつかの実施形態においては帯域内で（すなわち、オペレーティングシステムにより制御されるネットワークトラフィックを用いて）実現されるが、他の実施形態においては帯域外（すなわち、独立した物理ネットワークを介して）実現される。失敗の集中及びオペレーティングシステムへの基本接続性を回避する選択手段に対して最低必要条件しか要求せず、独立したネットワークを使用する場合、ＩＳ−ＩＳ又はＯＳＰＦ等の標準的なＩＧＰプロトコルで十分である。
【００３３】
（ソフトウェアスイッチングエレメントとは対照的に）スイッチングエレメントが物理スイッチングエレメントである場合にスイッチングエレメントに対して制御スイッチング論理１２５を規定するために、いくつかの実施形態の仮想化アプリケーションは、スイッチングエレメントのコントロールプレーン内で１つ以上の制御テーブルを作成するためにオープン仮想スイッチプロトコルを使用する。一般にコントロールプレーンは、スイッチングエレメントの汎用ＣＰＵにより作成及び実行される。システムが制御テーブルを作成すると、仮想化アプリケーションは、OpenFlowプロトコルを使用してフローエントリを制御テーブルに書き込む。物理スイッチングエレメントの汎用ＣＰＵは、スイッチングエレメントのフォワーディングプレーンにおける１つ以上のフォワーディングテーブルをポピュレートするように書き込まれたエントリを制御テーブルに変換するために内部論理を使用する。フォワーディングテーブルは、一般にスイッチングエレメントの専用のスイッチングチップにより作成及び実行される。フォワーディングテーブル内でフローエントリを実行することにより、スイッチングエレメントのスイッチングチップは、自身が受信するデータのパケットを処理及びルーティングしうる。
【００３４】
いくつかの実施形態において、仮想化ネットワークシステム１００は、論理コントローラ及び物理コントローラに加えシャーシコントローラ（chassis controller）を有する。これらの実施形態において、シャーシコントローラは、特定のスイッチングエレメントを管理するためにスイッチアクセスＡＰＩを実現する。すなわち、制御論理を特定のスイッチングエレメントにプッシュするのはシャーシコントローラである。これらの実施形態における物理コントローラは、論理コントローラから物理コントローラが関与するスイッチングエレメントの集合にインタフェース接続するシャーシコントローラに中継するための集約点として機能する。物理コントローラは、スイッチングエレメントの集合を管理するシャーシコントローラに制御論理を分配する。これらの実施形態において、物理コントローラがデータレコードとしてリレーショナルデータベースデータ構造に格納された制御論理をシャーシコントローラに送出できるように、ネットワークコントローラのオペレーティングシステムが物理コントローラとシャーシコントローラとの間に通信チャネル（例えば、遠隔手続き呼び出し（ＲＰＣ）チャネル）を確立する管理対象スイッチングエレメント通信インタフェース。その結果、シャーシコントローラは、スイッチアクセスＡＰＩ又は他のプロトコルを使用して制御論理をスイッチングエレメントにプッシュする。
【００３５】
いくつかの実施形態のオペレーティングシステムが提供する通信構造体は、データレコードを別のネットワークコントローラに（例えば、論理コントローラから別の論理コントローラに、物理コントローラから別の物理コントローラに、論理コントローラから物理コントローラに、物理コントローラから論理コントローラに等）送出するためにネットワークコントローラが使用できるエクスポータ（不図示）を更に有する。具体的には、ネットワークコントローラの制御アプリケーション及び仮想化アプリケーションは、エクスポータを使用してリレーショナルデータベースデータ構造に格納されたデータレコードを１つ以上の他のネットワークコントローラにエクスポートしうる。いくつかの実施形態において、あるネットワークコントローラがチャネルを介してデータレコードを別のネットワークコントローラに送出できるように、エクスポータは、２つのネットワークコントローラの間に通信チャネル（例えば、ＲＰＣチャネル）を確立する。
【００３６】
いくつかの実施形態のオペレーティングシステムは、ネットワークコントローラからデータレコードを受信するためにネットワークコントローラが使用しうるインポータを更に有する。いくつかの実施形態のインポータは、別のネットワークコントローラのエクスポータに相当するものとして機能する。すなわち、インポータは、２つのネットワークコントローラ間に確立された通信チャネルの受信側にある。いくつかの実施形態において、ネットワークコントローラは、受信側コントローラが自身が関心のあるデータを供給するネットワークコントローラからのみデータを受信するためにチャネルに加入するパブリッシュ−サブスクライブモデルに従う。
【００３７】
Ｂ．フローのエッジスイッチングエレメントへのプッシュ
上述したように、リレーショナルデータベースデータ構造は、いくつかの実施形態においてはシステムのネットワークインフラストラクチャ内の各スイッチングエレメントに関するデータを格納するが、他の実施形態においてはネットワークインフラストラクチャのエッジにおけるスイッチングエレメントに関する状態情報のみを格納する。図２及び図３は、２つの異なる方法を区別する一例を示す。具体的には、図２は、マルチユーザサーバホスティングシステムのスイッチ・インフラストラクチャを示す。このシステムにおいて、６つのスイッチングエレメントは、２人のユーザＡ及びＢの６つのマシンを相互接続するために採用される。これらのスイッチングエレメントのうちの４つ２０５〜２２０は、ユーザＡ及びＢのマシン２３５〜２６０と直接接続するエッジスイッチングエレメントであり、スイッチングエレメントのうちの２つ２２５及び２３０は、エッジスイッチングエレメントを相互接続し、互いに接続する内部スイッチングエレメント（すなわち、非エッジスイッチングエレメント）である。前述及び後述される図示された全てのスイッチングエレメントは、いくつかの実施形態においてはソフトウェアスイッチングエレメントであってもよいが、他の実施形態においてはソフトウェアスイッチングエレメントと物理スイッチングエレメントとの混合である。例えば、エッジスイッチングエレメント２０５〜２２０、並びに非エッジスイッチングエレメント２２５及び２３０は、いくつかの実施形態においてソフトウェアスイッチングエレメントである。また、本出願に記載される「マシン」は、演算装置等の仮想マシン及び物理マシンを含む。
【００３８】
図３は、エッジスイッチングエレメント２０５〜２２０を管理するネットワークコントローラ３００を示す。ネットワークコントローラ３００は、図１を参照して上述したネットワークコントローラ１１０に類似する。図３に示されるように、コントローラ３００は、制御アプリケーション３０５及び仮想化アプリケーション３１０を含む。コントローラインスタンス３００に対するオペレーティングシステムは、エッジスイッチングエレメント２０５〜２２０のみに関するデータレコードを含むリレーショナルデータベースデータ構造（不図示）を維持する。また、オペレーティングシステムの上で動作するアプリケーション３０５及び３１０により、ユーザＡ及びＢは、自身が使用するエッジスイッチングエレメントに対するスイッチングエレメント構成を変更できる。次にネットワークコントローラ３００は、必要に応じてこれらの変更をエッジスイッチングエレメントに伝搬する。具体的には、この例において、２つのエッジスイッチングエレメント２０５及び２２０が双方のユーザＡ及びＢのマシンにより使用される一方で、エッジスイッチングエレメント２１０はユーザＡのマシン２４５のみにより使用され、エッジスイッチングエレメント２１５はユーザＢのマシン２５０のみにより使用される。従って、図３は、スイッチングエレメント２０５及び２２０においてユーザＡ及びＢのレコードを変更するが、スイッチングエレメント２１０においてユーザＡのレコード及びスイッチングエレメント２１５においてユーザＢのレコードのみを更新するネットワークコントローラ３００を示す。
【００３９】
いくつかの実施形態のコントローラ３００は、いくつかの理由から、エッジスイッチングエレメントのみを制御する（すなわち、エッジスイッチングエレメントに関するリレーショナルデータベースデータ構造におけるデータのみを維持する）。エッジスイッチングエレメントを制御することにより、必要とされない全てのスイッチングエレメント間の分離を維持することとは対照的に、必要とされるマシン（例えば、演算装置）間の分離を維持するのに十分な手段をコントローラに提供する。内部スイッチングエレメントは、スイッチングエレメント間でデータパケットを転送する。エッジスイッチングエレメントは、マシンと他のネットワークエレメント（例えば、他のスイッチングエレメント）との間でデータパケットを転送する。従って、エッジスイッチングエレメントがパケットをマシンに転送するために列をなした最後のスイッチングエレメントであるため、コントローラは、単にエッジスイッチングエレメントを制御することでユーザの分離を維持しうる。
【００４０】
エッジスイッチングエレメントの制御に加え、いくつかの実施形態のネットワークコントローラは、制御されるエッジスイッチングエレメントの動作を簡略化及び／又は容易にするためにスイッチネットワーク階層に挿入される非エッジスイッチングエレメントを更に利用及び制御する。例えばいくつかの実施形態において、コントローラは、自身が制御するスイッチングエレメントが、リーフノードであるいくつかのエッジスイッチングエレメント及び非リーフノードである１つ以上の非エッジスイッチングエレメントを有する階層スイッチングアーキテクチャにおいて相互接続されることを要求する。そのようないくつかの実施形態において、エッジスイッチングエレメントの各々は、１つ以上の非リーフスイッチングエレメントに接続し、他のエッジスイッチングエレメントとの通信を容易にするためにそのような非リーフスイッチングエレメントを使用する。
【００４１】
上記の説明は、いくつかの実施形態のネットワークコントローラによるエッジスイッチングエレメント及び非エッジスイッチングエレメントの制御に関連する。いくつかの実施形態において、エッジスイッチングエレメント及び非エッジスイッチングエレメント（リーフノード及び非リーフノード）を管理対象スイッチングエレメントと呼んでもよい。これは、管理対象スイッチングエレメントによりＬＤＰセットを実現するために、これらのスイッチングエレメントがネットワークコントローラにより管理される（ネットワークコントローラにより管理されないネットワークにおける管理されていないスイッチングエレメントとは対照的に）ためである。
【００４２】
いくつかの実施形態のネットワークコントローラは、上述の物理データ及び論理データに基づいて管理対象スイッチングエレメントにわたり論理スイッチングエレメントを実現する。論理スイッチングエレメント（「論理フォワーディングエレメント」とも呼ばれる）は、スイッチングエレメントが機能してもよい１つ又は複数の異なる方法（例えば、層２スイッチング、層３ルーティング等）を機能するように規定されうる。ネットワークコントローラは、管理対象スイッチングエレメントを制御することにより、規定された論理スイッチングエレメントを実現する。いくつかの実施形態において、ネットワークコントローラは、管理対象スイッチングエレメントにわたり多数の論理スイッチングエレメントを実現する。これにより、ネットワークのネットワークトポロジに関係なく管理対象スイッチングエレメントにわたり多数の異なる論理スイッチングエレメントを実現できる。
【００４３】
いくつかの実施形態の管理対象スイッチングエレメントは、異なるルーティング基準に基づいてネットワークデータをルーティングするように構成されうる。このように、ネットワークにおけるスイッチングエレメントを通るネットワークデータのフローは、管理対象スイッチングエレメントにわたり多数の論理スイッチングエレメントを実現するために制御されうる。
【００４４】
Ｃ．論理スイッチングエレメント及び物理スイッチングエレメント
図４は、スイッチングエレメントの集合にわたり実現される多数の論理スイッチングエレメントの一例を示す。特に図４は、管理対象スイッチングエレメント４１０〜４３０にわたり実現される論理スイッチングエレメント４８０及び４９０を概念的に示す。図４に示されるように、ネットワーク４００は、管理対象スイッチングエレメント４１０〜４３０及びマシン４４０〜４６５を含む。図４に示されるように、マシン４４０、４５０及び４６０はユーザＡに属し、マシン４４５、４５５及び４６５はユーザＢに属する。
【００４５】
いくつかの実施形態の管理対象スイッチングエレメント４１０〜４３０は、管理対象スイッチングエレメント４１０〜４３０に連結されるネットワークにおけるネットワークエレメント間でネットワークデータ（例えば、パケット、フレーム等）をルーティングする。示されるように、管理対象スイッチングエレメント４１０は、マシン４４０及び４４５とスイッチングエレメント４２０との間でネットワークデータをルーティングする。同様に、ネットワークエレメント４２０は、マシン４５０と管理対象スイッチングエレメント４１０及び４３０との間でネットワークデータをルーティングし、スイッチングエレメント４３０は、マシン４５５〜４６５とスイッチングエレメント４２０との間でネットワークデータをルーティングする。
【００４６】
また、管理対象スイッチングエレメント４１０〜４３０の各々は、スイッチの転送論理に基づいて、いくつかの実施形態においてはテーブルの形式であるネットワークデータをルーティングする。いくつかの実施形態において、フォワーディングテーブルは、ルーティング基準に従ってネットワークデータをルーティングすべき場所（例えば、スイッチ上のポート）を判定する。例えば、層２スイッチングエレメントのフォワーディングテーブルは、ＭＡＣアドレス（例えば、ソースＭＡＣアドレス及び／又は宛先ＭＡＣアドレス）に基づいてネットワークデータをルーティングすべき場所を判定してもよい。別の例として、層３スイッチングエレメントのフォワーディングテーブルは、ＩＰアドレス（例えば、ソースＩＰアドレス及び／又は宛先ＩＰアドレス）に基づいてネットワークデータをルーティングすべき場所を判定してもよい。他の多くの種類のルーティング基準が可能である。
【００４７】
図４に示されるように、管理対象スイッチングエレメント４１０〜４３０の各々におけるフォワーディングテーブルは、いくつかのレコードを含む。いくつかの実施形態において、各レコードは、ルーティング基準に基づいてネットワークデータをルーティングするための動作を指定する。レコードは、管理対象スイッチングエレメント４１０〜４３０を通るデータの「フロー」を制御するため、いくつかお実施形態においてフローエントリと呼ばれてもよい。
【００４８】
図４は、各ユーザの論理ネットワークの概念的表示を更に示す。示されるように、ユーザＡの論理ネットワーク４８０は、ユーザＡのマシン４４０、４５０及び４６０が連結される論理スイッチングエレメント４８５を含む。ユーザＢの論理ネットワーク４９０は、ユーザＢのマシン４４５、４５５及び４６５が連結される論理スイッチングエレメント４９５を含む。従って、ユーザＡの観点から、ユーザＡは、ユーザＡのマシンだけが連結されるスイッチングエレメントを有し、ユーザＢの観点から、ユーザＢは、ユーザＢのマシンだけが連結されるスイッチングエレメントを有する。換言すると、各ユーザに対して、ユーザは、ユーザのマシンのみを有する自身のネットワークを有する。
【００４９】
マシン４４０から発信されるマシン４５０宛てのネットワークデータ、及びマシン４４０から発信されるマシン４６０宛てのネットワークデータの流れを実現する概念的フローエントリを以下において説明する。管理対象スイッチングエレメント４１０のフォワーディングテーブルにおけるフローエントリ「Ａ１〜Ａ２」は、マシン４１０から発信されるマシン４５０宛てのネットワークデータをスイッチングエレメント４２０にルーティングするように管理対象スイッチングエレメント４１０に命令する。スイッチングエレメント４２０のフォワーディングテーブルにおけるフローエントリ「Ａ１〜Ａ２」は、マシン４１０から発信されるマシン４５０宛てのネットワークデータをマシン４５０にルーティングするようにスイッチングエレメント４２０に命令する。従って、マシン４４０がマシン４５０宛てのネットワークデータを送出する時、管理対象スイッチングエレメント４１０及び４２０は、スイッチングエレメントのフォワーディングテーブルにおける対応するレコードに基づいてデータパス４７０に沿ってネットワークデータをルーティングする。
【００５０】
また、管理対象スイッチングエレメント４１０のフォワーディングテーブルにおけるフローエントリ「Ａ１〜Ａ３」は、マシン４４０から発信されるマシン４６０宛てのネットワークデータをスイッチングエレメント４２０にルーティングするように管理対象スイッチングエレメント４１０に命令する。スイッチングエレメント４２０のフォワーディングテーブルにおけるフローエントリ「Ａ１〜Ａ３」は、マシン４４０から発信されるマシン４６０宛てのネットワークデータをスイッチングエレメント４３０にルーティングするようにスイッチングエレメント４２０に命令する。スイッチングエレメント４３０のフォワーディングテーブルにおけるフローエントリ「Ａ１〜Ａ３」は、マシン４４０から発信されるマシン４６０宛てのネットワークデータをマシン４６０にルーティングするようにスイッチングエレメント４３０に命令する。従って、マシン４４０がマシン４６０宛てのネットワークデータを送出する時、管理対象スイッチングエレメント４１０〜４３０は、スイッチングエレメントのフォワーディングテーブルにおける対応するレコードに基づいてデータパス４７０及び４７５に沿ってネットワークデータをルーティングする。
【００５１】
マシン４４０から発信されるマシン４５０宛てのネットワークデータ及びマシン４４０から発信されるマシン４６０宛てのネットワークデータのルーティングに対する概念的フローエントリを上述したが、同様のフローエントリは、ユーザＡの論理ネットワーク４８０における他のマシンの間でネットワークデータをルーティングする管理対象スイッチングエレメント４１０〜４３０のフォワーディングテーブルに含まれるであろう。更に同様のフローエントリは、ユーザＢの論理ネットワーク４９０におけるマシンの間でネットワークデータをルーティングする管理対象スイッチングエレメント４１０〜４３０のフォワーディングテーブルに含まれるであろう。
【００５２】
図４に示される概念的フローエントリは、パケットを送出すべき次のホップスイッチングエレメントを推定するために、管理対象スイッチングエレメントに関するソース情報及び宛先情報の双方を含む。しかし、いくつかの実施形態の管理対象スイッチングエレメントが宛先情報（例えば、コンテキスト識別子、宛先アドレス等）のみを使用して次のホップスイッチングエレメントを推定できるため、ソース情報はフローエントリにある必要はない。
【００５３】
いくつかの実施形態において、管理対象スイッチングエレメント４１０〜４３０にわたる論理スイッチングエレメント４８５及び４９５の実現を容易にするために、トンネリングプロトコル（例えば、無線アクセスポイントの制御及び提供 (CAPWAP) (control and provisioning of wireless access point)、GRE (generic routing encapsulation)、GREインターネットプロトコルセキュリティ (IPsec) 等）が使用されてもよい。トンネル化により、パケットは、別のパケットのペイロードとしてスイッチ及びルータを介して送信される。すなわち、パケットがトンネルパケットをカプセル化している他のパケットのヘッダに含まれたアドレスに基づいて転送されるため、トンネルパケットは、そのアドレス（例えば、ソースＭＡＣアドレス及び宛先ＭＡＣアドレス）を公開する必要はない。従って、トンネルパケットが論理アドレス空間において意味のあるアドレスを有しうるが、他のパケットは物理アドレス空間におけるアドレスに基づいてフォワーディング／ルーティングされるため、トンネル化により論理アドレス空間を物理アドレス空間から分離できる。このように、トンネルは、論理スイッチングエレメント４８５及び４９５を実現するためにネットワークにおいて管理対象スイッチングエレメントを接続する「論理ワイヤ」としてみなされてもよい。
【００５４】
スイッチングエレメントの集合にわたり多数の論理スイッチングエレメントを実現するように上述の種々の方法でスイッチングエレメントを構成することにより、多数のユーザは、各ユーザの観点から、各々が独立したネットワーク及び／又はスイッチングエレメントを有することができる一方で、実際にはスイッチングエレメント（例えば、トンネル、物理ワイヤ）の集合間でスイッチングエレメント及び／又は接続の同一の集合の一部又は全てを共有している。
【００５５】
II．ユニバーサルフォワーディング状態
Ａ．コントローラインスタンスの層
図５は、本発明のいくつかの実施形態のコントローラインスタンスの種々の処理層を介して管理対象スイッチングエレメントを制御する命令の伝搬を示す。図５は、同一のコントローラインスタンス又は異なるコントローラインスタンスの４つの処理層を介してコントロールプレーンデータを管理対象スイッチングエレメント５２５に変換及び伝搬する制御データパイプライン５００を示す。これらの４つの層は、入力変換層５０５、制御層５１０、仮想化層５１５及びカスタマイゼーション層５２０である。
【００５６】
いくつかの実施形態において、これらの４つの層は同一のコントローラインスタンスにある。しかし、これらの層の他の構成が他の実施形態において存在する。例えば他の実施形態において、制御層５１０及び仮想化層５１５のみが同一のコントローラインスタンスにあるが、カスタマイズド物理コントロールプレーン（ＣＰＣＰ）データを伝搬する機能性は、別のコントローラインスタンス（例えば、不図示のシャーシコントローラ）のカスタマイゼーション層にある。これらの他の実施形態において、別のコントローラインスタンスがＣＰＣＰデータを生成して管理対象スイッチングエレメントにプッシュする前に、ユニバーサル物理コントロールプレーン（ＵＰＣＰ）データは、あるコントローラインスタンスのリレーショナルデータベースデータ構造（不図示）からこの他のコントローラインスタンスのリレーショナルデータベースデータ構造に転送される。前者のコントローラインスタンスは、ＵＰＣＰデータを生成する論理コントローラであってもよく、後者のコントローラインスタンスは、ＵＰＣＰデータをＣＰＣＰデータにカスタマイズする物理コントローラ又はシャーシコントローラであってもよい。
【００５７】
図５に示されるように、いくつかの実施形態における入力変換層５０５は、この層の出力を表現するために使用されうるＬＣＰ５３０を有する。いくつかの実施形態において、アプリケーション（例えば、不図示のウェブベースアプリケーション）は、ユーザがＬＤＰセットを指定する入力を供給するためにユーザに提供される。このアプリケーションは、ＡＰＩの呼び出しの形式の入力を入力変換層５０５に送出する。入力変換層５０５は、ＡＰＩの呼び出しを制御層５１０により制御可能な形式のＬＣＰデータに変換する。例えば入力は、制御層のｎＬｏｇテーブルマッピングエンジンに供給可能な入力イベントの集合に変換される。ｎＬｏｇテーブルマッピングエンジン及びその動作を以下において更に説明する。
【００５８】
いくつかの実施形態における制御層５１０は、この層に対する入力及び出力を表現するために使用されうるＬＣＰ５３０及びＬＦＰ５３５を有する。ＬＣＰは、制御層及びそのユーザが１人以上のユーザに対するＬＣＰ内の１つ以上のＬＤＰを指定することを許可する高レベル構造体のコレクションを含む。ＬＦＰ５３５は、仮想化層５１５により処理可能な形式でユーザのＬＤＰセットを表す。このように、２つの論理プレーン５３０及び５３５は、図５に示されるように、一般に一般的な管理対象スイッチングエレメント５２５において見つけられうるコントロールプレーン５５５及びフォワーディングプレーン５６０の仮想化空間アナログである。
【００５９】
いくつかの実施形態において、制御層５１０は、ＬＣＰ構造体を規定及び公開する。層自体又は層のユーザは、ＬＣＰ構造体を用いてＬＣＰ内の異なるＬＤＰセットを規定する。例えばいくつかの実施形態において、ＬＣＰデータ５３０は論理ＡＣＬデータ等を含む。このデータ（例えば、論理ＡＣＬデータ）のうちのいくつかはユーザにより指定されうるが、他のそのようなデータ（例えば、論理Ｌ２レコード又はＬ３レコード）は、制御層により生成され、ユーザにより指定されなくてもよい。いくつかの実施形態において、制御層５１０は、制御層５１０が検出するリレーショナルデータベースデータ構造に対するある特定の変更（管理対象スイッチングエレメント及び管理データパスに対する変更を示す）に応答して、そのようなデータを生成及び／又は指定する。
【００６０】
いくつかの実施形態において、ＬＣＰデータ（すなわち、コントロールプレーン構造体に関して表現されるＬＤＰセットデータ）は、管理対象スイッチングエレメントからの現在の動作データを考慮して、かつ、このコントロールプレーンデータがＰＣＰデータに変換される方法を考慮せずに最初に指定されうる。例えば、このコントロールプレーンデータが、後で５つのコンピュータの間で所望のスイッチングを実現する３つの管理対象スイッチングエレメント用の物理制御データに変換されてもよいが、ＬＣＰデータは、５つのコンピュータを接続する１つの論理スイッチングエレメント用の制御データを指定してもよい。
【００６１】
制御層は、ＬＣＰ内のあらゆるＬＤＰＳをＬＦＰ５３５におけるＬＤＰＳに変換するためのモジュール（不図示）の集合を含む。いくつかの実施形態において、制御層５１０は、この変換を実行するためにｎＬｏｇテーブルマッピングエンジンを使用する。この変換を実行するために制御層がｎＬｏｇテーブルマッピングエンジンを使用することを以下において更に説明する。制御層は、制御層５１０のＬＦＰ５３５から仮想化層５１５のＬＦＰ５４０にＬＤＰセットをプッシュするためのモジュール（不図示）の集合を更に含む。
【００６２】
ＬＦＰ５４０は、１人以上のユーザの１つ以上のＬＤＰセットを含む。いくつかの実施形態におけるＬＦＰ５４０は、１人以上のユーザの１つ以上のＬＤＰセット用の論理フォワーディングデータを含む。このデータのうちのいくつかは制御層によりＬＦＰ５４０にプッシュされるのに対し、他のそのようなデータは、いくつかの実施形態に対して以下において更に説明されるように、リレーショナルデータベースデータ構造におけるイベントを検出する仮想化層によりＬＦＰにプッシュされる。
【００６３】
ＬＦＰ５４０に加え、仮想化層５１５はＵＰＣＰ５４５を含む。ＵＰＣＰ５４５はＬＤＰセット用のＵＰＣＰデータを含む。仮想化層は、ＬＦＰ５４０内のＬＤＰセットをＵＰＣＰ５４５におけるＵＰＣＰデータに変換するためのモジュール（不図示）の集合を含む。いくつかの実施形態において、仮想化層５１５は、この変換を実行するためにｎＬｏｇテーブルマッピングエンジンを使用する。仮想化層は、ＵＰＣＰデータを仮想化層５１５のＵＰＣＰ５４５からカスタマイゼーション層５２０のリレーショナルデータベースデータ構造にプッシュするためのモジュール（不図示）の集合を更に含む。
【００６４】
いくつかの実施形態において、カスタマイゼーション層５１５に送出されるＵＰＣＰデータにより、管理対象スイッチングエレメント５２５は、制御層５１０により指定されたＬＤＰセットに従ってデータパケットを処理できる。しかし、ＣＰＣＰデータとは対照的に、ＵＰＣＰデータは、いくつかの実施形態においては管理対象スイッチングエレメント及び／又は管理対象スイッチングエレメントの場所別の情報を表現しないため、制御層により指定された論理データを完全に実現しない。
【００６５】
ＵＰＣＰデータは、管理対象スイッチングエレメントにおいてＬＤＰセットを完全に実現するために、管理対象スイッチングエレメントの各々用のＣＰＣＰデータに変換されなければならない。例えば、ＬＤＰセットがいくつかの管理対象スイッチングエレメントにまたがるトンネルを指定する時、ＵＰＣＰデータは、トンネルの一端を表す管理対象スイッチングエレメントの特定のネットワークアドレス（例えば、ＩＰアドレス）を使用してその一端を表現する。しかし、トンネルがまたがる他の管理対象スイッチングエレメントの各々は、特定のネットワークアドレスを有する末端の管理対象スイッチングエレメントを参照するために、管理対象スイッチングエレメントに対してローカルなポート番号を使用する。すなわち、特定のネットワークアドレスは、管理対象スイッチングエレメントにおいてトンネルを指定するＬＤＰセットを完全に実現するために、管理対象スイッチングエレメントの各々に対するローカルポート番号に変換されなければならない。
【００６６】
カスタマイゼーション層５２０がＵＰＣＰデータを生成するコントローラインスタンスとは異なる別のコントローラインスタンスにおいて動作していると仮定すると、ＣＰＣＰデータに変換される中間データであるＵＰＣＰデータにより、いくつかの実施形態の制御システムは変倍できるようになる。これは、仮想化層５１５が、ＬＤＰセットを指定するＬＦＰデータをＬＤＰセットを実現する管理対象スイッチングエレメントの各々用のＣＰＣＰデータに変換する必要がないためである。代わりに、仮想化層５１５は、ＬＤＰセットを実現する全ての管理対象スイッチングエレメントに対して、一度だけＬＦＰデータをＵＰＣＰデータに変換する。このように、仮想化アプリケーションは、ＬＤＰセットを実現する管理対象スイッチングエレメントの数と同じ回数だけＬＤＰセットをＣＰＣＰデータに変換するために費やすであろう計算リソースを節約する。
【００６７】
カスタマイゼーション層５２０は、この層に対する入力及び出力を表現するために使用されうるＵＰＣＰ５４６及びＣＰＣＰ５５０を含む。カスタマイゼーション層は、ＵＰＣＰ５４６におけるＵＰＣＰデータをＣＰＣＰ５５０におけるＣＰＣＰデータに変換するためのモジュール（不図示）の集合を含む。いくつかの実施形態において、カスタマイゼーション層５２０は、この変換を実行するためにｎＬｏｇテーブルマッピングエンジンを使用する。カスタマイゼーション層は、ＣＰＣＰデータをカスタマイゼーション層５２０のＣＰＣＰ５５０から管理対象スイッチングエレメント５２５にプッシュするためのモジュール（不図示）の集合を更に含む。
【００６８】
管理対象スイッチングエレメントの各々にプッシュされるＣＰＣＰデータは、管理対象スイッチングエレメントに特有である。ＣＰＣＰデータは、「物理」データと呼ばれるが、管理対象スイッチングエレメントが物理データ処理領域及び論理データ処理領域の双方において物理スイッチング動作を実行することを許可する。いくつかの実施形態において、カスタマイゼーション層５２０は、管理対象スイッチングエレメントの各々に対する独立したコントローラインスタンスにおいて動作する。
【００６９】
いくつかの実施形態において、カスタマイゼーション層５２０は、コントローラインスタンスにおいて動作しない。これらの実施形態におけるカスタマイゼーション層５１５は、管理対象スイッチングエレメント５２５にある。従って、これらの実施形態において、仮想化層５１５は、ＵＰＣＰデータを管理対象スイッチングエレメントに送出する。管理対象スイッチングエレメントの各々は、ＵＰＣＰデータを管理対象スイッチングエレメントに特有のＣＰＣＰデータにカスタマイズする。これらの実施形態のうちのいくつかにおいて、コントローラデーモンは、管理対象スイッチングエレメントの各々において動作しており、ユニバーサルデータを管理対象スイッチングエレメント用のカスタマイズドデータに変換する。コントローラデーモンを以下において更に説明する。
【００７０】
いくつかの実施形態において、管理対象スイッチングエレメント５２５に伝搬されるカスタマイズド物理コントロールプレーンデータにより、このスイッチングエレメントは、論理領域において規定された論理値に基づいてネットワークデータ（例えば、パケット）に対して物理フォワーディング動作を実行できるようになる。具体的には、いくつかの実施形態において、カスタマイズド物理コントロールプレーンデータは、論理値を含むフローエントリを指定する。これらの論理値は、論理領域においてネットワークデータを転送するために使用される論理アドレス及び論理ポート番号等を含む。管理対象スイッチングエレメントが論理値に基づいて物理フォワーディング動作を実行することでネットワークデータに対して論理フォワーディング動作を実行できるように、これらのフローエントリは、論理値を物理領域において規定された物理値に更にマッピングする。このように、物理コントロールプレーンデータは、管理対象スイッチングエレメントにわたり論理スイッチングエレメントを実現することを容易にする。管理対象スイッチングエレメントにおいて論理データ処理を実現するために伝搬された物理コントロールプレーンデータを使用するいくつかの例は、２０１１年７月６日に出願された米国特許出願第１３／１７７，５３５号に更に記載される。なお、米国特許出願第１３／１７７，５３５号は、参考として本明細書に取り入れられる。
【００７１】
制御データパイプライン５００の層により処理されるコントロールプレーンデータは、層が高レベルになるにつれよりグローバルになる。すなわち、制御層５１０における論理コントロールプレーンデータは、論理コントロールプレーンデータにより規定された論理スイッチングエレメントを実現する管理対象スイッチングエレメントの集合全体にまたがる。これに対して、カスタマイゼーション層５２０におけるカスタマイズド物理コントロールプレーンデータは、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの各々に対して局所的かつ特有である。
【００７２】
Ｂ．マルチコントローラインスタンス
図６は、いくつかの実施形態のマルチインスタンス、分散ネットワーク制御システム６００を示す。この分散システムは、３つのコントローラインスタンス６０５、６１０及び６１５を用いて多数のスイッチングエレメント６９０を制御する。いくつかの実施形態において、分散システム６００により、異なるコントローラインスタンスは、同一のスイッチングエレメント又は異なるスイッチングエレメントの動作を制御できる。図６に示されるように、各インスタンスは、入力モジュール６２０と、制御モジュール６２５と、レコード６３５と、２次格納構造（例えば、ＰＴＤ）６４０と、コントローラ間通信インタフェース６４５と、管理対象スイッチングエレメント通信インタフェース６５０とを含む。
【００７３】
コントローラインスタンスの入力モジュール６２０は、ユーザから入力を取得して、その入力を制御モジュール６２５が理解及び処理するＬＣＰデータに変換するという点で、図５を参照して上述した入力変換層５０５に類似する。上述したように、入力は、いくつかの実施形態においてＡＰＩの呼び出しの形式である。入力モジュール６２０は、ＬＣＰデータを制御モジュール６２５に送出する。
【００７４】
コントローラインスタンスの制御モジュール６２５は、ＬＣＰデータをＬＦＰデータに変換して、そのＬＦＰデータを仮想化モジュール６３０にプッシュするという点で制御層５１０に類似する。更に制御モジュール６２５は、受信したＬＣＰデータがコントローラインスタンスが管理しているＬＤＰＳのものであるかを判定する。コントローラインスタンスがＬＣＰデータに対するＬＤＰＳのマスタ（すなわち、ＬＤＰＳを管理する論理コントローラ）である場合、コントローラインスタンスの仮想化モジュールはデータを更に処理する。コントローラインスタンスがＬＣＰデータに対するＬＤＰＳのマスタでない場合、いくつかの実施形態の制御モジュール６２５は、ＬＣＰデータを２次記憶装置６４０に格納する。
【００７５】
コントローラインスタンスの仮想化モジュール６３０は、ＬＦＰデータをＵＰＣＰデータに変換するという点で仮想化層５１５に類似する。いくつかの実施形態の仮想化モジュール６３０は、コントローラ間通信インタフェース６４５を介して別のコントローラインスタンスに、あるいは管理対象スイッチングエレメント通信インタフェース６５０を介して管理対象スイッチングエレメントにＵＰＣＰデータを送出する。
【００７６】
他のコントローラインスタンスがＬＤＰＳを実現する管理対象スイッチングエレメントのうちの少なくとも１つを管理することに関与する物理コントローラである場合、仮想化モジュール６３０は、ＵＰＣＰデータを別のインスタンスに送出する。これは、仮想化モジュール６３０がＵＰＣＰデータを生成しているコントローラインスタンスが特定のＬＤＰＳに関与する単なる論理コントローラであるが、ＬＤＰＳを実現する管理対象スイッチングエレメントに関与する物理コントローラ又はシャーシコントローラではない場合である。
【００７７】
管理対象スイッチングエレメントがＵＰＣＰデータを管理対象スイッチングエレメントに特有のＣＰＣＰデータに変換するように構成される場合、仮想化モジュール６３０は、ＵＰＣＰデータを管理対象スイッチングエレメントに送出する。この場合、コントローラインスタンスは、ＵＰＣＰデータからＣＰＣＰデータへの変換を実行するカスタマイゼーション層又はモジュールを有しない。
【００７８】
いくつかの実施形態において、レコード６３５は、コントローラインスタンスのリレーショナルデータベースデータ構造に格納されたレコードの集合である。いくつかの実施形態において、入力モジュール、制御モジュール及び仮想化モジュールの一部又は全ては、リレーショナルデータベースデータ構造に格納されたレコードを使用、更新及び管理する。すなわち、これらのモジュールの入力及び／又は出力は、リレーショナルデータベースデータ構造に格納される。
【００７９】
システム６００は、いくつかの実施形態においては、各インスタンスのリレーショナルデータベースデータ構造において同一のスイッチングエレメントデータレコードを維持するが、他の実施形態においては、各コントローラインスタンスが管理しているＬＤＰＳに基づいてスイッチングエレメントデータレコードの異なる集合を異なるインスタンスのリレーショナルデータベースデータ構造が格納できるようにする。
【００８０】
いくつかの実施形態のＰＴＤ６４０は、ユーザが指定したネットワーク構成データ（例えば、ＡＰＩの呼び出しの形式の入力から変換されたＬＣＰデータ）を格納するための２次格納構造である。いくつかの実施形態において、各コントローラインスタンスのＰＴＤは、システム６００を使用して全てのユーザ用の構成データを格納する。ユーザ入力を受信するコントローラインスタンスが構成データを他のコントローラインスタンスのＰＴＤに伝搬するため、全てのコントローラインスタンスの全てのＰＴＤは、これらの実施形態において全てのユーザ用の全ての構成データを有する。しかし、他の実施形態において、コントローラインスタンスのＰＴＤは、コントローラインスタンスが管理している特定のＬＤＰＳ用の構成データのみを格納する。
【００８１】
異なるコントローラインスタンスが同一のあるいは重なり合う構成データ及び／又は２次格納構造レコードを格納できるようにすることにより、システムは、あらゆるネットワークコントローラの障害（あるいは、リレーショナルデータベースデータ構造及び／又は２次格納構造インスタンスの障害）によるデータの損失に警戒することで全体的な回復を向上させる。例えば、コントローラインスタンスにわたりＰＴＤを複製することにより、障害を起こしたコントローラインスタンスは、別のインスタンスからそのＰＴＤを迅速に再ロードできるようになる。
【００８２】
別のコントローラインスタンスとの通信チャネル（例えば、ＲＰＣチャネル）を確立するために、コントローラ間通信インタフェース６４５が使用される（例えば、不図示のエクスポータにより）。示されるように、コントローラ間通信インタフェースは、異なるコントローラインスタンス６０５〜６１５間でのデータのやり取りを容易にする。
【００８３】
管理対象スイッチングエレメント通信インタフェース６５０は、上述したように、コントローラインスタンスと管理対象スイッチングエレメントとの間の通信を容易にする。いくつかの実施形態において、ユニバーサルデータをカスタマイズドデータに変換できる管理対象スイッチングエレメントの各々に仮想化モジュール６３０により生成されたＵＰＣＰデータを伝搬するために、管理対象スイッチングエレメント通信インタフェースが使用される。
【００８４】
分配されたコントローラインスタンスの間の通信の一部又は全てに対して、システム６００は調整マネージャ（ＣＭ）６５５を使用する。各インスタンスにおけるＣＭ６５５により、インスタンスは、ある特定の動作を他のインスタンスと調整できる。異なる実施形態は、インスタンス間で動作の異なる集合を調整するためにＣＭを使用する。そのような動作の例としては、リレーショナルデータベースデータ構造に書き込むこと、ＰＴＤに書き込むこと、スイッチングエレメントを制御すること、コントローラインスタンスの耐故障性に関連したコントローラ間の通信を容易にすること等がある。また、ＬＤＰＳのマスタ及び管理対象スイッチングエレメントのマスタを見つけるために、ＣＭが使用される。
【００８５】
上述したように、システム６００の異なるコントローラインスタンスは、同一のスイッチングエレメントの動作又は異なるスイッチングエレメントの動作を制御できる。いくつかのインスタンスにわたりこれらの動作の制御を分配することにより、システムは、より容易にスケールアップして更なるスイッチングエレメントを処理できる。具体的には、システムは、多数のコントローラインスタンスを使用することで実現されうる効率の恩恵を受けるために、異なるスイッチングエレメントの管理を異なるコントローラインスタンスに分配できる。そのような分散システムにおいて、各コントローラインスタンスが管理下で有するスイッチングエレメントの数が減少しうることにより、スイッチングエレメントにわたりフローエントリを生成及び分配するために各コントローラが実行する必要がある計算の数は減少する。他の実施形態において、多数のコントローラインスタンスを使用することにより、スケールアウトネットワーク管理システムを作成できるようになる。大規模なネットワークにおいてネットワークフローテーブルを分配する最適な方法の計算は、ＣＰＵを多用するタスクである。コントローラインスタンスで処理を分割することにより、システム６００は、大規模なネットワークに対処できるスケールアウトネットワーク管理システムを作成するために、より多数であるがあまり高性能でないコンピュータシステムの集合を使用しうる。
【００８６】
作業負荷を分配し、動作が異なるコントローラインスタンスと競合するのを避けるために、いくつかの実施形態のシステム６００は、システム６００内の１つのコントローラインスタンス（例えば、６０５）をＬＤＰＳ及び／又はあらゆる所定の管理対象スイッチングエレメントのマスタ（すなわち、論理コントローラ又は物理コントローラ）と呼ぶ。いくつかの実施形態において、各マスタコントローラインスタンスは、マスタが処理している管理対象スイッチングエレメントに関連したデータのみをリレーショナルデータベースデータ構造に格納する。
【００８７】
いくつかの実施形態において、上述したように、ＣＭは、コントローラインスタンスの回復に関連したコントローラ間の通信を容易にする。例えばＣＭは、上述の２次記憶装置によりコントローラ間の通信を実現する。制御システムにおけるコントローラインスタンスは、多くの理由（例えば、ハードウェア障害、ソフトウェア障害、ネットワーク障害等）により障害を起こす恐れがある。異なる実施形態は、コントローラインスタンスが障害を起こしたかを判定するために異なる技術を使用してもよい。いくつかの実施形態において、制御システムにおけるコントローラインスタンスが障害を起こしたかを判定するために、合意プロトコルが使用される。これらの実施形態のうちのいくつかは、合意プロトコルを実現するためにアパッチズーキーパ（Ａｐａｃｈｅ  Ｚｏｏｋｅｅｐｅｒ）を使用してもよく、他の実施形態は、他の方法で合意プロトコルを実現してもよい。
【００８８】
ＣＭ６５５のいくつかの実施形態は、コントローラインスタンスが障害を起こしたかを判定するために規定のタイムアウトを利用してもよい。例えば、コントローラインスタンスのＣＭがある時間の長さ（すなわち、規定のタイムアウトの長さ）内で通信（例えば、制御システムにおける別のコントローラインスタンスの別のＣＭから送出された）に応答しない場合、応答しないコントローラインスタンスは障害を起こしたと判定される。他の実施形態においてコントローラインスタンスが障害を起こしたかを判定するために、他の技術が利用されてもよい。
【００８９】
マスタコントローラインスタンスが障害を起こす場合、ＬＤＰセット及びスイッチングエレメントに対する新しいマスタが判定される必要がある。ＣＭ６５５のいくつかの実施形態は、マスタコントローラインスタンスを選出するマスタ選出処理（例えば、ＬＤＰセットの管理を区分するための及び／又はスイッチングエレメントの管理を区分するための）を実行することでそのような判定を行う。いくつかの実施形態のＣＭ６５５は、障害を起こしたコントローラインスタンスがマスタであったＬＤＰセット及びスイッチングエレメントの双方に対する新しいマスタコントローラインスタンスを選出するためのマスタ選出処理を実行してもよい。しかし、他の実施形態のＣＭ６５５は、（１）障害を起こしたコントローラインスタンスがマスタであったＬＤＰセットに対する新しいマスタコントローラインスタンスを選出するためのマスタ選出処理と、（２）障害を起こしたコントローラインスタンスがマスタであったスイッチングエレメントに対する新しいマスタコントローラインスタンスを選出するための別のマスタ選出処理とを実行してもよい。これらの場合、ＣＭ６５５は、２つの異なるコントローラインスタンス、すなわち障害を起こしたコントローラインスタンスがマスタであったＬＤＰセットに対するあるコントローラインスタンス及び障害を起こしたコントローラインスタンスがマスタであったスイッチングエレメントに対する別のコントローラインスタンスを新しいコントローラインスタンスとして判定してもよい。
【００９０】
代わりに又は接続的に、いくつかの実施形態のクラスタにおけるコントローラは、上述したようにリーダコントローラを判定するために合意アルゴリズムを実行する。リーダコントローラは、マスタコントローラが障害を起こした場合に引き継ぐために、特定のワークアイテムに対するマスタコントローラ及び場合によってはホットスタンドバイコントローラを割り当てることにより、クラスタにおける各コントローラインスタンスが関与するタスクを区分する。
【００９１】
いくつかの実施形態において、マスタ選出処理は、コントローラインスタンスが制御システムに追加される場合にＬＤＰセットの管理及び／又はスイッチングエレメントの管理を区分するためのものでもある。特に、制御システム６００が制御システム６００においてコントローラインスタンスのメンバーの変化を検出する場合、ＣＭ６５５のいくつかの実施形態はマスタ選出処理を実行する。例えば、新しいネットワークコントローラが制御システム６００に追加されたことを制御システム６００が検出する場合、ＣＭ６５５は、ＬＤＰセットの管理及び／又はスイッチングエレメントの管理の一部を既存のコントローラインスタンスから新しいコントローラインスタンスに再分配するためにマスタ選出処理を実行してもよい。しかし、他の実施形態において、新しいネットワークコントローラが制御システム６００に追加されたことを制御システム６００が検出する場合、ＬＤＰセットの管理及び／又はスイッチングエレメントの管理の一部は、既存のコントローラインスタンスから新しいネットワークコントローラに再分配されない。代わりに、これらの実施形態における制御システム６００は、割り当てられていないＬＤＰセット及び／又はスイッチングエレメント（例えば、新しいＬＤＰセット及び／又はスイッチングエレメント、あるいは障害を起こしたネットワークコントローラからのＬＤＰセット及び／又はスイッチングエレメント）を検出する場合、割り当てられていないＬＤＰセット及び／又はスイッチングエレメントを新しいコントローラインスタンスに割り当てる。
【００９２】
Ｃ．ＬＤＰセット及び管理対象スイッチングエレメントの管理を区分すること
図７は、図６のシステム６００に類似する分散システム７００においてスイッチングエレメント（すなわち、物理コントローラ）に対してマスタコントローラインスタンスを指定する一例を示す。この例において、２つのコントローラ７０５及び７１０は、２人の異なるユーザＡ及びＢに対する３つのスイッチングエレメントＳ１、Ｓ２及びＳ３を制御する。２つの制御アプリケーション７１５及び７２０を通して、２人のユーザは、コントローラの仮想化アプリケーション７４５及び７５０により２つのコントローラインスタンス７０５及び７１０の２つのリレーショナルデータベースデータ構造７５５及び７６０に同様に格納される多数のレコードに変換される２つの異なるＬＤＰセット７２５及び７３０を指定する。
【００９３】
図７に示される例において、双方のコントローラ７０５及び７１０の双方の制御アプリケーション７１５及び７２０は、双方のユーザＡ及びＢに対するスイッチングエレメントＳ２のレコードを変更できるが、コントローラ７０５のみがこのスイッチングエレメントのマスタである。この例は２つの異なるシナリオを示す。第１シナリオは、ユーザＢに対するスイッチングエレメントＳ２においてレコードＳ２ｂ１を更新するコントローラ７０５を含む。第２シナリオは、制御アプリケーション７２０がリレーショナルデータベースデータ構造７６０においてスイッチングエレメントＳ２及びユーザＡに対するレコードＳ２ａ１を更新した後にスイッチングエレメントＳ２においてレコードＳ２ａ１を更新するコントローラ７０５を含む。図７に示される例において、この更新は、コントローラ７１０のリレーショナルデータベースデータ構造７６０からコントローラ７０５のリレーショナルデータベースデータ構造７５５にルーティングされ、その後スイッチングエレメントＳ２にルーティングされる。
【００９４】
異なる実施形態は、コントローラインスタンス７１０のリレーショナルデータベースデータ構造７６０に対する変更をコントローラインスタンス７０５のリレーショナルデータベースデータ構造７５５に伝搬するために異なる技術を使用する。例えば、この更新を伝搬するために、いくつかの実施形態におけるコントローラ７１０の仮想化アプリケーション７５０は、レコードの集合を直接リレーショナルデータベースデータ構造７５５に送出する（コントローラ間通信モジュール又はエクスポータ／インポータを使用することで）。それに応答して、仮想化アプリケーション７４５は、リレーショナルデータベースデータ構造７５５に対する変更をスイッチングエレメントＳ２に送出する。
【００９５】
いくつかの実施形態のシステム７００は、リレーショナルデータベースデータ構造の変更を別のコントローラインスタンスのリレーショナルデータベースデータ構造に伝搬するのではなく、制御アプリケーション７２０からの要求に応答してスイッチングエレメントＳ２においてレコードＳ２ａ１を変更するために他の技術を使用する。例えば、いくつかの実施形態の分散制御システムは、２次格納構造（例えば、ＰＴＤ）を異なるコントローラインスタンス間の通信チャネルとして使用する。いくつかの実施形態において、ＰＴＤは全てのインスタンスにわたり複製され、リレーショナルデータベースデータ構造の一部又は全ては、ＰＴＤ格納層を介してあるコントローラインスタンスから別のコントローラインスタンスにプッシュされる。従って、図７に示される例において、リレーショナルデータベースデータ構造７６０に対する変更は、コントローラ７１０のＰＴＤに対して複製され、そこから、それは、コントローラ７０５のＰＴＤ又はリレーショナルデータベースデータ構造７５５において複製されうる。
【００９６】
いくつかの実施形態が、コントローラインスタンスをスイッチングエレメントのマスタと呼ぶことに加え、あるコントローラインスタンスをＬＤＰＳのマスタと呼ぶため、図７に示される動作のシーケンスに対する他の変動が存在しうる。いくつかの実施形態において、異なるコントローラインスタンスは、リレーショナルデータベースデータ構造においてスイッチングエレメント及びそのスイッチングエレメントに対する対応するレコードのマスタであってよいが、他の実施形態は、コントローラインスタンスがリレーショナルデータベースデータ構造においてスイッチングエレメント及びそのスイッチングエレメントに対する全てのレコードのマスタとなることを要求する。
【００９７】
システム７００がスイッチングエレメント及びリレーショナルデータベースデータ構造レコードに対するマスタの指名を可能にする実施形態において、図７に示される例は、コントローラインスタンス７１０がリレーショナルデータベースデータ構造レコードＳ２ａ１のマスタである例を示すが、コントローラインスタンス７０５は、スイッチングエレメントＳ２に対するマスタである。コントローラインスタンス７０５及び７１０以外のコントローラインスタンスがリレーショナルデータベースデータ構造レコードＳ２ａ１のマスタであった場合、制御アプリケーション７２０からのリレーショナルデータベースデータ構造レコードの変更に対する要求は、この他のコントローラインスタンスに伝搬されなければならなかったであろう。この他のコントローラインスタンスは、リレーショナルデータベースデータ構造レコードを変更する。この変更により、リレーショナルデータベースデータ構造７５５及びスイッチングエレメントＳ２は、この変更をコントローラインスタンス７０５に伝搬する１つ又は複数の手段によりそれらのレコードを更新する。
【００９８】
他の実施形態において、コントローラインスタンス７０５は、リレーショナルデータベースデータ構造レコードＳ２ａ１のマスタであってもよく、あるいはスイッチングエレメントＳ２及びそのリレーショナルデータベースデータ構造の全てのレコードのマスタであってもよい。これらの実施形態において、制御アプリケーション７２０からのリレーショナルデータベースデータ構造レコードの変更に対する要求は、リレーショナルデータベースデータ構造７５５におけるレコード及びスイッチングエレメントＳ２を変更するコントローラインスタンス７０５に伝搬されなければならないであろう。
【００９９】
上述したように、異なる実施形態は、異なるコントローラインスタンス間の通信を容易にするために異なる技術を採用する。また、異なる実施形態は、異なる方法でコントローラインスタンスを実現する。例えばいくつかの実施形態において、制御アプリケーション（例えば、図６及び図７の６２５又は７１５）及び仮想化アプリケーション（例えば、６３０又は７４５）のスタックは、インストールされて単一のコンピュータ上で動作する。また、いくつかの実施形態において、多数のコントローラインスタンスは、インストールされて単一のコンピュータ上で並列に動作しうる。いくつかの実施形態において、コントローラインスタンスは、いくつかのコンピュータの間で分割された構成要素のスタックも有しうる。例えばあるインスタンス内で、制御アプリケーション（例えば、６２５又は７１５）は第１物理マシン又は仮想マシン上にあってよく、仮想化アプリケーション（例えば、６３０又は７４５）は第２物理マシン又は仮想マシン上にあってよい。
【０１００】
図８は、入力を分配するためのコントローラ、ＬＤＰＳのマスタコントローラ（論理コントローラとも呼ばれる）及び管理対象スイッチングエレメントのマスタコントローラ（物理コントローラとも呼ばれる）として機能するいくつかのコントローラインスタンスの動作の一例を示す。いくつかの実施形態において、全てのコントローラインスタンスが図６を参照して上述したような異なるモジュール及びインタフェースのフルスタックを含むわけではない。あるいは、全てのコントローラインスタンスがフルスタックの全ての機能を実行するわけではない。例えば、図８に示されるコントローラインスタンス８０５、８１０及び８１５は、いずれもモジュール及びインタフェースのフルスタックを有しない。
【０１０１】
この例におけるコントローラインスタンス８０５は、入力を分配するためのコントローラインスタンスである。すなわち、いくつかの実施形態のコントローラインスタンス８０５は、ＡＰＩの呼び出しの形式でユーザから入力を取得する。ＡＰＩの呼び出しにより、ユーザは、特定のＬＤＰＳを構成する（例えば、管理対象スイッチングエレメントの集合において実現される論理スイッチングエレメント又は論理ルータを構成する）ための要求又は情報の問い合わせ（例えば、ユーザの論理スイッチの論理ポートに対するネットワークトラフィックの統計）に対する要求を指定できる。コントローラインスタンス８０５の入力モジュール８２０は、いくつかの実施形態においてこれらのＡＰＩの呼び出しを受信して、ＰＴＤ８２５に格納され、別のコントローラインスタンスに送出されうる形態（例えば、データタプル又はレコード）にそれらを変換する。
【０１０２】
次に、この例におけるコントローラインスタンス８０５は、特定のＬＤＰＳのレコードの管理に関与する別のコントローラインスタンスにこれらのレコードを送出する。この例において、コントローラインスタンス８１０は、ＬＤＰＳのレコードに関与する。コントローラインスタンス８１０は、コントローラインスタンス８０５のＰＴＤ８２５からレコードを受信し、コントローラインスタンス８１０の２次格納構造であるＰＴＤ８４５にそのレコードを格納する。いくつかの実施形態において、異なるコントローラインスタンスのＰＴＤは、直接互いに情報をやり取りできるため、コントローラ間通信インタフェースに依存する必要はない。
【０１０３】
次に制御アプリケーション８１０は、これらのレコードをＰＴＤに追加することを検出し、リレーショナルデータベースデータ構造８４２において他のレコードを生成又は変更するためにそのレコードを処理する。特に、制御アプリケーションはＬＦＰデータを生成する。その結果、仮想化アプリケーションは、リレーショナルデータベースデータ構造においてこれらのレコードの変更及び／又は追加を検出し、リレーショナルデータベースデータ構造において他のレコードを変更及び／又は生成する。これらの他のレコードは、この例においてＵＰＣＰデータを表す。その後、これらのレコードは、コントローラインスタンス８１０のコントローラ間通信インタフェース８５０を介して、特定のＬＤＰＳを実現するスイッチングエレメントのうちの少なくとも１つを管理している別のコントローラインスタンスに送出される。
【０１０４】
この例におけるコントローラインスタンス８１５は、スイッチングエレメント８５５を管理しているコントローラインスタンスである。スイッチングエレメントは、特定のＬＤＰＳの少なくとも一部を実現する。コントローラインスタンス８１５は、コントローラ間通信インタフェース８６５を介してコントローラインスタンス８１０からＵＰＣＰデータを表すレコードを受信する。いくつかの実施形態において、コントローラインスタンス８１５は、ＵＰＣＰデータをＣＰＣＰデータに変換するための制御アプリケーション及び仮想化アプリケーションを有する。しかし、この例において、コントローラインスタンス８１５は、ＵＰＣＰデータの送出先の管理対象スイッチングエレメントの集合を識別するだけである。このように、コントローラインスタンス８１５は、このコントローラが管理する責任を有する管理対象スイッチングエレメントに送出するデータを収集するための集約点として機能する。この例において、管理対象スイッチングエレメント８５５は、コントローラインスタンス８１５により管理対象スイッチングエレメントの１つである。
【０１０５】
Ｄ．入力変換層
図９は、入力変換アプリケーション９００に対するソフトウェアアーキテクチャを概念的に示す。いくつかの実施形態の入力変換アプリケーションは、図５を参照して上述した入力変換層５０５として機能する。特に入力変換アプリケーションは、ユーザが入力値を入力することを許可するユーザインタフェースアプリケーションから入力を受信する。入力変換アプリケーションは、入力を要求に変換し、要求を処理するために要求を１つ以上のコントローラインスタンスにディスパッチする。入力変換アプリケーションは、いくつかの実施形態においては、制御アプリケーションが動作する同一のコントローラインスタンスにおいて動作するが、他の実施形態においては独立したコントローラインスタンスとして動作する。図９に示されるように、入力変換アプリケーションは、入力パーサ９０５と、フィルタ９１０と、要求生成器９１５と、要求リポジトリ９２０と、ディスパッチャ９２５と、応答マネージャ９３０と、コントローラ間通信インタフェース９４０とを含む。
【０１０６】
いくつかの実施形態において、入力変換アプリケーション９００は、ＬＤＰセット及び情報の問い合わせを指定するためのＡＰＩの呼び出しの集合をサポートする。これらの実施形態において、ユーザが入力値を入力することを許可するユーザインタフェースアプリケーションは、ＡＰＩの呼び出しの形式の入力を入力変換アプリケーション９００に送出するように実現される。従って、これらのＡＰＩの呼び出しは、ＬＤＰＳ（例えば、ユーザにより指定された論理スイッチングエレメント構成）及び／又はユーザの情報の問い合わせ（例えば、ユーザの論理スイッチングエレメントの論理ポートに対するネットワークトラフィックの統計）を指定する。更に入力変換アプリケーション９００は、いくつかの実施形態において論理コントローラ、物理コントローラ及び／又は別のコントローラインスタンスの別の入力変換アプリケーションから入力を取得してもよい。
【０１０７】
いくつかの実施形態の入力パーサ９０５は、ユーザインタフェースアプリケーションからＡＰＩの呼び出しの形式の入力を受信する。いくつかの実施形態において、入力パーサは、ＡＰＩの呼び出しからユーザ入力値を取り出し、その入力値をフィルタ９１０に渡す。フィルタ９１０は、ある特定の要件に適合しない入力値を除外する。例えばフィルタ９１０は、論理ポートに対して無効なネットワークアドレスを指定する入力値を除外する。不適合入力値を含むＡＰＩの呼び出しに対して、応答マネージャ９３０は、入力が適合していないことを示す応答をユーザに送出する。
【０１０８】
要求生成器９１５は、要求に対する応答を生成する要求を処理する１つ以上のコントローラインスタンスに送出される要求を生成する。これらの要求は、処理対象のコントローラインスタンス及び／又は情報の問い合わせを受信するためのＬＤＰＳデータを含んでもよい。例えば要求は、ユーザが管理している論理スイッチングエレメントの論理ポートの統計情報を求めてもよい。この要求に対する応答は、論理スイッチングエレメントと関連付けられたＬＤＰＳを管理する責任を有するコントローラインスタンスにより準備された要求された統計情報を含むであろう。
【０１０９】
異なる実施形態の要求生成器９１５は、要求を受信及び処理するコントローラインスタンスの実現例に依存して、異なる形式に従って要求を生成する。例えば、いくつかの実施形態の要求生成器９１５が生成する要求は、要求を受信するコントローラインスタンスのリレーショナルデータベースデータ構造に格納するのに適したレコードの形態（例えば、データタプル）である。これらの実施形態のうちのいくつかにおいて、受信側コントローラインスタンスは、要求を表すレコードを処理するためにｎＬｏｇテーブルマッピングエンジンを使用する。他の実施形態において、要求は、要求を受信するコントローラインスタンスのＮＩＢデータ構造と対話できるオブジェクト指向データオブジェクトの形式である。これらの実施形態において、受信側コントローラインスタンスは、ｎＬｏｇテーブルマッピングエンジンを経ずにＮＩＢデータ構造上で直接データオブジェクトを処理する。
【０１１０】
ディスパッチャ９２５が生成された要求を適切なコントローラインスタンスに送出できるように、いくつかの実施形態の要求生成器９１５は、要求を要求リポジトリ９２０に預ける。ディスパッチャ９２５は、各要求が送出されるべきコントローラインスタンスを識別する。場合によっては、ディスパッチャは、要求と関連付けられたＬＤＰＳを調べ、そのＬＤＰＳのマスタであるコントローラインスタンスを識別する。場合によっては、ディスパッチャは、要求がスイッチングエレメントと特に関連がある場合（例えば、要求がスイッチングエレメントのポートにマッピングされる論理ポートの統計情報に関する場合）に要求を送出するためのコントローラインスタンスとして特定のスイッチングエレメントのマスタ（すなわち、物理コントローラ）を識別する。ディスパッチャは、要求を識別されたコントローラインスタンスに送出する。受信側コントローラインスタンスは、要求が情報の問い合わせを含む場合に応答を返送する。
【０１１１】
コントローラ間通信インタフェース９４０は、要求が送出されうる別のコントローラインスタンスとの通信チャネル（例えば、ＲＰＣチャネル）を確立するという点で、図６を参照して上述したコントローラ間通信インタフェース６４５に類似する。通信チャネルは、いくつかの実施形態においては双方向であるが、他の実施形態においては一方向である。チャネルが一方向である場合、コントローラ間通信インタフェースは、入力変換アプリケーションが異なるチャネルを介して要求を送出し、応答を受信できるように、別のコントローラインスタンスとの多数のチャネルを確立する。
【０１１２】
受信側コントローラインスタンスが情報の問い合わせを指定する要求を受信する場合、コントローラインスタンスは、要求を処理し、問い合わせのあった情報を含む応答を生成する。応答マネージャ９３０は、コントローラ間通信インタフェース９４０により確立されたチャネルを介して要求を処理したコントローラインスタンスから応答を受信する。場合によっては、２つ以上の応答は、送出された要求に対して返送してもよい。例えば、ユーザが管理している論理スイッチングエレメントの全ての論理ポートからの統計情報に対する要求は、各コントローラからの応答を返送するであろう。ポートが論理ポートにマッピングされる多数の異なるスイッチングエレメントに対する多数の物理コントローラインスタンスからの応答は、直接又は論理スイッチと関連付けられたＬＤＰＳのマスタを介して入力変換アプリケーション９００に返送されてもよい。そのような場合、いくつかの実施形態の応答マネージャ９３０は、これらの応答をマージして、単一のマージされた応答をユーザインタフェースアプリケーションに送出する。
【０１１３】
上述したように、コントローラインスタンスにおいて動作する制御アプリケーションは、変換動作を実行することにより、ＬＣＰデータを表すデータレコードをＬＦＰデータを表すデータレコードに変換する。具体的には、いくつかの実施形態において、制御アプリケーションは、仮想化アプリケーションにより作成されるＬＤＰＳテーブル（例えば、論理フォワーディングテーブル）にＬＤＰセットをポピュレートする。
【０１１４】
Ｅ．ｎＬｏｇエンジン
いくつかの実施形態におけるコントローラインスタンスは、データログテーブルマッピング技術の変動を使用するｎＬｏｇテーブルマッピングエンジンを使用することでマッピング動作を実行する。テーブルのある集合をテーブルの別の集合にマッピングするために、データログはデータベース管理の分野で使用される。データログは、その現在の実現例が低速なことが多いため、ネットワーク制御システムの仮想化アプリケーションにおいてテーブルマッピング動作を実行するのに適したツールではない。
【０１１５】
従って、いくつかの実施形態のｎＬｏｇエンジンは、ＬＤＰＳデータタプルを管理対象スイッチングエレメントのデータタプルにリアルタイムでマッピングできるように迅速に動作するようにカスタム設計される。このカスタム設計は、いくつかのカスタム設計の選択肢に基づいている。例えばいくつかの実施形態は、アプリケーション開発者により（例えば、制御アプリケーションの開発者により）表現される高レベル宣言規則の集合からｎＬｏｇテーブルマッピングエンジンをコンパイルする。これらの実施形態のうちのいくつかにおいて、ｎＬｏｇエンジンに対して行われる１つのカスタム設計の選択肢は、アプリケーション開発者が宣言規則を表現するためにＡＮＤ演算子のみを使用することを許可するためのものである。開発者が他の演算子（例えば、ＯＲ、ＸＯＲ等）を使用するのを防止することにより、これらの実施形態は、結果として得られるｎＬｏｇエンジンの規則が実行時により高速に実行するＡＮＤ演算に関して表現されることを保証する。
【０１１６】
別のカスタム設計の選択肢は、ｎＬｏｇエンジンにより実行された結合演算に関連する。結合演算は、異なるテーブルのレコード間での関連付けを作成するための一般的なデータベース操作である。いくつかの実施形態において、外結合演算（外部結合演算とも呼ばれる）を実行するのは時間がかかりうるためにエンジンのリアルタイムの動作にとって現実的ではないため、ｎＬｏｇエンジンは、結合演算を内結合演算（内部結合演算とも呼ばれる）に限定する。
【０１１７】
更に別のカスタム設計の選択肢は、いくつかの異なるコントローラインスタンスにより実行される分散テーブルマッピングエンジンとしてｎＬｏｇエンジンを実現するためのものである。いくつかの実施形態は、ＬＤＰセットの管理を区分することで分散してｎＬｏｇエンジンを実現する。ＬＤＰセットの管理を区分することは、特定のＬＤＰＳと関連付けられたレコードを指定する責任を有するインスタンスとして１つのコントローラインスタンスのみをその特定のＬＤＰＳの各々に対して指定することを含む。例えば、制御システムが２つの異なるコントローラインスタンスを有する５人の異なるユーザに対して５つのＬＤＰセットを指定するために３つのスイッチングエレメントを使用する場合、一方のコントローラインスタンスは、ＬＤＰセットのうちの２つに関連するレコードに対するマスタであってよく、他方のコントローラインスタンスは、他の３つのＬＤＰセットに対するレコードに対するマスタであってよい。
【０１１８】
ＬＤＰセットの管理を区分することは、いくつかの実施形態において、各ＬＤＰＳに対するテーブルマッピング動作をＬＤＰＳに関与するコントローラインスタンスのｎＬｏｇエンジンに更に割り当てる。いくつかのｎＬｏｇインスタンスにわたりｎＬｏｇテーブルマッピング動作を分配することにより、各ｎＬｏｇインスタンスの負荷を軽減する結果、各ｎＬｏｇインスタンスがマッピング動作を完了できるまでの速度が上昇する。更にこのような分配により、コントローラインスタンスを実行する各マシンに対するメモリサイズの要件が減少する。いくつかの実施形態は、各ｎＬｏｇインスタンスにより実行される第１結合演算がＬＤＰＳパラメータに基づくように指示することにより、異なるインスタンスにわたりｎＬｏｇテーブルマッピング動作を区分する。このような指示により、インスタンスがｎＬｏｇインスタンスにより管理されないＬＤＰＳに関連する結合演算の集合を開始した場合に各ｎＬｏｇインスタンスの結合演算が即座に失敗して終了することを保証する。ｎＬｏｇエンジンを使用するいくつかの例は、先に組み込まれた米国特許出願第１３／１７７，５３３号に記載される。
【０１１９】
Ｆ．制御層
図１０は、本発明のいくつかの実施形態の制御アプリケーション１０００を示す。このアプリケーション１０００は、図６の制御モジュール６２５としていくつかの実施形態において使用される。このアプリケーション１０００は、ＬＣＰデータを表す入力データタプルを含む入力テーブルをＬＦＰデータを表すデータタプルにマッピングするためにｎＬｏｇテーブルマッピングエンジンを使用する。このアプリケーションは、制御アプリケーション１０００からＬＤＰセットを指定するデータタプルを受信する仮想化アプリケーション１００５の上にある。仮想化アプリケーション１００５は、データタプルをＵＰＣＰデータにマッピングする。
【０１２０】
より具体的には、制御アプリケーション１０００により、異なるユーザは、ユーザが管理する論理スイッチングエレメントの所望の構成を指定する異なるＬＤＰセットを規定できる。制御アプリケーション１０００は、マッピング動作により、各ユーザの各ＬＤＰＳ用のデータをＬＤＰＳと関連付けられた論理スイッチングエレメント用のＬＦＰデータを指定するデータタプルの集合に変換する。いくつかの実施形態において、制御アプリケーションは、仮想化アプリケーション１００５が実行される同一のホスト上で実行される。制御アプリケーション及び仮想化アプリケーションは、他の実施形態において同一のマシン上で動作する必要はない。
【０１２１】
図１０に示されるように、制御アプリケーション１０００は、規則エンジン入力テーブル１０１０の集合と、関数テーブル及び定数テーブル１０１５の集合と、インポータ１０２０と、規則エンジン１０２５と、規則エンジン出力テーブル１０４５の集合と、トランスレータ１０５０と、エクスポータ１０５５と、ＰＴＤ１０６０と、コンパイラ１０３５とを含む。コンパイラ１０３５は、アプリケーションの他の構成要素とは異なる時間インスタンスで動作するアプリケーションの１つの構成要素である。コンパイラが、開発者が特定の制御アプリケーション及び／又は仮想化環境に対する規則エンジンを指定する必要がある場合に動作するのに対し、残りのアプリケーションのモジュールは、１人以上のユーザにより指定されたＬＤＰセットを展開するためにアプリケーションが仮想化アプリケーションとインタフェース接続する実行時に動作する。
【０１２２】
いくつかの実施形態において、コンパイラ１０３５は、宣言型言語で指定される宣言型命令１０４０のかなり小さな集合（例えば、数百行）を取得し、これらをアプリケーションのテーブルマッピングを実行する規則エンジン１０２５の動作を指定するコード（すなわち、オブジェクトコード）の大きな集合（例えば、何千の行）に変換する。従って、コンパイラは、制御アプリケーションを規定及び更新する制御アプリケーション開発者の処理を大幅に簡略化する。これは、コンパイラにより、開発者が、制御アプリケーションの複雑なマッピング動作のコンパクトな定義を可能にする高レベルプログラミング言語を使用し、その後１つ又は複数の変更（例えば、制御アプリケーションによりサポートされた論理ネットワーク化機能の変更、制御アプリケーションの所望の挙動に対する変更等）に応答してこのマッピング動作を更新できるためである。更にコンパイラにより、開発者は、マッピング動作を規定している時に、イベントが制御アプリケーションに到達する順序を考慮する必要がなくなる。
【０１２３】
いくつかの実施形態において、規則エンジン（ＲＥ）入力テーブル１０１０は、ユーザ及び／又は制御アプリケーションにより指定された論理データ及び／又はスイッチング構成（例えば、アクセス制御リスト構成、専用仮想ネットワーク構成、ポートセキュリティ構成等）を有するテーブルを含む。入力テーブル１０１０は、いくつかの実施形態においてネットワーク制御システムにより管理対象スイッチングエレメントからの物理データを含むテーブルを更に含む。いくつかの実施形態において、そのような物理データは、管理対象スイッチングエレメントに関するデータと、異なるユーザの異なるＬＤＰセットを展開するためにネットワーク制御システムにより採用されたネットワーク構成に関する他のデータとを含む。
【０１２４】
ＲＥ入力テーブル１０１０は、ユーザにより提供されたＬＣＰデータを部分的にポピュレートされる。ＲＥ入力テーブル１０１０は、ＬＦＰデータ及びＵＰＣＰデータも含む。ＲＥ入力テーブル１０１０に加え、制御アプリケーション１０００は、テーブルマッピング動作のための入力を収集するために規則エンジン１０２５が使用する他の種々雑多なテーブル１０１５を含む。これらのテーブル１０１５は、規則エンジン１０２５がテーブルマッピング動作を実行する必要がある定数に対する規定の値を格納する定数テーブルを含む。例えば定数テーブル１０１５は、値０として規定される定数「zero」と、値4,000として規定される定数「dispatch_port_no」と、値0xFF:FF:FF:FF:FF:FFとして規定される定数「broadcast_MAC_addr」とを含んでもよい。
【０１２５】
規則エンジン１０２５が定数を参照する時、定数に対して規定された対応する値が実際に検索及び使用される。また、定数テーブル１０１５の定数に対して規定された値は、変更及び／又は更新されてもよい。このように、定数テーブル１０１５は、規則エンジン１０２５が規則エンジン１０２５の動作を指定するコードを再書き込み又は再コンパイルする必要なく参照する定数に対して規定された値を変更する機能を提供する。テーブル１０１５は、出力テーブル１０４５をポピュレートするために必要とされる値を算出するために規則エンジン１０２５が使用する必要がある関数を格納する関数テーブルを更に含む。
【０１２６】
規則エンジン１０２５は、ＬＣＰデータをＬＦＰデータに変換するためのある方法を指定するテーブルマッピング動作を実行する。規則エンジン（ＲＥ）入力テーブルの１つが変更される場合は常に、規則エンジンは、結果として１つ以上のＲＥ出力テーブルにおける１つ以上のデータタプルを変更してもよいテーブルマッピング動作の集合を実行する。
【０１２７】
図１０に示されるように、規則エンジン１０２５は、イベント処理プログラム１０２２と、いくつかのクエリプラン１０２７と、テーブルプロセッサ１０３０とを含む。各クエリプランは、ＲＥ入力テーブルの１つが変更されると実行される結合演算の集合を指定する規則の集合である。以下において、そのような変更を入力テーブルイベントと呼ぶ。この例において、各クエリプランは、宣言１０４０の集合の１つの宣言規則からコンパイラ１０３５により生成される。いくつかの実施形態において、２つ以上のクエリプランは、１つの宣言規則から生成される。例えばクエリプランは、１つの宣言規則により結合された各テーブルに対して作成される。すなわち、宣言規則が４つのテーブルに結合するように指定する場合、４つの異なるクエリプランはその１つの宣言から作成される。いくつかの実施形態において、クエリプランは、ｎＬｏｇ宣言型言語を使用することで規定される。
【０１２８】
規則エンジン１０２５のイベント処理プログラム１０２２は、各入力テーブルイベントの発生を検出する。異なる実施形態のイベント処理プログラムは、異なる方法で入力テーブルイベントの発生を検出する。いくつかの実施形態において、イベント処理プログラムは、ＲＥ入力テーブルのレコードに対する変更を通知するために、コールバックをＲＥ入力テーブルに登録する。そのような実施形態において、イベント処理プログラム１０２２は、レコードの１つが変更したＲＥ入力テーブルからの通知を受信する時に入力テーブルイベントを検出する。
【０１２９】
検出された入力テーブルイベントに応答して、イベント処理プログラム１０２２は、（１）検出されたテーブルイベントに対して適切なクエリプランを選択し、（２）クエリプランを実行するようにテーブルプロセッサ１３０３に指示する。クエリプランを実行するために、テーブルプロセッサ１０３０は、いくつかの実施形態において、１つ以上の入力テーブル１０１０及び種々雑多なテーブル１０１５からデータ値の１つ以上の集合を表す１つ以上のレコードを生成するために、クエリプランにより指定された結合演算を実行する。次に、いくつかの実施形態のテーブルプロセッサ１０３０は、（１）結合演算により生成されたレコードからデータ値の部分集合を選択するために選択動作を実行し、（２）選択されたデータ値の部分集合を１つ以上のＲＥ出力テーブル１０４５に書き込む。
【０１３０】
いくつかの実施形態において、ＲＥ出力テーブル１０４５は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル１０４５は、規則エンジン１０２５のテーブルマッピング動作の出力を格納するためにＲＥ出力テーブルと呼ばれる。いくつかの実施形態において、ＲＥ出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、ＲＥ入力テーブル及び／又は制御アプリケーション（ＣＡ）出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはＲＥ入力テーブルである。ＲＥ出力テーブル１０４５は、規則エンジンに別のクエリプランを実行させるイベントを生成するＲＥ入力テーブル１０１０であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、制御アプリケーション１０００又はインポータ１０２０によるＲＥ入力テーブルの変更により発生するイベントである外部入力イベントと対比される。
【０１３１】
以下において更に説明するように、テーブルの変更により、エクスポータ１０５５が変更を仮想化アプリケーション１００５にエクスポートする場合、テーブルはＣＡ出力テーブルである。ＲＥ出力テーブル１０４５のテーブルは、いくつかの実施形態において、ＲＥ入力テーブル、ＣＡ出力テーブル又はＲＥ入力テーブル及びＣＡ出力テーブルの双方であってよい。
【０１３２】
エクスポータ１０５５は、ＲＥ出力テーブル１０４５のＣＡ出力テーブルに対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でＣＡ出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、ＣＡ出力テーブルのレコードに対する変更を通知するために、コールバックをＣＡ出力テーブルに登録する。そのような実施形態において、エクスポータ１０５５は、レコードの１つが変更したＣＡ出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
【０１３３】
検出された出力テーブルイベントに応答して、エクスポータ１０５５は、変更されたＣＡ出力テーブルにおける変更されたデータタプルの一部又は全てを取得し、この変更されたデータタプルを仮想化アプリケーション１００５の入力テーブル（不図示）に伝搬する。いくつかの実施形態において、データタプルを仮想化アプリケーションにプッシュするエクスポータ１０５５の代わりに、仮想化アプリケーション１００５は、ＣＡ出力テーブル１０４５からのデータタプルを仮想化アプリケーションの入力テーブルにプルする。いくつかの実施形態において、制御アプリケーション１０００のＣＡ出力テーブル１０４５と仮想化１００５の入力テーブルとは同一であってもよい。更に他の実施形態において、制御アプリケーション及び仮想化アプリケーションはテーブルの１つの集合を使用するため、ＣＡ出力テーブルは、実質的には仮想化アプリケーション（ＶＡ）入力テーブルである。
【０１３４】
いくつかの実施形態において、制御アプリケーションは、制御アプリケーションが管理する責任を有しないＬＤＰセット用のデータを出力テーブル１０４５に保持しない。しかし、そのようなデータは、ＰＴＤに格納可能であり、ＰＴＤに格納される形式にトランスレータ１０５０により変換される。データと関連付けられたＬＤＰセットを管理する責任を有する他のコントローラインスタンスの一部がデータを処理できるように、制御アプリケーション１０００のＰＴＤは、このデータを他のコントローラインスタンスの１つ以上の他の制御アプリケーションインスタンスに伝搬する。
【０１３５】
いくつかの実施形態において、制御アプリケーションは、データの回復のために出力テーブル１０４５に格納されたデータ（すなわち、制御アプリケーションが出力テーブルに保持するデータ）をＰＴＤに更に持って行く。更にそのようなデータは、トランスレータ１０５０により変換され、ＰＴＤに格納され、他のコントローラインスタンスの他の制御アプリケーションインスタンスに伝搬される。従って、これらの実施形態において、コントローラインスタンスのＰＴＤは、ネットワーク制御システムにより管理全てのＬＤＰセット用の全ての構成データを有する。すなわち、各ＰＴＤは、いくつかの実施形態において論理ネットワークの構成のグローバルビューを含む。
【０１３６】
インポータ１０２０は、入力データの多数の異なるソースとインタフェース接続し、入力テーブル１０１０を変更又は作成するために入力データを使用する。いくつかの実施形態のインポータ１０２０は、コントローラ間通信インタフェース（不図示）を介して入力変換アプリケーション１０７０から入力データを受信する。他のコントローラインスタンスからＰＴＤを介して受信されたデータが入力テーブル１０１０を変更又は作成するために入力データとして使用されうるように、インポータ１０２０はＰＴＤ１０６０ともインタフェース接続する。また、インポータ１０２０は、ＲＥ入力テーブル及びＲＥ出力テーブル１０４５のＲＥ入力テーブル＆ＣＡ出力テーブルを用いて変更を更に検出する。
【０１３７】
Ｇ．仮想化層
上述したように、いくつかの実施形態の仮想化アプリケーションは、ネットワーク制御システムの異なるユーザの異なるＬＤＰセットがネットワーク制御システムにより管理対象スイッチングエレメントにより実現されうる方法を指定する。いくつかの実施形態において、仮想化アプリケーションは、変換動作を実行することにより、管理対象スイッチングエレメントのインフラストラクチャ内のＬＤＰセットの実現例を指定する。これらの変換動作は、ＬＤＰセットデータレコードを最初に管理対象スイッチングエレメント内に格納されて、次にスイッチングエレメントのフォワーディング挙動を規定するためのフォワーディングプレーンデータ（例えば、フローエントリ）を生成するためにスイッチングエレメントにより使用される制御データレコード（例えば、ＵＰＣＰデータ）に変換する。変換動作は、管理対象スイッチングエレメント内及びその間で規定されるべきネットワーク構造体（例えば、トンネル、キュー、キューコレクション等）を指定する他のデータを更に生成する（例えば、テーブルにおいて）。ネットワーク構造体は、管理対象スイッチングエレメントの集合に動的に追加される動的に展開又は事前設定される管理ソフトウェアスイッチングエレメントである管理ソフトウェアスイッチングエレメントを更に含む。
【０１３８】
図１１は、本発明のいくつかの実施形態の仮想化アプリケーション１１００を示す。このアプリケーション１１００は、図６の仮想化モジュール６３０としていくつかの実施形態において使用される。仮想化アプリケーション１１００は、ＵＰＣＰデータを表すＬＤＰＳデータタプルを含む入力テーブルをマッピングするためにｎＬｏｇテーブルマッピングエンジンを使用する。このアプリケーションは、ＬＤＰＳデータタプルを生成する制御アプリケーション１１０５の下にある。制御アプリケーション１１０５は、図１０を参照して上述した制御アプリケーション１０００に類似する。仮想化アプリケーション１１００は、仮想化アプリケーション１００５に類似する。
【０１３９】
図１１に示されるように、仮想化アプリケーション１１００は、規則エンジン入力テーブル１１１０の集合と、関数テーブル及び定数テーブル１１１５の集合と、インポータ１１２０と、規則エンジン１１２５と、規則エンジン出力テーブル１１４５の集合と、トランスレータ１１５０と、エクスポータ１１５５と、ＰＴＤ１１６０と、コンパイラ１１３５とを含む。コンパイラ１１３５は、図１０を参照して上述したコンパイラ１０３５に類似する。
【０１４０】
仮想化アプリケーション１１００がＬＤＰＳデータタプルをＵＰＣＰデータタプルにマッピングするために、いくつかの実施形態における開発者は、ＬＤＰＳデータタプルをいくつかの管理対象スイッチングエレメントに対するＵＰＣＰデータタプルにマッピングする命令を含む宣言型命令１１４０を宣言型言語で指定する。いくつかのそのような実施形態において、これらのスイッチングエレメントは、ＵＰＣＰデータをＣＰＣＰデータに変換するためのＵＰＣＰを含む。
【０１４１】
他の管理対象スイッチングエレメントに対して、仮想化アプリケーション１１００は、ＵＰＣＰを有しない管理対象スイッチングエレメントの各々に特有のＣＰＣＰデータタプルにＬＤＰＳデータタプルをマッピングする。いくつかの実施形態において、仮想化アプリケーション１１００は、別のコントローラインスタンスの仮想化アプリケーションからＵＰＣＰデータを受信する場合、ユニバーサル物理コントロールプレーンデータタプルを物理データパスセットデータタプルに変換するために、ＵＰＣＰを有しないいくつかの管理対象スイッチングエレメントに対するＣＰＣＰデータタプルに出力テーブル１１４０におけるＣＰＣＰデータタプルを更にマッピングする。
【０１４２】
いくつかの実施形態において、ＵＰＣＰタプルを特定の管理対象スイッチングエレメントに特有のＣＰＣＰデータに変換するためのシャーシコントローラがある場合、仮想化アプリケーション１１００は、入力ＵＰＣＰデータを特定の管理対象スイッチングエレメント用のＣＰＣＰデータに変換しない。これらの実施形態において、仮想化アプリケーション１１００を有するコントローラインスタンスは、コントローラインスタンスがマスタである管理対象スイッチングエレメントの集合を識別し、ＵＰＣＰデータを管理対象スイッチングエレメントの集合に配信する。
【０１４３】
ＲＥ入力テーブル１１１０は、ＲＥ入力テーブル１０１０に類似する。ＲＥ入力テーブル１１１０に加え、仮想化アプリケーション１１００は、テーブルマッピング動作のための入力を収集するために規則エンジン１１２５が使用する他の種々雑多なテーブル１１１５を含む。これらのテーブル１１１５はテーブル１０１５に類似する。図１１に示されるように、規則エンジン１１２５は、イベント処理プログラム１１２２と、いくつかのクエリプラン１１２７と、イベント処理プログラム１０２２、クエリプラン１０２７及びテーブル処理１０３０が実行する時と同様に機能するテーブルプロセッサ１１３０とを含む。
【０１４４】
いくつかの実施形態において、ＲＥ出力テーブル１１４５は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル１１４５は、規則エンジン１１２５のテーブルマッピング動作の出力を格納するためにＲＥ出力テーブルと呼ばれる。いくつかの実施形態において、ＲＥ出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、ＲＥ入力テーブル及び／又は仮想化アプリケーション（ＶＡ）出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはＲＥ入力テーブルである。ＲＥ出力テーブル１１４５は、それが規則エンジンにより変更された後に規則エンジンに別のクエリプランを実行させるイベントを生成するＲＥ入力テーブル１１１０であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、インポータ１０２０を介した制御アプリケーション１１０５によるＲＥ入力テーブルの変更により発生するイベントである外部入力イベントと対比される。
【０１４５】
テーブルの変更により、エクスポータ１１５５が変更を管理対象スイッチングエレメント又は他のコントローラインスタンスにエクスポートする場合、テーブルはＶＡ制御テーブルである。図１２に示されるように、ＲＥ出力テーブル１１４５のテーブルは、いくつかの実施形態において、ＲＥ入力テーブル１１１０、ＶＡ出力テーブル１２０５又はＲＥ入力テーブル１１１０及びＶＡ出力テーブル１２０５の双方であってよい。
【０１４６】
エクスポータ１１５５は、ＲＥ出力テーブル１１４５のＶＡ出力テーブル１２０５に対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でＶＡ出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、ＶＡ出力テーブルのレコードに対する変更を通知するために、コールバックをＶＡ出力テーブルに登録する。そのような実施形態において、エクスポータ１１５５は、レコードの１つが変更したＶＡ出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
【０１４７】
検出された出力テーブルイベントに応答して、エクスポータ１１５５は、変更されたＶＡ出力テーブルにおける変更されたデータタプルの各々を取得し、この変更されたデータタプルを他のコントローラインスタンス（例えば、シャーシコントローラ）の１つ以上又は管理対象スイッチングエレメントの１つ以上に伝搬する。このようにする際、エクスポートは、ＬＤＰＳ（例えば、１つ以上の論理スイッチング構成）をレコードにより指定されたような１つ以上の管理対象スイッチングエレメントに展開することを完了する。
【０１４８】
ＶＡ出力テーブルがいくつかの実施形態において論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する時、いくつかの実施形態におけるＰＴＤ１１６０は、出力テーブル１１４５における論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性と同一のあるいはそれらから導出される論理ネットワークエレメント属性及び物理ネットワークエレメント属性の双方を格納する。しかし、他の実施形態において、ＰＴＤ１１６０は、出力テーブル１１４５における物理ネットワークエレメントデータ属性と同一のあるいはそれから導出される物理ネットワークエレメント属性のみを格納する。
【０１４９】
いくつかの実施形態において、仮想化アプリケーションは、仮想化アプリケーションが管理する責任を有しないＬＤＰセット用のデータを出力テーブル１１４５に保持しない。しかし、そのようなデータは、ＰＴＤに格納可能であり、ＰＴＤに格納される形式にトランスレータ１１５０により変換される。データと関連付けられたＬＤＰセットを管理する責任を有する他の仮想化アプリケーションインスタンスの一部がデータを処理できるように、仮想化アプリケーション１１００のＰＴＤは、このデータを他のコントローラインスタンスの１つ以上の他の仮想化アプリケーションインスタンスに伝搬する。
【０１５０】
いくつかの実施形態において、仮想化アプリケーションは、データの回復のために出力テーブル１１４５に格納されたデータ（すなわち、仮想化アプリケーションが出力テーブルに保持するデータ）をＰＴＤに更に持って行く。更にそのようなデータは、トランスレータ１１５０により変換され、ＰＴＤに格納され、他のコントローラインスタンスの他の仮想化アプリケーションインスタンスに伝搬される。従って、これらの実施形態において、コントローラインスタンスのＰＴＤは、ネットワーク制御システムにより管理全てのＬＤＰセット用の全ての構成データを有する。すなわち、各ＰＴＤは、いくつかの実施形態において論理ネットワークの構成のグローバルビューを含む。
【０１５１】
インポータ１１２０は、入力データの多数の異なるソースとインタフェース接続し、入力テーブル１１１０を変更又は作成するために入力データを使用する。いくつかの実施形態のインポータ１１２０は、コントローラ間通信インタフェースを介して入力変換アプリケーション１１７０から入力データを受信する。他のコントローラインスタンスからＰＴＤを介して受信されたデータが入力テーブル１１１０を変更又は作成するために入力データとして使用されうるように、インポータ１１２０はＰＴＤ１１６０ともインタフェース接続する。また、インポータ１１２０は、ＲＥ入力テーブル及びＲＥ出力テーブル１１４５のＲＥ入力テーブル＆ＶＡ出力テーブルを用いて変更を更に検出する。
【０１５２】
Ｈ．ネットワークコントローラ
図１３は、本発明のいくつかの実施形態の制御アプリケーション及び仮想化アプリケーションのテーブルマッピング動作を示す簡略図である。図１３の上半分に示されるように、制御アプリケーション１３０５は、いくつかの実施形態の仮想化アプリケーション１３１０が次にＵＰＣＰデータ又はＣＰＣＰデータにマッピングするＬＦＰデータにＬＣＰデータをマッピングする。
【０１５３】
図１３の下半分は、制御アプリケーション及び仮想化アプリケーションのテーブルマッピング動作を示す。下半分に示されるように、入力ＬＣＰデータからＬＦＰデータを生成するためにいくつかの実施形態において制御アプリケーションのｎＬｏｇエンジン１３２０により定数テーブル及び関数テーブル（不図示）のデータと共にこれらの全てのデータのコレクションが使用されるため、制御アプリケーションの入力テーブル１３１５は、ＬＣＰデータ、ＬＦＰ（ＬＦＰ）データ及びＵＰＣＰデータを格納する。
【０１５４】
図１３は、インポータ１３５０が、ユーザから（例えば、入力変換アプリケーションを通して）ＬＣＰデータを受信し、ＬＣＰデータで制御アプリケーションの入力テーブル１３１５を更新することを示す。図１３は、インポータ１３５０が、いくつかの実施形態においてＰＴＤ１３４０の変化（例えば、他のコントローラインスタンスに端を発するＬＣＰデータの変化）を検出又は受信し、そのような変化に応答して入力テーブル１３１５を更新してもよいことを更に示す。
【０１５５】
図１３の下半分は、仮想化アプリケーション１３１０のテーブルマッピング動作を更に示す。示されるように、ＵＰＣＰデータ及び／又はＣＰＣＰデータを生成するためにいくつかの実施形態における仮想化アプリケーションのｎＬｏｇエンジン１３２０により定数テーブル及び関数テーブル（不図示）のデータと共にＬＦＰデータが使用されるため、仮想化アプリケーションの入力テーブル１３５５はＬＦＰデータを格納する。いくつかの実施形態において、エクスポータ１３７０は、生成されたＵＰＣＰデータを１つ以上の他のコントローラインスタンス（例えば、シャーシコントローラ）に送出し、ＵＰＣＰデータを管理対象スイッチングエレメントに特有のＣＰＣＰデータに変換する管理対象スイッチングエレメント又は１つ以上の管理対象スイッチングエレメントにこのデータをプッシュする前にＣＰＣＰデータを生成する。他の実施形態において、エクスポータ１３７０は、生成されたＣＰＣＰデータを１つ以上の管理対象スイッチングエレメントに送出し、これらの管理対象スイッチングエレメントのフォワーディング挙動を規定する。
【０１５６】
いくつかの実施形態において、ＵＰＣＰデータを特定の管理対象スイッチングエレメントに特有のＣＰＣＰデータに変換するためのシャーシコントローラがある場合、仮想化アプリケーション１３１０は、入力ＵＰＣＰデータを特定の管理対象スイッチングエレメント用のＣＰＣＰデータに変換しない。これらの実施形態において、仮想化アプリケーション１３１０を有するコントローラインスタンスは、コントローラインスタンスがマスタである管理対象スイッチングエレメントの集合を識別し、ＵＰＣＰデータを管理対象スイッチングエレメントの集合に配信する。
【０１５７】
図１３は、インポータ１３７５が、制御アプリケーション１３０５からＬＦＰデータを受信し、ＬＦＰデータで仮想化アプリケーションの入力テーブル１３５５を更新することを示す。図１３は、インポータ１３７５が、いくつかの実施形態においてＰＴＤ１３４０の変化（例えば、他のコントローラインスタンスに端を発するＬＣＰデータの変化）を検出又は受信し、そのような変化に応答して入力テーブル１３５５を更新してもよいことを更に示す。図１３は、インポータ１３７５が別のコントローラインスタンスからＵＰＣＰデータを受信してもよいことを更に示す。
【０１５８】
上述したように、インポータが制御アプリケーション又は仮想化アプリケーションの入力テーブルにプッシュする論理データ又は物理データの一部は、他のコントローラインスタンスにより生成され、ＰＴＤに渡されるデータに関連する。例えばいくつかの実施形態において、多数のＬＤＰセットに関連する論理構造体（例えば、論理ポート、論理キュー等）に関する論理データは変化する恐れがあり、トランスレータ（例えば、コントローラインスタンスのトランスレータ１３８０）は、この変化を入力テーブルに書き込んでもよい。マルチコントローラインスタンス環境において別のコントローラインスタンスにより生成されるそのような論理データの別の例は、ＬＤＰＳに関与しない第１コントローラインスタンス上のＬＤＰＳ用のＬＣＰデータをユーザが提供する際に生じる。この変化は、第１コントローラインスタンスのトランスレータにより第１コントローラインスタンスのＰＴＤに追加される。次にこの変化は、ＰＴＤにより実行される複製処理により他のコントローラインスタンスのＰＴＤにわたり伝搬される。ＬＤＰＳのマスタ又はＬＤＰＳに関与する論理コントローラである第２コントローラインスタンスのインポータは、最終的にこのように変化して、その変化をアプリケーションの入力テーブル（例えば、制御アプリケーションの入力テーブル）に書き込む。従って、場合によってはインポータが入力テーブルに書き込む論理データは、別のコントローラインスタンスのＰＴＤから発生してもよい。
【０１５９】
上述したように、制御アプリケーション１３０５及び仮想化アプリケーション１３１０は、いくつかの実施形態において同一のマシン又は異なるマシン上で動作する２つの別個のアプリケーションである。しかし、他の実施形態は、これらの２つのアプリケーションを１つの統合アプリケーションの２つのモジュール、すなわちＬＦＰにおいて論理データを生成する制御アプリケーションモジュール１３０５及びＵＰＣＰ又はＣＰＣＰにおいて物理データを生成する仮想化アプリケーションとしてこれらの２つのアプリケーションを実現する。
【０１６０】
更に他の実施形態は、これらの２つのアプリケーションの制御動作及び仮想化動作を２つの別個のモジュールに分離することなく、１つの統合アプリケーション内でこれらの動作を統合する。図１４は、そのような統合アプリケーション１４００の一例を示す。このアプリケーション１４００は、上述の実施形態のように、テーブルの入力集合１４１５からテーブルの出力集合１４２０にデータをマッピングするためにｎＬｏｇテーブルマッピングエンジン１４１０を使用する図１０、図１１及び図１３は、テーブルの入力集合において１つ以上のテーブルを含んでもよい。この統合アプリケーションにおけるテーブルの入力集合は、ＬＦＰデータにマッピングされる必要があるＬＣＰデータ、あるいはＣＰＣＰデータ又はＵＰＣＰデータにマッピングされる必要があるＬＦＰデータを含んでもよい。テーブルの入力集合は、ＣＰＣＰデータにマッピングされる必要があるＵＰＣＰデータを更に含んでもよい。ＵＰＣＰデータは、ＣＰＣＰデータにマッピングされることなく管理対象スイッチングエレメントの集合に対するシャーシコントローラの集合に配信される。マッピングは、統合アプリケーション１４００を実行するコントローラインスタンスが論理コントローラ又は物理コントローラであるか、及び物理コントローラの管理対象スイッチングエレメントがＵＰＣＰデータを管理対象スイッチングエレメント用のＣＰＣＰデータにマッピングするためのシャーシコントローラを有するマスタであるかに依存する。
【０１６１】
この統合制御／仮想化アプリケーション１４００において、インポータ１４３０は、ユーザ又は他のコントローラインスタンスから入力データを取得する。インポータ１４３０は、ＰＴＤに対して複製されるＰＴＤ１４４０の変化を更に検出又は受信する。エクスポータ１４２５は、出力テーブルレコードを他のコントローラインスタンス（例えば、シャーシコントローラ）にエクスポートする。
【０１６２】
出力テーブルレコードを別のコントローラインスタンスに送出する時、エクスポータは、レコードに含まれたデータが通信チャネル（例えば、ＲＰＣチャネル）を介して他のコントローラインスタンスに送出されるようにコントローラ間通信インタフェース（不図示）を使用する。出力テーブルレコードを管理対象スイッチングエレメントに送出する時、エクスポータは、レコードに含まれたデータが２つのチャネルを介して管理対象スイッチングエレメントに送出されるように管理対象スイッチングエレメント通信インタフェース（不図示）を使用する。一方のチャネルは、管理対象スイッチングエレメントのフォワーディングプレーンを制御するためにスイッチ制御プロトコル（例えば、OpenFlow）を使用して確立され、他方のチャネルは、構成データを送出するために構成プロトコルを使用して確立される。
【０１６３】
出力テーブルレコードをシャーシコントローラに送出する時、いくつかの実施形態におけるエクスポータ１４２５は、レコードに含まれたデータを送出するために通信の単一のチャネルを使用する。これらの実施形態において、シャーシコントローラは、この単一のチャネルを介してデータを受け入れるが、２つのチャネルを介して管理対象スイッチングエレメントと通信する。図１８を参照して、シャーシコントローラを以下において更に詳細に説明する。
【０１６４】
図１５は、そのような統合アプリケーション１５００の別の例を示す。統合アプリケーション１５００は、ｎＬｏｇテーブルマッピングエンジン１４１０の入力データ及び出力データの一部を格納するためにネットワーク情報ベース（ＮＩＢ）（network information base）データ構造１５１０を使用する。上述したように、ＮＩＢデータ構造は、オブジェクト指向データオブジェクトの形式のデータを格納する。統合アプリケーション１５００において、出力テーブル１４２０は１次格納構造である。ＰＴＤ１４４０及びＮＩＢ１５１０は２次格納構造である。
【０１６５】
統合アプリケーション１５００は、テーブルの入力集合１４１５からテーブルの出力集合１４２０にデータをマッピングするためにｎＬｏｇテーブルマッピングエンジン１４１０を使用する。いくつかの実施形態において、テーブルの出力集合１４２０におけるデータの一部は、エクスポータ１４２５により１つ以上の他のコントローラインスタンス、あるいは１つ又は管理対象スイッチングエレメントにエクスポートされる。そのようなエクスポートされたデータは、管理対象スイッチングエレメントのフロー挙動を規定するＵＰＣＰデータ又はＣＰＣＰデータを含む。これらのデータは、データの回復のためにＰＴＤ１４４０におけるトランスレータ１４３５によりＰＴＤにおいてバックアップされてもよい。
【０１６６】
テーブルの出力集合１４２０におけるデータの一部は、ＮＩＢパブリッシャ（NIB publisher）１５０５によりＮＩＢ１５１０に発行される。これらのデータは、ユーザが統合アプリケーション１５００を使用して管理する論理スイッチングエレメントの構成情報を含む。ＮＩＢ１５１０に格納されたデータは、調整マネージャ１５２０により他のコントローラインスタンスの他のＮＩＢに対して複製される。
【０１６７】
ＮＩＢモニタ１５１５は、ＮＩＢ１５１０から変化の通知を受信し、いくつかの通知（例えば、統合アプリケーションがマスタであるＬＤＰセットに関連する通知）に対して、インポータ１４３０を介して変化を入力テーブル１４１５にプッシュする。
【０１６８】
クエリマネージャ１５２５は、入力変換アプリケーション（不図示）とインタフェース接続して構成データに関するクエリ（例えば、情報の問い合わせ）を受信するためにコントローラ間通信インタフェース（不図示）を使用する。図１５に示されるように、いくつかの実施形態のマネージャ１５２５は、ユーザが管理している論理ネットワークエレメントに関する状態情報（例えば、論理ポートの統計）を提供するようにＮＩＢにクエリするためにＮＩＢ１５１０ともインタフェース接続する。しかし、他の実施形態において、クエリマネージャ１５２５は、状態情報を取得するように出力テーブル１４２０にクエリする。
【０１６９】
いくつかの実施形態において、アプリケーション１５００は、ＰＴＤ及びＮＩＢ以外の２次格納構造（不図示）を使用する。これらの構造は、永続的な非トランザクションデータベース（ＰＮＴＤ）及びハッシュテーブルを含む。いくつかの実施形態において、これらの２種類の２次格納構造は、異なる種類のデータを格納し、データを異なる方法で格納し、及び／又は、異なる種類のクエリを処理する異なるクエリインタフェースを提供する。
【０１７０】
ＰＮＴＤは、ディスク又は他の不揮発性メモリに格納される永続的なデータベースである。いくつかの実施形態は、１つ以上のスイッチングエレメント属性又はスイッチングエレメント動作に関するデータ（例えば、統計、計算等）を格納するためにこのデータベースを使用する。例えばこのデータベースは、特定のスイッチングエレメントの特定のポートを介してルーティングされたパケットの数を格納するためにいくつかの実施形態において使用される。ＰＮＴＤに格納されたデータの種類の他の例としては、エラーメッセージ、ログファイル、警告メッセージ及び課金データがある。
【０１７１】
いくつかの実施形態におけるＰＮＴＤは、データベースクエリを処理できるデータベースクエリマネージャ（不図示）を有するが、それがトランザクションデータベースではないため、このクエリマネージャは、複雑な条件付きトランザクションクエリを処理できない。いくつかの実施形態において、ＰＮＴＤへのアクセスは、ＰＴＤへのアクセスよりも高速であるが、ハッシュテーブルへのアクセスよりも低速である。
【０１７２】
ＰＮＴＤとは異なり、ハッシュテーブルは、ディスク又は他の不揮発性メモリに格納されるデータベースではない。代わりに、ハッシュテーブルは、揮発性システムメモリ（例えば、ＲＡＭ）に格納される格納構造である。ハッシュテーブルは、テーブルに格納されるレコードを迅速に識別するためにハッシュインデックスを使用するハッシュ技法を使用する。システムメモリにおけるハッシュテーブルの配置と組み合わされたこの構造により、このテーブルに非常に迅速にアクセスできる。この迅速なアクセスを容易にするために、いくつかの実施形態において簡略化されたクエリインタフェースが使用される。例えばいくつかの実施形態において、ハッシュテーブルは、２つのクエリ、すなわち値をテーブルに書き込むためのプット（Ｐｕｔ）クエリと、テーブルから値を検索するためのゲット（Ｇｅｔ）クエリしか有しない。いくつかの実施形態は、迅速に変化するデータを格納するためにハッシュテーブルを使用する。そのような迅速に変化するデータの例としては、ネットワークエンティティの状況、統計、状態、アップタイム、リンク構成及びパケット処理情報がある。また、いくつかの実施形態において、統合アプリケーションは、多数のノードに書き込まれるフローエントリ等の繰り返しクエリされる情報を格納するために、ハッシュテーブルをキャッシュとして使用する。いくつかの実施形態は、ＮＩＢにおけるレコードに迅速にアクセスするためにＮＩＢにおいてハッシュ構造を採用する。従って、これらの実施形態のうちのいくつかにおいて、ハッシュテーブルはＮＩＢデータ構造の一部である。
【０１７３】
ＰＴＤ及びＰＮＴＤは、ネットワークデータをハードディスクに保存することでコントローラの回復を向上させる。コントローラシステムが障害を起こす場合、ネットワーク構成データはＰＴＤにおけるディスクに保存され、ログファイル情報はＰＮＴＤにおけるディスクに保存される。
【０１７４】
Ｉ．ネットワーク制御システム階層
図１６は、ネットワーク制御システム１６００のアーキテクチャの一例を概念的に示す。特に図１６は、ネットワーク制御システムの異なるエレメントにより入力からＣＰＣＰデータを生成することを示す。示されるように、いくつかの実施形態のネットワーク制御システム１６００は、入力変換コントローラ１６０５と、論理コントローラ１６１０と、物理コントローラ１６１５及び１６２０と、３つの管理対象スイッチングエレメント１６２５〜１６３５とを含む。図１６は、管理対象スイッチングエレメント（図１６において「Ｍ．Ｓ．Ｅ．」として書かれた）に接続されてそれらの間でデータをやり取りする５つのマシン１６４０〜１６６０を更に示す。図１６に示された階層においての各層におけるコントローラの数、管理対象スイッチングエレメント及びマシンの数、並びにコントローラと、管理対象スイッチングエレメントと、マシンとの関係等のアーキテクチャの詳細は、例示のためにすぎない。コントローラと、スイッチングエレメントと、マシンとの多くの他の異なる組合せがネットワーク制御システム１６００に対して可能であることは、当業者により理解されるであろう。
【０１７５】
いくつかの実施形態において、ネットワーク制御システムにおける各コントローラは、図６を参照して上述した異なるモジュール及びインタフェースのフルスタックを有する。しかし、各コントローラは、コントローラに対して与えられた機能性を実行するために全てのモジュール及びインタフェースを使用する必要はない。あるいは、いくつかの実施形態において、システムにおけるコントローラは、コントローラに対して与えられた機能性を実行するために必要なモジュール及びインタフェースのみを有する。例えば、ＬＤＰＳのマスタである論理コントローラ１６１０は、入力ＬＣＰデータからＵＰＣＰデータを生成するために、入力モジュール（例えば、入力変換アプリケーション）を備えないが、制御モジュール及び仮想化モジュール（例えば、制御アプリケーション又は仮想化アプリケーション、あるいは統合アプリケーション）を有する。
【０１７６】
また、異なるコントローラの異なる組合せは、同一のマシンにおいて動作していてもよい。例えば、入力変換コントローラ１６０５及び論理コントローラ１６１０は、同一の演算装置において動作してもよい。また、１つのコントローラは、異なるＬＤＰセットに対して異なる方法で機能してもよい。例えば単一のコントローラは、第１ＬＤＰＳのマスタ及び第２ＬＤＰＳを実現する管理対象スイッチングエレメントのマスタであってもよい。
【０１７７】
入力変換コントローラ１６０５は、特定のＬＤＰＳを指定するユーザから受信した入力からＬＣＰデータを生成する入力変換アプリケーション（不図示）を含む。入力変換コントローラ１６０５は、システム１６０５用の構成データからＬＤＰＳのマスタを識別する。この例において、ＬＤＰＳのマスタは論理コントローラ１６１０である。いくつかの実施形態において、２つ以上のコントローラは同一のＬＤＰＳのマスタであってよい。また、１つの論理コントローラは、２つ以上のＬＤＰセットのマスタであってよい。
【０１７８】
論理コントローラ１６１０は、特定のＬＤＰＳに関与する。従って、論理コントローラ１６１０は、入力変換コントローラから受信したＬＣＰデータからＵＰＣＰデータを生成する。具体的には、論理コントローラ１６１０の制御モジュール（不図示）は、受信したＬＣＰデータからＬＦＰデータを生成し、論理コントローラ１６１０の仮想化モジュール（不図示）は、ＬＦＰデータからＵＰＣＰデータを生成する。
【０１７９】
論理コントローラ１６１０は、ＬＤＰＳを実現する管理対象スイッチングエレメントのマスタである物理コントローラを識別する。この例において、管理対象スイッチングエレメント１６２５〜１６３５がこの例においてＬＤＰＳを実現するように構成されるため、論理コントローラ１６１０は物理コントローラ１６１５及び１６２０を識別する。論理コントローラ１６１０は、生成されたＵＰＣＰデータを物理コントローラ１６１５及び１６２０に送出する。
【０１８０】
物理コントローラ１６１５及び１６２０の各々は、１つ以上の管理対象スイッチングエレメントのマスタであってよい。この例において、物理コントローラ１６１５は、２つの管理対象スイッチングエレメント１６２５及び１６３０のマスタであり、物理コントローラ１６２０は、管理対象スイッチングエレメント１６３５のマスタである。管理対象スイッチングエレメントの集合のマスタとして、いくつかの実施形態の物理コントローラは、受信したＵＰＣＰデータから管理対象スイッチングエレメントの各々に対して特有のＣＰＣＰデータを生成する。従って、この例において、物理コントローラ１６１５は、管理対象スイッチングエレメント１６２５及び１６３０の各々に対してカスタマイズされたＰＣＰデータを生成する。物理コントローラ１３２０は、管理対象スイッチングエレメント１６３５に対してカスタマイズされたＰＣＰデータを生成する。物理コントローラは、ＣＰＣＰデータをコントローラがマスタである管理対象スイッチングエレメントに送出する。いくつかの実施形態において、多数の物理コントローラは、同一の管理対象スイッチングエレメントのマスタであってよい。
【０１８１】
ＣＰＣＰデータを送出することに加え、いくつかの実施形態の物理コントローラは、管理対象スイッチングエレメントからデータを受信する。例えば物理コントローラは、管理対象スイッチングエレメントの構成情報（例えば、管理対象スイッチングエレメントのＶＩＦの識別子）を受信する。物理コントローラは、構成情報を維持し、論理コントローラがマスタであるＬＤＰセットを実現する管理対象スイッチングエレメントの構成情報を論理コントローラが有するように情報を論理コントローラまで更に送出する。
【０１８２】
管理対象スイッチングエレメント１６２５〜１６３５の各々は、管理対象スイッチングエレメントが受信したＣＰＣＰデータから物理フォワーディングプレーンデータを生成する。上述したように、物理フォワーディングプレーンデータは、管理対象スイッチングエレメントのフォワーディング挙動を規定する。換言すると、管理対象スイッチングエレメントは、ＣＰＣＰデータを使用してフォワーディングテーブルをポピュレートする。管理対象スイッチングエレメント１６２５〜１６３５は、フォワーディングテーブルに従ってマシン１６４０〜１６６０の間でデータを転送する。
【０１８３】
図１７は、ネットワーク制御システム１７００のアーキテクチャの一例を概念的に示す。図１６のように、図１７は、ネットワーク制御システムの異なるエレメントにより入力からＣＰＣＰデータを生成することを示す。図１６のネットワーク制御システム１６００とは対照的に、ネットワーク制御システム１７００はシャーシコントローラ１７２５〜１７３５を有する。示されるように、いくつかの実施形態のネットワーク制御システム１７００は、入力変換コントローラ１７０５と、論理コントローラ１６１０と、物理コントローラ１７１５及び１７２０と、シャーシコントローラ１７２５〜１７３５と、３つの管理対象スイッチングエレメント１７４０〜１７５０とを含む。図１７は、管理対象スイッチングエレメント１７４０〜１７５０に接続されてそれらの間でデータをやり取りする５つのマシン１７５５〜１７７５を更に示す。図１７に示された階層においての各層におけるコントローラの数、管理対象スイッチングエレメント及びマシンの数、並びにコントローラと、管理対象スイッチングエレメントと、マシンとの関係等のアーキテクチャの詳細は、例示のためにすぎない。コントローラと、スイッチングエレメントと、マシンとの多くの他の異なる組合せがネットワーク制御システム１７００に対して可能であることは、当業者により理解されるであろう。
【０１８４】
入力変換コントローラ１７０５は、特定のＬＤＰＳを指定するユーザから受信した入力からＬＣＰデータを生成する入力変換アプリケーションを含むという点で入力変換コントローラ１６０５に類似する。入力変換コントローラ１７０５は、システム１７０５用の構成データからＬＤＰＳのマスタを識別する。この例において、ＬＤＰＳのマスタは論理コントローラ１７１０である。
【０１８５】
論理コントローラ１７１０は、入力変換コントローラ１７０５から受信したＬＣＰデータからＵＰＣＰデータを生成するという点で論理コントローラ１６１０に類似する。論理コントローラ１７１０は、ＬＤＰＳを実現する管理対象スイッチングエレメントのマスタである物理コントローラを識別する。この例において、管理対象スイッチングエレメント１７４０〜１７５０がこの例においてＬＤＰＳを実現するように構成されるため、論理コントローラ１７１０は物理コントローラ１７１５及び１７２０を識別する。論理コントローラ１７１０は、生成されたＵＰＣＰデータを物理コントローラ１７１５及び１７２０に送出する。
【０１８６】
物理コントローラ１６１５及び１６２０のように、物理コントローラ１７１５及び１７２０の各々は、１つ以上の管理対象スイッチングエレメントのマスタであってよい。この例において、物理コントローラ１７１５は、２つの管理対象スイッチングエレメント１７４０及び１７４５のマスタであり、物理コントローラ１７３０は、管理対象スイッチングエレメント１７５０のマスタである。しかし、物理コントローラ１７１５及び１７２０は、管理対象スイッチングエレメント１７４０〜１７５０用のＣＰＣＰデータを生成しない。管理対象スイッチングエレメントの集合のマスタとして、物理コントローラは、物理コントローラがマスタである管理対象スイッチングエレメントの各々に関与するシャーシコントローラにＵＰＣＰデータを送出する。すなわち、いくつかの実施形態の物理コントローラは、物理コントローラがマスタである管理対象スイッチングエレメントにインタフェース接続するシャーシコントローラを識別する。いくつかの実施形態において、物理コントローラは、シャーシコントローラが物理コントローラのチャネルに加入しているかを判定することでこれらのシャーシコントローラを識別する。
【０１８７】
いくつかの実施形態のシャーシコントローラは、管理対象スイッチングエレメントと１対１の関係を有する。シャーシコントローラは、管理対象スイッチングエレメントのマスタである物理コントローラからＵＰＣＰデータを受信し、管理対象スイッチングエレメントに対して特有のＣＰＣＰデータを生成する。図１８を参照して、シャーシコントローラのアーキテクチャの一例を以下において更に詳細に説明する。いくつかの実施形態におけるシャーシコントローラが、シャーシコントローラが管理する管理対象スイッチングエレメントが動作する同一のマシンにおいて動作するのに対し、他の実施形態において、シャーシコントローラ及び管理対象スイッチングエレメントは異なるマシンにおいて動作する。この例において、シャーシコントローラ１７２５及び管理対象スイッチングエレメント１７４０は、同一の演算装置において動作する。
【０１８８】
管理対象スイッチングエレメント１６２５〜１６３５のように、管理対象スイッチングエレメント１７４０〜１７５０の各々は、管理対象スイッチングエレメントが受信したＣＰＣＰデータから物理フォワーディングプレーンデータを生成する。管理対象スイッチングエレメント１７４０〜１７５０は、ＣＰＣＰデータを使用してそれぞれのフォワーディングテーブルをポピュレートする。管理対象スイッチングエレメント１７４０〜１７５０は、フローテーブルに従ってマシン１７５５〜１７７５の間でデータを転送する。
【０１８９】
上述したように、管理対象スイッチングエレメントは、場合によっては２つ以上のＬＤＰＳを実現してもよい。そのような場合、そのような管理対象スイッチングエレメントのマスタである物理コントローラは、各ＬＤＰセット用のＵＰＣＰデータを受信する。従って、ネットワーク制御システム１７００における物理コントローラは、ＬＤＰセットを実現する特定の管理対象スイッチングエレメントに対する異なるＬＤＰセット用のＵＰＣＰデータをシャーシコントローラに中継するための集約点として機能していてもよい。
【０１９０】
図１７に示されたシャーシコントローラは管理対象スイッチングエレメントより上のレベルであるが、いくつかの実施形態のシャーシコントローラが管理対象スイッチングエレメント内にあるか、あるいはそれに隣接するため、一般にシャーシコントローラは、管理対象スイッチングエレメントが動作するのと同一のレベルで動作する。
【０１９１】
いくつかの実施形態において、ネットワーク制御システムは、ネットワーク制御システム１６００及び１７００のハイブリッドを有してよい。すなわち、このハイブリッドネットワーク制御システムにおいて、物理コントローラの一部は、管理対象スイッチングエレメントのいくつか用のＣＰＣＰデータを生成し、物理コントローラの一部は、管理対象スイッチングエレメントのいくつか用のＣＰＣＰデータを生成しない。後者の管理対象スイッチングエレメントの場合、ハイブリッドシステムは、ＣＰＣＰデータを生成するシャーシコントローラを有する。
【０１９２】
上述したように、いくつかの実施形態のシャーシコントローラは、単一の管理対象スイッチングエレメントを管理するためのコントローラである。いくつかの実施形態のシャーシコントローラは、図６を参照して上述した異なるモジュール及びインタフェースのフルスタックを有しない。シャーシコントローラが有するモジュールの１つは、それが１つ以上の物理コントローラから受信するＵＰＣＰデータからＣＰＣＰデータを生成するシャーシ制御アプリケーションである。図１８は、シャーシ制御アプリケーション１８００に対するアーキテクチャの一例を示す。このアプリケーション１８００は、ＵＰＣＰデータを表す入力データタプルを含む入力テーブルをＬＦＰデータを表すデータタプルにマッピングするためにｎＬｏｇテーブルマッピングエンジンを使用する。このアプリケーション１８００は、管理対象スイッチングエレメント１８８５とデータをやり取りすることにより、この例において管理対象スイッチングエレメント１８８５を管理する。いくつかの実施形態において、アプリケーション１８００（すなわち、シャーシコントローラ）は、管理対象スイッチングエレメント１８８５が動作している同一のマシンにおいて動作する。
【０１９３】
図１８に示されるように、シャーシ制御アプリケーション１８００は、規則エンジン入力テーブル１８１０の集合と、関数テーブル及び定数テーブル１８１５の集合と、インポータ１８２０と、規則エンジン１８２５と、規則エンジン出力テーブル１８４５の集合と、エクスポータ１８５５と、管理対象スイッチングエレメント通信インタフェース１８６５と、コンパイラ１８３５とを含む。図１８は、物理コントローラ１８０５及び管理対象スイッチングエレメント１８８５を更に示す。
【０１９４】
コンパイラ１８３５は、図１０のコンパイラ１０３５に類似する。いくつかの実施形態において、規則エンジン（ＲＥ）入力テーブル１８１０は、管理対象スイッチングエレメント１８８５のマスタである物理コントローラ１８０５がシャーシ制御アプリケーション１８００に送出したＵＰＣＰデータ及び／又はスイッチング構成（例えば、アクセス制御リスト構成、専用仮想ネットワーク構成、ポートセキュリティ構成等）を有するテーブルを含む。入力テーブル１８１０は、管理対象スイッチングエレメント１８８５からの物理データを含むテーブルを更に含む。いくつかの実施形態において、そのような物理データは、管理対象スイッチングエレメント１８８５に関するデータ（例えば、ＣＰＣＰデータ、物理フォワーディングデータ）と、管理対象スイッチングエレメント１８８５の構成に関する他のデータとを含む。
【０１９５】
ＲＥ入力テーブル１８１０は、ＲＥ入力テーブル１０１０に類似する。入力テーブル１８１０は、物理コントローラ１８０５により提供されたＵＰＣＰデータにより部分的にポピュレートされる。いくつかの実施形態の物理コントローラ１８０５は、１つ以上の論理コントローラ（不図示）からＵＰＣＰデータを受信する。
【０１９６】
入力テーブル１８１０に加え、シャーシ制御アプリケーション１８００は、テーブルマッピング動作のための入力を収集するために規則エンジン１８２５が使用する他の種々雑多なテーブル１８１５を含む。これらのテーブル１８１５はテーブル１０１５に類似する。図１８に示されるように、規則エンジン１８２５は、イベント処理プログラム１８２２と、いくつかのクエリプラン１８２７と、イベント処理プログラム１０２２、クエリプラン１０２７及びテーブル処理１０３０が実行する時と同様に機能するテーブルプロセッサ１８３０とを含む。
【０１９７】
いくつかの実施形態において、ＲＥ出力テーブル１８４５は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル１８４５は、規則エンジン１８２５のテーブルマッピング動作の出力を格納するためにＲＥ出力テーブルと呼ばれる。いくつかの実施形態において、ＲＥ出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、ＲＥ入力テーブル及び／又はシャーシ制御アプリケーション（ＣＣＡ）出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはＲＥ入力テーブルである。ＲＥ出力テーブル１８４５は、それが規則エンジンにより変更された後に規則エンジンに別のクエリプランを実行させるイベントを生成するＲＥ入力テーブル１８１０であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、インポータ１８２０を介した制御アプリケーション１８０５によるＲＥ入力テーブルの変更により発生するイベントである外部入力イベントと対比される。テーブルの変更により、エクスポータ１８５５が変更を管理対象スイッチングエレメント又は他のコントローラインスタンスにエクスポートする場合、テーブルはＣＡ出力テーブルである。
【０１９８】
エクスポータ１８５５は、ＲＥ出力テーブル１８４５のＣＣＡ出力テーブルに対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でＣＣＡ出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、ＣＣＡ出力テーブルのレコードに対する変更を通知するために、コールバックをＣＣＡ出力テーブルに登録する。そのような実施形態において、エクスポータ１８５５は、レコードの１つが変更したＣＣＡ出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
【０１９９】
検出された出力テーブルイベントに応答して、エクスポータ１８５５は、変更された出力テーブルにおける変更されたデータタプルの各々を取得し、この変更されたデータタプルを他のコントローラインスタンス（例えば、物理コントローラ）の１つ以上又は管理対象スイッチングエレメント１８８５に伝搬する。エクスポータ１８５５は、変更されたデータタプルを他のコントローラインスタンスに送出するためにコントローラ間通信インタフェース（不図示）を使用する。コントローラ間通信インタフェースは、他のコントローラインスタンスとの通信チャネル（例えば、ＲＰＣチャネル）を確立する。
【０２００】
いくつかの実施形態のエクスポータ１８５５は、変更されたデータタプルを管理対象スイッチングエレメント１８８５に送出するために管理対象スイッチングエレメント通信インタフェース１８６５を使用する。いくつかの実施形態の管理対象スイッチングエレメント通信インタフェースは、通信の２つのチャネルを確立する。管理対象スイッチングエレメント通信インタフェースは、スイッチング制御プロトコルを使用して２つのチャネルの第１チャネルを確立する。スイッチング制御プロトコルの一例は、OpenFlowプロトコルである。OpenFlowプロトコルは、いくつかの実施形態において、スイッチングエレメントのフォワーディングプレーン（例えば、フォワーディングテーブル）を制御するための通信プロトコルである。例えばOpenFlowプロトコルは、フローエントリを管理対象スイッチングエレメント１８８５に追加するためのコマンドと、フローエントリを管理対象スイッチングエレメント１８８５から除去するためのコマンドと、フローエントリを管理対象スイッチングエレメントにおいて変更するためのコマンドとを提供する。
【０２０１】
管理対象スイッチングエレメント通信インタフェースは、構成情報を送出するために構成プロトコルを使用して２つのチャネルの第２チャネルを確立する。いくつかの実施形態において、構成情報は、管理対象スイッチングエレメント１８８５を構成するための情報、例えば入力ポート、出力ポート、ポートに対するＱｏＳ構成等に対する情報を含む。
【０２０２】
管理対象スイッチングエレメント通信インタフェース１８６５は、２つのチャネルを介して管理対象スイッチングエレメント１８８５から管理対象スイッチングエレメント１８８５における更新を受信する。シャーシ制御アプリケーション１８００により開始されない管理対象スイッチングエレメント１８８５のフローエントリ又は構成による変更がある場合、いくつかの実施形態の管理対象スイッチングエレメント１８８５は、更新をシャーシ制御アプリケーションに送出する。そのような変更の例としては、管理対象スイッチングエレメント１８８５のポートに接続されたマシンの障害、管理対象スイッチングエレメント１８８５へのＶＭ移行等がある。管理対象スイッチングエレメント通信インタフェース１８６５は、１つ以上の入力テーブル１８１０を変更するインポータ１８２０に更新を送出する。これらの更新から規則エンジン１８２５により生成された出力がある場合、エクスポータ１８５５は、この出力を物理コントローラ１８０５に送出する。
【０２０３】
Ｊ．フローエントリの生成
図１９Ａ−Ｂは、ＵＰＣＰデータに基づく２つの管理対象スイッチングエレメント間のトンネルの作成の一例を示す。具体的には、図１９Ａ−Ｂは、２つの管理対象スイッチングエレメント１９２５と１９３０との間にトンネルを確立するためにネットワーク管理システム１９００の異なる構成要素により実行される一連の動作を４つの異なる段階１９０１〜１９０４において示す。図１９Ａ−Ｂは、論理スイッチングエレメント１９０５と、ＶＭ１及びＶＭ２とを更に示す。４つの段階１９０１〜１９０４の各々は、ネットワーク制御システム１９００、並びに管理対象スイッチングエレメント１９２５及び１９３０を下部に示し、論理スイッチングエレメント１９０５及び論理スイッチングエレメント１９０５に接続されたＶＭを上部に示す。ＶＭは、各段階の上部及び下部の双方に示される。
【０２０４】
第１段階１９０１に示されるように、論理スイッチングエレメント１９０５は、ＶＭ１とＶＭ２との間でデータを転送する。具体的には、データは、論理スイッチングエレメント１９０５の論理ポート１を介してＶＭ１に達するかあるいはＶＭ１から生じ、論理スイッチングエレメント１９０５の論理ポート２を介してＶＭ２に達するかあるいはＶＭ２から生じる。論理スイッチングエレメント１９０５は、この例において管理対象スイッチングエレメント１９２５により実現される。すなわち、論理ポート１は、管理対象スイッチングエレメント１９２５のポート３にマッピングされ、論理ポート２は、管理対象スイッチングエレメント１９２５のポート４にマッピングされる。
【０２０５】
この例におけるネットワーク制御システム１９００は、コントローラクラスタ１９１０と、２つのシャーシコントローラ１９１５及び１９２０とを有する。コントローラクラスタ１９１０は、コントローラクラスタ１９１０が受信する入力に基づいてＵＰＣＰデータを集合的に生成する入力変換コントローラ（不図示）と、論理コントローラ（不図示）と、物理コントローラ（不図示）とを有する。シャーシコントローラは、ＵＰＣＰデータを受信し、ユニバーサルデータを各シャーシコントローラが管理している管理対象スイッチングエレメントに特有のＰＣＰデータにカスタマイズする。管理対象スイッチングエレメント１９２５及び１９３０が管理対象スイッチングエレメント１９２５と１９３０との間でデータを転送するために管理対象スイッチングエレメントが使用する物理フォワーディングプレーンデータを生成できるように、シャーシコントローラ１９１５及び１９２０は、ＣＰＣＰデータをそれぞれ管理対象スイッチングエレメント１９２５及び１９３０に渡す。
【０２０６】
第２段階１９０２において、管理対象スイッチングエレメント１９３０を含むネットワークの管理者は、管理対象スイッチングエレメント１９３０が動作するホスト（不図示）においてＶＭ３を作成する。管理者は、管理対象スイッチングエレメント１９３０のポート５を作成し、ＶＭ３をポートに接続する。ポート３を作成すると、いくつかの実施形態の管理対象スイッチングエレメント１９３０は、新たに作成されたポートに関する情報をコントローラクラスタ１９１０に送出する。いくつかの実施形態において、情報は、ポート番号、ネットワークアドレス（例えば、ＩＰアドレス及びＭＡＣアドレス）、管理対象スイッチングエレメントが属する伝送ゾーン、ポートに接続されたマシン等を含んでもよい。上述したように、この構成情報は、管理対象スイッチングエレメントを管理するシャーシコントローラを通過し、次に論理スイッチングエレメント１９０５を管理するユーザまで物理コントローラ及び論理コントローラを通過する。このユーザに対して、新しいＶＭは、ユーザが管理している論理スイッチングエレメント１９０５に追加されるために使用可能になっている。
【０２０７】
段階１９０３において、この例におけるユーザは、ＶＭ３を使用し、ＶＭ３を論理スイッチングエレメント１９０５に接続することを決定する。その結果、論理スイッチングエレメント１９０５の論理ポート６が作成される。従って、ＶＭ３に達するかあるいはＶＭ３から生じるデータは、論理ポート６を通過する。いくつかの実施形態において、コントローラクラスタ１９１０は、論理スイッチングエレメントの一対の論理ポートがマッピングされる一対のポートを有する管理対象スイッチングエレメントの各対の間にトンネルを作成するように論理スイッチングエレメントを実現する全ての管理対象スイッチングエレメントに指示する。この例において、トンネルは、論理ポート１と論理ポート６との間（すなわち、ＶＭ１とＶＭ３との間）及び論理ポート２と論理ポート６との間（すなわち、ＶＭ２とＶＭ３との間）のデータのやり取りを容易にするために、管理対象スイッチングエレメント１９２５と１９３０との間に確立されうる。すなわち、管理対象スイッチングエレメント１９２５のポート３と管理対象スイッチングエレメント１９３０のポート５との間でやり取りされるデータ及び管理対象スイッチングエレメント１９２５のポート４と管理対象スイッチングエレメント１９３０のポート５との間でやり取りされるデータは、管理対象スイッチングエレメント１９２５と１９３０との間に確立されたトンネルを通過しうる。
【０２０８】
論理ポート１及び論理ポート２が同一の管理対象スイッチングエレメント１９２５上の２つのポートにマッピングされるため、２つの管理対象スイッチングエレメント間のトンネルは、論理ポート１と論理ポート２との間（すなわち、ＶＭ１とＶＭ２との間）のデータのやり取りを容易にするために必要とされない。
【０２０９】
第３段階１９０３は、コントローラクラスタ１９１０が、トンネルを作成する命令を指定するＵＰＣＰデータを管理対象スイッチングエレメント１９２５から管理対象スイッチングエレメント１９３０に送出することを更に示す。この例において、ＵＰＣＰデータは、ＵＰＣＰデータを管理対象スイッチングエレメント１９２５に特有のＰＣＰデータにカスタマイズするシャーシコントローラ１９１５に送出される。
【０２１０】
第４段階１９０４は、シャーシコントローラ１９１５がトンネルを作成する命令及びパケットをトンネルに転送する命令を指定するＰＣＰデータをトンネルに送出することを示す。管理対象スイッチングエレメント１９２５は、ＣＰＣＰデータに基づいて管理対象スイッチングエレメント１９３０へのトンネルを作成する。より具体的には、管理対象スイッチングエレメント１９２５は、ポート７を作成し、管理対象スイッチングエレメント１９３０のポート８へのトンネル（例えば、ＧＲＥトンネル）を確立する。２つの管理対象スイッチングエレメントの間にトンネルを作成するより詳細な動作を以下において説明する。
【０２１１】
図２０は、いくつかの実施形態が２つの管理対象スイッチングエレメントの間でのトンネルの作成及び使用を指定するＣＰＣＰデータをＵＰＣＰデータから生成するために実行する処理２０００を概念的に示す。いくつかの実施形態において、処理２０００は管理対象スイッチングエレメントとインタフェース接続するシャーシコントローラ又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラにより実行される。
【０２１２】
処理２０００は、論理コントローラ又は物理コントローラからＵＰＣＰデータを受信することで開始する。いくつかの実施形態において、ＵＰＣＰデータは異なる種類を有する。ＵＰＣＰデータの種類の１つは、管理対象スイッチングエレメントにおけるトンネルの作成及びトンネルの使用を指定するユニバーサルトンネルフロー命令である。いくつかの実施形態において、ユニバーサルトンネルフロー命令は、ネットワークで管理対象スイッチングエレメントにおいて作成されたポートに関する命令を含む。このポートは、ユーザが論理スイッチングエレメントの論理ポートをマッピングした管理対象スイッチングエレメントのポートである。このポートは、トンネル化データが到達する必要がある宛先ポートでもある。ポートに関する情報は、（１）ポートを有する管理対象スイッチングエレメントが属する伝送ゾーンと、（２）いくつかの実施形態において宛先ポートを有する管理対象スイッチングエレメントへのトンネルを構築するために使用されたトンネルプロトコル（例えば、ＧＲＥ、ＣＡＰＷＡＰ等）に基づくトンネルの種類と、（３）宛先ポートを有する管理対象スイッチングエレメントのネットワークアドレス（例えば、ＩＰアドレス）（例えば、確立するためのトンネルの一方の端として機能するＶＩＦのＩＰアドレス）を含む。
【０２１３】
次に処理２０００は、受信したＵＰＣＰデータがユニバーサルトンネルフロー命令であるかを判定する（２０１０において）。いくつかの実施形態において、ＵＰＣＰデータは、処理２０００が受信したユニバーサルプレーンデータの種類を判定できるように種類を指定する。処理２０００が受信したユニバーサルデータがユニバーサルトンネルフロー命令ではないと判定する（２０１０において）場合、２０１５に進み、ＣＰＣＰデータを生成して、生成されたデータを処理２０００が管理している管理対象スイッチングエレメントに送出するようにＵＰＣＰデータを処理する。その後、処理２０００は終了する。
【０２１４】
処理２０００は、受信したＵＰＣＰデータがユニバーサルトンネルフロー命令であると判定する（２０１０において）場合、２０２０に進み、宛先ポートに関する情報を取得するためにデータを構文解析する。次に処理２０００は、宛先ポートを有する管理対象スイッチングエレメントがソースポートを有する管理対象スイッチングエレメントと同一の伝送ゾーンにあるかを判定する（２０２５において）。ソースポートを有する管理対象スイッチングエレメントは、処理２０００を実行するシャーシコントローラ又は物理コントローラが管理する管理対象スイッチングエレメントである。いくつかの実施形態において、伝送ゾーンは、プールノード等の第２レベルの管理対象スイッチングエレメントを使用せずに互いに通信できるマシンのグループを含む。
【０２１５】
いくつかの実施形態において、論理コントローラは、宛先ポートを有する管理対象スイッチングエレメントがソースポートを有する管理対象スイッチングエレメントと同一の伝送ゾーンにあるかを判定する。論理コントローラは、処理２０００を実行するシャーシコントローラに送出する（物理コントローラを介して）ためのユニバーサルトンネルフロー命令を準備する際にこの判定を考慮する。具体的には、ユニバーサルトンネルフロー命令は、異なるトンネルを作成するために異なる情報を含む。図２１の説明の後、これらの異なるトンネルの例を以下において説明する。これらの実施形態において、処理２０００は、２０２５をスキップし、２０１５に進む。
【０２１６】
処理２０００は、ソースポートを含む管理対象スイッチングエレメント及び宛先ポートを含む管理対象スイッチングエレメントが同一の伝送ゾーンにないと判定する（２０２５において）場合、上述した２０１５に進む。処理２０００は、ソースポートを含む管理対象スイッチングエレメント及び宛先ポートを含む管理対象スイッチングエレメントが同一の伝送ゾーンにあると判定する（２０２５において）場合、２０３０に進み、ユニバーサルトンネルフロー命令をカスタマイズし、カスタマイズされた情報をソースポートを有する管理対象スイッチングエレメントに送出する。ユニバーサルトンネルフロー命令のカスタマイズを以下において詳細に説明する。その後、処理２０００は終了する。
【０２１７】
図２１は、管理対象スイッチングエレメントがトンネルを作成し、そのトンネルを介してデータを宛先に送出できるように、いくつかの実施形態がカスタマイズドトンネルフロー命令を生成し、カスタマイズド命令を管理対象スイッチングエレメントに送出するために実行する処理を概念的に示す。いくつかの実施形態において、処理２１００は、管理対象スイッチングエレメントとインタフェース接続するコントローラインスタンス又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラにより実行される。処理２１００は、いくつかの実施形態において、処理２１００を実行するコントローラがユニバーサルトンネルフロー命令を受信し、宛先ポートに関するポート情報を構文解析し、宛先ポートを有する管理対象スイッチングエレメントがコントローラが管理する管理対象スイッチングエレメントと同一の伝送ゾーンにあると判定した時に開始する。
【０２１８】
処理２１００は、トンネルポートを作成する命令を生成する（２１０５において）ことで開始する。いくつかの実施形態において、処理２１００は、ポート情報に基づいてコントローラが管理する管理対象スイッチングエレメントにおいてトンネルポートを作成する命令を生成する。命令は、確立すべきトンネルの種類及びトンネルの宛先端となるＮＩＣのＩＰアドレス等を含む。コントローラにより管理管理対象スイッチングエレメントのトンネルポートは、トンネルの他方の端となる。
【０２１９】
次に処理２１００は、トンネルポートを作成する生成された命令をコントローラが管理する管理対象スイッチングエレメントに送出する（２１１０において）。上述したように、いくつかの実施形態のシャーシコントローラ又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラは、管理対象スイッチングエレメントと通信するために２つのチャネルを使用する。一方のチャネルは、管理対象スイッチングエレメントと構成情報をやり取りする構成チャネルであり、他方のチャネルは、管理対象スイッチングエレメントとフローエントリ及びイベントデータをやり取りするためのスイッチングエレメント制御チャネル（例えば、OpenFlowプロトコルを使用して確立されたチャネル）である。いくつかの実施形態において、処理は、トンネルポートを作成する生成された命令をコントローラが管理する管理対象スイッチングエレメントに送出するために構成チャネルを使用する。生成された命令を受信すると、いくつかの実施形態の管理対象スイッチングエレメントは、トンネルの種類により指定されたトンネルプロトコルを使用して、管理対象スイッチングエレメントにおいてトンネルポートを作成し、トンネルポートと宛先ポートを有する管理対象スイッチングエレメントのポートとの間にトンネルを確立する。トンネルポート及びトンネルが作成及び確立されると、いくつかの実施形態の管理対象スイッチングエレメントは、トンネルの識別子の値（例えば、４）をコントローラインスタンスに返送する。
【０２２０】
次に、いくつかの実施形態の処理２１００は、構成チャネルを介してトンネルポートの識別子の値（例えば、「tunnel_port=4」）を受信する（２１１５において）。次に処理２１００は、この受信した値を使用してユニバーサルトンネルフロー命令に含まれるフローエントリを変更する。このフローエントリは、管理対象スイッチングエレメントに送出されると、管理対象スイッチングエレメントに動作を実行させる。しかし、ユニバーサルデータであるため、このフローエントリは、実際のポート番号ではなくユニバーサル識別子（例えば、tunnel_port）によりトンネルポートを識別する。例えば、受信したユニバーサルトンネルフロー命令におけるこのフローエントリは、「宛先＝宛先マシンのUUIDの場合、tunnel_portに送出する（If destination=destination machine's UUID, send to tunnel_port）」であってもよい。処理２１００は、トンネルポートの識別子の値を含むフローエントリを作成する（２１２０において）。具体的には、処理２１００は、作成されたポートを識別する識別子の実際値によりトンネルポートに対する識別子を置換する。例えば、変更されたフローエントリは、「宛先＝宛先マシンのUUIDの場合、４に送出する（If destination=destination machine's UUID, send to 4）」のように見えるであろう。
【０２２１】
次に処理２１００は、このフローエントリを管理対象スイッチングエレメントに送出する（２１２５において）。いくつかの実施形態において、処理は、スイッチングエレメント制御チャネル（例えば、OpenFlowチャネル）を介してこのフローエントリを管理対象スイッチングエレメントに送出する。管理対象スイッチングエレメントは、このフローエントリを使用してフローエントリのテーブルを更新する。管理対象スイッチングエレメントは、それ以降は、宛先マシンに向けられたデータをトンネルポートに送出することでトンネルを介してそのデータを転送する。その後、処理は終了する。
【０２２２】
図２２Ａ−Ｂは、ユニバーサルトンネルフロー命令を管理対象スイッチングエレメント２２１５が受信及び使用するカスタマイズド命令に変換するシャーシコントローラ２２１０の動作の一例を７つの異なる段階２２０１〜２２０７において概念的に示す。シャーシコントローラ２２１０は、図１８を参照して上述したシャーシコントローラ１８００に類似する。しかし、説明を容易にするために、図２２Ａ−Ｂではシャーシコントローラ２２１０の全ての構成要素は示されない。
【０２２３】
図示のように、シャーシコントローラ２２１０は、入力テーブル２２２０と、規則エンジン２２２５と、出力テーブル２２３０とを含み、それらは入力テーブル１８２０、規則エンジン１８２５及び出力テーブル１８４５に類似する。シャーシコントローラ２２１０は、管理対象スイッチングエレメント２２１５を管理する。２つのチャネル２２３５及び２２４０は、いくつかの実施形態においてシャーシコントローラと管理対象スイッチングエレメント２２１５との間に確立される。チャネル２２３５は、構成データ（例えば、ポート、ポートの現在の状況、管理対象スイッチングエレメントと関連付けられたキュー等の作成に関するデータ）をやり取りするためのものである。チャネル２２４０はOpenFlowチャネル（OpenFlow制御チャネル）であり、それを介していくつかの実施形態においてフローエントリをやり取りする。
【０２２４】
第１段階２２０１は、シャーシコントローラ２２１０が物理コントローラ（不図示）から受信したユニバーサルトンネルフロー命令を使用して入力テーブル２２２０を更新したことを示す。示されるように、ユニバーサルトンネルフロー命令は、トンネル及びフローエントリ２２５０を作成する命令２２４５を含む。示されるように、命令２２４５は、作成されるトンネルの種類及び宛先ポートを有する管理対象スイッチングエレメントのＩＰアドレスを含む。フローエントリ２２５０は、管理対象スイッチングエレメント２２１５に特有でないユニバーサルデータに関して行うべき動作を指定する。規則エンジンは、命令２２４５及びフローエントリ２２５０に対してテーブルマッピング動作を実行する。
【０２２５】
第２段階２２０２は、規則エンジン２２２５により実行されたテーブルマッピング動作の結果を示す。命令２２６０は命令２２４５に起因する。命令２２４５及び２２６０は、いくつかの実施形態において同一であってもよいが、他の実施形態においては同一でなくてもよい。例えば、トンネルの種類の表す命令２２４５及び２２６０における値は異なってもよい。命令２２６０は、命令２２６０に含まれてもよい情報の中でも特に、ＩＰアドレス及び作成されるトンネルの種類を含む。フローエントリ２２５０は、テーブルマッピング動作を全くトリガしなかったため、入力テーブル２２２０に留まる。
【０２２６】
第３段階２２０３は、命令２２６０が構成チャネル２２３５を介して管理対象スイッチングエレメント２２１５にプッシュされていることを示す。管理対象スイッチングエレメント２２１５は、トンネルポートを作成し、管理対象スイッチングエレメント２２１５と宛先ポートを有する別の管理対象スイッチングエレメントとの間にトンネルを確立する。いくつかの実施形態において、トンネルの一方の端は作成されたトンネルポートであり、トンネルの他方の端は宛先ＩＰアドレスと関連付けられるポートである。いくつかの実施形態の管理対象スイッチングエレメント２２１５は、トンネルを確立するためにトンネルの種類により指定されたプロトコルを使用する。
【０２２７】
第４段階２２０４は、管理対象スイッチングエレメント２２１５がトンネルポート（この例において「ポート１」）及びトンネル２２７０を作成したことを示す。この段階は、管理対象スイッチングエレメントがトンネルポート識別子の実際値を返送することを更に示す。管理対象スイッチングエレメント２２１５は、この例においてOpenFlowチャネル２２４０を介してこの情報を送出する。情報は、入力イベントデータとして入力テーブル２２２０に入る。第５の段階２２０５は、入力テーブル２２２０が管理対象スイッチングエレメント２２１５からの情報で更新されることを示す。この更新は、規則エンジン２２２５をトリガしてテーブルマッピング動作を実行させる。
【０２２８】
第６の段階２２０６は、前の段階２２０４において実行されたテーブルマッピング動作の結果を示す。出力テーブル２２３０は、ここでは管理対象スイッチングエレメント２２１５に特有の情報に関して行われる動作を指定するフローエントリ２２７５を有する。具体的には、フローエントリ２２７５は、パケットの宛先が宛先ポートである場合に管理対象スイッチングエレメント２２１５がポート１を介してパケットに送出されるべきであることを指定する。第７の段階２２０７は、フローエントリ２２７５を使用してパケットを転送する管理対象スイッチングエレメント２２１５にフローエントリ２２７５がプッシュされていることを示す。
【０２２９】
なお、図２２に示されるような命令２２４５及びシャーシコントローラ２２１０と管理対象スイッチングエレメント２２１５との間でやり取りされたデータは、ユニバーサルトンネルフロー命令及びカスタマイズド命令の概念的表示であり、実際の表現及び形式でなくてもよい。
【０２３０】
また、図２２の例はシャーシコントローラ２２１０の動作に関して説明される。この例は、ＵＰＣＰデータを物理コントローラがマスタである管理対象スイッチングエレメント用のＣＰＣＰデータに変換するいくつかの実施形態の物理コントローラにも適用可能である。
【０２３１】
図１９〜図２２は、論理スイッチングエレメントの２つの論理ポートを使用している一対のマシン（例えば、ＶＭ）間でのデータのやり取りを容易にするための２つの管理エッジスイッチングエレメント間でのトンネルの作成を示す。このトンネルは、トンネルのとりうる用途の１つを範囲に含む。本発明のいくつかの実施形態において、トンネルの他の多くの用途はネットワーク制御システムにおいて可能である。トンネルの用途の例としては、（１）管理対象スイッチングエレメントとプールノードとの間のトンネルと、（２）一方がエッジスイッチングエレメントであり、他方がＬ３ゲートウェイサービスを提供する（すなわち、ネットワーク層（Ｌ３）においてルーティングサービスを受けるためにルータに接続される管理対象スイッチングエレメント）である２つの管理対象スイッチングエレメント間のトンネルと、（３）論理ポート及びＬ２ゲートウェイサービスに接続される別の論理ポートの２つの管理対象スイッチングエレメント間のトンネルとがある。
【０２３２】
次に、３つの例の各々においてトンネルを作成する一連のイベントを説明する。管理対象スイッチングエレメントとプールノードとの間のトンネルの場合、最初にプールノードが提供され、次に管理対象スイッチングエレメントが提供される。ＶＭは、管理対象スイッチングエレメントのポートに接続される。このＶＭは、管理対象スイッチングエレメントに接続される最初のＶＭである。次にこのＶＮは、論理ポートを管理対象スイッチングエレメントのポートにマッピングすることにより、論理スイッチングエレメントの論理ポートに結合される。論理ポートが管理対象スイッチングエレメントのポートにマッピングされると、論理コントローラは、ユニバーサルトンネルフロー命令を管理対象スイッチングエレメントとインタフェース接続するシャーシコントローラに（又は物理コントローラに）送出する（例えば、物理コントローラを介して）。
【０２３３】
次にシャーシコントローラは、プールノードへのトンネルを作成するように管理対象スイッチングエレメントに命令する。トンネルが作成されると、その後提供されて管理対象スイッチングエレメントに接続される別のＶＭは、この新しいＶＭが同一の論理スイッチングエレメントの論理ポートに結合される場合にプールノードとデータをやり取りするための同一のトンネルを共有する。新しいノードが異なる論理スイッチの論理ポートに結合される場合、論理コントローラは、最初のＶＭが管理対象スイッチングエレメントに接続された場合に伝えられた同一のユニバーサルトンネルフロー命令を送出する。しかし、例えばトンネルが既に作成されていて動作可能であるため、ユニバーサルトンネルフロー命令は、プールノードへの新しいトンネルを作成させない。
【０２３４】
確立されたトンネルが一方向トンネルである場合、別の一方向トンネルはプールノード側から確立される。最初のＶＭが結合される論理ポートが管理対象スイッチングエレメントのポートにマッピングされる場合、論理コントローラは、ユニバーサルトンネルフロー命令をプールノードに更に送出する。ユニバーサルトンネルフロー命令に基づいて、プールノードにインタフェース接続するシャーシコントローラは、管理対象スイッチングエレメントへのトンネルを作成するようにプールノードに命令する。
【０２３５】
管理エッジスイッチングエレメントとＬ３ゲートウェイサービスを提供する管理対象スイッチングエレメントとの間のトンネルの場合、ユーザのいくつかのＶＭを含む論理スイッチングエレメントが提供されており、かつ、論理ルータがＬ３ゲートウェイサービスを提供する伝送ノードにおいて実現されると仮定する。論理パッチポートは、論理ルータを論理スイッチングエレメントにリンクするために論理スイッチングエレメントにおいて作成される。いくつかの実施形態において、論理パッチの作成及びＶＭの提供の順序は、トンネル作成に対して差異を生じさせない。論理パッチポートの作成により、論理コントローラは、論理スイッチングエレメントを実現する全ての管理対象スイッチングエレメント（すなわち、各々が論理スイッチングエレメントの論理ポートがマッピングされる少なくとも１つのポートを有する全ての管理対象スイッチングエレメント）にインタフェース接続するシャーシコントローラ（又は物理コントローラ）にユニバーサルトンネルフロー命令を送出する。これらの管理対象スイッチングエレメントの各々に対する各シャーシコントローラは、伝送ノードへのトンネルを作成するように管理対象スイッチングエレメントに命令する。管理対象スイッチングエレメントの各々が伝送ノードへのトンネルを作成する結果、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの数と同数のトンネルが得られる。
【０２３６】
これらのトンネルが一方向である場合、伝送ノードは、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの各々へのトンネルを作成するためのものである。論理パッチポートが作成されて論理ルータに接続される場合、論理スイッチングエレメントは、ユニバーサルトンネルフロー命令を伝送ノードにプッシュする。伝送ノードにインタフェース接続するシャーシコントローラは、トンネルを作成するように伝送ノードに命令し、伝送ノードは、管理対象スイッチングエレメントへのトンネルを作成する。
【０２３７】
いくつかの実施形態において、管理対象スイッチングエレメントの１つに接続されたあらゆるマシン及び他の管理対象スイッチングエレメントに接続されたあらゆるマシンが同一の論理スイッチングエレメント又は２つの異なるスイッチングエレメントの論理ポートを使用しているかに関係なく、２つの管理対象スイッチングエレメント間に確立されたトンネルは、これらの２つのマシンの間でデータをやり取りするために使用されうる。それは、トンネル化により、異なるＬＤＰセットを管理している異なるユーザが隔離されている間に管理対象スイッチングエレメントを共有できるようにする一例である。
【０２３８】
論理ポート及びＬ２ゲートウェイサービスに接続される別の論理ポートがある２つの管理対象スイッチングエレメント間のトンネルの作成は、論理ポートがＬ２ゲートウェイサービスに接続される時に開始する。接続により、論理コントローラは、ユニバーサルトンネルフロー命令を論理スイッチングエレメントの他の論理ポートを実現する全ての管理対象スイッチングエレメントに送出する。命令に基づいて、これらの管理対象スイッチングエレメントからＬ２ゲートウェイサービスに接続された論理ポートを実現する管理対象スイッチングエレメントへのトンネルが確立される。
【０２３９】
III．電子システム
上述の特徴及びアプリケーションの多くは、コンピュータ読み取り可能な記憶媒体（コンピュータ可読媒体とも呼ばれる）に記録された命令セットとして指定されるソフトウェア処理として実現される。これらの命令は、１つ以上の処理ユニット（例えば、１つ以上のプロセッサ、プロセッサのコア又は他の処理ユニット）により実行される場合、命令に示された動作を処理ユニットに実行させる。コンピュータ可読媒体の例としては、ＣＤ−ＲＯＭ、フラッシュドライブ、ＲＡＭチップ、ハードドライブ、ＥＰＲＯＭ等があるが、それらに限定されない。コンピュータ可読媒体には、無線で又は有線接続を介して進む搬送波及び電子信号は含まれない。
【０２４０】
本明細書において、「ソフトウェア」という用語は、プロセッサにより処理されるためにメモリに読み込まれうる読み出し専用メモリにあるファームウェア又は磁気記憶装置に格納されたアプリケーションを含むことを意図している。また、いくつ化の実施形態において、多くのソフトウェアの発明は、別個のソフトウェアの発明を残しつつ、より大きなプログラムのサブパーツとして実現されうる。いくつかの実施形態において、多数のソフトウェアの発明は、独立したプログラムとしても実現されうる。最後に、本明細書において説明されるソフトウェアの発明を共に実現する独立したプログラムのあらゆる組合せは、本発明の範囲内である。いくつかの実施形態において、ソフトウェアプログラムは、１つ以上の電子システムで動作するようにインストールされる場合、ソフトウェアプログラムの動作を実行及び実施する１つ以上の特定のマシンの実現例を規定する。
【０２４１】
図２３は、本発明のいくつかの実施形態を実現するのに用いられる電子システム２３００を概念的に示す。上述の制御アプリケーション、仮想化アプリケーション又はオペレーティングシステムアプリケーションのいずれかを実行するために、電子システム２３００が使用されうる。電子システム２３００は、コンピュータ（例えば、デスクトップコンピュータ、パーソナルコンピュータ、タブレットコンピュータ、サーバコンピュータ、メインフレーム、ブレードコンピュータ等）、電話機、ＰＤＡ又は他の何らかの種類の電子装置であってもよい。そのような電子システムは、種々のコンピュータ可読媒体及び他の種々のコンピュータ可読媒体用のインタフェースを含む。電子システム２３００は、バス２３０５と、処理ユニット２３１０と、システムメモリ２３２５と、読み出し専用メモリ２３３０と、固定記憶装置２３３５と、入力装置２３４０と、出力装置２３４５とを含む。
【０２４２】
バス２３０５は、全てのシステム、周辺装置及び電子システム２３００の多くの内部装置を通信可能に接続するチップセットバスを集合的に表す。例えばバス２３０５は、処理ユニット２３１０を読み出し専用メモリ２３３０、システムメモリ２３２５及び固定記憶装置２３３５と通信可能に接続する。
【０２４３】
これらの種々のメモリユニットから、処理ユニット２３１０は、本発明の処理を実行するために実行する命令及び処理するデータ検索する。処理ユニットは、単一のプロセッサ又は異なる実施形態においてはマルチコアプロセッサであってもよい。
【０２４４】
読み出し専用メモリ（ＲＯＭ）２３３０は、電子システムの処理ユニット２３１０及び他のモジュールにより必要とされる静的データ及び命令を格納する。一方、固定記憶装置２３３５は、読み取り／書き込みメモリエレメントである。この装置は、電子システム２３００がオフの場合でも命令及びデータを格納する不揮発性メモリユニットである。本発明のいくつかの実施形態は、大容量記憶装置（例えば、磁気ディスク又は光ディスク及びそれに対応するディスクドライブ）を固定記憶装置２３３５として使用する。
【０２４５】
他の実施形態は、取り外し可能な記憶装置（例えば、フロッピディスク、フラッシュドライブ等）を固定記憶装置として使用する。固定記憶装置２３３５と同じく、システムメモリ２３２５は読み取り／書き込みメモリエレメントである。しかし、記憶装置２３３５とは異なり、システムメモリは、ランダムアクセスメモリ等の揮発性読み取り／書き込みメモリエレメントである。システムメモリは、プロセッサが実行時に必要とする命令及びデータのいくつかを格納する。いくつかの実施形態において、本発明の処理は、システムメモリ２３２５、固定記憶装置２３３５及び／又は読み出し専用メモリ２３３０に格納される。これらの種々のメモリユニットから、処理ユニット２３１０は、いくつかの実施形態の処理を実行するために実行する命令及び処理するデータ検索する。
【０２４６】
バス２３０５は、入力装置２３４０及び出力装置２３４５にも接続する。入力装置により、ユーザは、電子システムに対して情報を通信し、コマンドを選択できるようになる。入力装置２３４０は、英数字キーボード及びポインティングデバイス（「カーソル制御デバイス」とも呼ばれる）を含む。出力装置２３４５は、電子システムにより生成された画像を表示する。出力装置は、プリンタ及びブラウン管（ＣＲＴ）又は液晶ディスプレイ（ＬＣＤ）等の表示装置を含む。いくつかの実施形態は、入力装置及び出力装置の双方として機能するタッチスクリーン等の装置を含む。
【０２４７】
最後に、図２３に示されるように、バス２３０５は、ネットワークアダプタ（不図示）を介して電子システム２３００をネットワーク２３６５に更に連結する。このように、コンピュータは、コンピュータのネットワーク（例えば、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）又はイントラネット、あるいはインターネット等のネットワークのネットワークの一部であってよい。電子システム２３００のいずれか又は全ての構成要素は、本発明と関連して使用されてもよい。
【０２４８】
いくつかの実施形態は、機械可読媒体又はコンピュータ可読媒体（あるいは、コンピュータ可読記憶媒体、機械可読媒体又は機械可読記憶媒体と呼ばれる）にコンピュータプログラム命令を格納するマイクロプロセッサ、記憶装置及びメモリ等の電子部品を含む。そのようなコンピュータ可読媒体のいくつかの例としては、ＲＡＭ、ＲＯＭ、読み出し専用コンパクトディスク（ＣＤ−ＲＯＭ）、書き込み可能なコンパクトディスク（ＣＤ−Ｒ）、書き換え可能なコンパクトディスク（ＣＤ−ＲＷ）、読み出し専用汎用ディスク（例えば、ＤＶＤ−ＲＯＭ、２層式ＤＶＤ−ＲＯＭ）、種々の書き込み可能な／書き換え可能なＤＶＤ（例えば、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ等）、フラッシュメモリ（例えば、ＳＤカード、ミニＳＤカード、マイクロＳＤカード等）、磁気ハードドライブ及び／又は固体ハードドライブ、読み出し専用ブルーレイ及び書き込み可能ブルーレイ（Ｂｌｕ−Ｒａｙ（登録商標））ディスク、超高密度光ディスク、他のあらゆる光媒体又は磁気媒体、並びにフロッピディスクがある。コンピュータ可読媒体は、少なくとも１つの処理ユニットにより実行可能なコンピュータプログラムを格納してもよく、種々の動作を実行する命令セットを含む。コンピュータプログラム又はコンピュータコードの例としては、例えばコンパイラにより生成されるマシンコード、インタプリタを使用してコンピュータ、電子部品又はマイクロプロセッサにより実行される高レベルコードを含むファイルがある。
【０２４９】
上記の説明は、主にソフトウェアを実行するマイクロプロセッサ又はマルチコアプロセッサを参照したが、いくつかの実施形態は、特定用途向け集積回路（ＡＳＩＣ）又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ）等の１つ以上の集積回路により実行される。いくつかの実施形態において、そのような集積回路は、回路自体に格納される命令を実行する。
【０２５０】
本明細書において使用されるように、「コンピュータ」、「サーバ」、「プロセッサ」及び「メモリ」という用語は、全て電子装置又は他の技術装置を参照する。これらの用語は、ユーザ又はユーザのグループを除外する。本明細書の目的のために、「表示する」という用語は、電子装置上に表示することを意味する。本明細書において使用されるように、「１つのコンピュータ可読媒体」、「複数のコンピュータ可読媒体」及び「機械可読媒体」という用語は、コンピュータにより読み出し可能な形式で情報を格納する有形の物体、物理的対象物に完全に限定される。これらの用語は、あらゆる無線信号、有線ダウンロード信号及び他のあらゆる一時的な信号を除外する。
【０２５１】
多くの特定の詳細を参照して本発明を説明したが、本発明の主旨から逸脱することなく本発明が他の特定の形態で実施されうることは、当業者により理解されるであろう。また、多くの図面（図２０及び図２１を含む）は処理を概念的に示す。これらの処理の特定の動作は、図示され説明された正確な順序で実行されなくてもよい。特定の動作は連続した一連の動作で実行されなくてもよく、異なる特定の動作は異なる実施形態において実行されてもよい。更に処理は、いくつかのサブ処理を使用して又はより大きなマクロ処理の一部として実現されうる。
【０２５２】
また、ユーザがＬＣＰデータに関してＬＤＰセットを提供するいくつかの実施形態を上述した。しかし、他の実施形態において、ユーザは、ＬＦＰデータに関してＬＤＰセットを提供してもよい。また、スイッチングエレメントを管理するためにコントローラインスタンスがＰＣＰデータをスイッチングエレメントに提供するいくつかの実施形態を上述した。しかし、他の実施形態において、コントローラインスタンスは、スイッチングエレメントに物理フォワーディングプレーンデータを提供してもよい。そのような実施形態において、リレーショナルデータベースデータ構造は物理フォワーディングプレーンデータを格納し、仮想化アプリケーションはそのようなデータを生成する。
【０２５３】
また、上述のいくつかの例において、ユーザは１つ以上の論理スイッチングエレメントを指定する。いくつかの実施形態において、ユーザは、そのような論理スイッチングエレメント構成と共に物理スイッチングエレメント構成を提供してよい。また、いくつかの実施形態において１つの演算装置上で実行するいくつかのアプリケーション層により個々に形成されるコントローラインスタンスを説明するが、そのようなインスタンスが、それらの動作の１つ以上の層を実行するいくつかの実施形態における専用の演算装置又は他のマシンにより形成されることは、当業者により理解されるであろう。
【０２５４】
また、上述のいくつかの例は、ＬＤＰＳが１人のユーザと関連付けられることを示す。次に、ユーザがいくつかの実施形態においてＬＤＰセットの１つ以上の集合と関連付けられてもよいことは、当業者により理解されるであろう。すなわち、ユーザが多数のＬＤＰセットと関連付けられてもよいため、ＬＤＰＳとユーザとの関係は常に１対１の関係ではない。従って、本発明が上述の例示的な詳細により限定されないことは、当業者により理解されるであろう。
【図１】
0005833246.tif 000002
【図２】
0005833246.tif 000003
【図３】
0005833246.tif 000004
【図４】
0005833246.tif 000005
【図５】
0005833246.tif 000006
【図６】
0005833246.tif 000007
【図７】
0005833246.tif 000008
【図８】
0005833246.tif 000009
【図９】
0005833246.tif 000010
【図１０】
0005833246.tif 000011
【図１１】
0005833246.tif 000012
【図１２】
0005833246.tif 000013
【図１３】
0005833246.tif 000014
【図１４】
0005833246.tif 000015
【図１５】
0005833246.tif 000016
【図１６】
0005833246.tif 000017
【図１７】
0005833246.tif 000018
【図１８】
0005833246.tif 000019
【図１９Ａ】
0005833246.tif 000020
【図１９Ｂ】
0005833246.tif 000021
【図２０】
0005833246.tif 000022
【図２１】
0005833246.tif 000023
【図２２Ａ】
0005833246.tif 000024
【図２２Ｂ】
0005833246.tif 000025
【図２３】
0005833246.tif 000026