本実施例について図1〜図21を用いて説明する。
図1は、本実施例のサービスチェイニングシステムのシステム構成図である。
サービスチェイニングシステムは、ユーザ端末10のパケットを適切な順序でサービスファンクション200を経由させ、ユーザが加入するサービスをユーザに提供するシステムである。
ユーザ端末10は、アクセス網20を介して加入者収容ルータ(クラシファイア)100に接続される。クラシファイア100は、アクセス網20とコア網30とを接続して、ユーザ端末10のフローを転送するレイヤ3の転送装置である。具体的には、クラシファイア100は、コントローラ(制御装置)300が設定したフロー識別情報に基づいて、ユーザ端末10のフローを識別して、コントローラ300が設定したコア網30内の経路を識別するタグ(サービスタグ)をユーザ端末10のフローに付与して、コア網30に転送する。
また、クラシファイア100は、ユーザ端末10がネットワークに接続する場合に送信する接続要求のパケットをコントローラ300に転送する。なお、接続要求のパケットは、ユーザ端末10がネットワークに接続するためのユーザ認証をコントローラ300に要求するパケットである。コントローラ300は、クラシファイア100が転送した接続要求を受信した場合、当該接続要求を送信したユーザ端末10のユーザ認証を実行する。そして、コントローラ300は、ユーザ認証が成功した場合、接続要求を送信したユーザ端末10にIPアドレス又はプレフィックスを割り当て、当該IPアドレス又はプレフィックスをユーザ端末10に通知するIPアドレス通知パケットを送信する。クラシファイア100は、コントローラ300から送信されたIPアドレス通知パケットを中継する。
なお、クラシファイア100が接続要求を受信した場合、コントローラ300に転送せずに、クラシファイア100が、当該接続要求を送信したユーザ端末10のユーザ認証を実行し、当該ユーザ端末10にIPアドレス又はプレフィックスを割り当ててもよい。
コア網30は、図示しない少なくとも一つのルータ兼フォワーダ(フォワーダ)によって構築される。フォワーダは、少なくとも一つのサービスファンクション200に接続される。クラシファイア100が付与したサービスタグに基づいて、適切なサービスファンクション200にユーザ端末10のパケットを転送する。コア網30はインターネット40に接続される。
サービスファンクション200は、フォワーダ又はクラシファイア100に接続され、各種ネットワークアプライアンスで提供されるようなネットワークのサービスを提供する計算機である。サービスファンクション200が提供するサービスの例としては、TCP高速化、圧縮、映像オプティマイザ、Firewall、DPI(Deep Packet Inspection)、及びシェーパ等がある。サービスファンクション200は、専用のネットワークアプライアンス装置であってもよいし、汎用的なサーバであってもよい。サービスファンクション200が汎用的なサーバである場合、サービスファンクション200は、サービスを提供するアプリケーションを実行し、サービスを提供する。また、サービスファンクション200となる汎用的なサーバ上に少なくとも一つの仮想マシンが構築され、各仮想マシン上でアプリケ−ションが実行され、サービスが提供されてもよい。なお、図1では、サービスファンクション200A及び200Bの二つのサービスファンクション200を図示したが、サービスファンクション200の数はこれに限定されない。例えば、サービスファンクション200の数は、サービスの種類の数、及びサービスファンクション200の収容条件に応じて決定される。
コントローラ300は、汎用的な計算機であり、クラシファイア100、コア網30のフォワーダ、及びサービスファンクション200を制御する。コントローラ300は、ユーザ端末10のフローのコア網30内での経路を決定する。ここで、コア網30での経路とは、ユーザ端末10のフローが経由するサービスファンクション200と当該サービスファンクション200の経由順序とを含む。
具体的には、コントローラ300は、サービスファンクション200の利用可否を示す情報を取得し、取得したサービスファンクション200の利用可否を示す情報に基づいてユーザ端末10のフローの経路を決定する。なお、サービスファンクション200の利用可否を示す情報は、サービスファンクション200によるユーザ端末10の認証結果、ユーザ端末10がサービスファンクション200の利用量が閾値以上である場合に当該サービスファンクション200から送信される切断通知の受信の有無、及びサービスファンクション200に異常が発生した場合に送信される異常通知の受信の有無等である。
図2は、本実施例のクラシファイア100のハードウェア構成図である。
クラシファイア100は、制御カード110とラインカード120とを有する。制御カード110はクラシファイア100を制御し、ユーザ端末10のパケットのフローを識別して、当該パケットにサービスタグを付与する。
制御カード110は、転送に必要な情報を生成し、生成した情報をラインカード120に設定して、ラインカード120の動作を制御する。制御カード110はプロセッサ111とメモリ112とを有する。
プロセッサ111は、各種演算処理を実行する。制御カード110が有する図示しない二次記憶装置は非揮発性の非一時的な記憶媒体であり、各種プログラム及び各種データが記憶される。メモリ112は揮発性の一時的な記憶媒体であり、メモリ112には、二次記憶装置に記憶された各種プログラム(例えば、ラインカード120を制御する制御プログラム等)及び各種データがロードされ、プロセッサ111がメモリ112にロードされた各種プログラムを実行し、メモリ112にロードされた各種データを読み書きする。
ラインカード120は、転送エンジン123と、図示しないネットワークインタフェースとを有する。転送エンジン123は、転送テーブル121とサービス識別テーブル122とを有する。転送テーブル121には、受信したパケットの宛先アドレスと当該パケットの出力先となるネットワークインタフェースとの関係が登録される。サービス識別テーブル122には、受信したパケットのフローを識別するための条件と、当該フローのパケットに適用される経路の識別子と、当該フローのパケットの経由すべきサービスファンクションの残数を示すサービスインデックスと、出力先となるネットワークインタフェースの識別子との関係が登録される。なお、経路の識別子及びサービスインデックスがサービスタグとなる。サービス識別テーブル122の詳細は図8で説明する。
転送エンジン123は、他の装置と接続されるネットワークインタフェースが受信したパケットのヘッダから宛先アドレスを取得する。そして、転送エンジン123は、転送テーブル121において取得した宛先アドレスを検索し、当該宛先アドレスと関連付けられた出力先のネットワークインタフェースを決定する。そして、転送エンジン123は、決定した出力先のネットワークインタフェースからパケットを送信する。
また、転送エンジン123は、転送テーブル121の検索処理と並行して、ネットワークインタフェースが受信したパケットに含まれるフローを識別するための条件を検索キーとしてサービス識別テーブル122を検索する。当該条件が登録されたエントリがサービス識別テーブル122に登録されている場合、転送エンジン123は、当該パケットはサービスファンクション200を経由するパケットであると判断して、転送テーブル121の検索結果を利用せず、サービス識別テーブル122のフローを識別するための条件に関連付けられたサービスタグを当該パケットに付与してカプセル化し、サービス識別テーブル122のフローを識別するための条件に関連付けられた出力先となるネットワークインタフェースから送信する。なお、フローを識別するための条件は、例えば、パケットのヘッダの5タプルに登録された情報(宛先アドレス、送信元アドレス、宛先ポート番号、送信元ポート番号、及びプロトコル番号)である。
次に、コア網30を構築する図示しないフォワーダについて説明する。
フォワーダは、クラシファイア100と同じ装置構成であるが、フォワーダの転送エンジン123は、サービス識別テーブル122の代わりにサービス転送テーブルを有する。サービス転送テーブルには、パケットに付加されたサービスタグと出力先となるネットワークインタフェースとの関係が登録される。サービス転送テーブルの詳細は図9で説明する。
フォワーダがパケットを受信した場合、転送エンジン123は、転送テーブル121の検索処理と並行して、サービス転送テーブルを検索する。具体的には、転送エンジン123は、受信したパケットに付加されたサービスタグが登録されたエントリがサービス転送テーブルに登録されている場合、当該エントリの出力先となるネットワークインタフェースから受信したパケットを転送する。
一方、受信したパケットに付加されたサービスタグが登録されたエントリがサービス転送テーブルに登録されていない場合、転送エンジン123は、転送テーブル121の受信したパケットの宛先アドレスが登録されたエントリの出力先となるネットワークインタフェースから受信したパケットを転送する。
なお、フォワーダがパケットをサービスファンクション200に転送し、サービスファンクション200が当該パケットを受信した場合、サービスを提供するための処理を当該パケットに対して実行し、当該処理の実行後のパケットを送信元のフォワーダに送信する。フォワーダは、サービスファンクション200から送信されたパケットが、経由すべき全てのサービスファンクション200を経由していれば、サービスタグを当該パケットから除去する。そして、フォワーダは、サービスタグが除去されたパケットの宛先アドレスと一致する転送テーブル121のエントリの出力先となるネットワークインタフェースから当該パケットを送信する。
パケットが経由すべき全てのサービスファンクション200を経由しているか否かの判定には、サービスタグに含まれるサービスインデックスが参照される。サービスインデックスは、経由するサービスファンクション200の残数を示し、サービスファンクション200を経由するたびに値が1減算される。このため、フォワーダは、サービスファンクション200から受信したパケットのサービスタグの値が「0」であれば、当該パケットは経由すべき全てのサービスファンクション200を経由したと判定して、サービスタグを除去する。
なお、フォワーダとサービスファンクション200とは、図示しないサービスファンクションプロキシを介して接続されてもよい。サービスファンクションプロキシは、フォワーダとサービスファンクション200との間でパケットを中継し、サービスファンクション200がパケットに含まれるサービスタグを識別できない場合又はパケットを処理できない場合、サービスタグの除去又は付与、サービスインデックスの値の減算等をサービスファンクション200に代わりに実行する。
図3は、本実施例のコントローラ300のハードウェア構成図である。
コントローラ300は、汎用的な計算機であり、プロセッサ340とメモリ310と二次記憶装置320とを有する。
プロセッサ340は、各種演算処理を実行する。二次記憶装置320は非揮発性の非一時的な記憶媒体であり、経路設定部341に対応するプログラム、サービス状態管理情報311、サービス状態確認手順情報312、サービス経路リスト313、及びユーザデータベース321等の各種データが記憶される。メモリ310は揮発性の一時的な記憶媒体であり、メモリ310には、二次記憶装置320に記憶された経路設定部341に対応するプログラム、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313がロードされる。プロセッサ340は、メモリ310にロードされた経路設定部341に対応するプログラムを実行し、経路設定部341を実現し、メモリ310にロードされたサービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313を読み書きする。
図3では、二次記憶装置320にユーザデータベース321が記憶され、メモリ310にサービス状態管理情報311、サービス状態確認手順情報312、サービス経路リスト313がロードされ、プロセッサ340が経路設定部341に対応するプログラムを実行して、経路設定部341がプロセッサ340上に実現されている状態を示す。
まず、コントローラ300が記憶する各種データについて説明する。
ユーザデータベース321には、ユーザ端末10のユーザの識別子とユーザが加入するサービスの識別子との関係が登録される。ユーザデータベース321の詳細は図4で説明する。
サービス状態管理情報311には、ユーザ端末10のユーザごとに、サービスの加入の有無、及びサービスを提供するサービスファンクション200の利用可否を示す情報が登録される。サービス状態管理情報311の詳細は図5で説明する。
サービス状態確認手順情報312には、ユーザ端末10が経由するサービスファンクション200の利用可否の状態の取得順序が登録される。サービス状態確認手順情報312の詳細は図6で説明する。
サービス経路リスト313には、ユーザ端末10のユーザ、及びユーザが加入するサービスを提供するサービスファンクション200の利用可否の組み合わせに応じた経路が登録される。サービス経路リスト313の詳細は図7で説明する。
次に、コントローラ300の動作の概略について説明する。
コントローラ300は、所定のタイミングで、サービス状態確認手順情報312を参照して、サービスファンクション200の利用可否を示す情報を取得する。そして、コントローラ300は、取得したサービスファンクション200の利用可否を示す情報に基づいて、サービス状態管理情報311を更新する。そして、コントローラ300は、更新後のサービス状態管理情報311を参照して、ユーザ端末10のユーザが加入するサービスを提供するサービスファンクション200の利用可否に応じた経路を決定する。そして、コントローラ300は、決定した経路をフォワーダ及びクラシファイア100に通知し、ユーザ端末10のパケットの経路をコア網30に設定する。
これによって、コントローラ300がサービスファンクション200の利用可否を取得し、取得したサービスファンクション200の利用可否に応じた経路をコア網30に設定するので、サービスファンクション200を管理する事業者とコア網30を管理する事業者とが異なる場合であっても、サービスファンクション200の利用可否に応じて経路を設定することができる。したがって、利用できないサービスファンクション200があっても、ユーザ端末10のパケットが停止したり、他のサービスファンクション200のリソースを不適切に消費することを防止できる。
図4は、本実施例のユーザデータベース321の説明図である。
ユーザデータベース321は、一般にBSS(Business Support System)の形態で保持される。なお、図3では、ユーザデータベース321は、コントローラ300に記憶される例について説明したが、コントローラ300の外部の装置に記憶されてもよい。
ユーザデータベース321は、ユーザが加入するサービスを管理するためのものであり、ユーザにどのサービスファンクション200を適用するかを決定するために使用される。
ユーザデータベース321は、ユーザID401と加入サービス情報402とを含む。ユーザID401には、ユーザの識別子が登録される。加入サービス情報402には、ユーザが加入するサービスの識別子が登録される。
図5は、本実施例のサービス状態管理情報311の説明図である。
サービス状態管理情報311は、ユーザID501、並びにコントローラ300が制御するサービスごとに加入/未加入502及び利用可否503を含む。
ユーザID501には、ユーザの識別子が登録される。加入/未加入502には、ユーザが各サービスに加入しているか否かを示す情報が登録される。加入/未加入502には、コントローラ300がユーザデータベース321を参照して、ユーザが加入するサービスには「加入」が登録され、ユーザが未加入であるサービスには「未加入」が登録される。利用可否503には、各サービスを提供するサービスファンクション200の利用可否を示す情報が登録される。利用可否503に登録される情報は、コントローラ300がサービスファンクション200から利用可否を示す情報を取得した場合に更新される。
図6は、本実施例のサービス状態確認手順情報312の説明図である。
サービス状態確認手順情報312は、サービス状態確認契機情報1000と順序リスト1001(1001−1及び1001−2)とを含む。
サービス状態確認契機情報1000は、ユーザID601と適用サービス一覧602と状態確認契機603と順序リストポインタ604とを含む。
ユーザID601にはユーザの識別子が登録される。適用サービス一覧602には、ユーザが加入するサービスの識別子が登録される。状態確認契機603には、適用サービス一覧602に登録された識別子によって識別されるサービスを提供するサービスファンクション200に、他のサービスファンクション200が利用可能である場合にのみ利用可否を示す情報を取得する従属サービスファンクションが含まれるか否かを示す情報が登録される。状態確認契機603には、従属サービスファンクションが含まれない場合、「並列」が登録され、従属サービスファンクションが含まれる場合、「逐次」が登録される。順序リストポインタ604には、順序リスト1001の先頭エントリのポインタが登録される。
順序リスト1001では、少なくとも一つのエントリがリスト形式で接続される。順序リスト1001のエントリには、利用可否を示す情報を取得するサービスファンクション200が提供するサービスの識別子と、当該サービスファンクション200の利用可否を示す情報に応じた次の動作とが登録される。具体的には、エントリには、次のサービスを提供するサービスファンクション200の利用可否を示す情報を取得する場合には、当該次のサービスを提供するサービスファンクション200の次の動作が登録されたエントリのポインタが登録される。また、エントリには、次のサービスファンクション200の利用可否を示す情報を取得しない場合には、その旨を示す情報(「なし」)が登録される。
コントローラ300は、サービスファンクション200の利用可否を示す情報の取得が必要なユーザの識別子と当該ユーザが加入するサービスの識別子とを検索キーとして用いて、サービス状態確認契機情報1000を検索する。検索キーと一致するサービス状態確認契機情報1000のエントリがあれば、コントローラ300は、当該エントリの状態確認契機603及び順序リストポインタ604に従って、サービスファンクション200の利用可否を示す情報を取得する。
図6に示す例では、ユーザの識別子「ユーザ1」と当該ユーザが加入するサービスの識別子「サービスA」及び「サービスD」とを検索キーとした場合、サービス状態確認契機情報1000の1行目のエントリが検索される。サービス状態確認契機情報1000の1行目のエントリの状態確認契機603には「並列」が登録されているので、「ユーザ1」が加入するサービスAを提供するサービスファンクション200及びサービスDを提供するサービスファンクション200は従属サービスファンクションを含まない。このため、コントローラ300は、サービスAを提供するサービスファンクション200の利用可否を示す情報の取得と、サービスDを提供するサービスファンクション200の利用可否を示す情報の取得とを並列して実行する。
また、ユーザの識別子「ユーザ2」と当該ユーザが加入するサービスの識別子「サービスA」及び「サービスB」とを検索キーとした場合、サービス状態確認契機情報1000の2行目のエントリが検索される。サービス状態確認契機情報1000の2行目のエントリの状態確認契機603には「逐次」が登録されているので、「ユーザ2」が加入するサービスAを提供するサービスファンクション及びサービスBを提供するサービスファンクション200は従属サービスファンクションを含む。コントローラ300は、サービス状態確認契機情報1000の2行目のエントリの順序リストポインタ604に登録されたポインタが示す順序リスト1001−1のエントリ1011−1を参照して、サービスAを提供するサービスファンクション200の利用可否を示す情報を取得する。サービスAを提供するサービスファンクション200の利用可否を示す情報が利用できないことを示す場合、エントリ1011−1の異常時の次エントリには「なし」が登録されているため、コントローラ300は、サービスBを提供するサービスファンクション200の利用可否を示す情報を取得せず、サービスファンクション200の利用可否を示す情報の取得を終了する。
サービスAを提供するサービスファンクション200の利用可否を示す情報が利用できることを示す場合、コントローラ300は、エントリ1011−1の正常時の次エントリに登録されたポインタが示すエントリ1011−2を参照し、サービスBを提供するサービスファンクション200の利用可否を示す情報を取得する。エントリ1011−2の正常時の次エントリ及び異常時の次エントリには「なし」が登録されているので、せービスBを提供するサービスファンクション200の利用可否を示す情報が利用できることを示す場合であっても、利用できないことを示す場合であっても、コントローラ300は、サービスファンクション200の利用可否を示す情報の取得を終了する。
順序リスト1001−1には、サービスBを提供するサービスファンクション200がサービスAを提供するサービスファンクション200の従属サービスファンクションであることが登録されている。このため、サービスAを提供するサービスファンクション200の利用可否を示す情報が利用できないことを示す場合、サービスBは提供され得ないので、サービスBを提供するサービスファンクション200の利用可否を示す情報を取得しない。このように、提供され得ないサービスを提供するサービスファンクション200の利用可否を示す情報を取得しないので、コントローラ300及び当該サービスファンクション200の処理負荷を軽減できる。
図7は、本実施例のサービス経路リスト313の説明図である。
サービス経路リスト313には、各ユーザが加入するサービスを提供するサービスファンクション200の利用可否の組み合わせに応じた経路がユーザごとに登録される。サービス経路リスト313は、ユーザID701、及び少なくとも一つのエントリを含む。サービス経路リスト313に含まれるエントリは、条件702及びサービス経路情報703を含む。
条件702には、同じエントリのサービス経路情報703に登録された経路情報を適用するための条件が登録される。具体的には、条件702には、利用不可であるサービスファンクション200の組み合わせが登録される。サービス経路情報703には、適用する経路情報が登録される。なお、経路情報は、利用不可であるサービスファンクション200を経由しない経路を含むものとする。経路情報は、例えば、サービスファンクションの経由順序と、クラシファイア100又はフォワーダに設定されるサービスタグ及び次ホップの情報とを含む。
例えば、ユーザIDが「1」であるユーザがサービスA及びサービスBに加入する場合、当該ユーザIDのレコードは、エントリ1〜4を含む。エントリ1には、サービスAを提供するサービスファンクション200及びサービスBを提供するサービスファンクション200が利用可能である場合に適用する経路が登録され、エントリ2には、サービスAを提供するサービスファンクション200が利用不可である場合に適用する経路が登録され、エントリ3には、サービスBを提供するサービスファンクション200が利用不可である場合に適用する経路が登録され、エントリ4の条件702には、サービスAを提供するサービスファンクション200及びサービスBを提供するサービスファンクション200がともに利用不可である場合に適用する経路情報が登録される。
なお、サービス経路リスト313は、ユーザIDとサービスファンクション200の利用可否を示す情報との組み合わせを検索キーとして検索される。
サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313は、運用コマンドが入力された場合に表示され、管理者が確認できるようにしてもよい。また、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313は、管理者によってコンフィグ入力可能な情報であり、CLI(Command Line Interface)又はGUI(Graphical User Interface)等の設定画面を介して設定可能である。
図8は、本実施例のクラシファイア100が保持するサービス識別テーブル122の説明図である。
サービス識別テーブル122は、フロー条件801、サービス経路ID802、サービスインデックス803、及び次ホップ804を含む。
フロー条件801には、受信したパケットのフローを識別するための条件が登録される。例えば、フロー条件801には、パケットのヘッダの5タプルに登録される情報が条件として登録される。サービス経路ID802には、フロー条件801に登録された条件によって識別されたフローのパケットに適用される経路の識別子が登録される。サービスインデックス803には、クラシファイア100にフロー条件801に登録された条件によって識別されたフローのパケットに付与するサービスタグに含まれるサービスインデックスが登録される。次ホップ804には、フロー条件801に登録された条件によって識別されたフローのパケットの出力先となるネットワークインタフェースの識別子が登録される。
クラシファイア100は、パケットを受信した場合、サービス識別テーブル122のフロー条件801に、受信したパケットの5タプルに登録される情報が登録されたエントリを取得する。そして、クラシファイア100は、取得したエントリに含まれるサービス経路ID802に登録された経路の識別子とサービスインデックス803に登録されたサービスインデックスとを含むサービスタグを受信したパケットに付与することによって、受信したパケットをカプセル化する。そして、クラシファイア100は、取得したエントリの次ホップ804に登録された識別子によって識別されるネットワークインタフェースから、受信したパケットを出力する。
図9は、本実施例のフォワーダが保持するサービス転送テーブルの説明図である。
サービス転送テーブルは、サービス経路ID901、サービスインデックス902、及び次ホップ903を含む。
サービス経路ID901には、パケットのサービスタグに含まれる経路の識別子が登録される。サービスインデックス902には、パケットのサービスタグに含まれるサービスインデックスが登録される。次ホップ903には、パケットの出力先となるネットワークインタフェースの識別子が登録される。
フォワーダは、パケットを受信した場合、サービス転送テーブルのサービス経路ID901に、受信したパケットのサービスタグに含まれる経路の識別子が登録され、サービスインデックス902に、受信したパケットのサービスタグに含まれるサービスタグが登録されたエントリを取得する。そして、フォワーダは、取得したエントリの次ホップ903に登録された識別子によって識別されるネットワークインタフェースから、受信したパケットを出力する。なお、フォワーダは、パケットを受信してネットワークインタフェースに出力する前に、受信したパケットのサービスインデックスから1を減算する。
また、受信したパケットのサービスタグと一致するエントリがサービス転送テーブルに存在しない場合、フォワーダは、転送テーブル121を参照し、受信したパケットの宛先IPアドレスに対応する出力先のネットワークインタフェースの識別子を取得し、取得した識別子によって識別されるネットワークインタフェースから、受信したパケットを出力する。
次に、コントローラ300の動作について図10を用いて説明する。図10は、本実施例のコントローラ300が実行する経路設定処理のフローチャートである。
コントローラ300の経路設定部341は、ユーザがサービスに新規に加入した場合、ユーザが加入するサービスを変更した場合、前回経路設定処理を実行してから所定時間経過した場合、及びユーザ端末10からネットワークへの接続要求を受信した場合、経路設定処理を実行する。
まず、経路設定部341は、サービス状態確認手順情報312を参照して、ユーザ端末10がサービスファンクション200の利用可否を示す情報を取得する利用可否取得処理を実行する(1001)。例えば、コントローラ300がユーザ端末10から接続要求を受信した場合、当該ユーザ端末10のユーザが加入するサービスを提供するサービスファンクション200に接続要求を転送し、サービスファンクション200に認証を実行させ、認証結果を、サービスファンクション200の利用可否を示す情報として取得する。また、コントローラ300は、あるユーザ端末10の利用量が閾値以上となったサービスファンクション200から送信される切断通知を利用可否を示す情報として取得する。ステップ1001の利用可否取得処理の詳細については、図11を用いて説明する。
次に、経路設定部341は、ステップ1001の処理で取得したユーザ端末10のサービスファンクション200の利用可否を示す情報と、サービス状態管理情報311の当該ユーザ端末10のユーザに対応するエントリとを比較して、今回のステップ1001の処理で取得した利用可否を示す情報が前回のステップ1001の処理で取得した利用可否を示す情報と異なるか否かを判定する(1002)。
ステップ1002の処理で、今回のステップ1001の処理で取得した利用可否を示す情報が前回のステップ1001の処理で取得した利用可否を示す情報と同じであると判定された場合(1002:No)、経路設定部341は、ユーザ端末10に適用する経路を新たに適用せず、経路設定処理を終了する。
一方、ステップ1002の処理で、今回のステップ1001の処理で取得した利用可否を示す情報が前回のステップ1001の処理で取得した利用可否を示す情報と異なると判定された場合(1002:No)、経路設定部341は、今回のステップ1001の処理で取得した利用可否を示す情報に基づいて、サービス状態管理情報311を更新する(1003)。
具体的には、経路設定部341は、サービス状態管理情報311のユーザID501に、今回のステップ1001の処理でサービスファンクション200の利用可否を示す情報を取得したユーザ端末10のユーザの識別子が登録されたエントリを選択する。そして、経路設定部341は、選択したエントリに含まれるサービスから、今回のステップ1001の処理で取得した利用可否を示す情報が前回のステップ1001の処理で取得した利用可否を示す情報と異なるサービスを選択する。そして、経路設定部341は、選択したサービスの利用可否503に、今回のステップ1001の処理で取得した利用可否を示す情報を登録する。
次に、経路設定部341は、サービス経路リスト313を参照して、ステップ1003の処理でサービス状態管理情報311が更新されたエントリに対応するユーザのユーザ端末10に適用される経路を決定し、決定した経路をフォワーダ及びクラシファイア100に通知して、決定した経路をコア網30に設定して(1004)、経路適用処理を終了する。
具体的には、経路設定部341は、ステップ1003の処理でサービス状態管理情報311が更新されたエントリのユーザID501に登録されたユーザの識別子、及び当該エントリの全てのサービスの利用可否503に登録された利用可否を示す情報を取得する。そして、経路設定部341は、サービス経路リスト313のユーザID701に取得したユーザの識別子が登録されたエントリから、条件702に登録された条件が取得した利用可否を示す情報の組み合わせと一致するエントリを選択する。そして、経路設定部341は、選択したエントリのサービス経路情報703に登録された経路情報によって特定される経路を、ステップ1003の処理でサービス状態管理情報311が更新されたエントリに対応するユーザのユーザ端末10に適用される経路として決定する。
以上によって、コントローラ300は、サービスファンクション200の利用可否を示す情報に基づいてユーザ端末10に適用する経路をコア網30に設定することができる。
図11は、本実施例の利用可否取得処理のフローチャートである。
まず、経路設定部341は、サービス状態確認手順情報312のサービス状態確認契機情報1000を参照する(1101)。
次に、経路設定部341は、サービス状態確認契機情報1000のユーザID601に処理対象のユーザの識別子が登録され、かつ、適用サービス一覧602に当該ユーザが加入するサービスの識別子が登録されたエントリ(処理対象のエントリ)の状態確認契機603に並列が登録されているか否かを判定する(1102)。
ステップ1102の処理で、サービス状態確認契機情報1000の処理対象のエントリの状態確認契機603に並列が登録されていると判定された場合(1102:Yes)、経路設定部341は、処理対象のユーザが加入する全てのサービスを提供する各サービスファンクション200の利用可否を示す情報を並列して取得し(1103)、利用可否取得処理を終了する。
一方、ステップ1102の処理で、サービス状態確認契機情報1000の処理対象のエントリの状態確認契機603に並列が登録されていないと判定された場合(1102:No)、すなわち、当該状態確認契機603に逐次が登録されている場合、経路設定部341は、サービス状態確認契機情報1000の処理対象のエントリの順序リストポインタ604に登録されたポインタが示す順序リスト1001の先頭エントリ1011を参照する(1104)。
次に、経路設定部341は、当該順序リスト1001の末尾のエントリ1011までステップ1105〜1108の処理を繰り返し実行する。
まず、経路設定部341は、参照したエントリ1011が示す利用可否を示す情報を取得するサービスを提供するサービスファンクション200の利用可否を示す情報を取得する(1105)。
次に、経路設定部341は、ステップ1105の処理で取得したサービスファンクション200が利用可能であるか否かを判定する(1106)。
ステップ1106の処理でサービスファンクション200が利用可能であると判定された場合(1106:Yes)、経路設定部341は、正常時の次エントリのポインタが示す次のエントリ1011を参照し(1107)、ステップ1105の処理に戻る。一方、ステップ1106の処理でサービスファンクション200が利用可能でないと判定された場合(1106:No)、経路設定部341は、異常時の次エントリのポインタが示す次のエントリ1011を参照し(1108)、ステップ1105の処理に戻る。
なお、ステップ1107又は1108の処理で、正常時の次エントリのポインタが「なし」である場合、又は異常時の次エントリのポインタが「なし」である場合、経路設定部341は、順序リスト1001の末尾のエントリ1011までステップ1105〜1108の処理が実行されたと判断し、利用可否取得処理を終了する。
ユーザ端末10がネットワークに接続する場合の当該ユーザ端末10の経路設定処理のシーケンスを図12を用いて説明する。図12は、本実施例のユーザ端末10がネットワークに接続する場合の経路設定処理のシーケンス図である。
ユーザ端末10のユーザは、サービスファンクション200Aが提供するサービスA、及びサービスファンクション200Dが提供するサービスDに予め契約しており、サービスファンクション200A及び200Dは、ユーザ端末10の認証に必要な情報(例えば、ユーザID、及びパスワード等)を保持しているものとする。
まず、ユーザ端末10は、ネットワーク(例えば、インターネット40)に接続する場合、認証要求をコントローラ300に送信する(1201)。認証要求は、例えば、ユーザID及びパスワードを含むものとする。
コントローラ300は、ユーザ端末10から認証要求を認証すると、ネットワークに接続するための認証処理を実行し、サービス状態確認手順情報312を参照して、受信した認証要求をサービスファンクション200A及び200Dに送信する(1202)。図6に示すように、サービスA及びDの状態確認契機603には、並列が登録されているので、ステップ1202の処理では、コントローラ300は、いずれかのサービスファンクション200の利用可否を示す情報の取得を待たずに、サービスファンクション200A及び200Dに認証要求を送信する。
なお、コントローラ300で実行される認証処理は、ユーザ端末10にIPアドレスを割り当てる等のネットワークに接続するための認証処理であり、ユーザ端末10のサービスファンクション200A及び200Dに対する認証処理を含まない。
サービスファンクション200A及び200Dは、コントローラ300から認証要求を受信した場合、ユーザ端末10の認証処理を実行し、認証結果を応答としてコントローラ300に送信する(1203A及び1203B)。
コントローラ300は、サービスファンクション200A及び200Dから認証結果を受信し、受信した認証結果に基づいてサービス状態管理情報311を更新する(1204)。ユーザ端末10がネットワークに接続する場合には、コントローラ300は、サービスファンクション200からの認証結果を利用可否を示す情報として取得する。
次に、コントローラ300は、ステップ1202処理の認証処理が成功した場合、認証要求を送信したユーザ端末10にIPアドレスを認証要求の応答として送信し、当該ユーザ端末10にIPアドレスを割り当てる(1205)。なお、ステップ1202の処理の認証処理が失敗した場合、コントローラ300は、その旨を認証要求の応答としてユーザ端末10に送信する。
また、コントローラ300は、ユーザ端末10の認証が成功したサービスファンクション200に、ステップ1205の処理でユーザ端末10に割り当てたIPアドレスをユーザ識別情報として通知する(1206)。ユーザ識別情報は、サービスファンクション200がユーザ端末10のパケットを識別して、サービスを提供するために用いられる。例えば、DPI(Deep Packet Inspection)を提供するサービスファンクションには、ユーザのIPアドレス及びポート番号等の5タプルの情報がユーザ識別情報として通知される。ユーザ識別情報は、サービスファンクション200の形態によって異なるので、これに限定されない。
次に、コントローラ300は、ユーザ端末10のユーザのユーザID、及びステップ1204の処理で取得したサービスファンクション200の利用可否を示す情報を検索キーとして、サービス経路リスト313を検索し、検索キーと一致するエントリのサービス経路情報703に登録された経路情報が示す経路を、当該ユーザ端末10に適用する経路として決定し、当該経路情報をフォワーダ及びクラシファイア100に設定する(1207)。
以上によって、サービスファンクション200の管理者とコア網30内で適用される経路の管理者とが異なり、コントローラ300とサービスファンクション200とで認証処理が実行される場合であっても、サービスファンクション200の認証結果を反映した経路を適用できる。例えば、ユーザ端末10が契約違反等の理由によってサービスファンクション200Aでの認証が失敗して、サービスファンクション200Aを利用できない場合、コントローラ300は、サービスファンクション200Aを経由せず、サービスファンクション200Dのみを経由する経路を適用する。
なお、図12では、ユーザ端末10のネットワークに接続するための認証処理、及びIPアドレスをユーザ端末10に割り当てる処理をコントローラ300が実行する例について説明したが、例えば外部の図示しない認証サーバが実行してもよいし、クラシファイア100が実行してもよい。この場合、認証サーバ又はクラシファイア100は、認証結果をコントローラ300に通知する必要がある。
また、コントローラ300は、ステップ1205の処理でIPアドレスをユーザ端末10に送信したが、例えばプレフィックスの情報をユーザ端末10に送信してもよい。
また、ステップ1002、1003A、及び1003Bの処理における認証処理では、RADIUS(Remote Authentication Dial In User Service)又はDIAMETERなどの認証機能を有する汎用的なプロトコルを用いてもよい。
また、ステップ1206の処理では、ユーザ端末10に割り当てたIPアドレスをサービスファンクション200に通知するが、例えば、サービスファンクション200がプレフィックスの情報を用いてパケットを識別し、ユーザ端末10に予めプレフィックスの情報が割り当てられている場合、コントローラ300は、ステップ1205の処理の前にプレフィックスの情報をサービスファンクション200に通知してもよい。
また、ステップ1205の処理で、コントローラ300は、IPアドレスをユーザ端末10に送信するが、ステップ1202の処理で認証処理が成功してすぐに、IPアドレスをユーザ端末10に送信してもよい。
図12に示す処理で適用される経路の例について図13及び図14を用いて説明する。図13は、本実施例のサービスファンクション200A及び200Dがともに利用できる場合に適用される経路の説明図である。
サービスファンクション200A及び200Dでユーザ端末10の認証が成功した場合、ユーザ端末10はサービスファンクション200A及び200Dを利用できる。このため、コントローラ300は、図13に示すように、サービスファンクション200A及び200Dを経由する経路を、ユーザ端末10と宛先装置90との間に適用する。
図14は、本実施例の一方のサービスファンクション200Aが利用できない場合に適用される経路の説明図である。
サービスファンクション200Dのみでユーザ端末10の認証が成功し、サービスファンクション200Aでユーザ端末10の認証が失敗した場合、ユーザ端末10はサービスファンクション200Aを利用できない。このため、コントローラ300は、図14に示すように、サービスファンクション200Aを経由せず、サービスファンクション200Dを経由する経路を、ユーザ端末10と宛先装置90との間に適用する。
また、サービスファンクション200Aで認証が失敗した場合、サービスファンクション200A及び200Dの両方を経由しない経路を適用する場合、サービス経路リスト313の条件702に、サービスファンクション200Aが提供するサービスAが利用できない旨の条件を登録し、サービス経路情報703に、サービスファンクション200A及び200Dを経由しない経路に関する情報を登録したエントリをサービス経路リスト313に登録すればよい。これによって、例えば、サービスファンクション200Aでパケットに付加したメタデータに対してサービスファンクション200Dが処理を実行する場合等のサービスファンクション200Dがサービスファンクション200Aに従属している場合において、サービスファンクション200Aが利用できず、メタデータを付加できないことが原因で、サービスファンクション200Dが処理を正常に実行できなくなり、パケットが不通となることを防止できる。
図15は、本実施例のサービスファンクション200の利用可否を示す情報を逐次的に取得する場合の経路設定処理のシーケンス図である。なお、図15では、図12に示す処理と同じ処理は、同じ符号を付与し、説明を省略する。
図6に示すように、サービスA、サービスB及びサービスCの状態確認契機603には、逐次が登録されている。さらに順序リスト1001−2を参照するに、サービスBを提供するサービスファンクション200Bの利用可否を示す情報は、サービスAを提供するサービスファンクション200Aが利用できる場合にのみ取得され、サービスCを提供するサービスファンクション200Cの利用可否を示す情報は、サービスファンクション200Aが利用できない場合であっても、サービスファンクション200Bが利用できない場合であっても取得される。すなわち、サービスファンクション200Bがサービスファンクション200Aの従属サービスファンクションである。
なお、ユーザ端末10のユーザの識別子は「3」であり、当該ユーザの加入するサービスはサービスA、サービスB、及びサービスCであるものとする。
ステップ1202Aの処理では、コントローラ300は、ユーザ端末10から接続要求を受信すると、ユーザ端末10がネットワークに接続するための認証処理を実行して、サービス状態確認手順情報312のサービス状態確認契機情報1000を参照する。サービス状態確認契機情報1000のユーザID601に「3」が登録され、適用サービス一覧602にサービスA、サービスB、及びサービスCが登録されたエントリの状態確認契機603に逐次が登録されているので、コントローラ300は、当該エントリの順序リストポインタ604に登録されたポインタが示す順序リスト1001−2の先頭エントリ1011−3を参照する。先頭エントリ1011−3には状態確認をするサービスとしてサービスAが登録されているので、コントローラ300は、サービスAを提供するサービスファンクション200Aに接続要求を送信する。
ステップ1203Aの処理では、サービスファンクション200Aは、接続要求を受信すると、認証処理を実行し、認証処理の結果をコントローラ300に送信する。ここでは、サービスファンクション200Aの認証処理の結果は、認証に失敗したことを示すものとする。
コントローラ300は、サービスファンクション200Aから認証が失敗したことを示す認証結果を受信すると、順序リスト1001−2のエントリ1011−3の異常時の次エントリにはエントリ1011−5を示すポインタが登録されているので、エントリ1011−5を参照する。エントリ1011−5にには、状態確認をするサービスとしてサービスCが登録されているので、ステップ1202Bの処理で、コントローラ300は、サービスCを提供するサービスファンクション200Cに接続要求を送信する。
ステップ1203Bの処理では、サービスファンクション200Cは、接続要求を受信すると、認証処理を実行し、認証処理の結果をコントローラ300に送信する。なお、サービスファンクション200Cの認証は成功したものとする。
コントローラ300は、サービスファンクション200Cから認証が成功したことを示す認証結果を受信すると、順序リスト1001−2のエントリ1011−5の正常時の次エントリには「なし」が登録されているので、コントローラ300は、順序リスト1001−2の末尾のエントリに到達したと判断して、ステップ1204の処理に進み、サービス状態管理情報311を更新する。
ステップ1205〜1207の処理は、図12と同じであるので、説明を省略する。
以上によって、サービスファンクション200Bが、サービスファンクション200Aによって処理が実行されたパケットに対して処理を実行するような場合、サービスファンクション200Aが利用できない場合、コントローラ300は、サービスファンクション200Bの利用可否を示す情報を取得しないので、コントローラ300及びサービスファンクション200Bの処理負荷を軽減できる。
図15に示す経路設定処理で設定される経路について図16を用いて説明する。図16は、本実施例の従属サービスファンクション200Bが従属するサービスファンクション200Aが利用できず、いずれのサービスファンクション200にも従属しないサービスファンクション200Cが利用できる場合に設定される経路の説明図である。
図15で説明したように、コントローラ300は、サービスファンクション200Aが利用できない場合、サービスファンクション200Bの利用可否を示す情報を取得しない。これは、サービスファンクション200Bの処理の実行には、サービスファンクション200Aで処理が実行済みであることが条件となるからであり、サービスファンクション200Aが利用できないのであれば、サービスファンクション200Bの利用可否を示す情報の取得は不要であるためである。
このため、コントローラ300は、サービスファンクション200Aが利用できない場合、ユーザが加入するサービスファンクション200Cのみを経由する経路をユーザ端末10と宛先装置90との間に適用する。
なお、サービス経路リスト313のユーザID「3」は、条件702にサービスファンクション200Aが提供するサービスが利用できない旨の条件が登録され、サービス経路情報703にはサービスファンクション200Cのみを経由する経路に関する情報が登録されるエントリを含む。
これによって、サービスファンクション200Aの処理を前提とするサービスファンクション200Bに、サービスファンクション200Aで処理が実行されないパケットが流入して、パケットが不通となること等を防止できる。
次に、ユーザが加入するサービスを追加又は削除した場合の経路設定処理について図17〜図20を用いて説明する。まず、図17及び図18を用いてユーザが加入するサービスを削除する場合の経路設定処理について説明する。
図17は、本実施例のユーザが加入するサービスを削除する場合の経路設定処理のシーケンス図である。
図17では、サービスA、サービスB、及びサービスCに加入するユーザ(ユーザID「3」)がサービスAを削除する場合の処理を例に説明する。
まず、ユーザID(「3」)のユーザが使用するユーザ端末10は、サービスAを削除する入力を受け付けると、その旨を示す削除通知をコントローラ300に送信する(1701)。
コントローラ300は、受信した削除通知に基づいて、ユーザデータベース321、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313を更新する削除時各種情報更新処理を実行する(1702)。削除時各種情報更新処理の詳細は図18で説明する。
サービスAにはサービスBが従属するので、サービスAの削除に伴い、サービスBも削除される必要がある。このため、コントローラ300は、サービスAを提供するサービスファンクション200A及びサービスBを提供するサービスファンクション200Bに切断通知を送信する(1703)。
サービスファンクション200Aは、削除通知を受信すると、受信した削除通知に基づいて応答処理を実行し、受信した削除通知に対する応答を送信する(1704A)。サービスファンクション200Bも、同様に、受信した削除通知に基づいて応答処理を実行し、受信した削除通知に対する応答を送信する(1704B)。
コントローラ300は、ステップ1702の処理で更新されたサービス状態管理情報311及びサービス経路リスト313に基づいて、経路を決定し、当該経路情報をフォワーダ及びクラシファイア100に設定する(1705)。
図18は、本実施例の削除時各種情報更新処理のフローチャートである。
まず、コントローラ300は、図示しない従属テーブルを参照し、受信した削除通知が示す削除するサービス(削除指示サービス)に従属する従属サービスが存在するか否かを判定する(1801)。従属テーブルには、サービス間の従属関係が登録され、例えば、サービスBはサービスAに従属することが登録される。
ステップ1801の処理で、削除指示サービスに従属する従属サービスが存在すると判定された場合(1801:YES)、コントローラ300は、削除するサービス(削除サービス)を、削除指示サービス及び従属サービスに設定し(1802)、ステップ1804の処理に進む。
一方、ステップ1801の処理で、削除指示サービスに従属する従属サービスが存在しないと判定された場合(1801:NO)、コントローラ300は、削除サービスを削除指示サービスに設定し(1803)、ステップ1804の処理に進む。
次に、コントローラ300は、ユーザデータベース321のユーザID401に、削除指示に含まれるユーザの識別子が登録されたエントリの加入サービス情報402から削除サービスの識別子を削除する(1804)。
次に、コントローラ300は、サービス状態管理情報311のユーザID501に、削除指示に含まれるユーザの識別子が登録されたエントリのうち、削除サービスに対応するエントリの加入/未加入502に「未加入」を登録し、利用可否503に「不可」を登録する(1805)。
次に、コントローラ300は、サービス状態確認契機情報1000のユーザID601に、削除指示に含まれるユーザの識別子が登録されたエントリの適用サービス一覧602から削除サービスの識別子を削除する(1806)。
次に、コントローラ300は、ステップ1806の処理で削除サービスの識別子が削除された後の適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子があるか否かを判定する(1807)。具体的には、コントローラ300は、従属テーブルに従属関係が登録されたサービスの識別子の組が当該適用サービス一覧602に登録されているか否かを判定する。
ステップ1807の処理で、適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子がないと判定された場合(1807:NO)、当該適用サービス一覧602に登録されたサービスの識別子によって識別されるサービスを提供するサービスファンクション200の利用可否を示す情報は並列して取得可能であるので、コントローラ300は、サービス状態確認契機情報1000の当該エントリの状態確認契機603に「並列」を登録し、当該エントリの順序リストポインタ604に登録されたポインタが示す先頭エントリから始まる順序リスト1001を削除し、当該エントリの順序リストポインタ604に「なし」を登録する(1808)。
次に、コントローラ300は、図示しない経路テンプレートを参照し、サービス経路リスト313のユーザID701に削除通知に含まれるユーザの識別子が登録されたレコードに含まれるエントリを更新し(1809)、削除時各種情報更新処理を終了する。経路テンプレートには、ユーザが加入し得るサービスの全てのパターンに対する条件と経路情報とが登録されているものとする。ステップ1809の処理では、コントローラ300は、削除サービスを削除した後のユーザが加入するサービスに対する条件と経路情報とを経路テンプレートから取得し、サービス経路リスト313のレコードに含まれるエントリに取得した条件と経路情報とを登録する。
一方、ステップ1807の処理で、適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子があると判定された場合(1807:YES)、当該適用サービス一覧602に登録されたサービスの識別子によって識別されるサービスを提供するサービスファンクション200の利用可否を示す情報は逐次的に取得される必要がある。このため、コントローラ300は、サービス状態確認契機情報1000の当該エントリの状態確認契機603に「逐次」を登録し、当該エントリの順序リストポインタ604に登録されたポインタが示す先頭エントリから始まる順序リスト1001に含まれるエントリのうち削除サービスに対応するエントリを削除し、当該順序リスト1001に含まれる残りのエントリの正常時の次エントリ及び異常時の次エントリを更新する(1810)。正常時の次エントリ及び異常時の次エントリの更新は、サービスの従属関係を考慮して、実行される。
次に、コントローラ300は、サービス状態確認契機情報1000のエントリの順序リストポインタ604に登録されたポインタが示す先頭エントリが削除されていれば、当該順序リストポインタ604に、ステップ1810の処理で更新された順序リスト1001の先頭エントリを示すポインタを登録し(1811)、ステップ1809の処理に進む。
以上によって、ユーザの加入するサービスが削除された場合であっても、ユーザデータベース321、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313が自動的に更新されるので、管理者が手動でこれらの情報を更新する場合に比べて管理者の手間を低減できる。
なお、本実施例では、図17に示すステップ1702の処理でコントローラ300が削除時各種情報更新処理を実行して、ユーザデータベース321、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313を更新するものとしたが、管理者がこれらの情報を手動で更新してもよい。
図19は、本実施例のユーザが加入するサービスに新たなサービスを追加する場合の経路設定処理のシーケンス図である。
図19では、ユーザ(ユーザID「3」)がサービスCに加入しており、新たにサービスBに加入する場合の処理を例に説明する。
まず、ユーザID「3」のユーザが使用するユーザ端末10は、サービスBを新たに追加する入力を受け付けると、その旨を追加通知をコントローラ300に送信する(1901)。
コントローラ300は、受信した追加通知に基づいて、ユーザデータベース321、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313を更新する追加時各種情報更新処理を実行する(1902)。追加時各種情報更新処理の詳細は図20で説明する。
サービスBはサービスAに従属するので、サービスBの追加に伴い、サービスAも追加される必要がある。このため、コントローラ300は、サービスAを提供するサービスファンクション200A及びサービスBを提供するサービスファンクション200Bに追加通知を送信する(1903)。
サービスファンクション200Aは、追加通知を受信すると、受信した追加通知に基づいて応答処理を実行し、受信した追加通知に対する応答を送信する(1904A)。サービスファンクション200Bも、同様に、受信した追加通知に基づいて応答処理を実行し、受信した追加通知に対する応答を送信する(1904B)。
コントローラ300は、ステップ1902の処理で更新されたサービス状態管理情報311及びサービス経路リスト313に基づいて、経路を決定し、当該経路情報をフォワーダ及びクラシファイア100に設定する(1905)。
図20は、本実施例の削除時各種情報更新処理のフローチャートである。
まず、コントローラ300は、図示しない従属テーブルを参照し、受信した追加通知が示す追加するサービス(追加指示サービス)が従属する被従属サービスが存在するか否かを判定する(2001)。
ステップ2001の処理で、追加指示サービスが従属する被従属サービスが存在すると判定された場合(2001:YES)、コントローラ300は、ユーザデータベース321を参照し、新たにサービスを追加するユーザの加入済みサービスに当該被従属サービスが存在するか否かを判定する(2002)。具体的には、コントローラ300は、ユーザデータベース321のユーザID401に追加指示に含まれるユーザの識別子が登録されたエントリの加入サービス情報402に追加指示サービスの被従属サービスが登録されているか否かを判定する。
ステップ2002の処理で、ユーザの加入済みサービスに追加指示サービスが従属する被従属サービスが存在すると判定された場合(2002:YES)、コントローラ300は、追加指示サービスを追加サービスに設定し(2003)、ステップ2005の処理に進む。また、ステップ2001の処理で、追加指示サービスが従属する被従属サービスが存在しないと判定された場合(2001:NO)、ステップ2003の処理で、追加指示サービスが追加サービスに設定される。
一方、ステップ2002の処理で、ユーザの加入済みサービスに追加指示サービスが従属する被従属サービスが存在しないと判定された場合(2002:NO)、コントローラ300は、追加指示サービス及び被従属サービスを追加サービスに設定し、ステップ2005の処理に進む。
次に、コントローラ300は、ユーザデータベース321のユーザID401に、追加指示に含まれるユーザの識別子が登録されたエントリの加入サービス情報402に追加サービスの識別子を追加する(2005)。
次に、コントローラ300は、サービス状態管理情報311のユーザID501に、追加指示に含まれるユーザの識別子が登録されたエントリのうち、追加サービスに対応するエントリの加入/未加入502に「加入」を登録する(2006)。
次に、コントローラ300は、サービス状態確認契機情報1000のユーザID601に、追加指示に含まれるユーザの識別子が登録されたエントリの適用サービス一覧602に追加サービスの識別子を追加する(2007)。
次に、コントローラ300は、ステップ2007の処理で追加サービスの識別子が追加された後の適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子があるか否かを判定する(2008)。具体的な処理は、図18に示すステップ1807の処理と同じであるので説明を省略する。
ステップ2008の処理で、適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子がないと判定された場合(2008:NO)、サービスが追加される前の適用サービス一覧602に従属関係となるサービスの識別子が登録されておらず、当該エントリの状態確認契機603に「並列」が登録され、順序リストポインタ604に「なし」が登録されているので、ステップ2009の処理に進む。
ステップ2009の処理では、コントローラ300は、図示しない経路テンプレートを参照し、サービス経路リスト313のユーザID701に追加通知に含まれるユーザの識別子が登録されたレコードに含まれるエントリを更新し(2009)、追加時各種情報更新処理を終了する。なお、ステップ2009の処理の詳細は、図18に示すステップ1809の処理と同じであるので、説明を省略する。
一方、ステップ2008の処理で、適用サービス一覧602に登録されたサービスの識別子に従属関係となるサービスの識別子があると判定された場合(2008:YES)、当該適用サービス一覧602に登録されたサービスの識別子によって識別されるサービスを提供するサービスファンクション200の利用可否を示す情報は逐次的に取得される必要がある。このため、コントローラ300は、サービス状態確認契機情報1000の当該エントリの状態確認契機603に「逐次」を登録し、当該エントリの順序リストポインタ604に登録されたポインタが示す先頭エントリから始まる順序リスト1001に追加サービスのエントリを追加し、追加サービスのエントリに接続されるエントリの正常時の次エントリ及び異常時の次エントリを更新し(2010)、ステップ2009の処理に進む。例えば、追加サービスのエントリは、順序リスト1001の最後のエントリに接続されるように追加されるものとする。この場合、順序リスト1001の最後のエントリの正常時の次エントリ及び異常時の次エントリを、追加サービスのエントリに更新する。
以上によって、ユーザの加入するサービスが追加された場合であっても、ユーザデータベース321、サービス状態管理情報311、サービス状態確認手順情報312、及びサービス経路リスト313が自動的に更新されるので、管理者が手動でこれらの情報を更新する場合に比べて管理者の手間を低減できる。
図21は、本実施例のユーザ端末10のサービスファンクション200の利用量が閾値以上となった場合の経路設定処理のシーケンス図である。
図21では、サービスファンクション200Aが、ユーザID「3」のユーザ端末10の利用量が閾値以上である場合について説明する。例えば、利用量は、サービスファンクション200Aとユーザ端末10との間で通信したパケットの容量の合計であってもよいし、サービスファンクション200Aとユーザ端末10との間で通信したパケットの数等であってもよい。
サービスファンクション200Aは、ユーザ端末10の利用量が閾値以上となったことを検出すると、切断通知をコントローラ300に送信する(2101)。切断通知は、利用量が閾値以上となったユーザ端末10のユーザの識別子と、サービスファンクション200Aが提供するサービスの識別子を含み、サービスファンクション200Aが提供するサービスをユーザ端末10が利用できないことを示す。
コントローラ300は、切断通知を受信すると、受信した切断通知に基づいてサービス状態管理情報311の利用可否503を更新する(2102)。
具体的には、コントローラ300は、サービス状態確認手順情報312を参照し、受信した切断通知に含まれるサービスの識別子によって識別されるサービスに従属する従属サービスがあるか否かを判定する。従属サービスがある場合、コントローラ300は、サービス状態管理情報311のユーザID501に、切断通知に含まれるユーザの識別子が登録されたエントリの受信した切断通知に含まれるサービスの識別子に対応する利用可否503に「不可」を登録し、当該エントリの従属サービスの識別子に対応する利用可否503に「不可」を登録する。一方、従属サービスがない場合、コントローラ300は、サービス状態管理情報311のユーザID601に、切断通知に含まれるユーザの識別子が登録されたエントリの受信した切断通知に含まれるサービスの識別子に対応する利用可否503に「不可」を登録する。
なお、サービスファンクション200Aが提供するサービスAにサービスファンクション200Bが提供するサービスBが従属するので、ユーザID「3」のサービスA及びサービスBの利用可否503に「不可」が登録される。
次に、コントローラ300は、受信した切断通知の応答処理を実行し、切断通知に対する応答をサービスファンクション200Aに送信する(2103)。
次に、コントローラ300は、ユーザ端末10のユーザのユーザID、及びステップ2102の処理で取得したサービスファンクション200の利用可否を示す情報を検索キーとして、サービス経路リスト313を検索し、検索キーと一致するエントリのサービス経路情報703に登録された経路情報が示す経路を、当該ユーザ端末10に適用する経路として決定し、当該経路情報をフォワーダ及びクラシファイア100に設定する(2104)。
なお、図21では、切断通知は、サービスファンクション200がユーザ端末の利用量が閾値以上となった場合に送信される例について説明したが、サービスファンクション200が異常を検出した場合に送信されてもよい。
以上によって、サービスファンクション200の管理者と経路の管理者とが異なる場合であっても、サービスファンクション200の利用量が閾値以上となったこと、又はサービスファンクション200で異常が発生したことを経路に反映することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、及び置換をすることが可能である。
また、各実施例の構成の一部について、他の構成の追加、削除、及び置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。
また、前記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SDカード、DVD(Digital Versatile Disc)等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。