以下、本発明の各実施形態について説明する。
本発明の各実施形態に係る通信装置は、NW機能間でパケット転送を行うのではなく、パケットのデータ自体は移動させずに、定められた順序に従って各NW機能を実行することによって、複数のNW機能の組み合わせを実現する。これにより、本発明の各実施形態に係る通信装置においては、NW機能間でのパケット転送が発生しないため、通信装置内で発生する通信の遅延を抑制することができる。また、本発明の各実施形態に係る通信装置は、小規模な機能を多数組み合わせる場合における通信の遅延の抑制に対してより有効である。
また、以下に説明する、本発明の各実施形態に係る通信装置によれば、各NW機能が定められた順序に従って逐次的に実行されるため、複数のNW機能が、パケットの読み込み処理や書き込み処理等を同時に行うことはないため、排他制御が必要な処理の数を少なくすることができる。さらに、本発明の各実施形態によれば、各NW機能を実行する動作主体が単一のソフトウェアプロセスとなるように通信装置を実装することが可能であるため、各NW機能を複数のソフトウェアプロセスによってそれぞれ実装した場合と比べて、コンテキストスイッチによる通信の遅延の発生を抑制することができる。
本発明の各実施形態に係る通信装置は、複数のNW機能を組み合わせることによって、単一の汎用ハードウェアを仮想的な通信装置として動作させることができる。なお、ここでいう仮想的な通信装置とは、コアネットワーク装置でも、アクセスネットワーク装置でもよい。本発明の各実施形態に係る通信装置は、例えば、MPCP(Multi-Point Control Protocol)機能やDBA(Dynamic Bandwidth Allocation)機能を機能インスタンスとして実装することにより、汎用ハードウェアを、アクセスネットワークの仮想OLT(Optical Line Terminal;光終端装置)として動作させることもできる。
[通信装置の機能構成]
以下、本発明の各実施形態に係る通信装置の機能構成について図面を参照しながら説明する。
図1は、本発明の各実施形態に係る通信装置の機能構成の概略を示す機能ブロック図である。図示するように、通信装置1は、機能ファイル保持部11と、機能インスタンス12と、処理順序制御部13と、パケット受信部14と、パケット送信部15と、を含んで構成される。
機能ファイル保持部11は、NW機能の処理が記述された機能ファイルを保持する。機能ファイルは、NW機能の処理において必要な手続き群及び変数群を記したソースコード、もしくはコンパイル後の実行ファイル等である。
機能インスタンス12は、機能ファイルを実行形式にした後、組み合わせるNW機能ごとにメモリ(図示せず)に展開した手続き群及び変数群である。
パケット受信部14は、外部の装置が取得したパケット(通信パケット)を当該外部の装置から受信する。処理順序制御部13は、当該パケットをパケット受信部14から取得し、定められた順序に従って機能インスタンス12の手続きを呼び出し、取得したパケットに対してNW機能に関する処理を実行する。取得したパケットは、指定された処理が終わった後、破棄されるか、もしくはパケット送信部15を介して外部の装置(または、他の外部の装置)へ送出される。
処理順序制御部13は、実行順序情報管理部131と、インスタンス情報管理部132と、機能実行部133と、パケット保持部134と、を含んで構成される。
実行順序情報管理部131は、NW機能に関する処理の実行順序を示す実行順序ルールテーブルを実行順序情報として保持する。また、実行順序情報管理部131は、実行順序の変更の要求があった場合には実行順序のルールの変更を行ったり、特定のNW機能の削除の要求があった場合には機能の削除を行ったりする。
インスタンス情報管理部132は、メモリに展開された機能インスタンスの識別子(以下、「インスタンスID」という)、及び各機能インスタンス12に属する手続きを識別する識別子(以下、「手続きID」という)、及び上述した手続きが展開されたメモリのアドレスを、インスタンス情報として保持する。また、新たな機能インスタンス12の追加要求、機能削除の要求、または機能置き換えの要求があった場合には、インスタンス情報管理部132は、保持している情報の追加または削除を行う。なお、インスタンス情報は、手続きが展開されたメモリのアドレスだけでなく、機能インスタンスが展開されたメモリのアドレスに関する情報を含んでいてもよい。
機能実行部133は、上述したインスタンス情報に基づいて、機能インスタンス12に属する手続きを呼び出し、パケット保持部134に保持されたパケットに対して処理を行う。さらに、機能実行部133は、上述した実行順序ルールテーブルが示す実行順序に従い、手続きの返り値に応じて次の手続きを呼び出す。なお、手続きの返り値はなくてもよい。また、返り値が「0」の場合はパケットの破棄を表し、返り値が「0」よりも小さい場合は異常終了を表すと規定する。
<第1の実施形態>
以下、本発明の第1の実施形態に係る通信装置1aについて図面を参照しながら説明する。本実施形態に係る通信装置1aは、複数のNW機能を組み合わせて転送を行う。
以下、通信装置1aによって、パケットのVLAN−ID(Virtual Local Area Network-Identifier)の変換を行うVLAN−ID変換機能、及び、特定のIP(Internet Protocol)アドレスのパケットを破棄するフィルタ機能、の2つの機能の組み合わせを実現する例を、図2乃至図5を参照しながら説明する。
図2は、本発明の第1の実施形態に係る通信装置1aにより複数の機能を組み合わせて実行する際の機能部間の連携処理の一例を示す図である。図3は、本発明の第1の実施形態に係る通信装置1aの機能実行部133の動作を示すフローチャートである。図4は、本発明の第1の実施形態に係る通信装置1aの実行順序情報管理部131が保持する実行順序ルールテーブルの一例を示す図である。図5は、本発明の第1の実施形態に係る通信装置1aのインスタンス情報管理部132が保持する機能インスタンス情報テーブルの一例を示す図である。
図2に図示するように、まず、機能実行部133は、実行順序情報管理部131から、実行順序ルールテーブルを取得する。実行順序ルールテーブルは、図4に示すように、現在実行している機能インスタンス12を識別する「実行インスタンスID」と、現在実行している機能インスタンス12の手続きを識別する「実行手続きID」と、実行処理の「返り値」と、当該返り値に応じた次に実行すべき機能インスタンス12を識別する「次実行インスタンスID」と、当該返り値に応じた次に実行すべき機能インスタンス12の手続きを識別する「次実行手続きID」と、が対応付けられたテーブルである。
なお、図4には図示していないが、次に実行すべき機能インスタンス12及び手続きが、返り値に関わらず同一であるような場合には、実行順序ルールテーブルにおける「返り値」の項目の値として「*」を設定してもよい。また、図4には図示していないが、返り値がない場合に備えて、実行順序ルールテーブルにおける「返り値」の項目の値として「NULL(空文字)」を設定してもよい。
また、実行している機能インスタンス12の種別に関わらず、返り値が「0」である場合には、機能実行部133は、パケット保持部134に保持されたパケットを破棄する。
また、最初に実行すべき機能インスタンス12及び手続きは、実行順序ルールテーブルの1行目に、「実行インスタンスID」の項目の値として「0」(図4においては、「START(0)」と図示)、「実行手続きID」の項目の値として「0」(図4においては、「START(0)」と図示)、及び「返り値」の項目の値として「0」(図4においては、「START(0)」と図示)、がそれぞれ設定される。なお、実行順序ルールテーブルの1行目における「返り値」の項目の値は、「0」ではなく「*」であってもよい。
続いて、機能実行部133は、当該機能実行部133が現在実行している機能インスタンス12を識別する実行インスタンスIDを表す変数である変数CUR_INST_ID、機能実行部133が現在実行している機能インスタンス12の手続きを識別する手続きIDを表す変数である変数CUR_METD_ID、及び、当該手続きの返り値を表す変数である変数CUR_RETに、それぞれ「0」を代入することにより初期化する(図3、ステップS001)。
続いて、機能実行部133は、実行順序ルールテーブルを読み込み(図3、ステップS002)、当該実行順序ルールテーブルの1行目から、各行に記述されている「実行インスタンスID」、「実行手続きID」、及び「返り値」の項目の値が、それぞれ、変数CUR_INST_ID、変数CUR_METD_ID、及び変数CUR_RETと一致する行を検索する(図3、ステップS003)。
図4に示す実行順序ルールテーブルにおいて、1行目の「実行インスタンスID」、「実行手続きID」、及び「返り値」の項目の値は、それぞれ「0」(START(0))であり、上記においてそれぞれ「0」を代入した変数CUR_INST_ID、変数CUR_METD_ID、及び変数CUR_RETに一致する。これにより、機能実行部133は、一致した行(すなわち、図4に示す実行順序ルールテーブルの1行目)の「次実行インスタンスID」の項目の値である「1」と、「次実行手続きID」の項目の値である「1」を、それぞれ、変数NXT_INST_IDと、変数NXT_METD_IDに代入する(図3、ステップS004)。これにより、変数NXT_INST_ID=1、変数NXT_METD_ID=1となる。
続いて、機能実行部133は、インスタンス情報管理部132から、次に実行する機能インスタンス12及び手続きを示す機能インスタンス情報テーブルを取得する。機能インスタンス情報テーブルは、図5に示すように、機能インスタンス12の名称を示す「機能インスタンス名」と、当該機能インスタンス12に属する手続きの名称を示す「手続き名」と、当該機能インスタンス12を識別する「インスタンスID」と、当該機能インスタンス12に属する手続きを識別する「手続ID」と、メモリ上において当該手続きが展開されている位置(アドレス)を示す「メモリアドレス」と、が対応付けられたテーブルである。なお、機能インスタンス情報テーブルにおいて、手続きのメモリアドレスの項目は、空欄でもよい。また、図5には図示していないが、機能インスタンス情報テーブルは、手続きのメモリアドレスのみではなく、機能インスタンスのメモリアドレスを含んでいてもよい。
機能実行部133は、機能インスタンス情報テーブルを読込み(図3、ステップS005)、当該機能インスタンス情報テーブルの1行目から、各行に記述されている「インスタンスID」、及び「手続きID」が、それぞれ、変数NXT_INST_ID、及び変数NXT_METD_IDと一致する行を検索する(図3、ステップS006)。
図5に示す機能インスタンス情報テーブルにおいて、2行目に記述された機能インスタンス12(受信機能インスタンス)の「インスタンスID」、及び「手続きID」の項目の値は、それぞれ「1」であり、上記においてそれぞれ「1」を代入した変数NXT_INST_ID、及び変数NXT_METD_IDに一致する。
機能実行部133は、一致した行(すなわち、2行目に記述された機能インスタンス12(受信機能インスタンス))の「メモリアドレス」の項目の値である「0x000000」を取得する。そして、機能実行部133は、取得したメモリアドレスに基づいてメモリを参照して手続きを呼び出し、処理を実行する(図3、ステップS007)。
また、機能実行部133は、手続き呼び出しの際、パケット保持部134に保持されたパケットにおけるメモリアドレスを受信機能インスタンス12aへ出力する。
また、受信機能インスタンス12aの受信手続きは、パケット受信部14からパケットを取り出し、パケット保持部134にパケットを移す。正常なパケット転送が行われた場合、受信機能インスタンス12aの受信手続きは処理を終了し、返り値として正常終了を表す値(「0」より大きな整数)を機能実行部133へ出力する。なお、パケット受信部14にパケットが存在しない場合、受信機能インスタンス12aの受信手続きは、返り値として「−1」を機能実行部133へ出力する。また、正常終了を表す値(「0」より大きな整数」)は、実行順序ルールテーブルに記載されている返り値であることが望ましい。これは、受信機能インスタンス12aに限らず、他の機能インスタンスについても同様である。
機能実行部133は、実行した機能インスタンス12の手続きから返り値を受け取ると、当該返り値を変数CUR_RETに代入する(図3、ステップS008)。
返り値が「0」であった場合(図3、ステップS009・NO)は、機能実行部133は、パケット保持部134が保持しているパケットを破棄し(図3、ステップS010)、制御が、変数初期化の段階(図3、ステップS001)に戻る。返り値が「0」以外であった場合(図3、ステップS009・YES)は、機能実行部133は、再び実行順序ルールテーブルを読み込み(図3、ステップS002)、次に実行する機能インスタンス及び手続きを示す情報を検索する(図3、ステップS003)。
例えば、図4の実行順序ルールテーブルの2行目に示すように、「実行インスタンスID」の項目の値が「1」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すように受信機能インスタンス12aの受信手続きであり)、返り値が「1」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「2」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「2」であり「手続きID」の項目の値が「1」であるVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きを実行する。
機能実行部133は、機能インスタンス情報テーブルに基づいて、上記のVLAN−ID変換手続きのメモリアドレスである「0x000100」を取得し、当該メモリアドレスに基づいてメモリを参照してVLAN−ID変換手続きを実行する。
なお、VLAN−ID変換機能インスタンス12bは、例えば、変換前のVLAN−IDと変換後のVLAN−IDを対応付けたリストを保持しており、パケット保持部134が保持しているパケットのVLAN−IDに応じて、当該VLAN−IDの書き換えを行う。VLAN−IDの書き換えが終了すると、VLAN−ID変換手続きが終了し、VLAN−ID変換機能インスタンス12bは返り値を出力する。そして、機能実行部133は、実行されたVLAN−ID変換機能インスタンス12bから返り値を取得し、当該返り値を変数CUR_RETに代入する。なお、この際に、VLAN−IDの値に応じて返り値を変化させることによって、その後の処理を変化させることも可能である。
例えば、図4の実行順序ルールテーブルの3行目に示すように、「実行インスタンスID」の項目の値が「2」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すようにVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きであり)、返り値が「1」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「4」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「4」であり「手続きID」の項目の値が「1」である送信機能インスタンス12dの送信手続きを実行する。
送信機能インスタンス12dの送信手続きでは、パケット保持部134が保持している、所定の処理が実行された後のパケットをパケット送信部15に転送する。これにより、外部の装置へ当該パケットが送出される。
なお、図4の実行順序ルールテーブルの6行目に示すように、「実行インスタンスID」の項目の値が「4」、及び「実行手続きID」の項目の値が「1」である、送信機能インスタンス12dの送信手続きに対しては、「次実行インスタンスID」の項目の値、及び「次実行手続きID」の項目の値として、それぞれ「0」(図4においては「START(0)」と図示)が設定されている。
また、図5の機能インスタンス情報テーブルの1行目に示すように、「インスタンスID」、及び「手続きID」の項目の値がそれぞれ「0」であり、かつ手続きの「メモリアドレス」の項目が空欄(「−」)である実際には実行されないダミーの機能インスタンス及びダミーの手続きが予め設定されている。これにより、次回の実行順序ルールテーブルの検索時には、図4に示す実行順序ルールテーブルの1行目が検索されることになり、再びパケットの受信処理が開始されることになる。
一方、例えば、図4の実行順序ルールテーブルの4行目に示すように、「実行インスタンスID」の項目の値が「2」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すようにVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きであり)、返り値が「2」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「3」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「3」であり「手続きID」の項目の値が「1」であるフィルタ機能インスタンス12cのフィルタ手続きを実行する。
フィルタ機能インスタンス12cは、例えば、フィルタ対象のIPアドレスのリストを保持している。フィルタ機能インスタンス12cのフィルタ手続きは、パケット保持部134が保持しているパケットのIPアドレスを取得し、当該IPアドレスが上記のリストに含まれている場合には、返り値として「0」を機能実行部133へ出力し、機能実行部133はパケット保持部134が保持しているパケットを破棄する。返り値が「1」の場合には、機能実行部133は、実行順序ルールテーブルを検索し、「インスタンスID」の項目の値が「4」であり「手続きID」の項目の値が「1」である送信機能インスタンス12dの送信手続きを実行する。
上述したように、送信手続きの次に実行されるべき機能インスタンス及び手続き(実際には、ダミーの機能インスタンス及びダミーの手続きであるため実行されない)に該当する「インスタンスID」及び「手続きID」の項目の値は「0」であることから、再びパケットの受信処理が開始されることになる。
以上、説明したように、本発明の第1の実施形態に係る通信装置1aは、実行順序ルールテーブルによって定義された実行順序に基づいて、逐次的に、NW機能に属する各種の手続きを実行し、実行した各手続きの返り値に応じて、次に実行する手続きを決定していくことができる。このような逐次的な処理においては、従来技術で行われているようなNW機能間でのパケットの受け渡しのための処理が不要になる。これにより、本発明の第1の実施形態に係る通信装置1aは、NW機能間でのパケットの受け渡しによる遅延の発生を抑制することができる。また、本発明の第1の実施形態に係る通信装置1aにおいては、各機能が逐次的に実行されるため、パケットに対する排他制御が不要になり、例えば、装置の簡易化を図ることができる。
<第1の実施形態の変形例1>
以下、本発明の第1の実施形態の変形例1に係る通信装置について説明する。本変形例に係る通信装置の構成は、基本的に、第1の実施形態に係る通信装置1aの構成と同様であって、機能実行部133の動作および実行順序ルールテーブルが第1の実施形態とは異なっている。図6は、本変形例に係る通信装置1aの機能実行部133の動作を示すフローチャートである。図7は、本変形例に係る通信装置1aの実行順序情報管理部131が保持する実行順序ルールテーブルの一例を示す図である。
図2に図示するように、まず、機能実行部133は、実行順序情報管理部131から、実行順序ルールテーブルを取得する。
なお、次に実行すべき機能インスタンス12及び手続きが、返り値に関わらず同一であるような場合には、実行順序ルールテーブルにおける「返り値」の項目の値として「*」を設定してもよい。また、図7には図示していないが、返り値がない場合に備えて、実行順序ルールテーブルにおける「返り値」の項目の値として「NULL(空文字)」を設定してもよい。
また、実行している機能インスタンス12の種別に関わらず、返り値が「0」である場合には、機能実行部133は、パケット保持部134に保持されたパケットを破棄する。
また、最初に実行すべき機能インスタンス12及び手続きは、実行順序ルールテーブルの1行目に、「実行インスタンスID」の項目の値として「0」(図7においては、「START(0)」と図示)、「実行手続きID」の項目の値として「0」(図7においては、「START(0)」と図示)、及び「返り値」の項目の値として「*」、がそれぞれ設定される。
続いて、機能実行部133は、変数CUR_INST_ID、変数CUR_METD_ID、及び、変数CUR_RETに、それぞれ「0」を代入することにより初期化する(図6、ステップS001)。
続いて、機能実行部133は、実行順序ルールテーブルを読み込み(図6、ステップS002)、当該実行順序ルールテーブルの1行目から、各行に記述されている「実行インスタンスID」、「実行手続きID」、及び「返り値」の項目の値が、それぞれ、変数CUR_INST_ID、変数CUR_METD_ID、及び変数CUR_RETと一致する行を検索する(図6、ステップS003)。
図7に示す実行順序ルールテーブルにおいて、1行目の「実行インスタンスID」、「実行手続きID」、及び「返り値」の項目の値は、それぞれ「0」(START(0))、「0」(START(0))、「*」であり、上記においてそれぞれ「0」を代入した変数CUR_INST_ID、変数CUR_METD_ID、及び変数CUR_RETに一致する。これにより、機能実行部133は、一致した行(すなわち、図7に示す実行順序ルールテーブルの1行目)の「次実行インスタンスID」の項目の値である「1」と、「次実行手続きID」の項目の値である「1」を、それぞれ、変数NXT_INST_IDと、変数NXT_METD_IDに代入する(図6、ステップS004)。これにより、変数NXT_INST_ID=1、変数NXT_METD_ID=1となる。
続いて、機能実行部133は、インスタンス情報管理部132から、次に実行する機能インスタンス12及び手続きを示す機能インスタンス情報テーブルを取得する。
機能実行部133は、機能インスタンス情報テーブルを読込み(図6、ステップS005)、当該機能インスタンス情報テーブルの1行目から、各行に記述されている「インスタンスID」、及び「手続きID」が、それぞれ、変数NXT_INST_ID、及び変数NXT_METD_IDと一致する行を検索する(図6、ステップS006)。
図5に示す機能インスタンス情報テーブルにおいて、2行目に記述された機能インスタンス12(受信機能インスタンス)の「インスタンスID」、及び「手続きID」の項目の値は、それぞれ「1」であり、上記においてそれぞれ「1」を代入した変数NXT_INST_ID、及び変数NXT_METD_IDに一致する。
機能実行部133は、一致した行(すなわち、2行目に記述された機能インスタンス12(受信機能インスタンス))の「メモリアドレス」の項目の値である「0x000000」を取得する。そして、機能実行部133は、取得したメモリアドレスに基づいてメモリを参照して手続きを呼び出し、処理を実行する(図6、ステップS007)。
また、機能実行部133は、手続き呼び出しの際、パケット保持部134に保持されたパケットにおけるメモリアドレスを受信機能インスタンス12aへ出力する。
また、受信機能インスタンス12aの受信手続きは、パケット受信部14からパケットを取り出し、パケット保持部134にパケットを移す。正常なパケット転送が行われた場合、受信機能インスタンス12aの受信手続きは処理を終了し、返り値として正常終了を表す値(「0」より大きな値)を機能実行部133へ出力する。なお、パケット受信部14にパケットが存在しない場合、受信機能インスタンス12aの受信手続きは、返り値として「−1」を機能実行部133へ出力する。また、正常終了を表す値(「0」より大きな値」)は、実行順序ルールテーブルに記載されている返り値であることが望ましい。これは、受信機能インスタンス12aに限らず、他の機能インスタンスについても同様である。
次に、機能実行部133は、変数CUR_INST_ID、変数CUR_METD_IDに、それぞれ、変数NXT_INST_ID、変数NXT_METD_IDの値を代入する(図6、ステップS051)。
機能実行部133は、実行した機能インスタンス12の手続きから返り値を受け取ると、当該返り値を変数CUR_RETに代入する(図6、ステップS052)。なお、返り値がない場合、機能実行部133は変数CUR_RETに「NULL(空文字)」を代入する。
返り値が「0」であった場合(図6、ステップS053・YES)、機能実行部133は、パケット保持部134が保持しているパケットを破棄し(図6、ステップS010)、制御が、変数初期化の段階(図6、ステップS001)に戻る。返り値が「0」以外であった場合(図6、ステップS053・NO)は、機能実行部133は、再び実行順序ルールテーブルを読み込み(図6、ステップS002)、次に実行する機能インスタンス及び手続きを示す情報を検索する(図6、ステップS003)。
例えば、図7の実行順序ルールテーブルの2行目に示すように、「実行インスタンスID」の項目の値が「1」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すように受信機能インスタンス12aの受信手続きであり)、返り値が「1」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「2」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「2」であり「手続きID」の項目の値が「1」であるVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きを実行する。
機能実行部133は、機能インスタンス情報テーブルに基づいて、上記のVLAN−ID変換手続きのメモリアドレスである「0x000100」を取得し、当該メモリアドレスに基づいてメモリを参照してVLAN−ID変換手続きを実行する。
なお、VLAN−ID変換機能インスタンス12bは、例えば、変換前のVLAN−IDと変換後のVLAN−IDを対応付けたリストを保持しており、パケット保持部134が保持しているパケットのVLAN−IDに応じて、当該VLAN−IDの書き換えを行う。VLAN−IDの書き換えが終了すると、VLAN−ID変換手続きが終了し、VLAN−ID変換機能インスタンス12bは返り値を出力する。そして、機能実行部133は、実行されたVLAN−ID変換機能インスタンス12bから返り値を取得し、当該返り値を変数CUR_RETに代入する。なお、この際に、VLAN−IDの値に応じて返り値を変化させることによって、その後の処理を変化させることも可能である。
例えば、図7の実行順序ルールテーブルの3行目に示すように、「実行インスタンスID」の項目の値が「2」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すようにVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きであり)、返り値が「1」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「4」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「4」であり「手続きID」の項目の値が「1」である送信機能インスタンス12dの送信手続きを実行する。
送信機能インスタンス12dの送信手続きでは、パケット保持部134が保持している、所定の処理が実行された後のパケットをパケット送信部15に転送する。これにより、外部の装置へ当該パケットが送出される。
なお、図7の実行順序ルールテーブルの6行目に示すように、「実行インスタンスID」の項目の値が「4」、及び「実行手続きID」の項目の値が「1」である、送信機能インスタンス12dの送信手続きに対しては、「次実行インスタンスID」の項目の値、及び「次実行手続きID」の項目の値として、それぞれ「0」(図7においては「START(0)」と図示)が設定されている。
また、図5の機能インスタンス情報テーブルの1行目に示すように、「インスタンスID」、及び「手続きID」の項目の値がそれぞれ「0」であり、かつ手続きの「メモリアドレス」の項目が空欄(「−」)である実際には実行されないダミーの機能インスタンス及びダミーの手続きが予め設定されている。これにより、次回の実行順序ルールテーブルの検索時には、図7に示す実行順序ルールテーブルの1行目が検索されることになり、再びパケットの受信処理が開始されることになる。
一方、例えば、図7の実行順序ルールテーブルの4行目に示すように、「実行インスタンスID」の項目の値が「2」、及び「実行手続きID」の項目の値が「1」であり(すなわち、図5に示すようにVLAN−ID変換機能インスタンス12bのVLAN−ID変換手続きであり)、返り値が「2」であるとき、機能実行部133は、「次実行インスタンスID」の項目の値「3」と「次実行手続きID」の項目の値「1」とを取得する。これらの値に基づいて、機能実行部133は、図5に示す機能インスタンス情報テーブルにおいて、「インスタンスID」の項目の値が「3」であり「手続きID」の項目の値が「1」であるフィルタ機能インスタンス12cのフィルタ手続きを実行する。
フィルタ機能インスタンス12cは、例えば、フィルタ対象のIPアドレスのリストを保持している。フィルタ機能インスタンス12cのフィルタ手続きは、パケット保持部134が保持しているパケットのIPアドレスを取得し、当該IPアドレスが上記のリストに含まれている場合には、返り値として「0」を機能実行部133へ出力し、機能実行部133はパケット保持部134が保持しているパケットを破棄する。返り値が「1」の場合には、機能実行部133は、実行順序ルールテーブルを検索し、「インスタンスID」の項目の値が「4」であり「手続きID」の項目の値が「1」である送信機能インスタンス12dの送信手続きを実行する。
上述したように、送信手続きの次に実行されるべき機能インスタンス及び手続き(実際には、ダミーの機能インスタンス及びダミーの手続きであるため実行されない)に該当する「インスタンスID」及び「手続きID」の項目の値は「0」であることから、再びパケットの受信処理が開始されることになる。
なお、図7の7行目に示すように、返り値が「0」より小さい値を実行順序ルールテーブルに記載すれば、異常終了した場合の異常処理の実行についても記載することができる。
また、上述した説明では、受信手続きが実行されることで、パケットがパケット受信部14からパケット保持部134に転送される例を記述した。しかし、パケット受信部14がパケットを受信次第、受信したパケットを自律的にパケット保持部134へ転送するようにしてもよい。この場合、処理順序制御部13は、常に図6に示したシーケンスを実行するのではなく、パケットがパケット保持部134に到着次第、割り込み等によってシーケンスの動作を開始させるようにする。この方法によれば、前述した方法に比べて電力効率等の向上が期待される。
<第1の実施形態の変形例2>
以下、本発明の第1の実施形態の変形例2に係る通信装置について説明する。上述した第1の実施形態では、実行順序ルールテーブルの各行が基本的に返り値を持ち、返り値に応じて異なる処理順序での実行を可能にしている。しかし、返り値をなくし、決まった処理をシーケンシャルに行うことも可能である。
本変形例に係る通信装置の構成は、基本的に、第1の実施形態に係る通信装置1aの構成と同様であって、実行順序ルールテーブルの構成および機能実行部133の動作が、第1の実施形態とは異なる。
図8は、本変形例に係る通信装置1aの機能実行部133の動作を示すフローチャートである。図9は、本変形例に係る通信装置1aの実行順序情報管理部131が保持する実行順序ルールテーブルの一例を示す図である。
図9に示すように、本変形例に係る実行順序ルールテーブルは、現在実行している機能インスタンス12を識別する「実行インスタンスID」と、現在実行している機能インスタンス12の手続きを識別する「実行手続きID」とが対応付けられたテーブルである。
以下に、本変形例に係る通信装置1aの動作について説明する。まず、機能実行部133は、実行順序ルールテーブルにおいて、現在手続きを実行している行数を表す変数CUR_LINEに「1」を代入して、変数CUR_LINEを初期化する(図8、ステップS101)。次に、機能実行部133は、変数CUR_LINEが、実行順序ルールテーブルの行数(図9の例では「4」)以下であるかどうかを判断する(図8、ステップS102)。ここでは、変数CUR_LINEが「1」であって実行順序ルールテーブルの行数以下である(図8、ステップS102・YES)ため、機能実行部133は、処理をステップS103に進める。
続いて、機能実行部133は、実行順序ルールテーブルにおいて、変数CUR_LINEが示す行の情報を取得し(図8、ステップS103)、1行目に記載されている実行インスタンスID,実行手続きIDをそれぞれ変数NXT_INST_ID,NXT_METD_IDに代入する(図8、ステップS104)。続いて、機能実行部133は、第1の実施形態と同様に、機能インスタンス情報テーブルを読み込む(図8、ステップS105)。次に、機能実行部133は、機能インスタンス情報テーブルにおいて、インスタンスID,手続きIDが、それぞれ、変数NXT_INST_ID,変数NXT_METD_IDと一致する行を検索する(図8、ステップS106)。
次いで、機能実行部133は、一致した行のメモリアドレスの値に基づいてメモリを参照して手続きを呼び出し、処理を実行する(図8、ステップS107)。この処理が終了し、機能実行部133が処理を実行した手続きから返り値を受け取ると、機能実行部133は当該返り値を変数CUR_RETに代入する(図8、ステップS108)。なお、返り値がない場合、機能実行部133は、空白を表す「NULL」を変数CUR_RETに代入する。
次に、機能実行部133は、変数CUR_RETが「0」より大きな値であるか、または、「NULL」であるかどうかを判断する(図8、ステップS109)。変数CUR_RETが「0」より大きな値であった場合、もしくは「NULL」であった場合(図8、ステップS109・YES)、機能実行部133は、手続きが正常に実行されたと見なし、次の手続きの処理に移る。この後、機能実行部133は、変数CUR_LINEを一つインクリメントする(図8、ステップS110)。これにより、変数CUR_LINEは「2」となる。
次に、機能実行部133は、上述したのと同様に、変数CUR_LINEが実行順序ルールテーブルの行数以下であるかどうかを判断する(図8、ステップS102)。この場合も変数CUR_LINEが「2」であって実行順序ルールテーブルの行数以下であるため、機能実行部133は、処理をステップS103に進め、上記と同様にして、実行順序ルールテーブルの2行目に記載された実行インスタンスIDおよび実行手続きIDに対応する機能インスタンスの手続きを呼び出す。
呼び出された手続きの返り値が、いずれも、「0」より大きな値であるか「NULL」である場合、以上の動作が実行順序ルールテーブルのすべての行について行われる。そして、実行順序ルールテーブルの4行目に対応する手続きの処理が終了した後に、ステップS110において変数CUR_LINEが一つインクリメントされて「5」になる。この場合、変数CUR_LINEは実行順序ルールテーブルの行数より大きい(図8、ステップS102・NO)ため、機能実行部133は、実行すべき手続きが終了したと見なし、制御をステップS101に戻して変数CUR_LINEを「1」に初期化した上で、実行順序の最初から実行を開始する。
一方、いずれかの手続きの動作において、変数CUR_RETが「0」より大きな値でなく、かつ、「NULL」でもないと判断された場合(図8、ステップS109・NO)、機能実行部133は、変数CUR_RETが「0」かどうかを判断する(図8、ステップS111)。変数CUR_RETが「0」でない場合(図8、ステップS111・NO)、ステップS109における判断の結果から、変数CUR_RETは「0」より大きくないため、変数CUR_RETが「0」より小さいことになる。この場合、機能実行部133は、異常が発生したと見なし、異常に対処するための処理(異常処理)に移る(図8、ステップS112)。一方、変数CUR_RETが「0」であった場合(図8、ステップS111・YES)、機能実行部133は、パケット保持部134が保持しているパケットを破棄し(図8、ステップS113)、制御をステップS101に戻して変数CUR_LINEを「1」に初期化した上で、実行順序の最初から実行を開始する。
本変形例は、返り値に応じた処理の変更をしない反面、実行順序ルールテーブルの検索処理が不要となるため、高速な処理が期待できる。
<第2の実施形態>
以下、本発明の第2の実施形態に係る通信装置1bについて説明する。本実施形態に係る通信装置1bは、上述した第1の実施形態に係る通信装置1aに対して、新たなNW機能の追加、既存機能の削除、既存機能と新機能の置き換えを行う機能が加えられたものである。
以下に、本実施形態に係る通信装置1bの動作について、図面を参照しながら説明する。図10は、本発明の第2の実施形態に係る通信装置1bの機能追加時の動作の一例を示す図である。図11は、本発明の第2の実施形態に係る通信装置1bの機能削除時の動作の一例を示す図である。
図10及び図11に図示するように、第2の実施形態に係る通信装置1bは、上述した第1の実施形態に係る通信装置1aに対して、処理順序制御部13に、外部連携部135と、インスタンス登録・削除部136と、実行順序変更部137と、が更に備えられている点が異なる。なお、図10及び図11では、機能実行部133、パケット保持部134、受信機能ファイル、VLAN−ID機能ファイル、フィルタ機能ファイル、送信機能ファイル、受信機能インスタンス12a、VLAN−ID変換機能インスタンス12b、フィルタ機能インスタンス12c、送信機能インスタンス12dの図示を省略している。
外部連携部135は、通信機能の追加、通信機能の変更、または通信機能の削除の要求を、外部連携装置から取得する。
図10に図示するように、例えば、通信装置1bの管理者等が新たな機能インスタンスを追加する場合、上記の通信機能の追加の要求に基づいて、外部連携部135に対して、新機能の機能ファイルである新機能ファイルと、新機能のインスタンスID、および実行順序の変更方法を示す情報とが設定される。
外部連携部135は、インスタンス登録・削除部136に対して、機能追加の要求を示す情報、新機能ファイル、及び新たに生成した新機能の機能インスタンス12である新機能インスタンス12eを識別するインスタンスIDを出力する。インスタンス登録・削除部136は、取得した新機能ファイルを機能ファイル保持部11に保存するとともに、メモリへの展開を行う。なお、全ての機能インスタンスは、開始手続きと終了手続きを有する。新機能ファイルがメモリに展開された際に、インスタンス登録・削除部136は、上述した開始手続きのメモリアドレスを取得する。
新機能ファイルのメモリへの展開が行われた後、インスタンス登録・削除部136は、取得した開始手続きのメモリアドレスに基づいて、新機能インスタンス12eの開始手続きを実行して、新機能インスタンス12eの初期化を行う。新機能インスタンス12eは、開始手続きが呼び出された後、自己のメモリアドレス,自己の保持する手続きの手続きID、及び各手続きへのメモリアドレスを取得し、インスタンス情報を生成する。例えば、図12は、本発明の第2の実施形態に係る通信装置1bの新機能インスタンス12eが生成するインスタンス情報の一例を示す図である。
新機能インスタンス12eは、生成したインスタンス情報を、インスタンス登録・削除部136へ出力する。インスタンス登録・削除部136は、取得したインスタンス情報を、インスタンスIDと共にインスタンス情報管理部132へ出力する。インスタンス情報管理部132は、保持している機能インスタンス情報テーブルに対して、取得したインスタンス情報を記述する。
インスタンス情報管理部132において、上述したインスタンス情報の記述が完了した後、外部連携部135は管理者等から設定された実行順序の変更方法を示す情報とともに、実行順序変更要求を実行順序変更部137に出力する。実行順序変更部137は、取得した実行順序の変更方法を示す情報に基づいて、実行順序情報管理部131の保持する実行順序ルールテーブルに変更要求を出力する。図13に示すように、例えば、機能追加をする際には、実行順序変更部137は、実行順序情報管理部131の実行順序ルールテーブルに対して、新機能から既存機能への遷移を示すルールを追加し(1)、新機能への遷移を示すルールを追加し(2)、最後に、必要としないルール行の削除を行う(3)ことを要求する。
図11に図示するように、例えば、通信装置1bの管理者等が機能インスタンス12を削除する場合、外部連携部135に対して、削除する機能インスタンス12を識別するインスタンスID、および実行順序の変更方法を示す情報が設定される。外部連携部135は、まず、実行順序変更部137に対して実行順序の変更方法を示す情報を出力する。
実行順序変更部137は、取得した実行順序の変更方法を示す情報に基づいて、新機能インスタンス12eの追加時と同様に、実行順序情報管理部131の保持する実行順序ルールテーブルを更新する。実行順序情報管理部131における実行順序ルールテーブルの更新が完了した後、外部連携部135は、インスタンス登録・削除部136へ、削除対象の機能インスタンスのインスタンスIDとともに、機能削除要求を出力する。インスタンス登録・削除部136は、インスタンス情報管理部132から、削除対象の機能インスタンス12のメモリアドレス、及び当該機能インスタンス12の終了手続きのメモリアドレスを取得する。
その後、インスタンス登録・削除部136は、削除対象の機能インスタンス12の終了手続きを呼び出す。機能インスタンス12の終了手続きは、機能の終了に必要な処理(終了処理)を行った後、インスタンス登録・削除部136へ、削除要求の通知を出力する。インスタンス登録・削除部136は、機能インスタンス12から削除要求の通知を受け取ると、メモリに展開された機能インスタンス12を削除した後、インスタンス情報管理部132へ、削除対象の機能インスタンス12の情報の削除を要求する。インスタンス情報管理部132は、削除要求を取得すると、保持している機能インスタンス情報テーブルにおいて、削除対象の機能インスタンス12のインスタンスIDが対応付けられた行を削除する。
機能の追加・削除だけでなく、既存機能を新機能で置き換えることも可能である。例えば、通信装置1bの管理者等が既存の機能インスタンスを新たな機能インスタンスと置き換える場合、外部連携部135に対して、新機能の機能ファイルである新機能ファイルと置き換え対象の既存機能のインスタンスIDを設定する。外部連携部135はインスタンス登録・削除部136に機能置き換え要求の通知を出力する。インスタンス登録・削除部136は上述した機能追加処理を行う。この際、インスタンス情報管理部132が機能インスタンス情報テーブル内の既存機能インスタンス情報のメモリアドレス値を、新機能インスタンス情報のメモリアドレス値で上書きする点が機能追加時とは異なる。また、実行順序ルールテーブルの更新処理は行わない。機能インスタンス情報テーブルの更新処理が終わったのち、インスタンス登録・削除部136が既存機能インスタンスの終了手続きを呼び出し、メモリに展開された機能インスタンスの削除が行われる。
以上、説明したように、本発明の第2の実施形態に係る通信装置1bは、変更対象の機能インスタンス12、インスタンス情報管理部132、及び実行順序情報管理部131に対して変更を加えるのみであり、他の既存機能に対しては変更を加えない。これにより、本発明の第2の実施形態に係る通信装置1bは、既存機能の動作に大きな影響を与えることなく、また既存機能の動作を停止することなく、新たなNW機能の追加・削除を行うことができる。
<第3の実施形態>
以下、本発明の第3の実施形態に係る通信装置1cについて説明する。本実施形態に係る通信装置1cは、上述した第1の実施形態に係る通信装置1aに対して、NW機能間での連携を可能にする構成を追加したものである。
以下に、本実施形態に係る通信装置1cの動作について、図面を参照しながら説明する。図14は、本発明の第3の実施形態に係る通信装置1cの機能間連携の動作の一例を示す図である。
図14に図示するように、第3の実施形態に係る通信装置1cは、上述した第1の実施形態に係る通信装置1aに対して、機能ファイル保持部11内のブリッジ機能ファイルと、通知受付手続きを有するブリッジ機能インスタンス12fと、処理順序制御部13内の連携情報保持部138および通知手続きと、がさらに備えられている点が異なる。なお、図14では、実行順序情報管理部131、インスタンス情報管理部132、機能実行部133、パケット保持部134、受信機能ファイル、VLAN−ID変換機能ファイル、送信機能ファイル、受信機能インスタンス12a、VLAN−ID変換機能インスタンス12b、送信機能インスタンス12dの図示を省略している。
図14に図示するように、本実施形態に係る通信装置1cでは、各機能インスタンス12は、処理順序制御部13における通知手続きを介して、他の機能インスタンス12の通知受付手続きを実行する。すなわち、各機能インスタンス12の通知受付手続きは、他の機能インスタンス12に属する手続きからの情報取得要求、及び機能実行の要求に応じて処理を行う。これにより、本実施形態に係る通信装置1cは、ある機能が他の機能の変数値の取得や設定等を行う機能間連携を実現することができる。
なお、通知手続きのメモリアドレスは、処理順序制御部13の機能実行部133が、機能インスタンス12の開始手続きを実行する際に、引数として機能インスタンス12へ伝達される。なお、第2の実施形態で述べたように、全ての機能インスタンスは、開始手続きと終了手続きを有する。また、通知受付手続きのメモリアドレスは、機能インスタンス12の開始手続き終了時に、返り値となるインスタンス情報の中に含まれることによって処理順序制御部13へ伝達されるものとする。
以下、図14を参照しながら、フィルタ機能インスタンス12cが、ブリッジ機能インスタンス12fから、パケットの受信数を示す受信数情報を取得する場合について説明する。まず、フィルタ機能インスタンス12cのフィルタ手続きの実行中に、処理順序制御部13の通知手続きが呼び出される。この際、呼び出し元のフィルタ機能インスタンス12cは、呼び出し先の処理順序制御部13の通知手続きへ、連携種別識別子(以下、「連携種別ID」という)を引数として伝達する。呼び出された通知手続きは、処理順序制御部13の連携情報保持部138が保持する連携種別テーブルを取得する。
図15は、本発明の第3の実施形態に係る通信装置1cの連携情報保持部138が保持する連携種別テーブルの一例を示す図である。図示するように、連携種別テーブルは、連携種別を示す「連携種別ID」と、「連携内容」と、呼び出し対象の機能インスタンス12へ伝達する引数を示す「引数情報」と、呼び出し対象の機能インスタンス12を識別するインスタンスIDを示す「呼び出しインスタンスID」と、呼び出し対象の機能インスタンス12の手続きを識別する手続きIDを示す「呼び出し手続きID」と、が対応付けられたテーブルである。
なお、「連携種別ID」は、図15に示すような連番の数字のような形式に限られるものではなく、連携内容を一意に識別できる形式であれば任意の形式で構わない。
また、連携種別テーブルに定義された、「連携種別ID」、「連携内容」、及び「引数情報」の項目の値は事前に公開されているものであり、各機能インスタンス12を開発する開発者は、公開された情報に基づいて、他の機能と連携する機能インスタンス12を開発することができるものとする。
通知手続きは、引数として伝達された「連携種別ID」を検索キーとして連携種別テーブルを検索し、呼び出し対象である機能インスタンス12及び当該機能インスタンス12の手続きにそれぞれ対応する、「呼び出しインスタンスID」及び「呼び出し手続きID」を取得する。
例えば、フィルタ機能インスタンス12cは、「連携種別ID」の値である「1」を処理順序制御部13の通知手続きへ伝達する。そして、通知手続きは、呼び出し対象の機能インスタンス12であるブリッジ機能インスタンス12fに対応する「呼び出しインスタンスID」の値である「5」、及びブリッジ機能インスタンス12fの通知受付手続きに対応する「呼び出し手続きID」の値である「1」を取得する。そして、処理順序制御部13の通知手続きは、上記の「呼び出しインスタンスID」及び「呼び出し手続きID」の値に基づいて、ブリッジ機能インスタンス12fの通知受付手続きを呼び出す。
ブリッジ機能インスタンス12fは、受信パケットをカウントし、カウントした結果(パケットの受信数)を示す受信数情報を保持しているものとする。ブリッジ機能インスタンス12fの通知受付手続きは、処理順序制御部13の通知手続きから、自己の通知受付手続きが呼び出されると、上記の受信数情報を読み出して、当該受信数情報を返り値として通知手続きへ出力する。
処理順序制御部13の通知手続きは、受信数情報を取得すると、当該受信数情報を、呼び出し元であるフィルタ機能インスタンス12cへ出力する。これらの処理により、フィルタ機能インスタンス12cにおいて、ブリッジ機能インスタンス12fの手続きを直接実行することなく、受信パケットの受信数情報を取得することができる。
なお、機能インスタンス12に属する通知受付手続きの数は、一つに限らず、複数の通知受付手続きが存在していてもよい。
以下、連携種別テーブルの生成について説明する。連携種別テーブルの生成は、例えば、第2の実施形態において説明した機能追加時に行うことができる。このように連携種別テーブルを機能追加時に生成する場合、第2の実施形態で説明した外部連携部135、インスタンス登録・削除部136、実行順序変更部137を処理順序制御部13に設ければよい。通信装置の管理者等が、新機能ファイルを外部連携部135へ出力する際、機能ファイル及び「機能インスタンスID」とともに、通知受付手続きの「手続きID」、「連携種別ID」、「連携内容」、及び「引数情報」が伝達される。外部連携部135から機能追加の要求を受けたインスタンス登録・削除部136は、実行順序情報管理部131が保持する実行順序ルールテーブルの更新を行った後、機能追加した新機能インスタンス12eの「機能インスタンスID」、及び外部連携部135から取得した「手続きID」、「連携種別ID」、「連携内容」、及び「引数情報」を、連携情報保持部138へ出力する。そして、連携情報保持部138は、取得した情報を連携種別テーブルへ書き込む。
なお、処理順序制御部13が通知受付手続きを有するような構成にした場合には、機能インスタンス12から、処理順序制御部13が有する、各機能の間で共通する情報を取得したり設定したりすることもできる。
<第3の実施形態の変形例>
以下、本発明の第3の実施形態の変形例に係る通信装置1dについて説明する。第3の実施形態の変形例に係る通信装置1dは、上述した第3の実施形態に係る通信装置1cと同様に、上述した第1の実施形態に係る通信装置1aに対して、NW機能間での連携を可能にする構成を追加したものである。
以下に、本変形例に係る通信装置1dの動作について、図面を参照しながら説明する。図16は、本発明の第3の実施形態の変形例に係る通信装置1dの機能間連携の動作の一例を示す図である。
図16に図示するように、第3の実施形態の変形例に係る通信装置1dは、上述した第1の実施形態に係る通信装置1aに対して、機能ファイル保持部11内のブリッジ機能ファイルと、ブリッジ機能インスタンス12fが追加されているほか、処理順序制御部13に、公開変数情報保持部139と、公開変数更新手続きと、公開変数取得手続きと、がさらに備えられている点が異なる。なお、図16では、実行順序情報管理部131、インスタンス情報管理部132、機能実行部133、パケット保持部134、受信機能ファイル、VLAN−ID変換機能ファイル、送信機能ファイル、受信機能インスタンス12a、VLAN−ID変換機能インスタンス12b、及び送信機能インスタンス12dの図示を省略している。
公開変数取得手続き、及び公開変数更新手続きのメモリアドレスは、処理順序制御部13の機能実行部133が各機能インスタンス12の開始手続きを実行する際に、引数として機能インスタンス12へ伝達される。なお、第2の実施形態で述べたように、全ての機能インスタンスは、開始手続きと終了手続きを有する。
以下、上述した第3の実施形態に係る通信装置1cと同様に、フィルタ機能インスタンス12cが、ブリッジ機能インスタンス12fから、パケットの受信数を示す受信数情報を取得する場合について例示する。
公開変数情報保持部139は、公開変数テーブルを保持する。図17は、本発明の第3の実施形態の変形例に係る通信装置1dの公開変数情報保持部139が保持する公開変数テーブルの一例を示す図である。
図示するように、公開変数テーブルは、通信装置1dにおいて動作する機能インスタンス12を識別する「インスタンスID」と、当該機能インスタンス12に属する変数である「変数ID」と、当該変数の内容を説明する「変数説明」と、変数の値である「変数値」と、当該変数に対して許可されている処理を示す「可能な処理」と、が対応付けられたテーブルである。なお、「変数ID」は、図17に示すような文字列でもよいし、数字等でもよい。
なお、公開変数テーブルに定義された、「変数ID」、「変数説明」、及び「可能な処理」の項目の値は事前に公開されているものであり、各機能インスタンス12を開発する開発者は、公開された情報に基づいて、他の機能と連携する機能インスタンス12を開発することができるものとする。
公開変数テーブルの生成は、例えば、上述した第2の実施形態において説明した機能追加時に行うことができる。このように公開変数テーブルを機能追加時に生成する場合、第2の実施形態で説明した外部連携部135、インスタンス登録・削除部136、実行順序変更部137を処理順序制御部13に設ければよい。通信装置の管理者等が、新機能ファイルを外部連携部135へ出力する際、機能ファイル及び機能インスタンスIDとともに、機能インスタンス12に属する変数のうち、他の機能インスタンス12から参照のみ、もしくは参照及び更新の両方を行うことが可能な変数群(公開変数)の「変数ID」、「変数説明」、及び「可能な処理」が定義されたテーブルを出力する。外部連携部135は、公開変数情報保持部139へ、上述したテーブルを出力する。そして、公開変数情報保持部139は、取得したテーブルが示す情報を公開変数テーブルへ書き込む。
各機能インスタンス12は、他の機能インスタンス12の情報の取得を必要とする場合には、処理順序制御部13の公開変数取得手続きを呼び出し、取得対象の変数値を取得する。また、各機能インスタンス12が、他の機能インスタンス12へ情報を伝達する必要がある場合や、自己の機能インスタンス12の変数、及び他の機能インスタンス12の変数を更新する必要がある場合には、各機能インスタンス12は、公開変数更新手続きを呼び出して情報を伝達したり、書き換え操作可能な変数値を変更したりする。
図17に示す例においては、ブリッジ機能インスタンス12fは、パケットを受信するたびに、文字列「RX_COUNT」を引数として公開変数更新手続きを呼び出し、公開変数テーブルの「RX_COUNT」の値を更新する。ブリッジ機能インスタンス12fは、ブリッジ機能の受信パケット数を取得する場合には、文字列「RX_COUNT」を引数として公開変数取得手続きを呼び出し、公開変数テーブルの「RX_COUNT」の値を取得する。
以上説明したように、本発明の第3の実施形態の変形例に係る通信装置1dは、各機能インスタンス12が、自己の機能インスタンス12の公開変数を更新するたびに、処理順序制御部13の公開変数更新手続きを呼び出す。これにより、本変形例に係る通信装置1dは、第3の実施形態に係る通信装置1cよりも通信装置の構成をシンプルにすることができる。
<第4の実施形態>
以下、本発明の第4の実施形態について説明する。本実施形態に係る通信装置は、上述した第1の実施形態に係る通信装置1aに対して、高速な実行順序ルール検索を実現する構成を追加したものである。
本実施形態では、実行順序情報管理部131が保持する実行順序ルールテーブルは、返り値と実行順序に従って、実行すべき手続きへのメモリアドレス情報をノードとした木構造となるように構築される。図18は、本発明の第4の実施形態に係る通信装置1aの実行順序情報管理部131が保持する実行順序ルールテーブルの一例を示す図である。
機能実行部133は、処理(手続き)を実行すると、その返り値に応じて次ノードのメモリアドレスを取得し、当該次ノードに記述された手続きを実行する。これらの処理が繰り返されることによって、木構造における親ノードにあたる手続きの実行が完了すると、処理を実行すべき対象が子のノードへ移動する。
本発明の第4の実施形態に係る通信装置1aによれば、次に実行すべき手続きのメモリアドレスをインスタンス情報管理部132から取得する必要がなくなるため、より高速に処理を実行することができる。ただし、機能の置き換え等で、ある機能インスタンスの手続きのメモリアドレスを変更する場合は、インスタンス情報管理部132の保持する機能インスタンス情報テーブルのみでなく、前記実行順序ルールテーブルにも変更を行う必要がある。
<第4の実施形態の変形例>
以下、本発明の第4の実施形態の変形例について説明する。第4の実施形態の変形例に係る通信装置は、上述した第4の実施形態に係る通信装置と同様に、上述した第1の実施形態に係る通信装置1aに対して、高速な実行順序ルール検索を実現する構成を追加したものである。
上述した第1の実施形態に係る通信装置1aは、実行順序情報管理部131から取得した実行順序ルールテーブルにおいて、機能インスタンス12の手続きが終了するたびに、当該機能インスタンス12の実行インスタンスID、実行手続きID、及び返り値を検索キーとして検索を行い、次に実行すべき機能インスタンス12の次実行インスタンスID及び次実行手続きIDを取得する。
一方、図19に示すように、検索キーである実行インスタンスID、手続きID、及び返り値ごとに、あらかじめ実行順序ルールテーブルを分離して、木構造となるように再構成しておくことによって、検索の高速化を図ることができる。
図19に示すように、実行インスタンスID、手続きIDを主キーとした実行順序ルールテーブルでは、バリューは、次検索キーの実行順序ルールテーブルの先頭ルールへの参照であり、返り値を主キーとした実行順序ルールテーブルでは、バリューは、次実行インスタンスID及び次実行手続きIDである。なお、返り値を主キーとした実行順序ルールテーブル中の「メモリアドレス」はなくともよい。この「メモリアドレス」については後述する。
検索を行う際は、まず実行インスタンスIDを主キーとした実行順序ルールテーブル(例えば、図19の(a))を検索し、取得したポインタを基に手続きIDの実行順序ルールテーブル(例えば、図19の(b−1)または(b−2))を検索し、さらに取得したポインタを基に返り値の実行順序ルールテーブル(例えば、図19の(c−1)または(c−2))を検索して、次に実行すべき機能インスタンス12のインスタンスID及び手続きIDを取得する。
実行順序ルールテーブルの木構造化により、単純な線形検索の計算量O(n)と比べて、計算量をO(log(n))まで削減することができる。本発明の各実施形態では、パケットに対して処理を行うたびに検索を行うため、膨大な検索処理を行うこととなり、計算量の削減効果は非常に大きいと考えられる。
上述した返り値の実行順序ルールテーブルに対して、さらに、次に実行すべき手続きのメモリアドレスを付与してもよい。これにより、インスタンス情報管理部132が保持する機能インスタンス情報テーブルを参照することなく、次に実行すべき手続きのメモリアドレスを取得することができる。
また、主キーの異なるそれぞれの実行順序ルールテーブルのルール順序は、図19に示す実行順序ルールテーブルのルール順序に限られるものではなく、ルールにマッチする頻度に応じて変更されてもよい。これにより無駄な検索を避け、さらなる高速化が期待できる。
<第5の実施形態>
以下、本発明の第5の実施形態について説明する。本実施形態に係る通信装置1eは、上述した第1の実施形態に係る通信装置1aに対して、パイプライン処理によって転送の高速化を実現する構成を追加したものである。
第1の実施形態に係る通信装置1aでは、一つのパケットに対する機能の実行を、単一の機能実行部133が行っていた。一方、機能の実行を複数の機能実行部で行うことで、パイプライン化が可能となり、スループットの向上が見込まれる。
図20は、本発明の第5の実施形態に係る通信装置1eがパイプライン化された場合の機能構成の概略を示す機能ブロック図である。図示するように、本実施形態に係る通信装置1eでは、機能実行部が2つ(機能実行部133、及び第二機能実行部133b)備えられることによりパイプライン化がなされている。また、機能実行部の数だけでなく、パケット保持部も2つ(パケット保持部134、及び第二パケット保持部134b)備えられている点も、上述した第1の実施形態に係る通信装置1aとは異なる。また、機能実行部の数と同数の実行順序ルールテーブルが必要となることから、本実施形態に係る通信装置1eの実行順序情報管理部131は、複数の実行順序ルールテーブルを管理することが可能な構成であるものとする。
上述した第1の実施形態に係る通信装置1aと同様に、パケットのVLAN−IDの変換を行うVLAN−ID変換機能、及び、特定のIPアドレスのパケットを破棄するフィルタ機能、の2つの機能の組み合わせを実現する場合を例として説明する。
機能実行部133は、上述した第1の実施形態に係る通信装置1aと同様に、パケットの受信とVLAN−ID変換を行った後、実行順序情報管理部131が保持する、機能実行部133用の実行順序ルールテーブルを検索し、次に実行すべき機能インスタンスのインスタンスID、及び手続きIDを取得する。
図21Aおよび図21Bは、本発明の第5の実施形態に係る通信装置1eがパイプライン化された場合の実行順序情報管理部131が保持する実行順序ルールテーブルの一例を示す図である。図示するように、図21Aは、機能実行部133用の実行順序ルールテーブルであり、図21Bは、第二機能実行部133b用の実行順序ルールテーブルである。
図示するように、次に実行すべき手続きが第二パケット保持部134bへの転送手続きであることを示す「次実行インスタンスID」、及び「次実行手続きID」の項目の値として、それぞれ「99」(図21Aにおいては、「第二パケット保持部(99)」と図示)が設定されている。なお、機能インスタンス情報テーブルにも、「インスタンスID」及び「手続きID」が「99」である行が用意されており、当該行には、パケットをパケット保持部134から取得し、取得したパケットを第二パケット保持部134bへ転送する手続きを記述する。
一方、第二機能実行部133bは、定期的に、第二パケット保持部134bにパケットが存在しないかどうかを確認するためのポーリングを行う。そして、第二機能実行部133bは、パケットの存在を確認し次第、実行順序情報管理部131が保持する第二機能実行部133b用の実行順序ルールテーブルを検索し、「実行インスタンスID」、及び「手続きID」を取得する。
第二機能実行部133b用の実行順序ルールテーブルには、フィルタ機能インスタンス12cのフィルタ手続き呼び出しが記述されているため、第二機能実行部133bは、フィルタ機能を呼び出す。フィルタ機能の処理後、上述した第1の実施形態に係る通信装置1aと同様に、パケット送信部15からパケットが送信される。
本発明の第5の実施形態に係る通信装置1eは、フィルタ機能の実行と並行して、VLAN−ID変換の実行を行うことができるため、上述した第1の実施形態に係る通信装置1aと比べて、およそ2倍程度の高いスループットを実現することができる。
[通信装置の機能構成の変形例]
次に、図1を参照して説明した通信装置の変形例について説明する。図22Aは、本変形例に係る通信装置1fの機能構成を示す機能ブロック図である。図示するように、通信装置1fは、通信における処理の機能インスタンス12と、処理順序制御部13とを含んで構成される。処理順序制御部13は、NW機能に関する処理等の実行順序を示す実行順序ルールを備えている。
機能インスタンス12は、NW機能毎の手続きを含む。機能インスタンス12は、NW機能の処理ができるように、NW機能の処理において必要な手続き群及び変数群を記したソースコード、もしくはコンパイル後の実行ファイル等を、例えば、メモリやレジスタ等に展開したものである。ソースコードや実行ファイル等は、通信装置1fの内部に保持してもよいし、通信装置1fの外部にある他の装置に保持してもよい。他の装置がソースコードや実行ファイル等を保持する場合、処理順序制御部13は、1つまたは複数の手続き毎、機能インスタンス毎、または、その他の単位毎に、ソースコードや実行ファイル等を他の装置から読み出す。この場合、処理順序制御部13が他の装置とやりとりできるように、図22Bに示すように、通信装置1fが、他の装置から各種の情報を受信する受信部24および他の装置に対して各種の情報を送信する送信部25をさらに備えるようにする。
処理順序制御部13は、定められた順序に従って機能インスタンス12の手続きを呼び出し、パケットに対してNW機能に関する処理を実行する。パケットは、例えば、通信装置1fの内部に設けたパケット保持部に保持する。この場合、例えば、図22Cに示すように、図1と同様にパケット保持部134を処理順序制御部13内に設ける。あるいは、通信装置1fの外部に設けたパケット保持部でパケットを保持してもよい。この場合、通信装置1fは、当該パケット保持部とやりとりできるように、受信部24および送信部25をさらに備えるようにする。また、通信装置1fの内部にパケットを保持する構成において、例えば、通信装置1fが複数の処理順序制御部を備えている場合、これらの処理順序制御部13の外にパケット保持部134を設けてもよい。
通信装置1f内の処理順序制御部13がパケットを保持する場合、通信装置1fは、他の装置からパケットの入力を受けて、当該パケットをパケット保持部134に移し、処理順序制御部13が、パケット保持部134に保持されたパケットに対して指定された処理を行い、処理が終了した後に、パケットを廃棄するか、あるいは、他の装置にパケットを出力する。
通信装置1fの外部でパケットを保持する場合、または、通信装置1fが複数の処理順序制御部を備える場合、複数の装置(例えば、通信装置1fと他の装置)または複数の処理順序制御部が、パケット保持部134を共有するようにしてもよい。なお、複数の装置がパケット保持部134を共有する場合、複数の装置のいずれかの内部にパケット保持部134を設けてもよいし、複数の装置の外部にパケット保持部134を設けてもよい。処理順序制御部13は、他の装置または他の処理順序制御部からパケットの処理権限やパケットのアドレスの入力を受け、パケット保持部134に保持されているパケットに対して指定された処理を行う。当該処理が終了した後に、処理順序制御部13は、パケットを廃棄するか、あるいは、他の装置または他の処理順序制御部に対して、パケットの処理権限を授与し、もしくは、パケットのアドレスを出力する。
あるいは、前者と後者を組み合わせてもよい。前者は、単一のハードウェア上に単一の通信装置がある場合に適している。一方、後者は、単一のハードウェア上に複数の仮想的な装置がある場合や、単一の通信装置内に複数の処理順序制御部がある場合に適している。
処理順序制御部13は、実行順序ルールが示す実行順序に従い、次に実行すべき手続きを呼び出す。呼び出された手続きからの返り値がある場合、処理順序制御部13は、現在実行している手続き(すなわち、呼び出された手続き)とその返り値に応じて次に実行すべき手続きを呼び出す。換言すると、処理順序制御部13は、前回処理した機能インスタンスに属する手続きと、当該手続きの返り値とに応じて、これから実行すべき機能インスタンスに属する手続きを呼び出す。呼び出される手続きは、現在実行している手続きが属している機能インスタンスと同一の機能インスタンスに属している手続きであってもよいし、現在実行している手続きが属している機能インスタンスと異なる機能インスタンスに属している手続きであってもよい。
手続きは、1つまたは複数の装置を通して一意であってもよいし、1つまたは複数の機能インスタンス毎に一意であってもよい。また、手続きの呼び出しに際しては、1つまたは複数の装置を通して一意なID等を用いて手続きを呼び出してもよいし、機能インスタンスと手続きの組み合わせを用いて一意に手続きを呼び出してもよいし、機能インスタンスを呼び出し、その後に、機能インスタンス内の手続きを呼び出してもよい。なお、異なる機能インスタンスの手続きが同一の手続きであってもよい。異なる機能インスタンスの手続きが同一の手続きであり、かつ、機能インスタンスと手続きの組み合わせで一意に手続きを呼び出すときには、異なる機能インスタンスと手続きの組み合わせが同一の手続きを呼び出すものとして扱ってもよいし、同一の処理を行う異なる手続きを呼び出すものとして扱ってもよい。
実行順序ルールでは、例えば、現在実行している機能インスタンス12の手続きを識別する「実行手続きID」と、実行処理の「返り値」と、返り値がある場合に当該返り値に応じて次に実行すべき機能インスタンス12の手続きを識別する「次実行手続きID」とが対応付けられる。あるいは、実行順序ルールでは、「実行インスタンスID」と、「実行手続きID」と、「返り値」と、「次実行インスタンスID」と、「次実行手続きID」とが対応付けられていてもよい。あるいは、実行順序ルールでは、現在実行している機能インスタンスの手続きが展開されているメモリアドレスと、返り値と、次に実行すべき機能インスタンスの手続きが展開されているメモリアドレスとが対応づけられていてもよい。
なお、次に実行すべき機能インスタンス12の手続きは、返り値にかかわらず同一であってもよい。また、返り値が「Null」である場合や返り値がない場合、次に実行すべき機能インスタンス12の手続きは、次の順番の実行順序ルールによって識別される手続き等、現在実行している機能インスタンス12の手続きに応じた手続き(換言すると、これから実行すべき機能インスタンス12の手続きは、前回処理した機能インスタンスに属する手続きに応じた手続きや、予め定めた前回処理した機能インスタンスに属さない手続きに応じた手続きである)、または、最初の実行順序ルールによって識別される手続き等の所定の手続き、または、初期化処理や、パケットを破棄する処理や、一連の手続きを終了させる処理等の所定の処理を行う手続きであってもよい。
また、返り値が「0」である場合には、パケットを破棄するか、当該パケットを保持しているパケット保持部がパケットを保持したまま通信装置1f内の他の処理順序制御部や他の装置に処理権限やパケットのアドレスを授与してもよいし、他の装置へパケットを送出してもよい。
また、最初の実行順序ルールは、最初に実行する機能インスタンスの手続き、または、最初に実行する機能インスタンスと手続きを指定する。最初に実行する機能インスタンスの手続きを「実行手続きID」の値と「返り値」で指定する場合は、それらの値として「0」がそれぞれ設定されてもよい。最初に実行する機能インスタンスと手続きを「実行インスタンスID」の値と「実行手続きID」の値と「返り値」で指定する場合は、それらの値として「0」がそれぞれ設定されてもよい。最初に実行する機能インスタンスの手続きをメモリ上において当該手続きが展開されている位置(アドレス)を示す「メモリアドレス」により指定する場合には、当該メモリアドレスが実行順序ルールに設定されていてもよい。
次に、本変形例に係る通信装置1fの動作を説明する。図23は、本変形例に係る処理順序制御部13の動作を示すフローチャートである。
まず、処理順序制御部13は、現在実行している機能インスタンス12の手続きを識別する実行手続きIDを表す変数である変数CUR_METD_ID、及び、当該手続きの返り値を表す変数である変数CUR_RETに、それぞれ「0」を代入することにより、これらの変数の初期化を行う(図23、ステップS201)。ここで、実行手続きIDのみで一意に手続きが同定できず、現在実行している機能インスタンス12を識別する実行インスタンスIDを表す変数である変数CUR_INST_IDの値と併せて手続きを同定する場合、処理順序制御部13は、変数CUR_INST_IDにも「0」を代入する。
続いて、処理順序制御部13は、実行順序ルールを読み込む(図23、ステップS202)。次に、処理順序制御部13は、最初の実行順序ルールから、「実行手続きID」の値及び「返り値」が、それぞれ、変数CUR_METD_ID及び変数CUR_RETと一致する実行順序ルールを検索する(図23、ステップS203)。ここで、変数CUR_INST_IDの値と併せて手続きを同定する場合、処理順序制御部13は、「実行インスタンスID」の値、「実行手続きID」の値及び「返り値」が、それぞれ、変数CUR_INST_ID、変数CUR_METD_ID及び変数CUR_RETと一致する実行順序ルールを検索する。
例えば、最初の実行順序ルールにおける「実行手続きID」の値及び「返り値」はそれぞれ「0」であり、これらの値は、上記においてそれぞれ「0」を代入した変数CUR_METD_ID及び変数CUR_RETに一致する。ここで、変数CUR_INST_IDの値と併せて手続きを同定する場合、最初の実行順序ルールにおける「実行インスタンスID」の値、「実行手続きID」の値及び「返り値」は、それぞれ、変数CUR_INST_ID、変数CUR_METD_ID及び変数CUR_RETに一致する。これにより、処理順序制御部13は、一致した実行順序ルールにおける「次実行手続きID」の項目の値(例えば「1」)を変数NXT_METD_IDに代入する(図23、ステップS204)。これにより、変数NXT_METD_ID=1となる。ここで、変数CUR_INST_IDの値と併せて手続きを同定する場合、処理順序制御部13は、さらに、一致した実行順序ルールにおける「次実行インスタンスID」の項目の値(例えば「1」)を変数NXT_INST_IDに代入する。これにより、変数NXT_INST_ID=変数NXT_METD_ID=1となる。
ここでは、変数NXT_METD_ID、または、変数NXT_INST_IDおよび変数NXT_METD_IDを用いて、次に実行する手続きを表した。しかし、これらの変数を手続きが展開されている位置(アドレス)等に変換する処理は、処理順序制御部13で行ってもよいし、NW機能を実行する他の装置または他の処理順序制御部で行ってもよい。あるいは、変数と手続きが展開されている位置(アドレス)等を対応づけたテーブルを通信装置1f内または他の装置に設け、当該テーブルを用いて、間接的に、手続きが展開されている位置(アドレス)等を参照するようにしてもよい。あるいは、通信装置1fが他の装置に問い合わせを行い、他の装置は、変換を行い、変換により得られた位置(アドレス)を通信装置1fに送信し、通信装置1fが当該位置(アドレス)を受信するようにしてもよい。例えば、機能インスタンスを識別する情報と手続きを識別する情報の組み合わせで手続きを同定する場合、「機能インスタンスID」及び「機能インスタンス名」の少なくとも一つと、「手続きID」及び「手続き名」の少なくとも一つと、メモリ上において当該手続きが展開されている位置(アドレス)や当該手続きの参照先を示す「メモリアドレス」とが対応付けられたテーブル等を用いて、変換を行ってもよい。あるいは、手続きを識別する情報のみで手続きを一意に同定できる場合は、「手続きID」及び「手続き名」の少なくとも一つと、メモリ上において当該手続きが展開されている位置(アドレス)や当該手続きの参照先を示す「メモリアドレス」とが対応付けられたテーブル等を用いて、変換を行ってもよい。また、変数NXT_INST_IDや変数NXT_METD_IDを用いる代わりに、メモリ上において手続きが展開されている位置(アドレス)を示す「メモリアドレス」や当該手続きの参照先を直接示す情報を用いてもよい。
続いて、処理順序制御部13は、変数NXT_METD_IDと一致する「実行手続きID」により同定される手続き、または、変数NXT_INST_IDと変数NXT_METD_IDの組み合わせと一致する「実行インスタンスID」と「実行手続きID」の組み合わせにより同定される手続きを呼び出して実行する(図23、ステップS205)。正常な処理が行われた場合、機能インスタンス12の手続きは、処理を終了し、返り値として正常終了を表す値(「0」より大きな値)を処理順序制御部13へ出力する。ここで、正常終了を表す値は実行順序ルールに記載されている返り値であることが望ましい。なお、処理の対象となるパケットが存在しない場合、機能インスタンス12の手続きは、返り値として「−1」を出力してもよい。
次に、処理順序制御部13は、変数CUR_METD_IDに変数NXT_METD_IDの値を代入する(図23、ステップS206)。ここで、変数CUR_INST_IDの値と併せて手続きを同定する場合、処理順序制御部13は、変数CUR_INST_ID、変数CUR_METD_IDに、それぞれ、変数NXT_INST_ID、変数NXT_METD_IDを代入する。
処理順序制御部13は、処理を実行した機能インスタンス12の手続きから返り値を受け取ると、当該返り値を変数CUR_RETに代入する(図23、ステップS207)。返り値が「0」であった場合(図23、ステップS208・YES)、処理順序制御部13は、パケットを破棄し(図23、ステップS209)、制御が初期化の段階(図23、ステップS201)に戻る。これ以降の動作は、上述した動作と同様である。返り値が「0」以外であった場合(図23、ステップS208・NO)、処理順序制御部13は、再び実行順序ルールを読み込み(図23、ステップS202)、次に実行する機能インスタンスの手続きを示す情報を検索する(図23、ステップS203)。これ以降の動作は、上述した動作と同様である。
以上説明したように、本発明の各実施形態は、特に単一の汎用ハードウェアにおいて動作する複数のNW機能を組み合わせる場合における、遅延の低減を目的とする。本発明の各実施形態では、NW機能間でパケット転送をするのではなく、パケットのデータ自体は移動させずに、定められた順序に従って各NW機能を実行することによりNW機能の組み合わせを実現する。これにより、本発明の各実施形態では、NW機能間でのパケット転送が発生しないため、装置内で発生する遅延を抑制することができる。また、本発明の各実施形態は、小規模な機能を多数組み合わせる場合における遅延の抑制に対してより有効である。
上述した実施形態における通信装置1,1a〜1fの少なくとも一部をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OS(Operating System)や周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM(Read Only Memory)、CD(Compact Disc)−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、FPGA(Field Programmable Gate Array)等のプログラマブルロジックデバイスを用いて実現されるものであってもよい。
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこれらの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。