(57)【特許請求の範囲】
【請求項１】
ネットワーク内でデータを転送する複数の管理転送要素を有する前記ネットワークを管理するコントローラのための、前記複数の管理転送要素を設定する方法であって、
論理転送要素セットを実現する前記複数の管理転送要素のグループを特定するステップと、
前記管理転送要素のグループの第１管理転送要素を、(i)パケットを、該パケットの送信元であるエンドマシンから前記論理転送要素セットの第１論理ポートで直接受信し、(ii)前記パケットの宛先であるエンドマシンに向けて前記パケットを前記論理転送要素セットの第２論理ポートで転送する、ための第１ホップ転送要素として設定するための、設定データの第１セットを生成するステップと、
前記管理転送要素のグループの残りの管理転送要素を、(i)前記パケットを、前記送信元エンドマシンから直接は受信せず、(ii)前記パケットを前記宛先エンドマシンに向けて前記論理転送要素セットの第２論理ポートで転送する、ための非第１ホップ転送要素として設定するための、設定データの第２セットを生成するステップと、
前記第１管理転送要素に前記設定データの第１セットを送信する前に、前記管理転送要素のグループの残りの管理転送要素に前記設定データの第２セットを送信するステップと、を有することを特徴とする方法。
【請求項２】
前記残りの管理転送要素に前記設定データの第２セットを送信する前に：
(i)前記第１管理転送要素を第１ホップ転送要素として設定し、(ii)第１ホップ転送要素としての前記第１管理転送要素が受信ならびに転送する特定のパケットに、バージョン情報を添付するように前記第１管理転送要素を設定するための、設定データの第３セットを生成するステップと、
前記残りの管理転送要素を非第１ホップ転送要素として設定するための設定データの第４セットを生成するステップと、
前記第１管理転送要素に前記設定データの第３セットを送信するステップと、
前記残りの管理転送要素に前記設定データの第４セットを送信するステップと、をさらに有し、
前記コントローラから前記設定データの第２セットを受信した後、前記残りの管理転送要素は、非第１ホップ転送要素としての前記残りの管理転送要素が受信ならびに転送する前記特定のパケットを転送するために用いるものとして、前記設定データの第２セットよりも前記設定データの第４セットを選択するために前記バージョン情報を用いることを特徴とする請求項１に記載の方法。
【請求項３】
前記バージョン情報は、単一バイナリビットのサイズを有することを特徴とする請求項２に記載の方法。
【請求項４】
前記第１管理転送要素に前記設定データの第１セットを送信するステップをさらに有し、
前記設定データの第１セットは、第１ホップ転送要素としての前記第１管理転送要素が受信ならびに転送するパケットに別のバージョン情報を添付するよう、前記第１管理転送要素をさらに設定するためのものであり、
前記設定データの第２セットを受信した後、前記残りの管理転送要素は、非第１ホップ転送要素としての前記残りの管理転送要素が受信する前記パケットを転送するために用いるものとして、前記設定データの第４セットよりも前記設定データの第２セットを選択するために前記別のバージョン情報を用いることを特徴とする請求項２に記載の方法。
【請求項５】
前記設定データの第１セットの受信から所定時間経過後に前記設定データの第３セットを削除するように前記第１管理転送要素を設定するステップをさらに有することを特徴とする請求項２に記載の方法。
【請求項６】
前記設定データの第１セットの受信後に前記設定データの第３セットを削除するように前記第１管理転送要素にコマンドを送信するステップをさらに有することを特徴とする請求項２に記載の方法。
【請求項７】
前記第１管理転送要素と前記送信元エンドマシンとが同じホスト内で稼働することを特徴とする請求項１に記載の方法。
【請求項８】
前記設定データの第２セットはさらに、前記残りの管理転送要素のうちの第２管理転送要素を、非第１ホップ転送要素としての前記第２管理転送要素が受信するパケットを前記宛先エンドマシンに直接送信するための最終ホップ転送要素として設定するためのものであることを特徴とする請求項１に記載の方法。
【請求項９】
前記第２管理転送要素と、前記宛先エンドマシンとが同じホスト内で稼働することを特徴とする請求項８に記載の方法。
【請求項１０】
ネットワーク内でデータを転送する複数の管理転送要素を有する前記ネットワークを管理するコントローラのための、管理転送要素セットを設定する方法であって、
論理転送要素セットを実現する管理転送要素セットを特定するステップと、
(i)前記管理転送要素セットを、エンドマシンセットから前記論理転送要素セットの第１論理ポートセットで直接受信するデータを転送する第１ホップ転送要素として設定するための、フローエントリの第１セットと、(ii)前記管理転送要素セットを、前記管理転送要素セットのうちの他の管理転送要素から受信したデータを転送する非第１ホップ転送要素として設定するための、フローエントリの第２セットと、を生成するステップと、
前記管理転送要素セットに前記フローエントリの第１セットを送信する前に、前記管理転送要素セットに前記フローエントリの第２セットを送信するステップと、を有することを特徴とする方法。
【請求項１１】
前記フローエントリの第２セットを送信する前に：
(i)前記管理転送要素セットを第１ホップ転送要素として設定し、(ii)第１ホップ転送要素としての前記管理転送要素セットが受信ならびに転送するデータにバージョン情報を添付するように前記管理転送要素セットを設定するための、フローエントリの第３セットを生成するステップと、
前記管理転送要素セットを非第１ホップ転送要素として設定するための、フローエントリの第４セットを生成するステップと、
前記管理転送要素セットに前記フローエントリの第３および第４セットを送信するステップと、を有し、
前記コントローラから前記フローエントリの第２セットを受信した後、前記管理転送要素セットは、非第１ホップ転送要素としての前記管理転送要素セットが受信する前記データを転送するために用いるものとして、前記フローエントリの第２セットよりも前記フローエントリの第４セットを選択するために前記バージョン情報を用いることを特徴とする請求項１０に記載の方法。
【請求項１２】
前記バージョン情報は、単一バイナリビットのサイズを有することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記管理転送要素セットに前記フローエントリの第１セットを送信するステップをさらに有し、
前記フローエントリの第１セットは、第１ホップ転送要素としての前記管理転送要素セットが受信および転送する前記データに別のバージョン情報を添付するように前記管理転送要素セットをさらに設定するためのものであり、
前記フローエントリの第２セットを受信した後、前記管理転送要素セットは、非第１ホップ転送要素としての前記管理転送要素セットが受信するデータを転送するために使用するものとして、前記フローエントリの第４セットよりも前記フローエントリの第２セットを選択するために、前記別のバージョン情報を使用することを特徴とする請求項１１に記載の方法。
【請求項１４】
前記フローエントリの第１セットの受信から一定時間経過後に、前記フローエントリの第３および第４セットを削除するように前記管理転送要素セットを設定するステップをさらに有することを特徴とする請求項１１に記載の方法。
【請求項１５】
前記フローエントリの第１セットを受信した後、前記フローエントリの第３および第４セットを削除するよう前記管理転送要素セットにコマンドを送信するステップをさらに有することを特徴とする請求項１１に記載の方法。
【請求項１６】
少なくとも１つのプロセッサに請求項１から１５のいずれか１項に記載の方法を実行させるための命令セットを有するプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
ネットワーク内では、ネットワーク転送状態(forwarding state)がパケットをその入口点から出口点まで搬送する。転送状態はホップごとに、ネットワーク要素にパケットをその宛先に近づく要素に転送させる。設定されたネットワークポリシに準拠した転送状態の算出が、そのネットワークのオペレーションにとって極めて重要であることは明らかである。正当な転送状態なしでは、ネットワークはパケットを宛先に配信しないであろうし、また設定されたポリシに従った転送も行われないであろう。
【発明の概要】
【０００２】
本発明の一部の実施形態は、新しいネットワークポリシを指定するために転送状態を更新するコントローラ群(controller cluster)を提供する。コントローラ群は、転送要素セットが新しいネットワークポリシをパケットに一貫して適用し、新旧のポリシを混ぜて適用することのない方法で、更新された転送状態を転送要素セットに送信する。
【０００３】
一部の実施形態において、コントローラ群は、パケット経路の始めに存在する第１ホップ管理転送要素(managed forwarding element)を、パケットを転送するための論理転送決定の全て（例えば、論理出口ポート(logical egress ports)の探索および、論理出口ポートに対する物理出口ポートの特定）を行うように設定する。パケットの経路における他の管理および非管理転送要素(unmanaged forwarding element)は、そのパケットに関する論理転送決定を行わず、従って転送状態を必要とせず受信もしない。これら他の転送要素は単に、パケットの送信元および宛先情報に基づいてパケットを宛先に送信するための構成（ファブリック）として用いられるに過ぎない。パケットは、更新された転送状態を用いて自身が転送されなければならないことを示すための、いかなるバージョン情報も有する必要がない。これは、そのパケットに関する全ての論理転送決定が第１ホップ管理転送要素によって実行され、他のホップ転送要素は更新された転送状態を受信しないことによる。パケットは、新しいポリシに基づいて全ての論理転送決定を行う第１ホップ管理転送要素によって転送されるため、新しいポリシによってのみ転送される。
【０００４】
一部の実施形態において、コントローラ群は、論理転送決定が第１ホップだけでなく他のホップ転送要素にも広がって実行されるような方法で管理転送要素を設定する。これらの実施形態において、コントローラ群は更新された転送状態を、まず、パケット経路における第１ホップ以外の転送要素に送信する。更新された転送状態を第１ホップ以外の転送要素に送信した後にのみ、コントローラ群はそのパケットの第１ホップ転送要素へ更新された転送状態を送信する。そしてコントローラ群は、そのパケットを転送するために、更新された転送状態を用いるよう第１ホップ転送要素に指示する。一部の実施形態において、第１ホップ転送要素に転送されたパケットは、そのパケットが更新された転送状態を用いて転送されねばならないことを示すバージョン情報を有する。このようにして、第１ホップ転送要素によって他のホップ転送要素に転送されたパケットが新しいネットワークポリシに基づいて転送されることが保証される。
【０００５】
本発明の一部の実施形態は、管理転送要素であって、この管理転送要素がネットワークコントローラ群のいくつかのネットワークコントローラと確立したチャネルセットにわたるトランザクションを実現するように設定された管理転送要素を提供する。具体的には、一部の実施形態に係る管理転送要素は、特定のチャネルを通じてバリアを受信するまで、それらチャネルを通じて受信した転送状態をコミットしない。管理転送要素が他のチャネルを通じて受信するかもしれないバリアは、管理転送要素が受信した転送状態をコミットさせない。つまり、バリアが特定のチャネルを通じて受信された後でのみ、管理転送要素は転送状態をコミットする。このようにして、管理転送は、他のチャネルを通じて入来するトランザクション入力を、特定のチャネルを通じて入来するトランザクション入力とをまとめる。
【０００６】
上述した概要は、本発明の一部の実施形態についての簡単な導入部として提供されたものである。これは、本明細書に開示されている発明の主題の全ての導入部または概要であるという意味ではない。以下の詳細な説明の欄および、詳細な説明で参照される図面は、発明の概要の欄に記載された実施形態および他の実施形態をさらに説明するであろう。従って、本明細書に記載される全実施形態を理解するには、発明の概要、詳細な説明、ならびに図面の十分なレビューが必要である。さらに、本発明の技術思想はその範囲内において他の形態で実施されうるので、発明の概要、詳細な説明、ならびに図面における具体的な詳細によって限定されるべきではなく、特許請求の範囲の記載によって規定されるべきである。
【０００７】
本発明の新規な特徴は、添付の特許請求の範囲に説明されている。しかし、説明を目的として、本発明のいくつかの実施形態が以下の図面に説明されている。
【図面の簡単な説明】
【０００８】
【図１】ネットワークコントローラの例示的な階層構造を示す図である。
【図２】一部の実施形態に係るネットワークコントローラのアーキテクチャを示す図である。
【図３】管理転送要素セットにわたって実装される複数の論理切り替え要素の例を示す図である。
【図４】物理的なインフラストラクチャにおいて実装されるいくつかの論理的な転送要素を示す図である。
【図５】管理転送要素セットへの、更新された転送状態情報の送信を示す図である。
【図６】一部の実施形態が、更新された転送状態情報を管理転送要素セットへ送信するために実行する手順を概念的に示す図である。
【図７】一部の実施形態が、更新された転送状態情報を管理転送要素で受信するために実行する手順を概念的に示す図である。
【図８】管理転送要素セットへの、更新された転送状態情報の送信を示す図である。
【図９】一部の実施形態が、更新された転送状態情報を管理転送要素セットへ送信するために実行する手順を概念的に示す図である。
【図１０】一部の実施形態が、更新された転送状態情報を管理転送要素で受信するために実行する手順を概念的に示す図である。
【図１１】一部の実施形態が、転送状態情報をトランザクション的に算出し、管理転送要素セットへ送信するために実行する手順を概念的に示す図である。
【図１２】コントローラ群のいくつかのコントローラが更新を送信するためにいくつかの通信チャネルを確立している管理転送要素を示す図である。
【図１３】一部の実施形態が、主チャネルを通じて受信したトランザクションに副チャネルセットを通じて受信した複数のトランザクションをまとめるために実行する方法を概念的に示す図である。
【図１４】本発明の一部の実施形態を実施するために用いることのできる電子システムを概念的に示す図である。
【発明を実施するための形態】
【０００９】
以下の本発明の詳細な説明においては、本発明のさまざまな詳細、例、および実施形態が記載ならびに説明される。しかし、本技術分野に属する当業者には自明であろうが、本発明は説明される実施形態に限定されず、また、本発明は説明される具体的な詳細および例の一部を用いずに実施されうる。
【００１０】
一部の実施形態は、管理転送要素セットの転送動作を規定するために、管理転送要素セットにプッシュするための転送状態情報をネットワークコントローラが算出するネットワーク制御システムを提供する。コントローラはさらに、管理転送要素の動作を変更するため、転送状態情報を更新する。転送状態情報を更新する際、ネットワークコントローラは、管理転送要素が（例えばデータパケットの形態を有する）データを更新された転送状態情報に従ってネットワーク内で転送するよう、更新された転送状態情報を管理転送要素にプッシュする。
【００１１】
一部の実施形態において、コントローラは、パケットの経路中にある全ての管理転送要素が更新された転送状態情報を適用するような方法で、更新された転送状態情報を管理転送要素にプッシュする。例えば、一部の実施形態において、コントローラは、経路中の他の転送要素は単にパケットを宛先に転送するファブリックとして機能するよう、パケット経路の第１ホップ転送要素が全ての論理転送決定を実行するように設定する。これら実施形態において、コントローラは更新された転送状態情を第１ホップ転送要素だけに送信する。この方法により、パケットを宛先へ向けて転送するために、パケットを更新された転送情報で処理されなければならないことを第１ホップ転送要素以外の転送要素に示すためのバージョン情報をパケットに含める必要がなくなる。
【００１２】
一部の実施形態においてコントローラは、第１ホップ転送要素だけでなく、パケット経路の他の転送要素によっても論理転送決定を行うように転送要素を設定する。これらの実施形態のいくつかにおいて、コントローラはまず更新された転送状態情報をパケット経路（すなわち、パケットの入口点と出口点との間の経路）中の１つの管理転送要素（そのパケットに関する第１ホップ転送要素）を除く全ての管理転送要素に送信する。そのパケットに関する第１ホップ転送要素は、パケットを送信元の装置から直接受信する。すなわち、そのパケットに関する第１ホップ転送要素は、経路の最初に位置する。
【００１３】
そして、コントローラは更新された転送状態情報を第１ホップ管理転送要素に送信する。一部の実施形態において、第１ホップ管理転送要素は、パケットを次のホップの転送要素に転送する際、パケットにバージョン情報を含める。このバージョン情報は、そのパケットが古い転送状態情報ではなく、更新された転送状態情報に基づいて転送されなければならないことを示す。このようにして、更新された転送状態情報を用いる第１ホップ管理転送要素で受信並びに転送されるパケットは、更新された転送状態情報を用いるように準備ができているパケット経路中の他のホップ管理転送要素によってさらに転送される。
【００１４】
以下のセクションにおいて、さらに詳細な実施形態を説明する。具体的には、セクションＩで、論理および物理ネットワークを制御するための、一部の実施形態に係るネットワーク制御システムをまず説明する。次にセクションIIで、本発明の一部の実施形態に従って転送状態情報を生成、更新、およびプッシュするネットワークコントローラを説明する。セクションIIIでは、コントローラから転送状態情報を受信するためにいくつかの通信チャネルを用いる管理転送要素を説明する。最後にセクションIVで、本発明の一部の実施形態を実施することのできる電子システムを説明する。
【００１５】
Ｉ．ネットワーク制御システム
図１は、管理転送要素セットの転送動作を規定するために、管理転送要素セットにプッシュするための転送状態情報をネットワークコントローラが算出するネットワーク制御システム１００を示している。ネットワーク制御システム１００は、コントローラ群１０５および３つの管理転送要素１２５-１３５を有している。ネットワークコントローラ群１０５は３つのネットワークコントローラ（１つの論理コントローラ１１０と２つの物理コントローラ１１５，１２０）を有している。ネットワーク制御システム１００は、３つの管理転送要素に状態をプッシュする１つのコントローラ群１０５を有する単純な例を表している。多くの場合、一部の実施形態に係るネットワーク制御システムは、各群が多数のコントローラを含んだ多数のコントローラ群と、数百または数千の管理転送要素を有するであろう。
【００１６】
一部の実施形態において、ネットワークコントローラ群１０５は、転送状態の算出を実行し、算出した転送状態をフローエントリの形式で管理転送要素にプッシュする。一部の実施形態に係るネットワークコントローラ群は、論理ネットワークを規定する論理制御プレーン(LCP)データを受信し、このLCPデータを管理転送要素１２５-１３５へ送信するための物理制御プレーン(PCP)データに変換する。一部の実施形態において、論理ネットワークの論理制御プレーンは、論理ネットワーク内のエンドマシン（例えば仮想マシン）を接続する１つ以上の論理転送要素（例えば論理スイッチ、論理ルータ）を規定する。論理転送要素は、送信元装置からのパケットを、論理空間内で宛先装置までどのように転送すべきかを規定する（例えば仮想マシンMACアドレスと論理ポートとの結び付け）。さらに、一部の実施形態においてLCPは、論理転送要素で実施される論理ポリシ（例えばアクセス制御リスト）を規定する。LCPおよびその構造は、それが実装される物理ネットワークには依存しない。
【００１７】
一部の実施形態に係るネットワークコントローラ群は、LCPデータを管理転送要素にプッシュされるPCPデータにするための独特な変換を実行する。一部の実施形態において、コントローラ群はLCPデータを論理転送プレーン(LFP)データに変換し、次いでLFPデータをPCPデータに変換する。LFPデータは論理空間内でパケットを転送するための転送エントリを規定する。すなわち、単にアドレスを論理ポートと結びつけるのではなく、LFPデータは、アドレスが一致したらパケットを論理ポートへ転送することを記述するエントリを含んでいる。
【００１８】
LFPデータからPCPデータへの変換は、論理転送エントリを物理ネットワークへ統合する。PCPエントリは物理ネットワーク内の論理アドレス空間内で転送を実行するための情報を含んでいる（例えば、論理ポートから物理ポートへのマッピングなど）。
【００１９】
一部の実施形態において、管理転送要素にプッシュするためのPCPの算出は、コントローラ群の異なるコントローラレイヤ間に分散されている。例えば、一部の実施形態において、論理コントローラ１１０は少なくとも１つの論理転送要素を管理している。図１の右半分に示されるように、論理コントローラ１１０はLCPからLFPへの変換に引き続き、LFPからユニバーサルPCP(UPCP)への変換を実行する。UPCPデータが有するフローエントリは、いずれかの管理転送要素に特有なデータを含むようにカスタマイズされておらず、代わりに、特定の物理的実装（例えばポート番号、トンネル識別子など）に特有なデータについての抽象化物(abstraction)だけを含んでいる。
【００２０】
一部の実施形態において、特定の論理転送要素を管理する論理コントローラは、任意数の物理コントローラにUPCPデータを送信する。例えば、論理コントローラ１１０は２つの物理コントローラ１１５，１２０にUPCPデータを送信する。管理転送要素の各々は、マスタ物理コントローラによって管理される。
【００２１】
従って、いくつかの管理転送要素にわたって実施される論理転送要素に関するUPCPデータは、そのいくつかの転送要素を管理するいくつかの異なるマスタ物理コントローラに送信されてよい。図示の通り、物理コントローラ１１５は２つの管理転送要素１２５，１３５を管理するマスタコントローラである。物理コントローラ１２０は管理転送要素１３５を管理するマスタコントローラである。
【００２２】
管理転送要素と同じ物理マシン内の物理コントローラ又は（不図示の）シャーシコントローラのいずれかにおいて、UPCPデータは、カスタマイズされたPCP（CPCP）データに変換される。CPCPデータは、特定の管理転送要素に特有のカスタマイズデータを含んだ物理制御プレーンデータである。上述の通り、一部の実施形態において物理コントローラは、管理転送要素から受信した情報を用いてこの変換を実行する。他の実施形態において物理コントローラはUPCPデータを管理転送要素が存在するホストマシンへ送信するためのパススルーとして振る舞い、コントローラロジック（シャーシコントローラ）がUPCPからCPCPへの変換を実行する。
【００２３】
管理転送要素１２５-１３５はネットワークコントローラによって（例えば転送状態情報をネットワークから受信することによって）管理されるソフトウェアまたはハードウェア転送要素である。一部の実施形態において、管理転送要素はホストマシン上（例えば、ユーザ空間および／またはホストマシンのカーネル内）で稼働するソフトウェア転送要素である。これらの管理転送要素はパケットをエンドマシン１４０-１６０から受信し、それらのパケットに論理的な処理を適用して、パケットをその宛先まで、物理ネットワークにわたって送信する（例えば、別のエンドマシンが異なる管理転送要素に接続されてもよい。）
【００２４】
エンドマシン１４０-１６０は、物理マシンでも仮想マシンでもよい。一部の実施形態において、仮想マシンとしてのエンドマシンは、それらにパケットを転送する管理転送要素を有するホストと同じホスト内で稼働する。複数の物理ネットワークに属する仮想マシンは１つのホストマシン内に配置されてよい（例えばエンドマシン１４０，１４５は管理転送要素１２５が配置されるホストマシンと同じホストマシンに配置されてよい）ため、管理転送要素の各々は、複数の異なる論理転送要素を実現することができる。さらに、上述したように、１つの論理転送要素は多数の管理転送要素にわたって実現されるのが一般的であろう。
【００２５】
ネットワークの縁部(edge)に配置される管理転送要素に加え、一部の実施形態においては、仮想マシンを有するホスト上に第２レベルの非縁部(non-edge)管理転送要素（プールノードもしくはサービスノードと呼ばれることもある）をさらに有する。（例えば論理ポートに宛先MACアドレスを結びつけるためのフローエントリを有さないことにより）縁部管理転送要素があるパケットに関する処理を全く実行することができない場合、縁部管理転送要素はそのパケットをプールノードが処理して宛先に送信するために、そのパケットをプールノードに送信する。
【００２６】
図２は、一部の実施形態に係るネットワークコントローラ２００の例示的なアーキテクチャを概念的に示している。ネットワークコントローラ２００は、取り扱うデータのタイプに応じて、論理コントローラ、物理コントローラ、またはシャーシコントローラとして機能することができる。
【００２７】
論理コントローラとしてのネットワークコントローラ２００は、入力としてLCPデータを取得する。一部の実施形態においてネットワークコントローラ２００は、LCPデータをLFPデータに変換し、その後UPCPデータに変換する。ネットワークコントローラ２００はUPCPデータを、論理コントローラとしてのネットワークコントローラ２００が管理する論理転送要素を実現する管理転送要素、のマスタである物理コントローラセットにプッシュする。
【００２８】
一部の実施形態に係る物理コントローラとして、ネットワークコントローラ２００はUPCPデータを入力とし、UPCPデータをCPCPデータに変換する。そしてネットワークコントローラ２００はCPCPデータを、自身がマスタである管理転送要素セットへプッシュする。他の実施形態において物理コントローラとしてのネットワークコントローラ２００は、UPCPデータを、管理転送要素セットが稼動するホストで稼動するシャーシコントローラセットへ中継する。ネットワークコントローラ２００はこれら実施形態において、この管理転送要素セットのマスタである。
【００２９】
シャーシコントローラとしてのネットワークコントローラ２００は、物理コントローラセットからのUPCPデータを入力とする。ネットワークコントローラ２００はUPCPデータを、シャーシコントローラが管理する管理転送要素のためのCPCPデータに変換し、CPCPデータを管理転送要素へ送信する。
【００３０】
図２に示すように、ネットワークコントローラ２００はルールエンジン入力テーブルセット２１０、関数および定数テーブルセット２１５、インポータ２２０、ルールエンジン２２５、ルールエンジン出力テーブルセット２４５、変換器２５０、エクスポータ２５５、持続性トランザクションデータベース(PTD)２６０、およびコンパイラ２３５を有している。コンパイラ２３５はコントローラの１構成要素であり、コントローラの他の構成要素とは時間的に異なるインスタンスで動作する。コンパイラは開発者が特定のネットワークコントローラおよび／または仮想化環境に関してルールエンジンを指定する必要がある際に動作し、一方でコントローラの残りのモジュールはコントローラが他のコントローラまたは管理転送要素と相互動作(interface)する際にランタイムで動作する。
【００３１】
一部の実施形態において、コンパイラ２３５は、宣言型言語で指定されている比較的小さい（例えば数百行の）宣言命令(declarative instructions)２４０を取得し、それらをコントローラのテーブルマッピングを実行するルールエンジン２２５の動作を指定する、大きな（例えば数千行の）コード（すなわちオブジェクトコード）セットに変換する。従って、コンパイラは、ネットワークコントローラを規定ならびに更新するネットワークコントローラ開発者の処理を大幅に単純化する。それは、コンパイラにより開発者が高レベルプログラミング言語を用いることが可能になるからである。高レベルプログラミング言語は、ネットワークコントローラの複雑なマッピングをコンパクトに規定すること、そして、その後、（例えば、ネットワークコントローラがサポートする論理的なネットワーキング機能の変更、ネットワークコントローラの望ましい振る舞いの変更など）任意数の変更に応答してこのマッピングを更新することを可能にする。さらに、コンパイラは、開発者がマッピング動作を規定する際に、ネットワークコントローラでイベントが発生するであろう順番を考慮する労力を軽減する。また、開発者はネットワークコントローラ２００を論理コントローラ、物理コントローラ、またはシャーシコントローラとして機能させるため、異なるルールセットを用いてネットワークコントローラ２００をプログラミングする。
【００３２】
一部の実施形態において、ルールエンジン(RE)入力テーブル２１０は、ネットワークコントローラ２００が動作するネットワークコントローラのタイプに基づいた、異なるタイプのデータを有する複数のテーブルを有する。ネットワークコントローラ２００が論理コントローラとして動作する場合、入力テーブル２１０はLFPデータにマッピングされるのに必要なLCPデータと、UPCPデータにマッピングされるのに必要なLFPデータとを含む。ネットワークコントローラ２００が物理コントローラまたはシャーシコントローラとして動作する場合、入力テーブル２１０はCPCPデータにマッピングされるために必要なUPCPデータを含む。
【００３３】
RE入力テーブル２１０に加え、ネットワークコントローラ２００は、ルールエンジン２２５が自身のテーブルマッピング動作に関する入力をまとめるために用いる、他の様々なテーブル２１５を有している。これらのテーブル２１５は、ルールエンジン２２５がテーブルマッピング動作を実行するために必要な定数の規定値を格納する定数テーブルを含む。例えば、定数テーブル２１５は、値０として規定される定数「ゼロ」、値４０００として規定される定数「dispatch_port_no」、および、値0xFF:FF:FF:FF:FF:FFとして規定される定数「broadcast MAC addr」を含んでよい。
【００３４】
ルールエンジン２２５が定数を参照すると、その定数について規定されている対応値が実際に読み出されて用いられる。さらに、定数テーブル２１５内で定数に対して規定される値は変更および／または更新されてもよい。このようにして、定数テーブル２１５は、ルールエンジン２２５の動作を規定するコードを書き直したり再コンパイルしたりする必要なしに、ルールエンジン２２５が参照する定数に対して規定される値を変更する能力を提供する。テーブル２１５はさらに、出力テーブル２４５にデータを追加する(populate)ために必要な値を算出するためにルールエンジン２２５が必要とする関数を格納する関数テーブルを含む。
【００３５】
ルールエンジン２２５は入力データを出力データに変換するための１方法を指定するテーブルマッピング動作を実行する。ルールエンジン(RE)入力テーブルの１つが変更される都度、ルールエンジンは一連のテーブルマッピング動作を実行し、それによって１つ以上のRE出力テーブル内の１つ以上のデータタプルが変更されうる。一部の実施形態において、ネットワーク制御システムはルールエンジン２２５を作成するために、nLogと呼ばれる、データログデータベース言語の派生物を用いる。データログと同様、nLogは、様々なイベントの発生に応じて実行されるべき様々な動作を開発者が指定することを可能にする、２、３の宣言的ルールと演算子を提供する。一部の実施形態において、nLogは、実行速度を向上させるため、データログが提供する演算子の限定的なサブセットを提供する。例えば、一部の実施形態において、nLogは宣言的ルールにおいて使用可能な演算子をANDに限定する。
【００３６】
図２に示すように、ルールエンジン２２５はイベントプロセッサ２２２と、いくつかのクエリ実行計画(query plan)２２７と、テーブルプロセッサ２３０とを有している。クエリ実行計画の各々は、RE入力テーブルの１つに対する変更が生じた際に実行されるべき結合(join)動作セットを規定するルールセットである。以下の説明では、このような変更を入力テーブルイベントと呼ぶ。各クエリ実行計画は、宣言セット２４０内の１つの宣言的ルールからコンパイラ２３５によって生成される。一部の実施形態において、１つの宣言的ルールから複数のクエリ実行計画が生成される。例えば１つの宣言的ルールによって結合される複数のテーブルの各々に対して１つのクエリ実行計画が生成される。すなわち、宣言的ルールが４つのテーブルの結合を規定する場合、４つの異なるクエリ実行計画が１つの宣言から生成されることになる。一部の実施形態において、クエリ実行計画は、nLog宣言型言語を用いて規定される。
【００３７】
ルールエンジン２２５のイベントプロセッサ２２２は、入力テーブルイベントの各々の発生を検出する。別の実施形態におけるイベントプロセッサは、別の入力テーブルイベントの発生を検出する。一部の実施形態においてイベントプロセッサは、RE入力テーブルのレコードに対する変更を通知するために、RE入力テーブルとともにコールバックを登録する。そのような実施形態において、イベントプロセッサ２２２は、RE入力テーブルから、そのレコードの１つが変更されたことの通知を受信すると、入力テーブルイベントを検出する。
【００３８】
検出された入力テーブルイベントに応答して、イベントプロセッサ２２２は（１）検出されたテーブルイベントに対して適切なクエリ実行計画を選択し、（２）テーブルプロセッサ２３０にそのクエリ実行計画を実行するように命令する。クエリ実行計画を実行するため、一部の実施形態においてテーブルプロセッサ２３０は、入力テーブル２１０および雑テーブル２１５の少なくとも一方からのデータ値セットの１つ以上を表す１つ以上のレコードを生成するために、クエリ実行計画によって規定された結合動作を実行する。一部の実施形態に係るテーブルプロセッサ２３０は、そして（１）結合動作によって生成された１以上のレコードからのデータ値のサブセットを選択するための選択動作を実行し、（２）選択されたデータ値のサブセットを１つ以上のRE出力テーブル２４５に書き込む。
【００３９】
一部の実施形態において、RE出力テーブル２４５は論理および物理ネットワーク要素データ属性の両方を格納する。テーブル２４５は、ルールエンジン２２５のテーブルマッピング動作の出力を格納するため、RE出力テーブル２４５と呼ばれる。一部の実施形態において、RE出力テーブルはいくつかの異なるカテゴリにグループ化されてもよい。例えば、一部の実施形態においてこれらテーブルは、RE入力テーブルおよび／またはコントローラ出力テーブルであってもよい。テーブル内の変更が、クエリ実行計画の実行を必要とする入力イベントをルールエンジンに検出させる場合、そのテーブルはRE入力テーブルである。RE出力テーブル２４５は同時に、ルールエンジンに別のクエリ実行計画を実行させるイベントを発生するRE入力テーブル２１０であってもよい。そのようなイベントは内部入力イベントと呼ばれ、インポータ２２０によるRE入力テーブル変更が引き起こすイベントである外部入力イベントとは大きく異なる。
【００４０】
あるテーブル内の変更が、エクスポータ２５５に別の１つ以上のコントローラまたは１つ以上の管理転送要素に変更をエクスポートさせる場合、そのテーブルはコントローラ出力テーブルである。RE出力テーブル２４５内のテーブルはRE入力テーブルであっても、コントローラ出力テーブルであっても、RE入力テーブル兼コントローラ出力テーブルであってもよい。一部の実施形態において、RE入力テーブルおよびRE出力テーブルは、リレーショナルデータベース管理システム(RDBMS)のテーブルである。これらのテーブルは、ネットワークコントローラの主データ記憶構造であるリレーショナルデータ構造として格納される。
【００４１】
エクスポータ２５５はRE出力テーブル２４５のコントローラ出力テーブルに対する変更を検出する。別の実施形態におけるエクスポータは、別のコントローラ出力テーブルイベントの発生を検出する。一部の実施形態において、エクスポータはコントローラ出力テーブルのレコードに対する変更を通知するため、コントローラ出力テーブルとともにコールバックを登録する。そのような実施形態において、エクスポータ２５５は、コントローラ出力テーブルから、そのレコードの１つが変更されたとの通知を受信すると、出力テーブルイベントを検出する。
【００４２】
検出された出力テーブルイベントに応答して、エクスポータ２５５は変更されたコントローラ出力テーブル内で変更されたデータタプルの一部または全部を取得し、この変更されたデータタプルを他のコントローラまたは管理転送要素に伝達する。具体的には、ネットワークコントローラ２００が論理コントローラとして動作する場合、エクスポータ２５５は、物理コントローラとの間で確立されている通信チャネルセット（例えば遠隔手続呼び出し(RPC)チャネル）を通じてUPCPデータを物理コントローラセットに伝達する。ネットワークコントローラ２００が物理コントローラとして動作する場合、一部の実施形態に係るエクスポータ２５５は、シャーシコントローラとの間で確立されている通信チャネルセットを通じてUPCPデータをシャーシコントローラセットに伝達する。他の実施形態に係るエクスポータ２５５は、管理転送要素の各々との間で確立されている通信チャネルペア（例えば１つのOpenFlowチャネルおよび１つの設定チャネル）を通じてCPCPデータを管理転送要素セットに伝達する。ネットワークコントローラ２００がシャーシコントローラとして動作する場合、一部の実施形態に係るエクスポータ２５５は、管理転送要素の各々との間で確立されている通信チャネルペア（例えば１つのOpenFlowチャネルおよび１つの設定チャネル）を通じてCPCPデータを管理転送要素セットに伝達する。
【００４３】
一部の実施形態においてネットワークコントローラは、自身が管理する必要のないデータを出力テーブル２４５に保持しない。しかし、そのようなデータは変換器２５０によってPTDに格納可能な形式に変換され、PTD２６０に格納される。PTDはネットワークコントローラの二次記憶構造体である。ネットワークコントローラ２００のPTDは、そのデータの管理を受け持つ他のネットワークコントローラがそのデータを管理できるよう、そのデータを１つ以上の他のネットワークコントローラに伝達する。
【００４４】
一部の実施形態において、ネットワークコントローラはさらに、出力テーブル２４５内に格納されているデータ（すなわち、自身が管理を受け持っているデータ）を、データの耐障害性を高めるため、PTDへも格納してもよい。そのようなデータもまた変換器２５０によって変換され、PTDに格納され、他のコントローラインスタンスの他のPTDに伝達される。従って、これらの実施形態において、コントローラインスタンスのPTDはネットワーク制御システムによって管理される全データに対する全ての設定データを有する。すなわち、一部の実施形態において、各PTDは、論理および物理ネットワークの構成についての全体的な知見(global view)を格納している。
【００４５】
インポータ２２０は複数の入力データ源と相互動作し、入力テーブル２１０を変更または生成するために入力データを用いる。一部の実施形態に係るインポータ２２０は、ネットワークコントローラ２００が論理コントローラとして動作する際にユーザ入力をLCPデータに変換する入力変換コントローラ（不図示）を通じて、入力データをユーザ（賃借人(tenant)）から受信する。インポータ２２０は一部の実施形態において、LCPデータを通信チャネルを通じて受信する。
【００４６】
インポータ２２０はさらに、PTDを通じて他のコントローラインスタンスから受信したデータを入力テーブル２１０の変更または生成に用いることができるよう、PTD２６０とも相互動作する。さらに、インポータ２２０はRE入力テーブルおよびRE出力テーブル２４５のコントローラ出力テーブルにおける変化を検出する。生成され出力テーブル２４５に格納されるLFPデータは、ルールエンジン２２５によるUPCPデータ生成のために、インポータ２２０によってルールエンジン２２５にフィードバックされる。
【００４７】
ネットワークコントローラ２００が物理コントローラとして動作する場合、インポータ２２０は、論理コントローラセットとの間で確立されている通信チャネルセットを通じてUPCPデータを論理コントローラセットから取得する。ネットワークコントローラ２００がシャーシコントローラとして動作する場合、インポータ２２０は、物理コントローラセットとの間で確立されている通信チャネルセットを通じてUPCPデータを物理コントローラセットから取得する。
【００４８】
図３は、管理転送要素３１０-３３０にわたって実現される論理転送要素３８０および３９０を概念的に示している。図の上半分は３つの管理転送要素３１０-３３０およびエンドマシン３４０-３６５を示している。図示するように、マシン３４０，３５０および３６０はユーザＡに属し、マシン３４５，３５５および３６５はユーザＢに属している。図示および説明を簡単にするため、本図では、論理転送要素が少数のエンドマシンに接続され、少数の管理転送要素で実現される構成を示している。上述の通り、論理転送要素は多数のエンドマシンに接続され、多数の管理転送要素で実現されてよい。
【００４９】
一部の実施形態に係る管理転送要素３１０-３３０は、ネットワークデータ（例えばパケット、フレームなど）を、管理転送要素３１０-３３０に接続されるネットワーク内のネットワーク要素間で転送する。図示の通り、管理転送要素３１０はマシン３４０、３４５と、転送要素３２０との間でネットワークデータを転送する。同様に、転送要素３２０はマシン３５０と管理転送要素３１０，３３０との間でネットワークデータを転送し、転送要素３３０はマシン３５５-３６５と転送要素３２０との間でネットワークデータを転送する。
【００５０】
さらに、管理転送要素３１０-３３０の各々は、一部の実施形態においてテーブルの形式を有する、転送要素の転送ロジックに基づいて、ネットワークデータを転送する。一部の実施形態において転送テーブルは、ネットワークデータをどこへ転送するか（例えば転送要素上のポート）を、転送条件に従って決定する。例えば、レイヤ２転送要素の転送テーブルは、ネットワークデータをどこへ転送するかを、MACアドレス（例えば送信元MACアドレスおよび／または宛先MACアドレス）に基づいて決定してよい。別の例として、レイヤ３転送要素の転送テーブルは、ネットワークデータをどこへ転送するかを、IPアドレス（例えば送信元IPアドレスおよび／または宛先IPアドレス）に基づいて決定してよい。他の多数の転送条件が考えられる。
【００５１】
図示の通り、管理転送要素３１０-３３０の各々における転送テーブルは数個のレコードを有している。一部の実施形態において、各レコードは転送条件に基づくネットワークデータの転送動作を規定する。レコードは管理転送要素３１０-３３０を通じたデータの「流れ」を制御するため、一部の実施形態においてフローエントリと呼ばれてよい。
【００５２】
図３の下半分はユーザの論理ネットワークの概念的な表現を示している。図示の通り、ユーザＡの論理ネットワーク３８０は、ユーザＡのマシン３４０，３５０および３６０が接続された論理転送要素３８５を有している。ユーザＢの論理ネットワーク３９０は、ユーザＢのマシン３４５，３５５および３６５が接続された論理転送要素３９５を有している。従って、ユーザＡの観点からすると、ユーザＡはユーザＡのマシンだけが接続された転送要素を有し、ユーザＢの観点からすると、ユーザＢはユーザＢのマシンだけが接続された転送要素を有している。換言すれば、各ユーザは、自身のマシンだけを有する自身のネットワークを有している。
【００５３】
以下、マシン３４０からマシン３５０へ宛てて送信されたネットワークデータおよびマシン３４０からマシン３６０へ宛てて送信されたネットワークデータのフローを実現するための概念的なフローエントリについて説明する。まず、マシン３４０からマシン３５０へ宛てて送信されたネットワークデータを転送するためのフローエントリについて説明した後、マシン３４０からマシン３６０へ宛てて送信されたネットワークデータを転送するためのフローエントリについて説明する。
【００５４】
管理転送要素３１０の転送テーブル内のフローエントリ「A1からA2」は、管理転送要素３１０に、マシン３１０を送信元としたマシン３５０宛のネットワークデータを転送要素３２０に転送するよう命令する。管理転送要素３２０の転送テーブル内のフローエントリ「A1からA2」は、管理転送要素３２０に、マシン３１０を送信元としたマシン３５０宛のネットワークデータをマシン３５０に転送するよう命令する。
【００５５】
管理転送要素３１０の転送テーブル内のフローエントリ「A1からA2」は、管理転送要素３１０に、マシン３１０を送信元としたマシン３５０宛のネットワークデータを転送要素３２０に転送するよう命令する。管理転送要素３２０の転送テーブル内のフローエントリ「A1からA3」は、管理転送要素３２０に、マシン３４０を送信元としたマシン３６０宛のネットワークデータを転送要素３３０に転送するよう命令する。管理転送要素３３０の転送テーブル内のフローエントリ「A1からA3」は、管理転送要素３３０に、マシン３４０を送信元としたマシン３６０宛のネットワークデータをマシン３６０に転送するよう命令する。
【００５６】
マシン３４０を送信元としたマシン３５０宛のネットワークデータと、マシン３４０を送信元としたマシン３６０宛のネットワークデータを転送させるための概念的なフローエントリについて説明したが、ユーザＡの論理ネットワーク３８０内の他のマシン間でネットワークデータを転送するために、同様のフローエントリが管理転送要素３１０-３３０の転送テーブルに含まれるであろう。さらに、同様のフローエントリが、ユーザＢの論理ネットワーク３９０内のマシン間でネットワークデータを転送するために、管理転送要素３１０-３３０の転送テーブルに含まれるであろう。
【００５７】
図３に示した概念的なフローエントリは、パケットを送信すべき次ホップの転送要素を管理転送要素が解明するために、送信元および宛先情報の両方を含んでいる。しかし、一部の実施形態に係る管理転送要素は宛先情報（例えば宛先アドレスなど）だけを用いて次ホップの転送要素を解明することができるため、送信元情報はフローエントリに含まれなくてもよい。
【００５８】
一部の実施形態において、管理転送要素３１０-３３０にわたる論理転送要素３８５および３９５の実装を容易にするため、トンネリングプロトコル（例えばCAPWAP (control and provisioning of wireless access points)、GRE (generic forward encapsulation)、IPsec (GRE Internet Protocol Security)など）によって提供されるトンネルが用いられてよい。トンネリングによりパケットは、転送要素を通じ、別のパケットのペイロードとして送信される。すなわち、トンネリングされたパケットは、それをカプセル化している外側パケットのヘッダに含まれるアドレスに基づいて転送されるため、自身のアドレス（例えば送信元および宛先MACアドレス）をさらす必要がない。従って、外側パケットが物理アドレス空間内のアドレスに基づいて転送される間、トンネリングされたパケットは論理アドレス空間において意味のあるアドレスを有することができるため、トンネリングは論理アドレス空間と物理アドレス空間とを分離することを可能にする。このように、トンネルは論理転送要素３８５および３９５を実現するために管理転送要素を接続する「論理配線」として見ることができる。
【００５９】
転送要素セットにわたって複数の論理転送要素を実現するために上述した様々な方法で転送要素を設定することにより、複数のユーザが実際には同じ転送要素セットおよび／または転送要素セット間のコネクション（例えばトンネル、物理的配線）を共有しながら、個々のユーザの観点からはそれぞれが独立したネットワークおよび／または転送要素を有することが可能になる。
【００６０】
図３は論理転送要素を管理転送要素セットで実現する例を示したが、管理転送要素の転送テーブルを設定することにより、（例えばいくつかの論理的L3転送要素を含むような）より複雑な論理ネットワークを実現することも可能である。図４は、より複雑な論理ネットワークの一例を概念的に示している。図４は、３つの論理転送要素、論理ルータ４２５および論理スイッチ４２０，４３０を実現する、一部の実施形態に係るネットワークアーキテクチャ４００を示している。具体的には、ネットワークアーキテクチャ４００は論理ルータ４２５および論理スイッチ４２０，４３０によってデータパケットが転送される論理ネットワークを実現する物理ネットワークを表している。図の上半分は論理ルータ４２５および論理スイッチ４２０，４３０を示している。また、図の下半分は管理転送要素４５５，４６０を示している。さらに、上半分および下半分の両方に、エンドマシン（例えば仮想マシン(VM)）１-４を示している。
【００６１】
この例において、論理スイッチ要素４２０は論理ルータ４２５，エンドマシン１、およびエンドマシン２の間でデータパケットを転送する。論理スイッチ要素４３０は論理ルータ４２５，エンドマシン３、およびエンドマシン４の間でデータパケットを転送する。上述の通り、論理ルータ４２５は、論理スイッチ４２０，４３０と他の論理ルータ並びにスイッチ（不図示）との間でデータパケットをルーティングする。論理スイッチ４２０，４３０および論理ルータ４２５は論理ポート（不図示）を通じて論理的に接続され、論理ポートを通じてデータパケットを交換する。これらの論理ポートは管理転送要素４５５および４６０の物理ポートにマッピングまたはアタッチされている。
【００６２】
一部の実施形態において、論理ルータは管理ネットワーク内の各管理スイッチ要素で実現される。管理スイッチ要素が自身に接続されたマシンからパケットを受信すると、管理スイッチ要素は論理ルーティングを実行する。つまり、これらの実施形態では、あるパケットに関する第１ホップスイッチ要素である管理スイッチ要素が、論理ルーティングを実行する。
【００６３】
本例において、管理転送要素４５５および４６０はそれぞれホスト４６５および４７０で稼動するソフトウェアスイッチである。管理転送要素４５５および４６０は、それらがエンドマシン１-４から受信するパケットを転送及びルーティングするための論理スイッチ４２０および４３０を実現するフローエントリを有する。このフローエントリは論理ルータ４２５も実現する。これらのフローエントリを用いて、管理転送要素４５５および４６０は、ネットワーク内のネットワーク要素であって、自身に接続されているネットワーク要素間でパケットを転送およびルーティングすることができる。
【００６４】
図示の通り、管理転送要素４５５および４６０の各々は、自身に接続されているネットワーク要素とデータパケットを交換するための３つのポート（例えば仮想インタフェース(VIF)）を有している。これら実施形態におけるデータパケットは、管理転送要素４５５と４６０との間で確立されているトンネル（例えば、管理スイッチ要素４５５のポート３と管理スイッチ要素４６０のポート６とを端点とするトンネル）を通じてやりとりされることもある。このトンネルは、論理空間内のアドレスと物理空間内のアドレスとを分離することを可能にする。
【００６５】
本例において、ホスト４６５および４７０は１つの管理スイッチ要素といくつかのエンドマシンを有している。エンドマシン１-４のそれぞれにはネットワークアドレスセット（例えば、L2用のMACアドレス、L3用のIPアドレスなど）が割り当てられており、他のネットワーク要素との間でネットワークデータを送受信することができる。エンドマシンはホスト４６５および４７０で稼動するハイパーバイザ（不図示）によって管理される。エンドマシン１および２は、同じ論理スイッチ４２０の論理ポート１および２にそれぞれ関連付けられている。しかし、マシン１は管理スイッチ要素４５５のポート４に関連付けられており、マシン２は管理スイッチ要素４６０のポート７に関連付けられている。そのため、論理ポート１および２はそれぞれポート４および７にマッピングされるが、このマッピングはネットワーク内のどのネットワーク要素（不図示）にも開示しなくてよい。これは、このマッピング情報を含んだパケットが、そのパケットをペイロードとして搬送する外側パケットの外側ヘッダに基づき、トンネルを通じてエンドマシン１と２の間で交換されるからである。
【００６６】
ネットワーク制御システムおよび、物理的インフラストラクチャにおける論理ネットワークの実現について説明してきた。以下のセクションIIでは、更新された転送状態の管理転送要素へのトランザクション的な伝達について説明する。
【００６７】
II．トランザクション性の利用
ネットワーク構成が変化した後、転送状態を更新（すなわち、以前算出した状態から新たに算出した状態へ移行）するためには解決すべきいくつかの課題がある。いくつかの解決策を以下に説明する。これらの解決策は問題を２つの次元、正確さと効率、という観点で検討している。すなわち、これら解決策は、更新前後だけでなく更新中においても、その時点でネットワークに存在する状態が、ネットワークポリシに正しく準拠することをどのようにして保証できるのか、を検討している。効率という点に関し、これらの解決策は、潜在的に大きな状態更新のコストをどのようにして最小限に抑えることができるかを検討している。
【００６８】
以下の議論において、ネットワーク制御システムは、ネットワーク転送要素を管理するために、転送要素に関する転送状態を算出する中央集中型のコントローラ群を有している。さらに、以下の議論において「ネットワークポリシ」は、セキュリティポリシに限らず、ネットワークトラフィックをどのようにルーティングするかに関するポリシや、物理（または論理）ネットワーク構成など、設定や構成に関する任意の観点を含む。従って、この議論において、「ポリシ」はユーザ設定入力に関する全てについて用いられる。
【００６９】
Ａ．トランザクションの要件
転送状態はパケットに対して作用する。１つのパケットは、新旧のポリシを表す状態が混在したものではなく、１つの一貫したポリシに従って転送されることが必須である。１つのパケットが新旧両方のポリシで取り扱われないように旧バージョンから新バージョンへの遷移が起こる以上、後続のパケットは別バージョンのポリシで処理されうる。
【００７０】
新しいポリシへのアトミック遷移の要件は、転送状態に対する更新がトランザクション的に行われなければならないことを暗に示す。しかし、上述の通り、ネットワーク転送状態の全てを同時にアトミック的に更新しなければならないということではない。特に、一部の実施形態に係るネットワーク制御システムは、この要件を２つの観点において緩和している。第１に、ある送信元（ソース）から１つ以上の宛先へのパケットストリームに関しては、どの時点で古いポリシから新しいポリシに変化するかを指定することはあまり重要でない。古いポリシと新しいポリシの両方に従って転送されるパケットが存在しないことだけが必須である。各パケットは、古いポリシまたは新しいポリシのいずれかに従って転送されねばならない。第２に、一部の実施形態に係るネットワーク制御システムは、異なる場所からネットワークに入る異なるパケットストリームに対し、過渡的に異なるポリシが適用されることを許容する。繰り返すが、これらの実施形態では１つのパケットには１つのポリシだけが適用され、新旧ポリシの両方が適用されないことだけが要求される。
【００７１】
Ｂ．トランザクション的更新の実現
これら要件と緩和の条件下におけるトランザクション的更新の実現について検討する。M. Reitblattらの”Consistent Updates for Software -Defined Networks: Change You Can Believe in!” Proceedings of the 10th ACM Workshop on Hot Topics in Networks, p.1-6, 2011年11月14-15日, ケンブリッジ, マサチューセッツ（以下、Reitblatt文献と呼ぶ）には、ネットワークの入口において、そこで使われている転送状態のバージョンを用いてパケットにタグ付けすることが提案されている。従って、パケットがネットワーク内を進行する際、後続のネットワーク要素はどのバージョンが用いられているかを知ることになる。これにより、トランザクション的な、ネットワーク全体にわたるネットワーク転送状態の更新が効率的に実現される。
【００７２】
しかし、この手法にはいくつかの実現上の課題が存在する。第１に、ネットワークのスライシングを想定しないと、ネットワークに対する更新を数回に分けて行う(serialize)必要がある。つまり、ネットワーク全体を特定のバージョンのために準備する必要があり、その後、準備が完了したバージョンを用いるように入口を更新した後でないと、次のバージョンへの準備を開始できない。
【００７３】
第２に、パケットが明示的なバージョンタグを有する必要があるため、タグを割り当てるための十分なビット数がパケットヘッダのどこかに必要となる。従前のトンネリングプロトコルを用いてネットワークが動作する必要がある場合、ヘッダにそのようなタグ用の空きビットを見つけるのは困難であろう。
【００７４】
従って、Reitblatt文献に記載されるようなネットワーク全体にわたるトランザクション的な更新は強力ではあるが、理想的には回避すべき実用上の課題を有している。従って、Reitblatt文献に記載されているこの手法の代わりに、一部の実施形態に係るネットワーク制御システムは管理転送要素のネットワーク縁部への配置を活用する。セクションＩで説明したように、一部の実施形態に係るネットワーク制御システムは、論理転送の決定（すなわち、どの１以上の論理ポートがパケットを受信すべきかの決定）を第１ホップで実行する。その後の段階は、この転送決定に基づいて、選択された宛先へ向けて単にパケットを転送するに過ぎない。
【００７５】
図５は、第１ホップで論理転送の決定を行う、ネットワーク制御システムのネットワークコントローラ群５０５を概念的に示している。具体的には、この図はネットワークコントローラ群５０５が転送状態更新を第１ホップ管理転送要素にのみ送信することを、４つの異なる段階５０１-５０４で示している。ネットワークコントローラ群５０５は、転送状態を生成し、更新し、管理転送要素(MFE)５１０に伝達する論理コントローラおよび物理コントローラ（不図示）を有する点において図１を参照して説明したネットワークコントローラ群１０５と類似している。管理転送要素５１０は、エンドマシン５４０を送信元とするデータに関する第１ホップ転送要素である。つまり、管理転送要素５１０はエンドマシン５４０と直接相互動作し、エンドマシン５４０からのデータをその宛先へ向けて転送する。転送要素５１５-５３５は１組のエンドマシン５４０-５５０の間でデータを転送する。
【００７６】
第１段階５０１で管理転送要素５１０は、エンドマシン５４０からのネットワークデータ（不図示）を、転送要素が有する現在の転送状態（古い状態）に基づいて転送する。具体的には、エンドマシン５４０からエンドマシン５４５に送信されたパケットについてコントローラ群が規定した経路は、図に実線で示すように、転送要素(FE)５１０，５１５，および５２０にまたがっている。また、段階５０１において、コントローラ群５０５は（例えば不図示の入力トランザクションコントローラを通じて）ユーザから転送状態に対する更新を受信する。この更新は新しいネットワークポリシ（例えば、異なる許容帯域幅を規定する新たなQoSポリシや、ある仮想マシン(VM)から、新たに提供された他の仮想マシンへの新しい経路など）を表している。
【００７７】
第２段階５０２において、コントローラ群５０５は（例えば入力LCPデータをUPCPまたはCPCPデータに変換することにより）転送状態更新を算出する。一部の実施形態において、コントローラ群５０５は論理転送要素を実現する全ての管理転送要素を特定する。具体的には、論理転送要素の論理入口ポートおよび論理出口ポートにマッピングされている第１の物理ポートから第２の物理ポートへ転送されようとしているパケットの経路について、コントローラ群５０５は第１の物理ポートを有する転送要素（例えば第１ホップ転送要素）および第２の物理ポートを有する転送要素（例えば最終ホップ転送要素）を特定する。
【００７８】
段階５０２において、更新された転送状態は、エンドマシン５４０から送信されたエンドマシン５５０宛のパケットに関する新たな経路を有している。ここで、エンドマシン５５０は、古い転送状態が算出されてそのネットワーク転送要素に伝達された後にネットワークに追加されたエンドマシンである。この新しい経路に関し、管理転送要素５１０は第１ホップ管理転送要素であり、転送要素５２０は最終ホップ転送要素である。転送要素５１５は、パケットを最終ホップ管理転送要素５３５へ向けて転送する複数の「中間」管理または非管理転送要素の１つである。
【００７９】
コントローラ群５０５はユーザによる更新の影響を受ける全ての経路について、更新された転送状態情報を算出し、それら経路の各々について、第１ホップ管理転送要素を特定する。段階５０２において、コントローラ群５０５は管理転送要素に、経路の第１ホップ管理転送要素についての更新された転送状態情報を送信する。図を簡単にするため、段階５０２では、管理転送要素５１０から始まる経路についての新旧の転送状態を示している。管理転送要素５１０はそれら経路に関する新旧の転送状態を有している。管理転送要素５１０は新しい転送状態をまだ用いず、古い転送状態に基づいてパケットを転送する。
【００８０】
一部の実施形態において、第１ホップ転送要素である管理転送要素は、新しい転送状態を受信すると新しい転送状態を使い始める。しかし、一部の実施形態においてコントローラ群５０５は管理転送要素に、第１ホップ転送要素としてパケットを転送するために更新された転送状態を用いるようにコマンドを送信する。第３段階５０３において、コントローラ群５０５はそのようなコマンドを管理転送要素５１０に送信する。管理転送要素５１０は自身を基点とする経路についての第１ホップ転送要素として、新しい転送状態を用いる。エンドマシン５４０からエンドマシン５５０へ送信されたパケットに対する新しい経路について、管理転送要素５１０はそのパケットを新しい転送状態に基づいて転送できるようになる。非第１ホップ転送要素は新しい転送状態を必要とせず、取得しないので、これら実施形態におけるパケットは、非第１ホップ転送要素が新しい転送状態を用いなければならないことを通知するためのバージョン情報を搬送する必要がない。
【００８１】
第４段階５０４において、管理転送要素５１０-５３５は古い転送状態を削除する。一部の実施形態においてコントローラ群５０５は、新しい転送状態を受信してから所定時間経過後に古い転送状態を削除するように管理転送要素を設定する。別の実施形態においてコントローラ群５０５は、古い転送状態を削除するよう、管理転送要素にコマンドを送信する。
【００８２】
図６は、一部の実施形態が、転送状態を更新し、管理転送要素へ送信するために実行する手順６００を概念的に示す図である。具体的には、手順６００は、全ての論理転送の決定が第１ホップ管理転送要素で実行される実施形態に関するものである。一部の実施形態において手順６００は図１および図５のコントローラ群１０５および５０５のようなコントローラ群（不図示）によって実行される。
【００８３】
手順６００は、コントローラ群によって管理される管理転送要素の転送状態を更新する入力を（６０５で）受信することによって開始する。転送状態に対するこれらの更新は少なくとも３つの理由により発生しうる。第１に、論理パイプラインによって実行されるネットワークポリシが（例えばアクセス制御リストを更新することにより）ユーザによって再設定されたことによって論理ポリシが変化する場合、転送状態が変化する。第２に、処理負荷の運用変更によって転送状態が変化する。例えば、仮想マシンが第１ノードから第２ノードに移転した場合、論理的ビューは不変のままである。しかし、仮想マシンがアタッチしている論理ポートの物理的位置が変わるため、この移転により、転送状態は更新が必要となる。第３に、管理転送要素の追加、除去、アップグレードおよび再構成といった、物理的な再構成イベントによって転送状態が変化する場合がある。
【００８４】
次に、手順６００は受信した入力に基づいて、更新された転送状態を算出（６１０）する。この算出には、LCPデータからLFPデータへの変換および、LFPデータからUPCPまたはCPCPデータへの変換が含まれる。更新されたLCPデータはいくつかの論理転送要素に影響しうる。つまり、論理的経路（すなわち、影響を受ける論理転送要素の論理ポートの多数の対間の多数の論理的経路）が削除されたり、追加されたり、変更されたりすると、それらの影響をうける論理的経路を実現するための物理的経路もまた除去されたり、追加されたり、変更されたりする。
【００８５】
一部の実施形態において、これら影響を受ける論理転送要素の論理転送動作は、第１ホップ管理転送要素によってのみ実行される。例えば、第１論理スイッチの論理的L2転送動作と、論理ルータの論理的L3ルーティングと、論理ルータによってルーティングされたパケットを取得する第２論理スイッチの論理的L2転送動作とを実行するように、コントローラ群が、第１ホップ管理転送要素を設定する。従って、これら実施形態における手順６００が算出する転送状態は、第１ホップ転送要素に関するものだけである。これら経路についての中間および最終ホップ転送要素は、パケットを宛先マシンへ転送する構成として用いられる。従って、転送状態が、管理転送要素でパケットにバージョン情報を追加させることはない。
【００８６】
次に手順６００は管理転送要素が第１ホップ転送要素として動作するための更新された転送状態を算出（６１０）する。そして手順６００は、更新された転送状態を管理転送要素に送信（６１５）する。これにより、管理転送要素は、古い転送状態と更新された転送状態の両方を有するようになる。
【００８７】
必要に応じて手順６００は、管理転送要素から古い転送状態を削除するよう、管理転送要素にコマンドを送信（６２５）する。一部の実施形態では、新しい転送状態へ切り替えるための明示的なコマンドを送信する代わりに、コントローラ群は、管理転送要素が新しい転送状態を受信するとすぐに古い転送状態を新しい転送状態で置き換えるか、古い転送状態を削除するように管理転送要素を設定する。あるいは、またはそれと組み合わせて、コントローラ群は、管理転送要素にコマンドを送信する代わりに、新しい転送状態を受信してから所定時間経過後に古い転送状態を削除するように管理転送要素を設定する。そして、手順は終了する。
【００８８】
図６は一部の実施形態に係るネットワークコントローラ群が実行する手順６００を示したが、図７は、一部の実施形態に係る管理転送要素が実行する手順を示している。図７は、一部の実施形態がデータを転送するために実行する手順７００を概念的に示している。手順７００は、第１ホップ転送要素として動作するための転送状態を用いる管理転送要素によって実行される。
【００８９】
手順は、現在の転送状態（古い転送状態）を用いて入来パケットを転送する（７０５）ことによって開始される。入来パケットは、管理転送要素が直接相互動作するエンドマシンからのものである。転送状態はコントローラ群または管理転送要素を管理しているシャーシコントローラから転送状態を管理転送要素に送信することにより、受信される。
【００９０】
次に、手順７００は、更新された転送状態をコントローラ群から受信（７１０）する。この転送状態はコントローラ群によって更新されており、LCPデータから変換されたCPCPデータを含んでいる。一部の実施形態においてコントローラは、非第１ホップ転送要素として動作する管理転送要素が更新された転送状態を受信した後で、第１ホップ管理転送要素に更新された転送状態を送信する。これにより、管理転送要素は、古い転送状態と更新された転送状態の両方を有するようになる。
【００９１】
そして、手順７００は、入来データの転送に、更新された転送状態の使用を開始するように、コントローラ群からコマンドを受信（７１５）する。コマンドを受信すると、一部の実施形態に係る第１ホップ管理転送要素は、古い転送状態を更新された転送状態に切り替える。一部の実施形態において、このコマンドは暗示的なものであってよい。つまり、第１ホップ管理転送要素は、新しい転送状態へ切り替えるための明示的なコマンドを受信することなく、新しい転送状態が第１ホップ管理転送要素にインストールされるとすぐに新しい転送状態を使用する。
【００９２】
そして手順７００は、更新された転送状態を用いて入来パケットを転送（７２０）する。第１ホップ管理転送要素からパケットを取得した非第１ホップ管理転送要素は、それらパケットを転送するために更新された転送状態を用いるであろう。一部の実施形態において、手順７００は、非第１ホップ管理転送要素が第１ホップ管理転送要素からのパケットを転送するために新しい転送状態を選択できるよう、バージョン情報をパケットに追加する。
【００９３】
７２５において手順７００は、古い転送状態を削除するためのコマンドをコントローラ群から必要に応じて受信する。一部の実施形態において、管理転送要素は古い転送状態を削除するための明示的なコマンドを受信しない。代わりに、管理転送要素はコントローラ群によって、更新された転送状態を受信してから所定時間経過後に古い転送状態を削除するように設定される。そして手順７００は古い転送状態を削除（７３０）する。そして、手順は終了する。
【００９４】
セクションＩで説明したように、一部の実施形態に係るネットワーク制御システムは、論理転送の決定（すなわち、どの１以上の論理ポートがパケットを受信すべきかの決定）を第１ホップならびに非第１ホップで実行させる。これら実施形態の一部において、ネットワークにわたるトランザクション的な更新は、（１）第１ホップ管理転送要素のトランザクション的な更新と、（２）第１ホップ管理転送要素から最終ホップ管理転送要素への、ネットワークを通じた経路のトランザクション的更新とに分かれる。これら２つが実現できれば、全体的なトランザクションが提供できる。つまり、第１ホップを新しいポリシによって更新する前に、新たに必要となる経路を準備することにより、全体的な状態更新がアトミックになる。これら２つのステップの後、新たな第１ホップ状態設定に不要なネットワーク経路を削除することができる。
【００９５】
図８はこの２段階手法を採用したネットワーク制御システムのネットワークコントローラ群を概念的に示している。具体的には、この図はネットワークコントローラ群８０５が転送状態更新を管理転送要素の２つのグループに２パートで送信することを、４つの異なる段階８０１-８０４で示している。ネットワークコントローラ群８０５は、転送状態を生成し、更新し、管理転送要素セット８１０-８３５に伝達する論理コントローラおよび物理コントローラ（不図示）を有する点において図１を参照して説明したネットワークコントローラ群１０５と類似している。管理転送要素８１０-８３５はネットワークデータ（不図示）を、ネットワークコントローラ群８０５から受信した転送状態に基づいて、エンドマシンセット８４０-８５０の間で転送する。
【００９６】
第１段階８０１で管理転送要素８１０-８３５は、ネットワークデータ（不図示）を、管理転送要素が有する現在の転送状態（古い状態）に基づいて転送する。具体的には、エンドマシン８４０からエンドマシン８４５に送信されたパケットについてコントローラ群が規定した経路は、図に実線で示すように、管理転送要素(MFE)８１０，８１５，および８２０にまたがっている。また、段階８０１において、コントローラ群８０５は（例えば不図示の入力トランザクションコントローラを通じて）ユーザから転送状態に対する更新を受信する。この更新は新しいネットワークポリシ（例えば、異なる許容帯域幅を規定する新たなQoSポリシや、ある仮想マシン(VM)から、新たに提供された他の仮想マシンへの新しい経路など）を表している。
【００９７】
第２段階８０２において、コントローラ群８０５は（例えば入力LCPデータをUPCPまたはCPCPデータに変換することにより）転送状態更新を算出する。一部の実施形態において、コントローラ群８０５は論理転送要素を実現する全ての管理転送要素を特定する。具体的には、論理転送要素の論理入口ポートおよび論理出口ポートにマッピングされている第１の物理ポートから第２の物理ポートへ転送されようとしているパケットの経路について、コントローラ群８０５は第１の物理ポートを有する転送要素（例えば第１ホップ転送要素）および第２の物理ポートを有する転送要素（例えば最終ホップ転送要素）を特定する。そして、この経路についてコントローラ群８０５は、第１ホップ管理転送要素を１つのグループに、最終ホップ管理転送要素とこのパケット経路中に存在する他の管理転送要素とを別のグループに分類する。
【００９８】
例えば、更新された転送状態は、エンドマシン８４０から送信されたエンドマシン８５０宛のパケットに関する新たな経路を有している。ここで、エンドマシン５５０は、古い転送状態が算出されてそのネットワーク転送要素に伝達された後にネットワークに追加されたエンドマシンである。この新しい経路に関し、管理転送要素８１０は第１ホップ管理転送要素であり、管理転送要素８２０は最終ホップ転送要素である。管理転送要素８１５は、パケットを最終ホップ管理転送要素８３５へ向けて転送する複数の「中間」管理または非管理転送要素（不図示）の１つである。
【００９９】
コントローラ群８０５はユーザによる更新の影響を受ける全ての経路について、更新された転送状態情報を算出し、それら経路の各々について、第１ホップ管理転送要素と非第１ホップ管理転送要素を特定する。段階８０２において、コントローラ群８０５は非第１ホップ管理転送要素に、更新された転送状態を送信する。図を簡単にするため、段階８０２では、管理転送要素８１０から始まる経路についての新旧の転送状態を示している。従って、これら経路に関し、管理転送要素８１０は古い転送状態のみを有し、他の管理転送要素は古い転送状態と新しい転送状態の両方を有している。管理転送要素８２０は宛先マシン８５０に向けてパケットを転送するための転送状態を有していない（すなわち、論理出口ポートおよび管理転送要素８５０の物理ポートとの間のマッピングが、第１ホップ転送要素８１０に存在しない）ため、エンドマシン８４０からエンドマシン８５０へ送信されるパケットに関する新たな経路について、第１ホップ管理転送要素８２０はまだパケットを正しく転送することができない。
【０１００】
第３段階８０３において、コントローラ群８０５は全経路について第１ホップ転送要素用に算出された更新を送信する。これにより、管理転送要素８１０は自身を基点とする経路についての第１ホップ転送要素として機能するための新しい転送状態を有するようになる。そして、エンドマシン８４０からエンドマシン８５０へ送信されたパケットに対する新しい経路について、管理転送要素８１０はそのパケットを新しい転送状態に基づいて正しく転送できるようになる。
【０１０１】
一部の実施形態において、第１ホップ転送要素である管理転送要素は、新しい転送状態を受信すると新しい転送状態を使い始める。しかし、一部の実施形態においてコントローラ群８０５は管理転送要素に、第１ホップ転送要素としてパケットを転送するために更新された転送状態を用いるようにコマンドを送信する。
【０１０２】
一部の実施形態において、送信元マシンから直接受信するパケットに対して第１ホップ転送要素として動作する管理転送要素は、バージョン情報をそれらパケットに付加する。一部の実施形態において管理転送要素は、パケットの特定のバイナリビットをバージョンインジケータとして用いるか、バージョン情報を格納するために各パケットに２ビット以上追加する。これら実施形態の一部において、このバージョンビットは、管理転送要素が転送状態更新の新しいバージョンに切り替わるたびにその値が入れ替わる。そして、非第１ホップ管理転送要素は、パケットが搬送するバージョン情報に基づいて、古い転送状態または新しい転送状態を用いる。このようにして、特定のパケットは、新旧両方の転送状態に基づいてではなく、古い転送状態と新しい転送状態の一方に基づいて転送される。
【０１０３】
第４段階８０４において、管理転送要素８１０-８３５は古い転送状態を削除する。一部の実施形態においてコントローラ群８０５は、新しい転送状態を受信してから所定時間経過後に古い転送状態を削除するように管理転送要素を設定する。別の実施形態においてコントローラ群８０５は、古い転送状態を削除するよう、管理転送要素にコマンドを送信する。
【０１０４】
図８における４つの段階８０１-８０４は、古い経路１つと新しい経路１つの更新について示されている。論理転送要素を実現するために他の多くの経路が規定されうるため、コントローラ群８０５および管理転送要素８１０-８３５は４つの段階８０１-８０４に関して説明した２段階処理を、ユーザの更新による影響を受ける全ての経路について実行する。次の図である図９は、一部の実施形態が、更新または生成された全ての経路に関する管理転送要素へ更新を送信するために実行する手順９００を概念的に示す図である。一部の実施形態において手順９００は図１および図８のコントローラ群１０５および８０５のようなコントローラ群（不図示）によって実行される。
【０１０５】
手順９００は、コントローラ群によって管理される管理転送要素の転送状態を更新する入力を受信（９０５）することによって開始する。転送状態に対するこれらの更新は、上述した３つの理由によって発生しうる。
【０１０６】
次に、手順９００は受信した入力に基づいて、更新された転送状態を算出（９１０）する。この算出には、LCPデータからLFPデータへの変換および、LFPデータからUPCPまたはCPCPデータへの変換が含まれる。更新されたLCPデータは、論理的L2スイッチおよび論理的L3ルータを含む、いくつかの論理転送要素に影響を与えうる。つまり、論理的経路（すなわち、影響を受ける論理転送要素の論理ポートの多数の対間の多数の論理的経路）が削除されたり、追加されたり、変更されたりすると、それらの影響をうける論理的経路を実現するための物理的経路もまた除去されたり、追加されたり、変更されたりする。従って、更新された転送状態は、影響を受ける全ての物理的経路に関する第１ホップ転送要素および非第１ホップ管理転送要素の両方に対するものである。
【０１０７】
そして手順９００は、管理転送要素用が非第１ホップ管理転送要素として動作するための新しい転送状態を特定（９１５）する。この転送状態は、入力によって影響を受ける経路中に存在するが、その経路の第１ホップ管理転送要素ではない管理転送要素用である。
【０１０８】
一部の実施形態においては、第１ホップ管理転送要素と最終ホップ管理転送要素だけが転送状態の更新を必要とする。これら実施形態の一部において、入力によって影響を受ける論理転送要素は、第１ホップ管理転送要素と最終ホップ管理転送要素だけで実現される。例えば、第１論理スイッチの論理的L2転送動作（例えばパケットをそのMACアドレスに基づいて論理的に転送する）と、論理ルータの論理的L3ルーティング（例えばパケットをそのIPアドレスに基づいて論理的にルーティングする）とを実行するように、コントローラ群が、第１ホップ管理転送要素を設定する。コントローラ群は、論理ルータによってルーティングされたパケットを取得する第２論理スイッチの論理的L2転送動作を実行するように最終ホップ管理転送要素を設定する。これらの実施形態において、（９１５で）特定される新しい転送状態は、影響を受ける経路の最終ホップ管理転送要素用である。これら経路の中間に存在する転送要素は、第１ホップ管理転送要素と最終ホップ管理転送要素とを接続する構成して用いられる。９１５で手順９００はさらに、非第１ホップ管理転送要素用に特定された転送状態を非第１ホップ管理転送要素に送信する。
【０１０９】
そして手順９００は、管理転送要素用が第１ホップ管理転送要素として動作するための新しい転送状態を特定（９２０）する。この転送状態は、入力によって影響を受ける経路中の第１ホップ管理転送要素である管理転送要素用である。９２０で手順９００はさらに、第１ホップ管理転送要素用に特定された転送状態を第１ホップ管理転送要素に送信する。
【０１１０】
一部の実施形態において、転送状態の更新は全体的に順序立てて行われなくてもよい。第１ホップ要素ごとの更新が順次行われることだけが必要である。すなわち、転送状態の更新を必要とする第１ホップ要素が複数存在する場合、それらの更新は並列かつ独立して進めることができる。算出だけがトランザクション的に行われればよい。
【０１１１】
一部の実施形態において、ネットワーク制御システムは、経路の非第１ホップ転送要素用の転送状態があまりにも変化し、新旧の経路が混ざってしまうかもしれないような場合には、ネットワーク全体の状態を更新するためにReitblatt文献に記載された手法を用いる。例えば、経路ラベルのアドレス指定方法が（ネットワークコントローラの）ソフトウェアバージョン間で変わった場合にこのようなことが起こりうる。この種の状況のためにコントローラ群は、経路アドレス指定の構造を必要に応じて変更できるよう、経路ラベル／アドレスの先頭の１ビット（または数ビット）をネットワーク全体のバージョンビットとして確保しておく。しかしながら、ラベル／アドレス構造が変化しない限り、新しい経路を追加し、経路の残りの準備ができてから第１ホップ管理転送要素を移行させることにより、上述した手順によってネットワーク全体の更新が実施可能であることに留意されたい。
【０１１２】
管理転送要素に第１ホップ管理転送および非第１ホップ転送要素用の更新された転送状態を送信し終えると、手順９００は、更新された転送状態を送信した全ての管理転送要素から確認応答(confirmation)を受信したかどうかを判定（９２５）する。確認応答は管理転送要素が更新された転送状態をコントローラ群から受信したことを示す。一部の実施形態において、手順９００は、非第１ホップ転送要素用の更新された転送状態を受信した管理転送要素のそれぞれが確認応答を返送した後でのみ、第１ホップ転送要素用の転送状態を管理転送要素に送信する。そしてこれら実施形態の手順９００は、非第１ホップ管理転送要素用の更新された転送状態を受信した管理転送要素の各々からの確認応答を待機する。
【０１１３】
手順９００が更新された転送状態を受信した管理転送要素のうち、確認応答を返送してきていないものがあると判定（９２５）した場合、手順９００は９２５へ戻って確認応答を待機する。しかし、一部の実施形態において手順９００は、管理転送要素に更新された転送状態を送信してから所定時間経過後に９３０へ進んでもよい。
【０１１４】
更新された転送状態を受信した管理転送要素の全てが確認応答を返送してきたと手順９００が判定（９２５）した場合、一部の実施形態に係る手順９００は、第１ホップ転送要素用の更新された転送状態を適用するように管理転送要素にコマンドを送信（９３０）する。一部の実施形態において、管理転送要素が更新された転送状態を用いてパケットを転送する際、管理転送要素は、非第１ホップ管理転送要素がそれらのパケットを更新された転送状態を用いて転送するように、パケットにバージョン情報（例えばバージョンビット）を含める。
【０１１５】
必要に応じて手順９００は、管理転送要素から古い転送状態を削除するよう、管理転送要素にコマンドを送信（９３５）する。一部の実施形態においてコントローラ群は、管理転送要素にコマンドを送信する代わりに、新しい転送状態を受信してから所定時間経過後に古い転送状態を削除するように管理転送要素を設定する。そして、手順は終了する。
【０１１６】
図９は一部の実施形態に係るネットワークコントローラ群が実行する手順９００を示したが、次の図である図７は、一部の実施形態に係る管理転送要素が実行する手順を示している。図１０は、一部の実施形態がデータを転送するために実行する手順１０００を概念的に示している。手順１０００は、非第１ホップ転送要素として動作するための転送状態を用いる管理転送要素によって実行される。
【０１１７】
手順１０００は、現在の転送状態（古い転送状態）を用いて入来パケットを転送する（１００５）ことによって開始される。入来パケットは、管理転送要素が直接相互動作するエンドマシンからのものではない。すなわち、管理転送要素はこれらパケットの経路中に存在するが、それらパケットに関する第１ホップ転送要素ではない。転送状態はコントローラ群または管理転送要素を管理しているシャーシコントローラから転送状態を管理転送要素に送信することにより、受信される。
【０１１８】
次に、手順１０００は、更新された転送状態をコントローラ群から受信（１０１０）する。この転送状態はコントローラ群によって更新されており、一部の実施形態においては、LCPデータから変換されたCPCPデータを含んでいる。これにより、管理転送要素は、古い転送状態と更新された転送状態の両方を有するようになる。
【０１１９】
そして手順１０００は、更新された転送状態を用いて入来パケットを転送（１０１５）する。一部の実施形態において、手順１０００は、入来パケットが搬送するバージョン情報に基づいて、その入来パケットを転送するために古い転送状態または新しい転送状態を選択する。つまり、このバージョン情報は、その管理転送要素にインストールされている古い転送状態と更新された転送状態が有するバージョン情報と照合するために用いられる。
【０１２０】
１０２５において手順１０００は、古い転送状態を削除するためのコマンドをコントローラ群から必要に応じて受信する。一部の実施形態において、管理転送要素は古い転送状態を削除するための明示的なコマンドを受信しない。代わりに、管理転送要素はコントローラ群によって、更新された転送状態を受信してから所定時間経過後に古い転送状態を削除するように設定される。そして手順１０００は古い転送状態を削除（１０２５）する。そして、手順は終了する。
【０１２１】
Ｃ．外部依存性のモデリング
上述の議論では、ネットワーク制御システムにおけるトランザクション性に適用される要件と、（例えば第１ホップ処理の更新と非第１ホップ処理の更新とを分離することによる）ネットワークにわたるトランザクション更新の実現について検討した。ネットワーク制御システムはまた、ネットワーク転送状態の更新をトランザクション的に算出する。
【０１２２】
もしポリシが変われば、明らかにネットワーク制御システムは、何かをトランザクション的に更新する前に算出を収束させる。上述したように、一部の実施形態に係るネットワーク制御システムは、システムのネットワークコントローラを実現するためにnLogテーブルマッピングエンジンを用いる。一部の実施形態におけるnLogエンジンは、算出をその確定点(fixed point)に到達させる。すなわち、nLogエンジンはそれまでに受信した入力変化に基づいて、転送状態に対する変更の全てを算出する。
【０１２３】
高レベルにおいて、局所的な確定点に到達するのは簡単であり、計算エンジン（すなわちnLogエンジン）に新たな更新を供給するのを止め、エンジンが処理すべきものが無くなるまで待てば十分である。しかし、ネットワーク環境において、確定点の定義はもう少し広く解される。計算は確定点に到達しうるが、それをもって管理転送要素に宛ててプッシュできる結果に到達したことにはならない。例えば、トンネルの宛先ポートを変更する場合、UPCPデータは宛先ポートがマッピングされる物理ポート用のプレースホルダしか有さないであろう。
【０１２４】
結局、計算は、計算を完了し、使用可能でプッシュ可能な転送状態に対応する確定点に到達することが可能になる前に適用されなければならない外部変化に依存しうることが分かる。同じ例について引き続き述べると、フローエントリ内のポート番号用のプレースホルダは、ポート番号をもたらすであろうトンネルポートの設定が終わってからでないと埋まらないであろう。この場合、UPCPの算出は何らかの新たな外部状態（例えばトンネルが生成されたことによるポート番号）に対する依存性が解決されるまでは完了したと見なすことができない。
【０１２５】
従って、計算にはこれらの外部依存性を考慮する必要があり、確定点の判断に含めなければならない。すなわち、計算が局所的に完了し、かつ解決されていない外部依存性が無くなるまでは、確定点に到達していない。一部の実施形態において、nLog計算は中間結果の加算および除去で成り立っており、構成や外部状態の変更はすべて、算出された状態の加算および除去につながる。
【０１２６】
UPCP算出における外部依存性を考慮するため、nLog算出エンジンは以下の要件を満たす必要がある。
【０１２７】
（１）変更結果が、新しいUPCPデータがプッシュ可能になる前に加算すべきものである場合（例えば、UPCPフローエントリを完成させるためにトンネルを生成しなければならない場合）、その変更を直ちに適用させる。nLog算出エンジンは、変更の結果（例えば新しいポート番号）がnLog算出エンジンに返されるまで、確定点に到達不能であると見なさなければならない。
【０１２８】
（２）変更結果が、現在のUPCPデータに影響を与えるかもしれないが（例えば、古いトンネルの削除）、トランザクションがコミットされる（すなわち、新しいネットワーク転送状態が実施される）前に更新を完了させることができない場合、その変更はトランザクションがコミットされた後にのみ適用されなければならない。さもなければ、ネットワーク転送はトランザクションがコミットされる前に変化するかもしれない。上述の規則が適用されている場合、外部リソースのアトミック変更はサポートできない。幸いなことに、リソース変更のほとんどは、追加／除去としてモデル化することができる。例えば、特定の宛先に向かうトンネルを表すポートの設定を変更する場合、新しい設定を、古いポートと一時的に共存する、新しいポートとみなすことができる。
【０１２９】
そのため、高レベルにおいて、上述の手法は、古い設定の隣に新しい設定を追加する機能で成り立っている。これは、経路内に存在するネットワーク管理リソースの場合に典型的に当てはまる。制約条件が存在する場合（例えば、何らかの理由で、同じIPへ向かう２つのトンネルが存在できない場合）、この手法は機能せず、従ってそのような変更のアトミック性は提供できない。
【０１３０】
図１１は、一部の実施形態が、転送状態をトランザクション的に算出し、管理転送要素セットへ送信するために実行する手順１１００を概念的に示す図である。一部の実施形態において手順1100は、物理コントローラまたは、UPCPデータを受信してCPCPデータに変換するシャーシコントローラによって実行される。手順は、論理コントローラまたは物理コントローラから、UPCPデータを含む転送状態変化セット（例えば、データタプル）を受信（１１０５）することから始まる。
【０１３１】
そして手順１１００は、受信した変更が外部依存関係を有するかどうかを判定（１１０５）する。一部の実施形態において、変更を処理するコントローラがその変更を処理するための完全な情報を有しておらず、不足している情報を別のコントローラまたは管理転送要素から取得しなければならない場合、その変更は外部依存性を有する。例えば、管理転送要素が自身のポートからトンネルを確立しなければならないことを規定するUPCP変更をCPCP変更に変換するためには、そのCPCP変更の中にポートの実際のポート番号が必要である。つまり、実際のポート番号が管理転送要素から受信されるまで、CPCP変更を生成することができない。
【０１３２】
受信した変更が外部依存関係を持っていないと手順１１００が判定（１１０５）した場合、手順１１００は後述する１１１５まで進む。変更が外部依存性を有すると手順１１００が判定（１１０５）した場合、手順１１００は外部依存性を有する、受信した変更に基づいて、出力変更のセットを算出し、算出した変更を管理転送要素に送信する。この出力変更セットは、不足している情報を管理転送要素に要求する。そして手順１１００は、論理コントローラまたは物理コントローラから、または外部依存性を解決するために不足している情報を返送しうる管理転送要素から、さらなる変更を受信するために１１０５に戻る。
【０１３３】
受信した変更が外部依存性を有さないと手順１１００が判定（１１０５）した場合、手順１１００は（例えばUPCP変更をCPCP変更に変換することにより）出力変更セットを算出（１１１０）し、手順１１００が、出力変更のトランザクション的算出の終了を意味するであろう確定点に到達しているかどうかを判定（１１１５）する。換言すれば、手順１１００は、受信した変更が完全に処理され、手順１１００が現在処理すべき入力変更を有していないかどうかを判断する。
【０１３４】
手順がまだ確定点に到達していないと手順１１００が判定（１１１５）した場合、手順１１００は入力変更に基づく出力変更を算出し続けるために１１１５に戻る。そうでなければ、手順１１２５は管理転送要素へ出力変更を送信する。そして、手順は終了する。
【０１３５】
Ｄ．トランザクション的更新のための通信要件
上記の議論は、トランザクション的方法で更新を計算し、それらを第１ホップエッジ転送要素にプッシュすれば足りることを示している。したがって、算出に加えて1つ以上の追加の要件がシステムに課される。トランザクション的な通信チャネルである。
【０１３６】
したがって、一部の実施形態では、転送要素へ向かう通信チャネル（例えば入力変換コントローラから論理コントローラへ、論理コントローラから物理コントローラへ、物理コントローラからシャーシコントローラまたは管理転送要素へ、および／またはシャーシコントローラから管理転送要素へ、の通信チャネル）が、完全に適用されるか、全く適用されない、ユニットに対するバッチ変更をサポートする。これらの実施形態のいくつかにおいて、通信チャネルは、トランザクションの終了に関してレシーバに通知する「バリア」の概念（すなわち、開始タグと終了タグ）だけをサポートする。上述の通り、受信コントローラまたは管理転送要素は、バリアを受信するまで、単に更新を待ち行列に入れておく。また、チャネルは、送信された更新の順序を維持するか、少なくともバリアの前に送信された更新がバリアの後に到達しないことを保証するかしなければならない。
【０１３７】
このようにして、送信コントローラは、計算の進行とともに状態への更新を送信し続けることができ、一旦確定点に到達したと判断されれば、受信第１ホップ転送要素にトランザクションの終了に関して通知する。以下にさらに説明するように、送信コントローラがトランザクションが処理された（確定点に到達するまで算出された）時点を知り、（必要なら）さらにプッシュするよう、一部の実施形態における通信チャネルは同期コミットをサポートする。以下に説明するように、ネストされたトランザクションの場合、同期コミットがネットワーク制御システムの下位層で、内部的にさらなる同期コミットをもたらしうることに留意すべきである。
【０１３８】
ネットワーク全体のトランザクションの実現について説明してきた。以下のセクションIIIでは管理転送要素へ向かういくつかのチャネル上のトランザクションの実現について説明する。
【０１３９】
III．トランザクションのネスティング
図５-図１０を参照して上述したように、転送状態の更新に関してネットワークの始めを残りの部分と分離することにより、一部の実施形態に係るネットワーク制御システムは、ネスティングされたトランザクション構造を効率的に生成する。１つの全体的(global)なトランザクションは、第１ホップポート用と非第１ホップポート用の２つのサブトランザクションを含んでいると考えることができる。解決策が（ネットワークの中間にあるすべての物理ホップを知り、必要な状態を確立することにより）非第１ホップポートを最も細かい粒度で管理しているか、解決策がトランザクション的な方法でネットワークを横断する接続性を確立可能であると仮定しているかに関わらず、この手法は同じままである。
【０１４０】
一部の実施形態において、これは、より粒度の細かなトランザクションのセットから、基本的な分散トランザクションを作成することを可能とする原理に一般化される。具体的には、各チャネルはトランザクション性を提供するが、複数チャネルにまたがったトランザクションはサポートしない、コントローラに向かう複数の通信チャネルを有する管理転送要素を考える。つまり、これらのチャネルは、分散トランザクションをサポートしない。このような状況でも、全く同じ構成の手法が機能する。複数のチャネルのうちの１つを、トランザクションが適用される主チャネルであると見なせる限り、他のチャネルの状態はいずれであれ用いられない。この種の構成を用いることで、（非第１ホップ管理転送要素が第１ホップ管理転送要素が自身のトランザクションをコミットされるより前に準備されるのと同様に）主チャネルがトランザクションをコミットする前に、副チャネルを再び「準備」することができる。このようにして、最終的な結果は、第１ホップ管理転送要素でのトランザクションがコミットされると、コミットされる単一のグローバルトランザクションとなる。
【０１４１】
図１２は、コントローラ１２１０が管理転送要素１２０５に更新を送信するために管理転送要素１２０５と２つのチャネル１２１５，１２２０を確立している状態を示している。具体的には、この図は、チャネル１２１５からの更新が到来するまで管理転送要素１２０５が複数のチャネルを通じて受信した更新を使用しないことを、４つの異なる段階１２０１-１２０４でを示している。
【０１４２】
コントローラ１２１０は、図２のコントローラ２００と同様である。一部の実施形態において、コントローラ１２１０はUPCPデータをCPCPデータに変換する物理コントローラである。他の実施形態では、コントローラ１２１０は物理コントローラから受信したのUPCPデータをCPCPデータに変換するシャーシコントローラである。
【０１４３】
一部の実施形態においてコントローラ１２１０は、管理転送要素１２０５と２つのチャネル１２１５，１２２０を確立する。チャネル１２１５は、管理転送要素１２０５の転送プレーン（例えば、転送テーブル）を制御するための通信プロトコルを用いて確立される。例えば、OpenFlowプロトコルは、管理転送要素１２０５内のフローエントリにフローエントリを追加したり、管理転送要素１２０５内のフローエントリからフローエントリを削除したり、管理転送要素１２０５内のフローエントリを変更したりするためのコマンドを提供する。チャネル１２２０はコンフィギュレーションプロトコルを用いて確立される。管理転送要素１２０５はチャネル１２２０を通じて設定情報を受信する。一部の実施形態において管理転送要素１２０５は、設定情報を設定データベース（不図示）に保存する。一部の実施形態において、設定情報は、入口ポート、出口ポートポートに関するQoS設定などに関する情報のような、管理転送要素１２０５を設定するための情報を含んでいる。図および説明を簡単にするため、フローエントリおよび設定情報は転送情報として図示している。
【０１４４】
管理転送要素１２０５は、いくつかのエンドマシン（不図示）と直接相互動作し、２つのチャネルを通じてコントローラ１２０５から受信した転送状態を用いてエンドマシンとデータを送受信する。これらの２つのチャネルはいずれも分散トランザクションをサポートしていないが、管理転送要素１２０５は、チャネル１２２０からのトランザクションをチャネル１２１５へのトランザクションにネスティング（バッチ処理化）することにより、これら２つのチャネルにわたる分散トランザクションを実現する。例えば、一部の実施形態において、管理転送要素１２０５はチャネル１２１５を主チャネル、チャネル１２２０を副チャネルとする。管理転送要素１２０５は、複数のチャネルを通じて受信した転送状態の適用を、管理転送要素１２０５が主チャネルからトランザクションを受信するまで保留する。
【０１４５】
第１段階１２０１で管理転送要素１２０５は、チャネル１２１５および１２２０を通じてコントローラ１２１０から変更セット（例えば、データタプル）を受信したところである。チャネル１２１５を通じて受信したこれらの変更は、フローエントリを含んでいる。チャネル１２２０を通じて受信した変更は設定情報を含んでいる。
【０１４６】
段階１２０１において、変更１-１は主チャネル１２１５を通じて受信されている。変更２-１および２-２は副チャネル１２２０を通じて受信している。管理転送要素は記憶構造体１２３０にこれらの変更を保存しているが、管理転送要素１２０５はまだ主チャネル１２１５を通じてトランザクションの全部を受信していないため、入来パケット（図示せず）の転送にこれらの変更をまだ使用し始めていない。管理転送要素は、現在の転送状態を使用して入来パケットを転送している。
【０１４７】
第１段階１２０１はまた、変更１-２が主チャネル１２１５を通じて到来し、変化２-３が副チャネル１２２０を通じて管理転送要素１２２０に到来していることを示している。変更２-３は、副チャネル１２２０を通じて受信した、変更２-１，２-２，２-３を含むトランザクションにおける最後の変更であることを示す太枠による平行四辺形として図示されている。
【０１４８】
第２段階１２０２で管理転送要素１２０５は、主チャネル１２５および副チャネル１２２０を通じて変更１-２および２-３をそれぞれ受信している。管理転送要素１２０５は記憶構造体１２３０に変更１-２および２-３を保存しているが、主チャネル１２１５からトランザクションの全部をまだ受信していないため、入来パケットの転送ならびに管理転送要素１２０５の設定にはこれらの変更を用いていない。
【０１４９】
第２段階１２０２はさらに、主チャネル１２１５を通じて変更１-３が管理転送要素１２０５に到来していることを示している。変更１-３は、主チャネル１２１５を通じて受信した、変更１-１，１-２，１-３を含むトランザクションにおける最後の変更であることを示す太枠による平行四辺形として図示されている。
【０１５０】
第３段階１２０３で、管理転送要素１２０５は、主チャネル１２１５を通じて変更１-３を受信しているため、主チャネル１２１５からのトランザクションを全て受信している。従って、管理転送要素１２０５は、２つのトランザクションでチャネル１２１５および１２２０を通じて受信した変更を用いて転送状態を更新する。
【０１５１】
第４段階１２０４は、管理転送要素１２０５によって変更がコミットされた状態を示している。つまり、管理転送要素１２０５は入来パケットの転送ならびに管理転送要素１２０５の設定に、更新された転送状態を用いている。このようにして、管理転送要素１２０５は、２つのチャネル間のグローバルトランザクションを実現するため、主チャネルを通じて受信したトランザクションに副チャネルを通じて受信したトランザクションをネスティングする。
【０１５２】
図１３は、一部の実施形態が、主チャネルを通じて受信したトランザクションに副チャネルを通じて受信した複数のトランザクションをまとめるために実行する手順１３００を概念的に示す図である。一部の実施形態に係る手順１３００は、コントローラとの間に確立されたいくつかのチャネルを通じてコントローラから転送状態を受信する管理転送要素（例えば、図１２の管理転送要素１２０５）によって実行される。コントローラは、管理転送要素のマスタである物理コントローラであってもよいし、管理転送要素が稼動するホストと同じホストで稼動するシャーシコントローラであってもよい。一部の実施形態では、複数のチャネルの１つが主チャネルとして指定され、他のチャネルは副チャネルとして指定される。
【０１５３】
手順１３００は、主チャネルおよび副チャネルを通じて転送状態を受信（１３０５）することから始まる。一部の実施形態において、コントローラから複数のチャネルを通じて受信する転送状態はCPCPデータを含んでいる。具体的には、主チャネルを通じて到来する転送状態は、管理転送要素の制御プレーンに送られる制御データを含んでいる。副チャネルを通じて入来する転送状態は、設定データ（例えば、入口ポート、出口ポート、ポート用のQoS設定、middleboxインスタンスなどを設定するためのデータ）を含んでいる。しかし、一部の実施形態では、複数のチャネルの１つが主チャネルとして指定され、他のチャネルが副チャネルとして指定されさえすれば、主および副チャネルの指定は、それらチャネルを通じて受信するデータのタイプに依存する必要はない。
【０１５４】
次に、手順１３００は、手順１３００が主チャネルを通じてバリアを受信したか否かを判定（１３１０）する。上述のように、バリアは、受信装置で受信されると、入力の１つのトランザクションが完全に受信装置で受信されたことを示す。一部の実施形態においてバリアは、変更に付加される情報である。他の実施形態に係るバリアは、変更の送信側がトランザクション入力セットを完全に送信し終えたことを示す、変更そのものである。
【０１５５】
バリアが主チャネルを通じて受信されていないと手順１３００が判定（１３１０）した場合、手順はそれまでに受信した転送状態を記憶構造体に保存（１３２０）する。記憶構造体に記憶された転送状態は、管理転送要素によって使用されない。手順１３００は複数のチャネルを通じてコントローラ群からさらなる転送状態を受信するため、１３０５に戻る。
【０１５６】
主チャネルを通じてバリアが受信されていると手順１３００が判定（１３１０）した場合、手順はそれまでに受信している転送状態を用いて管理転送要素の転送テーブルおよび設定データベースを更新する。そして管理転送要素は、設定データを用いて自身を設定し、転送テーブル内の更新されたフローエントリに基づいた入来パケットの転送を開始する。そして手順１３００は終了する。
【０１５７】
この一般化は、必要であれば任意の深さまでトランザクションをネスティングすることを可能にすることに留意されたい。具体的には、トランザクション的なシステムは、自身のトランザクション性を、ネスティングされたトランザクションから構築することができる。ネスティングされたトランザクションからトランザクション性を構築する能力は、複数のコントローラが形成しうる階層構造において有用なだけでなく、複数の転送要素を管理する複数のコントローラに対するトランザクション的なインタフェースをこれら転送要素が内部的にどのように提供しうるかをを検討する際にも有用である。
【０１５８】
一部の実施形態に係るネットワーク制御システムは、ここでも同じネスティングの原理を用いることで、基礎となる管理リソースにおけるトランザクション性のための明示的なサポートなしに、通信チャネルにトランザクション性を導入する。簡単に拡張可能なテーブルパイプラインを用いた経路を考える。フローテーブルの更新がトランザクションをサポートしていない場合でも、既存のパイプラインの手前にステージを１つ追加し、どのバージョンの状態を使用すべきかを１つのフローエントリに決定させることは容易である。従って、それから１つのフローエントリを更新する（これはトランザクショナルである）ことにより、フローテーブルの全体をトランザクション的に更新することができる。この手法の詳細は、上層のコントローラに見せる必要はない。しかし、事実上、複数のトランザクションの階層が存在する。
【０１５９】
上述の実施形態のユースケースとして、あるコントローラバージョンから別のコントローラバージョン（つまり、ソフトウェアバージョン）への移行は、システム内のトランザクションおよび確定点算出サポートの恩恵を受ける。このユースケースにおいては、あるコントローラバージョンから別のコントローラバージョンへのアップグレード処理全体を外部のアップグレードドライバが実行する。パケットロスが発生しないような方法でアップグレードが行われるように調整するのは、そのドライバの責任である。
【０１６０】
より小さな複数のサブトランザクションからなる単一のグローバルトランザクションを構成するために、ドライバが実行する手順の全体は以下の通りである。
【０１６１】
（１）転送状態のアップグレードが必要になると、ドライバはネットワークミドル（ファブリック）用の新しい状態の算出開始を要求する。これは、ネットワークミドルの状態を管理するすべてのコントローラについて実施され、新しいミドル状態は、古いミドル状態と共存することが想定されている。
【０１６２】
（２）そしてドライバは、各コントローラが確定点に達するのを待ち、受信コントローラ／スイッチング要素へ下り方向に同期させてトランザクションをコミットする。状態がスイッチング要素でアクティブであり、パケットで利用可能であることをドライバが知るのはコミット後であるため、ドライバは同期的な方法でコミットを実行する。
【０１６３】
（３）この後ドライバは、ネットワークの途中部分について（１）で確立される新しい経路にも用いられるであろう、新しいエッジ転送状態へ更新するようにコントローラに要求する。
【０１６４】
（４）ここでもドライバは、すべてのコントローラが確定点に到達することを要求し、確定点に到達したら、更新を同期的にコミットする。
【０１６５】
（５）ドライバが古いネットワークミドル状態の除去を要求すると、更新が終了される。ここでは確定点に到達するのを待ってコミットする必要はない。除去はコントローラが、最終的にプッシュする任意の他の変更とともにプッシュされるであろう。
【０１６６】
IV．電子システム
上述した機能およびアプリケーションの多くは、コンピュータが読み取り可能な記憶媒体（コンピュータ可読媒体とも呼ばれる）に記録された命令セットとして規定されるソフトウェアプロセスとして実現される。これらの命令は、１つ以上の処理装置（例えば、プロセッサ、プロセッサコア、または他の処理ユニットの１つ以上）によって実行されるとき、１つ以上の処理装置に、命令に示された動作を実行させる。コンピュータ可読媒体の例としては、限定されないが、CD-ROM、フラッシュドライブ、RAMチップ、ハードディスクドライブ、EPROM等を含む。コンピュータ可読媒体は、無線または有線接続を介して通過する搬送波や電子信号を含まない。
【０１６７】
本明細書において、用語「ソフトウェア」の意味は、読み出し専用メモリに存在するファームウェアや、磁気記憶装置に記憶されたアプリケーションのようなプロセッサによる処理のためにメモリに読み込むことが可能なものを含む。また、一部の実施形態では、複数のソフトウェア発明が、識別可能なソフトウェア発明を維持したまま、１つのより大きなプログラムの複数のサブパーツとして実施されうる。一部の実施形態では、複数のソフトウェア発明が別個のプログラムとして実施されてもよい。最後に、本明細書に記載されたソフトウェア発明を共同して実現する個別プログラムの任意の組み合わせもまた本発明の範囲内である。一部の実施形態において、それらのソフトウェアプログラムは、１つ以上の電子システム上で動作するようにインストールされた際、それらソフトウェアプログラムの動作を実行する１つ以上の具体的なハードウェア実装を規定する。
【０１６８】
図１４は本発明の一部の実施形態を実施するために用いることのできる電子システム１４００を概念的に示す図である。電子システム１４００は、上述した制御、仮想化、またはオペレーティングシステムアプリケーションの任意のものを実行するために使用することができる。電子システム１４００は、コンピュータ（例えば、デスクトップコンピュータ、パーソナルコンピュータ、タブレットコンピュータ、サーバコンピュータ、メインフレーム、ブレードコンピュータなど）、電話機、PDA、または他の任意の種類の電子デバイスであってよい。このような電子システムは、様々なタイプのコンピュータ可読媒体および、様々な他のタイプのコンピュータ可読媒体のためのインタフェースを含む。電子システム１４００は、バス１４０５、１つ以上の処理ユニット１４１０、システムメモリ１４２５、読み出し専用メモリ１４３０、恒久的記憶装置１４３５、入力デバイス１４４０、および出力デバイス１４４５を含む。
【０１６９】
バス１４０５は、電子システム１４００の多数の内部デバイスを通信可能に接続するシステムバス、周辺機器バス、チップセットバスをまとめて表している。例えば、バス１４０５は、１つ以上の処理ユニット１４１０を、読み出し専用メモリ１４３０、システムメモリ１４２５、および恒久的記憶装置１４３５と通信可能に接続する。
【０１７０】
これらの様々なメモリユニットから、１つ以上の処理ユニット１４１０は、本発明の処理を実行するために、実行する命令や処理するデータを読み出す。１つ以上の処理ユニットは、実施形態に応じて、単一のプロセッサであってもマルチコアプロセッサであってもよい。
【０１７１】
読み出し専用メモリ（ROM）１４３０は、１つ以上の処理ユニット１４１０および電子システムの他のモジュールが必要とする静的データおよび命令を格納する。一方、恒久的記憶装置１４３５は、読み書き可能な記憶装置である。この装置は、電子システム１４００がオフのときも命令およびデータを記憶する不揮発性記憶装置である。本発明の一部の実施形態は、恒久的記憶装置１４３５として（例えば、磁気又は光ディスクと、対応するディスクドライブのような）大容量記憶装置を用いる。
【０１７２】
他の実施形態は、恒久的記憶装置として（例えば、フレキシブルディスク、フラッシュドライブのような）リムーバブル記憶装置を用いる。恒久的記憶装置１４３５と同様、システムメモリ１４２５は、読み書き可能な記憶装置である。ただし、記憶装置１４３５とは異なり、システムメモリは、ランダムアクセスメモリのような揮発性の読み書き可能メモリである。システムメモリは、プロセッサが実行時に必要とする命令とデータの一部を格納する。一部の実施形態において、本発明の手順はシステムメモリ１４２５、恒久的記憶装置１４３５、および/または読み出し専用メモリ１４３０に記憶される。これらの様々なメモリユニットから、１つ以上の処理ユニット１４１０は、一部の実施形態に係る処理を実行するために、実行する命令や処理するデータを読み出す。
【０１７３】
バス１４０５はまた、入力および出力デバイス１４４０および１４４５を接続する。入力装置は、ユーザが電子システムに情報を伝えたりコマンドを選択することを可能にする。入力装置１４４０は、英数字キーボードおよびポインティングデバイス（「カーソル制御デバイス」とも呼ばれる）を含む。出力デバイス１４４５は、電子システムによって生成された画像を表示する。出力デバイスは、プリンタおよび、陰極線管(CRT)または液晶ディスプレイ(LCD)などの表示装置を含む。一部の実施形態は、入力デバイスおよび出力デバイスの両方として機能する、タッチスクリーンのようなデバイスを含む。
【０１７４】
最後に、図１４に示すように、バス１４０５はさらに電子システム１４００を、ネットワークアダプタ（図示せず）を通じてネットワーク１４６５にも接続する。このようにコンピュータは、コンピュータネットワーク（ローカルエリアネットワーク（「LAN」）、広域ネットワーク（「WAN」）、もしくはイントラネット、又はインターネットのような、複数のネットワークからなるネットワークなど）の一部であってよい。電子システム１４００のいずれかまたは全ての構成要素を本発明に関連して使用することができる。
【０１７５】
一部の実施形態は、マイクロプロセッサおよび、装置が読み取り可能な、あるいはコンピュータが読み取り可能な媒体（コンピュータ可読記憶媒体、機械可読媒体、または装置可読記憶媒体とも呼ばれる）にコンピュータプログラム命令を格納した記憶装置およびメモリ等の電子部品を含む。そのようなコンピュータ可読媒体の例の一部は、RAM、ROM、読み取り専用コンパクトディスク（CD-ROM）、追記型コンパクトディスク（CD-R）、書き換え可能コンパクトディスク（CD-RW）、読み出し専用デジタル多用途ディスク（例えば、DVD-ROM、２層DVD-ROM）、様々な追記型/書き換え可能DVD（例えば、DVD-RAM、DVD-RW、DVD+RWなど）、フラッシュメモリ（例えば、SDカード、ミニSDカード、マイクロSDカードなど）、磁気および/または半導体ハードドライブ、読み取り専用および記録可能ブルーレイ（登録商標）ディスク、超高密度光ディスク、他の任意の光学または磁気記録媒体、およびフレキシブルディスクを含む。コンピュータ可読媒体は、少なくとも1つの処理ユニットによって実行可能であり、様々な動作を実行するための命令セットを含むコンピュータプログラムを記憶することができる。コンピュータプログラムまたはコンピュータコードの例は、コンパイラによって生成されるようなマシンコード、およびインタープリタを用いてコンピュータ、電子部品、またはマイクロプロセッサによって実行される高レベルコードを含むファイルを含む。
【０１７６】
上記の議論は、主にソフトウェアを実行するマイクロプロセッサまたはマルチコアプロセッサに言及しているが、一部の実施形態では、例えば、特定用途向け集積回路（ASIC）又はフィールドプログラマブルゲートアレイ（FPGA）などの１つ以上の集積回路によって実行される。一部の実施形態においてこれらの集積回路は、回路自体に格納された命令を実行する。
【０１７７】
用語「コンピュータ」、「サーバ」、「プロセッサ」、及び「メモリ」は、本明細書において使用される際、電子的あるいは他の技術的機器の全てを包含する。これらの用語は、人間やそのグループを除外する。明示目的により、「表示」という用語は、電子デバイスでの表示を意味する。本明細書で使用される用語「コンピュータ可読媒体」、「コンピュータ可読媒体」及び「機械可読媒体」は、コンピュータによって読み取り可能な形式で情報を格納する、有形かつ物理的な物体に完全に制限される。これらの用語は、いかなる無線信号、有線のダウンロード信号、およびその他の一時的な信号も除外する。
【０１７８】
本発明を多数の特定の詳細を参照して説明したが、当業者は、本発明がその精神から逸脱することなく他の特定の形態で実施できることを認識するであろう。また、いくつかの図面（図９，６，１０，７，１１，および１３を含む）は、手順を概念的に示したものである。これらの手順の具体的な動作は、図示ならびに記載された通りの順序で実行されなくてもよい。具体的な動作は、１つの連続した動作として実行されなくてよく、別の実施形態においては別の具体的な動作が実行されてもよい。さらに、手順は、いくつかのサブプロセスを用いたり、またはより大きなマクロプロセスの一部として実施されてもよい。
【図１】
0005883946.tif 000002
【図２】
0005883946.tif 000003
【図３】
0005883946.tif 000004
【図４】
0005883946.tif 000005
【図５】
0005883946.tif 000006
【図６】
0005883946.tif 000007
【図７】
0005883946.tif 000008
【図８】
0005883946.tif 000009
【図９】
0005883946.tif 000010
【図１０】
0005883946.tif 000011
【図１１】
0005883946.tif 000012
【図１２】
0005883946.tif 000013
【図１３】
0005883946.tif 000014
【図１４】
0005883946.tif 000015