以下、図面に基づいて、本願の開示するセッション確立装置、セッション確立方法及びセッション確立プログラムの実施例を詳細に説明する。尚、本実施例により、開示技術が限定されるものではない。
図2は、実施例2のサーバ管理システムを示すブロック図である。図2に示すサーバ管理システム1Aは、サーバ装置3と、複数台のクライアント端末20と、サーバ装置3とクライアント端末20とを接続するLAN4とを有する。サーバ管理システム1Aは、IPMIを使用してサーバ装置3の内部装置の状態情報をクライアント端末20側で管理可能にした。
サーバ装置3は、複数の内部装置21と、システム制御部22と、内部装置21とシステム制御部22との間を接続するI2Cバス23とを有する。内部装置21は、例えば、CPU及びメモリを搭載したシステムボード21A、電源21B、IO装置21Cやファン21D等に相当する。更に、各内部装置21は、自己の状態を検出するセンサ21Eを内蔵している。
システム制御部22は、IPMIを使用して各内部装置21のセンサ21Eで検出した状態情報を収集する。クライアント端末20は、IPMIを使用してLAN4経由でシステム制御部22と通信接続し、サーバ装置3内の各内部装置21の状態情報を監視可能にする。
システム制御部22は、ポート部31と、ドライバ部32と、IPMI制御部33とを有する。ポート部31は、LAN4と接続するインタフェースである。ドライバ部32は、I2Cバス23と接続するインタフェースである。IPMI制御部33は、論理チャネル部41と、コマンド処理部42と、デバイス部43と、セッション管理部44とを有する。論理チャネル部41は、ポート部31とコマンド処理部42との間の通信に使用するチャネルを論理的に関連付ける部位である。コマンド処理部42は、クライアント端末20からIPMIに準拠したコマンドを受信すると、コマンドに対応するコマンド処理を実行する。尚、コマンドとしては、例えば、各内部装置21のセンサ21Eで検出した状態情報の収集を指示するコマンドや、各センサ21Eの設定変更を指示するコマンド等である。デバイス部43は、コマンド処理部42で実行するコマンド処理に応じてセンサ21E等の各種デバイスにアクセスする部位である。
クライアント端末20とIPMI制御部33との間の通信は、通信開始から通信切断までをセッション単位で維持される。尚、V1.5のIPMIでは、Get Session Challenge及びActivate Sessionの一連の2コマンドを実行することで、クライアント端末20とIPMI制御部33との間のセッションをオープン状態にする。また、IPMIでは、Close Sessionを実行することでクライアント端末20とIPMI制御部33との間のセッションをクローズ状態にする。
セッション管理部44は、情報判定部51と、スロット記憶部52と、割当制御部53と、情報登録部54と、制御部55とを有する。セッション管理部44は、クライアント端末20からのGet Session Challengeリクエストに対して応答した後、同一クライアント端末20からのActivate Sessionリクエストに対して応答すると、クライアント端末20とのセッションをオープン状態にする。
スロット記憶部52は、クライアント端末20が使用するセッションに割り当てられたスロット52A毎に、セッションID52Bと、Activeフラグ52Cと、Establishmentフラグ52Dと、IPアドレス52Eとを対応付けて記憶する。セッションID52Bは、クライアント端末20が使用するセッションを識別するIDである。Activeフラグ52Cは、クライアント端末20が使用するセッションがオープン済み、すなわち確立済みであるか否かを示すフラグである。Activeフラグ52Cは、セッションが確立済みの場合を“ON”、セッションが確立済みでない場合を“OFF”とする。
Establishmentフラグ52Dは、クライアント端末20が使用するセッションがオープン前の確立処理中であるか否かを示すフラグである。尚、確立処理中とは、セッションオープン前の処理、すなわち後述するGet Session Challengeリクエスト受信処理が完了し、後述するActivate Sessionが未完の状態である。Establishmentフラグ52Dは、セッションを確立処理中の場合を“ON”、セッションを確立処理中でない場合を“OFF”とする。IPアドレス52Eは、クライアント端末20を識別する端末識別情報である。
情報判定部51は、クライアント端末20からGet Session Challengeリクエストを受信すると、スロット記憶部52内からスロットを順次参照し、参照スロットに登録済みのActiveフラグ52Cが“OFF”であるか否かを判定する。情報判定部51は、参照スロットに登録済みのActiveフラグ52Cが“OFF”の場合、参照スロットに登録済みのEstablishmentフラグ52Dが“OFF”であるか否かを判定する。また、情報判定部51は、参照スロットに登録済みのActiveフラグ52Cが“ON”の場合、参照スロットは使用中であると判断し、未参照スロットを検索する。
また、割当制御部53は、参照スロットに登録済みのEstablishmentフラグ52Dが“OFF”である場合、当該Get Session Challengeリクエストを発行したクライアント端末20に対して当該スロットを割り当てる。また、割当制御部53は、参照スロットに登録済みのEstablishmentフラグ52Dが“ON”である場合、参照スロットに登録済みのIPアドレス52Eと、当該リクエストを発行したクライアント端末20のIPアドレスとを使用して当該クライアント端末20に対するスロット割当の成否を識別する。
また、情報登録部54は、Get Session Challengeリクエストを発行したクライアント端末20に対してスロットを割り当てた場合、当該スロットに対応付けて、そのセッションのセッションID52B及びクライアント端末20のIPアドレス52Eを登録する。更に、情報登録部54は、当該スロットのEstablishmentフラグ52Dに“ON”を登録する。
制御部55は、クライアント端末20からActivate Sessionリクエストを受信すると、スロット記憶部52内からスロットを順次参照する。更に、制御部55は、参照スロットに登録済みのセッションID52BがActivate Sessionリクエストに含まれるセッションIDと同一であるか否かを判定する。制御部55は、セッションIDが同一の場合、そのセッションIDのセッションを使用してActivate Sessionリクエストを発行したクライアント端末20とのセッションをオープン状態にする。
制御部55は、参照スロットに登録済みのセッションID52Bが、Activate Sessionリクエストに含まれるセッションIDと同一でない場合、そのセッションIDのセッションを使用してActivate Sessionリクエストを実行したクライアント端末20に対するセッションオープンを禁止する。
情報登録部54は、参照スロットに登録済みのセッションID52BがActivate Sessionリクエストに含まれるセッションIDと同一の場合、参照スロットのEstablishmentフラグ52Dに“OFF”を登録する。更に、情報登録部54は、当該スロットのActiveフラグ52Cに“ON”を登録する。
また、割当制御部53は、端末判定部53Aを有する。端末判定部53Aは、Get Session Challengeリクエスト受信時に任意のスロットを参照する。更に、端末判定部53Aは、参照スロットに登録済みのEstablishmentフラグ52Dが“ON”の場合、参照スロットに登録済みのIPアドレス52EがGet Session Challengeリクエストを発行したクライアント端末20のIPアドレスと同一であるか否かを判定する。
割当制御部53は、端末判定部53AにてIPアドレスが同一と判定された場合、Activate Session未完のまま、クライアント端末20が再度Get Session Challengeリクエストを発行したものと判断する。更に、割当制御部53は、そのGet Session Challengeリクエストを発行したクライアント端末20に対して当該スロットを再度割り当てる。また、割当制御部53は、端末判定部53AにてIPアドレスが同一でない場合、そのGet Session Challengeリクエストを発行したクライアント端末20に対する当該スロットの割り当てを禁止する。
制御部55は、クライアント端末20からClose Sessionコマンドを受信すると、スロット記憶部52内からスロットを順次参照する。更に、制御部55は、参照スロットに登録済みのセッションID52Bが当該Close Sessionコマンドに含まれるセッションIDと同一であるか否かを判定する。制御部55は、同一セッションIDの場合、当該スロットに登録済みのセッションID52Bに関わるクライアント端末20とのセッションを切断する。情報登録部54は、受信したClose Sessionコマンドが有するセッションID52Bを登録済みのスロットがある場合、当該スロットに登録済みのセッションID52B及びIPアドレス52Eをゼロクリアする。更に、情報登録部54は、当該スロットのActiveフラグ52Cに“OFF”を登録する。
また、制御部55は、セッションIDが同一でない場合、参照スロットがClose Sessionコマンドを発行したクライアント端末20のスロットではないものと判断し、更なる未参照スロットを参照することになる。
次に、図3乃至図8に基づき、IPMIで使用するセッションコマンドのフォーマットについて説明する。図3は、Get Session Challengeリクエストのフォーマットを示す説明図、図4は、Get Session Challengeレスポンスのフォーマットを示す説明図、図5は、Activate Sessionリクエストのフォーマットを示す説明図である。更に、図6は、Activate Sessionレスポンスのフォーマットを示す説明図、図7は、Close Sessionコマンドのフォーマットを示す説明図、図8は、Close Sessionレスポンスのフォーマットを示す説明図である。
図3に示すGet Session Challengeリクエスト61は、認証タイプの有無61A、セッションシーケンス番号61B、セッションID61C、認証コードの有無61D、リクエストされた認証タイプ61E及び、ユーザ名61F等を含む。尚、Byteは、データを格納するバイト単位の格納番号に相当する。認証タイプの有無61A、セッションシーケンス番号61B、セッションID61C及び認証コードの有無61DはByte“0”に格納する。リクエストされた認証タイプ61Eは、Byte“1”に格納する。ユーザ名61Fは、Byte“2”〜“17”に格納する。
図4に示すGet Session Challengeレスポンス62は、認証タイプの有無62A、セッションシーケンス番号62B、セッションID62C及び認証コードの有無62Dを含む。更に、Get Session Challengeレスポンス62は、完了コード62E、テンポラリセッションID62F及びチャレンジデータ62G等を含む。尚、テンポラリセッションID62Fは、Get Session Challengeリクエストを実行したクライアント端末20に新規に割り当てられた、Activate Sessionリクエストで使用するセッションIDに相当する。チャレンジデータ62Gは、Activate Sessionリクエストで使用する文字列に相当する。認証タイプの有無62A、セッションシーケンス番号62B、セッションID62C及び認証コードの有無62DはByte“0”に格納する。完了コード62EはByte“1”に格納する。テンポラリセッションID62FはByte“2”〜“5”に格納する。チャレンジデータ62GはByte“6”〜“21”に格納する。
図5に示すActivate Sessionリクエスト63は、認証タイプ63A、セッションシーケンス番号63B、セッションID(テンポラリセッションID)63C、指定アルゴリズムで算出したID63Dを含む。尚、セッションID63Cは、Get Session Challengeレスポンス62から得たテンポラリセッションID62Fに相当する。更に、Activate Sessionリクエスト63は、セッションの認証タイプ63E、権限レベル63F、文字列63G及びシーケンス番号63H等を含む。尚、文字列63Gは、Get Session Challengeレスポンス62のチャレンジデータ62Gで得た文字列に相当する。尚、認証タイプ63A、セッションシーケンス番号63B、セッションID63C及び、指定アルゴリズムで算出したID63DはByte“0”に格納する。セッションの認証タイプ63EはByte“1”に格納する。権限レベル63FはByte“2”に格納する。文字列63GはByte“3”〜“18”に格納する。シーケンス番号63HはByte“19”〜“22”に格納する。
図6に示すActivate Sessionレスポンス64は、セッションID64A、認証タイプ64B、シーケンス番号64C、指定アルゴリズムで算出したID64D及び、セッションオープン完了を示す完了コード64Eを含む。尚、セッションID64Aは、Activate Sessionリクエストで要求したセッションIDに相当する。更に、Activate Sessionレスポンス64は、セッションオープン後の認証タイプ64F、セッションID64G、シーケンス番号64H及び権限レベル64I等を含む。尚、認証タイプ64A、認証タイプ64B、シーケンス番号64C及び指定アルゴリズムで算出したID64DはByte“0”に格納する。完了コード64EはByte“1”に格納する。セッションオープン後の認証タイプ64FはByte“2”に格納する。セッションID64GはByte“3”〜“6”に格納する。シーケンス番号64HはByte“7”〜“10”に格納する。権限レベル64IはByte“11”に格納する。
図7に示すClose Sessionコマンド65は、セッションクローズ対象のセッションID65Aを含む。尚、セッションクローズ対象のセッションID65AはByte“1”〜“4”に格納する。図8に示すClose Sessionレスポンス66は、セッションクローズ完了を示す完了コード66Aを含む。尚、完了コード66AはByte“1”に格納する。
次に実施例2のサーバ管理システム1Aの動作について説明する。図9は、Get Session Challengeリクエスト受信処理に関わるセッション管理部44の処理動作を示すフローチャートである。図9に示すGet Session Challengeリクエスト受信処理は、クライアント端末20から受信したGet Session Challengeリクエストに応じてセッションオープン前の事前処理を実行する処理である。図9においてセッション管理部44の情報判定部51は、スロット記憶部52内のスロットを順次参照し(ステップS11)、参照スロットに登録済みのActiveフラグ52Cが“ON”であるか否かを判定する(ステップS12)。情報判定部51は、参照したスロットのActiveフラグ52Cが“ON”でない場合(ステップS12否定)、すなわちActiveフラグ52Cが“OFF”の場合、参照スロットに登録済みのEstablishmentフラグ52Dが“ON”であるか否かを判定する(ステップS13)。
割当制御部53は、参照スロットに登録済みのEstablishmentフラグ52Cが“ON”でない場合(ステップS13否定)、すなわちEstablishmentフラグ52Cが“OFF”である場合、参照スロットを空きスロットとして利用する(ステップS14)。セッション管理部44の情報登録部54は、当該空きスロットに新たなセッションID52Bを登録し(ステップS15)、更に、当該スロット内に当該クライアント端末20を識別するIPアドレス52Eを登録する(ステップS16)。更に、情報登録部54は、当該スロット内の“OFF”のEstablishmentフラグ52Dに“ON”を登録し(ステップS17)、図9の処理動作を終了する。
端末判定部53Aは、参照スロット内のEstablishmentフラグ52Dが“ON”である場合(ステップS13肯定)、クライアント端末20のIPアドレスと参照スロットに登録済みのIPアドレスとが同一であるか否かを判定する(ステップS18)。割当制御部53は、IPアドレスが同一である場合(ステップS18肯定)、Activate Session未完のまま、再度、Get Session Challengeリクエストを発行したクライアント端末20であると判断する。更に、割当制御部53は、Activate Session未完のまま、再度、Get Session Challengeリクエストを発行したクライアント端末20であると判断すると、当該クライアント端末20に当該参照スロットを再利用し(ステップS19)、図9の処理動作を終了する。尚、Activate Session未完のまま、再度、Get Session Challengeリクエストを発行したクライアント端末20に対して複数の参照スロットが割り当てられるような事態が回避できる。
また、割当制御部53は、IPアドレスが同一でない場合(ステップS18否定)、参照スロットが他のクライアント端末20で使用中と判断し(ステップS20)、未参照スロットがスロット記憶部52内にあるか否かを判定する(ステップS21)。割当制御部53は、未参照スロットがある場合(ステップS21肯定)、当該未参照スロットを参照すべく、ステップS11に移行する。また、割当制御部53は、未参照スロットがない場合(ステップS21否定)、セッション確立可能な上限数を超えたセッション数オーバのエラーメッセージをクライアント端末20に通知し(ステップS22)、図9の処理動作を終了する。
割当制御部53は、参照スロットに登録済みのActiveフラグ52Cが“ON”である場合(ステップS12肯定)、参照スロットが他のクライアント端末20で使用中と判断する(ステップS23)。続いて、割当制御部53は、未参照スロットがスロット記憶部52内にあるか否かを判定する(ステップS24)。割当制御部53は、未参照スロットがある場合(ステップS24肯定)、未参照スロットを参照すべく、ステップS11に移行する。また、割当制御部53は、未参照スロットがない場合(ステップS24否定)、セッション数オーバのエラーメッセージをクライアント端末20に通知し(ステップS25)、図9の処理動作を終了する。
図9に示すGet Session Challengeリクエスト受信処理では、セッション管理部44がGet Session Challengeリクエストを受信すると、Activeフラグ52Cが“OFF”、Establishmentフラグ52Dが“OFF”に登録済みのスロットを、Get Session Challengeリクエストを発行したクライアント端末20に割り当てる。更に、Get Session Challenge受信処理では、クライアント端末20に割り当てたスロットにセッションID52B及びIPアドレス52Eを登録すると共に、当該スロットのActiveフラグ52Cに“ON”を登録する。
例えば、Activeフラグ52Cが“OFF”、Establishmentフラグ52Dが“OFF”に登録済みのスロットの場合、割当制御部53は、当該スロットをGet Session Challengeリクエストを発行したクライアント端末20に割り当てる。これに対して、Activeフラグ52Cが“ON”に登録済みのスロットの場合、割当制御部53は、Get Session Challengeリクエストを発行したクライアント端末20に対する当該スロットの割当を禁止する。つまり、サーバ装置3は、スロット毎のActiveフラグ52C及びEstablishmentフラグ52Dの参照結果に基づき、Get Session Challengeリクエストを発行したクライアント端末20に対するスロットの割当を制御した。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対して同一スロットの重複割当を回避できる。
更に、セッション管理部44がGet Session Challengeリクエストを受信したとき、スロットのActiveフラグ52Cが“OFF”、Establishmentフラグ52Dが“ON”の場合には、当該スロットに登録済みのIPアドレスとリクエストを発行したクライアント端末20のIPアドレスが同一であるか否かを判定する。同一IPアドレスの場合、Get Session Challengeリクエストを発行したクライアント端末20に当該スロットを割り当てる。つまり、サーバ装置3は、同一クライアント端末20からActivate Session未完のまま、再度、Get Session Challengeリクエストを受信したとしても、当該クライアント端末20に割当済みのスロットを再利用することになる。その結果、サーバ装置3は、同一クライアント端末20に対して複数のスロットを順次割り当ててしまうような事態を回避できる。
更に、サーバ装置3は、スロットに登録済みのIPアドレスとGet Session Challengeリクエストを発行したクライアント端末20のIPアドレスとが同一ではない場合、当該リクエストを発行したクライアント端末20に別のスロットを割り当てる。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対して同一スロットが割り当てられてしまうような事態を回避できる。
図10は、Activate Sessionリクエスト受信処理に関わるセッション管理部44の処理動作を示すフローチャートである。図10に示すActivate Sessionリクエスト受信処理は、クライアント端末20からのActivate Sessionリクエストに応じてセッションをオープン状態にする処理である。図10において制御部55は、スロット記憶部52からスロットを参照し(ステップS31)、参照スロットに登録済みのActiveフラグ52C が“OFF”であるか否かを判定する(ステップS32)。
制御部55は、Activeフラグ52C が“OFF”である場合(ステップS32肯定)、参照スロットに登録済みのセッションID52BがActivate Sessionリクエストに付加されたセッションIDと同一であるか否かを判定する(ステップS33)。
情報登録部54は、セッションIDが同一の場合(ステップS33肯定)、参照スロットに登録済みのActiveフラグ52Cに“ON”を登録する(ステップS34)。更に、情報登録部54は、参照スロットに登録済みのEstablishmentフラグ52Dを“OFF”登録し(ステップS35)、図10の処理動作を終了する。その結果、制御部55は、Activate Sessionリクエストを発行したクライアント端末20とのセッションをオープン状態にする。
更に、制御部55は、参照スロットに登録済みのセッションID52BがActivate Sessionリクエストに付加されたセッションIDと同一でない場合(ステップS33否定)、参照スロットがActivate Sessionリクエストを発行したクライアント端末20に割り当てるべき該当スロットではないと判断する (ステップS36)。そして、制御部55は、参照スロットが該当スロットではないと判断すると、未参照スロットがスロット記憶部52内にあるか否かを判定する(ステップS37)。制御部55は、未参照スロットがある場合(ステップS37肯定)、未参照スロットを参照すべく、ステップS31に移行する。
また、制御部55は、未参照スロットがない場合(ステップS37否定)、Activate Sessionリクエストに関わるセッションIDエラーをクライアント端末20に通知し(ステップS38)、図10の処理動作を終了する。また、制御部55は、Activeフラグ52Cが“OFF”でない場合(ステップS32否定)、ステップS36に移行する。
図10に示すActivate Sessionリクエスト受信処理では、セッション管理部44がActivate Sessionリクエストを受信すると、当該リクエストのセッションIDと参照スロットに登録済みのセッションID52Bとが同一であるか否かを判定する。セッションIDが同一の場合、当該セッションを使用したクライアント端末20とのセッションをオープン状態にする。また、Activate Sessionリクエスト受信処理では、セッションIDが同一でない場合、当該セッションを使用したクライアント端末20とのセッションをオープンにしない。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対して同一スロットが割り当てられるような事態を回避することで、クライアント端末20がGet Session Challengeリクエストを先に要求したにも関わらず、後で要求した他のクライアント端末20によってセッションが横取りされてしまうような事態を回避できる。そして、サーバ管理システム1Aは、円滑なセッションのオープンを実現できる。
図11は、Close Sessionコマンド受信処理に関わるセッション管理部44の処理動作を示すフローチャートである。図11に示すClose Sessionコマンド受信処理は、クライアント端末20からのClose Sessionコマンドに応じてクライアント端末20とのセッションをクローズ状態にする処理である。図11において制御部55は、Close Sessionコマンドを受信すると、スロット記憶部52からスロットを参照し(ステップS41)、参照スロットに登録済みのActiveフラグ52Cが“ON”であるか否かを判定する(ステップS42)。制御部55は、参照スロットのActiveフラグ52Cが“ON”である場合(ステップS42肯定)、参照スロットに登録済みのセッションID52BがClose Sessionコマンドに付加されたセッションIDと同一であるか否かを判定する(ステップS43)。
情報登録部54は、セッションIDが同一の場合(ステップS43肯定)、参照スロットに登録済みのセッションID52Bをゼロクリアする(ステップS44)。更に、情報登録部54は、参照スロットに登録済みのIPアドレス52Eをゼロクリアする(ステップS45)。更に、情報登録部54は、参照スロットのActiveフラグ52Cを“OFF”登録し(ステップS46)、図11の処理動作を終了する。その結果、制御部55は、Close Sessionコマンドを発行したクライアント端末20とのセッションをクローズ状態にする。
また、制御部55は、参照スロットのActiveフラグ52Cが“ON”でない場合(ステップS42否定) 、参照スロットがClose Sessionコマンドを発行したクライアント端末20に割り当てるべき該当スロットではないと判断する(ステップS47)。そして、制御部55は、未参照スロットがスロット記憶部52内にあるか否かを判定する(ステップS48)。制御部55は、未参照スロットがない場合(ステップS48否定)、Close Sessionコマンドに関わるセッションIDエラーをクライアント端末20に通知し(ステップS49)、図11の処理動作を終了する。
また、制御部55は、未参照スロットがある場合(ステップS48肯定)、未参照スロットを参照すべく、ステップS41に移行する。また、制御部55は、参照スロットに登録済みのセッションID52BがClose Sessionコマンドに付加されたセッションIDと同一でない場合(ステップS43否定)、参照スロットが該当スロットではないと判断すべく、ステップS47に移行する。
図11に示すClose Sessionコマンド受信処理では、Close Sessionコマンドに応じて、当該コマンドを発行したクライアント端末20とのセッションをクローズ状態にする。
図12は、セッションオープン競合時に関わるサーバ管理システム1Aの処理動作を示すシーケンス図である。尚、説明の便宜上、クライアント端末20A及び20BからのGet Session Challengeリクエストが競合した状態を想定する。クライアント端末20Aは、Get Session Challengeリクエストを発行し、そのGet Session ChallengeリクエストをLAN4経由でコマンド処理部42に通知する(ステップS51)。コマンド処理部42は、クライアント端末20AからGet Session Challengeリクエストを受信すると、使用するセッションの新規セッションIDの生成をセッション管理部44に依頼する(ステップS52)。
セッション管理部44は、新規セッションIDの生成依頼を受信すると、新規セッションIDを生成する(ステップS53)。更に、セッション管理部44は、Activeフラグ52Cが“OFF”及びEstablishmentフラグ52Dが“OFF”の空きスロット“1”を、Get Session Challengeリクエストを発行したクライアント端末20Aに割り当てる。更に、情報登録部54は、空きスロット“1”に、Get Session Challengeリクエストを発行したクライアント端末20AのIPアドレス52E“xxA”及び新規セッションID52B“1”を登録する(ステップS54)。更に、情報登録部54は、当該空きスロット“1”のEstablishmentフラグ52Dに“ON”を登録する(ステップS54)。つまり、情報登録部54は、IPアドレス52E“xxA”、新規セッションID52B“1”及び Establishmentフラグ52D“ON”を空きスロット“1”に登録する。その結果、当該スロット“1”は、クライアント端末20Aが利用するセッションID“1”対応のスロットとなる。
セッション管理部44は、スロット“1”に登録した新規セッションID“1”を読み出す(ステップS54A)。そして、セッション管理部44は、Get Session Challengeリクエストに対するGet Session Challengeレスポンスをクライアント端末20Aに返信する(ステップS55)。尚、図12の例では、Get Session Challengeレスポンスには、ステップS54で登録した新規セッションID“1”を付加する。
次に、クライアント端末20AがGet Session Challengeリクエストに後続するActivate Sessionリクエストを発行する前に、クライアント端末20Bは、Get Session Challengeリクエストを発行し、そのGet Session ChallengeリクエストをLAN4経由でコマンド処理部42に通知する(ステップS56)。コマンド処理部42は、クライアント端末20BからGet Session Challengeリクエストを受信すると、使用するセッションの新規セッションIDの生成をセッション管理部44に依頼する(ステップS57)。
セッション管理部44は、新規セッションIDの生成依頼を受信すると、新規セッションIDを生成する(ステップS58)。更に、割当制御部53は、クライアント端末20Aに先に割り当てたスロット“1”に登録済みのEstablishmentフラグ52Dが“ON”のため、Get Session Challengeリクエストを発行したクライアント端末20Bに対して空きスロット“1”の割当を禁止する。その結果、割当制御部53は、Activeフラグ52Cが“OFF”及びEstablishmentフラグ52Dが“OFF”の空きスロット“2”を、Get Session Challengeリクエストを発行したクライアント端末20Bに割り当てる。情報登録部54は、空きスロット“2”にGet Session Challengeリクエストを発行したクライアント端末20BのIPアドレス52E“xxB”及び新規セッションID52B“2”を登録する(ステップS59)。更に、情報登録部54は、空きスロット“2”のEstablishmentフラグ52Dに“ON”を登録する(ステップS59)。つまり、情報登録部54は、IPアドレス52E“xxB”、新規セッションID52B“2”及び Establishmentフラグ52D“ON”を空きスロット“2”に登録する。その結果、当該スロット“2”は、クライアント端末20Bが利用するセッションID“2”対応のスロットとなる。
セッション管理部44は、スロット“2”に登録した新規セッションID“2”を読み出す(ステップS59A)。そして、セッション管理部44は、Get Session Challengeリクエストに対するGet Session Challengeレスポンスをクライアント端末20Bに返信する(ステップS60)。尚、図12の例では、Get Session Challengeレスポンスには、ステップS59で登録した新規セッションID“2”を付加する。この結果、クライアント端末20A及び20BによってGet Session Challengeリクエストが競合した状態となる。
この際、クライアント端末20Bは、クライアント端末20Aよりも先にActivate Sessionリクエストを発行し、Activate Sessionリクエストをコマンド処理部42経由でセッション管理部44に通知したものとする(ステップS61)。尚、クライアント端末20Bは、Activate Sessionリクエストを発行する際、Get Session Challengeレスポンスに付加されたセッションID“2”をActivate Sessionリクエストに付加する。
情報登録部54は、クライアント端末20BからActivate Sessionリクエストを受信すると、当該リクエストに付加されたセッションID“2”が登録済みのスロット“2”を参照する(ステップS62)。更に、情報登録部54は、参照スロット“2”のActiveフラグ52Cに“ON”を登録すると共に、Establishmentフラグ52Dに“OFF”を登録する(ステップS62)。
当該スロット“2”には、セッションID52B“2”と、Activeフラグ52C“ON”と、Establishmentフラグ52D“OFF”と、クライアント端末20BのIPアドレス52E“xxB”とを対応付けて登録する(ステップS62)。そして、制御部55は、当該スロット“2”の登録完了に応じて(ステップS62A)、Activate Sessionリクエストに対するActivate Sessionレスポンスをコマンド処理部42経由でクライアント端末20Bに返信する(ステップS63)。この結果、制御部55は、クライアント端末20Bに対するセッションID“2”のセッションをオープン状態とする。
そして、クライアント端末20BがActivate Sessionが完了してオープン状態にした後、クライアント端末20Aは、Activate Sessionリクエストを発行し、Activate Sessionリクエストをコマンド処理部42経由でセッション管理部44に通知する(ステップS64)。尚、クライアント端末20Aでは、Activate Sessionリクエストを発行する際、Get Session Challengeレスポンスに付加されたセッションID“1”をActivate Sessionリクエストに付加する。
情報登録部54は、Activate Sessionリクエストをクライアント端末20Aから受信すると、当該リクエストに付加されたセッションID“1”が登録済みのスロット“1”を参照する。情報登録部54は、参照スロット“1”のActiveフラグ52Cに“ON”を登録すると共に、Establishmentフラグ52Dに“OFF”を登録する(ステップS65)。
当該スロット“1”には、セッションID52B“1”と、Activeフラグ52C“ON”と、Establishmentフラグ52D“OFF”と、クライアント端末20AのIPアドレス52E“xxA”とを対応付けて登録する(ステップS65)。そして、制御部55は、当該スロット“1”の登録完了に応じて(ステップS65A)、Activate Sessionリクエストに対するActivate Sessionレスポンスをコマンド処理部42経由でクライアント端末20Aに返信する(ステップS66)。この結果、制御部55は、クライアント端末20Aに対するセッションID“1”のセッションをオープン状態とする。
図12では、クライアント端末20からGet Session Challengeリクエストが発行された場合、各スロットのセッションID52B、Activeフラグ52C、Establishmentフラグ52D及びIPアドレス52Eを参照する。そのため、複数のクライアント端末20のGet Session Challengeリクエストが競合したとしても、サーバ装置3は、複数のクライアント端末20に対して同一スロットが割り当てられるような事態を回避する。更に、クライアント端末20がGet Session Challengeリクエストを先に要求したにも関わらず、後で要求した他のクライアント端末20によってセッションが横取りされてしまうような事態が回避できる。そして、サーバ管理システム1は、円滑なセッションオープンを実現できる。
また、例えば、クライアント端末20Aは、Get Session Challengeリクエストを発行し、ステップS51〜ステップS55の処理動作を経て、Activate Sessionリクエストを発行する。しかしながら、クライアント端末20Aは、Get Session Challengeリクエストを発行したにもかかわらず、Activate Sessionリクエストを発行せず、何等かの原因でGet Session Challengeリクエストを再度発行したとする。このような場合でも、割当制御部53は、Activeフラグ52Cが“OFF”、Establishmentフラグ52Dが“ON”及びIPアドレス52Eが同一のスロットをクライアント端末20Aに割り当てることで当該スロットを再利用することになる。その結果、サーバ装置3は、Get Session Challengeリクエストを受信する都度、同一クライアント端末20に対して異なるスロットを順次割り当てしまうような事態を回避することで、従来のようなセッション数オーバを防止できる。
実施例2では、クライアント端末20からGet Session Challengeリクエストを受信すると、スロットを順次参照し、参照スロットに登録済みのActiveフラグ52Cが“OFF”であるか否かを判定する。更に、実施例2では、Activeフラグ52Cが“OFF”の場合、参照スロットに登録済みのEstablishmentフラグ52Dが“OFF”であるか否かを判定する。更に、実施例2では、Establishmentフラグ52Dが“OFF”の場合、Get Session Challengeリクエストを発行したクライアント端末20に対して当該参照スロットを割り当てる。更に、実施例2では、クライアント端末20に割り当てられたスロットに、そのセッションのセッションID52B及びIPアドレス52Eを登録し、Establishmentフラグ52Dに“ON”を登録する。つまり、実施例2では、スロット毎のActiveフラグ52C及びEstablishmentフラグ52Dの参照結果に基づき、Get Session Challengeリクエストを発行したクライアント端末20に対するスロットの割当を制御した。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対する同一スロットの重複割当を回避できる。
更に、実施例2では、クライアント端末20からActivate Sessionリクエストを受信すると、スロットを順次参照し、参照スロットに登録済みのセッションID52Bと当該リクエストに含まれるセッションIDとが同一であるか否かを判定する。実施例2では、セッションIDが同一の場合、参照スロットに登録済みのセッションID52BのセッションIDを使用してActivate Sessionリクエストを発行したクライアント端末20とのセッションをオープン状態にする。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対する同一スロットの重複割当を回避することで、クライアント端末20がGet Session Challengeリクエストを先に要求したにも関わらず、後で要求した他のクライアント端末20によってセッションが横取りされてしまうような事態を回避できる。そして、円滑なセッションオープンを実現できる。
実施例2では、参照スロットに登録済みのEstablishmentフラグ52Dが“ON”の場合、参照スロットに登録済みのIPアドレスがGet Session Challengeリクエストを発行したクライアント端末20のIPアドレスと同一であるか否かを判定する。実施例2では、IPアドレスが同一の場合、当該リクエストを発行したクライアント端末20に対して当該スロットを割り当てる。つまり、サーバ装置3は、同一クライアント端末20からActivate Session未完のまま、再度、Get Session Challengeリクエストを受信したとしても、当該クライアント端末20に割当済みのスロットを再利用することになる。その結果、サーバ装置3は、同一クライアント端末20に対して複数のスロットを順次割り当ててしまうような事態を回避できる。
更に、実施例2では、スロットに登録済みのIPアドレスがGet Session Challengeリクエストを発行したクライアント端末20のIPアドレスとが同一ではない場合、当該リクエストを発行したクライアント端末20に別のスロットを割り当てる。その結果、サーバ装置3は、Get Session Challengeリクエストが競合した複数のクライアント端末20に対して同一スロットが割り当てられてしまうような事態を回避できる。
実施例2では、Activate Sessionリクエストを受信すると、スロットを順次参照し、参照スロットに登録済みのセッションID52Bがリクエストに付加されたセッションIDと同一であるか否かを判定する。実施例2では、セッションIDが同一の場合、当該セッションを使用したクライアント端末20とのセッションをオープン状態にする。
実施例2では、クライアント端末20からClose Sessionコマンドを受信すると、スロットを順次参照し、参照スロットに登録済みのセッションIDがClose Sessionコマンドに付加したセッションIDと同一であるか否かを判定する。実施例2では、同一セッションIDの場合、当該クライアント端末20と当該セッションIDのセッションをクローズ状態にする。
尚、上記実施例2では、V1.5のIPMI仕様のセッションを例に挙げて説明したが、V2.0のIPMI仕様のセッションに採用しても良い。図13は、V2.0のIPMIのセッションシーケンスの一例を示す説明図である。図13に示すV2.0仕様のRMCP+Open Sessionは、セッション開始要求としてV1.5仕様のGet Session Challengeに相当する。更に、V2.0仕様のRAKP Message1、RAKP Message2、RAKP Message3及びRAKP Message4は、セッション実行要求としてV1.5のActivate Sessionに相当する。セッション管理部44の割当制御部53は、クライアント端末20からRMCP+Open Sessionリクエストを受信した場合、Activeフラグ“OFF”及びEstablishmentフラグ“OFF”の空きスロットを割り当てる。更に、情報登録部54は、スロットに新規セッションID及びIPアドレスを登録すると共に、Establishmentフラグ52Dに“ON”を登録する。この結果、他のクライアント端末20からRMCP+Open Sessionリクエストを受信したとしても、割当制御部53は、複数のクライアント端末20に対してEstablishmentフラグ52Dが“OFF”登録済みのスロットを割り当てる。更に、割当制御部53は、複数のクライアント端末20に対してEstablishmentフラグ52Dが“ON”登録済みのスロットの重複割当を回避できる。
また、上記実施例2では、Get Session Challenge及びActivate Sessionの二段構えのIPMIコマンドを実行してセッションを確立する場合を例に挙げて説明した。しかしながら、IPMIに限定することなく、二段構えのコマンドを実行してセッションを確立するシステムであれば、同様の効果が得られる。
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
更に、各装置で行われる各種処理機能は、CPU(Central Processing Unit)(又はMPU(Micro Processing Unit)、MCU(Micro Controller Unit)等のマイクロ・コンピュータ)上で、その全部又は任意の一部を実行するようにしても良い。また、各種処理機能は、CPU(又はMPU、MCU等のマイクロ・コンピュータ)で解析実行するプログラム上、又はワイヤードロジックによるハードウェア上で、その全部又は任意の一部を実行するようにしても良いことは言うまでもない。
ところで、本実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することによって実現することができる。そこで、以下では、図14を用いて、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図14は、セッション確立プログラムを実行するコンピュータを示す説明図である。
図14に示すように、セッション確立プログラムとしてのコンピュータ200は、HDD(Hard Disk Drive)210、RAM(Random Access Memory)220、ROM(Read Only Memory)230及びCPU240をバス250で接続して構成される。
そして、ROM230には、上記の実施例と同様の機能を発揮するセッション確立プログラムが予め記憶されている。セッション確立プログラムとしては、図14に示すように、情報判定プログラム231、記憶プログラム232、割当制御プログラム233、情報登録プログラム234及び制御プログラム235である。尚、プログラム231〜235については、図1に示したセッション確立装置1の各構成要素と同様、適宜統合又は分散してもよい。
そして、CPU240が、これらのプログラム231〜235をROM230から読み出して実行する。そして、図14に示すように、各プログラム231〜235は、情報判定プロセス241、記憶プロセス242、割当制御プロセス243、情報登録プロセス244及び制御プロセス245として機能するようになる。
CPU240は、端末装置からセッション開始要求を受信すると、確立済み情報が確立済みではないことを示すセッションがあるか否かを判定する。更に、CPU240は、確立済みではないセッションがある場合、当該セッションに対応した確立中情報が確立処理中でない旨を示しているか否かを判定する。更に、CPU240は、確立処理中でないセッションに対応付けて、セッション識別情報及び端末識別情報を登録し、当該セッションの確立中情報を確立処理中である旨に登録する。つまり、コンピュータ200は、セッション毎の確立済み情報及び確立中情報の参照結果に基づき、セッション開始要求を発行した端末装置に対するセッションの割当を制御する。その結果、コンピュータ200は、セッション開始要求が競合したとしても、登録済みの確立中情報、確立済み情報、セッション識別情報及び端末識別情報を参照して、同一セッションが複数の端末装置に重複割当されてしまうような事態を回避できる。
更に、CPU240は、端末装置からセッション実行要求を受信すると、セッション実行要求に含まれるセッション識別情報と同一のセッション識別情報のセッションがあるか否かを判定する。更に、CPU240は、同一セッション識別情報を持つセッションがある場合、当該セッション識別情報を使用して当該セッション実行要求を発行した端末装置とのセッションを確立する。その結果、コンピュータ200は、セッション開始要求が競合した複数の端末装置に対する同一セッションの重複割当を回避することで、端末装置がセッション開始要求を先に要求したにも関わらず、後で要求した他の端末装置によってセッションが横取りされてしまうような事態を回避できる。そして、コンピュータ200は、円滑なセッションの確立を実現できる。