(57)【要約】  １台の試験装置でネットワークアダプタ又はネットワークドライバの試験を行う技術を提供する。少なくとも一つのネットワークアダプタが接続された試験装置が、仮想アドレスを送信先アドレスとしてデータの送信を指示し、試験モードが設定されている場合、前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して、該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させ、前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信し、前記データの送信結果に基づいて試験結果を算出する。
2009157067.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つのネットワークアダプタが接続された試験装置であって、
仮想アドレスを送信先アドレスとしてデータの送信を指示する送信アプリケーション部と、
試験モードが設定されている場合、前記データの送信先アドレスを自装置と接続されたネットワークアダプタに割り当てられたアドレスに変換して、該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるアドレス変換部と、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信する受信アプリケーション部と、
前記データの送信結果に基づいて試験結果を算出する算出部と、
を備えた試験装置。
【請求項２】
前記アドレス変換部が、試験モードの場合に前記データの送信元アドレスを仮想アドレスに変換する請求項１に記載の試験装置。
【請求項３】
インターネットプロトコルに従って、前記データに前記送信先アドレスを付加したパケットを生成するパケット生成部を備えた請求項１又は２に記載の試験装置。
【請求項４】
前記ネットワークアダプタが、送信するデータを該ネットワークアダプタ内で折り返して受信する機能を有し、試験モードの場合に一つのネットワークアダプタで前記変換後のデータの送信及び受信を行う請求項１から３の何れか１項に記載の試験装置。
【請求項５】
前記試験装置に第一のネットワークアダプタと第二のネットワークアダプタが接続され、該第一のネットワークアダプタからデータを送信し、ネットワークケーブルを介して第二のネットワークアダプタで受信する場合に、
前記アドレス変換部が、前記データの送信先アドレスを第二のネットワークアダプタに割り当てられたアドレスに変換する請求項１から３の何れか１項に記載の試験装置。
【請求項６】
少なくとも一つのネットワークアダプタが接続された試験装置が、
仮想アドレスを送信先アドレスとしてデータの送信を指示するステップと、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるステップと、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信するステップと、
前記データの送信結果に基づいて試験結果を算出するステップと、
を実行する試験方法。
【請求項７】
試験モードの場合に前記データの送信元アドレスを仮想アドレスに変換する請求項６に記載の試験方法。
【請求項８】
インターネットプロトコルに従って、前記データに前記送信先アドレスを付加したパケットを生成するステップを実行する請求項６又は７に記載の試験方法。
【請求項９】
前記ネットワークアダプタが、送信するデータを該ネットワークアダプタ内で折り返して受信する機能を有し、試験モードの場合に一つのネットワークアダプタで前記変換後のデータの送信及び受信を行う請求項６から８の何れか１項に記載の試験方法。
【請求項１０】
前記試験装置に第一のネットワークアダプタと第二のネットワークアダプタが接続され、該第一のネットワークアダプタからデータを送信し、ネットワークケーブルを介して第二のネットワークアダプタで受信する場合に、
前記データの送信先アドレスを第二のネットワークアダプタに割り当てられたアドレスに変換する請求項６から８の何れか１項に記載の試験方法。
【請求項１１】
少なくとも一つのネットワークアダプタが接続された試験装置に、
仮想アドレスを送信先アドレスとしてデータの送信を指示するステップと、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるステップと、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信するステップと、
前記データの送信結果に基づいて試験結果を算出するステップと、
を実行させるプログラム。
【請求項１２】
試験モードの場合に前記データの送信元アドレスを仮想アドレスに変換する請求項１１に記載のプログラム。
【請求項１３】
インターネットプロトコルに従って、前記データに前記送信先アドレスを付加したパケットを生成するステップを実行する請求項１１又は１２に記載のプログラム。
【請求項１４】
前記ネットワークアダプタが、送信するデータを該ネットワークアダプタ内で折り返して受信する機能を有し、試験モードの場合に一つのネットワークアダプタで前記変換後のデータの送信及び受信を行う請求項１１から１３の何れか１項に記載のプログラム。
【請求項１５】
前記試験装置に第一のネットワークアダプタと第二のネットワークアダプタが接続され、該第一のネットワークアダプタからデータを送信し、ネットワークケーブルを介して第二のネットワークアダプタで受信する場合に、
前記データの送信先アドレスを第二のネットワークアダプタに割り当てられたアドレスに変換する請求項１１から１３の何れか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークアダプタ（通信制御部）やネットワークドライバの試験を行う技術に関する。
【背景技術】
【０００２】
ネットワークアダプタは、コンピュータに装着或は実装され、コンピュータ間の通信に用いられる。ネットワークアダプタは、コンピュータの拡張スロットに挿入するカード状のものが多いため、ネットワークカード、ネットワークボード、ネットワークインタフェースカード等とも称される。【０００３】
ネットワークアダプタの試験としては、高負荷テストや性能測定が挙げられる。【０００４】
ネットワークアダプタの高負荷テストとは、そのネットワークアダプタに可能な限りのバイト数またはパケット数のデータを送信または受信させるテストのことである。【０００５】
ネットワークアダプタの性能測定とは、そのネットワークアダプタに可能な限りのバイト数またはパケット数のデータを送信または受信させた時、単位時間あたりにどれだけのデータが流れたのかを計算して求めることである。【０００６】
性能測定時は、可能な限り高速な送受信を行うため、性能測定が高負荷テストにもなっている。【０００７】
しかし、一つのＴＣＰコネクションでは必ずしもネットワークアダプタの能力を最大限に使いきれない場合もあるため、高負荷テストは性能測定ツールを複数同時に起動したり、双方向に起動したりといった手法を採ることが多い。【０００８】
また、本願発明に関連する先行技術として、例えば、下記の特許文献１に開示される技術がある。【０００９】
【特許文献１】特開平０８−３３５１９８号公報
【特許文献２】特開平０４−０２７２３９号公報
【特許文献３】特開平０６−３０９２５１号公報
【特許文献４】特開平０４−１７２８４３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
性能測定や高負荷テストは、図５３に示すように、ネットワークアダプタを設けたコンピュータ２台をネットワークケーブルで接続し、ｎｅｔｐｅｒｆといった既存のアプリケーションソフトウェアによりＴＣＰ／ＩＰを用いて通信することで行う。【００１１】
しかし、コンピュータは、一般に高価であるため、高負荷テストや性能測定のたびにマシンが２台必要となると、それらにかかる費用が高くなってしまう。【００１２】
また、最近のコンピュータは、複数のＣＰＵを備えるものが多く、且つＣＰＵの高速化が図られ、メモリ容量も１ギガバイト以上と大容量化されているため、処理能力が高く、ネットワークアダプタの試験のために２台のコンピュータを占有するのは無駄が多い。【００１３】
例えば、図５４に示すように、ネットワークアダプタ２枚をマシン１台に挿して、そのネットワークアダプタ間で通信を行わせた場合であっても、処理能力が不足することは少ない。【００１４】
しかしながら、コンピュータの処理能力に不足がないにも関わらず、図５４のようにコンピュータ１台の構成で、高負荷テストや性能測定を行うことは、次の理由により出来なかった。【００１５】
（１）ＩＰ層を経由して通信すると、１台のコンピュータではパケットがＩＰ層で折り返してしまい、ネットワークアダプタにはデータが流れない。【００１６】
例えば、図５３のように２台のコンピュータ（ホスト）間で通信する場合、ホストＨＡにおいてアプリケーションソフトウェア９１Ａから送出されたパケットは、ストリームヘッド９２Ａ、ＴＣＰ層９３Ａ、ＩＰ層９４Ａそしてドライバ９５Ａを介してネットワークアダプタ９６Ａに送られる。【００１７】
そして、ホストＨＡのネットワークアダプタ９６Ａは、ネットワークケーブルを介してパケットをホストＨＢのネットワークアダプタ９６Ｂに送信する。【００１８】
ホストＨＢにおいて、ネットワークアダプタ９６Ｂで受信されたパケットは、ドライバ９５Ｂ、ＩＰ層９４Ｂ、ＴＣＰ層９３Ｂそしてストリームヘッド９２Ｂを介してアプリケーションソフトウェア９１Ｂに送られる。【００１９】
これに対し、図５４のように１台のコンピュータに装着したネットワークアダプタ９６Ａ，９６Ｂ間で通信する場合、アプリケーションソフトウェア９１から送出されたパケットは、ストリームヘッド９２及びＴＣＰ層９３を介してＩＰ層９４に送られる。そして、パケットは、ＩＰ層９４で折り返し、ＴＣＰ層９３及びストリームヘッド９２を介してアプリケーションソフトウェア９１に戻る。【００２０】
即ち、ホストＨＡ上で、同じホストＨＡに装着されているネットワークアダプタ９６Ａ或はネットワークアダプタ９６ＢのＩＰアドレス宛てにパケットを送信すると、送信元ＩＰアドレスと送信先ＩＰアドレスが同じとなり、ＩＰ層９４で折り返してしまい、ネットワークドライバやネットワークアダプタにパケットは流れない。【００２１】
図５５の例では、ネットワークアダプタ９６ＡにＩＰアドレス１０．２０．１．１が割りつけてあり、ネットワークアダプタ９６ＢにＩＰアドレス１０．２０．２．１が割りつけられている。【００２２】
そして、アプリケーションソフトウェアとしてｎｅｔｐｅｒｆを用いてネットワークアダプタ９６Ｂへパケットを送る場合、次のように入力する。【００２３】
＞ netperf  -H 10.20.2.1
この場合、パケットは、ネットワークアダプタ９６Ａが送信元となってネットワークアダプタ９６Ｂへ送信するのではなく、ＩＰ層９４で送信元としてネットワークアダプタ９６ＢのＩＰアドレスが選択されるので、送信先のＩＰアドレスと同じになってしまう。【００２４】
このようになる理由は、IPの送信のルールが以下のようになっているからである。【００２５】
（1-1）送信元ＩＰアドレスは、送信先ＩＰアドレスと同じIPサブネットに属しているネットワークアダプタ９６Ａ，９６Ｂが、そのホスト内に装着されていれば、当該ＩＰサブネットに属するネットワークアダプタのＩＰアドレスとなる。図５５の例の場合、送信先が10.20.2.1なので、送信元も10.20.2.1となる。【００２６】
（1-2）送信先ＩＰアドレスが、同じホスト内に存在すれば、下位のドライバにパケットを渡すことはせずに、IP層で折り返して上位にデータ（パケット）を渡す。【００２７】
（２）IPを使わないでユーザ空間から送受信するとパケットロストが多発する。【００２８】
ＩＰ以外のプロトコル、例えばioctlを使用すれば、ユーザ空間からストリームヘッドを経て、TCP層およびIP層を通さずに、ドライバへパケットを送信すること、またネットワークアダプタを経てドライバからパケットを受信することが可能である。【００２９】
しかし、ストリームヘッド９１およびドライバ９５は、データをキューイングしておく機能を実装していないことが多いため、ある受信パケットをストリームヘッドで処理中であれば、ドライバは次のパケットをストリームヘッドへは送らずロストさせる場合が多い。【００３０】
（2-1）受信時パケットロストする理由
一般に、高負荷送受信時の、送受信パケット間隔は、相対的に短い時間が何個か続いた後、相対的に長い時間の間隔となる場合が多い。【００３１】
例えば、パケット１、パケット２、パケット３、．．．．の順に受信したとして、
パケット1〜パケット10までは、各パケット同士の間隔が10マイクロ秒、
パケット10とパケット11の間隔が、100マイクロ秒、
パケット11〜パケット20までは、各パケット同士の間隔が10マイクロ秒、
パケット20とパケット21の間隔が、100マイクロ秒、
のようになることがある。(*1)
一方、カーネル空間からユーザ空間に１かたまりのデータを渡すのにかかる時間は、その中間くらい（例えば、15マイクロ秒）であることが多い。【００３２】
この場合、あるパケットがストリームヘッドに到着して、10マイクロ秒が経過した時、ストリームヘッドは、まだパケットをユーザ空間にまだ渡せていない。このため、ドライバ２は、ストリームヘッドがまだ処理中であると判定して、次のパケットを破棄する（パケットロストさせる）。【００３３】
なお、(*1)のようになる理由は以下の２点である。【００３４】
（2-1-1）ホストのCPU割当は、TSS(Time sharing system)で行われている。パケットを送信する側において、一度CPUが割りつけられると、その期間に複数個パケットを連続して送信するが、TSSであるためにどこかで送信が一度中断になる。その後またCPUが割りつけられて送信を再開し、複数個のパケットを連続して送信するが、その間、時間がかかる場合がある。【００３５】
（2-1-2）ハードウェアのキューが満杯ならば、ドライバは送信を待つが、送信完了通知は、その通知処理（割込み）によるCPU使用率向上を避けるために、何十パケットかに一度しか上がらないようにしてあることが多い。そのため、ドライバは何十パケットかを短い時間間隔で送信処理したあと、ハードウェアからの送信完了通知を相対的に長い時間待つような動作をすることになる。【００３６】
一方、TCP/IPを使用すると、以下の仕組みのため、パケットロストが発生しない。【００３７】
ストリームヘッドが処理中の場合、TCP層９３はパケットを破棄せず待機する。【００３８】
IP層９４は、TCP層９３が待機状態、または、既にIP層９４のキューのデータが溜まっている場合は、キューにデータを登録する。【００３９】
IP層９４は、TCP層９３の待機状態が解除されると、データをTCP層９３に渡す。【００４０】
このように、パケットが溜まっている場合でもキューイングによりパケットを待機させることにより、パケットロストを防止している。【００４１】
なお、ＴＣＰ／ＩＰと同様にキューイングを行い、且つ宛先ＩＰアドレスが自装置内であるパケットをドライバの手前で折り返さない通信プロトコルを新たに作成すれば、上記問題を回避することも可能である。しかし、インターネットやイントラネットといったネットワークではＴＣＰ／ＩＰがデファクトスタンダードとなっているので、ＴＣＰ／ＩＰ以外のプロトコルを用いたのでは、実態に則した試験が行えないという問題があった。【００４２】
また、図５６に示すように、１台のマシンに１枚のネットワークアダプタを挿し、送信したパケットを、そのアダプタ自身が受信するアダプタ内折り返し機能を持つネットワークアダプタもある。【００４３】
この方式では、ホスト１台、アダプタ１枚、ケーブル無しでアダプタやドライバのテストが可能である。【００４４】
しかし、上記（１）の理由でTCP/IPは使用できず、そのため（２）の問題が発生する。【００４５】
そこで本発明は、１台の試験装置でネットワークアダプタ又はネットワークドライバの試験が行える技術を提供する。
【課題を解決するための手段】
【００４６】
上記課題を解決する本発明の一形態として、試験装置や、試験方法、試験プログラムが挙げられる。【００４７】
試験装置は、
少なくとも一つのネットワークアダプタが接続され、
仮想アドレスを送信先アドレスとしてデータの送信を指示する送信アプリケーション部と、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるアドレス変換部と、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信する受信アプリケーション部と、
前記データの送信結果に基づいて試験結果を算出する算出部と、
を備える。【００４８】
また、試験方法は、
少なくとも一つのネットワークアダプタが接続された試験装置が、
仮想アドレスを送信先アドレスとしてデータの送信を指示するステップと、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるステップと、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信するステップと、
前記データの送信結果に基づいて試験結果を算出するステップと、
を実行する。【００４９】
また、本発明は、上記試験方法をコンピュータに実行させるプログラムであっても良い。更に、本発明は、このプログラムをコンピュータが読み取り可能な記録媒体に記録したものであっても良い。コンピュータに、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。【００５０】
ここで、コンピュータが読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータから読み取ることができる記録媒体をいう。このような記録媒体の内コンピュータから取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD-ROM、CD-R/W、DVD、DAT、８mmテープ、メモリカード等がある。【００５１】
また、コンピュータに固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。
【発明の効果】
【００５２】
本発明によれば、１台の試験装置でネットワークアダプタ又はネットワークドライバの試験を行う技術を提供できる。
【図面の簡単な説明】
【００５３】
【図１】実施例１の試験装置の機能ブロック図
【図２】試験装置のハードウェア構成図
【図３】試験方法の概念図
【図４】試験方法の説明図
【図５】アダプタ１７Ａからアダプタ１７Ｂへの通信手順を示す図
【図６】アダプタ１７Ｂからアダプタ１７Ａへの通信手順を示す図
【図７】アドレスを変換してパケットを送信する処理の説明図
【図８】アドレスを変換してパケットを送信する処理の説明図
【図９】アドレスを変換してパケットを送信する処理の説明図
【図１０】アドレスを変換してパケットを送信する処理の説明図
【図１１】アドレスを変換してパケットを送信する処理の説明図
【図１２】アドレスを変換してパケットを送信する処理の説明図
【図１３】アドレスの変換例を示す図
【図１４】アドレスの変換例を示す図
【図１５】アドレスの変換例を示す図
【図１６】アドレスの変換例を示す図
【図１７】アドレスの変換例を示す図
【図１８】アドレスの変換例を示す図
【図１９】試験モード時の送信経路を示す図
【図２０】試験モード時の送信経路を示す図
【図２１】アドレス変換レジスタの説明図
【図２２】アドレス変換レジスタの更新処理の説明図
【図２３】アドレス変換レジスタに書き込まれる値の一例を示す図
【図２４】アドレス変換レジスタに書き込まれる値の一例を示す図
【図２５】アドレス変換レジスタの値をクリアして通常モードとした例を示す図
【図２６】アドレス変換情報の更新処理の説明図
【図２７】通常モード時のアダプタの機能ブロック図
【図２８】試験モード時のアダプタの機能ブロック図
【図２９】試験変換器の機能ブロック図
【図３０】アドレス変換処理の説明図
【図３１】アドレス変換処理の説明図
【図３２】ＭＡＣヘッダを付加したパケットのフォーマットを示す図
【図３３】ＭＡＣヘッダの説明図
【図３４】ＡＲＰパケットのフォーマットを示す図
【図３５】ＡＲＰパケットの説明図
【図３６】ＩＰヘッダのフォーマットを示す図
【図３７】ＩＰヘッダの説明図
【図３８】ＴＣＰヘッダのフォーマットを示す図
【図３９】ＴＣＰヘッダの説明図
【図４０】ドライバ部の送信処理の説明図
【図４１】実施例２の試験装置の機能ブロック図
【図４２】試験方法の概念図
【図４３】アドレスの変換例を示す図
【図４４】アドレスの変換例を示す図
【図４５】アドレスの変換例を示す図
【図４６】試験モード時の送信経路を示す図
【図４７】アドレス変換レジスタの説明図
【図４８】アドレス変換レジスタの更新処理の説明図
【図４９】アドレス変換レジスタに書き込まれる値の一例を示す図
【図５０】アドレス変換レジスタの値をクリアして通常モードとした例を示す図
【図５１】通常モード時のアダプタの機能ブロック図
【図５２】試験モード時のアダプタの機能ブロック図
【図５３】従来の試験装置の概略図
【図５４】一台の試験装置に一つのアダプタを装着した例を示す図
【図５５】一台の試験装置に二つのアダプタを装着した場合の処理の流れを示す図
【図５６】一台の試験装置に一つのアダプタを装着した場合の処理の流れを示す図
【発明を実施するための最良の形態】
【００５４】
〈概略構成〉
図１は、本実施例に係る試験装置の機能ブロック図、図２は本実施例に係る試験装置のハードウェア構成図である。【００５５】
図２に示すように、試験装置１は、本体１１内にＣＰＵ（central processing unit）１２やメインメモリ１３、入出力ポート（Ｉ／Ｏ）１４等を備えた一般的なコンピュータである。【００５６】
入出力ポート１４には、キーボードやマウスといったユーザの指示を入力する入力部１５や、演算処理の為のデータやソフトウェアを記憶したハードディスクなどの記憶部１６、他のコンピュータとの通信を制御する通信制御部として機能するネットワークアダプタ１７Ａ，１７Ｂが接続される。【００５７】
記憶部１６には、オペレーティングシステム（ＯＳ）やｎｅｔｐｅｒｆなどのアプリケーションソフト、ネットワークドライバがインストールされている。【００５８】
ＣＰＵ１２は、メインメモリ１３を介して前記ＯＳやアプリケーションプログラム、ネットワークドライバを記憶部１６から適宜読み出して実行し、ネットワークアダプタ（以下単にアダプタとも称す）１７や記憶部１６から読み出した情報を演算処理することにより、図１に示すようにアプリケーション部２１、ストリームヘッド２２、ＴＣＰ部（ＴＣＰ層）２３、ＩＰ部（ＩＰ層）２４、ドライバ部（駆動制御部）２５Ａ，２５Ｂ、試験結果算出部２６、試験結果出力部２７としても機能する。なお、図１において、カーネル空間とは、ＯＳがカーネルやデバイスドライバの動作のために確保するメモリ領域であり、ユーザ空間とは、ＯＳがユーザプロセスの動作のために確保するメモリ領域である。【００５９】
アプリケーション部２１は、送信アプリケーション部と受信アプリケーション部を有する。
送信アプリケーション部として機能する場合、ＣＰＵ１２は、アダプタ１７Ａ，１７Ｂ及びネットワークドライバの試験を行うため、アダプタ１７Ａ，１７Ｂが送信可能な最大量或は最高速でパケットをストリームヘッド２２に送出する。【００６０】
また、受信アプリケーション部としてのＣＰＵ１２は、アダプタ１７Ａ，１７Ｂで受信したパケットを、パケットを受信したアダプタに対応するドライバ部２５Ａ，２５Ｂ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介して受信する。【００６１】
試験結果算出部２６としてのＣＰＵ１２は、送信したパケットの量や速度、受信したパケットの量や速度、エラー数などを測定し、単位時間当りの送信速度やエラー率などの試験結果としての値を算出する。
試験結果出力部２７としてのＣＰＵ１２は、算出した試験結果について、記録媒体への記録、表示部への表示、印刷、他のコンピュータへの送信といった出力処理を行う。【００６２】
ストリームヘッド２２としてのＣＰＵ２１は、ユーザ空間とカーネル空間との間のデータ（パケット）の受け渡しの処理を行う。【００６３】
ＴＣＰ層２３としてのＣＰＵ１２は、ストリームヘッド２２からの送信するデータにＴＣＰヘッダを付加してパケット（ＴＣＰセグメント）を生成してＩＰ層２４へ渡す。また、ＴＣＰ層２３としてのＣＰＵ１２は、ＩＰ層から受信したパケットからＴＣＰヘッダを外してストリームヘッダ２２へ渡す等、ＴＣＰ（Transmission Control Protocol）に従う処理を行う。【００６４】
ＩＰ層２４としてのＣＰＵ１２は、ＴＣＰ層２３からの送信するパケットにＩＰヘッダを付加してパケット（ＩＰデータグラム）を生成してドライバ部２５Ａ，２５Ｂへ渡す。また、いずれかのドライバから受信したパケットからＩＰヘッダを外してＴＣＰ層２３へ渡す等、ＩＰ（Internet Protocol）に従う処理を行う。また、ＩＰ層２４は、パケットを送信する際、送信先アドレスと同じサブネットに属するアダプタ１７Ａ或はアダプタ１７Ｂを選択し、選択したアダプタに対応するドライバ２５Ａ／２５Ｂへ送信パケットを渡して送信させる。本実施例のパケット生成部は、インターネットプロトコルに従って、前記データに前記送信先アドレスを付加したパケットを生成するものであり、前記ＴＣＰ層２３とＩＰ層２４を備えている。本実施例のＩＰ層２４は、ドライバ２５Ａ,アダプタ１７ＡにアドレスＩＰ１１＝10.20.1.1、ドライバ２５Ｂ,アダプタ１７ＢにアドレスＩＰ２１＝10.20.2.1を割り当てている。【００６５】
ドライバ部２５Ａ，２５ＢとしてのＣＰＵ１２は、コンピュータ１側からのデータ（例えばパケット）を、それぞれのドライバ部に対応するアダプタ１７Ａ，１７Ｂへ渡して送信させる処理を行う。また、ドライバ部２５Ａ、２５ＢとしてのＣＰＵ１２は、それぞれのドライバ部に対応したアダプタ１７Ａ，１７Ｂで受信したパケットをＩＰ層２４へ受け渡す処理を行う。【００６６】
アダプタ１７Ａ，１７Ｂは、それぞれに対応するドライバ部２５Ａ，２５Ｂから受けたデータをインターネット等のネットワークへ送出し、また該ネットワークを介して受信したデータをそれぞれに対応するドライバ部２５Ａ，２５Ｂへ渡すことで、他のコンピュータとの通信を可能にする。【００６７】
本実施例のコンピュータでは、ドライバ部２５Ａ，２５Ｂ或はアダプタ１７Ａ，１７Ｂがアドレス変換部を有している。即ち、ドライバ部２５Ａ，２５ＢとしてのＣＰＵ１２や、アダプタ１７Ａ，１７Ｂの処理部や一部の回路が、アドレス変換部の機能を実現する。
アドレス変換部は、ドライバ或はアダプタの試験を行うモードである試験モードが選択された場合には、前記データの送信先アドレスを、自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して、当該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させる。【００６８】
本実施例のコンピュータ１は、自装置内に備えた２つのアダプタ間で試験のための通信である試験通信を行う場合に、ユーザまたはアプリケーション部２１が送信先のＩＰアドレスとして仮想マシンのＩＰアドレスを指定する。これにより、データの送信先が自装置内にならず、アプリケーション部２１が送出したパケットはＩＰ層２４で折り返されず、ＩＰ層２４から例えばドライバ部２５Ａへ送られる。【００６９】
そして、コンピュータ１は、ＩＰ層２４を越えたアダプタ１７Ａまたはドライバ部２５Ａで、パケットの送信先を自装置内に装着された他方のアダプタ１７ＢのＩＰアドレスに変換する。これにより、アダプタ１７Ａからパケットを送信し、ネットワークケーブルを介して自装置内のアダプタ１７Ｂで受信する試験通信を可能にしている。【００７０】
ここで、コンピュータ１は、アダプタ１７Ａまたはドライバ部２５Ａで送信先ＩＰアドレスを自装置内のＩＰアドレスに変換すると共に、送信元ＩＰアドレスも仮想マシン上のものに変換してパケットを送信している。これにより、パケットを受信したアプリケーション部２１は、仮想マシンからの通信として認識し、仮想マシンに対して応答する。なお、上記はアダプタ１７Ａからアダプタ１７Ｂへの試験通信の例を示したが、ドライバ２５Ｂ或はアダプタ１７Ｂが上記ドライバ２５Ａ或はアダプタ１７Ａと同様に動作することで、アダプタ１７Ｂからアダプタ１７Ａへの試験通信も行うことができる。【００７１】
即ち、本実施例のコンピュータ１は、自装置内のアダプタ１７Ａ／１７Ｂの一方から仮想マシンに対してパケットを送信するようにＩＰ層２４に見せかけることでＩＰ層２４でのパケットの折り返しを防止し、実際には送信先アドレスを変換して他方のアダプタに送信する。このときコンピュータ１は、パケットの送信元アドレスを仮想マシンのアドレスに変換するので、このパケットを仮想マシンからのパケットであるものとして他方のアダプタ１７Ａ／１７Ｂで矛盾なく受信する。【００７２】
これにより、１台の試験装置上で、２つのアダプタ間で、ＴＣＰ／ＩＰを用いて試験を行うことができる。【００７３】
また、ＴＣＰ／ＩＰを用いるので、パケットロストが発生せず、高負荷テストや性能測定を行うことが可能となる。【００７４】
〈実施例１〉
−１台のマシンに２枚のカードを挿す場合−
図１,図２に示した試験装置１に、２枚のアダプタ（ネットワークカード）１７Ａ，１７Ｂを搭載した例を以下に詳述する。【００７５】
本実施例では、アダプタ１７ＡのＩＰアドレスIP11を10.20.1.1、アダプタ１７ＢのＩＰアドレスIP21を10.20.2.1と割り当てている。【００７６】
図３は、本実施例１の試験方法の概念図である。図３に示すように、ＩＰアドレスが10.20.1.1のアダプタ１７Ａの通信相手が、ＩＰアドレスが10.20.1.2の第一の仮想マシンであるようにＩＰ層に見せかけて通信を行う。また、ＩＰアドレスが10.20.2.1のアダプタ１７Ｂの通信相手がＩＰアドレス10.20.2.2の第二の仮想マシンであるようにＩＰ層２４に見せかけて、通信を行う。【００７７】
仮想マシン上のＩＰアドレスは、試験装置１上に存在しないものを選択する。これは、仮想マシン上のＩＰアドレスが試験装置１上に存在するものであると、そのＩＰアドレスを送信先アドレスとしたときにパケットがＩＰ層２４で折り返してしまうためである。【００７８】
また、第一の仮想マシンへのパケット送信が第一のアダプタ１７Ａから行われるように、アダプタ１７Ａと同じＩＰサブネットに属するＩＰアドレスを第一の仮想マシンに割り当てている。同じく、第二の仮想マシンへのパケット送信が第二のアダプタ１７Ｂから行われるように、アダプタ１７Ｂと同じＩＰサブネットに属するＩＰアドレスを第二の仮想マシンに割り当てている。【００７９】
仮想マシン上のＭＡＣアドレスは、試験装置上および他の仮想マシンとは異なるものとする。即ち第一の仮想マシンのＭＡＣアドレスＭＡＣ１１と，第二の仮想マシンのＭＡＣアドレスＭＡＣ２１とが，アダプタ１７ＡのＭＡＣアドレスＭＡＣ１２，アダプタ１７ＢのＭＡＣアドレスＭＡＣ２２とそれぞれ別のアドレスになるようにする。【００８０】
上記のように、あたかも仮想マシンと通信しているようにＩＰ層にみせかけるため、本実施例では、アダプタなどのハードウェアまたはドライバでＩＰアドレスおよびＭＡＣアドレスを変換して通信する試験方法を採用する。【００８１】
図４は本実施例のコンピュータ１による試験方法の説明図、図５はアダプタ１７Ａからアダプタ１７Ｂへ通信を開始する際の手順を示す図、図６はアダプタ１７Ｂからアダプタ１７Ａへ通信を開始する際の手順を示す図、図７〜図１２は、図４の送信処理を図５，図６の各手順において示した図、図１３〜１８は図７〜図１２の各手順で変換するアドレスの説明図である。
ユーザが試験モードへの移行指示、例えば試験モードへ移行するためのコマンドとして後述の”addrtrans -s”を入力すると、コンピュータ１は試験モードを設定する。なお、本実施例では、ユーザが試験モードへ移行のコマンドを入力する際に、アダプタ１７Ａの通信相手である第一の仮想マシンのＩＰアドレス及びアダプタ１７Ｂの通信相手である第二の仮想マシンのＩＰアドレスを図３に示すように指定する。仮想マシンのアドレスは、ユーザによる入力に限らず、コンピュータ１が各アダプタ１７Ａ，１７Ｂに割り当てられたＩＰアドレスと同じサブネットに属するアドレスを自動生成しても良い。例えばアダプタ１７ＡのＩＰアドレスを同じサブネット内で所定の値だけ増減させて第一の仮想マシンのＩＰアドレスとする。
そして、ユーザが送信の指示、例えば試験を行うためのコマンドとして後述の”netperperf”を入力すると、コンピュータ１は該コマンドを実行して試験を開始（Ｓ１）し、前記コマンドに応じた送信処理を行う（Ｓ２）。具体的には、以下の（１）〜（６）の処理を行う。
先ず、前記試験を行うためのコマンドの入力によって、図５に示すようにアダプタ１７Ａからアダプタ１７Ｂへの通信が指定された場合について説明する。
（１）前記試験用を行うためのコマンドに応じ、アプリケーション部２１は、第一の仮想マシン宛てのパケットの送信を開始しようとする。ここで第一の仮想マシンのＩＰアドレスは、前述のように自装置内のアダプタとは異なるＩＰアドレスが指定されている。このためＩＰ層２４は、図７に示すように、送信先ＩＰアドレスと対応するＭＡＣアドレスを求めるアドレス解決要求を行う（Ｓ１０１）。【００８２】
そしてＩＰ層２４は、アドレス解決要求パケットの送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ａを選択して該ドライバ部２５Ａにアドレス解決要求パケットを送出する（Ｓ１０２）。【００８３】
パケットを受信したアダプタ１７Ａまたはドライバ部２５Ａは、設定されているモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ１０３）。判定の結果、設定されているモードがアドレス変換モードであれば、図１３のように送信先のＩＰアドレスを10.20.1.2から10.20.2.1に変更し、送信元のＩＰアドレスを10.20.1.1から10.20.2.2に、送信元ＭＡＣアドレスをMAC11からMAC22に変換する（Ｓ１０４）。そしてアダプタ１７Ａは、アドレスが変換されたパケットを外部に送信する（Ｓ１０５）。【００８４】
なお、Ｓ１０３で、設定されているモードがアドレス変換モードで無いと判定された場合、即ち試験用のコマンドでない通信が指示され、通常モードが設定されている場合、アダプタ１７Ａあるいはドライバ２５Ａはアドレスを変換せずにパケットを送信する（Ｓ１０６）。【００８５】
また、Ｓ１０４におけるアドレスの変換では、パケットの送信先が自装置内の他方のアダプタ１７Ｂとなるように、アダプタ１７Ａまたはドライバ２５Ａが送信するパケットの送信先アドレスを図１３に示すように変換する。但し、図１３の例では、アドレス解決要求のパケットなので、このパケットの送信先ＭＡＣアドレスはブロードキャスト用のff.ff.ff.ff.ff.ffとする。【００８６】
更に、Ｓ１０４におけるアドレスの変換では、パケットの送信元が所定の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１３に示すように変換する。例えば、アダプタ１７Ａは、図３に示したようにアダプタ１７Ｂに対して通信相手を第二の仮想マシンと見せかけるため、図１３の例では送信するパケットの送信元ＩＰアドレスを10.20.2.2、送信元ＭＡＣアドレスをＭＡＣ２２と変換して送信している。【００８７】
アダプタ１７Ａから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ｂに受信される。アダプタ１７Ｂは、受信したパケットをドライバ部２５Ｂ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第二の仮想マシンからのパケットとして受信する。【００８８】
（２）アダプタ１７Ｂまたはドライバ部２５Ｂにおいて、アドレス解決応答（ARP reply）を送信時、図１４のようにＭＡＣアドレスおよびＩＰアドレスを変換する。以下、アダプタ１７Ｂまたはドライバ２５Ｂにおけるアドレス変換処理の詳細を図８を用いて説明する。【００８９】
即ち、アプリケーション部２１は、第二の仮想マシンに対してアドレス解決応答を返す（Ｓ２０１）【００９０】
この場合も送信先ＩＰアドレスが第二の仮想マシンであり、図３に示すとおり自装置内ではないため、ＩＰ層２４は、送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ｂにパケットを送出する（Ｓ２０２）。【００９１】
ＩＰ層２４からパケットを受信したアダプタ１７Ｂまたはドライバ部２５Ｂは、設定されたモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ２０３）。アダプタ１７Ｂまたはドライバ部２５Ｂは、設定されたモードがアドレス変換モードであれば、図１４のように送信先ＩＰアドレスを10.20.2.2から10.20.1.1に、送信先ＭＡＣアドレスをMAC22からMAC11に、送信元ＩＰアドレスを10.20.2.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC21からMAC12に変換する（Ｓ２０４）。そして、アダプタ１７Ｂは、アドレスを変換したパケットを外部へ送信する（Ｓ２０５）。
なお、Ｓ２０３で、設定されたモードがアドレス変換モードでない、即ち通常モードと判定された場合、アダプタ１７Ｂあるいはドライバ２５Ｂはアドレスを変換せずにパケットを送信する（Ｓ２０６）。【００９２】
Ｓ２０４におけるアドレスの変換では、送信先が第二の仮想マシンから自装置内の他方のアダプタ１７Ａとなるように、アダプタ１７Ｂまたはドライバ部２５Ｂが送信するパケット上の送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図１４に示すように変換する。【００９３】
また、Ｓ２０４におけるアドレスの変換では、送信元がアダプタ１７Ｂから第一の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１４に示すように変換する。図３に示したように、アダプタ１７Ａに対して通信相手を第一の仮想マシンと見せかけるため、図１４の例では送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ１２としている。【００９４】
アダプタ１７Ｂから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ａに受信される。アダプタ１７Ａは、受信したパケットをドライバ部２５Ａ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第一の仮想マシンからのパケットとして受信する。【００９５】
（３）アダプタ１７Ａまたはドライバ部２５Ａにおいて、ＴＣＰ／ＩＰパケットを送信時、図１５のようにＭＡＣアドレスとＩＰアドレスとを変換する。以下、アダプタ１７Ａまたはドライバ部２５Ａによるアドレス変換処理の詳細を図９を用いて説明する。【００９６】
アドレス解決によって第一の仮想マシンのＭＡＣアドレスを認識したアプリケーション部２１は、第一の仮想マシン宛にパケットを送出する（Ｓ３０１）。【００９７】
送信先ＩＰアドレスが第一の仮想マシンであり、図３に示すように自装置内ではないため、ＩＰ層２４は、宛先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ａにパケットを送出する（Ｓ３０２）。【００９８】
ＩＰ層２４からパケットを受信したアダプタ１７Ａまたはドライバ部２５Ａは、設定されたモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ３０３）。設定されたモードがアドレス変換モードであれば、図１５のように送信先のＩＰアドレスを10.20.1.2から10.20.2.1に、送信先のＭＡＣアドレスをMAC12からMAC21に、送信元のＩＰアドレスを10.20.1.1から10.20.2.2に、送信元ＭＡＣアドレスをMAC11からMAC22に変換する（Ｓ３０４）。そしてアダプタ１７Ａは、アドレスが変換されたパケットを外部に送信する（Ｓ３０５）。なお、Ｓ３０３で、アドレス変換モードでないと判定されればアドレスを変換せずにパケットを送信する（Ｓ３０６）。【００９９】
Ｓ３０４におけるアドレスの変換では、送信先が自装置内の他方のアダプタ１７Ｂとなるように、送信するパケットの送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図１５に示すように変換する。【０１００】
また、Ｓ３０４におけるアドレスの変換では、送信元が所定の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１５に示すように変換する。即ち、図３に示したように、アダプタ１７Ｂに対して通信相手を第二の仮想マシンと見せかけるため、図１５のように、パケットの送信元ＩＰアドレスを10.20.2.2、送信元ＭＡＣアドレスをＭＡＣ２２としている。【０１０１】
アダプタ１７Ａから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ｂに受信される。アダプタ１７Ｂは、受信したパケットをドライバ部２５Ｂ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第二の仮想マシンからのパケットとして受信する。【０１０２】
次に、前記試験を行うためのコマンドの入力によって、図６に示すようにアダプタ１７Ｂからアダプタ１７Ａへの通信が指定された場合について説明する。
（４）前記試験を行うためのコマンドに応じ、アプリケーション部２１は、第二の仮想マシン宛てのパケットの送信を開始しようとする。ここで第二の仮想マシンのＩＰアドレスは、前述のように自装置内のアダプタとは異なるＩＰアドレスが指定されている。このためＩＰ層２４は、図１０に示すように、送信先ＩＰアドレスと対応するＭＡＣアドレスを求めるアドレス解決要求を行う（Ｓ４０１）。【０１０３】
そしてＩＰ層２４は、アドレス解決要求パケットの送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ｂを選択して該ドライバ部２５Ｂにアドレス解決要求パケットを送出する（Ｓ４０２）。【０１０４】
パケットを受信したアダプタ１７Ｂまたはドライバ部２５Ｂは、設定されているモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ４０３）。判定の結果、設定されているモードがアドレス変換モードであれば、図１６のように送信先ＩＰアドレスを10.20.2.2から10.20.1.1に、送信元ＩＰアドレスを10.20.2.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC21からMAC12に変換する（Ｓ４０４）。そして、アダプタ１７Ｂは、アドレスを変換したパケットを外部へ送信する（Ｓ４０５）。
なお、Ｓ４０３で、設定されたモードがアドレス変換モードでない、即ち通常モードと判定された場合、アダプタ１７Ｂあるいはドライバ２５Ｂはアドレスを変換せずにパケットを送信する（Ｓ４０６）。
また、Ｓ４０４におけるアドレスの変換では、パケットの送信先が自装置内の他方のアダプタ１７Ａとなるように、アダプタ１７Ｂまたはドライバ２５Ｂが送信するパケットの送信先アドレスを図１６に示すように変換する。但し、図１６の例では、アドレス解決要求のパケットなので、このパケットの送信先ＭＡＣアドレスはブロードキャスト用のff.ff.ff.ff.ff.ffとする。【０１０５】
更に、Ｓ４０４におけるアドレスの変換では、パケットの送信元が所定の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１６に示すように変換する。例えばアダプタ１７Ｂは、図３に示したように、アダプタ１７Ａに対して通信相手を第一の仮想マシンと見せかけるため、図１６の例では送信するパケットの送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ１２としている。【０１０６】
アダプタ１７Ｂから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ａに受信される。アダプタ１７Ａは、受信したパケットをドライバ部２５Ａ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第一の仮想マシンからのパケットとして受信する。【０１０７】
（５）アダプタ１７Ａまたはドライバ部２５Ａにおいて、アドレス解決応答（ARP reply）を送信時、図１７のようにＭＡＣアドレス及びＩＰアドレスを変換する。以下、アダプタ１７Ａ又はドライバ２５Ａにおけるアドレス変換処理の詳細を図１１を用いて説明する。【０１０８】
即ち、アプリケーション部２１は、第一の仮想マシンに対してアドレス解決応答を返す（Ｓ５０１）【０１０９】
この場合も送信先ＩＰアドレスが第一の仮想マシンであり、図３に示すとおり自装置内ではないため、ＩＰ層２４は、送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ａにパケットを送出する（Ｓ５０２）。【０１１０】
ＩＰ層２４からパケットを受信したアダプタ１７Ａまたはドライバ部２５Ａは、設定されたモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ５０３）。アダプタ１７Ａまたはドライバ部２５Ａは、設定されたモードがアドレス変換モードであれば、図１７に示すように送信先のＩＰアドレスを10.20.1.2から10.20.2.1に、送信先のＭＡＣアドレスをMAC12からMAC21に、送信元のＩＰアドレスを10.20.1.1から10.20.2.2に、送信元ＭＡＣアドレスをMAC11からMAC22に変換する（Ｓ５０４）。【０１１１】
そしてアダプタ１７Ａは、アドレスが変換されたパケットを外部に送信する（Ｓ５０５）。なお、Ｓ５０３で、アドレス変換モードでないと判定されればアドレスを変換せずにパケットを送信する（Ｓ５０６）。【０１１２】
Ｓ５０４におけるアドレスの変換では、送信先が第一の仮想マシンから自装置内の他方のアダプタ１７Ｂとなるように、アダプタ１７Ａまたはドライバ部２５Ａが、送信するパケット上の送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図１７に示すように変換する。【０１１３】
また、Ｓ５０４におけるアドレスの変換では、送信元がアダプタ１７Ａから第二の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１７に示すように変換する。即ち、図３に示したように、アダプタ１７Ｂに対して通信相手を第二の仮想マシンと見せかけるため、図１７の例では送信元ＩＰアドレスを10.20.2.2、送信元ＭＡＣアドレスをＭＡＣ２２としている。【０１１４】
アダプタ１７Ａから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ｂに受信される。アダプタ１７Ｂは、受信したパケットをドライバ部２５Ｂ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第二の仮想マシンからのパケットとして受信する。【０１１５】
（６）アダプタ１７Ｂまたはドライバ部２５Ｂにおいて、ＴＣＰ／ＩＰパケットを送信時、図１８のようにＭＡＣアドレスとＩＰアドレスとを変換する。以下、アダプタ１７Ｂまたはドライバ部２５Ｂによるアドレス変換処理の詳細を図１２を用いて説明する。【０１１６】
アドレス解決によって第二の仮想マシンのＭＡＣアドレスを認識したアプリケーション部２１は、第二の仮想マシン宛にパケットを送出する（Ｓ６０１）。【０１１７】
この場合、送信先ＩＰアドレスが第二の仮想マシンであり、図３に示すとおり自装置内ではないため、ＩＰ層２４は、送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５Ｂにパケットを送出する（Ｓ６０２）。【０１１８】
ＩＰ層２４からパケットを受信したアダプタ１７Ｂまたはドライバ部２５Ｂは、設定されたモードがアドレス変換モード（試験モード）か否かを判定する（Ｓ６０３）。アダプタ１７Ｂまたはドライバ部２５Ｂは、設定されたモードがアドレス変換モードであれば、図１８のように送信先ＩＰアドレスを10.20.2.2から10.20.1.1に、送信先ＭＡＣアドレスをMAC22からMAC11に、送信元ＩＰアドレスを10.20.2.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC21からMAC12に変換する（Ｓ６０４）。そして、アダプタ１７Ｂは、アドレスを変換したパケットを外部へ送信する（Ｓ６０５）。
なお、Ｓ６０３で、設定されたモードがアドレス変換モードでない、即ち通常モードと判定された場合、アダプタ１７Ｂあるいはドライバ２５Ｂはアドレスを変換せずにパケットを送信する（Ｓ６０６）。【０１１９】
Ｓ６０４におけるアドレスの変換では、送信先が第二の仮想マシンから自装置内の他方のアダプタ１７Ａとなるように、アダプタ１７Ｂまたはドライバ部２５Ｂが送信するパケット上の送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図１８に示すように変換する。【０１２０】
また、Ｓ６０４におけるアドレスの変換では、送信元がアダプタ１７Ｂから第一の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図１８に示すように変換する。即ち、図３に示したようにアダプタ１７Ａに対して通信相手を第一の仮想マシンと見せかけるため、図１８の例では送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ１２としている。【０１２１】
アダプタ１７Ｂから送信されたパケットは、ネットワークケーブルを介してアダプタ１７Ａに受信される。アダプタ１７Ａは、受信したパケットをドライバ部２５Ａ、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である第一の仮想マシンからのパケットとして受信する。【０１２２】
上記のように、コンピュータ１は、図４のＳ２を図７−図１３の手順でアダプタ１７Ａの通信相手が第一の仮想マシン、アダプタ１７Ｂの通信相手が第二の仮想マシンであるように見せかけて、アダプタ１７Ａ，１７Ｂ間の通信を繰り返して試験を行う（Ｓ３）。【０１２３】
そして、アプリケーション部２１は、送受信したデータ量や単位時間当たりの速度を求めて試験結果とし（Ｓ４）、記録媒体への書き出しや表示装置への表示、他のコンピュータへの送信、印刷などの出力処理を行う（Ｓ５）。【０１２４】
−ユーザインタフェース−
アドレス変換を行うモード、つまり試験モードに移行すること、および、そのモードを解除することは、ユーザがコマンドで指定するようにする。【０１２５】
ここで、コンピュータ１は、図１の状態、即ち１台の試験装置上で、アダプタ１７Ａ，１７Ｂがケーブルで直結してあり、ドライバ部２５Ａがアダプタ１７ＡのＩＰアドレスIP11=10.20.1.1と対応付けられ、ドライバ部２５Ｂがアダプタ１７ＢのＩＰアドレスIP21=10.20.2.1と対応付けられている状態であるとする。【０１２６】
例えば、アドレス変換モードへ移行するコマンドとして、「addrtrans-s」を用いる。また、このコマンドの入力時には、通信方向や仮想マシンのアドレスを指定するため、ユーザが入力部１５から、次のように指定する。
＞ addrtrans  -s ドライバ＃１ 10.20.1.2  ドライバ＃２  10.20.2.2【０１２７】
ここで、「ドライバ＃１」はドライバ部２５Ａのドライバ名、「ドライバ＃２」はドライバ部２５Ｂのドライバ名、「10.20.1.2」は第一の仮想マシンのＩＰアドレス、「10.20.2.2」は第二の仮想マシンのＩＰアドレスである。【０１２８】
一方、アドレス変換モードを解除する、即ち通常モードを設定するコマンドとして、例えば「addrtrans  -d」を用いる。このコマンドの入力時にアドレス変換モードを解除するドライバを指定するため、ユーザが入力部１５から、以下のように指定する。
＞ addrtrans  -d ドライバ＃１ ドライバ＃２【０１２９】
図１９は、試験モード時のアダプタ１７Ａからアダプタ１７Ｂへ通信する際の送信経路を示す図である。
アドレス変換モードへ移行後、送信先アドレスとして第一の仮想マシンのＩＰアドレス（ＩＰ１２＝１０．２０．１．２）を指定してパケットを送信すると、前述の（１）〜（３）の変換処理により、図１９のように、ｎｅｔｐｅｒｆコマンド２１→ストリームヘッド２２→ＴＣＰ２３→ＩＰ２４→ドライバ２５Ａ→アダプタ１７Ａ→アダプタ１７Ｂ→ドライバ２５Ｂ→ＩＰ２４→ＴＣＰ２３→ストリームヘッド２２→ｎｅｔｓｅｒｖｅｒデーモン２１を経由したパケットの送信が実行できる。【０１３０】
例えば、試験を行うためパケットを送信するコマンドとして「netperperf」を用いる。アドレス変換モードへ移行後に次のようにコマンドを実行する。
＞ netperperf  -H 10.20.1.2【０１３１】
また、図２０は、試験モード時のアダプタ１７Ａからアダプタ１７Ｂへ通信する際の送信経路を示す図である。
アドレス変換モード移行後、送信先アドレスとして第二の仮想マシンのＩＰアドレス（＝ＩＰ１２＝１０．２０．２．２）を指定してパケット送信すると、前述の（４）〜（６）の変換処理により、図２０のように、ｎｅｔｐｅｒｆコマンド２１→ストリームヘッド２２→ＴＣＰ２３→ＩＰ２４→ドライバ２５Ｂ→アダプタ１７Ｂ→アダプタ１７Ａ→ドライバ２５Ａ→ＩＰ２４→ＴＣＰ２３→ストリームヘッド２２→ｎｅｔｓｅｒｖｅｒデーモン２１を経由した送信が実行できる。【０１３２】
例えば、アドレス変換モードへ移行後に次のようにコマンドを実行する。
＞ netperperf  -H 10.20.2.2【０１３３】
−アダプタでアドレス変換する場合のコマンドの実装−
図２１はアドレス変換レジスタの説明図、図２２はアドレス変換レジスタの更新処理の説明図、図２３はアダプタ１７Ａのアドレス変換レジスタに書き込まれる値の一例を示す図、図２４はアダプタ１７Ｂのアドレス変換レジスタに書き込まれる値の一例を示す図、図２５はアドレス変換レジスタの値をクリアして通常モードとした例を示す図である。
アダプタ１７Ａ，１７Ｂ上のメモリ空間における所定の場所に図２１に示す領域、つまりアドレス変換レジスタを確保しておく。【０１３４】
図２１のアドレス変換レジスタは、現在設定されているモード、自分側の仮想マシンのIPアドレス、自分側の実マシン上のIPアドレス、自分側の仮想マシン上のMACアドレス、自分側のアダプタ上のMACアドレス、対向側の仮想マシンのIPアドレス、対向側の実マシン上のIPアドレス、対向側の仮想マシン上のMACアドレス、対向側のアダプタ上のMACアドレス等の項目を記憶する。
なお、現在設定されているモードは、例えばアドレス変換モードであれば１、通常モードであれば０のように設定する。また、例えばアダプタ１７Ａのアドレス変換レジスタであれば、自分側の仮想マシンは第一の仮想マシン、対向側の仮想マシンは第二の仮想マシン、自分側の実マシン上のアドレスがアダプタ１７Ａのアドレス、対向側の実マシン上のアドレスがアダプタ１７Ｂのアドレスである。【０１３５】
そして、addrtrans  -sコマンドを実行した場合に、ＣＰＵ１２が以下の動作を行うこととする。【０１３６】
まず、ＯＳに備わっている既存のインタフェースで、アダプタ１７Ａ及びアダプタ１７ＢのＭＡＣアドレスおよびＩＰアドレスを調べ、アドレス変換レジスタの自分側の実マシン上のIPアドレス、自分側のアダプタ上のMACアドレス、対向側の実マシン上のIPアドレス、対向側のアダプタ上のMACアドレスを記憶する。なお、ＭＡＣアドレスやＩＰアドレスは、ＯＳにより、各アダプタ１７Ａ，１７Ｂに係るドライバ名と対応付けられてメモリ中に格納されている。【０１３７】
次に、第一の仮想マシンおよび第二の仮想マシンにＭＡＣアドレスを割り当て、アドレス変換レジスタの自分側の仮想マシン上のMACアドレス及び対向側の仮想マシン上のMACアドレスとして記憶する。その値をＭＡＣ２１，ＭＡＣ２２とする。ここで、第一の仮想マシンのＭＡＣアドレスＭＡＣ２１及び第二の仮想マシンのＭＡＣアドレスＭＡＣ２２と、アダプタ１７ＡのＭＡＣアドレスＭＡＣ１１と，アダプタ１７ＢのＭＡＣアドレスＭＡＣ１２とが、それぞれユニークな値となるように、ＭＡＣ２１、ＭＡＣ２２を割り当てる。【０１３８】
第一の仮想マシンおよび第二の仮想マシンのＩＰアドレスは、上記のようにａｄｄｒｔ  ｒａｎｓ−ｓコマンドの引数で与えられているため、この引数をアドレス変換レジスタ  の自分側の仮想マシンのIPアドレス及び対向側の仮想マシンのIPアドレスとして記憶す  る。【０１３９】
次に、図２２のようにドライバを制御するコマンド、例えばｉｏｃｔｌによって、アプリケーション部２１は、ドライバ部２５Ａおよびドライバ部２５Ｂのそれぞれに、アダプタ１７Ａおよびアダプタ１７Ｂのアドレス変換レジスタに書きこむべき値を渡す。【０１４０】
ドライバ部２５Ａ，２５Ｂは、ｉｏｃｔｌを受けると、各ドライバ部に対応するアダプタ１７Ａ，１７Ｂ上のアドレス変換レジスタに該ｉｏｃｔｌで受けた前記各項目の値を書きこむ。【０１４１】
例えば、”addrtrans  -s ドライバ＃１ 10.20.1.2  ドライバ＃２  10.20.2.2” が実行された場合、ドライバ部２５Ａはアダプタ１７Ａのアドレス変換レジスタに図２３のように各情報を書きこむ。
即ち、モードが１、自分側の仮想マシンのIPアドレスが10.20.1.2、自分側の実マシン上のIPアドレスが10.20.1.1、自分側の仮想マシン上のMACアドレスがMAC12、自分側のアダプタ上のMACアドレスがMAC11、対向側の仮想マシンのIPアドレスが10.20.2.2、対向側の実マシン上のIPアドレスが10.20.2.1、対向側の仮想マシン上のMACアドレスがMAC22、対向側のアダプタ上のMACアドレスがMAC21となる。【０１４２】
同様に、ドライバ部２５Ｂは、アダプタ１７Ｂのアドレス変換レジスタに図２４のように各情報を書きこむ。【０１４３】
そして、”addrtrans  -d ドライバ＃１ ドライバ＃２” が実行されてアドレス変換モードが解除された場合、ドライバ部２５Ａからアダプタ１７Ａに対して、また、ドライバ部２５Ｂからアダプタ１７Ｂに対して、図２５に示すようにアドレス変換レジスタの全ての値を０にクリアする指示を発する。【０１４４】
−ドライバでアドレス変換する場合のコマンドの実装−
図２６はアドレス変換情報の更新処理の説明図である。
ドライバ部２５Ａ，２５Ｂは、アダプタの状態や、上位の要素から指示された情報を保存しておくために、“制御構造体”と呼ばれるデータの構造体をコンピュータ１上のメモリ１３に保持している。【０１４５】
制御構造体内に、図２１のアドレス変換レジスタと同等な情報を取り込む。これを“アドレス変換情報”と呼ぶことにする。【０１４６】
ｉｏｃｔｌによって、ドライバ部２５Ａおよびドライバ部２５Ｂのそれぞれにアドレス変換情報に書きこむべき値を渡す処理までは、図２２においてアドレス変換レジスタに書きこむべき値を渡す処理と同様である。以下、アドレス変換情報の書き込み処理の詳細を説明する。【０１４７】
ドライバ部２５Ａ，２５Ｂはｉｏｃｔｌを受けると、図２６に示すように制御構造体の値を更新する。例えば、”addrtrans  -s ドライバ＃１ 10.20.1.2  ドライバ＃２  10.20.2.2” が実行された場合、ドライバ部２５Ａは、制御構造体のアドレス変換情報として図２３の値を書きこむ。また、ドライバ部２５Ｂは、制御構造体のアドレス変換情報として図２４の値を書きこむ。【０１４８】
一方、”addrtrans  -d ドライバ＃１ ドライバ＃２” が実行されてアドレス変換モードが解除された場合、ドライバ部２５Ａ，２５Ｂはそれぞれ制御構造体のアドレス変換情報を図２５に示すようにクリアする。【０１４９】
−アダプタでアドレス変換する場合のアダプタの実装例−
図２７は、通常モード時、即ち通常の通信を行う場合の状態を示したアダプタの機能ブロック図である。なお、アダプタ１７Ａ，１７Ｂは同じ構成を有し、それぞれ送信時と受信時で対照的に同じ処理を行うので、便宜上アダプタ１７Ａについて説明し、アダプタ１７Ｂについての説明を省略する。また、ドライバ部２５Ａ，２５Ｂについても同様であり、ドライバ部２５Ｂについての説明を省略する。【０１５０】
図２７のようにアダプタ１７Ａは、送信キュー７１、送受信器７２、データ変換器７３、受信キュー７４を有する。【０１５１】
ドライバ部２５Ａが、アダプタ１７Ａにパケットの送信依頼を行うと、送信パケットはまず送信キュー７１に登録され、ＦＩＦＯ（first in, first out）で送受信器７２へ送られる。【０１５２】
送受信器７２は、送信キュー７１から送られたパケットに、伝送路でのエラーを検出するためのエラー検出ビットを付与して、そのパケットの送信を指定する。この段階までは、パケットは０と１のビット列の形式である。【０１５３】
そして送受信器７２で送信の指定を受けたパケットは、データ変換器７３に届き、電気信号または光信号の形式に変換されて、ＬＡＮケーブルなどの伝送路へ送出される。【０１５４】
受信パケットは、電気信号または光信号の形で伝送路から、データ変換器７３に入る。【０１５５】
データ変換器７３は、そのパケットを０と１のビット列に変換する。
送受信器７２は、受信したパケットのエラー検出ビットと、エラー検出ビット以外のデータの内容を比較して、伝送路でエラーが発生していないかどうかを確認する。受信パケットにエラーが発生していれば受信したデータを破棄し、ドライバ部２５Ａにエラーの発生を通知する。エラーが発生していなければ、送受信器７２はエラー検出ビットを除去して、受信キュー７４に受信パケットを登録し、ドライバ部２５Ａに対して受信が発生したことを、割込みなどで通知する。【０１５６】
ドライバ部２５Ａは、受信キュー７４から、先に到着した順に受信パケットを取りだす。【０１５７】
一方、図２８は、アドレス変換を行う場合の状況を示したアダプタ１７Ａの機能ブロック図である。【０１５８】
試験モード時、即ち、アドレス変換して通信する場合、本実施例では、図２８に示すように、アドレス変換器７５を用いて、送信キュー７１と送受信器７２の間でパケットのアドレスを変換する。【０１５９】
ドライバ部２５Ａによって本体上のメモリ１３からアダプタ１７Ａへ送られたパケットは、アダプタ１７Ａ上のメモリ、つまり送信キュー７１に書き込まれる。この段階のパケットは、本体上のメモリ１３上に書かれているのか、アダプタ１７Ａ上のメモリに書かれているかの違いだけで、どちらも０と１のビットで表されたものであり、内容も本体メモリ上に存在していた時と同じである。また、パケットは、送受信器７２に入る前までエラー検出ビットも付けられていない。【０１６０】
試験変換器７５は、送信キュー７１からパケットを読み出し、パケットのアドレスを前述の（１）〜（３）のように変換して送受信器７２へ送る。送受信器７２及びデータ変換器７３を介してパケットを送信する処理は、図２７の処理と同じである。また、試験モードであってもパケットの受信処理は通常モードと同じである。【０１６１】
図２９は、試験変換器７５の構成図である。図２９に示すように、試験変換器７５は、アドレス変換レジスタ５０、モード判定器５１、アドレス変換部７６を備えている。また、アドレス変換部７６は、パケット種別判定器５２、ＡＲＰパケット変換器５３、ＴＣＰ／ＩＰパケット変換器５４、チェックサム計算器５５を有している。【０１６２】
アドレス変換レジスタ５０は、図２１に示した内容を記憶しており、モード判定器５１や、ＡＲＰパケット変換器５３、ＴＣＰ／ＩＰパケット変換器５４に参照される。【０１６３】
試験変換器７５の各要素５１−５５は、図３０，３１に示す処理を行う。図３０，３１はアドレス変換処理の説明図である。【０１６４】
先ず、モード判定器５１は、アドレス変換レジスタ５０を参照し、モードが１、即ち試験モードか否かを判定する（Ｓ２１）。モード判定器５１は、モードが１であれば（ｓ２１  Ｙｅｓ）、送信キュー７１から最先のパケットを読み出してパケット種別判定器５２へ送る。一方、モードが０であれば（Ｓ２１  Ｎｏ）、モード判定器５１は送信キュー７１から読み出したパケットを変換せずに、つまりアドレス変換部７６を介することなく送受信器７２へ送る。この場合、処理はＸ２へ移行する。【０１６５】
モード判定器５１からパケットを受信したパケット種別判定器５２は、パケットのイーサタイプが０ｘ８０６であるか否かを判定する（Ｓ２２）。イーサタイプが０ｘ８０６であれば、当該パケットがＡＲＰリクエスト又はＡＲＰリプライであることを示している。従って、パケット種別判定器５２は、イーサタイプが０ｘ８０６であれば（Ｓ２２  Ｙｅｓ）パケットをＡＲＰパケット変換部５３へ送る。この場合、処理はＸ１へ移行する。【０１６６】
また、パケット種別判定器５２は、イーサタイプが０ｘ８０６でなければ（Ｓ２２  Ｎｏ）、イーサタイプが０ｘ８００か否かを判定する（Ｓ２３）。イーサタイプが０ｘ８００であれば（Ｓ２３  Ｙｅｓ）、当該パケットがＩＰパケットであることを示している。従って、パケット種別判定器５２は、イーサタイプが０ｘ８００でなければ（Ｓ２３  Ｎｏ）当該パケットを変換せずに直接送受信器７２へ送る。この場合、処理はＸ２へ移行する。【０１６７】
そして、パケット種別判定器５２は、イーサタイプが０ｘ８００であれば（Ｓ２３  Ｙｅｓ）ＩＰヘッダ中のＰＲＴフィールドの値が６、即ちＴＣＰであるか否かを判定する（Ｓ２４）。ここでＰＲＴフィールドの値が６であれば（Ｓ２４  Ｙｅｓ）、パケット種別判定器５２は、当該パケットをＴＣＰ／ＩＰパケット変換部５４に送る。一方、ＰＲＴフィールドの値が６でなければ（Ｓ２４  Ｎｏ）、当該パケットを変換せず直接送受信器７２へ送る。この場合、処理はＸ２へ移行する。【０１６８】
パケット種別判定器５２からＡＲＰパケットを受信したＡＲＰパケット変換器５３は、パケット中の送信先ＭＡＣアドレスがブロードキャストアドレス、即ちff.ff.ff.ff.ff.ffか否かを判定する（Ｓ２５）。【０１６９】
ＡＲＰパケットのＭＡＣアドレスがブロードキャストアドレスでなければ（Ｓ２５  Ｎｏ）、ＡＲＰパケット変換器５３は、アドレス変換レジスタ５０を参照して対向側のネットアダプタのＭＡＣアドレスを求め、求めたＭＡＣアドレスでパケット中の送信先ＭＡＣアドレスを書き換える（Ｓ２６）。【０１７０】
Ｓ２６での送信先ＭＡＣアドレスの書き換え後、或はＳ２５で送信先ＭＡＣアドレスがブロードキャストアドレスであった場合（Ｓ２５  Ｙｅｓ）、ＡＲＰパケット変換器５３は、アドレス変換レジスタ５０を参照し、以下のアドレスについて書き換える（Ｓ２７）。【０１７１】
１．送信元ＭＡＣアドレスを、対向側の仮想マシン上のＭＡＣアドレスで書き換える。【０１７２】
２．送信元ＩＰアドレスを、対向側の仮想マシン上のＩＰアドレスで書き換える。【０１７３】
３．送信先ＩＰアドレスを、対向側のアダプタのＩＰアドレスに書き換える。【０１７４】
そして、ＡＲＰパケット変換器５３は、変換後のパケットを送受信器７２へ送る（Ｓ２８）。【０１７５】
なお、上記ＡＲＰパケット変換器５３で変換するＡＲＰパケットにおいて、送信元ＭＡＣアドレスとは、図３２に示すＭＡＣヘッダ中の送信元ＭＡＣ、及び図３４に示すフォーマットのＳＨＡｄのことである。上記の書換えは、この送信元ＭＡＣ、ＳＨＡｄの両方に対して行っている。【０１７６】
図３２は、ＭＡＣヘッダを含むパケットのフォーマットを示す図、図３３は図３２の各フィールドの説明図、図３４はＡＲＰパケットのフォーマットを示す図、図３５は図３４の各フィールドの説明図である。【０１７７】
また、送信先ＭＡＣアドレスとは、図３２に示すＭＡＣヘッダ中の送信先ＭＡＣ、および、図３４に示すフォーマットのＴＨＡｄのことであり、上記の書換えはこの送信先ＭＡＣ、ＴＨＡｄの両方に対して行っている。【０１７８】
更に、送信元ＩＰアドレスとは、図３４に示すフォーマットのＳＰＡｄのことであり、送信先ＩＰアドレスとは、図３４に示すフォーマットのＴＰＡｄのことである。【０１７９】
また、パケット種別判定器５２からＴＣＰ／ＩＰパケットを受信したＴＣＰ／ＩＰパケット変換器５４は、アドレス変換レジスタ５０を参照し、以下のアドレスについて書き換える（Ｓ２９）。
１．送信元ＭＡＣアドレスを、対向側の仮想マシン上のＭＡＣアドレスで書き換える。
２．送信先ＭＡＣアドレスを、対向側のアダプタのＭＡＣアドレスで書き換える。
３．送信元ＩＰアドレスを、対向側の仮想マシン上のＩＰアドレスで書き換える。
４．送信先ＩＰアドレスを、対向側のアダプタのＩＰアドレスに書き換える。【０１８０】
そして、ＴＣＰ／ＩＰパケット変換器５４は、変換後のパケットをチェックサム計算器５５へ送る（Ｓ３０）。【０１８１】
なお、上記ＴＣＰ／ＩＰパケット変換器５４で変換するＴＣＰ／ＩＰパケットについて、送信元ＭＡＣアドレスとは、図３２に示すＭＡＣヘッダ中の送信元ＭＡＣのことである。【０１８２】
同様に送信先ＭＡＣアドレスとは、図３２に示すＭＡＣヘッダ中の送信先ＭＡＣのことである。【０１８３】
更に、送信元ＩＰアドレスとは、図３６に示すＩＰヘッダのＦＲＯＭ、送信先ＩＰアドレスとは、図３６に示すＩＰヘッダのＴＯのことである。図３６はＩＰヘッダのフォーマットを示す図、図３７は図３６のＩＰヘッダの各フィールドの説明図である。【０１８４】
なお、本実施例において、各アダプタは、アドレス変換レジスタ中の自身のアドレスを変換処理には用いなかったが、アドレス変換（上書き）前のパケットの正当性チェックに用いても良い。【０１８５】
例えば、変換前の送信元アドレスや送信先アドレスが、図３に示すように送信元がアダプタ自身のアドレス、送信先が対向する仮想マシンのアドレスと一致しているか否かをアダプタがチェックする。【０１８６】
ここで正当でなかった、つまりアドレスが一致しなかった場合には、アダプタがドライバにエラーを通知し、ドライバがそれを受けてエラーメッセージを出力するなどの処置を行う。また、正当でなかったパケットについては、送信せずに破棄する、または、変換せずに送信する、などの処置を行う。【０１８７】
この正当性チェックは、想定外のパケットが送信依頼された場合に、正しくない性能測定値となることを防ぐ。なお、想定外のパケットは、マシンがＩＰルータの設定になっていて、ＩＰのフォワード機能によって、他のネットワークのパケットが混入した場合などに発生することがある。【０１８８】
上記ＴＣＰ／ＩＰパケット変換器５４によってアドレスの上書を行うと、ＩＰヘッダ中のチェックサム値（図３６，３７のＳＵＭ）、および、図３８，３９に示すＴＣＰヘッダ中のチェックサム値（ＳＵＭ）が正しい値ではなくなる。そこで、アドレス変換後のパケットをチェックサム計算器５５に入力して、ＩＰヘッダ中のチェックサム値及びＴＣＰヘッダ中のチェックサム値をそれぞれ再計算して該ＩＰヘッダ中のチェックサム値及びＴＣＰヘッダ中のチェックサム値を上書する。なお、アダプタ中でＩＰヘッダ中のチェックサム値及びＴＣＰヘッダ中のチェックサム値を計算すること自体は、“チェックサムオフロード”あるいは“ハードウェアチェックサム”と呼ばれる既存の技術を用いて行うことができる。【０１８９】
チェックサム計算器５５は、ＴＣＰ／ＩＰパケット変換器５４から変換後のパケットを受信すると、該パケットのＩＰヘッダ中の各フィールドの値、例えばVER、IHL、ST、LEN、ID、FC、TTL、PRT、FROM、TO、OPTの値を読み出してチェックサム値を再計算し、算出した値で当該パケットのチェックサム（ＳＵＭ）の値を上書きする。同様に、チェックサム計算器５５は、ＴＣＰヘッダ中の各フィールドの値を読み出してチェックサム値を再計算し、算出した値でチェックサム（ＳＵＭ）の値を上書きする（Ｓ３１）。【０１９０】
そして、チェックサム計算器５５は、チェックサムを改めたパケットを送受信器７２へ送信する（Ｓ３２）。【０１９１】
−ドライバでアドレス変換する場合のドライバの実装例−
ドライバ部２５Ａ，２５Ｂは送信時、上位、つまり送信処理の流れの上流側の要素から、送信パケットの他に、送信元ＭＡＣアドレス、送信先ＭＡＣアドレス、EthertypeといったＭＡＣヘッダを構成する要素を、パケット送信のたびに受取る。以降、送信パケット＋送信元ＭＡＣアドレス＋送信先ＭＡＣアドレス＋Ethertypeのセットのことを、送信ストリームメッセージと称す。【０１９２】
図４０は、ドライバ部２５Ａ或は２５Ｂによるパケット送信時の処理の説明図である。以下、便宜上ドライバ２５Ａについて説明するが、ドライバ２５Ｂについても同様である。【０１９３】
ドライバ部２５Ａは、送信ストリームメッセージや送信完了通知といった送信に係る情報の受信を待つ（Ｓ４１）。送信ストリームメッセージを受信した場合には、ドライバ部２５Ａ，２５Ｂの送信キュー６１に、既に送信ストリームメッセージが存在するか否かを判定する（Ｓ４２）。【０１９４】
ここで、送信キュー内６１に既に送信ストリームメッセージが存在する場合（Ｓ４２  Ｙｅｓ）、ドライバ部２５Ａ，２５Ｂは、受信した送信ストリームメッセージを送信キュー６１の末尾に登録して（Ｓ４３）、次の情報の受信を待つ（Ｓ４１）。【０１９５】
一方、Ｓ４１において、送信キュー６１に送信ストリームメッセージが登録された状態で、送信完了通知を受信した場合、ドライバ部２５Ａ，２５Ｂは送信キュー６１から先頭の送信ストリームメッセージを１つ取り出す（Ｓ４４）。【０１９６】
Ｓ４４の後、或はドライバ部２５Ａ，２５Ｂの送信キュー６１に送信ストリームメッセージが存在しないと判定した場合（Ｓ４２  Ｎｏ）、ドライバ部２５Ａ，２５Ｂは、アダプタ１７Ａ，１７Ｂの送信キュー７１が満杯か否かを判定する（Ｓ４５）。【０１９７】
ここでアダプタ１７Ａ，１７Ｂの送信キュー７１が満杯であれば（Ｓ４５  Ｙｅｓ）、ドライバ部２５Ａ，２５Ｂは、受信した送信ストリームメッセージを送信キュー６１の末尾に登録して（Ｓ４３）、次の情報の受信を待つ（Ｓ４１）。また、アダプタ１７Ａ，１７Ｂの送信キュー７１が満杯でなければ（Ｓ４５  Ｎｏ）、ドライバ部２５Ａ，２５Ｂは、アドレスを変換するステップ４６へ移行する。【０１９８】
Ｓ４６では、図３０，３１で示したアドレス変換処理をドライバ部２５Ａ，２５Ｂが行う。即ち、モード判定器５１、アドレス変換部５６に換わりＣＰＵ１２が図２２，２３と同様の処理を行う。【０１９９】
そしてドライバ部２５Ａ，２５Ｂは、アドレス変換後のパケットにＭＡＣヘッダを付加して（Ｓ４７）、アダプタ１７Ａ，１７Ｂに送って送信を依頼し（Ｓ４８）、Ｓ４１へ戻る。【０２００】
−試験モード時の動作−
性能測定アプリケーションとしてnetperfを用い、netperfに従って実行するアプリケーション部２１の動作について説明する。【０２０１】
netperfは、netperfコマンドで実行される送信用アプリケーションと、受信用アプリケーションとしてのnetserverデーモンで構成されている。送信用アプリケーションにより、ＣＰＵ１２は、前述の送信アプリケーション部として機能し、性能測定のためにパケットを送信する。また、受信用アプリケーションにより、ＣＰＵ１２は前述の受信アプリケーション部として機能し、送信用アプリケーションによって送信されたパケットを受信する。【０２０２】
先ずnetserverコマンドが入力されると、ＣＰＵ１２はnetserverデーモンを起動させる。これによりユーザ空間にデーモンが生成され、netperfコマンドに対する受信側の処理を行えるようにする。【０２０３】
また、上述のようにaddrtrans -sが入力されると、ＣＰＵ１２は該コマンドを実行して試験モードに移行する。【０２０４】
そして、次のnetperfコマンドが入力されるとアプリケーション部２１は、オプションで指定したアドレス、本例では第一の仮想マシン宛てにデータを送信する。
＞ netperf  -H 10.20.1.2 ... 【０２０５】
netperfコマンドに応じアプリケーション２１がパケットを送信を指示すると、ＩＰ層２４は、先ず、送信先のＩＰアドレス10.20.1.2に対するＭＡＣアドレスが不明であるため、図１３に示した変換前の設定でＡＲＰリクエストを生成する。【０２０６】
変換前状態のＡＲＰリクエストは、自装置内に存在しないアドレス宛てであるので、送信先ＩＰアドレスと同じサブネットに属するアダプタ１７Ａのドライバ部２５Ａに渡される。【０２０７】
ドライバ部２５Ａ或はアダプタ１７Ａは、該ＡＲＰリクエストを図５に示す変換後の設定となるようにアドレスを変換してブロードキャストする。【０２０８】
該ＡＲＰリクエストは、ケーブルを介して他方のアダプタ１７Ｂで受信され、ドライバ部２５Ｂ、ＩＰ層２４へ順に送られる。【０２０９】
該ＡＲＰリクエストは、送信元が図３に示した第二の仮想マシン、送信先がアダプタ１７Ｂである場合に、第二の仮想マシンからブロードキャストされるＡＲＰリクエストと同じに変換されている。従ってアダプタ１７Ａから送信されたＡＲＰリクエストであっても第二の仮想マシンからのＡＲＰリクエストとして矛盾なくアダプタ１７Ｂ→ドライバ部２５Ｂ→ＩＰ層２４の順に受信される。【０２１０】
そして、ＩＰ層２４は、該ＡＲＰリクエストに応じてＡＲＰリプライを生成する。該ＡＲＰリプライは、第二の仮想マシンに対するパケットであるため、図１４に示した変換前の設定の通りである。【０２１１】
従って、ＡＲＰリプライの送信先ＩＰアドレスが10.20.2.2であり、自装置内に存在しないため、ＩＰ層２４は、ＡＲＰリプライの送信先ＩＰアドレスと同じサブネットに属するアダプタ１７Ｂのドライバ部２５ＢにＡＲＰリプライを渡す。【０２１２】
ドライバ部２５Ｂ或はアダプタ１７Ｂは、該ＡＲＰリプライを図１４に示す変換後の設定となるようにアドレスを変換して変換後の送信先であるアダプタ１７Ａへ送信する。【０２１３】
該ＡＲＰリプライは、ケーブルを介して他方のアダプタ１７Ａで受信され、ドライバ部２５Ａ、ＩＰ層２４へ順に送られる。【０２１４】
該ＡＲＰリプライは、送信元が図３に示した第一の仮想マシン、送信先がアダプタ１７Ａである場合に、第一の仮想マシンから返信されるＡＲＰリプライと同じに変換されている。従って、アダプタ１７Ｂから送信されたＡＲＰリプライであっても、第一の仮想マシンからのＡＲＰリプライとして矛盾なくアダプタ１７Ａ→ドライバ部２５Ａ→ＩＰ層２４に受信される。【０２１５】
従ってＩＰ層２４は、送信元ＩＰアドレス=10.20.1.2に対応する送信元ＭＡＣアドレスがＭＡＣ１２であると解釈して、アドレス解決が正常に終了する。【０２１６】
アドレス解決後、ＩＰ層２４は、図１５の変換前の設定としたＴＣＰ／ＩＰパケットをドライバ部２５Ａに渡し、ドライバ部２５Ａ或はアダプタ１７Ａが、該ＴＣＰ／ＩＰパケットを図１５に示した変換後の設定のとおり変換してアダプタ１７Ｂへ送信する。【０２１７】
該ＴＣＰ／ＩＰパケットは、ケーブルを介してアダプタ１７Ｂで第二の仮想マシンからのＴＣＰ／ＩＰパケットとして受信される。【０２１８】
このように各アダプタ１７Ａが、第二の仮想マシンであるようにアダプタ１７Ｂに見せかけることでアダプタ１７Ａ，１７Ｂ間の通信を行う。【０２１９】
また、上記の例では、アダプタ１７Ａからアダプタ１７Ｂへパケットを送信したが、アダプタ１７Ｂからアダプタ１７Ａへも同様に送信できる。例えばnetperf  -H 10.20.2.2 ...のように第二の仮想マシンのアドレスを指定してコマンドを実行した場合、上記と比べてドライバ部２５Ａ及びアダプタ１７Ａと、ドライバ部２５Ｂ及びアダプタ１７ｂとを入れ換えた状態で動作する。即ち、図１３〜１５の変換処理に換えて図１６〜１８の変換処理を行いアダプタ１７Ｂ，１７Ａ間の通信を行う。【０２２０】
ここで前記netserverコマンドを実行する場合、次のようなオプションを指定しても良い。
＞ netserver -p 5000
注１．‐ｐオプションではＴＣＰポート番号を指定する。【０２２１】
また、netperfコマンドを実行する場合、次のようなオプションを指定しても良い。
＞ netperf  -H 10.20.1.2  -l 10 -p 5000 -s 65536
注１．−Ｈオプションでは、送信先のＩＰアドレスを指定する。
注２．−ｌオプションでは、測定時間を指定している。netperfコマンドは、その時間経過した後復帰する。この場合１０秒である。
注３．−ｐオプションでは、netserverコマンドで指定したのと同じＴＣＰポート番号を指定する。この場合ＴＣＰポート番号は5000である。
注４．−ｓオプションは、ＴＣＰウインドウサイズを意味するが、send()関数に渡すデータサイズもこの値とし、送信するパケットのサイズを指定する。【０２２２】
アプリケーション部２１は、前記netperfコマンドの実行により、アダプタ１７Ａ，１７Ｂ間のＴＣＰコネクションが確立されると、可能な限り高速に−Ｈで指定されたＩＰアドレスに対してデータを送信しつづける。具体的には、Ｓｏｃｋｅｔ関数ｓｅｎｄ（）で送信依頼しつづける（図４のＳ２）。【０２２３】
また、アプリケーション部２１は、netserverデーモンの実行により、Ｓｏｃｋｅｔ関数ｒｅｃｖ（）でデータを受信しつづける。【０２２４】
なお、可能な限りデータを送信する場合に、ＣＰＵ１２の処理速度能力が非常に低いとデータの送信速度がＣＰＵ１２の処理能力に依存することも考えられる。しかし、通常のＣＰＵ１２の処理能力は、ネットワークアダプタの送信速度と比べて十分に高い。例えば性能測定ツールを複数同時に起動したり、双方向に起動したりしても測定に支障はない。【０２２５】
具体的には、図２７に示すアダプタ１７Ａの送信キュー７１に空きが無くなると、前述のようにドライバ部２５Ａはアダプタ１７Ａへの送信依頼をする代りに、ドライバ部２５Ａの送信キュー６１に送信パケットを溜め込むようになる。【０２２６】
そして、ドライバ部２５Ａの送信キュー６１にも空きが無くなると、ＩＰ層の送信キューに送信パケットが溜まることになる。【０２２７】
そして更に、ＩＰ層の送信キューにも空きが無くなると、該送信キューに空きができるまでの間はｓｅｎｄ（）関数が復帰しない、即ちｓｅｎｄ（）関数の復帰遅延が発生する。【０２２８】
また、送信したデータが通信先に届いているか否かは、コンピュータ１のＴＣＰ層によってチェックされている。つまり、通信相手からのＴＣＰ  ＡＣＫ（データ受信確認パケット）が一定時間後、あるいは、一定データ量送信後に返ってこなければ、送信データが通信先に届いていないと判断し、次の送信を保留するか、あるいは、再送処理を行う。【０２２９】
この現象も、アプリケーション部２１からは、ｓｅｎｄ（）関数の復帰遅延として観測される。【０２３０】
netperfコマンドの−ｌオプションで指定された時間になると、アプリケーション部２１がデータの送信を打ち切り、試験結果算出部２６が送信したデータ量と時間（この場合１０秒）から、性能値を算出して（Ｓ７）、試験結果出力部２７が試験結果を出力する（Ｓ８）。【０２３１】
例えば、以下のように性能値を表示する。この場合は、ソケットサイズが65536バイト、送信メッセージサイズ65536バイトで１０秒間試験した場合のスループットが782.52Mbpsであったことを示している。
TCP STREAM TEST
Recv    Send     Send
Socket  Socket   Message   Elapsed
Size    Size     Size      Time      Throughput
bytes   bytes    bytes     secs.     10^6bits/sec
65536   65536    65536     10.00      782.52
以上のように、本実施例１によれば、一台の試験装置１に搭載したネットワークアダプタ１７Ａ，１７Ｂ間でＴＣＰ／ＩＰを用いた通信が行えるので、簡易な構成でネットワークアダプタ１７Ａ，１７Ｂ或はドライバの試験を行うことができる。【０２３２】
なお、上記ネットワークアダプタは、拡張スロットに装着するネットワークカードのように試験装置１と別体のものに限らず、試験装置１に内蔵、例えばマザーボードに実装されたものでも良い
〈実施例２〉
−１台の試験装置に１枚のカードを挿す場合−
図４１は、実施例２のコンピュータ１を示す図、図４２は実施例２の試験方法の概念図、図４３はアドレスの変換例を示す図、図４４はアドレスの変換例を示す図、図４５はアドレスの変換例を示す図、図４６は試験モード時の送信経路を示す図、図４７はアドレス変換レジスタの説明図、図４８はアドレス変換レジスタの更新処理の説明図、図４９はアドレス変換レジスタに書き込まれる値の一例を示す図、図５０はアドレス変換レジスタの値をクリアして通常モードとした例を示す図、図５１は通常モード時のアダプタの機能ブロック図、図５２は試験モード時のアダプタの機能ブロック図である。
本実施例２は、実施例１と比べて図１,図２の試験装置１に搭載するネットワークカード（アダプタ）１７を１枚とした点が異なっている。その他の構成は実施例１と同じであるので、同一の要素には同符号を付すなどして再度の説明を省略する。【０２３３】
アダプタ１７は、ネットワーク側へ送出するデータをネットワーク側からのデータとして自身で受信するアダプタ内折り返し機能を有している。例えば、図４４の送受信器７２やネットワークとのインタフェースの送信側から自身の受信側へデータを迂回させる経路１９を有している。【０２３４】
本実施例２では、図４２に示すようにアダプタ１７のＩＰアドレスを10.20.1.1、通信相手である仮想マシンのＩＰアドレスが10.20.1.2であるように、ＩＰ層に見せかけて通信を行う。【０２３５】
仮想マシン上のＩＰアドレスは、試験装置１上に存在しないものを選択する。これは、仮想マシン上のＩＰアドレスが試験装置１上に存在するものであると、送信先アドレスとしたときにパケットがＩＰ層２４で折り返してしまうためである。【０２３６】
また、仮想マシンへの送信がアダプタ１７から行われるように、仮想マシンにアダプタ１７と同じＩＰサブネットに属するＩＰアドレスを割り当てている。【０２３７】
仮想マシンには、アダプタ１７とは異なるＭＡＣアドレスを割り当てている。即ち、仮想マシンＭＡＣ２とアダプタ１７のＭＡＣアドレスＭＡＣ１とを別のアドレスとしている。【０２３８】
上記のように、あたかも仮想マシンと通信しているようにＩＰ層にみせかることを実現するため、本実施例では、ハード（アダプタ）またはドライバでＩＰアドレスおよびＭＡＣアドレスを変換して通信する試験方法を採用する。試験方法の流れは、図４と比較して、データを送信も受信も一つのアダプタで行うため、変換するアドレスが以下のように異なっている。【０２３９】
具体的には、以下のような変換を行う。
（１）アダプタ１７またはドライバ部２５において、アドレス解決要求（ARP request）を送信時、図４３のように送信先のＩＰアドレスを10.20.1.2から10.20.1.1に変更し、送信元のＩＰアドレスを10.20.1.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC1からMAC2に変換する。【０２４０】
即ち、先ずアプリケーション部２１が、自装置内に存在しないＩＰアドレスを通信先として送信するデータをストリームヘッド２２へ送出する。これにより、ＩＰ層２４は、図４３の変換前の設定でアドレス解決要求のパケットを生成する（Ｓ１０１）。【０２４１】
アドレス解決要求のパケットの送信先ＩＰアドレスが自装置内ではないため、ＩＰ層２４は、アドレス解決要求の送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５にパケットを送出する（Ｓ１０２）。【０２４２】
ＩＰ層２４からパケットを受信したアダプタ１７またはドライバ部２５は、アドレス変換モード（試験モード）か否かを判定し（Ｓ１０３）、アドレス変換モードであれば、図４３のようにアドレスを変換し（Ｓ１０４）、パケットを送信する（Ｓ１０５）。なお、Ｓ１０３で、アドレス変換モードでなければアドレスを変換せずにパケットを送信する（Ｓ１０６）。【０２４３】
Ｓ１０４におけるアドレスの変換では、送信先が自装置内のアダプタ１７となるように、送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図４３に示すように変換する。但し、図４３の例では、アドレス解決要求のパケットなので、送信先ＭＡＣアドレスはブロードキャスト用のff.ff.ff.ff.ff.ffとする。【０２４４】
また、Ｓ１０４におけるアドレスの変換では、送信元が所定の仮想マシンとなるように、送信するパケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図４３に示すように変換する。例えば、図４２に示したように通信相手を仮想マシンと見せかけるため、送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ２と変換して送信する。【０２４５】
送信パケットは、迂回路１９を介してアダプタ１７で折り返し受信される。アダプタ１７は、受信したパケットをドライバ部２５、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、アダプタ１７が折り返し受信したパケットを、送信元である仮想マシンからのパケットとして受信する。【０２４６】
（２）アダプタ１７またはドライバ部２５において、アドレス解決応答（ARP reply）を送信時、図４４のように送信先ＩＰアドレスを10.20.1.2から10.20.1.1に、送信先ＭＡＣアドレスをMAC2からMAC1に、送信元ＩＰアドレスを10.20.1.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC1からMAC2に変換する。【０２４７】
即ち、アプリケーション２１は、仮想マシンに対してアドレス解決応答を返す（Ｓ２０１）。【０２４８】
この場合も、図４４に示す変換前の設定のとおり送信先ＩＰアドレスが自装置内ではないため、ＩＰ層２４は、同じＩＰサブネットに属するドライバ部２５にパケットを送出する（Ｓ２０２）。【０２４９】
パケットを受信したアダプタ１７またはドライバ部２５は、アドレス変換モード（試験モード）か否かを判定し（Ｓ２０３）、アドレス変換モードであれば、図４４のようにアドレスを変換し（Ｓ２０４）、パケットを送信する（Ｓ２０５）。なお、Ｓ２０３で、アドレス変換モードでなければアドレスを変換せずにパケットを送信する（２０６）。【０２５０】
Ｓ２０４におけるアドレスの変換では、送信先が自装置内のアダプタ１７となるように送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図４４のように変換する。【０２５１】
また、Ｓ２０４におけるアドレスの変換では、送信元が所定の仮想マシンとなるように送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図４４のように変換する。図４２に示したように、通信相手を仮想マシンと見せかけるため、送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ２としている。【０２５２】
送信パケットは、迂回路１９を介してアダプタ１７で受信される。アダプタ１７は、受信したパケットをドライバ部２５、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である仮想マシンからのパケットとして受信する。【０２５３】
（３）アダプタ１７またはドライバ部２５において、ＴＣＰ／ＩＰパケットを送信時、図４５のように送信先のＩＰアドレスを10.20.1.2から10.20.1.1に、送信先のＭＡＣアドレスをMAC2からMAC1に、送信元のＩＰアドレスを10.20.1.1から10.20.1.2に、送信元ＭＡＣアドレスをMAC1からMAC2に変換する。【０２５４】
アドレス解決によって仮想マシンのＭＡＣアドレスを認識したアプリケーション部２１は、仮想マシン宛にパケットを送出する（Ｓ３０１）。【０２５５】
図３７の変換前の設定のとおりアプリケーション部２１が送出したパケットの送信先ＩＰアドレスが自装置内ではないため、ＩＰ層２４は、送信先ＩＰアドレスと同じＩＰサブネットに属するドライバ部２５にパケットを送出する（Ｓ３０２）。【０２５６】
パケットを受信したアダプタ１７Ａまたはドライバ部２５Ａは、アドレス変換モード（試験モード）か否かを判定し（Ｓ３０３）、アドレス変換モードであれば、図４５のようにアドレスを変換し（Ｓ３０４）、パケットを送信する（Ｓ３０５）。なお、Ｓ３０３で、アドレス変換モードでなければアドレスを変換せずにパケットを送信する（Ｓ３０６）。【０２５７】
Ｓ３０４におけるアドレスの変換では、送信先が自装置内のアダプタ１７となるように、パケット内の送信先ＩＰアドレス及び送信先ＭＡＣアドレスを図４５のように変換する。【０２５８】
また、Ｓ３０４におけるアドレスの変換では、送信元が所定の仮想マシンとなるように、パケットの送信元ＩＰアドレス及び送信元ＭＡＣアドレスを図４５のように変換する。図４２に示したように、通信相手を仮想マシンと見せかけるため、送信元ＩＰアドレスを10.20.1.2、送信元ＭＡＣアドレスをＭＡＣ２としている。【０２５９】
送信パケットは、迂回路１９を介してアダプタ１７で受信される。アダプタ１７は、受信したパケットをドライバ部２５、ＩＰ層２４、ＴＣＰ層２３、ストリームヘッダ２２を介してアプリケーション部２１へ送る。即ち、アプリケーション部２１は、送信元である仮想マシンからのパケットとして受信する。【０２６０】
−ユーザインタフェース−
アドレス変換を行うモード、つまり試験モードに移行すること、および、そのモードを解除することは、ユーザがコマンドで指定するようにする。【０２６１】
ここで、試験装置１は、図３４の状態、即ち１台の試験装置１に１つのアダプタ１７を搭載し、ドライバ部２５がＩＰアドレスIP1=10.20.1.1と対応付けられている状態であるとする。【０２６２】
この場合、アドレス変換モードへの移行は、ユーザが入力部１５から、次のように指定する。
＞ addrtrans1  -s ドライバ＃１ 10.20.1.2【０２６３】
ここで、ドライバ＃１はドライバ部２５のドライバ名、10.20.1.2は仮想マシンのＩＰアドレスである。【０２６４】
アドレス変換モードの解除は以下のように指定する。
＞ addrtrans1  -d ドライバ＃１【０２６５】
アドレス変換モードへ移行後、送信先アドレスとして仮想マシンのＩＰアドレス（IP2=10.20.1.2）を指定して送信すると、図３８のように、ｎｅｔｐｅｒｆコマンド２１→ストリームヘッド２２→ＴＣＰ２３→ＩＰ２４→ドライバ２５→アダプタ１７→ドライバ２５→ＩＰ２４→ＴＣＰ２３→ストリームヘッド２２→ｎｅｔｓｅｒｖｅｒデーモン２１を経由した送信が実行できる。【０２６６】
例えば、アドレス変換モードへ移行後に次のようにコマンドを実行する。
＞ netperperf  -H 10.20.1.2【０２６７】
−アダプタでアドレス変換する場合のコマンドの実装−
アダプタ１７は、メモリ空間における所定の領域に、図４７に示すアドレス変換レジスタを確保する。【０２６８】
図４７のアドレス変換レジスタは、現在設定されているモード、仮想マシンのIPアドレス、実マシン上のIPアドレス、仮想マシン上のMACアドレス、アダプタ上のMACアドレス等の項目を記憶する。なお、現在設定されているモードは、例えばアドレス変換モードであれば１、通常モードであれば０のように設定する。また、実マシン上のIPアドレスは、ドライバ２５やアダプタ１７のＩＰアドレスである。【０２６９】
そして、addrtrans1 -sコマンドを実行した場合に、ＣＰＵ１２が以下の動作を行うこととする。【０２７０】
まず、ＯＳに備わっている既存のインタフェースで、アダプタ１７のＭＡＣアドレスおよびＩＰアドレスを調べる。なお、ＭＡＣアドレスやＩＰアドレスは、ＯＳにより該アダプタ１７に係るドライバ名と対応付けられてメモリ中に格納されている。【０２７１】
次に仮想マシンにＭＡＣアドレスを割り当てる。その値をＭＡＣ２とする。ここで、仮想マシンのＭＡＣアドレスＭＡＣ２と、アダプタ１７のＭＡＣアドレスＭＡＣ１が、それぞれユニークな値となるように割り当てる。【０２７２】
仮想マシンのＩＰアドレスは、上記のようにaddrtrans1コマンドの引数で与えられているため、これで変換レジスタに書きこむべき値は全てそろったことになる。【０２７３】
次に、アプリケーション部２１は、図４８のようにｉｏｃｔｌによってドライバ部２５に、アダプタ１７のアドレス変換レジスタに書きこむべき値として、前記アダプタ１７のＭＡＣアドレス、ＩＰアドレス、および仮想マシンのＭＡＣアドレスを渡す。【０２７４】
ドライバ部２５は、そのｉｏｃｔｌによる前記値を受けると、アダプタ上のアドレス変換レジスタのアダプタ上のＭＡＣアドレス、実マシン上のＩＰアドレス、仮想マシン上のＭＡＣアドレスのフィールドにそれぞれ書きこむ。【０２７５】
例えば、”addrtrans1  -s ドライバ＃１ 10.20.1.2”が実行された場合、ドライバ部２５からアダプタ１７のアドレス変換レジスタに図４９のように書きこむ。【０２７６】
即ち、モードが１、仮想マシンのIPアドレスが10.20.1.2、実マシン上のIPアドレスが10.20.1.1、仮想マシン上のMACアドレスがMAC2、アダプタ上のMACアドレスがMAC1となる。【０２７７】
そして、”addrtrans1  -d ドライバ＃１”が実行されてアドレス変換モードが解除された場合、ドライバ部２５からアダプタ１７に対して、図５０に示すように全ての値を０にクリアする。【０２７８】
−ドライバでアドレス変換する場合のコマンドの実装−
ドライバ部２５は、アダプタの状態や、上位から指示された情報を保存しておくために“制御構造体”と呼ばれるデータの構造体を試験装置１上のメモリ１３に保持している。【０２７９】
この制御構造体内に、図４７のアドレス変換レジスタと同等な情報を取り込む。これを“アドレス変換情報”と呼ぶことにする。【０２８０】
ｉｏｃｔｌによってドライバ部２５へ、アドレス変換情報に書きこむべき値を渡す処理までは、図４８においてアドレス変換レジスタに書きこむべき値を渡す処理と同様である。以下、アドレス変換情報の書き込み処理の詳細を説明する。【０２８１】
ドライバ部２５はｉｏｃｔｌを受けると制御構造体の値を更新する。例えば、”addrtrans1  -s ドライバ＃１ 10.20.1.2”が実行された場合、ドライバ部２５は、制御構造体のアドレス変換情報として図４９の値を書きこむ。【０２８２】
一方、”addrtrans1  -d ドライバ＃１”が実行されてアドレス変換モードが解除された場合、ドライバ部２５は制御構造体のアドレス変換情報を図５０に示すようにクリアする。【０２８３】
−アダプタでアドレス変換する場合のアダプタの実装例−
図５１は、通常モード時、即ち通常の通信を行う場合の状態を示したアダプタ１７の機能ブロック図である。図５１のようにアダプタ２５は、送信キュー７１、送受信器７２、データ変換器７３、受信キュー７４を有する。【０２８４】
一方、図５２は、アドレス変換を行う場合の状況を示したアダプタ１７の機能ブロック図である。【０２８５】
試験モード時、即ち、アドレス変換して通信する場合、本実施例２では、図５２に示すように、試験変換器７５を用い送信キュー７１と送受信器７２の間でアドレスを変換する。【０２８６】
本実施例２において、アダプタ１７の各部の動作は、前述の実施例１の図２８，２９と略同じである。例えば、実施例１の図２８，２９では、一方のアダプタ１７Ａから送信し、ケーブルを介して他方のアダプタ１７Ｂで受信している。これに対し、本実施例２では、アダプタ１７から送信するパケットを迂回路１９を介してアダプタ１７自身で受信するため、変換するアドレスが異なるだけで、試験変換部７５や送受信器７２は、同じロジックで送信や受信の処理を行うことができる。【０２８７】
以上のように、本実施例２によれば、試験装置１に搭載した一つのネットワークアダプタ１７内で折り返してＴＣＰ／ＩＰを用いた通信が行えるので、簡易な構成でネットワークアダプタ或はドライバの試験を行うことができる。
【図１】
2009157067.tif 000003
【図２】
2009157067.tif 000004
【図３】
2009157067.tif 000005
【図４】
2009157067.tif 000006
【図５】
2009157067.tif 000007
【図６】
2009157067.tif 000008
【図７】
2009157067.tif 000009
【図８】
2009157067.tif 000010
【図９】
2009157067.tif 000011
【図１０】
2009157067.tif 000012
【図１１】
2009157067.tif 000013
【図１２】
2009157067.tif 000014
【図１３】
2009157067.tif 000015
【図１４】
2009157067.tif 000016
【図１５】
2009157067.tif 000017
【図１６】
2009157067.tif 000018
【図１７】
2009157067.tif 000019
【図１８】
2009157067.tif 000020
【図１９】
2009157067.tif 000021
【図２０】
2009157067.tif 000022
【図２１】
2009157067.tif 000023
【図２２】
2009157067.tif 000024
【図２３】
2009157067.tif 000025
【図２４】
2009157067.tif 000026
【図２５】
2009157067.tif 000027
【図２６】
2009157067.tif 000028
【図２７】
2009157067.tif 000029
【図２８】
2009157067.tif 000030
【図２９】
2009157067.tif 000031
【図３０】
2009157067.tif 000032
【図３１】
2009157067.tif 000033
【図３２】
2009157067.tif 000034
【図３３】
2009157067.tif 000035
【図３４】
2009157067.tif 000036
【図３５】
2009157067.tif 000037
【図３６】
2009157067.tif 000038
【図３７】
2009157067.tif 000039
【図３８】
2009157067.tif 000040
【図３９】
2009157067.tif 000041
【図４０】
2009157067.tif 000042
【図４１】
2009157067.tif 000043
【図４２】
2009157067.tif 000044
【図４３】
2009157067.tif 000045
【図４４】
2009157067.tif 000046
【図４５】
2009157067.tif 000047
【図４６】
2009157067.tif 000048
【図４７】
2009157067.tif 000049
【図４８】
2009157067.tif 000050
【図４９】
2009157067.tif 000051
【図５０】
2009157067.tif 000052
【図５１】
2009157067.tif 000053
【図５２】
2009157067.tif 000054
【図５３】
2009157067.tif 000055
【図５４】
2009157067.tif 000056
【図５５】
2009157067.tif 000057
【図５６】
2009157067.tif 000058
【手続補正書】
【提出日】平成22年12月20日(2010.12.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも一つのネットワークアダプタが接続された試験装置であって、
仮想アドレスを送信先アドレスとしてデータの送信を指示する送信アプリケーション部と、
試験モードが設定されている場合、前記データの送信先アドレスを自装置と接続されたネットワークアダプタに割り当てられたアドレスに変換して、該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるアドレス変換部と、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信する受信アプリケーション部と、
前記データの送信結果に基づいて試験結果を算出する算出部と、
を備えた試験装置。
【請求項２】
前記アドレス変換部が、試験モードの場合に前記データの送信元アドレスを仮想アドレスに変換する請求項１に記載の試験装置。
【請求項３】
インターネットプロトコルに従って、前記データに前記送信先アドレスを付加したパケットを生成するパケット生成部を備えた請求項１又は２に記載の試験装置。
【請求項４】
前記ネットワークアダプタが、送信するデータを該ネットワークアダプタ内で折り返して受信する機能を有し、試験モードの場合に一つのネットワークアダプタで前記変換後のデータの送信及び受信を行う請求項１から３の何れか１項に記載の試験装置。
【請求項５】
前記試験装置に第一のネットワークアダプタと第二のネットワークアダプタが接続され、該第一のネットワークアダプタからデータを送信し、ネットワークケーブルを介して第二のネットワークアダプタで受信する場合に、
前記アドレス変換部が、前記データの送信先アドレスを第二のネットワークアダプタに割り当てられたアドレスに変換する請求項１から３の何れか１項に記載の試験装置。
【請求項６】
少なくとも一つのネットワークアダプタが接続された試験装置が、
仮想アドレスを送信先アドレスとしてデータの送信を指示するステップと、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるステップと、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信するステップと、
前記データの送信結果に基づいて試験結果を算出するステップと、
を実行する試験方法。
【請求項７】
少なくとも一つのネットワークアダプタが接続された試験装置に、
仮想アドレスを送信先アドレスとしてデータの送信を指示するステップと、
試験モードの場合に前記データの送信先アドレスを自装置と接続された前記ネットワークアダプタに割り当てられたアドレスに変換して該ネットワークアダプタ或は自装置に接続された他のネットワークアダプタに当該データを送って送信させるステップと、
前記変換後の送信先アドレスが割り当てられたネットワークアダプタを介して前記データを受信するステップと、
前記データの送信結果に基づいて試験結果を算出するステップと、
を実行させるプログラム。
【国際調査報告】
2009157067.tif 000059
2009157067.tif 000060