(57)【特許請求の範囲】
【請求項１】
プロセッサによる、デバイスにおけるインテリジェントな無線選択のための方法において、
前記方法は、
無線アクセスを望むアプリケーションからソケットコンポーネントへのネットワーキング関数コールを傍受することと、
前記傍受されたネットワーキング関数コールおよび選択基準に基づいて、複数の候補の無線から無線を選択することと、
前記無線を前記アプリケーションにバインドさせることとを含む方法。
【請求項２】
前記傍受することは、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを傍受することを含む請求項１記載の方法。
【請求項３】
前記傍受することは、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせることを含み、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む請求項２記載の方法。
【請求項４】
前記バインドさせることは、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせることを含む請求項３記載の方法。
【請求項５】
前記傍受することは、集中化された無線制御装置に前記無線を選択するための要求を発生させることを含む請求項１記載の方法。
【請求項６】
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリック基準とのうちの少なくとも１つを含む請求項１記載の方法。
【請求項７】
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む請求項１記載の方法。
【請求項８】
前記ネットワーキング関数コールは、ソケットレイヤコールである請求項１記載の方法。
【請求項９】
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである請求項８記載の方法。
【請求項１０】
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである請求項１記載の方法。
【請求項１１】
前記バインドさせることは、
エフェメラルポートを前記無線に割り振ることと、
前記エフェメラルポートのみに基づいて、フローバインディングルールを発生させることと、
前記フローバインディングルールをホームエージェントにシグナリングすることとを含む請求項１記載の方法。
【請求項１２】
前記バインドさせることは、
前記無線に関係付けられるＩＰｖ６アドレスを発生させることと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させることと、
前記フローバインディングルールをホームエージェントにシグナリングすることとを含む請求項１記載の方法。
【請求項１３】
デバイスにおけるインテリジェントな無線選択のための装置において、
前記装置は、
無線アクセスを望むアプリケーションからソケットコンポーネントへのネットワーキング関数コールを傍受する手段と、
前記傍受されたネットワーキング関数コールおよび選択基準に基づいて、複数の候補の無線から無線を選択する手段と、
前記無線を前記アプリケーションにバインドさせる手段とを具備する装置。
【請求項１４】
前記傍受する手段は、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを傍受する手段を備える請求項１３記載の装置。
【請求項１５】
前記傍受する手段は、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせる手段を備え、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む請求項１４記載の装置。
【請求項１６】
前記バインドさせる手段は、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせる手段を備える請求項１５記載の装置。
【請求項１７】
前記傍受する手段は、集中化された無線制御装置が前記無線を選択するための要求を発生させる手段を備える請求項１３記載の装置。
【請求項１８】
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリク基準とのうちの少なくとも１つを含む請求項１３記載の装置。
【請求項１９】
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む請求項１３記載の装置。
【請求項２０】
前記ネットワーキング関数コールは、ソケットレイヤコールである請求項１３記載の装置。
【請求項２１】
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである請求項２０記載の装置。
【請求項２２】
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである請求項１３記載の装置。
【請求項２３】
前記バインドさせる手段は、
エフェメラルなポートを前記無線に割り振る手段と、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させる手段と、
前記フローバインディングルールをホームエージェントにシグナリングする手段とを備える請求項１３記載の装置。
【請求項２４】
前記バインドさせる手段は、
前記無線に関係付けられるべきであるＩＰｖ６アドレスを発生させる手段と、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させる手段と、
前記フローバインディングルールをホームエージェントにシグナリングする手段とを備える請求項１３記載の装置。
【請求項２５】
デバイスにおけるインテリジェントな無線選択のための装置において、
前記装置は、
無線アクセスを望むアプリケーションからソケットコンポーネントへのネットワーキング関数コールを傍受し、前記傍受されたネットワーキング関数コールおよび選択基準に基づいて複数の候補の無線から無線を選択するように構成されている接続性エンジンと、
前記無線を前記アプリケーションにバインドさせるように構成されているソケットコンポーネントとを具備する装置。
【請求項２６】
前記接続性エンジンは、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを傍受するように構成されている請求項２５記載の装置。
【請求項２７】
前記プリロードライブラリは、ネットワーキングライブラリよりも高い優先順位で、前記実行環境においてリンクされ、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む請求項２６記載の装置。
【請求項２８】
前記ソケットコンポーネントは、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせるように構成されている請求項２７記載の装置。
【請求項２９】
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリク基準とのうちの少なくとも１つを含む請求項２５記載の装置。
【請求項３０】
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む請求項２５記載の装置。
【請求項３１】
前記ネットワーキング関数コールは、ソケットレイヤコールである請求項２５記載の装置。
【請求項３２】
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである請求項３１記載の装置。
【請求項３３】
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである請求項２５記載の装置。
【請求項３４】
前記接続性エンジンは、
エフェメラルなポートを前記無線に割り振るようにと、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングするように構成されている請求項２５記載の装置。
【請求項３５】
前記接続性エンジンは、
前記無線に関係付けられるべきであるＩＰｖ６アドレスを発生させるようにと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングするように構成されている請求項２５記載の装置。
【請求項３６】
デバイスにおけるインテリジェントな無線選択のためのコンピュータ読み取り可能記憶媒体において、
無線アクセスを望むアプリケーションからソケットコンポーネントへのネットワーキング関数コールを傍受するための、プロセッサによって実行されるコードと、
前記傍受されたネットワーキング関数コールおよび選択基準に基づいて複数の候補の無線から無線を選択するための、プロセッサによって実行されるコードと、
前記無線を前記アプリケーションにバインドさせるための、プロセッサによって実行されるコードとを具備するコンピュータ読み取り可能記憶媒体。
【請求項３７】
前記コードは、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを前記プロセッサに傍受させるように構成されている請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項３８】
前記コードは、前記プロセッサに、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせるように構成され、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む請求項３７記載のコンピュータ読み取り可能記憶媒体。
【請求項３９】
前記コードは、前記プロセッサに、前記ネットワーキングライブラリの１つ以上の関数を利用させて、前記無線を前記アプリケーションにバインドさせるように構成されている請求項３８記載のコンピュータ読み取り可能記憶媒体。
【請求項４０】
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリク基準とのうちの少なくとも１つを含む請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項４１】
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項４２】
前記ネットワーキング関数コールは、ソケットレイヤコールである請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項４３】
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである請求項４２記載のコンピュータ読み取り可能記憶媒体。
【請求項４４】
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項４５】
前記コードは、
前記プロセッサに、
エフェメラルなポートを前記無線に割り振らせるようにと、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングさせるように構成されている請求項３６記載のコンピュータ読み取り可能記憶媒体。
【請求項４６】
前記コードは、
前記プロセッサに、
前記無線に関係付けられるべきであるＩＰｖ６アドレスを発生させるようにと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングさせるように構成されている請求項３６記載のコンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【背景】
【０００１】
米国特許法第１１９条の下での優先権の主張
本特許出願は、「レガシーおよび非レガシーアプリケーションでのインターフェース選択を促進する方法および装置」と題する、２０１０年２月１６日に出願された米国仮出願番号第６１／３０５，０８７号に対して優先権を主張している。この出願は、その譲受人に譲渡され、参照によりここに明確に組み込まれている。
【０００２】
本特許出願は、「フローモビリティを促進するシステム、装置、および方法」と題する、２０１０年２月１６日に出願された米国仮出願番号第６１／３０５，０９１号に対して優先権を主張している。この出願は、その譲受人に譲渡され、参照によりここに明確に組み込まれている。
【０００３】
分野
本出願は、一般的に、ワイヤレス通信システムの動作に関し、さらに詳細に述べると、インテリジェントな無線選択をレガシーおよび非レガシーアプリケーションに提供するための方法および装置に関する。
【０００４】
背景
幅広い範囲のアドオンサービスおよび機能をワイヤレスデバイスに提供するように動作する、アプリケーション（Ａｐｐ）またはデバイスアプレットが、今日、利用可能である。例えば、今日、ワイヤレスデバイスは、デバイスアプレットをダウンロードして起動し、ショッピング、サーチ、位置特定、走行ナビゲーション、または、他の機能のアレイのような、付加価値機能を実行することができる。ネットワークおよびアプリケーションプロバイダーは、一般的に、追加料金でこれらのデバイスアプレットをデバイスユーザに提供する。したがって、デバイスアプレットの使用は、ワイヤレスデバイスの機能性およびユーザビリティを向上させ、デバイス自体上で元々入手可能でない機能および利便性をデバイスユーザに提供する。
【０００５】
典型的に、ワイヤレスデバイスは、複数の無線のうちの任意のものを使用して、１つ以上の通信ネットワークとインターフェースする。例えば、ワイヤレスデバイスは、セルラ、ＷｉＦｉ（登録商標）、ブルートゥース（登録商標）、または他のタイプの無線アクセス技術を使用して通信を提供するさまざまな無線を含んでいてもよい。したがって、ワイヤレスデバイス上で実行するアプリケーションは、典型的に、そのアプリケーションが適切なネットワークとの通信に使用するだろう、無線および関係する無線チャネルを決定するデフォルトルーティングにより提供される。
【０００６】
しかしながら、所定のアプリケーションが通信する無線をインテリジェントに選択することへの関心が増加している。これは、１つには、マルチ無線デバイス（例えば、３Ｇ／ＷｉＦｉデバイス）の数の増加と、オペレータの容量問題を生むことがあるネットワークトラフィックの増加とによるものである。したがって、このような容量問題に関しては、オフロードすることが可能であってアプリケーション性能を著しく低減させない場合には、または、インテリジェントな無線選択に基づいて実際にアプリケーション性能を改善し得る場合には、トラフィックを代替的な無線にオフロードすることが望ましいだろう。
【０００７】
残念なことに、無線選択に影響を及ぼすための提案された解決策は、効率が悪くてコストがかかり、レガシーアプリケーションに適切ではないかもしれない。例えば、１つの提案された解決策は、使用する好ましい無線を明示的に示すように、すべてのアプリケーションを変更する必要があるだろう。それぞれのワイヤレスデバイスにおけるアプリケーションは、無線選択を指定するためにアップグレードする必要があり、それぞれのデバイスにおいて利用可能な無線リソースに対処しなければならないだろう点で、この解決策は、非常に効率が悪くてコストがかかるだろう。さらには、このような解決策は、このようなアップグレードが可能でないレガシーアプリケーションで実現可能でないかもしれない。
【０００８】
したがって、それぞれのアプリケーションが、利用可能な最も望ましい無線を利用するように、インテリジェントな無線選択をレガシーおよび非レガシーアプリケーションの両方に提供するために動作する、効率がよくてコスト効率がよいメカニズムを持つことが望ましいだろう。
【概要】
【０００９】
１つ以上の態様では、インテリジェントな無線選択システムは、方法および装置を含み、それぞれのアプリケーションが、利用可能な最も望ましい無線を利用するために、インテリジェントな無線選択をレガシーおよび非レガシーアプリケーションの両方に提供するように動作する。
【００１０】
ある態様では、デバイスにおけるインテリジェントな無線選択のための方法を提供する。この方法は、無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受することと、選択基準に基づいて、複数の候補の無線から無線を選択することと、無線をアプリケーションにバインドさせることとを含む。
【００１１】
ある態様では、デバイスにおけるインテリジェントな無線選択のための装置を提供する。この装置は、無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受する手段と、選択基準に基づいて、複数の候補の無線から無線を選択する手段と、無線をアプリケーションにバインドさせる手段とを具備する。
【００１２】
ある態様では、デバイスにおけるインテリジェントな無線選択のための装置を提供する。この装置は、無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受するようにと、選択基準に基づいて、複数の候補の無線から無線を選択するように構成されている接続性エンジンと、無線をアプリケーションにバインドさせるように構成されているソケットコンポーネントとを具備する。
【００１３】
ある態様では、デバイスにおけるインテリジェントな無線選択のためのコンピュータプログラムプロダクトを提供する。コンピュータプログラムプロダクトは、無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受するためにプロセッサによって実行可能なコードと、選択基準に基づいて、複数の候補の無線から無線を選択するためにプロセッサによって実行可能なコードと、無線をアプリケーションにバインドさせるためにプロセッサによって実行可能なコードとを具現化するコンピュータ読み取り可能媒体を具備する。
【００１４】
以下で述べた、図面の簡単な説明、説明、および特許請求の範囲のレビューの後に、他の態様は明らかになるだろう。
【図面の簡単な説明】
【００１５】
ここで記述した先述の態様は、付随する図面とともに考慮するときに以下の説明を参照することによって、より容易に明らかになるだろう。  
【図１】図１は、インテリジェントな無線選択システムの態様を図示している例示的なネットワーク環境を示している。
【図２】図２は、インテリジェントな無線選択のための、例示的なデバイスアーキテクチャを示している。
【図３】図３は、インテリジェントな無線選択を提供するように構成されている例示的なデバイスを示している。
【図４】図４は、インテリジェントな無線選択を提供するための例示的な方法を示している。
【図５】図５は、インテリジェントな無線選択を提供する例示的な装置を示している。
【図６】図６は、インテリジェントな無線選択システムによって提供されるフローモビリティの態様を図示している、例示的な通信ネットワークを示している。
【図７】図７は、フローモビリティを提供するための例示的な方法を示している。
【図８】図８は、フローモビリティを提供するための例示的な方法を示している。
【説明】
【００１６】
以下の記述は、それぞれのアプリケーションが、利用可能な最も望ましい無線を利用するように、インテリジェントな無線選択をレガシーおよび非レガシーアプリケーションの両方に提供するように動作するインテリジェントな無線選択システムのインプリメンテーションを記述する。
【００１７】
コード分割多元接続（ＣＤＭＡ）ネットワーク、時分割多元接続（ＴＤＭＡ）ネットワーク、周波数分割多元接続（ＦＤＭＡ）ネットワーク、直交ＦＤＭＡ（ＯＦＤＭＡ）ネットワーク、単一搬送波ＦＤＭＡ（ＳＣ−ＦＤＭＡ）ネットワーク等のような、さまざまなワイヤレス通信ネットワークに対して、ここで記述した技術を使用してもよい。「ネットワーク」および「システム」という用語は、互換性があるように使用されることが多い。ＣＤＭＡネットワークは、ユニバーサル地上無線アクセス（ＵＴＲＡ）、ＣＤＭＡ２０００等のような無線技術を実現してもよい。ＵＴＲＡは、ワイドバンド−ＣＤＭＡ（Ｗ−ＣＤＭＡ）および低チップレート（ＬＣＲ）を含む。ＣＤＭＡ２０００は、ＩＳ−２０００、ＩＳ−９５、およびＩＳ−８５６標準規格をカバーする。ＴＤＭＡネットワークは、グローバルシステムフォーモバイル通信（ＧＳＭ）（登録商標）のような無線技術を実現してもよい。ＯＦＤＭＡネットワークは、進化したＵＴＲＡ（Ｅ−ＵＴＲＡ）、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１５、ＩＥＥＥ８０２．１６、ＩＥＥＥ８０２．２０、フラッシュ−ＯＦＤＭ等のような無線技術を実現してもよい。ＵＴＲＡ、Ｅ−ＵＴＲＡ、およびＧＳＭは、ユニバーサル移動体電気通信システム（ＵＭＴＳ）の一部である。ロングタームエボリューション（ＬＴＥ）は、Ｅ−ＵＴＲＡを使用する、やがて登場するリリースのＵＭＴＳである。ＵＴＲＡ、Ｅ−ＵＴＲＡ、ＧＳＭ、ＵＭＴＳ、およびＬＴＥは、「第３世代パートナーシッププロジェクト」（３ＧＰＰ）と名付けられている機関による文書中に記述されている。ＣＤＭＡ２０００は、「第３世代パートナーシッププロジェクト２」（３ＧＰＰ２）と名付けられている機関による文書中に記述されている。これらのさまざまな無線技術および標準規格は、技術的に知られている。
【００１８】
図１は、インテリジェントな無線選択システムの態様を図示している、例示的なネットワーク環境１００を示している。ネットワーク環境１００は、デバイス１０２と、通信ネットワーク１０４とを含む。デバイス１０２は、対応する無線チャネル１０６を使用して、ネットワーク１０４と通信するための複数の無線を含む。デバイス１０２は、特定のアプリケーションによって使用されるべき特定の無線を選択するように動作するインテリジェントな無線選択システム１０８も具備する。
【００１９】
動作の間、デバイス１０２が、複数の無線のうちの任意のものを使用して、ネットワーク１０４とインターフェースできるアプリケーションを実行する。例えば、実行するアプリケーションは、ネットワーク１０４との通信のためにネットワークリソースを要求するために、ソケットレイヤコールのようなネットワーキング関数コールを発行する。従来のシステムは、典型的に、デフォルトルーティングコンフィギュレーションに基づいてソケットレイヤコールを処理して、予め定められた無線リソースをアプリケーションにバインドさせる。
【００２０】
しかしながら、さまざまなインプリメンテーションでは、インテリジェントな無線選択システムは、アプリケーションからのネットワーキング関数コールを傍受して、アプリケーションによる使用に適切な無線を選択するように動作する。その後、アプリケーションをネットワークリソース（すなわち、選択されている無線）にバインドさせるための、バインディングプロセスを実行する。インテリジェントな無線選択システムは、アプリケーションの通常の動作に応答して実行して無線リソースを使用するので、このシステムは、アプリケーションを何ら変更またはアップグレードをせずに、レガシーおよび非レガシーアプリケーションの両方で動作することができる。インテリジェントな無線選択システムのより詳細な記述を以下で提供する。
【００２１】
図２は、インテリジェントな無線選択システムを提供する、例示的なデバイスアーキテクチャ２００を示している。アーキテクチャ２００は、接続性エンジン２０２と、アプリケーションレイヤ２０４と、ソケットレイヤ２０６と、無線ユニット２０８とを備えている。アプリケーションレイヤ２０４は、さまざまな機能を提供するように、および、無線ユニット２０８の無線のうちの１つ以上を使用してネットワークの外部と通信するように実行し得る、アプリケーションを含む。ソケットレイヤ２０６は、特定のアプリケーションと無線との間のバインディングを確立するためのコール（または、要求）を発行する。ここで提示したさまざまな態様にしたがって、接続性エンジン２０２が、インテリジェントな無線選択を提供するように動作する。
【００２２】
動作の間、接続性エンジン２０２が、アプリケーションレイヤ２０４におけるアプリケーションからの、ソケットレイヤコールのようなネットワーキング関数コールを傍受する。いったん、ネットワーキング関数コールを傍受すると、接続性エンジン２０２は、無線ユニット２０８内の複数の候補の無線から、好適な無線／インターフェースを選択するように動作する。例えば、接続性エンジン２０２は、さまざまな選択基準に基づいて、無線を選択する。無線／インターフェースを選択するとき、接続性エンジン２０２は、アプリケーションと、選択している無線／インターフェースとの間で接続を確立するために、ソケットレイヤ２０６のソケットレイヤ関数を使用する。例えば、ソケットレイヤ関数は、接続関数「Ｃｏｎｎｅｃｔ（）」、バインド関数「Ｂｉｎｄ（）」、セットソケットオプション関数「Ｓｅｔｓｏｃｋｏｐｔ（）」、および／または、他の何らかの適したソケットレイヤ関数を含んでいてもよい。
【００２３】
したがって、デバイスにおいて実行するレガシーおよび非レガシーアプリケーションの両方が、最も好ましい無線／インターフェースにバインドすることができるように、デバイスアーキテクチャ２００は、インテリジェントな無線選択を提供する。
【００２４】
図３は、インテリジェントな無線選択を提供する、例示的なワイヤレスデバイス３００を示している。デバイス３００は、プロセッサ３０２と、メモリ３０４と、無線コンポーネント３１２と、アプリケーションレイヤコンポーネント３０６と、ソケットレイヤコンポーネント３１０と、接続性エンジンコンポーネント３０８とを備え、これらすべては、通信バス３１４を使用して通信するように結合されている。デバイス３００は、１つのインプリメンテーションに過ぎないことと、他のインプリメンテーションが可能であることとに留意すべきである。
【００２５】
１つの態様では、プロセッサ３０２は、ＣＰＵ、プロセッサ、ゲートアレイ、ハードウェアロジック、メモリエレメント、および／または、ハードウェア実行ソフトウェアのうちの少なくとも１つを含む。デバイス３００において実行するアプリケーションが、最も望ましい無線にバインドすることができるように、プロセッサ３０２は、デバイス３００の動作を制御するように動作する。１つのインプリメンテーションでは、プロセッサ３０２は、複数の関数のうちの任意のものを実行することに関連するコンピュータ読み取り可能な命令を実行するように構成されている。例えば、インテリジェントな無線選択を達成するために、プロセッサ３０２は、デバイス３００から受信または通信した情報を解析するように動作する。別の態様では、プロセッサ３０２は、インテリジェントな無線選択を達成するために、メモリ３０４、無線コンポーネント３１２、アプリケーションレイヤコンポーネント３０６、ソケットレイヤコンポーネント３１０、および／または、接続性エンジンコンポーネント３０８によって利用できる情報を発生させるように動作する。
【００２６】
無線コンポーネント３１２は、複数の無線／インターフェースを提供するように構成されている、ハードウェアおよび／またはプロセッサ実行ソフトウェアを含み、この複数の無線／インターフェースは、複数の無線チャネル３１６を使用する外部通信ネットワークのような複数の外部エンティティとデバイス３００をインターフェースするために使用することができる。例えば、無線コンポーネント３１２は、セルラ、ＷｉＦｉ、ブルートゥースを使用して通信するための無線／インターフェース、または、無線チャネル３１６を使用して通信ネットワークと通信するための他の何らかの技術を提供する。
【００２７】
アプリケーションレイヤコンポーネント３０６は、デバイス３００上で１つ以上のアプリケーションを記憶および／または実行するように構成されている、ハードウェアおよび／またはプロセッサ実行ソフトウェアを備える。１つのインプリメンテーションでは、アプリケーションレイヤコンポーネント３０６は、外部ネットワークまたはシステムとの通信の目的のために無線／インターフェースへの接続を要求するような、ネットワーキングサービスを要求するためのネットワーキング関数コールをアプリケーションが開始することを可能にするように構成されている。
【００２８】
ソケットレイヤコンポーネント３１０は、ソケットレイヤ関数を実行するように構成されている、ハードウェアおよび／またはプロセッサ実行ソフトウェアを含む。１つのインプリメンテーションでは、ソケットレイヤ関数は、Ｃｏｎｎｅｃｔ（）、Ｂｉｎｄ（）、およびＳｅｔｓｏｃｋｏｐｔ（）のような関数を含む。Ｃｏｎｎｅｃｔ（）関数は、アプリケーションと特定の無線／インターフェースとの間の接続を確立するように動作する。例えば、無線コンポーネント３１２によって提供される複数の候補の無線から、特定の無線／インターフェースを選択することができる。ある態様では、ソケットレイヤコンポーネント３１０は、さまざまなソケットレイヤ関数またはコマンドを実行するように構成されている。
【００２９】
接続性エンジンコンポーネント３０８は、アプリケーションによる使用のために特定の無線を選択するために、システムリソースの評価を実行するように構成されている、ハードウェアおよび／またはプロセッサ実行ソフトウェアを含む。さまざまなインプリメンテーションでは、接続性エンジンコンポーネント３０８は、以下の選択基準のうちの１つ以上に基づいて特定の無線を選択するように、集中化された無線制御装置として構成されている。  
１．ユーザポリシー − デバイスにおいて実行しているアプリケーションによる無線アクセスに関する、デバイスユーザによるポリシーセット
２．オペレータポリシー − デバイスまたはアプリケーションによるネットワークアクセスに関する、ネットワークオペレータによるポリシーセット
３．無線メトリクス − 特定のアプリケーションまたはオペレーティング環境に対して最も好ましい無線を選択するために使用される、無線性能の、または、他のタイプの測定
４．アプリケーション要件 − 帯域幅要件またはレイテンシー／性能要件のような、要求アプリケーションに関係する要件
５．ネットワークユーザビリティ − 特定の無線インターフェース上での、特定のネットワークの利用可能性に関する情報
６．ベンダーにより供給されるメトリクス − 特定の無線インターフェースに対して利用可能なスループットおよびレイテンシーに対する、受信信号強度およびパケット損失レートのような無線メトリクスから変換するための情報
７．アクセスポイントの利用可能性 − 他のデバイスから、または、無線リンクを構成することはできるがパケットをネットワークに転送しないデバイスから、多くのトラフィックによって輻輳されるアクセスポイントに対する一意的な識別子を指定する情報
【００３０】
メモリ３０４は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、あるいは、デバイス３００において情報を記憶および取得することを可能にするように動作する他の何らかのタイプのメモリデバイスを含む。１つのインプリメンテーションでは、メモリ３０４は、プロセッサ３０２によって実行されるコンピュータ読み取り可能命令を記憶するように構成される。メモリ３０４はまた、プロセッサ３０２、無線コンポーネント３１２、アプリケーションレイヤコンポーネント３０６、ソケットレイヤコンポーネント３１０、および／または、接続性エンジンコンポーネント３０８のうちの任意のものによって発生されたデータを含む、複数の他のタイプのデータのうちの任意のものを記憶するように構成されてもよい。メモリ３０４は、ランダムアクセスメモリ、バッテリーがバックアップされるメモリ、ハードディスク、磁気ディスク等を含む、多数の異なるコンフィギュレーションで構成することができる。圧縮および自動的バックアップのようなさまざまな機能も、メモリ３０４上で実現することができる。
【００３１】
メモリ３０４は、プリロードライブラリ３１８と、ネットワーキングライブラリ３２０とを記憶するように構成されている。１つのインプリメンテーションでは、ネットワーキングライブラリ３２０は、ＰＯＳＩＸまたはＢｅｒｋｅｌｅｙソケットのアプリケーションプログラミングインターフェース（ＡＰＩ）を含み、このＰＯＳＩＸまたはＢｅｒｋｅｌｅｙソケットのアプリケーションプログラミングインターフェース（ＡＰＩ）は、最も一般的に、コンピュータネットワークをわたる通信に対して、プロセス間通信を実行する、Ｃプログラミング言語のアプリケーションを開発するための関数を含む。例えば、ＰＯＳＩＸ ＡＰＩは、Ｃｏｎｎｅｃｔ（）、Ｂｉｎｄ（）、およびＳｅｔｓｏｃｋｏｐｔ（）のような関数を含む。
【００３２】
アプリケーションレイヤ３０６におけるアプリケーションからのソケットコールを傍受するために、プリロードライブラリ３１８が使用される。例えば、プリロードライブラリ３１８は、ネットワーキングライブラリ３２０によって提供されるＡＰＩ関数の少なくともサブセットを含み、ネットワーキングライブラリ３２０よりも高い優先順位で、実行環境にリンクされる。
【００３３】
動作の間、システムは、デバイスが最初にブーストアップするときにリンカが使用する環境を構成する。１つのインプリメンテーションでは、リンカは、通常のライブラリリンク付けを開始する前に、ライブラリに対する環境をチェックしてロードするように動作する。典型的に、リンカは、ネットワーキングＡＰＩを提供するネットワーキングライブラリ３２０をロードする。アプリケーションは、そのインターフェースを使用して、ソケットを生成および接続して、ネットワーク通信を確立する。例えば、１つのインプリメンテーションでは、リンカは、アプリケーションと、その依存性とをスキャンし、それゆえに、すべてのものがメモリ中にロードされる。リンカは、他のライブラリの前に、プリロードライブラリ３１８をロードするように構成されており、ルックアップを配置し、それゆえ、後続してロードされたライブラリは、満たされてプリロードライブラリ３１８を使用することができる。
【００３４】
プリロードライブラリ３１８は、ネットワーキングライブラリ３２０が提供するＡＰＩソケットの少なくともサブセットを含む。アプリケーションがネットワーキング関数コールを行って、ソケットを生成または接続するとき、このコールは、プリロードライブラリ３１８によって処理（または、傍受）される。例えば、アプリケーションは、ＩＰアドレス、宛先、およびＣｏｎｎｅｃｔ（）関数に提供されるファイル記述子のような引数または属性を持つＣｏｎｎｅｃｔ（）関数に対して関数ポインタを提供する。
【００３５】
プリロードライブラリ３１８は、その後、指定された接続に対して最も適切なネットワークインターフェースを選ぶための要求を、集中化された無線制御エンティティに対して発生させる。例えば、プリロードライブラリ３１８は、使用されるべき適切な無線を決定するための要求を、接続性エンジンコンポーネント３０８に送る。適切な無線が選択された後、プリロードライブラリ３１８に制御が戻される前に接続セットアップを完了させるために、ネットワーキングライブラリ３２０のソケットＡＰＩに対するコールが実行される。例えば、接続性エンジンコンポーネント３０８が、ネットワーキングライブラリ３２０の関数をコールし、選択されている無線を要求アプリケーションにバインドさせるように動作する。
【００３６】
接続性エンジンコンポーネント３０８は、複数の候補の無線から、さまざまな方法で無線をインテリジェントに選択するように構成されている。例えば、接続性エンジンコンポーネント３０８は、上記の選択基準のうちの１つ以上を使用して、無線を選択するように構成されていてもよい。いったん、無線を選択すると、接続性エンジンコンポーネント３０８は、無線をアプリケーションにバインドさせる。例えば、１つのインプリメンテーションでは、バインディングは、元々のネットワーキングライブラリ３２０へのコールによって実行される。ランタイムリンカが、特定のライブラリ識別子と関数識別子とを指定して、この情報を記憶することが可能である、エキスパートインターフェースを提供する。したがって、接続性エンジンコンポーネント３０８と、プリロードライブラリ３１８とにおける関数は、Ｂｉｎｄ（）関数のような関数に容易にアクセスして、ネットワーキングライブラリ３２０において、選択されている無線をアプリケーションにバインドさせることができる。インテリジェントな無線選択を提供するためのデバイス３００の動作のより詳細な記述を、以下で提供する。
【００３７】
さまざまなインプリメンテーションでは、インテリジェントな無線選択システムは、コンピュータ読み取り可能媒体上で１つ以上のプログラム命令（命令）または「コード」のセットを記憶または具現化させる、コンピュータプログラムプロダクトを含む。少なくとも１つのプロセッサによって、例えば、プロセッサ３０２によってコードが実行されるとき、それらの実行は、ここで記述した、インテリジェントなインターフェース選択システムの機能を提供するように、プロセッサ３０２にデバイス３００を制御させる。例えば、コンピュータ読み取り可能媒体は、フロッピー（登録商標）ディスク、ＣＤＲＯＭ、メモリカード、ＦＬＡＳＨメモリデバイス、ＲＡＭ、ＲＯＭ、あるいは他の何らかのタイプのメモリデバイスまたはデバイス３００にインターフェースするコンピュータ読み取り可能媒体を含む。別の態様では、コードのセットは、外部デバイスまたは通信ネットワークリソースからデバイス３００中にダウンロードされてもよい。実行されるときに、コードのセットは、ここで記述した、インテリジェントなインターフェース選択システムの態様を提供するように動作する。
【００３８】
図４は、インテリジェントな無線選択を提供するための例示的な方法４００を示している。明確にするために、図３中で示されているデバイス３００を参照して、以下で方法４００を記述する。１つのインプリメンテーションでは、プロセッサ３０２が、デバイス３００の機能的なエレメントを制御して、以下で記述する関数を実行するためのコードの１つ以上のセットを実行する。
【００３９】
ブロック４０２において、アプリケーションが起動される。アプリケーションは、アプリケーションレイヤコンポーネント３０６の一部である、レガシーまたは非レガシーアプリケーションであってもよい。例えば、アプリケーションは、無線コンポーネント３１２において利用可能な無線を使用してワイヤレスネットワークに接続するために、ネットワーキング関数コールを発生させるネットワークブラウザであってもよい。
【００４０】
ブロック４０４において、プリロードライブラリが構成およびロードされる。例えば、プリロードライブラリ３１８は、典型的に、通信ネットワークを評価するためにアプリケーションによって使用される、ネットワーキングライブラリ３２０において提供されるネットワーキング関数のサブセットを含む。プリロードライブラリ３１８におけるネットワーキング関数は、デバイスにおいて実行するアプリケーションからのネットワーキング関数コールを傍受するように構成されている。例えば、プリロードライブラリ３１８は、デバイス３００において実行するアプリケーションによるソケットコールを傍受するために使用できるＰＯＳＩＸソケット関数を含む。１つのインプリメンテーションでは、プリロードライブラリ３１８は、メモリ３０４中に記憶されている。
【００４１】
１つのインプリメンテーションでは、プリロードライブラリ３１８の関数は、コーリングアプリケーションから渡された引数を受け取り、これらの引数を使用して、接続性エンジンコンポーネント３０８に対する要求を発生させて、アプリケーションの目的に最良に適した無線を選択するように構成されている。
【００４２】
ブロック４０６において、プリロードライブラリが実行環境にリンクされる。例えば、プロセッサ３０２が、ネットワーキングライブラリ３２０よりも高い優先順位で、プリロードライブラリ３１８を実行環境にリンクさせる。したがって、アプリケーションによるネットワーキング関数コールは、プリロードライブラリ３１８における関数によって傍受および処理され、ネットワーキングライブラリ３２０における類似した関数によって処理されないだろう。
【００４３】
ブロック４０８において、アプリケーションからのネットワーキング関数コールを傍受する。例えば、ネットワーキング関数コールは、Ｃｏｎｎｅｃｔ（）関数のようなＰＯＳＩＸソケット関数コールであってもよい。アプリケーションは、外部ネットワークとの通信を可能にするように無線に接続するために、ネットワーキング関数コールを発生させる。ネットワーキングライブラリ３２０よりも高い優先順位で、プリロードライブラリ３１８を実行環境にリンクさせることにより、ネットワーキング関数コールが、プリロードライブラリ３１８における関数によって傍受される（または、処理される）。
【００４４】
ブロック４１０において、プリロードライブラリ３１８におけるコールされた関数が、アプリケーションによる使用に適切な無線を選択するための選択要求を接続性エンジンコンポーネント３０８に対して発生させる。この要求は、アプリケーションによる使用に適切な無線を選択するための、接続性エンジンコンポーネント３０８によって使用される選択基準の一部である何らかの情報を含む。
【００４５】
ブロック４１２において、選択基準が評価される。１つのインプリメンテーションでは、接続性エンジンコンポーネント３０８が、上述した選択基準を評価するように動作する。例えば、接続性エンジン３０８が、無線コンポーネント３１２と通信して、選択基準の一部である無線メトリクスを評価する。
【００４６】
ブロック４１４において、選択基準の評価に基づいて無線が選択される。例えば、接続性エンジンコンポーネント３０８が、選択基準に最良にマッチングする無線を選択するように動作する。
【００４７】
ブロック４１６において、選択されている無線がアプリケーションにバインドされる。例えば、１つのインプリメンテーションでは、接続性エンジンコンポーネント３０８が、ネットワーキングライブラリ３２０のＢｉｎｄ（）関数をコールして、選択されている無線をアプリケーションにバインドさせる。例えば、接続性エンジンコンポーネント３０８は、ネットワーキングライブラリ３２０と、プリロードライブラリ３１８によって傍受されずに、どのようにその関数に直接的にアクセスするかとを認識する。
【００４８】
ブロック４１８において、アプリケーションが、その後、ネットワーク通信のために選択されているその無線を利用する。
【００４９】
オプション的な動作では、方法は、ブロック４１２に進み、ブロック４１２では、接続性エンジンコンポーネント３０８が、現在の無線が選択基準に最良にマッチングするか否かを決定するための、選択基準の周期的評価を実行するように動作する。選択基準の別の評価の後に、現在の無線以外の無線が、選択基準に最良にマッチングすることが決定された場合、接続性エンジン３０８は、アプリケーションをトリガする手段としての接続を消失させ、新しい選択のために、異なる無線を選択するように接続を再開させることができる。したがって、オプション的動作は、選択基準を周期的に評価して、最も適切な無線を選択し、所望の通信を実施することを保証することを可能にする。
【００５０】
したがって、方法４００は、レガシーおよび非レガシーアプリケーションでの使用のためのインテリジェントな無線選択を提供する。方法４００は、１つのインプリメンテーションに過ぎないことと、方法４００の動作は、再構成してもよく、またはそうでない場合には、他のインプリメンテーションが可能であるように変更してもよいこととに留意すべきである。
【００５１】
図５は、インテリジェントな無線選択を提供する、例示的な装置５００を示している。例えば、装置５００は、図１中で示されているデバイス１０２としての使用に適している。ある態様では、装置５００は、ここで記述したような、インテリジェントな無線選択システムの態様を提供するように構成されている１つ以上のモジュールを備える少なくとも１つの集積回路によって実現される。例えば、ある態様では、それぞれのモジュールは、ハードウェアおよび／またはハードウェア実行ソフトウェアを含む。
【００５２】
装置５００は、無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受する手段（５０２）を備える第１のモジュールを備え、この第１のモジュールは、ある態様では、プリロードライブラリ３１８を含む。
【００５３】
装置５００は、選択基準に基づいて、複数の候補の無線から無線を選択する手段（５０４）を備える第２のモジュールも備え、この第２のモジュールは、ある態様では、接続性エンジンモジュール３０８を含む。
【００５４】
装置５００は、その無線をアプリケーションにバインドさせる手段（５０６）を備える第３のモジュールも備え、この第３のモジュールは、ある態様では、接続性エンジンモジュール３０８を含む。
【００５５】
フローモビリティ
インテリジェントなインターフェース選択に加えて、システムは、以下に記述するように、フローモビリティを提供するように動作する。
【００５６】
図６は、インテリジェントな無線選択システムによって提供されるフローモビリティの態様を図示している例示的な通信ネットワーク６００を示している。通信ネットワーク６００は、１つ以上の通信インターフェースを使用して、ネットワーク６０４と通信するように構成されているデバイス６０２を含む。例えば、通信インターフェースは、セルラ、ＷｉＦｉ、ブルートゥース、および他の何らかの適した通信技術を含む。
【００５７】
動作の間、デバイス６０２におけるアプリケーションは、ネットワークリソースと通信するための接続要求を発生させる。先に説明したように、システム１０８は、要求を満たすためにインテリジェントなインターフェース選択を実行する。フローモビリティの態様を提供するために、システムは、インターフェースから選択された特定の通信インターフェースを指定して、ホームエージェント６０６とデバイス６０２との間でルーティングするためのパケットをカプセル化するフローバインディングルールを動的に発生させるように動作する。
【００５８】
従来のシステムでは、ＩＰフローバインディングは、通常、ソースＩＰアドレスと、宛先ＩＰアドレスと、ソースポートと、宛先ポートと、プロトコルとを含む５つ組中に記述されている。したがって、この記述は、ハンドセット６０２によってホームエージェント６０６に提供され、この記述にマッチングするパケットは、それに応じてホームエージェント６０６によってルーティングされるだろう。残念なことに、変更する組がソースポートだけであっても５つ組の要素のすべてが送信されるので、５つ組を使用する登録フローは、帯域幅効率が良くないかもしれない。
【００５９】
さまざまなインプリメンテーションでは、最も適切な無線／インターフェースを通してデータフローを送信することができるように、システムは、接続を開始するときに、フローバインディングルールを動的に発生させるように動作する。例えば、１つのインプリメンテーションでは、システムが、ネットワーク通信に対してアプリケーションによって使用されるべきエフェメラルポートを割り振る。システム１０８は、その後、エフェメラルポートのみに基づいて、フローバインディングルールを動的に発生させる。このフローバインディングルールは、特定のデータフローをエフェメラルポートと関係付けるべきことと、特定の無線／インターフェース上で送信すべきこととを示している。バインディングルールにおいてエフェメラルポートのみを利用することによって、５つ組すべてをホームエージェントに送信する必要がなく、これは、送信帯域幅を節約するので従来のシステムよりも効率的である。
【００６０】
別のインプリメンテーションでは、接続のために、ＩＰｖ６アドレスが動的に発生される。例えば、モバイルノードプレフィックスに属する接続ごとのＩＰｖ６アドレスが発生され、モバイルＩＰアドレスに割り当てられる。次に、接続ごとのＩＰｖ６アドレスのみに基づいて、フローバインディングルールが動的に発生される。
【００６１】
上記のいずれのケースにおいても、バインディングルールは、その後、ネットワーク６０４上のホームエージェント（ＨＡ）６０６にシグナリングされる。ＨＡ６０６は、バインディングルールにしたがって、パケットをデバイスにルーティングするように動作する。例えば、対応ノード（ＣＮ）６０８からデバイスに送られたデータパケットは、ＨＡ６０６において受信され、その後、バインディングルールを使用してデバイス６０２にルーティングされる。以下の方法は、インテリジェントな無線選択システムによって提供されるフローモビリティの態様を記述する。
【００６２】
図７は、フローモビリティを提供するための例示的な方法７００を示している。明確にするために、図３中で示されているデバイス３００と、図６中で示されているネットワーク６００とを参照して、方法７００を以下で記述する。１つのインプリメンテーションでは、プロセッサ３０２が、以下で記述した関数を実行するために、デバイス３００の機能的なエレメントを制御するためのコードの１つ以上のセットを実行する。
【００６３】
ブロック７０２において、アプリケーションによってソケットが生成される。例えば、デバイス６０２において実行するアプリケーションが、ネットワーク６０４の一部であるネットワークリソースからデータフローを受信するためのソケットを生成する。
【００６４】
ブロック７０４において、アプリケーションからネットワーキング関数コールが傍受される。例えば、ネットワーキング関数コールは、Ｃｏｎｎｅｃｔ（）関数のような、ＰＯＳＩＸソケット関数コールであってもよい。アプリケーションは、無線に接続して外部ネットワークとの通信を可能にするための、ネットワーキング関数コールを発生させる。ネットワーキングライブラリ３２０よりも高い優先順位で、プリロードライブラリ３１８を実行環境にリンクさせることにより、ネットワーキング関数コールが、プリロードライブラリ３１８における関数によって傍受（または、処理）される。
【００６５】
ブロック７０６において、ネットワーキング関数コールを満たすためにインテリジェントなインターフェースの選択が実行される。アプリケーションによる使用のための無線／インターフェースを選択するために、例えば、方法４００のブロック４０８ないし４１４が実行される。したがって、アプリケーションによる使用のために、デバイス６０２によって提供されるインターフェース６０６のうちの１つが選択される。
【００６６】
ブロック７０８において、エフェメラルローカルポートが割り振られる。１つのインプリメンテーションでは、接続性エンジン３０８が、エフェメラルローカルポートをアプリケーションに割り振るように動作する。例えば、エフェメラル（すなわち、寿命が短い）ポートは、予め規定された範囲から選択される、ＩＰ通信のためのトランスポートプロトコルポートである。この割り振りは、一時的なものであり、通信セッションの持続期間の間のみ有効である。通信セッションの完了の後、このポートは、再使用のために利用可能になる。
【００６７】
ブロック７１０において、エフェメラルポートのみに基づいて、フローバインディングルールが動的に発生される。１つのインプリメンテーションでは、接続性エンジン３０８が、割り振られたエフェメラルローカルポートのみに基づいて、バインディングルールを動的に発生させるように動作する。
【００６８】
ブロック７１２において、フローバインディングルールが、デバイスに関係するホームエージェントにシグナリングされる。例えば、接続性エンジン３０８が、フローバインディングルールをホームエージェント６０８に送信するように動作する。その後、ホームエージェント６０８が、フローバインディングルールを使用し、適切な無線／インターフェースを使用してデバイス６０２のフローをルーティングする。
【００６９】
したがって、方法７００は、インテリジェントな無線選択システムにおいてフローモビリティを提供する。方法７００は、１つのインプリメンテーションに過ぎないことと、方法７００の動作は再構成してもよく、またはそうでない場合には、他のインプリメンテーションが可能であるように変更してもよいこととに留意すべきである。
【００７０】
図８は、フローモビリティを提供するための例示的な方法８００を示している。明確にするために、図３中で示されているデバイス３００と、図６中で示されているネットワーク６００とを参照して、方法８００を以下で記述する。１つのインプリメンテーションでは、プロセッサ３０２が、以下に記述する関数を実行するようにデバイス３００の機能的エレメントを制御するためのコードの１つ以上のセットを実行する。
【００７１】
ブロック８０２において、アプリケーションによってソケットが生成される。例えば、デバイス６０２において実行するアプリケーションが、ネットワーク６０４の一部であるネットワークリソースからデータフローを受信するためのソケットを生成する。
【００７２】
ブロック８０４において、アプリケーションからのネットワーキング関数コールが傍受される。例えば、ネットワーキング関数コールは、Ｃｏｎｎｅｃｔ（）関数のような、ＰＯＳＩＸソケット関数コールであってもよい。アプリケーションが、無線に接続して外部ネットワークとの通信を可能にするためのネットワーキング関数コールを発生させる。ネットワーキングライブラリ３２０よりも高い優先順位で、プリロードライブラリ３１８を実行環境にリンクさせることにより、プリロードライブラリ３１８における関数によってネットワーキング関数コールが傍受（または、処理）される。
【００７３】
ブロック８０６において、ネットワーキング関数コールを満たすためにインテリジェントなインターフェース選択が実行される。アプリケーションによる使用のための無線／インターフェースを選択するために、例えば、方法４００のブロック４０８ないし４１４が実行される。したがって、デバイス６０２によって提供されるインターフェース６０６のうちの１つが選択される。
【００７４】
ブロック８０８において、モバイルノードプレフィックスに属する、接続ごとのＩＰｖ６アドレスが発生される。例えば、接続ごとのＩＰｖ６アドレスは、接続性エンジン３０８によって発生される。
【００７５】
ブロック８１０において、接続ごとのＩＰｖ６アドレスがモバイルＩＰインターフェースに割り当てられる。例えば、割り当ては、接続性エンジン３０８によって実行される。
【００７６】
ブロック８１２において、接続ごとのＩＰｖ６アドレスのみに基づいて、フローバインディングルールが動的に発生される。１つのインプリメンテーションでは、接続性エンジン３０８が、接続ごとのＩＰｖ６アドレスのみに基づいて、バインディングルールを動的に発生させるように動作する。ポートまたは宛先アドレスのような他のパラメータは必要なく、ホームエージェントの処理リソースを消費するだろうことから、これは、効率的な帯域幅利用を達成する。
【００７７】
ブロック８１４において、フローバインディングルールが、デバイスに関係するホームエージェントにシグナリングされる。例えば、接続性エンジン３０８が、フローバインディングルールをホームエージェント６０８に送信するように動作する。その後、ホームエージェント６０８が、フローバインディングルールを使用し、適切な無線／インターフェースを使用してデバイス６０２のフローをルーティングする。
【００７８】
したがって、方法８００は、インテリジェントな無線選択システムにおいてフローモビリティを提供する。方法８００は、１つのインプリメンテーションに過ぎないことと、方法８００の動作は再構成してもよく、またはそうでない場合には、他のインプリメンテーションが可能であるように変更してもよいこととに留意すべきである。
【００７９】
さまざまな異なるテクノロジーおよび技術のうちの任意のものを使用して、情報および信号を表してもよいことを、当業者は理解するだろう。例えば、上記の記述全体を通して参照した、データ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁気フィールドまたは微粒子、光学フィールドまたは光学微粒子、あるいはこれらの任意の組み合わせによって表してもよい。
【００８０】
ここで開示した実施形態に関連して記述した、さまざまな例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、あるいは双方を組み合わせたものとして実現してもよいことを、当業者はさらに正しく認識するだろう。ハードウェアおよびソフトウェアのこの互換性を明確に図示するために、さまざまな例示的なコンポーネント、ブロック、モジュール、回路、およびステップを、これらの機能性の観点に関して上記で概して記述している。このような機能性が、ハードウェアまたはソフトウェアとして実現されるか否かは、システム全体に課せられている、特定のアプリケーションおよび設計制約に依存する。熟練者が、それぞれの特定のアプリケーションのための方法を変えて、記述した機能性を実現するかもしれないが、このようなインプリメンテーションの決定は、この発明の例示的な実施形態の範囲から逸脱が生じるとして解釈されるべきでない。
【００８１】
ここで開示した実施形態に関連して記述した、さまざまな例示的な、論理ブロック、モジュール、および回路は、汎用プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは他のプログラマブルロジックデバイス、ディスクリートゲートまたはトランジスタロジック、ディスクリートハードウェアコンポーネント、あるいは、ここで記述した機能を実行するように設計されているこれらの任意の組み合わせで実現しても、あるいは、実行してもよい。汎用目的プロセッサはマイクロプロセッサであってもよいが、代替実施形態では、プロセッサは、何らかの従来のプロセッサ、制御装置、マイクロ制御装置、または状態機械であってもよい。プロセッサはまた、コンピューティングデバイスの組み合わせとして、例えば、ＤＳＰとマイクロプロセッサの組み合わせとして、複数のマイクロプロセッサとして、ＤＳＰコアに関連した１つ以上のマイクロプロセッサとして、あるいは、このような他の何らかの構成として実現してもよい。
【００８２】
ここでの開示した実施形態に関連して記述した、方法またはアルゴリズムのステップは、ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、または、２つのものを組み合わせたもので直接的に具体化されてもよい。ソフトウェアモジュールは、ランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリ、リードオンリーメモリ（ＲＯＭ）、電気的にプログラム可能なＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能なＲＯＭ（ＥＥＰＲＯＭ）、レジスタ、ハードディスク、リムーバルディスク、ＣＤ−ＲＯＭ、または技術的に知られている記憶媒体の他の何らかの形態で存在していてもよい。プロセッサが記憶媒体から情報を読み取ったり、記憶媒体に情報を書き込んだりできるように、例示的な記憶媒体はプロセッサに結合されている。代替実施形態では、記憶媒体はプロセッサと一体化してもよい。プロセッサおよび記憶媒体は、ＡＳＩＣ中に存在していてもよい。ＡＳＩＣは、ユーザ端末中に存在していてもよい。代替実施形態では、プロセッサおよび記憶媒体は、ユーザ端末中にディスクリートコンポーネントとして存在していてもよい。
【００８３】
１つ以上の例示的な実施形態では、記述した機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせで実現してもよい。ソフトウェア中で実現した場合、機能は、１つ以上の命令またはコードとしてコンピュータ読み取り可能媒体上に記憶されてもよく、あるいは、１つ以上の命令またはコードとしてコンピュータ読み取り可能媒体上に送信されてもよい。コンピュータ読み取り可能媒体は、１つの場所から別の場所へのコンピュータプログラムの転送を促進する何らかの媒体を含む、コンピュータ記憶媒体および通信媒体の双方を含む。記憶媒体は、コンピュータによってアクセスできる何らかの利用可能な媒体であってもよい。例示によると、このようなコンピュータ読み取り可能媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、あるいは他の光ディスク記憶デバイス、磁気ディスク記憶デバイス、または他の磁気記憶デバイス、あるいは命令またはデータ構成の形態で所望のプログラムコードを伝送または記憶するために使用でき、コンピュータによってアクセスできる他の何らかの媒体を含むことができるが、これらに限定されない。また、あらゆる接続は、コンピュータ読み取り可能媒体と適切に呼ばれている。例えば、ソフトウェアが、ウェブサイトから、サーバから、あるいは、同軸ケーブル、ファイバ光ケーブル、撚り対、デジタル加入者線（ＤＳＬ）、または赤外線や、無線や、マイクロ波のようなワイヤレス技術を使用している他の遠隔ソースから送信された場合、同軸ケーブル、ファイバ光ケーブル、撚り対、ＤＳＬ、あるいは、赤外線や、無線や、マイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。ここで使用したようなディスク（ｄｉｓｋおよびｄｉｓｃ）は、コンパクトディスク（ＣＤ）、レーザディスク、光ディスク、デジタル汎用ディスク（ＤＶＤ）、フロッピーディスク、およびブルーレイ（登録商標）ディスクを含むが、一般的に、ディスク（ｄｉｓｋ）は、データを磁気的に再生する一方で、ディスク（ｄｉｓｃ）はデータをレーザによって光学的に再生する。先のものを組み合わせたものもまた、コンピュータ読み取り可能媒体の範囲内に含められるべきである。
【００８４】
開示した例示的な実施形態の先の説明は、当業者が、この発明を作るまたは使用することができるように提供されている。これらの例示的な実施形態に対するさまざまな改良は、当業者に容易に明らかになるだろう。そして、ここで規定した一般的な原理は、この発明の精神または範囲から逸脱することなく他の実施形態に適用してもよい。したがって、この発明は、ここに示された例示的な実施形態に限定されることを意図しているものではなく、ここで開示した原理と新規な特徴と矛盾しない最も広い範囲に一致させるべきである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］
デバイスにおけるインテリジェントな無線選択のための方法において、
前記方法は、
無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受することと、
選択基準に基づいて、複数の候補の無線から無線を選択することと、
前記無線を前記アプリケーションにバインドさせることとを含む方法。
［２］
前記傍受することは、前記デバイスの実行環境にリンクされるプリロードライブラリにおいて、前記ネットワーキング関数コールを傍受することを含む［１］の方法。
［３］
前記傍受することは、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせることを含み、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む［２］の方法。
［４］
前記バインドさせることは、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせることを含む［３］の方法。
［５］
前記傍受することは、集中化された無線制御装置が前記無線を選択するための要求を発生させることを含む［１］の方法。
［６］
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリック基準とのうちの少なくとも１つを含む［１］の方法。
［７］
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む［１］の方法。
［８］
前記ネットワーキング関数コールは、ソケットレイヤコールである［１］の方法。
［９］
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである［８］の方法。
［１０］
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである［１］の方法。
［１１］
前記バインドさせることは、
エフェメラルポートを前記無線に割り振ることと、
前記エフェメラルポートのみに基づいて、フローバインディングルールを発生させることと、
前記フローバインディングルールをホームエージェントにシグナリングすることとを含む［１］の方法。
［１２］
前記バインドさせることは、
前記無線に関係付けられるＩＰｖ６アドレスを発生させることと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させることと、
前記フローバインディングルールをホームエージェントにシグナリングすることとを含む［１］の方法。
［１３］
デバイスにおけるインテリジェントな無線選択のための装置において、
前記装置は、
無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受する手段と、
選択基準に基づいて、複数の候補の無線から無線を選択する手段と、
前記無線を前記アプリケーションにバインドさせる手段とを具備する装置。
［１４］
前記傍受する手段は、前記デバイスの実行環境にリンクされるプリロードライブラリにおいて、前記ネットワーキング関数コールを傍受する手段を備える［１３］の装置。
［１５］
前記傍受する手段は、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせる手段を備え、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む［１４］の装置。
［１６］
前記バインドさせる手段は、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせる手段を備える［１５］の装置。
［１７］
前記傍受する手段は、集中化された無線制御装置が前記無線を選択するための要求を発生させる手段を備える［１３］の装置。
［１８］
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリック基準とのうちの少なくとも１つを含む［１３］の装置。
［１９］
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む［１３］の装置。
［２０］
前記ネットワーキング関数コールは、ソケットレイヤコールである［１３］の装置。
［２１］
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである［２０］の装置。
［２２］
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである［１３］の装置。
［２３］
前記バインドさせる手段は、
エフェメラルなポートを前記無線に割り振る手段と、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させる手段と、
前記フローバインディングルールをホームエージェントにシグナリングする手段とを備える［１３］の装置。
［２４］
前記バインドさせる手段は、
前記無線に関係付けられるＩＰｖ６アドレスを発生させる手段と、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させる手段と、
前記フローバインディングルールをホームエージェントにシグナリングする手段とを備える［１３］の装置。
［２５］
デバイスにおけるインテリジェントな無線選択のための装置において、
前記装置は、
無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受し、選択基準に基づいて複数の候補の無線から無線を選択するように構成されている接続性エンジンと、
前記無線を前記アプリケーションにバインドさせるように構成されているソケットコンポーネントとを具備する装置。
［２６］
前記接続性エンジンは、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを傍受するように構成されている［２５］の装置。
［２７］
前記プリロードライブラリは、ネットワーキングライブラリよりも高い優先順位で、前記実行環境においてリンクされ、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む［２６］の装置。
［２８］
前記ソケットコンポーネントは、前記ネットワーキングライブラリの１つ以上の関数を利用して、前記無線を前記アプリケーションにバインドさせるように構成されている［２７］の装置。
［２９］
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリック基準とのうちの少なくとも１つを含む［２５］の装置。
［３０］
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む［２５］の装置。
［３１］
前記ネットワーキング関数コールは、ソケットレイヤコールである［２５］の装置。
［３２］
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである［３１］の装置。
［３３］
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである［２５］の装置。
［３４］
前記接続性エンジンは、
エフェメラルなポートを前記無線に割り振るようにと、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングするように構成されている［２５］の装置。
［３５］
前記接続性エンジンは、
前記無線に関係付けられるＩＰｖ６アドレスを発生させるようにと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングするように構成されている［２５］の装置。
［３６］
デバイスにおけるインテリジェントな無線選択のためのコンピュータプログラムプロダクトにおいて、
前記コンピュータプログラムプロダクトは、
無線アクセスを望むアプリケーションからのネットワーキング関数コールを傍受するための、プロセッサによって実行可能なコードと、
選択基準に基づいて複数の候補の無線から無線を選択するための、プロセッサによって実行可能なコードと、
前記無線を前記アプリケーションにバインドさせるための、プロセッサによって実行可能なコードとを具現化するコンピュータ読み取り可能媒体を具備するコンピュータプログラムプロダクト。
［３７］
前記コードは、前記デバイスの実行環境にリンクされるプリロードライブラリを使用して、前記ネットワーキング関数コールを前記プロセッサに傍受させるように構成されている［３６］のコンピュータ読み取り可能媒体。
［３８］
前記コードは、前記プロセッサに、ネットワーキングライブラリよりも高い優先順位で、前記プリロードライブラリを前記実行環境においてリンクさせるように構成され、
前記プリロードライブラリは、前記ネットワーキングライブラリにおいて利用可能な関数の少なくともサブセットを含む［３７］のコンピュータ読み取り可能媒体。
［３９］
前記コードは、前記プロセッサに、前記ネットワーキングライブラリの１つ以上の関数を利用させて、前記無線を前記アプリケーションにバインドさせるように構成されている［３８］のコンピュータ読み取り可能媒体。
［４０］
前記選択基準は、ユーザポリシー基準と、ネットワークポリシー基準と、アプリケーション要件と、接続属性と、無線メトリック基準とのうちの少なくとも１つを含む［３６］のコンピュータ読み取り可能媒体。
［４１］
前記候補の無線は、セルラと、ＷｉＦｉと、ブルートゥース無線アクセス技術とのうちの少なくとも１つを含む［３６］のコンピュータ読み取り可能媒体。
［４２］
前記ネットワーキング関数コールは、ソケットレイヤコールである［３６］のコンピュータ読み取り可能媒体。
［４３］
前記ソケットレイヤコールは、Ｃｏｎｎｅｃｔ（）と、Ｂｉｎｄ（）と、Ｓｅｔｓｏｃｋｏｐｔ（）とのうちの少なくとも１つである［４２］のコンピュータ読み取り可能媒体。
［４４］
前記アプリケーションは、レガシーおよび非レガシーアプリケーションのうちの１つである［３６］のコンピュータ読み取り可能媒体。
［４５］
前記コードは、
前記プロセッサに、
エフェメラルなポートを前記無線に割り振らせるようにと、
前記エフェメラルなポートのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングさせるように構成されている［３６］のコンピュータ読み取り可能媒体。
［４６］
前記コードは、
前記プロセッサに、
前記無線に関係付けられるＩＰｖ６アドレスを発生させるようにと、
前記ＩＰｖ６アドレスのみに基づいて、フローバインディングルールを発生させるようにと、
前記フローバインディングルールをホームエージェントにシグナリングさせるように構成されている［３６］のコンピュータ読み取り可能媒体。
【図１】
0005575930.tif 000002
【図２】
0005575930.tif 000003
【図３】
0005575930.tif 000004
【図４】
0005575930.tif 000005
【図５】
0005575930.tif 000006
【図６】
0005575930.tif 000007
【図７】
0005575930.tif 000008
【図８】
0005575930.tif 000009