(57)【特許請求の範囲】
【請求項１】
外部の装置から通信パケットを受信するパケット受信部と、
前記通信パケットに対して所定の処理が実行された後の通信パケットを他の外部の装置へ送信するパケット送信部と、
前記通信パケットの処理順序を制御する処理順序制御部と、
を備え、
前記処理順序制御部は、
前記通信パケットを保持するパケット保持部と、
通信機能における処理に必要な手続き群及び変数群を含む機能ファイルごとにそれぞれ実行形式に変換されメモリに展開されることにより生成される機能インスタンスと、
前記機能インスタンスを識別する機能インスタンス識別子と、前記機能インスタンスに属する手続きを識別する手続き識別子と、前記機能インスタンスに属する前記手続きの前記メモリにおける位置を示すメモリアドレスと、を含むインスタンス情報を保持するインスタンス情報管理部と、
前記機能インスタンス識別子、前記手続き識別子、及び前記手続きの返り値と、次に実行される機能インスタンスに属する手続きと、が対応付けられた実行順序情報を保持する実行順序情報管理部と、
前記実行順序情報と前記インスタンス情報とに基づいて、前記機能インスタンスに属する前記手続きを呼び出し、前記パケット保持部に保持された前記通信パケットに対して前記機能インスタンスに属する前記手続きに基づく処理を実行し、前記機能インスタンスに属する前記手続きに基づく前記処理の前記返り値に応じて、前記次に実行される前記機能インスタンスに属する前記手続きに基づく処理を実行する機能実行部と、
を備える通信装置。
【請求項２】
前記処理順序制御部は、
前記通信機能の追加、前記通信機能の変更、または前記通信機能の削除の要求を外部連携装置から取得する外部連携部と、
前記外部連携装置からの実行順序変更要求に応じて、前記実行順序情報管理部に対して実行順序変更を要求する実行順序変更部と、
前記通信機能の追加、前記通信機能の変更、または前記通信機能の削除の前記要求に応じて、前記機能インスタンスを前記メモリに展開し、または前記機能インスタンスを前記メモリから削除するインスタンス登録・削除部と、
を備え、
前記機能インスタンスは、
前記機能インスタンスの初期化を行う開始手続きと、
終了処理を行う終了手続きと、
を有する請求項１に記載の通信装置。
【請求項３】
前記機能インスタンスは、他の機能インスタンスに属する手続きからの情報取得要求、及び機能実行の要求に応じて処理を行う通知受付手続きを備える、
請求項１に記載の通信装置。
【請求項４】
前記処理順序制御部は、
前記機能インスタンスに属する前記手続きからの要求に応じて、他の機能インスタンスの情報取得、及び機能実行を仲介する通知手続きと、
前記通知手続きからの要求に応じて前記他の機能インスタンスの通知受付手続きに関する情報を出力する連携情報保持部を備える、
請求項１に記載の通信装置。
【請求項５】
前記実行順序情報管理部は、
前記機能実行部が実行する前記手続きの位置を示すメモリアドレスをノードとした、実行順序に基づく木構造の情報を保持し、
前記機能実行部は、
前記手続きを呼び出す際に、前記実行順序情報管理部から取得した前記木構造の情報に基づき、前記返り値に応じて前記木構造の前記ノードを遷移することにより前記手続きを実行する
請求項１に記載の通信装置。
【請求項６】
コンピュータによる通信方法であって、
パケット受信部が、外部の装置から通信パケットを受信するパケット受信ステップと、
パケット送信部が、前記通信パケットに対して所定の処理が実行された後の通信パケットを他の外部の装置へ送信するパケット送信ステップと、
処理順序制御部が、前記通信パケットの処理順序を制御する処理順序制御ステップと、
を有し、
前記処理順序制御ステップは、
パケット保持部が、前記通信パケットを保持するパケット保持ステップと、
機能実行部が、通信機能における処理に必要な手続き群及び変数群を含む機能ファイルごとにそれぞれ実行形式に変換しメモリに展開することにより機能インスタンスを生成する機能インスタンス生成ステップと、
インスタンス情報管理部が、前記機能インスタンスを識別する機能インスタンス識別子と、前記機能インスタンスに属する手続きを識別する手続き識別子と、前記機能インスタンスに属する前記手続きの前記メモリにおける位置を示すメモリアドレスと、を含むインスタンス情報を保持するインスタンス情報管理ステップと、
実行順序情報管理部が、前記機能インスタンス識別子、前記手続き識別子、及び前記手続きの返り値と、次に実行される機能インスタンスに属する手続きと、が対応付けられた実行順序情報を保持する実行順序情報管理ステップと、
前記機能実行部が、前記実行順序情報と前記インスタンス情報とに基づいて、前記機能インスタンスに属する前記手続きを呼び出し、前記パケット保持部に保持された前記通信パケットに対して前記機能インスタンスに属する前記手続きに基づく処理を実行し、前記機能インスタンスに属する前記手続きに基づく前記処理の前記返り値に応じて、前記次に実行される前記機能インスタンスに属する前記手続きに基づく処理を実行する機能実行ステップと、
を有する通信方法。
【請求項７】
通信における処理の機能インスタンスに属する手続きと、
前回処理した機能インスタンスに属する手続きと、前記前回処理した機能インスタンスに属する前記手続きの返り値とに応じて、実行すべき機能インスタンスに属する手続きを呼び出して実行することにより通信パケットの処理順序を制御する処理順序制御部と
を備える通信装置。
【請求項８】
前記返り値がない場合、前記処理順序制御部は、前記実行すべき機能インスタンスに属する前記手続きとして、前記前回処理した機能インスタンスに属する前記手続きに応じた手続き、所定の手続き、または、所定の処理を行う手続きを呼び出す
請求項７に記載の通信装置。
【請求項９】
コンピュータによる通信方法であって、
前回処理した、通信における処理の機能インスタンスに属する手続きと、前記前回処理した機能インスタンスに属する前記手続きの返り値とに応じて、実行すべき機能インスタンスに属する手続きを呼び出して実行することにより通信パケットの処理順序を制御する処理順序制御ステップ
を有する通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置及び通信方法に関する。
本願は、２０１７年２月８日に日本へ出願された特願２０１７−０２１３８２号に基づき優先権を主張し、その内容をここに援用する。
【背景技術】
【０００２】
近年、サービス導入の迅速化を実現するＮＦＶ（Network Function Virtualization；ネットワーク機能仮想化）が注目されている。ＮＦＶのコンセプトは、従来、専用のハードウェアによって実装されてきた通信装置の機能（以下、「ＮＷ機能」（ネットワーク機能）という）をソフトウェアによって実装し、汎用的なハードウェア上のオペレーティングシステムにおいて当該ＮＷ機能を動作させるというコンセプトである（例えば、非特許文献１参照）。ＮＦＶにより、ソフトウェアの変更のみで、ＮＷ機能の追加や変更を行うことが可能になるため、サービスの開発から導入及び展開までの時間が短縮される。
また近年、ＮＦＶのコンセプトに基づいてソフトウェア実装された複数のＮＷ機能を、ユーザが加入しているサービスに応じて組み合わせる技術として、サービスファンクションチェイニング（以下、「ＳＦＣ」という）が検討されている（例えば、非特許文献２参照）。ＳＦＣにおいて、ユーザの通信パケット（以下、「パケット」ともいう）は、加入サービスに応じた転送順序に従って各ＮＷ機能を経由する（図２４参照）。ユーザのパケットは、経由した各ＮＷ機能において、ヘッダ書き換え、破棄、情報付与等の処理がなされる。例えば、図２４においては、パケットは、まずＮＷ機能１に転送されてタグが付与され、次にＮＷ機能２に転送されて当該タグが書き換えられる。ＳＦＣでは、パケットが経由するＮＷ機能の転送経路を変更することによって、サービスを構成するＮＷ機能の組み合わせを変更することができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ETSI, “Network Functions Virtualisation - Introductory White Paper”, 2012.
【非特許文献２】北田裕之他， “将来ネットワークに向けたサービスファンクションチェイニング技術”， ＮＴＴ技術ジャーナル， 26(5), pp. 10-13, 2014.5.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＳＦＣでは、ＮＷ機能間のパケット転送による通信の遅延が発生することがある。上記の遅延の発生に関して、図２５を参照しながら説明する。各ＮＷ機能は、仮想マシンやコンテナ等の仮想環境内で動作する。異なるＮＷ機能は、異なるソフトウェアプロセス内で動作するため、あるＮＷ機能（ＮＷ機能１）から他のＮＷ機能（ＮＷ機能２）へパケットを転送する場合には、まずＮＷ機能１がソフトウェアプロセス間で共有する共有メモリにパケットを書き込み、次にＮＷ機能２が当該共有メモリからのパケットの読み出しを行う。この際，パケットのメモリコピーにより、通信の遅延が発生することがある。
これに対し、パケットの実体をＮＷ機能間で受け渡すのではなく、パケットの存在するメモリアドレスへの参照情報をＮＷ機能間で受け渡すことによって、書き込み処理、及び読み込み処理にかかる時間を短縮させる方法も考えられる。しかしながら、この方法でも、パケットの書き込み時、及び読み出し時に、ＮＷ機能間での排他制御が必要である。【０００５】
特に、小規模なＮＷ機能を多数組み合わせるような処理である場合には、ＮＷ機能の実行における通信の遅延よりも、ＮＷ機能間のパケット転送による通信の遅延のほうがより割合が高くなることが予想される。さらに、汎用ハードウェアの計算資源が少ない場合には、一つのＣＰＵ（Central Processing Unit；中央演算処理装置）上で複数のソフトウェアプロセスが動作することによって、頻繁にコンテキストスイッチが発生し、これにより通信の遅延の更なる増大が懸念される。【０００６】
本発明は、斯かる事情を鑑みてなされたものであり、特に、単一の汎用ハードウェアにおいて動作する複数のＮＷ機能を組み合わせる場合において、通信の遅延を低減させる通信装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の態様は、外部の装置から通信パケットを受信するパケット受信部と、前記通信パケットに対して所定の処理が実行された後の通信パケットを他の外部の装置へ送信するパケット送信部と、前記通信パケットの処理順序を制御する処理順序制御部と、を備え、前記処理順序制御部は、前記通信パケットを保持するパケット保持部と、通信機能における処理に必要な手続き群及び変数群を含む機能ファイルごとにそれぞれ実行形式に変換されメモリに展開されることにより生成される機能インスタンスと、前記機能インスタンスを識別する機能インスタンス識別子と、前記機能インスタンスに属する手続きを識別する手続き識別子と、前記機能インスタンスに属する前記手続きの前記メモリにおける位置を示すメモリアドレスと、を含むインスタンス情報を保持するインスタンス情報管理部と、前記機能インスタンス識別子、前記手続き識別子、及び前記手続きの返り値と、次に実行される機能インスタンスに属する手続きと、が対応付けられた実行順序情報を保持する実行順序情報管理部と、前記実行順序情報と前記インスタンス情報とに基づいて、前記機能インスタンスに属する前記手続きを呼び出し、前記パケット保持部に保持された前記通信パケットに対して前記機能インスタンスに属する前記手続きに基づく処理を実行し、前記機能インスタンスに属する前記手続きに基づく前記処理の前記返り値に応じて、前記次に実行される前記機能インスタンスに属する前記手続きに基づく処理を実行する機能実行部と、を備える通信装置である。【０００８】
上記の通信装置において、前記処理順序制御部は、前記通信機能の追加、前記通信機能の変更、または前記通信機能の削除の要求を外部連携装置から取得する外部連携部と、前記外部連携装置からの実行順序変更要求に応じて、前記実行順序情報管理部に対して実行順序変更を要求する実行順序変更部と、前記通信機能の追加、前記通信機能の変更、または前記通信機能の削除の前記要求に応じて、前記機能インスタンスを前記メモリに展開し、または前記機能インスタンスを前記メモリから削除するインスタンス登録・削除部と、を備え、前記機能インスタンスは、前記機能インスタンスの初期化を行う開始手続きと、終了処理を行う終了手続きと、を有するようにしてもよい。【０００９】
上記の通信装置において、前記機能インスタンスは、他の機能インスタンスに属する手続きからの情報取得要求、及び機能実行の要求に応じて処理を行う通知受付手続きを備えるようにしてもよい。【００１０】
上記の通信装置において、前記処理順序制御部は、前記機能インスタンスに属する前記手続きからの要求に応じて、他の機能インスタンスの情報取得、及び機能実行を仲介する通知手続きと、前記通知手続きからの要求に応じて前記他の機能インスタンスの通知受付手続きに関する情報を出力する連携情報保持部を備えるようにしてもよい。【００１１】
上記の通信装置において、前記実行順序情報管理部は、前記機能実行部が実行する前記手続きの位置を示すメモリアドレスをノードとした、実行順序に基づく木構造の情報を保持し、前記機能実行部は、前記手続きを呼び出す際に、前記実行順序情報管理部から取得した前記木構造の情報に基づき、前記返り値に応じて前記木構造の前記ノードを遷移することにより前記手続きを実行するようにしてもよい。【００１２】
本発明の第２の態様は、コンピュータによる通信方法であって、パケット受信部が、外部の装置から通信パケットを受信するパケット受信ステップと、パケット送信部が、前記通信パケットに対して所定の処理が実行された後の通信パケットを他の外部の装置へ送信するパケット送信ステップと、処理順序制御部が、前記通信パケットの処理順序を制御する処理順序制御ステップと、を有し、前記処理順序制御ステップは、パケット保持部が、前記通信パケットを保持するパケット保持ステップと、機能実行部が、通信機能における処理に必要な手続き群及び変数群を含む機能ファイルごとにそれぞれ実行形式に変換しメモリに展開することにより機能インスタンスを生成する機能インスタンス生成ステップと、インスタンス情報管理部が、前記機能インスタンスを識別する機能インスタンス識別子と、前記機能インスタンスに属する手続きを識別する手続き識別子と、前記機能インスタンスに属する前記手続きの前記メモリにおける位置を示すメモリアドレスと、を含むインスタンス情報を保持するインスタンス情報管理ステップと、実行順序情報管理部が、前記機能インスタンス識別子、前記手続き識別子、及び前記手続きの返り値と、次に実行される機能インスタンスに属する手続きと、が対応付けられた実行順序情報を保持する実行順序情報管理ステップと、前記機能実行部が、前記実行順序情報と前記インスタンス情報とに基づいて、前記機能インスタンスに属する前記手続きを呼び出し、前記パケット保持部に保持された前記通信パケットに対して前記機能インスタンスに属する前記手続きに基づく処理を実行し、前記機能インスタンスに属する前記手続きに基づく前記処理の前記返り値に応じて、前記次に実行される前記機能インスタンスに属する前記手続きに基づく処理を実行する機能実行ステップと、を有する通信方法である。【００１３】
本発明の第３の態様は、通信における処理の機能インスタンスに属する手続きと、前回処理した機能インスタンスに属する手続きと、前記前回処理した機能インスタンスに属する前記手続きの返り値とに応じて、実行すべき機能インスタンスに属する手続きを呼び出す処理順序制御部とを備える通信装置である。【００１４】
上記本発明の第３の態様による通信装置において、前記返り値がない場合、前記処理順序制御部は、前記実行すべき機能インスタンスに属する前記手続きとして、前記前回処理した機能インスタンスに属する前記手続きに応じた手続き、所定の手続き、または、所定の処理を行う手続きを呼び出すようにしてもよい。【００１５】
本発明の第４の態様は、コンピュータによる通信方法であって、前回処理した、通信における処理の機能インスタンスに属する手続きと、前記前回処理した機能インスタンスに属する前記手続きの返り値とに応じて、実行すべき機能インスタンスに属する手続きを呼び出す処理順序制御ステップを有する通信方法である。
【発明の効果】
【００１６】
本発明によれば、装置内で発生する遅延を抑制することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の各実施形態に係る通信装置の機能構成の概略を示す機能ブロック図である。
【図２】本発明の第１の実施形態に係る通信装置により複数の機能を組み合わせて実行する際の機能部間の連携処理の一例を示す図である。
【図３】本発明の第１の実施形態に係る通信装置の機能実行部の動作を示すフローチャートである。
【図４】本発明の第１の実施形態に係る通信装置の実行順序情報管理部が保持する実行順序ルールテーブルの一例を示す図である。
【図５】本発明の第１の実施形態に係る通信装置のインスタンス情報管理部が保持する機能インスタンス情報テーブルの一例を示す図である。
【図６】本発明の第１の実施形態の変形例１に係る通信装置の機能実行部の動作を示すフローチャートである。
【図７】本発明の第１の実施形態の変形例１に係る通信装置の実行順序情報管理部が保持する実行順序ルールテーブルの一例を示す図である。
【図８】本発明の第１の実施形態の変形例２に係る通信装置の機能実行部の動作を示すフローチャートである。
【図９】本発明の第１の実施形態の変形例２に係る通信装置の実行順序情報管理部が保持する実行順序ルールテーブルの一例を示す図である。
【図１０】本発明の第２の実施形態に係る通信装置の機能追加時の動作の一例を示す図である。
【図１１】本発明の第２の実施形態に係る通信装置の機能削除時の動作の一例を示す図である。
【図１２】本発明の第２の実施形態に係る通信装置の新機能インスタンスが生成するインスタンス情報の一例を示す図である。
【図１３】本発明の第２の実施形態に係る通信装置による実行順序変更方法の一例を示す図である。
【図１４】本発明の第３の実施形態に係る通信装置の機能間連携の動作の一例を示す図である。
【図１５】本発明の第３の実施形態に係る通信装置の連携情報保持部が保持する連携種別テーブルの一例を示す図である。
【図１６】本発明の第３の実施形態の変形例に係る通信装置の機能間連携の動作の一例を示す図である。
【図１７】本発明の第３の実施形態の変形例に係る通信装置の公開変数情報保持部が保持する公開変数テーブルの一例を示す図である。
【図１８】本発明の第４の実施形態に係る通信装置の実行順序情報管理部が保持する実行順序ルールテーブルの一例を示す図である。
【図１９】本発明の第４の実施形態の変形例に係る通信装置の実行順序情報管理部が保持する実行順序ルールテーブルの一例を示す図である。
【図２０】本発明の第５の実施形態に係る通信装置がパイプライン化された場合の機能構成の概略を示す機能ブロック図である。
【図２１Ａ】本発明の第５の実施形態に係る通信装置がパイプライン化された場合の実行順序情報管理部が保持する機能実行部用の実行順序ルールテーブルの一例を示す図である。
【図２１Ｂ】本発明の第５の実施形態に係る通信装置がパイプライン化された場合の実行順序情報管理部が保持する第二機能実行部用の実行順序ルールテーブルの一例を示す図である。
【図２２Ａ】図１に示す通信装置の変形例の機能構成を示す機能ブロック図である。
【図２２Ｂ】図１に示す通信装置の変形例の機能構成を示す機能ブロック図である。
【図２２Ｃ】図１に示す通信装置の変形例の機能構成を示す機能ブロック図である。
【図２３】図１に示す通信装置の変形例における処理順序制御部の動作を示すフローチャートである。
【図２４】従来のサービスファンクションチェイニング（ＳＦＣ）の概要を示す概略図である。
【図２５】従来のサービスファンクションチェイニング（ＳＦＣ）において発生する遅延について説明する図である。
【発明を実施するための形態】
【００１８】
以下、本発明の各実施形態について説明する。
本発明の各実施形態に係る通信装置は、ＮＷ機能間でパケット転送を行うのではなく、パケットのデータ自体は移動させずに、定められた順序に従って各ＮＷ機能を実行することによって、複数のＮＷ機能の組み合わせを実現する。これにより、本発明の各実施形態に係る通信装置においては、ＮＷ機能間でのパケット転送が発生しないため、通信装置内で発生する通信の遅延を抑制することができる。また、本発明の各実施形態に係る通信装置は、小規模な機能を多数組み合わせる場合における通信の遅延の抑制に対してより有効である。
【００１９】
また、以下に説明する、本発明の各実施形態に係る通信装置によれば、各ＮＷ機能が定められた順序に従って逐次的に実行されるため、複数のＮＷ機能が、パケットの読み込み処理や書き込み処理等を同時に行うことはないため、排他制御が必要な処理の数を少なくすることができる。さらに、本発明の各実施形態によれば、各ＮＷ機能を実行する動作主体が単一のソフトウェアプロセスとなるように通信装置を実装することが可能であるため、各ＮＷ機能を複数のソフトウェアプロセスによってそれぞれ実装した場合と比べて、コンテキストスイッチによる通信の遅延の発生を抑制することができる。
【００２０】
本発明の各実施形態に係る通信装置は、複数のＮＷ機能を組み合わせることによって、単一の汎用ハードウェアを仮想的な通信装置として動作させることができる。なお、ここでいう仮想的な通信装置とは、コアネットワーク装置でも、アクセスネットワーク装置でもよい。本発明の各実施形態に係る通信装置は、例えば、ＭＰＣＰ（Multi-Point Control Protocol）機能やＤＢＡ（Dynamic Bandwidth Allocation）機能を機能インスタンスとして実装することにより、汎用ハードウェアを、アクセスネットワークの仮想ＯＬＴ（Optical Line Terminal；光終端装置）として動作させることもできる。
【００２１】
［通信装置の機能構成］
以下、本発明の各実施形態に係る通信装置の機能構成について図面を参照しながら説明する。
図１は、本発明の各実施形態に係る通信装置の機能構成の概略を示す機能ブロック図である。図示するように、通信装置１は、機能ファイル保持部１１と、機能インスタンス１２と、処理順序制御部１３と、パケット受信部１４と、パケット送信部１５と、を含んで構成される。
【００２２】
機能ファイル保持部１１は、ＮＷ機能の処理が記述された機能ファイルを保持する。機能ファイルは、ＮＷ機能の処理において必要な手続き群及び変数群を記したソースコード、もしくはコンパイル後の実行ファイル等である。
【００２３】
機能インスタンス１２は、機能ファイルを実行形式にした後、組み合わせるＮＷ機能ごとにメモリ（図示せず）に展開した手続き群及び変数群である。
【００２４】
パケット受信部１４は、外部の装置が取得したパケット（通信パケット）を当該外部の装置から受信する。処理順序制御部１３は、当該パケットをパケット受信部１４から取得し、定められた順序に従って機能インスタンス１２の手続きを呼び出し、取得したパケットに対してＮＷ機能に関する処理を実行する。取得したパケットは、指定された処理が終わった後、破棄されるか、もしくはパケット送信部１５を介して外部の装置（または、他の外部の装置）へ送出される。
【００２５】
処理順序制御部１３は、実行順序情報管理部１３１と、インスタンス情報管理部１３２と、機能実行部１３３と、パケット保持部１３４と、を含んで構成される。
【００２６】
実行順序情報管理部１３１は、ＮＷ機能に関する処理の実行順序を示す実行順序ルールテーブルを実行順序情報として保持する。また、実行順序情報管理部１３１は、実行順序の変更の要求があった場合には実行順序のルールの変更を行ったり、特定のＮＷ機能の削除の要求があった場合には機能の削除を行ったりする。
【００２７】
インスタンス情報管理部１３２は、メモリに展開された機能インスタンスの識別子（以下、「インスタンスＩＤ」という）、及び各機能インスタンス１２に属する手続きを識別する識別子（以下、「手続きＩＤ」という）、及び上述した手続きが展開されたメモリのアドレスを、インスタンス情報として保持する。また、新たな機能インスタンス１２の追加要求、機能削除の要求、または機能置き換えの要求があった場合には、インスタンス情報管理部１３２は、保持している情報の追加または削除を行う。なお、インスタンス情報は、手続きが展開されたメモリのアドレスだけでなく、機能インスタンスが展開されたメモリのアドレスに関する情報を含んでいてもよい。
【００２８】
機能実行部１３３は、上述したインスタンス情報に基づいて、機能インスタンス１２に属する手続きを呼び出し、パケット保持部１３４に保持されたパケットに対して処理を行う。さらに、機能実行部１３３は、上述した実行順序ルールテーブルが示す実行順序に従い、手続きの返り値に応じて次の手続きを呼び出す。なお、手続きの返り値はなくてもよい。また、返り値が「０」の場合はパケットの破棄を表し、返り値が「０」よりも小さい場合は異常終了を表すと規定する。
【００２９】
＜第１の実施形態＞
以下、本発明の第１の実施形態に係る通信装置１ａについて図面を参照しながら説明する。本実施形態に係る通信装置１ａは、複数のＮＷ機能を組み合わせて転送を行う。
以下、通信装置１ａによって、パケットのＶＬＡＮ−ＩＤ（Virtual Local Area Network-Identifier）の変換を行うＶＬＡＮ−ＩＤ変換機能、及び、特定のＩＰ（Internet Protocol）アドレスのパケットを破棄するフィルタ機能、の２つの機能の組み合わせを実現する例を、図２乃至図５を参照しながら説明する。
【００３０】
図２は、本発明の第１の実施形態に係る通信装置１ａにより複数の機能を組み合わせて実行する際の機能部間の連携処理の一例を示す図である。図３は、本発明の第１の実施形態に係る通信装置１ａの機能実行部１３３の動作を示すフローチャートである。図４は、本発明の第１の実施形態に係る通信装置１ａの実行順序情報管理部１３１が保持する実行順序ルールテーブルの一例を示す図である。図５は、本発明の第１の実施形態に係る通信装置１ａのインスタンス情報管理部１３２が保持する機能インスタンス情報テーブルの一例を示す図である。
【００３１】
図２に図示するように、まず、機能実行部１３３は、実行順序情報管理部１３１から、実行順序ルールテーブルを取得する。実行順序ルールテーブルは、図４に示すように、現在実行している機能インスタンス１２を識別する「実行インスタンスＩＤ」と、現在実行している機能インスタンス１２の手続きを識別する「実行手続きＩＤ」と、実行処理の「返り値」と、当該返り値に応じた次に実行すべき機能インスタンス１２を識別する「次実行インスタンスＩＤ」と、当該返り値に応じた次に実行すべき機能インスタンス１２の手続きを識別する「次実行手続きＩＤ」と、が対応付けられたテーブルである。
【００３２】
なお、図４には図示していないが、次に実行すべき機能インスタンス１２及び手続きが、返り値に関わらず同一であるような場合には、実行順序ルールテーブルにおける「返り値」の項目の値として「＊」を設定してもよい。また、図４には図示していないが、返り値がない場合に備えて、実行順序ルールテーブルにおける「返り値」の項目の値として「ＮＵＬＬ（空文字）」を設定してもよい。
【００３３】
また、実行している機能インスタンス１２の種別に関わらず、返り値が「０」である場合には、機能実行部１３３は、パケット保持部１３４に保持されたパケットを破棄する。
【００３４】
また、最初に実行すべき機能インスタンス１２及び手続きは、実行順序ルールテーブルの１行目に、「実行インスタンスＩＤ」の項目の値として「０」（図４においては、「ＳＴＡＲＴ（０）」と図示）、「実行手続きＩＤ」の項目の値として「０」（図４においては、「ＳＴＡＲＴ（０）」と図示）、及び「返り値」の項目の値として「０」（図４においては、「ＳＴＡＲＴ（０）」と図示）、がそれぞれ設定される。なお、実行順序ルールテーブルの１行目における「返り値」の項目の値は、「０」ではなく「＊」であってもよい。
【００３５】
続いて、機能実行部１３３は、当該機能実行部１３３が現在実行している機能インスタンス１２を識別する実行インスタンスＩＤを表す変数である変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、機能実行部１３３が現在実行している機能インスタンス１２の手続きを識別する手続きＩＤを表す変数である変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び、当該手続きの返り値を表す変数である変数ＣＵＲ＿ＲＥＴに、それぞれ「０」を代入することにより初期化する（図３、ステップＳ００１）。
【００３６】
続いて、機能実行部１３３は、実行順序ルールテーブルを読み込み（図３、ステップＳ００２）、当該実行順序ルールテーブルの１行目から、各行に記述されている「実行インスタンスＩＤ」、「実行手続きＩＤ」、及び「返り値」の項目の値が、それぞれ、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び変数ＣＵＲ＿ＲＥＴと一致する行を検索する（図３、ステップＳ００３）。
【００３７】
図４に示す実行順序ルールテーブルにおいて、１行目の「実行インスタンスＩＤ」、「実行手続きＩＤ」、及び「返り値」の項目の値は、それぞれ「０」（ＳＴＡＲＴ（０））であり、上記においてそれぞれ「０」を代入した変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び変数ＣＵＲ＿ＲＥＴに一致する。これにより、機能実行部１３３は、一致した行（すなわち、図４に示す実行順序ルールテーブルの１行目）の「次実行インスタンスＩＤ」の項目の値である「１」と、「次実行手続きＩＤ」の項目の値である「１」を、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤと、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤに代入する（図３、ステップＳ００４）。これにより、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ＝１、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤ＝１となる。
【００３８】
続いて、機能実行部１３３は、インスタンス情報管理部１３２から、次に実行する機能インスタンス１２及び手続きを示す機能インスタンス情報テーブルを取得する。機能インスタンス情報テーブルは、図５に示すように、機能インスタンス１２の名称を示す「機能インスタンス名」と、当該機能インスタンス１２に属する手続きの名称を示す「手続き名」と、当該機能インスタンス１２を識別する「インスタンスＩＤ」と、当該機能インスタンス１２に属する手続きを識別する「手続ＩＤ」と、メモリ上において当該手続きが展開されている位置（アドレス）を示す「メモリアドレス」と、が対応付けられたテーブルである。なお、機能インスタンス情報テーブルにおいて、手続きのメモリアドレスの項目は、空欄でもよい。また、図５には図示していないが、機能インスタンス情報テーブルは、手続きのメモリアドレスのみではなく、機能インスタンスのメモリアドレスを含んでいてもよい。
【００３９】
機能実行部１３３は、機能インスタンス情報テーブルを読込み（図３、ステップＳ００５）、当該機能インスタンス情報テーブルの１行目から、各行に記述されている「インスタンスＩＤ」、及び「手続きＩＤ」が、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、及び変数ＮＸＴ＿ＭＥＴＤ＿ＩＤと一致する行を検索する（図３、ステップＳ００６）。
【００４０】
図５に示す機能インスタンス情報テーブルにおいて、２行目に記述された機能インスタンス１２（受信機能インスタンス）の「インスタンスＩＤ」、及び「手続きＩＤ」の項目の値は、それぞれ「１」であり、上記においてそれぞれ「１」を代入した変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、及び変数ＮＸＴ＿ＭＥＴＤ＿ＩＤに一致する。
機能実行部１３３は、一致した行（すなわち、２行目に記述された機能インスタンス１２（受信機能インスタンス））の「メモリアドレス」の項目の値である「０ｘ００００００」を取得する。そして、機能実行部１３３は、取得したメモリアドレスに基づいてメモリを参照して手続きを呼び出し、処理を実行する（図３、ステップＳ００７）。
【００４１】
また、機能実行部１３３は、手続き呼び出しの際、パケット保持部１３４に保持されたパケットにおけるメモリアドレスを受信機能インスタンス１２ａへ出力する。
また、受信機能インスタンス１２ａの受信手続きは、パケット受信部１４からパケットを取り出し、パケット保持部１３４にパケットを移す。正常なパケット転送が行われた場合、受信機能インスタンス１２ａの受信手続きは処理を終了し、返り値として正常終了を表す値（「０」より大きな整数）を機能実行部１３３へ出力する。なお、パケット受信部１４にパケットが存在しない場合、受信機能インスタンス１２ａの受信手続きは、返り値として「−１」を機能実行部１３３へ出力する。また、正常終了を表す値（「０」より大きな整数」）は、実行順序ルールテーブルに記載されている返り値であることが望ましい。これは、受信機能インスタンス１２ａに限らず、他の機能インスタンスについても同様である。
【００４２】
機能実行部１３３は、実行した機能インスタンス１２の手続きから返り値を受け取ると、当該返り値を変数ＣＵＲ＿ＲＥＴに代入する（図３、ステップＳ００８）。
返り値が「０」であった場合（図３、ステップＳ００９・ＮＯ）は、機能実行部１３３は、パケット保持部１３４が保持しているパケットを破棄し（図３、ステップＳ０１０）、制御が、変数初期化の段階（図３、ステップＳ００１）に戻る。返り値が「０」以外であった場合（図３、ステップＳ００９・ＹＥＳ）は、機能実行部１３３は、再び実行順序ルールテーブルを読み込み（図３、ステップＳ００２）、次に実行する機能インスタンス及び手続きを示す情報を検索する（図３、ステップＳ００３）。
【００４３】
例えば、図４の実行順序ルールテーブルの２行目に示すように、「実行インスタンスＩＤ」の項目の値が「１」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すように受信機能インスタンス１２ａの受信手続きであり）、返り値が「１」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「２」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「２」であり「手続きＩＤ」の項目の値が「１」であるＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きを実行する。
【００４４】
機能実行部１３３は、機能インスタンス情報テーブルに基づいて、上記のＶＬＡＮ−ＩＤ変換手続きのメモリアドレスである「０ｘ０００１００」を取得し、当該メモリアドレスに基づいてメモリを参照してＶＬＡＮ−ＩＤ変換手続きを実行する。
【００４５】
なお、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂは、例えば、変換前のＶＬＡＮ−ＩＤと変換後のＶＬＡＮ−ＩＤを対応付けたリストを保持しており、パケット保持部１３４が保持しているパケットのＶＬＡＮ−ＩＤに応じて、当該ＶＬＡＮ−ＩＤの書き換えを行う。ＶＬＡＮ−ＩＤの書き換えが終了すると、ＶＬＡＮ−ＩＤ変換手続きが終了し、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂは返り値を出力する。そして、機能実行部１３３は、実行されたＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂから返り値を取得し、当該返り値を変数ＣＵＲ＿ＲＥＴに代入する。なお、この際に、ＶＬＡＮ−ＩＤの値に応じて返り値を変化させることによって、その後の処理を変化させることも可能である。
【００４６】
例えば、図４の実行順序ルールテーブルの３行目に示すように、「実行インスタンスＩＤ」の項目の値が「２」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すようにＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きであり）、返り値が「１」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「４」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「４」であり「手続きＩＤ」の項目の値が「１」である送信機能インスタンス１２ｄの送信手続きを実行する。
送信機能インスタンス１２ｄの送信手続きでは、パケット保持部１３４が保持している、所定の処理が実行された後のパケットをパケット送信部１５に転送する。これにより、外部の装置へ当該パケットが送出される。
【００４７】
なお、図４の実行順序ルールテーブルの６行目に示すように、「実行インスタンスＩＤ」の項目の値が「４」、及び「実行手続きＩＤ」の項目の値が「１」である、送信機能インスタンス１２ｄの送信手続きに対しては、「次実行インスタンスＩＤ」の項目の値、及び「次実行手続きＩＤ」の項目の値として、それぞれ「０」（図４においては「ＳＴＡＲＴ（０）」と図示）が設定されている。
【００４８】
また、図５の機能インスタンス情報テーブルの１行目に示すように、「インスタンスＩＤ」、及び「手続きＩＤ」の項目の値がそれぞれ「０」であり、かつ手続きの「メモリアドレス」の項目が空欄（「−」）である実際には実行されないダミーの機能インスタンス及びダミーの手続きが予め設定されている。これにより、次回の実行順序ルールテーブルの検索時には、図４に示す実行順序ルールテーブルの１行目が検索されることになり、再びパケットの受信処理が開始されることになる。
【００４９】
一方、例えば、図４の実行順序ルールテーブルの４行目に示すように、「実行インスタンスＩＤ」の項目の値が「２」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すようにＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きであり）、返り値が「２」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「３」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「３」であり「手続きＩＤ」の項目の値が「１」であるフィルタ機能インスタンス１２ｃのフィルタ手続きを実行する。
【００５０】
フィルタ機能インスタンス１２ｃは、例えば、フィルタ対象のＩＰアドレスのリストを保持している。フィルタ機能インスタンス１２ｃのフィルタ手続きは、パケット保持部１３４が保持しているパケットのＩＰアドレスを取得し、当該ＩＰアドレスが上記のリストに含まれている場合には、返り値として「０」を機能実行部１３３へ出力し、機能実行部１３３はパケット保持部１３４が保持しているパケットを破棄する。返り値が「１」の場合には、機能実行部１３３は、実行順序ルールテーブルを検索し、「インスタンスＩＤ」の項目の値が「４」であり「手続きＩＤ」の項目の値が「１」である送信機能インスタンス１２ｄの送信手続きを実行する。
【００５１】
上述したように、送信手続きの次に実行されるべき機能インスタンス及び手続き（実際には、ダミーの機能インスタンス及びダミーの手続きであるため実行されない）に該当する「インスタンスＩＤ」及び「手続きＩＤ」の項目の値は「０」であることから、再びパケットの受信処理が開始されることになる。
【００５２】
以上、説明したように、本発明の第１の実施形態に係る通信装置１ａは、実行順序ルールテーブルによって定義された実行順序に基づいて、逐次的に、ＮＷ機能に属する各種の手続きを実行し、実行した各手続きの返り値に応じて、次に実行する手続きを決定していくことができる。このような逐次的な処理においては、従来技術で行われているようなＮＷ機能間でのパケットの受け渡しのための処理が不要になる。これにより、本発明の第１の実施形態に係る通信装置１ａは、ＮＷ機能間でのパケットの受け渡しによる遅延の発生を抑制することができる。また、本発明の第１の実施形態に係る通信装置１ａにおいては、各機能が逐次的に実行されるため、パケットに対する排他制御が不要になり、例えば、装置の簡易化を図ることができる。
【００５３】
＜第１の実施形態の変形例１＞
以下、本発明の第１の実施形態の変形例１に係る通信装置について説明する。本変形例に係る通信装置の構成は、基本的に、第１の実施形態に係る通信装置１ａの構成と同様であって、機能実行部１３３の動作および実行順序ルールテーブルが第１の実施形態とは異なっている。図６は、本変形例に係る通信装置１ａの機能実行部１３３の動作を示すフローチャートである。図７は、本変形例に係る通信装置１ａの実行順序情報管理部１３１が保持する実行順序ルールテーブルの一例を示す図である。
【００５４】
図２に図示するように、まず、機能実行部１３３は、実行順序情報管理部１３１から、実行順序ルールテーブルを取得する。
なお、次に実行すべき機能インスタンス１２及び手続きが、返り値に関わらず同一であるような場合には、実行順序ルールテーブルにおける「返り値」の項目の値として「＊」を設定してもよい。また、図７には図示していないが、返り値がない場合に備えて、実行順序ルールテーブルにおける「返り値」の項目の値として「ＮＵＬＬ（空文字）」を設定してもよい。
【００５５】
また、実行している機能インスタンス１２の種別に関わらず、返り値が「０」である場合には、機能実行部１３３は、パケット保持部１３４に保持されたパケットを破棄する。
【００５６】
また、最初に実行すべき機能インスタンス１２及び手続きは、実行順序ルールテーブルの１行目に、「実行インスタンスＩＤ」の項目の値として「０」（図７においては、「ＳＴＡＲＴ（０）」と図示）、「実行手続きＩＤ」の項目の値として「０」（図７においては、「ＳＴＡＲＴ（０）」と図示）、及び「返り値」の項目の値として「＊」、がそれぞれ設定される。
【００５７】
続いて、機能実行部１３３は、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び、変数ＣＵＲ＿ＲＥＴに、それぞれ「０」を代入することにより初期化する（図６、ステップＳ００１）。
【００５８】
続いて、機能実行部１３３は、実行順序ルールテーブルを読み込み（図６、ステップＳ００２）、当該実行順序ルールテーブルの１行目から、各行に記述されている「実行インスタンスＩＤ」、「実行手続きＩＤ」、及び「返り値」の項目の値が、それぞれ、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び変数ＣＵＲ＿ＲＥＴと一致する行を検索する（図６、ステップＳ００３）。
【００５９】
図７に示す実行順序ルールテーブルにおいて、１行目の「実行インスタンスＩＤ」、「実行手続きＩＤ」、及び「返り値」の項目の値は、それぞれ「０」（ＳＴＡＲＴ（０））、「０」（ＳＴＡＲＴ（０））、「＊」であり、上記においてそれぞれ「０」を代入した変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び変数ＣＵＲ＿ＲＥＴに一致する。これにより、機能実行部１３３は、一致した行（すなわち、図７に示す実行順序ルールテーブルの１行目）の「次実行インスタンスＩＤ」の項目の値である「１」と、「次実行手続きＩＤ」の項目の値である「１」を、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤと、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤに代入する（図６、ステップＳ００４）。これにより、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ＝１、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤ＝１となる。
【００６０】
続いて、機能実行部１３３は、インスタンス情報管理部１３２から、次に実行する機能インスタンス１２及び手続きを示す機能インスタンス情報テーブルを取得する。
【００６１】
機能実行部１３３は、機能インスタンス情報テーブルを読込み（図６、ステップＳ００５）、当該機能インスタンス情報テーブルの１行目から、各行に記述されている「インスタンスＩＤ」、及び「手続きＩＤ」が、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、及び変数ＮＸＴ＿ＭＥＴＤ＿ＩＤと一致する行を検索する（図６、ステップＳ００６）。
【００６２】
図５に示す機能インスタンス情報テーブルにおいて、２行目に記述された機能インスタンス１２（受信機能インスタンス）の「インスタンスＩＤ」、及び「手続きＩＤ」の項目の値は、それぞれ「１」であり、上記においてそれぞれ「１」を代入した変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、及び変数ＮＸＴ＿ＭＥＴＤ＿ＩＤに一致する。
機能実行部１３３は、一致した行（すなわち、２行目に記述された機能インスタンス１２（受信機能インスタンス））の「メモリアドレス」の項目の値である「０ｘ００００００」を取得する。そして、機能実行部１３３は、取得したメモリアドレスに基づいてメモリを参照して手続きを呼び出し、処理を実行する（図６、ステップＳ００７）。
【００６３】
また、機能実行部１３３は、手続き呼び出しの際、パケット保持部１３４に保持されたパケットにおけるメモリアドレスを受信機能インスタンス１２ａへ出力する。
また、受信機能インスタンス１２ａの受信手続きは、パケット受信部１４からパケットを取り出し、パケット保持部１３４にパケットを移す。正常なパケット転送が行われた場合、受信機能インスタンス１２ａの受信手続きは処理を終了し、返り値として正常終了を表す値（「０」より大きな値）を機能実行部１３３へ出力する。なお、パケット受信部１４にパケットが存在しない場合、受信機能インスタンス１２ａの受信手続きは、返り値として「−１」を機能実行部１３３へ出力する。また、正常終了を表す値（「０」より大きな値」）は、実行順序ルールテーブルに記載されている返り値であることが望ましい。これは、受信機能インスタンス１２ａに限らず、他の機能インスタンスについても同様である。
次に、機能実行部１３３は、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤに、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤの値を代入する（図６、ステップＳ０５１）。
【００６４】
機能実行部１３３は、実行した機能インスタンス１２の手続きから返り値を受け取ると、当該返り値を変数ＣＵＲ＿ＲＥＴに代入する（図６、ステップＳ０５２）。なお、返り値がない場合、機能実行部１３３は変数ＣＵＲ＿ＲＥＴに「ＮＵＬＬ（空文字）」を代入する。
返り値が「０」であった場合（図６、ステップＳ０５３・ＹＥＳ）、機能実行部１３３は、パケット保持部１３４が保持しているパケットを破棄し（図６、ステップＳ０１０）、制御が、変数初期化の段階（図６、ステップＳ００１）に戻る。返り値が「０」以外であった場合（図６、ステップＳ０５３・ＮＯ）は、機能実行部１３３は、再び実行順序ルールテーブルを読み込み（図６、ステップＳ００２）、次に実行する機能インスタンス及び手続きを示す情報を検索する（図６、ステップＳ００３）。
【００６５】
例えば、図７の実行順序ルールテーブルの２行目に示すように、「実行インスタンスＩＤ」の項目の値が「１」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すように受信機能インスタンス１２ａの受信手続きであり）、返り値が「１」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「２」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「２」であり「手続きＩＤ」の項目の値が「１」であるＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きを実行する。
【００６６】
機能実行部１３３は、機能インスタンス情報テーブルに基づいて、上記のＶＬＡＮ−ＩＤ変換手続きのメモリアドレスである「０ｘ０００１００」を取得し、当該メモリアドレスに基づいてメモリを参照してＶＬＡＮ−ＩＤ変換手続きを実行する。
【００６７】
なお、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂは、例えば、変換前のＶＬＡＮ−ＩＤと変換後のＶＬＡＮ−ＩＤを対応付けたリストを保持しており、パケット保持部１３４が保持しているパケットのＶＬＡＮ−ＩＤに応じて、当該ＶＬＡＮ−ＩＤの書き換えを行う。ＶＬＡＮ−ＩＤの書き換えが終了すると、ＶＬＡＮ−ＩＤ変換手続きが終了し、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂは返り値を出力する。そして、機能実行部１３３は、実行されたＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂから返り値を取得し、当該返り値を変数ＣＵＲ＿ＲＥＴに代入する。なお、この際に、ＶＬＡＮ−ＩＤの値に応じて返り値を変化させることによって、その後の処理を変化させることも可能である。
【００６８】
例えば、図７の実行順序ルールテーブルの３行目に示すように、「実行インスタンスＩＤ」の項目の値が「２」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すようにＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きであり）、返り値が「１」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「４」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「４」であり「手続きＩＤ」の項目の値が「１」である送信機能インスタンス１２ｄの送信手続きを実行する。
送信機能インスタンス１２ｄの送信手続きでは、パケット保持部１３４が保持している、所定の処理が実行された後のパケットをパケット送信部１５に転送する。これにより、外部の装置へ当該パケットが送出される。
【００６９】
なお、図７の実行順序ルールテーブルの６行目に示すように、「実行インスタンスＩＤ」の項目の値が「４」、及び「実行手続きＩＤ」の項目の値が「１」である、送信機能インスタンス１２ｄの送信手続きに対しては、「次実行インスタンスＩＤ」の項目の値、及び「次実行手続きＩＤ」の項目の値として、それぞれ「０」（図７においては「ＳＴＡＲＴ（０）」と図示）が設定されている。
【００７０】
また、図５の機能インスタンス情報テーブルの１行目に示すように、「インスタンスＩＤ」、及び「手続きＩＤ」の項目の値がそれぞれ「０」であり、かつ手続きの「メモリアドレス」の項目が空欄（「−」）である実際には実行されないダミーの機能インスタンス及びダミーの手続きが予め設定されている。これにより、次回の実行順序ルールテーブルの検索時には、図７に示す実行順序ルールテーブルの１行目が検索されることになり、再びパケットの受信処理が開始されることになる。
【００７１】
一方、例えば、図７の実行順序ルールテーブルの４行目に示すように、「実行インスタンスＩＤ」の項目の値が「２」、及び「実行手続きＩＤ」の項目の値が「１」であり（すなわち、図５に示すようにＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂのＶＬＡＮ−ＩＤ変換手続きであり）、返り値が「２」であるとき、機能実行部１３３は、「次実行インスタンスＩＤ」の項目の値「３」と「次実行手続きＩＤ」の項目の値「１」とを取得する。これらの値に基づいて、機能実行部１３３は、図５に示す機能インスタンス情報テーブルにおいて、「インスタンスＩＤ」の項目の値が「３」であり「手続きＩＤ」の項目の値が「１」であるフィルタ機能インスタンス１２ｃのフィルタ手続きを実行する。
【００７２】
フィルタ機能インスタンス１２ｃは、例えば、フィルタ対象のＩＰアドレスのリストを保持している。フィルタ機能インスタンス１２ｃのフィルタ手続きは、パケット保持部１３４が保持しているパケットのＩＰアドレスを取得し、当該ＩＰアドレスが上記のリストに含まれている場合には、返り値として「０」を機能実行部１３３へ出力し、機能実行部１３３はパケット保持部１３４が保持しているパケットを破棄する。返り値が「１」の場合には、機能実行部１３３は、実行順序ルールテーブルを検索し、「インスタンスＩＤ」の項目の値が「４」であり「手続きＩＤ」の項目の値が「１」である送信機能インスタンス１２ｄの送信手続きを実行する。
【００７３】
上述したように、送信手続きの次に実行されるべき機能インスタンス及び手続き（実際には、ダミーの機能インスタンス及びダミーの手続きであるため実行されない）に該当する「インスタンスＩＤ」及び「手続きＩＤ」の項目の値は「０」であることから、再びパケットの受信処理が開始されることになる。
なお、図７の７行目に示すように、返り値が「０」より小さい値を実行順序ルールテーブルに記載すれば、異常終了した場合の異常処理の実行についても記載することができる。
また、上述した説明では、受信手続きが実行されることで、パケットがパケット受信部１４からパケット保持部１３４に転送される例を記述した。しかし、パケット受信部１４がパケットを受信次第、受信したパケットを自律的にパケット保持部１３４へ転送するようにしてもよい。この場合、処理順序制御部１３は、常に図６に示したシーケンスを実行するのではなく、パケットがパケット保持部１３４に到着次第、割り込み等によってシーケンスの動作を開始させるようにする。この方法によれば、前述した方法に比べて電力効率等の向上が期待される。
【００７４】
＜第１の実施形態の変形例２＞
以下、本発明の第１の実施形態の変形例２に係る通信装置について説明する。上述した第１の実施形態では、実行順序ルールテーブルの各行が基本的に返り値を持ち、返り値に応じて異なる処理順序での実行を可能にしている。しかし、返り値をなくし、決まった処理をシーケンシャルに行うことも可能である。
【００７５】
本変形例に係る通信装置の構成は、基本的に、第１の実施形態に係る通信装置１ａの構成と同様であって、実行順序ルールテーブルの構成および機能実行部１３３の動作が、第１の実施形態とは異なる。
【００７６】
図８は、本変形例に係る通信装置１ａの機能実行部１３３の動作を示すフローチャートである。図９は、本変形例に係る通信装置１ａの実行順序情報管理部１３１が保持する実行順序ルールテーブルの一例を示す図である。
【００７７】
図９に示すように、本変形例に係る実行順序ルールテーブルは、現在実行している機能インスタンス１２を識別する「実行インスタンスＩＤ」と、現在実行している機能インスタンス１２の手続きを識別する「実行手続きＩＤ」とが対応付けられたテーブルである。
【００７８】
以下に、本変形例に係る通信装置１ａの動作について説明する。まず、機能実行部１３３は、実行順序ルールテーブルにおいて、現在手続きを実行している行数を表す変数ＣＵＲ＿ＬＩＮＥに「１」を代入して、変数ＣＵＲ＿ＬＩＮＥを初期化する（図８、ステップＳ１０１）。次に、機能実行部１３３は、変数ＣＵＲ＿ＬＩＮＥが、実行順序ルールテーブルの行数（図９の例では「４」）以下であるかどうかを判断する(図８、ステップＳ１０２）。ここでは、変数ＣＵＲ＿ＬＩＮＥが「１」であって実行順序ルールテーブルの行数以下である（図８、ステップＳ１０２・ＹＥＳ）ため、機能実行部１３３は、処理をステップＳ１０３に進める。
【００７９】
続いて、機能実行部１３３は、実行順序ルールテーブルにおいて、変数ＣＵＲ＿ＬＩＮＥが示す行の情報を取得し（図８、ステップＳ１０３）、１行目に記載されている実行インスタンスＩＤ，実行手続きＩＤをそれぞれ変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ，ＮＸＴ＿ＭＥＴＤ＿ＩＤに代入する(図８、ステップＳ１０４）。続いて、機能実行部１３３は、第１の実施形態と同様に、機能インスタンス情報テーブルを読み込む（図８、ステップＳ１０５）。次に、機能実行部１３３は、機能インスタンス情報テーブルにおいて、インスタンスＩＤ，手続きＩＤが、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ，変数ＮＸＴ＿ＭＥＴＤ＿ＩＤと一致する行を検索する（図８、ステップＳ１０６）。
【００８０】
次いで、機能実行部１３３は、一致した行のメモリアドレスの値に基づいてメモリを参照して手続きを呼び出し、処理を実行する（図８、ステップＳ１０７）。この処理が終了し、機能実行部１３３が処理を実行した手続きから返り値を受け取ると、機能実行部１３３は当該返り値を変数ＣＵＲ＿ＲＥＴに代入する(図８、ステップＳ１０８）。なお、返り値がない場合、機能実行部１３３は、空白を表す「ＮＵＬＬ」を変数ＣＵＲ＿ＲＥＴに代入する。
【００８１】
次に、機能実行部１３３は、変数ＣＵＲ＿ＲＥＴが「０」より大きな値であるか、または、「ＮＵＬＬ」であるかどうかを判断する（図８、ステップＳ１０９）。変数ＣＵＲ＿ＲＥＴが「０」より大きな値であった場合、もしくは「ＮＵＬＬ」であった場合（図８、ステップＳ１０９・ＹＥＳ）、機能実行部１３３は、手続きが正常に実行されたと見なし、次の手続きの処理に移る。この後、機能実行部１３３は、変数ＣＵＲ＿ＬＩＮＥを一つインクリメントする(図８、ステップＳ１１０）。これにより、変数ＣＵＲ＿ＬＩＮＥは「２」となる。
【００８２】
次に、機能実行部１３３は、上述したのと同様に、変数ＣＵＲ＿ＬＩＮＥが実行順序ルールテーブルの行数以下であるかどうかを判断する（図８、ステップＳ１０２）。この場合も変数ＣＵＲ＿ＬＩＮＥが「２」であって実行順序ルールテーブルの行数以下であるため、機能実行部１３３は、処理をステップＳ１０３に進め、上記と同様にして、実行順序ルールテーブルの２行目に記載された実行インスタンスＩＤおよび実行手続きＩＤに対応する機能インスタンスの手続きを呼び出す。
【００８３】
呼び出された手続きの返り値が、いずれも、「０」より大きな値であるか「ＮＵＬＬ」である場合、以上の動作が実行順序ルールテーブルのすべての行について行われる。そして、実行順序ルールテーブルの４行目に対応する手続きの処理が終了した後に、ステップＳ１１０において変数ＣＵＲ＿ＬＩＮＥが一つインクリメントされて「５」になる。この場合、変数ＣＵＲ＿ＬＩＮＥは実行順序ルールテーブルの行数より大きい（図８、ステップＳ１０２・ＮＯ）ため、機能実行部１３３は、実行すべき手続きが終了したと見なし、制御をステップＳ１０１に戻して変数ＣＵＲ＿ＬＩＮＥを「１」に初期化した上で、実行順序の最初から実行を開始する。
【００８４】
一方、いずれかの手続きの動作において、変数ＣＵＲ＿ＲＥＴが「０」より大きな値でなく、かつ、「ＮＵＬＬ」でもないと判断された場合（図８、ステップＳ１０９・ＮＯ）、機能実行部１３３は、変数ＣＵＲ＿ＲＥＴが「０」かどうかを判断する（図８、ステップＳ１１１）。変数ＣＵＲ＿ＲＥＴが「０」でない場合（図８、ステップＳ１１１・ＮＯ）、ステップＳ１０９における判断の結果から、変数ＣＵＲ＿ＲＥＴは「０」より大きくないため、変数ＣＵＲ＿ＲＥＴが「０」より小さいことになる。この場合、機能実行部１３３は、異常が発生したと見なし、異常に対処するための処理（異常処理）に移る（図８、ステップＳ１１２）。一方、変数ＣＵＲ＿ＲＥＴが「０」であった場合（図８、ステップＳ１１１・ＹＥＳ）、機能実行部１３３は、パケット保持部１３４が保持しているパケットを破棄し（図８、ステップＳ１１３）、制御をステップＳ１０１に戻して変数ＣＵＲ＿ＬＩＮＥを「１」に初期化した上で、実行順序の最初から実行を開始する。
【００８５】
本変形例は、返り値に応じた処理の変更をしない反面、実行順序ルールテーブルの検索処理が不要となるため、高速な処理が期待できる。
【００８６】
＜第２の実施形態＞
以下、本発明の第２の実施形態に係る通信装置１ｂについて説明する。本実施形態に係る通信装置１ｂは、上述した第１の実施形態に係る通信装置１ａに対して、新たなＮＷ機能の追加、既存機能の削除、既存機能と新機能の置き換えを行う機能が加えられたものである。
以下に、本実施形態に係る通信装置１ｂの動作について、図面を参照しながら説明する。図１０は、本発明の第２の実施形態に係る通信装置１ｂの機能追加時の動作の一例を示す図である。図１１は、本発明の第２の実施形態に係る通信装置１ｂの機能削除時の動作の一例を示す図である。
【００８７】
図１０及び図１１に図示するように、第２の実施形態に係る通信装置１ｂは、上述した第１の実施形態に係る通信装置１ａに対して、処理順序制御部１３に、外部連携部１３５と、インスタンス登録・削除部１３６と、実行順序変更部１３７と、が更に備えられている点が異なる。なお、図１０及び図１１では、機能実行部１３３、パケット保持部１３４、受信機能ファイル、ＶＬＡＮ−ＩＤ機能ファイル、フィルタ機能ファイル、送信機能ファイル、受信機能インスタンス１２ａ、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂ、フィルタ機能インスタンス１２ｃ、送信機能インスタンス１２ｄの図示を省略している。
【００８８】
外部連携部１３５は、通信機能の追加、通信機能の変更、または通信機能の削除の要求を、外部連携装置から取得する。
図１０に図示するように、例えば、通信装置１ｂの管理者等が新たな機能インスタンスを追加する場合、上記の通信機能の追加の要求に基づいて、外部連携部１３５に対して、新機能の機能ファイルである新機能ファイルと、新機能のインスタンスＩＤ、および実行順序の変更方法を示す情報とが設定される。
【００８９】
外部連携部１３５は、インスタンス登録・削除部１３６に対して、機能追加の要求を示す情報、新機能ファイル、及び新たに生成した新機能の機能インスタンス１２である新機能インスタンス１２ｅを識別するインスタンスＩＤを出力する。インスタンス登録・削除部１３６は、取得した新機能ファイルを機能ファイル保持部１１に保存するとともに、メモリへの展開を行う。なお、全ての機能インスタンスは、開始手続きと終了手続きを有する。新機能ファイルがメモリに展開された際に、インスタンス登録・削除部１３６は、上述した開始手続きのメモリアドレスを取得する。
【００９０】
新機能ファイルのメモリへの展開が行われた後、インスタンス登録・削除部１３６は、取得した開始手続きのメモリアドレスに基づいて、新機能インスタンス１２ｅの開始手続きを実行して、新機能インスタンス１２ｅの初期化を行う。新機能インスタンス１２ｅは、開始手続きが呼び出された後、自己のメモリアドレス，自己の保持する手続きの手続きＩＤ、及び各手続きへのメモリアドレスを取得し、インスタンス情報を生成する。例えば、図１２は、本発明の第２の実施形態に係る通信装置１ｂの新機能インスタンス１２ｅが生成するインスタンス情報の一例を示す図である。
【００９１】
新機能インスタンス１２ｅは、生成したインスタンス情報を、インスタンス登録・削除部１３６へ出力する。インスタンス登録・削除部１３６は、取得したインスタンス情報を、インスタンスＩＤと共にインスタンス情報管理部１３２へ出力する。インスタンス情報管理部１３２は、保持している機能インスタンス情報テーブルに対して、取得したインスタンス情報を記述する。
【００９２】
インスタンス情報管理部１３２において、上述したインスタンス情報の記述が完了した後、外部連携部１３５は管理者等から設定された実行順序の変更方法を示す情報とともに、実行順序変更要求を実行順序変更部１３７に出力する。実行順序変更部１３７は、取得した実行順序の変更方法を示す情報に基づいて、実行順序情報管理部１３１の保持する実行順序ルールテーブルに変更要求を出力する。図１３に示すように、例えば、機能追加をする際には、実行順序変更部１３７は、実行順序情報管理部１３１の実行順序ルールテーブルに対して、新機能から既存機能への遷移を示すルールを追加し（１）、新機能への遷移を示すルールを追加し（２）、最後に、必要としないルール行の削除を行う（３）ことを要求する。
【００９３】
図１１に図示するように、例えば、通信装置１ｂの管理者等が機能インスタンス１２を削除する場合、外部連携部１３５に対して、削除する機能インスタンス１２を識別するインスタンスＩＤ、および実行順序の変更方法を示す情報が設定される。外部連携部１３５は、まず、実行順序変更部１３７に対して実行順序の変更方法を示す情報を出力する。
【００９４】
実行順序変更部１３７は、取得した実行順序の変更方法を示す情報に基づいて、新機能インスタンス１２ｅの追加時と同様に、実行順序情報管理部１３１の保持する実行順序ルールテーブルを更新する。実行順序情報管理部１３１における実行順序ルールテーブルの更新が完了した後、外部連携部１３５は、インスタンス登録・削除部１３６へ、削除対象の機能インスタンスのインスタンスＩＤとともに、機能削除要求を出力する。インスタンス登録・削除部１３６は、インスタンス情報管理部１３２から、削除対象の機能インスタンス１２のメモリアドレス、及び当該機能インスタンス１２の終了手続きのメモリアドレスを取得する。
【００９５】
その後、インスタンス登録・削除部１３６は、削除対象の機能インスタンス１２の終了手続きを呼び出す。機能インスタンス１２の終了手続きは、機能の終了に必要な処理（終了処理）を行った後、インスタンス登録・削除部１３６へ、削除要求の通知を出力する。インスタンス登録・削除部１３６は、機能インスタンス１２から削除要求の通知を受け取ると、メモリに展開された機能インスタンス１２を削除した後、インスタンス情報管理部１３２へ、削除対象の機能インスタンス１２の情報の削除を要求する。インスタンス情報管理部１３２は、削除要求を取得すると、保持している機能インスタンス情報テーブルにおいて、削除対象の機能インスタンス１２のインスタンスＩＤが対応付けられた行を削除する。
機能の追加・削除だけでなく、既存機能を新機能で置き換えることも可能である。例えば、通信装置１ｂの管理者等が既存の機能インスタンスを新たな機能インスタンスと置き換える場合、外部連携部１３５に対して、新機能の機能ファイルである新機能ファイルと置き換え対象の既存機能のインスタンスＩＤを設定する。外部連携部１３５はインスタンス登録・削除部１３６に機能置き換え要求の通知を出力する。インスタンス登録・削除部１３６は上述した機能追加処理を行う。この際、インスタンス情報管理部１３２が機能インスタンス情報テーブル内の既存機能インスタンス情報のメモリアドレス値を、新機能インスタンス情報のメモリアドレス値で上書きする点が機能追加時とは異なる。また、実行順序ルールテーブルの更新処理は行わない。機能インスタンス情報テーブルの更新処理が終わったのち、インスタンス登録・削除部１３６が既存機能インスタンスの終了手続きを呼び出し、メモリに展開された機能インスタンスの削除が行われる。
【００９６】
以上、説明したように、本発明の第２の実施形態に係る通信装置１ｂは、変更対象の機能インスタンス１２、インスタンス情報管理部１３２、及び実行順序情報管理部１３１に対して変更を加えるのみであり、他の既存機能に対しては変更を加えない。これにより、本発明の第２の実施形態に係る通信装置１ｂは、既存機能の動作に大きな影響を与えることなく、また既存機能の動作を停止することなく、新たなＮＷ機能の追加・削除を行うことができる。
【００９７】
＜第３の実施形態＞
以下、本発明の第３の実施形態に係る通信装置１ｃについて説明する。本実施形態に係る通信装置１ｃは、上述した第１の実施形態に係る通信装置１ａに対して、ＮＷ機能間での連携を可能にする構成を追加したものである。
以下に、本実施形態に係る通信装置１ｃの動作について、図面を参照しながら説明する。図１４は、本発明の第３の実施形態に係る通信装置１ｃの機能間連携の動作の一例を示す図である。
【００９８】
図１４に図示するように、第３の実施形態に係る通信装置１ｃは、上述した第１の実施形態に係る通信装置１ａに対して、機能ファイル保持部１１内のブリッジ機能ファイルと、通知受付手続きを有するブリッジ機能インスタンス１２ｆと、処理順序制御部１３内の連携情報保持部１３８および通知手続きと、がさらに備えられている点が異なる。なお、図１４では、実行順序情報管理部１３１、インスタンス情報管理部１３２、機能実行部１３３、パケット保持部１３４、受信機能ファイル、ＶＬＡＮ−ＩＤ変換機能ファイル、送信機能ファイル、受信機能インスタンス１２ａ、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂ、送信機能インスタンス１２ｄの図示を省略している。
【００９９】
図１４に図示するように、本実施形態に係る通信装置１ｃでは、各機能インスタンス１２は、処理順序制御部１３における通知手続きを介して、他の機能インスタンス１２の通知受付手続きを実行する。すなわち、各機能インスタンス１２の通知受付手続きは、他の機能インスタンス１２に属する手続きからの情報取得要求、及び機能実行の要求に応じて処理を行う。これにより、本実施形態に係る通信装置１ｃは、ある機能が他の機能の変数値の取得や設定等を行う機能間連携を実現することができる。
【０１００】
なお、通知手続きのメモリアドレスは、処理順序制御部１３の機能実行部１３３が、機能インスタンス１２の開始手続きを実行する際に、引数として機能インスタンス１２へ伝達される。なお、第２の実施形態で述べたように、全ての機能インスタンスは、開始手続きと終了手続きを有する。また、通知受付手続きのメモリアドレスは、機能インスタンス１２の開始手続き終了時に、返り値となるインスタンス情報の中に含まれることによって処理順序制御部１３へ伝達されるものとする。
【０１０１】
以下、図１４を参照しながら、フィルタ機能インスタンス１２ｃが、ブリッジ機能インスタンス１２ｆから、パケットの受信数を示す受信数情報を取得する場合について説明する。まず、フィルタ機能インスタンス１２ｃのフィルタ手続きの実行中に、処理順序制御部１３の通知手続きが呼び出される。この際、呼び出し元のフィルタ機能インスタンス１２ｃは、呼び出し先の処理順序制御部１３の通知手続きへ、連携種別識別子（以下、「連携種別ＩＤ」という）を引数として伝達する。呼び出された通知手続きは、処理順序制御部１３の連携情報保持部１３８が保持する連携種別テーブルを取得する。
【０１０２】
図１５は、本発明の第３の実施形態に係る通信装置１ｃの連携情報保持部１３８が保持する連携種別テーブルの一例を示す図である。図示するように、連携種別テーブルは、連携種別を示す「連携種別ＩＤ」と、「連携内容」と、呼び出し対象の機能インスタンス１２へ伝達する引数を示す「引数情報」と、呼び出し対象の機能インスタンス１２を識別するインスタンスＩＤを示す「呼び出しインスタンスＩＤ」と、呼び出し対象の機能インスタンス１２の手続きを識別する手続きＩＤを示す「呼び出し手続きＩＤ」と、が対応付けられたテーブルである。
【０１０３】
なお、「連携種別ＩＤ」は、図１５に示すような連番の数字のような形式に限られるものではなく、連携内容を一意に識別できる形式であれば任意の形式で構わない。
また、連携種別テーブルに定義された、「連携種別ＩＤ」、「連携内容」、及び「引数情報」の項目の値は事前に公開されているものであり、各機能インスタンス１２を開発する開発者は、公開された情報に基づいて、他の機能と連携する機能インスタンス１２を開発することができるものとする。
【０１０４】
通知手続きは、引数として伝達された「連携種別ＩＤ」を検索キーとして連携種別テーブルを検索し、呼び出し対象である機能インスタンス１２及び当該機能インスタンス１２の手続きにそれぞれ対応する、「呼び出しインスタンスＩＤ」及び「呼び出し手続きＩＤ」を取得する。
【０１０５】
例えば、フィルタ機能インスタンス１２ｃは、「連携種別ＩＤ」の値である「１」を処理順序制御部１３の通知手続きへ伝達する。そして、通知手続きは、呼び出し対象の機能インスタンス１２であるブリッジ機能インスタンス１２ｆに対応する「呼び出しインスタンスＩＤ」の値である「５」、及びブリッジ機能インスタンス１２ｆの通知受付手続きに対応する「呼び出し手続きＩＤ」の値である「１」を取得する。そして、処理順序制御部１３の通知手続きは、上記の「呼び出しインスタンスＩＤ」及び「呼び出し手続きＩＤ」の値に基づいて、ブリッジ機能インスタンス１２ｆの通知受付手続きを呼び出す。
【０１０６】
ブリッジ機能インスタンス１２ｆは、受信パケットをカウントし、カウントした結果（パケットの受信数）を示す受信数情報を保持しているものとする。ブリッジ機能インスタンス１２ｆの通知受付手続きは、処理順序制御部１３の通知手続きから、自己の通知受付手続きが呼び出されると、上記の受信数情報を読み出して、当該受信数情報を返り値として通知手続きへ出力する。
【０１０７】
処理順序制御部１３の通知手続きは、受信数情報を取得すると、当該受信数情報を、呼び出し元であるフィルタ機能インスタンス１２ｃへ出力する。これらの処理により、フィルタ機能インスタンス１２ｃにおいて、ブリッジ機能インスタンス１２ｆの手続きを直接実行することなく、受信パケットの受信数情報を取得することができる。
なお、機能インスタンス１２に属する通知受付手続きの数は、一つに限らず、複数の通知受付手続きが存在していてもよい。
【０１０８】
以下、連携種別テーブルの生成について説明する。連携種別テーブルの生成は、例えば、第２の実施形態において説明した機能追加時に行うことができる。このように連携種別テーブルを機能追加時に生成する場合、第２の実施形態で説明した外部連携部１３５、インスタンス登録・削除部１３６、実行順序変更部１３７を処理順序制御部１３に設ければよい。通信装置の管理者等が、新機能ファイルを外部連携部１３５へ出力する際、機能ファイル及び「機能インスタンスＩＤ」とともに、通知受付手続きの「手続きＩＤ」、「連携種別ＩＤ」、「連携内容」、及び「引数情報」が伝達される。外部連携部１３５から機能追加の要求を受けたインスタンス登録・削除部１３６は、実行順序情報管理部１３１が保持する実行順序ルールテーブルの更新を行った後、機能追加した新機能インスタンス１２ｅの「機能インスタンスＩＤ」、及び外部連携部１３５から取得した「手続きＩＤ」、「連携種別ＩＤ」、「連携内容」、及び「引数情報」を、連携情報保持部１３８へ出力する。そして、連携情報保持部１３８は、取得した情報を連携種別テーブルへ書き込む。
【０１０９】
なお、処理順序制御部１３が通知受付手続きを有するような構成にした場合には、機能インスタンス１２から、処理順序制御部１３が有する、各機能の間で共通する情報を取得したり設定したりすることもできる。
【０１１０】
＜第３の実施形態の変形例＞
以下、本発明の第３の実施形態の変形例に係る通信装置１ｄについて説明する。第３の実施形態の変形例に係る通信装置１ｄは、上述した第３の実施形態に係る通信装置１ｃと同様に、上述した第１の実施形態に係る通信装置１ａに対して、ＮＷ機能間での連携を可能にする構成を追加したものである。
以下に、本変形例に係る通信装置１ｄの動作について、図面を参照しながら説明する。図１６は、本発明の第３の実施形態の変形例に係る通信装置１ｄの機能間連携の動作の一例を示す図である。
【０１１１】
図１６に図示するように、第３の実施形態の変形例に係る通信装置１ｄは、上述した第１の実施形態に係る通信装置１ａに対して、機能ファイル保持部１１内のブリッジ機能ファイルと、ブリッジ機能インスタンス１２ｆが追加されているほか、処理順序制御部１３に、公開変数情報保持部１３９と、公開変数更新手続きと、公開変数取得手続きと、がさらに備えられている点が異なる。なお、図１６では、実行順序情報管理部１３１、インスタンス情報管理部１３２、機能実行部１３３、パケット保持部１３４、受信機能ファイル、ＶＬＡＮ−ＩＤ変換機能ファイル、送信機能ファイル、受信機能インスタンス１２ａ、ＶＬＡＮ−ＩＤ変換機能インスタンス１２ｂ、及び送信機能インスタンス１２ｄの図示を省略している。
公開変数取得手続き、及び公開変数更新手続きのメモリアドレスは、処理順序制御部１３の機能実行部１３３が各機能インスタンス１２の開始手続きを実行する際に、引数として機能インスタンス１２へ伝達される。なお、第２の実施形態で述べたように、全ての機能インスタンスは、開始手続きと終了手続きを有する。
【０１１２】
以下、上述した第３の実施形態に係る通信装置１ｃと同様に、フィルタ機能インスタンス１２ｃが、ブリッジ機能インスタンス１２ｆから、パケットの受信数を示す受信数情報を取得する場合について例示する。
【０１１３】
公開変数情報保持部１３９は、公開変数テーブルを保持する。図１７は、本発明の第３の実施形態の変形例に係る通信装置１ｄの公開変数情報保持部１３９が保持する公開変数テーブルの一例を示す図である。
【０１１４】
図示するように、公開変数テーブルは、通信装置１ｄにおいて動作する機能インスタンス１２を識別する「インスタンスＩＤ」と、当該機能インスタンス１２に属する変数である「変数ＩＤ」と、当該変数の内容を説明する「変数説明」と、変数の値である「変数値」と、当該変数に対して許可されている処理を示す「可能な処理」と、が対応付けられたテーブルである。なお、「変数ＩＤ」は、図１７に示すような文字列でもよいし、数字等でもよい。
【０１１５】
なお、公開変数テーブルに定義された、「変数ＩＤ」、「変数説明」、及び「可能な処理」の項目の値は事前に公開されているものであり、各機能インスタンス１２を開発する開発者は、公開された情報に基づいて、他の機能と連携する機能インスタンス１２を開発することができるものとする。
【０１１６】
公開変数テーブルの生成は、例えば、上述した第２の実施形態において説明した機能追加時に行うことができる。このように公開変数テーブルを機能追加時に生成する場合、第２の実施形態で説明した外部連携部１３５、インスタンス登録・削除部１３６、実行順序変更部１３７を処理順序制御部１３に設ければよい。通信装置の管理者等が、新機能ファイルを外部連携部１３５へ出力する際、機能ファイル及び機能インスタンスＩＤとともに、機能インスタンス１２に属する変数のうち、他の機能インスタンス１２から参照のみ、もしくは参照及び更新の両方を行うことが可能な変数群（公開変数）の「変数ＩＤ」、「変数説明」、及び「可能な処理」が定義されたテーブルを出力する。外部連携部１３５は、公開変数情報保持部１３９へ、上述したテーブルを出力する。そして、公開変数情報保持部１３９は、取得したテーブルが示す情報を公開変数テーブルへ書き込む。
【０１１７】
各機能インスタンス１２は、他の機能インスタンス１２の情報の取得を必要とする場合には、処理順序制御部１３の公開変数取得手続きを呼び出し、取得対象の変数値を取得する。また、各機能インスタンス１２が、他の機能インスタンス１２へ情報を伝達する必要がある場合や、自己の機能インスタンス１２の変数、及び他の機能インスタンス１２の変数を更新する必要がある場合には、各機能インスタンス１２は、公開変数更新手続きを呼び出して情報を伝達したり、書き換え操作可能な変数値を変更したりする。
【０１１８】
図１７に示す例においては、ブリッジ機能インスタンス１２ｆは、パケットを受信するたびに、文字列「ＲＸ＿ＣＯＵＮＴ」を引数として公開変数更新手続きを呼び出し、公開変数テーブルの「ＲＸ＿ＣＯＵＮＴ」の値を更新する。ブリッジ機能インスタンス１２ｆは、ブリッジ機能の受信パケット数を取得する場合には、文字列「ＲＸ＿ＣＯＵＮＴ」を引数として公開変数取得手続きを呼び出し、公開変数テーブルの「ＲＸ＿ＣＯＵＮＴ」の値を取得する。
【０１１９】
以上説明したように、本発明の第３の実施形態の変形例に係る通信装置１ｄは、各機能インスタンス１２が、自己の機能インスタンス１２の公開変数を更新するたびに、処理順序制御部１３の公開変数更新手続きを呼び出す。これにより、本変形例に係る通信装置１ｄは、第３の実施形態に係る通信装置１ｃよりも通信装置の構成をシンプルにすることができる。
【０１２０】
＜第４の実施形態＞
以下、本発明の第４の実施形態について説明する。本実施形態に係る通信装置は、上述した第１の実施形態に係る通信装置１ａに対して、高速な実行順序ルール検索を実現する構成を追加したものである。
本実施形態では、実行順序情報管理部１３１が保持する実行順序ルールテーブルは、返り値と実行順序に従って、実行すべき手続きへのメモリアドレス情報をノードとした木構造となるように構築される。図１８は、本発明の第４の実施形態に係る通信装置１ａの実行順序情報管理部１３１が保持する実行順序ルールテーブルの一例を示す図である。
【０１２１】
機能実行部１３３は、処理（手続き）を実行すると、その返り値に応じて次ノードのメモリアドレスを取得し、当該次ノードに記述された手続きを実行する。これらの処理が繰り返されることによって、木構造における親ノードにあたる手続きの実行が完了すると、処理を実行すべき対象が子のノードへ移動する。
本発明の第４の実施形態に係る通信装置１ａによれば、次に実行すべき手続きのメモリアドレスをインスタンス情報管理部１３２から取得する必要がなくなるため、より高速に処理を実行することができる。ただし、機能の置き換え等で、ある機能インスタンスの手続きのメモリアドレスを変更する場合は、インスタンス情報管理部１３２の保持する機能インスタンス情報テーブルのみでなく、前記実行順序ルールテーブルにも変更を行う必要がある。
【０１２２】
＜第４の実施形態の変形例＞
以下、本発明の第４の実施形態の変形例について説明する。第４の実施形態の変形例に係る通信装置は、上述した第４の実施形態に係る通信装置と同様に、上述した第１の実施形態に係る通信装置１ａに対して、高速な実行順序ルール検索を実現する構成を追加したものである。
【０１２３】
上述した第１の実施形態に係る通信装置１ａは、実行順序情報管理部１３１から取得した実行順序ルールテーブルにおいて、機能インスタンス１２の手続きが終了するたびに、当該機能インスタンス１２の実行インスタンスＩＤ、実行手続きＩＤ、及び返り値を検索キーとして検索を行い、次に実行すべき機能インスタンス１２の次実行インスタンスＩＤ及び次実行手続きＩＤを取得する。
一方、図１９に示すように、検索キーである実行インスタンスＩＤ、手続きＩＤ、及び返り値ごとに、あらかじめ実行順序ルールテーブルを分離して、木構造となるように再構成しておくことによって、検索の高速化を図ることができる。
【０１２４】
図１９に示すように、実行インスタンスＩＤ、手続きＩＤを主キーとした実行順序ルールテーブルでは、バリューは、次検索キーの実行順序ルールテーブルの先頭ルールへの参照であり、返り値を主キーとした実行順序ルールテーブルでは、バリューは、次実行インスタンスＩＤ及び次実行手続きＩＤである。なお、返り値を主キーとした実行順序ルールテーブル中の「メモリアドレス」はなくともよい。この「メモリアドレス」については後述する。
【０１２５】
検索を行う際は、まず実行インスタンスＩＤを主キーとした実行順序ルールテーブル（例えば、図１９の（ａ））を検索し、取得したポインタを基に手続きＩＤの実行順序ルールテーブル（例えば、図１９の（ｂ−１）または（ｂ−２））を検索し、さらに取得したポインタを基に返り値の実行順序ルールテーブル（例えば、図１９の（ｃ−１）または（ｃ−２））を検索して、次に実行すべき機能インスタンス１２のインスタンスＩＤ及び手続きＩＤを取得する。
【０１２６】
実行順序ルールテーブルの木構造化により、単純な線形検索の計算量Ｏ（ｎ）と比べて、計算量をＯ（ｌｏｇ（ｎ））まで削減することができる。本発明の各実施形態では、パケットに対して処理を行うたびに検索を行うため、膨大な検索処理を行うこととなり、計算量の削減効果は非常に大きいと考えられる。
【０１２７】
上述した返り値の実行順序ルールテーブルに対して、さらに、次に実行すべき手続きのメモリアドレスを付与してもよい。これにより、インスタンス情報管理部１３２が保持する機能インスタンス情報テーブルを参照することなく、次に実行すべき手続きのメモリアドレスを取得することができる。
また、主キーの異なるそれぞれの実行順序ルールテーブルのルール順序は、図１９に示す実行順序ルールテーブルのルール順序に限られるものではなく、ルールにマッチする頻度に応じて変更されてもよい。これにより無駄な検索を避け、さらなる高速化が期待できる。
【０１２８】
＜第５の実施形態＞
以下、本発明の第５の実施形態について説明する。本実施形態に係る通信装置１ｅは、上述した第１の実施形態に係る通信装置１ａに対して、パイプライン処理によって転送の高速化を実現する構成を追加したものである。
第１の実施形態に係る通信装置１ａでは、一つのパケットに対する機能の実行を、単一の機能実行部１３３が行っていた。一方、機能の実行を複数の機能実行部で行うことで、パイプライン化が可能となり、スループットの向上が見込まれる。
【０１２９】
図２０は、本発明の第５の実施形態に係る通信装置１ｅがパイプライン化された場合の機能構成の概略を示す機能ブロック図である。図示するように、本実施形態に係る通信装置１ｅでは、機能実行部が２つ（機能実行部１３３、及び第二機能実行部１３３ｂ）備えられることによりパイプライン化がなされている。また、機能実行部の数だけでなく、パケット保持部も２つ（パケット保持部１３４、及び第二パケット保持部１３４ｂ）備えられている点も、上述した第１の実施形態に係る通信装置１ａとは異なる。また、機能実行部の数と同数の実行順序ルールテーブルが必要となることから、本実施形態に係る通信装置１ｅの実行順序情報管理部１３１は、複数の実行順序ルールテーブルを管理することが可能な構成であるものとする。
【０１３０】
上述した第１の実施形態に係る通信装置１ａと同様に、パケットのＶＬＡＮ−ＩＤの変換を行うＶＬＡＮ−ＩＤ変換機能、及び、特定のＩＰアドレスのパケットを破棄するフィルタ機能、の２つの機能の組み合わせを実現する場合を例として説明する。
【０１３１】
機能実行部１３３は、上述した第１の実施形態に係る通信装置１ａと同様に、パケットの受信とＶＬＡＮ−ＩＤ変換を行った後、実行順序情報管理部１３１が保持する、機能実行部１３３用の実行順序ルールテーブルを検索し、次に実行すべき機能インスタンスのインスタンスＩＤ、及び手続きＩＤを取得する。
【０１３２】
図２１Ａおよび図２１Ｂは、本発明の第５の実施形態に係る通信装置１ｅがパイプライン化された場合の実行順序情報管理部１３１が保持する実行順序ルールテーブルの一例を示す図である。図示するように、図２１Ａは、機能実行部１３３用の実行順序ルールテーブルであり、図２１Ｂは、第二機能実行部１３３ｂ用の実行順序ルールテーブルである。
【０１３３】
図示するように、次に実行すべき手続きが第二パケット保持部１３４ｂへの転送手続きであることを示す「次実行インスタンスＩＤ」、及び「次実行手続きＩＤ」の項目の値として、それぞれ「９９」（図２１Ａにおいては、「第二パケット保持部（９９）」と図示）が設定されている。なお、機能インスタンス情報テーブルにも、「インスタンスＩＤ」及び「手続きＩＤ」が「９９」である行が用意されており、当該行には、パケットをパケット保持部１３４から取得し、取得したパケットを第二パケット保持部１３４ｂへ転送する手続きを記述する。
【０１３４】
一方、第二機能実行部１３３ｂは、定期的に、第二パケット保持部１３４ｂにパケットが存在しないかどうかを確認するためのポーリングを行う。そして、第二機能実行部１３３ｂは、パケットの存在を確認し次第、実行順序情報管理部１３１が保持する第二機能実行部１３３ｂ用の実行順序ルールテーブルを検索し、「実行インスタンスＩＤ」、及び「手続きＩＤ」を取得する。
【０１３５】
第二機能実行部１３３ｂ用の実行順序ルールテーブルには、フィルタ機能インスタンス１２ｃのフィルタ手続き呼び出しが記述されているため、第二機能実行部１３３ｂは、フィルタ機能を呼び出す。フィルタ機能の処理後、上述した第１の実施形態に係る通信装置１ａと同様に、パケット送信部１５からパケットが送信される。
【０１３６】
本発明の第５の実施形態に係る通信装置１ｅは、フィルタ機能の実行と並行して、ＶＬＡＮ−ＩＤ変換の実行を行うことができるため、上述した第１の実施形態に係る通信装置１ａと比べて、およそ２倍程度の高いスループットを実現することができる。
【０１３７】
［通信装置の機能構成の変形例］
次に、図１を参照して説明した通信装置の変形例について説明する。図２２Ａは、本変形例に係る通信装置１ｆの機能構成を示す機能ブロック図である。図示するように、通信装置１ｆは、通信における処理の機能インスタンス１２と、処理順序制御部１３とを含んで構成される。処理順序制御部１３は、ＮＷ機能に関する処理等の実行順序を示す実行順序ルールを備えている。
【０１３８】
機能インスタンス１２は、ＮＷ機能毎の手続きを含む。機能インスタンス１２は、ＮＷ機能の処理ができるように、ＮＷ機能の処理において必要な手続き群及び変数群を記したソースコード、もしくはコンパイル後の実行ファイル等を、例えば、メモリやレジスタ等に展開したものである。ソースコードや実行ファイル等は、通信装置１ｆの内部に保持してもよいし、通信装置１ｆの外部にある他の装置に保持してもよい。他の装置がソースコードや実行ファイル等を保持する場合、処理順序制御部１３は、１つまたは複数の手続き毎、機能インスタンス毎、または、その他の単位毎に、ソースコードや実行ファイル等を他の装置から読み出す。この場合、処理順序制御部１３が他の装置とやりとりできるように、図２２Ｂに示すように、通信装置１ｆが、他の装置から各種の情報を受信する受信部２４および他の装置に対して各種の情報を送信する送信部２５をさらに備えるようにする。
【０１３９】
処理順序制御部１３は、定められた順序に従って機能インスタンス１２の手続きを呼び出し、パケットに対してＮＷ機能に関する処理を実行する。パケットは、例えば、通信装置１ｆの内部に設けたパケット保持部に保持する。この場合、例えば、図２２Ｃに示すように、図１と同様にパケット保持部１３４を処理順序制御部１３内に設ける。あるいは、通信装置１ｆの外部に設けたパケット保持部でパケットを保持してもよい。この場合、通信装置１ｆは、当該パケット保持部とやりとりできるように、受信部２４および送信部２５をさらに備えるようにする。また、通信装置１ｆの内部にパケットを保持する構成において、例えば、通信装置１ｆが複数の処理順序制御部を備えている場合、これらの処理順序制御部１３の外にパケット保持部１３４を設けてもよい。
【０１４０】
通信装置１ｆ内の処理順序制御部１３がパケットを保持する場合、通信装置１ｆは、他の装置からパケットの入力を受けて、当該パケットをパケット保持部１３４に移し、処理順序制御部１３が、パケット保持部１３４に保持されたパケットに対して指定された処理を行い、処理が終了した後に、パケットを廃棄するか、あるいは、他の装置にパケットを出力する。
【０１４１】
通信装置１ｆの外部でパケットを保持する場合、または、通信装置１ｆが複数の処理順序制御部を備える場合、複数の装置（例えば、通信装置１ｆと他の装置）または複数の処理順序制御部が、パケット保持部１３４を共有するようにしてもよい。なお、複数の装置がパケット保持部１３４を共有する場合、複数の装置のいずれかの内部にパケット保持部１３４を設けてもよいし、複数の装置の外部にパケット保持部１３４を設けてもよい。処理順序制御部１３は、他の装置または他の処理順序制御部からパケットの処理権限やパケットのアドレスの入力を受け、パケット保持部１３４に保持されているパケットに対して指定された処理を行う。当該処理が終了した後に、処理順序制御部１３は、パケットを廃棄するか、あるいは、他の装置または他の処理順序制御部に対して、パケットの処理権限を授与し、もしくは、パケットのアドレスを出力する。
【０１４２】
あるいは、前者と後者を組み合わせてもよい。前者は、単一のハードウェア上に単一の通信装置がある場合に適している。一方、後者は、単一のハードウェア上に複数の仮想的な装置がある場合や、単一の通信装置内に複数の処理順序制御部がある場合に適している。
【０１４３】
処理順序制御部１３は、実行順序ルールが示す実行順序に従い、次に実行すべき手続きを呼び出す。呼び出された手続きからの返り値がある場合、処理順序制御部１３は、現在実行している手続き（すなわち、呼び出された手続き）とその返り値に応じて次に実行すべき手続きを呼び出す。換言すると、処理順序制御部１３は、前回処理した機能インスタンスに属する手続きと、当該手続きの返り値とに応じて、これから実行すべき機能インスタンスに属する手続きを呼び出す。呼び出される手続きは、現在実行している手続きが属している機能インスタンスと同一の機能インスタンスに属している手続きであってもよいし、現在実行している手続きが属している機能インスタンスと異なる機能インスタンスに属している手続きであってもよい。
【０１４４】
手続きは、１つまたは複数の装置を通して一意であってもよいし、１つまたは複数の機能インスタンス毎に一意であってもよい。また、手続きの呼び出しに際しては、１つまたは複数の装置を通して一意なＩＤ等を用いて手続きを呼び出してもよいし、機能インスタンスと手続きの組み合わせを用いて一意に手続きを呼び出してもよいし、機能インスタンスを呼び出し、その後に、機能インスタンス内の手続きを呼び出してもよい。なお、異なる機能インスタンスの手続きが同一の手続きであってもよい。異なる機能インスタンスの手続きが同一の手続きであり、かつ、機能インスタンスと手続きの組み合わせで一意に手続きを呼び出すときには、異なる機能インスタンスと手続きの組み合わせが同一の手続きを呼び出すものとして扱ってもよいし、同一の処理を行う異なる手続きを呼び出すものとして扱ってもよい。
【０１４５】
実行順序ルールでは、例えば、現在実行している機能インスタンス１２の手続きを識別する「実行手続きＩＤ」と、実行処理の「返り値」と、返り値がある場合に当該返り値に応じて次に実行すべき機能インスタンス１２の手続きを識別する「次実行手続きＩＤ」とが対応付けられる。あるいは、実行順序ルールでは、「実行インスタンスＩＤ」と、「実行手続きＩＤ」と、「返り値」と、「次実行インスタンスＩＤ」と、「次実行手続きＩＤ」とが対応付けられていてもよい。あるいは、実行順序ルールでは、現在実行している機能インスタンスの手続きが展開されているメモリアドレスと、返り値と、次に実行すべき機能インスタンスの手続きが展開されているメモリアドレスとが対応づけられていてもよい。
【０１４６】
なお、次に実行すべき機能インスタンス１２の手続きは、返り値にかかわらず同一であってもよい。また、返り値が「Ｎｕｌｌ」である場合や返り値がない場合、次に実行すべき機能インスタンス１２の手続きは、次の順番の実行順序ルールによって識別される手続き等、現在実行している機能インスタンス１２の手続きに応じた手続き（換言すると、これから実行すべき機能インスタンス１２の手続きは、前回処理した機能インスタンスに属する手続きに応じた手続きや、予め定めた前回処理した機能インスタンスに属さない手続きに応じた手続きである）、または、最初の実行順序ルールによって識別される手続き等の所定の手続き、または、初期化処理や、パケットを破棄する処理や、一連の手続きを終了させる処理等の所定の処理を行う手続きであってもよい。
【０１４７】
また、返り値が「０」である場合には、パケットを破棄するか、当該パケットを保持しているパケット保持部がパケットを保持したまま通信装置１ｆ内の他の処理順序制御部や他の装置に処理権限やパケットのアドレスを授与してもよいし、他の装置へパケットを送出してもよい。
【０１４８】
また、最初の実行順序ルールは、最初に実行する機能インスタンスの手続き、または、最初に実行する機能インスタンスと手続きを指定する。最初に実行する機能インスタンスの手続きを「実行手続きＩＤ」の値と「返り値」で指定する場合は、それらの値として「０」がそれぞれ設定されてもよい。最初に実行する機能インスタンスと手続きを「実行インスタンスＩＤ」の値と「実行手続きＩＤ」の値と「返り値」で指定する場合は、それらの値として「０」がそれぞれ設定されてもよい。最初に実行する機能インスタンスの手続きをメモリ上において当該手続きが展開されている位置（アドレス）を示す「メモリアドレス」により指定する場合には、当該メモリアドレスが実行順序ルールに設定されていてもよい。
【０１４９】
次に、本変形例に係る通信装置１ｆの動作を説明する。図２３は、本変形例に係る処理順序制御部１３の動作を示すフローチャートである。
まず、処理順序制御部１３は、現在実行している機能インスタンス１２の手続きを識別する実行手続きＩＤを表す変数である変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ、及び、当該手続きの返り値を表す変数である変数ＣＵＲ＿ＲＥＴに、それぞれ「０」を代入することにより、これらの変数の初期化を行う（図２３、ステップＳ２０１）。ここで、実行手続きＩＤのみで一意に手続きが同定できず、現在実行している機能インスタンス１２を識別する実行インスタンスＩＤを表す変数である変数ＣＵＲ＿ＩＮＳＴ＿ＩＤの値と併せて手続きを同定する場合、処理順序制御部１３は、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤにも「０」を代入する。
【０１５０】
続いて、処理順序制御部１３は、実行順序ルールを読み込む（図２３、ステップＳ２０２）。次に、処理順序制御部１３は、最初の実行順序ルールから、「実行手続きＩＤ」の値及び「返り値」が、それぞれ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ及び変数ＣＵＲ＿ＲＥＴと一致する実行順序ルールを検索する（図２３、ステップＳ２０３）。ここで、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤの値と併せて手続きを同定する場合、処理順序制御部１３は、「実行インスタンスＩＤ」の値、「実行手続きＩＤ」の値及び「返り値」が、それぞれ、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ及び変数ＣＵＲ＿ＲＥＴと一致する実行順序ルールを検索する。
【０１５１】
例えば、最初の実行順序ルールにおける「実行手続きＩＤ」の値及び「返り値」はそれぞれ「０」であり、これらの値は、上記においてそれぞれ「０」を代入した変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ及び変数ＣＵＲ＿ＲＥＴに一致する。ここで、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤの値と併せて手続きを同定する場合、最初の実行順序ルールにおける「実行インスタンスＩＤ」の値、「実行手続きＩＤ」の値及び「返り値」は、それぞれ、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤ及び変数ＣＵＲ＿ＲＥＴに一致する。これにより、処理順序制御部１３は、一致した実行順序ルールにおける「次実行手続きＩＤ」の項目の値（例えば「１」）を変数ＮＸＴ＿ＭＥＴＤ＿ＩＤに代入する（図２３、ステップＳ２０４）。これにより、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤ＝１となる。ここで、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤの値と併せて手続きを同定する場合、処理順序制御部１３は、さらに、一致した実行順序ルールにおける「次実行インスタンスＩＤ」の項目の値（例えば「１」）を変数ＮＸＴ＿ＩＮＳＴ＿ＩＤに代入する。これにより、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ＝変数ＮＸＴ＿ＭＥＴＤ＿ＩＤ＝１となる。
【０１５２】
ここでは、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤ、または、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤおよび変数ＮＸＴ＿ＭＥＴＤ＿ＩＤを用いて、次に実行する手続きを表した。しかし、これらの変数を手続きが展開されている位置（アドレス）等に変換する処理は、処理順序制御部１３で行ってもよいし、ＮＷ機能を実行する他の装置または他の処理順序制御部で行ってもよい。あるいは、変数と手続きが展開されている位置（アドレス）等を対応づけたテーブルを通信装置１ｆ内または他の装置に設け、当該テーブルを用いて、間接的に、手続きが展開されている位置（アドレス）等を参照するようにしてもよい。あるいは、通信装置１ｆが他の装置に問い合わせを行い、他の装置は、変換を行い、変換により得られた位置（アドレス）を通信装置１ｆに送信し、通信装置１ｆが当該位置（アドレス）を受信するようにしてもよい。例えば、機能インスタンスを識別する情報と手続きを識別する情報の組み合わせで手続きを同定する場合、「機能インスタンスＩＤ」及び「機能インスタンス名」の少なくとも一つと、「手続きＩＤ」及び「手続き名」の少なくとも一つと、メモリ上において当該手続きが展開されている位置（アドレス）や当該手続きの参照先を示す「メモリアドレス」とが対応付けられたテーブル等を用いて、変換を行ってもよい。あるいは、手続きを識別する情報のみで手続きを一意に同定できる場合は、「手続きＩＤ」及び「手続き名」の少なくとも一つと、メモリ上において当該手続きが展開されている位置（アドレス）や当該手続きの参照先を示す「メモリアドレス」とが対応付けられたテーブル等を用いて、変換を行ってもよい。また、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤや変数ＮＸＴ＿ＭＥＴＤ＿ＩＤを用いる代わりに、メモリ上において手続きが展開されている位置（アドレス）を示す「メモリアドレス」や当該手続きの参照先を直接示す情報を用いてもよい。
【０１５３】
続いて、処理順序制御部１３は、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤと一致する「実行手続きＩＤ」により同定される手続き、または、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤと変数ＮＸＴ＿ＭＥＴＤ＿ＩＤの組み合わせと一致する「実行インスタンスＩＤ」と「実行手続きＩＤ」の組み合わせにより同定される手続きを呼び出して実行する（図２３、ステップＳ２０５）。正常な処理が行われた場合、機能インスタンス１２の手続きは、処理を終了し、返り値として正常終了を表す値（「０」より大きな値）を処理順序制御部１３へ出力する。ここで、正常終了を表す値は実行順序ルールに記載されている返り値であることが望ましい。なお、処理の対象となるパケットが存在しない場合、機能インスタンス１２の手続きは、返り値として「−１」を出力してもよい。
【０１５４】
次に、処理順序制御部１３は、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤに変数ＮＸＴ＿ＭＥＴＤ＿ＩＤの値を代入する（図２３、ステップＳ２０６）。ここで、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤの値と併せて手続きを同定する場合、処理順序制御部１３は、変数ＣＵＲ＿ＩＮＳＴ＿ＩＤ、変数ＣＵＲ＿ＭＥＴＤ＿ＩＤに、それぞれ、変数ＮＸＴ＿ＩＮＳＴ＿ＩＤ、変数ＮＸＴ＿ＭＥＴＤ＿ＩＤを代入する。
【０１５５】
処理順序制御部１３は、処理を実行した機能インスタンス１２の手続きから返り値を受け取ると、当該返り値を変数ＣＵＲ＿ＲＥＴに代入する（図２３、ステップＳ２０７）。返り値が「０」であった場合（図２３、ステップＳ２０８・ＹＥＳ）、処理順序制御部１３は、パケットを破棄し（図２３、ステップＳ２０９）、制御が初期化の段階（図２３、ステップＳ２０１）に戻る。これ以降の動作は、上述した動作と同様である。返り値が「０」以外であった場合（図２３、ステップＳ２０８・ＮＯ）、処理順序制御部１３は、再び実行順序ルールを読み込み（図２３、ステップＳ２０２）、次に実行する機能インスタンスの手続きを示す情報を検索する（図２３、ステップＳ２０３）。これ以降の動作は、上述した動作と同様である。
【０１５６】
以上説明したように、本発明の各実施形態は、特に単一の汎用ハードウェアにおいて動作する複数のＮＷ機能を組み合わせる場合における、遅延の低減を目的とする。本発明の各実施形態では、ＮＷ機能間でパケット転送をするのではなく、パケットのデータ自体は移動させずに、定められた順序に従って各ＮＷ機能を実行することによりＮＷ機能の組み合わせを実現する。これにより、本発明の各実施形態では、ＮＷ機能間でのパケット転送が発生しないため、装置内で発生する遅延を抑制することができる。また、本発明の各実施形態は、小規模な機能を多数組み合わせる場合における遅延の抑制に対してより有効である。
【０１５７】
上述した実施形態における通信装置１，１ａ〜１ｆの少なくとも一部をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳ（Operating System）や周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ（Read Only Memory）、ＣＤ（Compact Disc）−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、ＦＰＧＡ（Field Programmable Gate Array）等のプログラマブルロジックデバイスを用いて実現されるものであってもよい。
【０１５８】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこれらの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【産業上の利用可能性】
【０１５９】
本発明は、様々な通信サービスに利用可能である。本発明によれば、装置内で発生する遅延を抑制することができる。
【符号の説明】
【０１６０】
１・・・通信装置、１１・・・機能ファイル保持部、１２・・・機能インスタンス、１３・・・処理順序制御部、１４・・・パケット受信部、１５・・・パケット送信部、１３１・・・実行順序情報管理部、１３２・・・インスタンス情報管理部、１３３・・・機能実行部、１３４・・・パケット保持部、１３５・・・外部連携部、１３６・・・インスタンス登録・削除部、１３７・・・実行順序変更部、１３８・・・連携情報保持部、１３９・・・公開変数情報保持部
【図１】
0006706354.tif 000002
【図２】
0006706354.tif 000003
【図３】
0006706354.tif 000004
【図４】
0006706354.tif 000005
【図５】
0006706354.tif 000006
【図６】
0006706354.tif 000007
【図７】
0006706354.tif 000008
【図８】
0006706354.tif 000009
【図９】
0006706354.tif 000010
【図１０】
0006706354.tif 000011
【図１１】
0006706354.tif 000012
【図１２】
0006706354.tif 000013
【図１３】
0006706354.tif 000014
【図１４】
0006706354.tif 000015
【図１５】
0006706354.tif 000016
【図１６】
0006706354.tif 000017
【図１７】
0006706354.tif 000018
【図１８】
0006706354.tif 000019
【図１９】
0006706354.tif 000020
【図２０】
0006706354.tif 000021
【図２１Ａ】
0006706354.tif 000022
【図２１Ｂ】
0006706354.tif 000023
【図２２Ａ】
0006706354.tif 000024
【図２２Ｂ】
0006706354.tif 000025
【図２２Ｃ】
0006706354.tif 000026
【図２３】
0006706354.tif 000027
【図２４】
0006706354.tif 000028
【図２５】
0006706354.tif 000029