以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
<発明の実施の形態1>
図1は、本発明の実施の形態1にかかる通信中継装置100の構成を示すブロック図である。通信中継装置100は、端末11と端末12との間の通信の中継を行う装置である。端末11と端末12とは、通信パケット等を、通信中継装置100を介して送受信する通信装置である。
通信中継装置100は、記憶部110と、取得部120と、更新部130とを備える。記憶部110は、中継定義情報111a、111b、・・・及び111nと、更新情報112とを記憶する記憶装置である。中継定義情報111a〜111nは、端末間の通信の中継に関する定義を示す情報である。例えば、通信パケットヘッダと照合するルールと、処理内容を定義したアクション(Action)と、フロー統計情報との組が識別情報と対応付けられたものである。更新情報112は、中継定義情報111a〜111nのうち2以上(例えば、中継定義情報111a及び111b)を更新するための更新内容の定義を含む情報である。例えば、更新対象の中継定義情報の識別情報や、更新後の中継定義情報の値等である。さらに、更新情報112は、中継定義情報111a〜111nのうち2以上を更新するための更新指示を含むものであってもよい。
取得部120は、更新情報112を外部から取得する。また、更新情報112に更新指示が含まれていない場合には、取得部120は、更新情報112とは別に、複数の中継定義情報を更新するための更新指示を取得する。更新部130は、更新指示に応じた所定のタイミングにより、更新情報112に基づく更新処理を実行する。
図2は、本発明の実施の形態1にかかる中継定義情報の更新処理の流れを示すフローチャートである。まず、通信中継装置100の記憶部110には予め中継定義情報111a〜111nが記憶されているものとする。尚、記憶部110には少なくとも2以上の中継定義情報が記憶されていればよい。
通信中継装置100の取得部120は、外部から更新情報112を取得する(S11)。例えば、更新情報112には、中継定義情報111a及び111bに対する更新内容が含まれるものとする。次に、通信中継装置100の更新部130は、所定のタイミングであるか否かを判定する(S12)。所定のタイミングとしては例えば、上記更新指示により設定された時刻、又は、上記更新指示を受け付け又は検出したタイミング等であってもよい。
所定のタイミングでない場合は、所定時間経過後、再度、ステップS12を行う。所定のタイミングと判定された場合、更新部130は、更新情報に基づき、例えば、中継定義情報111a及び111bを更新する(S13)。
このように、本発明の実施の形態1では、複数の中継定義情報の更新情報をまとめて取得し、1回のトリガ(更新タイミング)により更新処理を行うことで、更新のための通信量を抑制できる。つまり、通信中継装置100に対して外部から各中継定義情報に対する個別の更新命令を逐次、受信することを回避できる。そのため、端末間の通信への影響を抑えつつ、効率的に更新をすることができる。
尚、通信中継装置100は、他の複数の通信中継装置の間の通信の中継を行うものであってもよい。そのため、上述した中継定義情報は、装置間の通信の中継に関する定義を示す情報といえる。
<発明の実施の形態2>
本発明の実施の形態2は、上述した実施の形態1の応用例であり、OpenFlow技術に基づくネットワークシステムを対象とした場合について説明する。但し、本発明は、OpenFlow技術に限定されない。また、以下では、通信中継装置の一例としてOFS(OpenFlow Switch)、通信中継装置を制御する通信制御装置の一例としてOFC(OpenFlow Controller)を用いる。また、中継定義情報の一例としてOFSに内蔵されるフローテーブルにおける各フローエントリを用いる。但し、通信中継装置、通信中継装置及び中継定義情報の例は、これらに限定されない。
ここで、OFCがローリングアップデート機能をサポートした場合、下位互換性(backward compatibility)を保証しなければならない。そのため、過去バージョンの仕様(プロトコルの仕様など)に不十分な点が見つかったとしても、新バージョンで変更できないという問題があった。
例えば、旧仕様のOFC(旧ACT)と新仕様のOFC(新ACT)でcookieの値を変更する場合、クラスタ切り替え後に、OFCは、各OFSに対してフローエントリごとにflow modメッセージを送信する必要がある。ここで、cookieは、OFSがフローテーブル内の各フローエントリを識別するための識別情報である。そのため、OFCのローリングアップデートによりcookieを更新することは、フローエントリのIDの変更となるため、flow modメッセージを用いる場合には、既存のフローエントリを削除し、かつ、変更後のcookie値をIDとした新規のフローエントリを追加することとなる。そのため、OFSに多数のフローエントリが登録されている場合、フローエントリ数に比例した多数のflow modがOFCから送出される。それ故、OFCとOFS間の通信接続であるセキュアチャネル(secure channel、管理ネットワーク)の輻輳状態が発生する可能性がある。
ここで、cookieは64bitの情報であり、自由な値を設定することができる。そのため、単なるIDとしてではなく、OFCで使用する内部情報などを加えて使用する場合がある。内部情報としては、例えば、フローエントリ種別(Bloadcast,IP multicast,unicast等)等が考えられる。また、現行のOpenFlowの仕様では、フローエントリの統計情報の取得時に、cookie値の他にcookie maskの指定が可能であり、取得するフローエントリ情報のフィルタリングを行うこともできる。(すなわち、ある特定のフローエントリ種別の情報のみを取得することができる。)
そのため、OFCのバージョンアップに伴い、内部情報の扱いが変更になり、その結果、フローエントリのうち、内容(照合ルールやアクション等)は一緒であるが、cookieの値のみ変更になるというケースが考えられる。
さらに、OFC側でのフローエントリの書き換えの内容によっては(cookie書き換えなど)、上述の通り、フローエントリが一時的に削除されるため、OFSに接続されている端末間の通信が途切れてしまう可能性もある。
そこで、本発明の実施の形態は、OFS内部で保持するフローエントリ等の情報の書き換え処理を、OFC主導ではなく、OFCのクラスタ切り替えの間にOFS主導で行うものである。本発明の実施の形態の概要の一部としては以下ものが挙げられる。例えば、OFSは、外部から与えられたトリガによって自らの内部のフローテーブルを編集する機能を有する。そして、OFSのフローテーブルの制御方式としては、OFC側のソフトウェアの更新時にOFSに対して編集処理起動のトリガを与えることによって、OFSのフローテーブルを更新後のOFCの制御仕様に同期させる。また、そのためにあらかじめ、OFSに対してフローエントリ更新用のソフトウェアを事前に送信し、OFSのクラスタフェイルオーバー中の新ACTに切り替わる間にフローエントリの更新を行うようにしてもよい。
また、ローリングアップデートによるOFCのアップデート後に、OFCからのフロー設定要求(flow modメッセージ)を用いずに、OFSに設定済みの既存のフローエントリを更新することも可能である。これにより、クラスタ切り替え後のネットワーク負荷を最小限にすることができる。
さらに、cookie値の書き換えの場合などには、フローエントリを一旦削除せずに、OFS内部で差分のみを書き換えるため、OFSに接続されている端末間の通信に切断が発生しないという効果も奏する。尚、既存のOpenFlowプロトコルを使用してcookieを書き換える場合には、上述の通りフローエントリを一回削除しなければならない。
また、上述した実施の形態1から次のように改良しても良い。例えば、上述した図1の更新情報112として、中継定義情報(フローエントリ)に対応する新たな識別情報(更新後のcookie値)を含み、前記更新部は、更新処理により中継定義情報における識別情報を、更新情報に含まれる新たな識別情報へ更新することが望ましい。上述の通り、フローエントリのID(cookie)のみを更新する場合、従来はフローエントリ自体の削除及び新規追加が必要であり、その場合、当該フローエントリに基づく既存の端末間通信が中断されることになっていた。しかし、フローエントリのIDのみを更新することにより、端末間の既存の通信を中断することがなくなる。
さらに、前記取得部は、前記複数の中継定義情報の更新内容に応じた更新処理が実装された更新プログラムを前記更新情報として取得し、前記更新部は、前記更新プログラムを前記所定のタイミングに実行することにより、前記更新処理を行うとよい。これにより、既存のプロトコルに依存しない柔軟な(きめ細かな)更新処理を実現できる。また、フローエントリ数にかかわらず、一種類の更新プログラムを送信するだけで実現できるため、更新のための通信量を抑制することができる。
また、前記通信中継装置は、稼働系(ACT)と待機系(SBY)により冗長構成された複数の通信制御装置(例えば、OFC)により制御され、前記更新部は、前記稼働系と前記待機系の切り替え(例えば、ローリングアップデート又は単に、クラスタ切り替え)を前記所定のタイミングとして、前記更新処理を開始することが望ましい。これにより、より早くOFCとの同期を行うことができる。また、系切替中に更新処理が完了しなくても、既存の同期処理(例えば、フローエントリ間の状態整合処理)で残りの更新処理を行うことで、全て既存の同期処理で対応する場合に比べて、通信負荷を低減できる。
さらに、前記更新部は、前記通信制御装置と当該通信中継装置との間の制御のための接続(例えば、セキュアチャネル)が切断されたことを検出した場合を、前記所定のタイミングとして前記更新処理を開始すると良い。このように、OFCの系切替を自ら検出することで、外部からの指示によらずに更新を開始できる。
さらに、前記取得部は、外部から前記更新処理の開始要求を前記更新指示として取得し、前記更新部は、前記開始要求の取得後に前記接続が切断されたことを検出した場合に、前記更新処理を開始すると良い。これにより、系切替とは無関係な切断時に不必要に更新処理を行うことを防止し、更新開始タイミングを適切に制御できる。
また、前記取得部は、前記所定のタイミングの基準となる時刻情報を前記更新情報に含めて取得し、前記更新部は、前記接続が切断されたことを検出した場合に、前記取得した時刻情報に基づいて前記所定のタイミングであるか否かを判定し、当該所定のタイミングであると判定した場合に、前記更新処理を開始すると良い。これにより、不必要な更新処理を行うことを防止し、更新開始タイミングを適切に制御できる。
さらに、前記通信中継装置は、前記稼働系と前記待機系の切り替えの前に前記更新情報を取得していることが望ましい。これにより、更新の開始時の負荷を低減し、更新処理の迅速な開始を実現できる。
また、本実施の形態2にかかる通信中継装置は、次のように表現することもできる。すなわち、稼働系と待機系により冗長構成された複数の通信制御装置により制御され、端末間の通信の中継に関する定義である中継定義情報を保持し、前記稼働系と前記待機系の切り替えの間に、前記中継定義情報を更新するための更新情報に基づいて、当該中継定義情報の更新処理を開始する。このように、少なくとも更新処理の開始を系切替中とすることで、より早くOFCとの同期を行うことができる。また、系切替中に更新処理が完了しなくても、既存の同期処理(例えば、フローエントリ間の状態整合処理)で残りの更新処理を行うことで、全て既存の同期処理で対応する場合に比べて、通信負荷を低減できる。
さらに、本発明の実施の形態2を通信中継システムとする場合は、次のように表現することもできる。すなわち、通信中継システムは、装置間の通信の中継に関する定義である複数の中継定義情報を保持し、当該中継定義情報に基づいて前記装置間の通信の中継を行う通信中継装置と、前記通信中継装置を制御する通信制御装置と、前記通信中継装置及び前記通信制御装置と接続された管理サーバと、を備え、前記通信制御装置又は前記管理サーバは、前記中継定義情報を更新するための更新情報を前記通信中継装置へ送信し、前記通信中継装置は、前記更新情報を受信し、複数の前記中継定義情報を更新するための指示に応じて、前記更新情報に基づく更新処理を所定のタイミングにより実行する。
続いて、本発明の実施の形態2について以降に具体的に説明する。
図3は、本発明の実施の形態2にかかるOpenFlowネットワークシステム1の構成を示すブロック図である。OpenFlowネットワークシステム1は、端末11〜16と、OFS31〜33と、OFC21及び22と、管理サーバ40と、開発端末50とを備える。OFC21及び22と、OFS31〜33と、管理サーバ40とは、管理ネットワーク上で接続されている。また、開発端末50は管理サーバ40と接続されている。尚、開発端末50と管理サーバ40との接続を管理ネットワークに加えても構わない。また、OFS31は、端末11〜13及びOFS32とOpenFlowネットワーク上で接続されている。OFS32は、OFS31及び33とOpenFlowネットワーク上で接続されている。OFS33は、OFS32及び端末14〜16とOpenFlowネットワーク上で接続されている。
OFC21とOFC22とは、稼働系(ACT)と待機系(SBY)により冗長構成(クラスタ構成)された2台の通信制御装置である。図3では、稼働系(ACT)をOFC22、待機系(SBY)をOFC21としているが、本発明の実施の形態がこれに限定されないことは勿論である。また、OFCは3台以上であってもよい。OFC21及び22のそれぞれは、例えば、UNIX(登録商標)サーバにより実現可能である。また、OFC21及び22は、共通の仮想IPアドレスが割り当てられている。そのため、OFS31〜33の側では、OFC21又は22のいずれが稼働系(ACT)であり、待機系(SBY)であるかを意識する必要が無い。
ここで、ACT側のOFC22とOFS31〜33との間は、セキュアチャネルにより接続されている。また、SBY側のOFC21は、OFS31〜33のトポロジーやフローテーブル情報などの情報や、各OFSのポート状態変更通知などのイベントをACT側のOFC22から取得することができる。そして、ACT側のOFC22とSBY側のOFC21との制御ソフトウェアのバージョンが等しい場合には、互いのデータが完全に同期される。
管理サーバ40は、OFC21及び22とOFS31〜33を管理する。管理サーバ40は、例えば、UNIXサーバにより実現可能である。管理サーバ40は、各々のOFCとSSH(Secure SHell)による接続が確立されており、UNIXのシェル上で動作するコマンドにより、管理サーバ40からOFC21及び22のクラスタ切り替えを行うことができる。また、管理サーバ40は、OMA−DMなどの遠隔デバイス管理プロトコルが実装されているOMA−DMサーバであるものとする。そして、管理サーバ40は、あらかじめ決められた時刻に、対象となるACT側のOFC22に対してクラスタ切り替え要求を送信する。また、管理サーバ40は、クラスタ切り替え要求の送信と同時に、OFS31〜33に対してソフトウェア更新要求を送信する。
OFS31、32及び33は、内部に保存されたフローテーブルに基づいて、端末11〜16の間の通信を中継する。OFS31〜33は、例えば、組み込みLinux(登録商標)が実装された組み込み機器である。OFS31〜33のそれぞれは、管理ネットワーク経由で、OFC21及び22並びに管理サーバ40と通信を行うことができる。OFS31〜33は、例えば、OMA−DMなどの組み込み機器向けのデバイス管理プロトコルが実装されているOMA−DMクライアントが組み込まれているものとする。
ここで、本実施の形態では、OFS31〜33からOFC21及び22並びに管理サーバ40に対してTCP(Transmission Control Protocol)コネクションを確立させるものとする。TCPコネクションの接続のタイミングは、管理ネットワークの接続時(OFSの起動又は再起動に伴うネットワーク接続や、管理ネットワーク用のイーサーネットケーブルを動作中のOFSに接続する場合など)、又は、OFS内部の設定情報の更新時などが挙げられるが、これらに限定されない。ここで、OFSとOFCとの間は、セキュアチャネル接続であり、OFSと管理サーバとの間は、デバイス管理プロトコルのための接続である。
また、OFS31〜33は、接続を行うOFCのIPアドレスを内部設定情報として保持するものとする。さらに、OFS31〜33は、登録されたIPアドレスを持つOFS接続の有無を定期的に監視する。そして、OFS31〜33は、対象となるOFCが管理ネットワークに接続されたことを認識すると、当該OFCに対してセキュアチャネルの接続処理を行う。
また、OFS31〜33は、OFC21及び22の系切り替えの間を、フローテーブルの更新処理の開始タイミングとする。すなわち、OFS31〜33は、OFCの系切り替えのタイミングで、管理サーバ40から配信された更新ソフトウェアの実行を行う。但し、フローテーブル内の全エントリの消去などの単純な処理に関しては、管理サーバ40からのトリガを契機として行うこともできる。この場合は、管理サーバ40から配信された更新ソフトウェアを用いる必要がない。
端末11〜16は、上述した図1の端末11と端末12と同等の通信装置である。そのため、端末11〜16は、OFS31〜33を介して互いに通信パケット等の送受信を行う。
開発端末50は、開発ユーザ等が使用することにより、OFS31〜33の更新ソフトウェアを生成する装置である。生成された更新ソフトウェアは、管理サーバ40を介してOFS31〜33へ配信される。ここで、本実施の形態にかかる更新ソフトウェアは、組込み機器である各OFS内で高速に書き換え処理を行い、省メモリ化を実現するものである。例えば、当該更新ソフトウェアは、機械語のバイナリコードで実現されたものである。または、当該更新ソフトウェアは、以下のような形態でもよい。例えば、Java(登録商標)に代表される中間言語、LLVM(Low Level Virtual Machine)のような共通実行環境で実行されるプログラムであるとよい。または、Luaなどのスクリプト言語やPythonなどのインタプリンタ言語であってもよい。
また、本実施の形態にかかる更新ソフトウェアは、更新対象のフローエントリ及び更新内容が指定されている。更新対象のフローエントリには2以上の指定が可能である。更新内容としては、更新後のcookie、上述したルール、アクション、又は、フロー統計情報の各値を、フローエントリごとに指定することができる。そして、当該更新ソフトウェアは、更新対象のフローエントリに対して指定された更新内容により更新する処理を含む。
また、当該更新ソフトウェアは、実行を開始する日付及び時刻を示す実行開始時刻情報を含むものであってもよい。または、デバイス管理プロトコル内に実行開始時刻情報を含めても良い。その場合、OFS31〜33が管理サーバ40から更新ソフトウェアをダウンロードする際に、併せて、実行開始時刻情報を取得してもよい。
または、開発端末50は、更新ソフトウェアではなく、各フローエントリの更新内容のデータのみを生成してもよい。更新内容としては、置換対象のフローエントリや、置換対象のcookie、上述したルール、アクション、又は、フロー統計情報の各値のみであってもよい。その場合、管理サーバ40は、各OFSに対して更新内容を配信することとなる。以上のことから、更新ソフトウェア又は更新内容は、上述した実施の形態1の更新情報の一例といえる。
図4は、本発明の実施の形態2にかかる管理サーバ40及びOFS31の概要構成を示すブロック図である。管理サーバ40は、構成管理機能401と、OFS制御機能402と、OFS及び更新ソフトウェア管理機能403と、OMA−DMサーバ404とを備える。構成管理機能401は、管理ネットワークに接続されているOFS31〜33の構成情報を管理する。構成管理機能401は、デバイス管理プロトコル経由での各OFSとのネゴシエーションを契機に、OFS情報を取得して内部に登録する。
OFS及び更新ソフトウェア管理機能403は、OFS31〜33に対して、更新ソフトウェアの配信や更新開始のトリガM1を送信する。尚、OFS及び更新ソフトウェア管理機能403は、更新ソフトウェアの代わりに後述する更新内容のデータ自体を配信してもよい。また、OFS及び更新ソフトウェア管理機能403は、OFS31〜33のそれぞれが更新タイミングを検出する場合には、必ずしも更新開始のトリガを送信する必要はない。OFS制御機能402は、OFS及び更新ソフトウェア管理機能403からの要求を受けて、OFC21及び22に対してクラスタ切り替えM2を行う。
また、OFS及び更新ソフトウェア管理機能403は、OFS31〜33に対して、フローテーブルなどを書き換えるための更新ソフトウェアを事前に配信することが望ましい。ここで、OFS及び更新ソフトウェア管理機能403は、例えば、深夜などtrafficの少ない時間帯に更新ソフトウェアを配信すると良い。
尚、OFS及び更新ソフトウェア管理機能403は、更新開始トリガと共に、更新ソフトウェアを配信することもできる。ここで、OFCの系切り替えの時間は、数十秒を想定している。そのため、更新開始トリガと共に、更新ソフトウェアを配信する場合、系切り替え中に更新処理を開始できない可能性がある。また、系切り替え中に更新処理を開始できたとしても、終了ができない場合には、系切り替え後に大量のパケットインやフローエントリ設定処理などが送信される可能性がある。そのため、系切り替え前後は、管理ネットワークの負荷をできるだけ下げる必要性が高い。よって、更新ソフトウェアを事前に配信する方法が望ましい。
尚、OMA−DMサーバ404は、上述した通り、組み込み機器向けのデバイス管理プロトコルであるOMA−DMが実装されたサーバ機能を有する。
OFS31は、テーブル編集機能311と、OFS更新管理機能312と、OMA−DMクライアント313とを備える。尚、図4では、OFS32及び33は、OFS31と同等であるため図示及び説明を省略する。テーブル編集機能311は、内部のテーブル情報(不図示)(フローテーブル、グループテーブルなど)を編集(更新)する手段である。ここで、テーブル編集機能311は、管理サーバ40から取得した更新ソフトウェアを実行し、当該更新ソフトウェアの処理によりテーブルの所定のフローエントリを書き換える。
また、テーブル編集機能311は、管理サーバ40から取得した更新内容により、指定されたフローエントリの部分的な置換を行う。例えば、更新内容にcookieのみが指定されている場合には、テーブル編集機能311は、更新ソフトウェアの実行により、フローエントリのうちcookieのみを更新することができる。当該更新プログラムは、機械語等で作成されているため、OFSのハードウエアに直接アクセスすることが可能であるため、フローエントリを消さずにcookie書き換えることが可能である。従って、既存のフローエントリの削除及び新規のフローエントリの追加をする必要がなく、ルールやアクション等に変更がなければ、処理中の端末間の通信が中断されることはない。
さらに、テーブル編集機能311は、トリガにより各テーブルの全エントリを消去することや、トリガにより指定されたエントリ、又は、条件に合うエントリを消去するようにしてもよい。
OFS更新管理機能312は、管理サーバ40からの配信される更新ソフトウェアや更新内容である更新情報を取得する。また、OFS更新管理機能312は、管理サーバ40から更新開始のトリガを受信する。ここで、トリガとしては、プロトコルによる明示的な指示、セキュアチャネルの切断による暗黙的な指示、更新開始時刻の指示、これらの2つ以上の組み合わせ等が挙げられる。
まず、トリガの例としてプロトコルによる明示的な指示は、既存のflow modメッセージとは異なり、具体的な更新対象のフローエントリの指定は含む必要がなく、最低限、開始の指示が含まれていればよい。そして、外部からフローテーブルの更新開始用のメッセージを、新たにプロトコルに規定することで実現できる。また、例えば、管理サーバ40がOFC21及び22に対してローリングアップデートの指示(クラスタ切り替えM2)を行うと共に、OFS31〜33に対して更新開始の指示を行っても良い。または、当該トリガと共に、更新ソフトウェア又は更新内容の配信を含めてもよい。
次に、トリガの例としてセキュアチャネルの切断による暗黙的な指示は、通常、OFCとOFSの間で確立されているOpenFlowメッセージ送受信可能なセキュアチャネルが切断されたことを契機とするものである。つまり、OFCのローリングアップデートが行われる場合、系切替前に、当初のACT側(旧ACT側)のOFCは、各OFSとのセキュアチャネルを切断する。そして、各OFSは、セキュアチャネルが切断されたことを検出する。尚、セキュアチャネルの切断の検出については後述する。但し、OFSからOFCへの片方向通信のみを対象としたセキュアチャネル、つまり、SBY側のOFS専用のread onlyチャンネルの切断は対象としない。尚、セキュアチャネルは、上述の通りOFCとOFSとの間の管理ネットワーク内の接続を意味する。そのため、セキュアチャネルが切断されても、図3のOpenFlowネットワーク側の通信(OFS側のフローテーブルに登録されているフローエントリにヒットするもの)には影響しない。
続いて、トリガの例として更新開始時刻の指示は、OFS31〜33がトリガを受信したタイミングで更新を開始するのではなく、受信した更新開始時刻を内部に設定し、当該時刻になった場合に更新を開始するものである。尚、更新開始時刻は、上述した実行開始時刻情報としてもよい。
最後に、トリガの例として上記の組み合わせとは、例えば、更新ソフトウェア等の取得イベントと旧ACT側のOFCとのセキュアチャネルの切断検出イベントの2つのイベントの論理積が真になった場合などが挙げられる。さらに、当該2つのイベントの論理積が真になった時刻が上記更新開始時刻と異なる場合、OFS31〜33は更新処理を開始しないようにしてもよい。例えば、OFCの系切替が不調な場合には、セキュアチャネルが切断されていない可能性もあり、そのような場合にはOFSの更新処理も開始しないことが望ましいためである。
また、OFS31〜33は、フローテーブルの更新処理後、つまり、更新ソフトウェアの実行終了後に、切替後の新ACTのOFCとのセキュアチャネルの接続を確立する。その後、OFS31〜33は、当該更新ソフトウェアを削除してもよい。
ここで、新ACTに切り替わるまでにフローテーブルの更新処理が完了しなかった場合は、新ACTに切り替え後に更新ソフトウェアの実行を中断し、別途、既存の状態整合方式で未完了の更新を行っても構わない。すなわち、新ACTのOFCは、OFSから、更新が未完了のフローエントリの情報を逐次読み出し、差分をflow modメッセージにより設定し直すようにしてもよい。このように、既存の状態整合方式との組み合わせであっても、OFCからのフローエントリ再設定処理が大幅に減少するため、本発明の実施の形態は有効だと言える。
尚、OMA−DMクライアント313は、上述した通り、組み込み機器向けのデバイス管理プロトコルであるOMA−DMが実装されたクライアント機能を有する。
図5は、本発明の実施の形態2にかかるOFS31のハードウェア構成を示すブロック図である。OFS31は、OpenFlow制御IC61と、NOR FLASH MEMORY63と、CPU(Central Processing Unit)64と、イーサネット(登録商標)ドライバIC65と、HDD(Hard Disk Drive)66と、SDRAM(Synchronous DRAM)67とを備える。
OpenFlow制御IC61は、専用のハードウエアとしてOFSに組み込まれている。OpenFlow制御IC61は、フローエントリ設定済みのOpenFlowネットワーク間の通信を、CPUを介さず、高速に行うことができる。ここでは、OpenFlow制御IC61は、ASIC(Application Specific Integrated Circuit)とDSP(Digital Signal Processor)とを備える構成とする。
OpenFlow制御IC61は、イーサネット制御部611と、SRAM(Static Random Access Memory)612とを備える。イーサネット制御部611は、ポート601〜603を介してOFS32、端末11及び12との間のイーサネット通信を制御する。SRAM612は、フローテーブル613と、グループテーブル614とを記憶する。フローテーブル613は、複数のフローエントリ615を含む。各フローエントリ615は、cookie616その他、ルール、アクション及びフロー統計情報等(不図示)を含む。グループテーブル614は、複数のグループエントリ(不図示)を含む。
OpenFlow制御IC61と、NOR FLASH MEMORY63と、CPU64と、イーサネットドライバIC65とは、アドレス及びデータバス62を介して接続されている。NOR FLASH MEMORY63は、書き換え可能なROM(Read Only Memory)として位置付けられる。NOR FLASH MEMORY63は、ブートローダのイメージなどを記憶している。イーサネットドライバIC65は、管理ネットワークを介してOFC21及び22並びに管理サーバ40との通信を行う。
CPU64は、I/Oレジスタ設定または、DMA転送によりOpenFlow制御IC61の制御を行う。また、CPU64は、OFC21及び22とのOpenFllowプロトコルを使用した通信などの処理を行う。さらに、CPU64は、組み込み向けのSoC(System on a Chip)として実現することができる。また、CPU64は、PLLが内蔵されるクロックコントローラ(不図示)、SATA I/Fコントローラ(不図示)やSDRAM I/Fコントローラ(不図示)などの周辺デバイスが内蔵される。そのため、CPU64は、SATA68を介してHDD66と接続され、SDRAM/IF69を介してSDRAM67と接続される。HDD66には、組み込みLinuxなどのOSのカーネルイメージと、更新ソフトウェアや更新内容が格納される。
また、CPU64は、OpenFlowプロトコルの組み立てや解読といった、端末間の通信の中継処理の一部を行う。さらに、CPU64は、管理サーバ40との通信のための処理も行う。CPU64は、管理サーバ40から取得した更新ソフトウェア等をHDD66に格納する。そして、CPU64は、更新処理を開始するために所定のタイミングであるか否かの判定を行い、所定のタイミングである場合にHDD66から更新ソフトウェアを読み込み、実行する。これにより、更新処理が開始される。
図6は、本発明の実施の形態2にかかるOFS内のCPU上で動作するソフトウェア構成の概念図である。本発明の実施の形態2にかかるOFSのOSとしては、組み込みLinux72が実装されている。OpenFlowSwitch制御/管理アプリ73は、ユーザ空間で動作するUNIXアプリケーションである。OpenFlowSwitch制御/管理アプリ73は、OpenFlow制御IC61の制御処理、OpenFlowプロトコルの組み立て及び解読処理、並びに、OFCとの通信処理などを行う。OpenFlow制御IC用ドライバ71は、カーネル空間で動作するカーネルオブジェクトで、OpenFlow制御IC61に対するレジスタ制御などを行う。
OFS更新アプリ75は、本発明の実施の形態2の中心的な処理が実装された、ユーザ空間で動作するUNIXアプリケーションである。OFS更新アプリ75は、管理サーバ40との通信処理やダウンロードした更新ソフトウェアの管理及び制御などを行う。デバイス管理ライブラリ76は、OMA‐DMなどのデバイス管理プロトコルなどが実装されている。ログフィルタリング処理アプリ74は、ログフィルタリングルール77に基づいてログ情報を解析(フィルタリング)し、解析結果をOFS更新アプリ75へ通知する。すなわち、ログフィルタリング処理アプリ74は、ログフィルタリングルール77に基づいてsyslogなどからセキュアチャネルの切断通知を検出し、OFCとのセキュアチャネルが切断された旨を通知する。ログフィルタリング処理アプリ74により、OpenFlowSwitch制御/管理アプリ73側に、OFS更新アプリ75に特化したロジックを実装する必要がなくなる。
フローテーブル更新アプリ78は、図4のテーブル編集機能311に相当する機能が実装されたアプリケーションである。DMT制御ライブラリ791は、DMTを制御するための共有ライブラリである。ユーザ作成ライブラリ792は、各種の共通的な処理を関数化した共有ライブラリである。
ここで、OFS31〜33は、管理サーバ40から配信されるフローテーブル更新アプリ78及びDMT制御ライブラリ79を受信し、OFS更新アプリ75により、予め定められたディレクトリへ格納する。さらに、OFS31〜33は、管理サーバ40から配信されるカーネルオブジェクト(不図示)も受信できる。また、OFS31〜33は、管理サーバ40から新たな更新ソフトウェアを受信した場合、既存のOFS更新アプリ75やログフィルタリング処理アプリ74を新たな更新ソフトウェアにより置換する。
続いて、更新ソフトウェアの配信処理と、その後のOFS内部のフローテーブル更新処理の実施例について、図7及び図8のシーケンス図を用いて説明する。ここでは、OFC及びOFSの全てで、フローエントリのcookieの値のみを更新するものとする。そのため、ここで対象とする更新ソフトウェアは、OFSのOpenFlow制御IC61の内部に存在するフローテーブル613のcookieフィールド(cookie616)を直接変更するソフトウェアであるものとする。また、当該更新ソフトウェアは、高速書き換え処理及び組込み機器であるOFSの省メモリ化のため、機械語のバイナリデータであるものとする。但し、上述の通り、更新内容はこれに限定されない。
図7は、本発明の実施の形態2にかかる更新ソフトウェアの配信処理の流れを説明するためのシーケンス図である。ここでは、あらかじめ管理サーバ40とOFS31の間のTCPコネクションが確立されているものとする。また、TCPコネクションが確立するタイミングは、OFSの管理ネットワークへの接続時である。そして、当該接続のタイミングでOFS固有の情報(IPアドレスなど)が、管理サーバ40に登録されるものとする。
まず、管理サーバ40は、配信対象のOFS(例えば、OFS31)に対して更新ソフトウェア配信通知を送信する(S101)。ここで、更新ソフトウェア配信通知は、例えば、OMAで規定されたsyncML形式のXMLファイルであるが、これに限定されない。そして、更新ソフトウェア配信通知には、更新ソフトウェアが保存されているURLや更新ソフトウェアのOFS側での実行開始時刻情報が含まれる。
そして、例えば、OFS31は、管理サーバ40から更新ソフトウェア配信通知を受信する。次に、OFS31は、更新ソフトウェアのダウンロード要求を管理サーバ40へ送信する(S102)。具体的には、OFS31は、更新ソフトウェア配信通知に含まれる更新ソフトウェアが保存されているURLに対して更新ソフトウェアの取得要求を行う。
その後、管理サーバ40は、OFS31からのダウンロード要求に応じて、更新ソフトウェアをOFS31へ送信する(S103)。すなわち、OFS31は、管理サーバ40から更新ソフトウェアを取得し、HDD66に保存する。また併せて、OFS31は、実行開始時刻情報を取得し、HDD66に保存する。
図8は、本発明の実施の形態2にかかるOFCの系切替時におけるOFSのフローテーブル更新処理の流れを説明するためのシーケンス図である。尚、図8は図7の更新ソフトウェアの配信後であり、OFS31〜33には更新ソフトウェアが格納済みであるものとする。
まず、管理サーバ40は、ACT側(稼働系)であるOFC22に対して、クラスタ切り替え要求コマンドを送信する(S201)。例えば、管理サーバ40は、OFC22とSSHによるリモート接続を行い、UNXシェル上で、クラスタ切り替え要求のコマンドを発行する。これにより、クラスタ切り替えの要求を実現できる。
次に、ACT側のOFC22は、各OFSとの間のセキュアチャネルを切断する(S202)。具体的には、OFC22は、OFS31〜33のそれぞれとの間のTCPコネクションを切断する。
続いて、ACT側のOFC22は、SBY側のOFC21に対してACT遷移要求(メッセージ)を発行する(S203)。これに伴い、SBY側のOFC21はACTへの遷移を開始する。また、ACT側のOFC22は、OSの再起動処理を行う(S2050)。そして、再起動後に、OFC22はSBY(待機系)として動作する。
ここで、ステップS202のセキュアチャネルの切断後、各OFSは、OFS更新処理を開始する(S204)。具体的には、まず、各OFSは、ログフィルタリング処理アプリ74により自身とOFC22との間のセキュアチャネルが切断されたことを検出する。そして、各OFSのOFS更新アプリ75は、既に取得済みの実行開始時刻情報内であることを確認し、更新ソフトウェアの実行を開始する。
そして、各OFSは、フローテーブルの更新処理を行う(S2051、S2052等)。ここで、更新ソフトウェアに更新内容として各フローエントリのcookie値のみが設定されている場合、各OFSは、該当するフローエントリのcookieフィールドのみを直接書き換える。または、各OFSは、cookieのみ更新されたフローエントリ情報を新たに追加し、この新フローエントリ追加後に旧フローエントリを削除するようにしてもよい。この場合であっても、フローエントリの更新処理に伴うOpenFlowネットワークの切断を回避することができる。
ACTとSBYのクラスタ切り替え後、新ACT側であるOFC21と新SBY側であるOFC22との間で、OFSのトポロジー情報やOFC内で保有するフローエントリ情報の同期が行われる(S206)。これにより、新ACT側であるOFC21は、フローエントリのcookie情報が新しい値に書き換えられる。
その後、各OFSは、新ACT側のOFC21との間でセキュアチャネルの接続を確立する(S207)。具体的には、各OFSは、新ACT側のOFC21に対してTCPコネクションの接続を行う。
そして、新ACTのOFC21は、各OFSとの間でフローエントリの状態整合処理を行う(S208)。当該フローエントリの状態整合処理には、flow modメッセージ等を用いることができる。そのため、OFS側のフローテーブル更新処理が新ACTの起動までに終了しない場合でも、それ以後の更新処理に状態整合処理を用いることで、OFCとOFS間のフローテーブルの状態ずれを防ぐことができる。つまり、OFSが単独で実行する更新ソフトウェアによる更新処理と、OFCとの状態整合処理とを組み合わせることでも、同様の効果を得ることができる。そして、この場合でも、更新ソフトウェアによる更新処理においては、OFCとの通信量は抑制されるため、全ての更新処理を状態整合処理で行う場合に比べて、管理ネットワークの通信量が減少し、端末間の通信の中継への影響を抑えることができる。
このように、本発明の実施の形態2にでは、ACTとSBYでフローエントリの仕様が異なっていても、ローリングアップデートを行う場合に、クラスタ切り替え後の大量のflow modの送信を抑えることができる。その理由は、本発明の実施の形態2により、OFS側で自律的にフローテーブルの書き換えを行うようになるため、OFCとの通信がトリガ等の最小限となるからである。
また、仕様変更により、フローエントリのcookie値などを変更する場合のハードルやリスクが非常に低くなる。本発明の実施の形態2により、OFCを介さずにOFS上で、フローエントリ情報を直接上書きしてしまうので、フローエントリが無効になる時間が無くなるからである。
<発明の実施の形態3>
続いて、本発明の実施の形態3では、通信中継装置に対して、複数の中継定義情報を更新するための命令(更新情報)を生成して、送付する管理装置に関して説明する。図9は、本発明の実施の形態3にかかる管理装置8000の構成を示すブロック図である。尚、図9における通信中継装置100は、上述した図1の通信中継装置100と同等であるか、少なくとも装置間の通信の中継を中継定義情報111a〜111nに基づいて行うものであればよい。そして、通信中継装置100は、例えば、OFCのような制御装置(不図示)により中継定義情報111a〜111nが予め設定されているものとする。
管理装置8000は、更新情報生成部8100と、送付部8200とを備える。更新情報生成部8100は、通信中継装置100で用いられ、かつ、複数の中継定義情報を更新するための更新情報8300を生成する。送付部8200は、更新情報8300を通信中継装置100に対して送付する。ここで、更新情報8300は、例えば、図1の更新情報112や、上述した更新プログラム、更新内容等のように、複数の中継定義情報をまとめて更新するための情報群である。これにより、管理装置8000は、中継定義情報の更新内容によらず、通信中継装置100に対して中継定義情報の更新を指示する命令の送信回数を固定回数とすることができる。そのため、通信中継装置100における装置間の通信への影響を抑えつつ、通信中継装置の中継定義情報を更新することができる。
<発明の実施の形態4>
ここで、中継定義情報をバージョンアップする場合には、更新量が多く、更新箇所がバージョンアップの度に異なるため、各バージョンアップに特化した専用の更新プログラムを作成し、複数の通信中継装置へ配信してそれぞれを実行させることが考えられる。
しかしながら、当該更新プログラムを作成するには、通信中継装置固有の組み込みに特化したソフトウェアの知識(デバイス管理プロトコルや関連API(Application Program Interface)の仕様を含む)、及び、ハードウェアの知識(内蔵の組み込み機器のレジスタやメモリマップの仕様等)が必要となる。一方で、当該更新プログラムを作成するのは、保守部門のサービスエンジニアであることが多いため、難易度が高いという問題点がある。
そこで、本発明の実施の形態4では、組み込み機器を搭載する通信中継装置における広範な専門知識が必要とせずに、中継定義情報を更新するために各通信中継装置で実行される更新プログラムを容易に生成するためのプログラム生成装置、方法及びプログラム等について説明する。尚、本発明の実施の形態4にかかるプログラム生成装置は、上述した実施の形態3にかかる管理装置8000の一形態である。
ここで、本発明の実施の形態4において、上述した更新情報8300は、複数の中継定義情報を更新するためのプログラムであって、通信中継装置100で実行されるものである。そして、上述した管理装置8000は、中継定義情報に対する更新処理が定義された更新処理モジュールを記憶する記憶部をさらに備え、前記更新情報生成部は、複数の中継定義情報を更新するための前記更新処理モジュールを有し、前記通信中継装置で実行されるプログラムを、前記更新情報として生成するプログラム生成部をさらに備えることが望ましい。
図10は、本発明の実施の形態4にかかるプログラム生成装置800の構成を示すブロック図である。プログラム生成装置800は、記憶部810と、構成情報生成部820と、ノード状態情報生成部830と、プログラム生成部840とを備える。ここで、構成情報生成部820、ノード状態情報生成部830及びプログラム生成部840は、上述した更新情報生成部8100の一部である。また、プログラム生成装置800は、上述した送付部8200を有していてもよい。
記憶部810は、中継定義情報に含まれる複数の要素に対する更新処理が実装された更新処理モジュール811を予め記憶する記憶装置である。ここで、中継定義情報に含まれる複数の要素とは、例えば、上述したフローテーブルにおけるフローエントリ、ルール、アクション、フロー統計情報及びcookieの値等であるか、上述したグループテーブルにおけるグループエントリ等であってもよい。構成情報生成部820は、中継定義情報に含まれる複数の要素のそれぞれを複数のノードにより定義した構成情報を生成する。ノード状態情報生成部830は、複数のノードのうち更新対象の要素に対応するノードの状態と、当該状態において更新処理モジュール811を呼び出す処理を定義したノード状態情報を生成する。プログラム生成部840は、構成情報及びノード状態情報に基づいて、中継定義情報を保持する通信中継装置で実行するためのプログラムを生成する。
図11は、本発明の実施の形態4にかかるプログラム生成処理の流れを示すフローチャートである。まず、プログラム生成装置800は、構成情報を生成する(S301)。例えば、構成情報生成部820は、外部からの入力に応じて、中継定義情報に含まれる複数の要素のそれぞれを複数のノードに割り当てて、中継定義情報における構成情報として生成する。次に、プログラム生成装置800は、ノード状態情報を生成する(S302)。例えば、ノード状態情報生成部830は、外部からの入力に応じて、構成情報に定義された複数のノードのうち、更新対象の要素に対応するノードについて、当該ノードの状態を定義する。そして、ノード状態情報生成部830は、記憶部810を参照し、当該定義した状態において更新処理モジュール811を呼び出す処理を定義して、ノード状態情報を生成する。その後、プログラム生成装置800は、プログラムを生成する(S303)。例えば、プログラム生成部840は、生成した構成情報及びノード状態情報に基づいて、更新対象の通信中継装置で実行するための更新プログラムを生成する。
このように、本発明の実施の形態1により生成された更新プログラムは、中継定義情報の各要素とノードとが対応付けられており、ノードへのアクセス処理として更新処理モジュールを呼び出すものである。そのため、ノードへのアクセス処理を記述することが当該ノードに対応する要素(例えば、OpenFlowにおけるフローテーブルのフローエントリやcookie値等)への更新処理となる。よって、当該更新プログラムの作成者は、組み込み機器を搭載する通信中継装置における広範な専門知識が必要とせずに、中継定義情報を更新するために各通信中継装置で実行される更新プログラムを容易に生成することができる。
<発明の実施の形態5>
本発明の実施の形態5は、上述した実施の形態4の応用例である。そして、本発明の実施の形態5では、上述した実施の形態2にかかる更新ソフトウェアを生成するプログラムとするものである。
ここで、OFCとOFSとは、開発メーカや開発部門が異なる場合が、ほとんどである。一方で、OFSのフローエントリは、制御元であるOFCと同期を取る必要がある。それ故、OFC側のバージョンアップを行う場合には、OFS側のフローテーブル等の更新も必要となり得る。その関係で、OFSに対してcookieの置換のようなフローエントリの更新を行うための更新プログラムの作成は、OFC開発者やOFCのサポートエンジニアが作成することとなる。
しかしながら、上述したように、OFSの更新プログラムを開発するためには、OFS固有の組み込みに特化したソフトウェア(デバイス管理プロトコルや関連APIの仕様を含む)やハードウェア(後述するOpenFlow制御ICのレジスタやメモリマップの仕様など)の知識が必要となる。さらに、OFCは複数の機種のOFSを扱うため、OFCのエンジニアは、サポートする全OFSに対して、更新プログラムを作成しなければならない。
そこで、本発明の実施の形態5では、上述した実施の形態4にかかるプログラム生成手法を適用することで、OFSにおける広範な専門知識が必要とせずに、フローテーブルを更新するために各OFSで実行される更新プログラムを容易に生成するものである。
本発明の実施の形態5は次のように表現できる。すなわち、更新情報生成部は、更新対象の要素における更新値(例えば、更新後のcookie値)の入力を受け付け、当該更新値を含めて更新情報(例えば、後述するcookie変換定義等)を生成し、前記更新処理モジュールは、前記更新情報から抽出した更新値を用いた前記更新処理が実装されていることが望ましい。
さらに、前記ノード状態情報生成部は、前記プログラムを開始可能な時間帯を示す開始時間情報(例えば、実行開始時刻情報等)の入力を受け付け、前記定義した状態へ遷移するための条件として前記開始時間情報を設定して、前記ノード状態情報を生成すると良い。
また、前記記憶部は、前記構成情報及び前記ノード状態情報から前記プログラムへ変換するためのルールを前記通信中継装置の種類ごとに定義した複数の変換ルールをさらに記憶し、前記プログラム生成部は、前記複数の変換ルールの中から、前記更新対象の通信中継装置の種類に応じた変換ルールを選択し、当該選択した変換ルールに基づいて前記プログラムを生成するようにしてもよい。
または、前記構成情報及び前記ノード状態情報から前記プログラムへ変換を行う複数のモデルコンパイラを、前記通信中継装置の種類ごとに備え、前記プログラム生成部は、前記複数のモデルコンパイラの中から、前記更新対象の前記通信中継装置の種類に応じたモデルコンパイラを選択し、当該選択したモデルコンパイラにより変換して前記プログラムを生成するようにしてもよい。
尚、前記中継定義情報は、OpenFlow技術に基づくフローテーブルに定義された設定情報を含むものとするが、これに限定されない。また、前記構成情報生成部は、前記構成情報としてDMT(Device Management Tree)を用いるものとするが、これに限定されない。
図12は、本発明の実施の形態5にかかるプログラム生成装置800aのハードウェア構成を示すブロック図である。プログラム生成装置800aは、上述したプログラム生成装置800の一例であり、かつ、開発端末50の一例でもある。プログラム生成装置800aは、CPU(Central Processing Unit)801と、RAM(Random Access Memory)802と、ROM(Read Only Memory)803と、IF部804と、ハードディスク805とを備える。
また、ハードディスク805は、不揮発性記憶装置である。ハードディスク805は、OS8051、統合開発環境8052、変換ルール8053及びライブラリ8054等を予め格納しているものとする。
統合開発環境8052は、後述するモデル作成ツール、モデルコンパイラ、モデル検証ツール及びコンパイラ/リンカ等を含む。但し、コンパイラ/リンカは含まなくても良い。統合開発環境8052は、発明の実施の形態4にかかるプログラム生成プログラムを含み、GUIによりDMTによる構成情報(例えば、後述するDMT図)及びノード状態情報(例えば、後述する状態遷移図)等であるDMTモデルの設計を支援するためのソフトウェアである。そして、統合開発環境8052は、DMTモデルから更新プログラムを生成する。つまり、統合開発環境8052は、モデルコンパイラによりDMTモデルからソースコードへ変換し、その後gccなどのコンパイラ/リンカによって機械語のバイナリであるユーザ作成アプリに変換される。
変換ルール8053は、DMTモデルからソースコードへ変換するためのルールを定義したファイルである。そのため、モデルコンパイラは変換ルール8053に基づいてDMTモデルをソースコードへ変換する。尚、変換ルール8053は、非常に複雑なスクリプトであるため基本的には開発ツールベンダが提供するが、ユーザが独自の修正を入れたものを用いることもできる。さらに、機種毎に複数の変換ルール8053を用意することで、単一のDMTモデルで複数の機種向けのソースコードを生成することが可能である。
ライブラリ8054は、フローテーブルの更新処理に用いられる各種ライブラリ関数、クラスライブラリ、API等のプログラムモジュールである。ライブラリ8054は、上述した更新処理モジュール811の一例を含む。また、ライブラリ8054は、開発ツールベンダが提供するDMT制御ライブラリ(上述したDMT制御ライブラリ791を含む)や、ユーザが必要に応じて作成するユーザ作成ライブラリ(上述したユーザ作成ライブラリ792を含む)を含む。DMT制御ライブラリは、DMTに割り当てられたノード(フローテーブルなど)を制御するためのライブラリである。ユーザ作成ライブラリは、複雑なロジックが実装された関数群であり、ユーザがC/C++言語などを使用して通常の開発において作成する。これにより、モデルの振る舞いとロジックを分離することが実現できる。尚、ライブラリ8054は、予めOFSへ配信しておいてもよい。
CPU801は、プログラム生成装置800aにおける各種処理、RAM802、ROM803、IF部804及びハードディスク805へのアクセス等を制御する。IF部804は、上述した管理サーバ40との通信を行う。
プログラム生成装置800aは、CPU801が、RAM802、ROM803又はハードディスク805に格納されたOS8051、統合開発環境8052等を読み込み、実行する。これにより、プログラム生成装置800aは、構成情報生成部820、ノード状態情報生成部830、プログラム生成部840、更新情報生成部等として機能し、更新プログラムを生成することができる。
図13は、本発明の実施の形態5にかかる更新プログラムの生成の概念を説明する図である。統合開発環境85は、上述した統合開発環境8052がCPU801により実行されている状態を機能ブロックとして示したものである。統合開発環境85は、モデル作成ツール851と、モデルコンパイラ852と、コンパイラ/リンカ853とを含む。
モデル作成ツール851は、ユーザによる入力860に応じてDMTモデルであるDMT図861及び状態遷移図862並びにcookie変換定義863を生成する。ユーザによる入力860には、要素をノードへの割り当て、ノードの選択、状態及び当該状態におけるアクション記述、更新値等を含む。例えば、モデル作成ツール851は、ユーザからの特定の要素における更新値の入力に応じて、CSVファイルなどの変換ルール定義ファイル(後述するcookie変換定義等)を生成する。また、モデル作成ツール851は、状態遷移図には、変換ルール定義ファイルを読み込み、更新を行う更新処理モジュールの呼び出しを設定する。そのため、ユーザは、cookieなどの新旧パラメータを記述するだけで、更新処理を実装することができる。
モデルコンパイラ852は、DMT図861、状態遷移図862及びcookie変換定義863を読み込み、変換ルール864に基づいてソースコードへ変換してソースプログラム865として出力する。尚、変換ルール864をOFSの機種ごとに複数備えることにより、一つのDMTモデル及び一つのモデルコンパイラ852により、複数種類のOFSに応じた変換ルール864を用いることで、複数種類のソースプログラム865を生成することができる。または、モデルコンパイラ852をOFSの機種ごとに複数備えることにより、一つのDMTモデルから複数種類のOFSに応じたモデルコンパイルを用いることで、複数種類のソースプログラム865を生成することができる。そのため、統合開発環境8052は、変換ルール定義ファイルとMDAのアクション記述言語を用いてOFSの機械語バイナリ又はJava(登録商標)などの中間言語の自動生成を行うものである。
コンパイラ/リンカ853は、ソースプログラム865から機械語のバイナリであるオブジェクトプログラム866へ変換して出力する。ここで、オブジェクトプログラム866は、ユーザ作成アプリ8661及び必要なライブラリ8662を含むものとしているが、最低限ユーザ作成アプリ8661を含めばよい。
図14は、本発明の実施の形態5にかかるOpenFlow switchのDMT図861の例を示す図である。DMT図861は、ツリー構造で表現され、OpenFlowにおけるフローテーブルやグループテーブル、そして各テーブルに含まれる要素(フローエントリ、テーブルID、cookie、マッチ条件、アクション等)が階層的にノードに割り当てられている。そのため、各ノードはURLのような形式で一意に特定することができ、参照することができる。例えば、DMTノードcookieは、“./openflow/flow_table/flow_entry/cookie”という形式で表現することができる。
図15は、本発明の実施の形態5にかかるDMT状態遷移図862の例を示す図である。DMTノードの状態遷移図862には、各ノードにおける状態毎にアクション記述言語によるDMTの振る舞いを定義することができる。ここで使用されるアクション記述言語は、Executable UML向けのものを改良したものである。
図15の状態遷移図862は、フローテーブルに対するDMTノード“flow entry”に対する振る舞いを記述した例であり、フローテーブルが持つ全フローエントリのcookieを置換するという処理が記述されている。DMTノード8620は、状態遷移図862がノード”flow entry”を対象とすることを定義している。ここで、DMTノード8620は、DMT図861に基づき、syncMLでのlocal URIの表現方法である”./openflow/flow_table/flow_ entry”という形式で表現している。
イベント8621は、「ソフト更新開始イベント」の定義である。そして、イベント8621には、ソフト更新開始イベントの開始可能な時間帯を示す開始時間情報が設定されている。ここで、開始時間情報は、ユーザによる入力860に含まれており、モデル作成ツール851が状態遷移図862に設定する。
状態8622は、「cookie値変換中」状態の定義である。DMTノードのflow entry状態が、本状態になると、処理8623及び8624においてアクション記述言語で記述された処理が実行される。ここで、状態8622まで遷移する処理を具体的に説明すると次のようになる。例えば、OFSがsecure channel切断などを検出すると、ソフト更新開始イベントが発生する。そして、当該イベントが開始時間情報の範囲を満たせば、DMTノードflow_entryが「cookie値変換中」状態8622に遷移することとなる。一方、トリガが発生したとしても開始時間情報の範囲外であれば、本イベントは無効、つまり状態8622には遷移しないこととなる。
処理8623は、CSVファイルを使用してcookieを変換する処理が記述されている。具体的には、Ofutil::cookie_converter()というライブラリ関数を呼び出す処理が記述されている。Ofutil::cookie_converter()は、cookie変換定義863のCSVファイルに基づいて、cookieを書き換える関数であり、例えば、DMT制御ライブラリに定義されているものとする。よって、64bitのフローエントリのIDであるcookieの上位16bitを、CSVファイルを使用して置換する処理を示す。
処理8624は、新cookieにmatch条件から計算されるhash値を挿入する処理が記述されている。具体的には、OfUserFuncs::calc_hash()というライブラリ関数を呼び出す処理が記述されている。OfUserFuncs::calc_hash()は、フローエントリのmatch条件からhash値を求める関数であり、例えば、ユーザ作成ライブラリに定義されているものとする。
尚、OfUserFuncs::calc_hash()などのユーザ作成ライブラリに含まれるユーザ定義関数は、アクション記述言語や他のスクリプト言語で作成することができる。複雑なロジックの場合は、C/C++言語などを用いて、通常の開発の手順で作成することもできる。C/C++言語などで作成された場合、これらの関数は共有ライブラリ化され、DMTのモデルから呼び出すことができる。つまりこれは、モデルの振る舞いと複雑なロジックを完全に分離できるということを表している。
また、特定のフローエントリのインスタンスを取得したい場合は、下記のように記述することができる。下記の例は、DMTノード”flow_table”に対して、cookieの値が0のフローエントリのみ選択する場合の表現方法である。
Select flow_info from flow_entry where this.flow_entry.cookie_id = 0
このように、状態遷移図862では、DMTの全インスタンス(この場合は、全フローエントリ)を対象として更新処理が行われることが定義されている。この更新処理は、ライブラリ8054に含まれているため、ユーザが“全フローエントリに対してXXを行う”という処理を明示的に記述する必要は無く、更新処理の具体的な実装の知識も不要となる。
図16は、本発明の実施の形態5にかかるcookie変換定義863であるcookie変換ファイルの例を示す図である。cookie変換定義863は、CSV形式の変換表である。cookie変換定義863は、新旧のcookie種別が定義されている。状態遷移図862内で、アクション記述言語を用いて、関連するライブラリ関数(DMT制御ライブラリ関数等)の呼び出しを記述するだけで、cookieの置換が可能となる。そのため、DMTモデルから、機械的な変換処理をロジックから切り離すことができる。
図17は、本発明の実施の形態5にかかる更新プログラムをOFS上での実行した場合のシーケンス図である。前提として、本発明の実施の形態5にかかるプログラム生成装置800aにより生成されたバイナリ形式の更新プログラム(OFS更新アプリ75、フローテーブル更新アプリ78及びユーザ作成ライブラリ792)が、OFSに配信済みであるものとする。また、OFSのフローテーブルに、3個のフローエントリが登録されているものとする。尚、ログフィルタリング処理アプリ74、DMT制御ライブラリ791及びOpenFlowSwitch制御/管理アプリ73は、図6に示したものと同等であるものとする。また、この例では、図15のmatch条件からhash値を生成するロジックがC言語で作成されており、gccを用いたビルド作業によりユーザー作成ライブラリ792が生成されている。
まず、ログフィルタリング処理アプリ74は、セキュアチャネルの切断を検出し、OFS更新アプリ75へセキュアチャネルの切断通知を送信する(S401)。次に、OFS更新アプリ75は、有効なDMTノードのインスタンスを検索および実行開始時刻情報の比較を行う(S402)。ここでは、セキュアチャネルの切断通知の時刻が実行開始時刻情報の範囲内であるものとする。
そして、OFS更新アプリ75は、OpenFlowSwitch制御/管理アプリ73を参照し、全フローエントリ情報を取得する(S403)。その後、まず、OFS更新アプリ75は、DMTノード“flow entry 1”を実行する(S411)。具体的には、DMTノード“flow entry 1”についてフローテーブル更新アプリ78を呼び出す。フローテーブル更新アプリ78は、DMT制御ライブラリ791を呼び出し、cookieの全置換を行わせる(S412)。続いて、フローテーブル更新アプリ78は、ユーザ作成ライブラリ792を呼び出し、match条件からhash値を取得する(S413)。その後、フローテーブル更新アプリ78は、cookieの置換を行う(S414)。以後、OFS更新アプリ75は、同様に、DMTノード“flow entry 2”を実行し(S421〜S424)、DMTノード“flow entry 3”を実行する(S431〜S434)。
このように、本発明の実施の形態5により、開発者でない保守部門のサービスエンジニアでも、OFSの更新ソフトウェアを作成できる。その理由は、本発明の実施の形態5にかかる統合開発環境85を用いて作成することによりモデルの振る舞いとロジックを分離できるからである。そして、複雑なロジックについてのみ、開発部門に開発を依頼すればよくなり、開発効率が高まる。
また、OFS固有のシステム依存部分(プログラミング言語、OSなど)やハードウェアに関する知識の習得が不要となる。また、コーディング工程も簡略化できる。その理由は、本発明の実施の形態5によりDMTのモデルからソースコードが自動生成され、さらにDMTに対する読み書きのみで、フローテーブルやOpenFlow制御ICへのレジスタアクセスが実現でき、ソースコードも自動生成されるからである。さらに、各々の機種向けのモデルコンパイラを用意しておけば、単一のDMTモデルで、複数の機種に対応したOFSの更新プログラムも作成できる。
また、本発明の実施の形態5では、フローテーブル内のパラメータなどのOFSの内部パラメータや機能をDMT内のノードに割り当てることにより、ユーザは、MDAのアクション記述言語(executable UMLのaction記述言語)などにより容易に更新処理を定義することができる。そして、モデルコンパイラ経由でC/C++などのNative言語や中間言語のソースコードに変換するものである。
このため、従来のMDA技術とは異なり、ユーザは、DMTのノード単位で、ソフトウェア書き換え開始のイベントを受けた場合のアクションを記述するだけでよく、更新プログラムを作成する難易度を下げることができる。
また、本発明の実施の形態5では、ソフトウェア更新開始イベントに実行開始時刻情報を設定する。これにより、更新処理の開始タイミングを制御することができる。
さらに、変換表を参照してcookieの種別変換を行うライブラリ(更新処理モジュール)を予め作成しておくことで、新旧のcookie種別変換などに関しては変換表(CSVファイルなど)を記述しておけばよくなる。そして、アクション記述言語からサポートするライブラリを呼ぶだけで、容易に新旧パラメータの変換が可能となる。よって、この点においても更新プログラムを作成する難易度を下げることができる。
また、モデルコンパイラを複数用意すれば、単一のモデル記述から複数の機種のOFSのバイナリプログラムを生成でき、複数の機種のOFSに対応することが可能となる。
また、本発明の実施の形態5は、抽象化されたDMTのモデル記述から、OFSの更新ソフトウェアのバイナリを自動生成することができる。このとき、ユーザは、DMTのノードに関連する部分のみ記述するだけでよく、更新プログラム全体のモデル記述を行う必要がない。
<その他の発明の実施の形態>
上述した発明の実施の形態は、フローエントリのcookie書き換え以外にも、グループテーブルのグループIDのリファクタリング(グループエントリの内容へ変更せずにグループIDのみ置換する)などにも応用可能である。
尚、上述した実施の形態2では、OFCのローリングアップデートの場合について説明したが、これに限定されない。例えば、1台のOFCをアップデートするために停止するタイミングを所定のタイミングとしてもよい。さらに、OFCが二重化されている場合について説明したが、これに限定されない。例えば、通信制御装置が1台で運用されている場合に、当該通信制御装置のメンテナンスに合わせて、通信中継装置内の複数の中継定義情報の更新内容を1つにまとめた更新情報を送信することにより、更新を行うようにしてもよい。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、任意の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。
非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、DVD(Digital Versatile Disc)、BD(Blu-ray(登録商標) Disc)、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、コンピュータプログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。