[go: up one dir, main page]

JP2010063110A - Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ - Google Patents

Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ Download PDF

Info

Publication number
JP2010063110A
JP2010063110A JP2009217450A JP2009217450A JP2010063110A JP 2010063110 A JP2010063110 A JP 2010063110A JP 2009217450 A JP2009217450 A JP 2009217450A JP 2009217450 A JP2009217450 A JP 2009217450A JP 2010063110 A JP2010063110 A JP 2010063110A
Authority
JP
Japan
Prior art keywords
network adapter
data
iscsi
module
tcp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009217450A
Other languages
English (en)
Other versions
JP4875126B2 (ja
Inventor
John Shigeto Minami
ミナミ ジョン・シゲト
Robin Yasu Uyeshiro
ウイェシロ ロビン・ヤス
Michael Ward Johnson
ジョンソン マイケル・ワード
Steve Su
ス スティーブ
Michael John Sebastian Smith
スミス マイケル・ジョン・セバスティアン
Addison Kwuanming Chen
チェン アッディソン・クウアンミン
Mihir Shaileshbhai Dr
ドクター ミヒル・シャイレシュブハイ
Daniel Leo Greenfield
グリーンフィールド ダニエル・レオ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/456,871 external-priority patent/US7535913B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of JP2010063110A publication Critical patent/JP2010063110A/ja
Application granted granted Critical
Publication of JP4875126B2 publication Critical patent/JP4875126B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Small-Scale Networks (AREA)

Abstract

【課題】高い通信ネットワーク速度に対するハードウェアによる解決策を提供するギガビットのイーサネット(登録商標)アダプタを提供する。さらに、多数の通信プロトコルに適合するギガビット・イーサネット(登録商標)・アダプタを提供する。
【解決手段】ギガビット・イーサネット(登録商標)・アダプタで実施されるシステムは、高いネットワーク通信速度を処理するためのコンパクトなハードウェアの解決策を提供する。さらに、モジュール構造および設計を介して多数の通信プロトコルに適合する。
【選択図】図1

Description

本発明は電気通信、特にデータの送信および受信に使用される通信プロトコルを伴ってデータを処理する方法および装置に関する。
コンピュータネットワークはデータを送信および受信するための種々の通信プロトコルの規定を必要とする。典型的に、コンピュータネットワークは、共に通信できるように接続されているコンピュータ、プリンタ、他のコンピュータ周辺機器のような装置のシステムを具備している。データは通信プロトコル標準を使用してネットワークを通して通信されるデータパケットにより各これらの装置間で転送される。多数の異なるプロトコル標準が現在使用されている。ポピュラーなプロトコルの例はインターネットプロトコル(IP)、インターネットワークパケット交換(IPX)、シーケンストパケット交換(SPX)、送信制御プロトコル(TCP)、ポイント・ツー・ポイントプロトコル(PPP)である。各ネットワーク装置はプロトコルを翻訳しデータを処理するハードウェアとソフトウェアの組合わせを含んでいる。
一例は構内網(LAN)システムに取付けられたコンピュータであり、ここではネットワーク装置はリンク層プロトコルを処理するハードウェアと、ネットワーク、転送、通信プロトコルおよび情報データ処理を管理するソフトウェアとを使用する。ネットワーク装置は通常、1つのリンク層プロトコルをハードウェアで構成し、取付けられたコンピュータをその特定のLANプロトコルにのみ限定する。高次のプロトコル、例えばネットワーク、転送および通信プロトコルは、データハンドラと共にソフトウェアプログラムとして構成され、一度これらがネットワーク装置のハードウェアを通してシステムメモリに送られるとデータを処理する。この構成の利点は、コンピュータのような汎用装置が多数の異なるネットワークセットアップで使用され、必要とされる随意選択的なネットワークアプリケーションをサポートすることを可能にすることである。しかしながら、この構成の結果、システムはコンピュータのオペレーティングシステム(O.S.)とコンピュータと、およびネットワークハードウェアへ通信する異なるソフトウェアプロトコルおよびデータハンドラを調整するために、高いプロセッサオーバーヘッドと、多量のシステムメモリと、複雑な構成セットアップをコンピュータユーザ側で必要とする。
処理時間で必要とされるこの高いオーバーヘッドは1996年1月16日出願のSchrierの米国特許第5,485,460号明細書に示されており、これは装置で同一のプロトコルを実行する多数のソフトウェアプロトコルスタックを動作する方法を示している。このタイプの構成はディスクオペレーティングシステム(DOS)ベースのマシーン動作マイクロソフトウィンドウズで使用されている。通常の動作中、一度、ハードウェアが転送またはリンク層プロトコルを確認すると、結果的なデータパケットはパケットフレームフォーマットを決定し、任意の特定のフレームヘッダを分解するソフトウェア層へ転送される。パケットはその後、異なるプロトコルスタックへ送信され、そこで特定のプロトコルに対して評価される。しかしながらパケットはそれが容認されるか拒否される前に、幾つかのプロトコルスタックへ転送されることができる。ソフトウェアプロトコルスタックにより生成される時間遅延はオーディオおよびビデオ伝送が実時間で処理されることを妨げ、データは再生される前に緩衝されなければならない。プロトコルの処理に必要とされる処理オーバーヘッド量は非常に高く、極めて厄介であり、強力な中央処理装置(CPU)と大容量のメモリを有するアプリケーション向きにされることが明白である。
伝統的なネットワーク装置のモデルに適合しないコンピュータプロダクトが市場に入っている。これらのプロダクトのいくつかの例は、ページャ、セルラ電話、ゲームマシーン、スマート電話機、テレビジョンが含まれている。大部分のこれらのプロダクトは小さいフットプリント、8ビット制御装置、限定されたメモリを有し、または非常に限定された形態のファクタを必要とする。これらのような消費者プロダクトは簡単であり、廉価で低電力消費を必要とする。前述のプロトコル構成はこれらの要求を満たすために非常に多くのハードウェアおよびプロセッサパワーを必要とする。このような構成の複雑性によって価格が効率的な方法で消費者プロダクトに一体化することは困難である。ネットワークアクセスが廉価で低電力の小さいフォームファクタの装置で容易に製造されるように簡単にされることができるならば、これらのプロダクトはインターネットのようなネットワークサービスにアクセスできる。
通信ネットワークはデータの送信および受信のためのプロトコルを使用する。通信ネットワークは、典型的に共に通信できるように接続されているコンピュータ、プリンタ、記憶装置、およびその他のコンピュータ周辺機器のようなノードとも呼ばれるネットワーク装置の集合を含んでいる。データはプロトコルを使用して通信ネットワークを通して送信されるデータパケットを使用して、これらの各ネットワーク装置間で転送される。多数の異なるプロトコルが現在使用されている。ポピュラーなプロトコルの例にはインターネットプロトコル(IP)、インターネットワークパケット交換(IPX)プロトコル、シーケンストパケット交換(SPX)プロトコル、送信制御プロトコル(TCP)、ポイント・ツー・ポイントプロトコル(PPP)および開発中のその他の類似の新しいプロトコルが含まれる。ネットワーク装置はプロトコルおよびデータパケットを処理するハードウェアとソフトウェアの組合わせを含んでいる。
1978年、国際標準化機構(ISO)、即ち標準設定団体は開放型システム間相互接続(OSI)モデルとして知られているネットワーク基準モデルを作成した。このOSIモデルは7つの概念的な層を含んでいる。即ち、1)ネットワーク装置をネットワークへ接続する物理的なコンポーネントを規定する物理(PHY)層と、2)データパケットを含んでいるフレームとして知られているディスクリートな形態でデータの動きを制御するデータリンク層と、3)特定のプロトコルにしたがってデータパケットを構築するネットワーク層と、4)データパケットの確実な転送を確保する転送層と、5)ネットワーク装置間で2方向の通信を可能にするセッション層と、6)データを表す方法を制御し、データが正しい形態であることを確認するプレゼンテーション層と、7)ファイルの共有、メッセージ処理、印刷等を行うアプリケーション層である。時には、セッションおよびプレゼンテーション層はこのモデルから省略される。現代の通信ネットワークおよびインターネットがどのようにISOの7つの層モデルに関連するかの説明については、例えばテキスト“Internetworking with TCP/IP”、Douglas E. Corner(第1巻、第4版、ISBN 020 1633469)の第11章と、テキスト“TCP/IP Illustrated”、W. Richard Stevens(第1巻、ISBN 0130183806)の第1章を参照にされたい。
ネットワーク装置の一例は構内網(LAN)に取付けられたコンピュータであり、ここではネットワーク装置は物理およびデータリンク層を管理するためにホストコンピュータのハードウェアを使用し、ネットワーク、転送、セッション、プレゼンテーション、アプリケーション層を管理するためにホストコンピュータで動作するソフトウェアを使用する。ネットワーク、転送、セッション、プレゼンテーション層はプロトコルスタックとも呼ばれるプロトコル処理ソフトウェアを使用して実行される。アプリケーション層は一度データがネットワーク装置のハードウェアおよびプロトコル処理ソフトウェアを通して転送されるとデータを処理するアプリケーションソフトウェアを使用して実行される。このソフトウェアベースのプロトコル処理構造の利点は、汎用コンピュータが多数の異なるタイプの通信ネットワークで使用されることを可能にし、必要とされる任意のアプリケーションをサポートすることである。しかしながら、このソフトウェアベースのプロトコル処理構造の結果として、ネットワーク、転送、セッション、プレゼンテーション層を処理するためにホストコンピュータの中央処理装置(CPU)で動作するプロトコル処理ソフトウェアのオーバーヘッドは非常に高い。ソフトウェアがデータを処理するとき、データがコピーされ移動されなければならないので、ソフトウェアベースのプロトコル処理構造はまたホストコンピュータで大容量のメモリを必要とする。プロトコル処理ソフトウェアにより必要とされる高いオーバーヘッドは1996年1月16日出願のSchrierによる米国特許第5,485,460号明細書に記載され、これは多数のソフトウェアプロトコルスタックの動作方法を教示している。このタイプのソフトウェアベースのプロトコル処理構造は例えばコンピュータが動作するマイクロソフトウインドウズで使用される。
ネットワーク装置の正常動作中、ネットワークソフトウェアのハードウェアは、その後ホストコンピュータのプロトコル処理ソフトウェアへ送信されるデータパケットを抽出する。プロトコル処理ソフトウェアはホストコンピュータで動作し、このホストコンピュータはプロトコル処理ソフトウェアにより行われるタスクに対して最適化されていない。プロトコル処理ソフトウェアと汎用目的のホストコンピュータの組合わせはプロトコル処理に対して最適化されておらず、それによって性能を限定されてしまう。プロトコル処理ソフトウェアの実行により生成される時間遅延のようなプロトコル処理における性能の制限は有害であり、例えばオーディオおよびビデオ送信が実時間で処理されることを妨害し、または通信ネットワークのフルスピードおよび容量が使用されることを妨害する。プロトコルの処理に必要とされるホストコンピュータCPUのオーバーヘッド量は非常に高く、極めて厄介であり、ホストコンピュータでCPUと大容量のメモリの使用を必要とすることが明白である。
伝統的なネットワーク装置のモデルに適合しない新しい消費者および産業プロダクトが市場に参入し、同時にネットワーク速度は増加し続けている。これらの消費者プロダクトの例は、インターネットエネーブルセル電話、インターネットエネーブルTV、インターネット機器である。産業プロダクトの例はネットワークインターフェースカード(NIC)、インターネットルータ、インターネットスイッチ、インターネット記憶サーバである。ソフトウェアベースのプロトコル処理構成はこれらの新しい消費者および産業上のプロダクトの要求を満たすのに効率的ではない。ソフトウェアベースのプロトコル処理構成は複雑であるために効率的な価格で消費者プロダクトに含ませることが困難である。ソフトウェアベースのプロトコル処理構成は処理パワーを必要とするので高速度の産業上のプロダクトに一体化することが困難である。プロトコルの処理はこれが廉価で低電力で高性能の集積された小さいフォームファクタ装置で容易に製造されるように簡単にされ、最適化されることができるならば、これらの消費者および産業プロダクトはインターネットのような任意の通信ネットワークでデータを読取り、書込むことができる。
ソフトウェアベースとは反対に、ハードウェアベースのプロトコル処理構成のインターネットチューナがJ. Minami、R. Koyama、M. Johnson、M. Shinohara、T. Poff、D. BurkesのMultiple network protocol encoder/decoder and data processor、米国特許第6,034,963号明細書(2000年3月7日)に記載されている(以下’963号明細書という)。このインターネットチューナはプロトコルを処理するための基本的な技術を提供している。
高い通信ネットワーク速度に対するハードウェアによる解決策を提供するギガビットのイーサネット(登録商標)アダプタを提供することが有効である。さらに多数の通信プロトコルに適合するギガビット・イーサネット(登録商標)・アダプタを提供することが有効である。
本発明はギガビット・イーサネット(登録商標)・アダプタで実施される。本発明によるシステムは高いネットワーク通信速度を処理するコンパクトなハードウェアの解決手段を提供する。さらに、本発明はモジュール構造および設計により多数の通信プロトコルに適合する。本発明の好ましい実施形態はネットワークプロトコルを復号および符号化しデータを処理する統合ネットワークアダプタを提供する。このネットワークアダプタはストリーミングデータを処理するための、配線接続されたデータパスと、パケットの受信および送信とパケットの符号化および復号化のための、配線接続されたデータパスと、複数の並列の、配線接続されたプロトコル状態マシーンとを具備し、ここで各プロトコル状態マシーンは特別なネットワークプロトコル用に最適化され、前記プロトコル状態マシーンは並列で処理を実行し、さらに、トラフィックに基づいて共有リソースをスケジュールする手段を具備している。
本発明にしたがったNICカード構造の概略ブロック図。 本発明にしたがったネットワークに取付けられた装置のインターフェースの概略ブロック図。 本発明にしたがったシステムのレベルブロック図。 本発明にしたがったギガビット・イーサネット(登録商標)・アダプタの高レベルのブロック図。 本発明にしたがったMACインターフェースモジュールで使用されるI/Oの概略を示したブロック図。 本発明にしたがったイーサネット(登録商標)インターフェースの概略ブロック図。 本発明にしたがったアドレスフィルタおよびパケットタイプパーサ/モジュールの概略ブロック図。 本発明にしたがったアドレスフィルタおよびパケットタイプパーサ/モジュールの動作を示したタイミング図。 本発明にしたがったデータ整列器モジュールの概略ブロック図。 本発明にしたがったARPモジュールの概略ブロック図。 本発明にしたがったARPキャッシュの概略ブロック図。 本発明にしたがった送信待ち行列エントリフォーマットを示す図。 本発明にしたがった探索テーブルエントリフォーマットを示す図。 本発明にしたがったARPキャッシュエントリフォーマットを示す図。 本発明にしたがったARP探索プロセスを示すフロー図。 本発明にしたがったIPモジュールの概略ブロック図。 本発明にしたがったIP発生器のブロック図。 本発明にしたがったインジェクタによるデータフローを示すブロック図。 本発明にしたがったTCPモジュールのトップレベルのブロック図。 本発明にしたがったTCP受信データフローを示す図。 本発明にしたがったVSOCK/Rcv状態ハンドラの制御ブロックサーチ解決のフロー図。 本発明にしたがった基本的なデータのフロー図。 本発明にしたがったソケット受信データのフロー図。 本発明にしたがったソケット送信流を示す図。 本発明にしたがったデータのフロー図。 本発明にしたがったモジュールのブロック図。 本発明にしたがったアルゴリズムを示す図。 図27に示されているアルゴリズム全体のブロック図。 本発明にしたがった論理手段を示す図。 本発明にしたがったオプションのフォーマット図。 本発明にしたがった別のオプションのフォーマット図。 本発明にしたがった別のオプションのフォーマット図。 本発明にしたがったさらに別のオプションのフォーマット図。 本発明にしたがったさらに別のオプションのフォーマット図。 本発明にしたがったIPルータの概略ブロック図。 本発明にしたがったIPルートエントリのフォーマット図。 本発明にしたがったルートをリクエストし受信するために使用されるシグナリングの説明図。 本発明にしたがった例外ハンドラの概略ブロック図。 本発明にしたがったM1メモリマップを示す図。 本発明にしたがったサンプルメモリマップを示す図。 本発明にしたがったデータのフローのブロック図。 本発明にしたがったmtxarbサブユニットのブロック図。 本発明にしたがったデータのフローのブロック図。 本発明にしたがったmcbarbサブユニットのブロック図。 本発明にしたがったネットワークスタックのデフォルトメモリマップを示す図。 本発明にしたがったデフォルト設定を示す図。 本発明にしたがった共にチャンネルを形成する一致したIBおよびSB待ち行列を示す図。 本発明にしたがった命令ブロック待ち行列の処理のフロー図。 本発明にしたがったネットワークスタック、オンチッププロセッサ、ホスト間を通過するar状態ブロックのデータのフローを示すブロック図。 本発明にしたがったiSCSI送信データパスのブロック図。 本発明にしたがったiSCSI送信フローチャートを示す図。 本発明にしたがった4バイトバッファの使用の説明図。 本発明にしたがったiSCSI受信データパスのブロック図。 本発明にしたがった2つのリクエストに分割された転送を示す説明図。 本発明にしたがった別々のリクエストに分割されたホストへのDMA転送を示す図。 本発明にしたがったSAブロックフローを示す図。 本発明によるTX AH転送SAブロックのフォーマットを示す図。 本発明によるTX ESP−1転送SAブロックのフォーマットを示す図。 本発明によるTX ESP−2転送SAブロックのフォーマットを示す図。 本発明によるTX AHトンネルSAブロックのフォーマットを示す図。 本発明によるTX AHトンネルSAブロックのフォーマットを示す図。 本発明によるTX ESP−2トンネルSAブロックのフォーマットを示す図。 本発明によるRX AH SAブロックのフォーマットを示す図。 本発明によるRX ESP−1 SAブロックのフォーマットを示す図。 本発明によるRX ESP−2 SAブロックのフォーマットを示す図。 本発明にしたがったIPSEC論理に対する全体的なフローを示すブロック図。 本発明にしたがったデータのフローの概略ブロック図。 本発明による受信されたIPSECパケットに対するデータパスのフローのブロック図。 本発明にしたがったIPSECアンチリレイアルゴリズムを示すフロー図。
本発明はギガビット・イーサネット(登録商標)・アダプタで実施される。本発明にしたがったシステムは高いネットワーク通信速度を処理するためのコンパクトなハードウエアによる解決手段を提供する。さらに、本発明はモジュール構造および設計を介して多数の通信プロトコルに適合する。
[前置き]
[一般的な説明]
本発明は高速度ハードウェアネットワークスタックで使用されるアーキテクチャ(以下IT10Gと呼ぶ)を含んでいる。ここでの説明はデータパスおよびフロー、レジスタ、アプリケーションの理論およびタイミングを規定する。他のシステムブロックと組合わせて、IT10Gは回線速度のTCP/IP処理のコアを提供する。
[定義]
ここで使用される以下の用語は対応する意味を有している:
10Gbps 10ギガビット(毎秒10,000,000,000ビット)
ACK 肯定応答
AH 認証ヘッダ
AHS 追加ヘッダセグメント
ARP アドレス解決プロトコル
BHS 基本ヘッダセグメント
CB 制御ブロック
CPU 中央処理装置
CRC 巡回冗長検査
DAV 利用可能なデータ
DDR ダブルデータレート
DIX デジタルインテルゼロックス
DMA 直接メモリアクセス
DOS サービスの否認
DRAM ダイナミックRAM
EEPROM 電気的に消去可能なPROM
ESP カプセル化セキュリティペイロード
FCIP IPにわたるファイバチャンネル
FIFO 先入れ先出し
FIM 固定したインターバルのマーカー
FIN 終了
Gb ギガビット(毎秒10,000,000,000ビット)
HDMA ホストDMA
HO 半分オープン
HR ホスト再送信
HSU ヘッダ記憶装置
IB 命令ブロック
ICMP インターネット制御メッセージプロトコル
ID 識別
IGMP インターネットグループ管理プロトコル
IP インターネットプロトコル
IPsec IPセキュリティ
IPX インターネットパケット交換
IQ 命令ブロック待ち行列
iSCSI インターネット小型コンピュータシステムインターフェース
ISN 初期シーケンス番号
LAN 構内網
LDMA ローカルDMA
LIP ローカルIPアドレス
LL リンクされたリスト
LP ローカルポート
LSB 下位桁バイト
LUT 探索テーブル
MAC メディアアクセス制御装置
MCB CBメモリ
MDL メモリ記述子リスト
MIB 管理情報ベース
MII メディア独立インターフェース
MPLS マルチプロトコルラベルスイッチング
MRX 受信メモリ
MSB 上位桁ビット
MSS 最大セグメントサイズ
MTU 最大送信ユニット
MTX TX(送信)メモリ
NAT ネットワークアドレス変換
NIC ネットワークインターフェースカード
NS ネットワークスタック
OR オア論理機能
PDU プロトコルデータユニット
PIP ピアIPアドレス
PP ピアポート
PROM プログラム可能なROM
PSH プッシュ
PV 有効なポインタ
QoS サービス品質
RAM ランダムアクセスメモリ
RARP リバースアドレス解決プロトコル
Rcv 受信
RDMA 遠隔DMA
ROM 読取専用メモリ
RST リセット
RT ラウンドトリップ
RTO 再送信タイムアウト
RTT ラウンドトリップ時間
RX 受信
SA セキュリティ・アソシエーション
SB 状態ブロック
SEQ シーケンス
SM 状態メッセージ
SNMP シンプルネットワーク管理プロトコル
SPI セキュリティパラメータインデックス
Stagen 状態発生器
SYN 同期
TCP 転送制御プロトコル
TOE 転送オフロードエンジン
TOS サービスのタイプ
TTL 生存時間
TW 待機時間
TX 送信
UDP ユーザデータグラムプロトコル
URG 緊急
VLAN 仮想LAN
VSOCK 仮想ソケット
WS ウィンドウスケーリング
XMTCTL 送信制御
XOR 排他的オア
[アプリケーションの概要]
[概要]
帯域幅が増加し続けるとき、TCP/IP通信を処理する能力はシステムプロセッサのオーバーヘッドを超えるようになる。多数のソースはイーサネット(登録商標)レートが毎秒ギガビット(Gbps)に到達するとき、そのTCP/IPプロトコル処理はホストコンピュータのCPU帯域幅の100%近くを消費し、レートがさらに10Gbpsまで増加するとき、TCP/IPプロトコル処理全体は専用のサブシステムヘオフロードされなければならないことを告げる。ここで記載されているIT10Gは、一連の状態マシーンとして例えばARP、RARP、IPホストルーティングを含んだ関連するプロトコルと共にTCPとIPを構成する。IT10Gコアは転送オフロードエンジン(TOE)としても知られている加速器またはエンジンを構成する。接続されたオンチッププロセッサがネットワークスタックの特性を拡張するために使用されるように処理できるようにフックが設けられているが、IT10Gコアはプロセッサまたはソフトウェアを使用しない。
[サンプルアプリケーション]
IT10Gコアの一例の使用はインテリジェントネットワークインターフェースカード(NIC)である。典型的な応用では、NICはコンピュータサーバへプラグ接続され、ネイティブにTCP/UDP/IPパケットを処理する。
図1は本発明のNICを概略したブロック図である。図1では、IT10Gコア10はプロセッサ11、システム周辺機器12、単一チップNIC制御装置へのシステムバスインターフェース13と結合されている。単一チップNIC制御装置はイーサネット(登録商標)PHY14と集積され、構成EEPROM15、低いチップカウントNICを形成するためネットワークスタックの随意選択的な外部メモリと結合されている。プロセッサメモリ16(ROMとRAMの両者)は集積されたチップに対して内部であっても外部に位置してもよい。
IT10Gコア10の別の使用は記憶装置、プリンタ、カメラ等のようなネットワークに取付けられた装置に対するインターフェースとして機能することである。このような場合、カスタムアプリケーションソケット(またはインターフェース)17が層6、7プロトコルを処理し、そのアプリケーションに特別なデータの移動を容易にするためにIT10Gへ設けられることができる。例はストリーミングメディア、バルクなデータ移動、iSCSIおよびFCIPのようなプロトコルのためのカスタムデータパスを含んでいる。
図2は本発明にしたがったネットワークに取付けられた装置に対するインターフェースの概略ブロック図である。IT10Gは10Gbpsのライン速度処理をサポートするように設計されており、同一のアーキテクチャおよび論理装置はまた低い速度で使用されることができる。これらの場合、イーサネット(登録商標)MAC21とPHY14にのみ違いがある。低いライン速度のこのアーキテクチャを使用する利点には例えば低いパワー消費が含まれている。
[チャレンジ]
高速度の帯域幅に対するチャレンジはワイヤ回線速度でのTCP/IPパケットの処理にある。これは以下の表に示されている。
Figure 2010063110
注意:1 これは500バイトの平均パケットサイズを仮定している。
2 これはパケット当りの500の命令オーバーヘッドとバイト当りの1命令を仮定している。
前述の表の数字は非常に保守的であり、例えばネットワーク化の二重特性を考慮しない。二重動作が計算に入れられるならば、処理パワーの要求は容易に二倍になる。いずれにせよ、ギガビットレベルで開始して、TCP/IPの処理オーバーヘッドはホストコンピュータ処理パワーで主要なドレインであり、別の解決手段が必要であることが明白である。
[帯域幅の制限]
IT10Gは種々のアーキテクチャを実装することでホストコンピュータの処理パワーの制限を解決する。当該実装は以下の特性を含んでいる。
・入力および出力されるデータのオンザフライ(ストリーミング)処理、
・超広いデータパス(現在の構造では64ビット)、
・プロトコル状態マシーンの並列動作、
・共有されたリソースのインテリジェントなスケジュール化、
・最小にされたメモリコピー。
[システムの概要]
[概要]
このセクションは好ましい実施形態の上部レベルを説明する。これはシステムのブロックレベルの説明および異なるデータパスと転送タイプに対する動作理論を提供する。
本発明の実施形態はIT10Gネットワークスタックを含み、異なるアプリケーションで完全なネットワーク化サブシステムを提供するためにこれをプロセッサコアおよびシステムコンポーネントを結合する。システムのブロックレベル図は図3に示されている。
[クロック要求]
現在の本発明の好ましい実施形態は異なるクロックドメインで動作するように設計されたチップである。以下の表は1Gbpsと10Gbps動作の両者のすべてのクロックドメインをリストしている。
Figure 2010063110
[プロトコルプロセッサ]
[概要]
このセクションは内部プロトコルプロセッサの概要を与える。
[プロセスコア]
ここで説明するチップはプログラム能力とフレキシブル性のために内部(またはオンチップ)プロセッサを使用する。このプロセッサもまた動作システムを完成するために必要なすべての周辺機器を完備している。正常の動作状態下で、オンチッププロセッサはネットワークスラックを制御する。
[メモリアーキテクチャ]
オンチッププロセッサは4Gバイトまでのメモリをアドレスする能力を有する。このアドレススペース内にはすべてのその周辺機器、そのRAM、ROM、ネットワークスラックが位置されている。
[ネットワークスラックアーキテクチャ]
[概要]
このセクションはIT10Gアーキテクチャを概要を説明する。ここでのその後のセクションは個々のモジュールについての詳細に入る。IT10Gはネットワークスラックのハードウェアプロトコル処理機能を取り、10Gbpsレートまでのスケールを可能にするために強化を付加する。前のバージョンに対する主な付加はデータパス、状態マシーンの並列動作、共有されたリソースのインテリジェントなスケジュール化を広げることである。さらに、前にサポートされなかかった他のプロトコルはRARP、ICMP、IGMPのようなプロトコルに対するサポートを付加される。図4はIT10Gの高レベルのブロック図である。
[動作理論]
IT10Gを使用して任意のデータを転送する前に、ソケット接続が初期化されなければならない。これはコマンドブロックの使用またはTCPソケットレジスタを直接プログラムアップすることにより行われることができる。ソケット毎にプログラムされなければならない特性には、目的地IPアドレス、目的地ポート番号、接続のタイプ(例えばTCPまたはUDP、サーバまたはクライアント)が含まれている。随意選択的なパラメータにはQosレベル、ソースポート、TTL、TOS設定のような設定が含まれている。これらのパラメータが一度入力されると、ソケットを起動することができる。UDPソケットの場合、データは即座に送信または受信され始めることができる。TCPクライアントに対しては、ソケット接続が最初に設定されなければならず、TCPサーバに対しては、SYNパケットがクライアントから受信され、その後ソケット接続が設定されなければならない。すべてのこのような動作はIT10Gハードウェアにより完全に実行されることができる。
[パケットの送信]
TCPパケットが送信される必要のあるとき、ホストコンピュータで動作するアプリケーションは最初にデータをソケット(固定したソケットまたは仮想ソケット−仮想ソケットはIT10Gアーキテクチャによりサポートされる)に書込む。現在の送信バッファが空であるならば、データがメモリに書込まれているとき、部分的に動作するチェックサムが維持される。部分的なチェックサムはチェックサム計算用のスタートシードとして使用され、データを送出する前に再度、データを通して読取るためのIT10GネットワークスタックにおけるTCP層の必要性をなくす。データは32ビットまたは64ビットチャンクでソケットバッファに書込まれることができる。4までの有効_バイト信号が有効なバイトを示すために使用される。ソケットバッファに書込むとき、データは可能性のある有効ではないバイトを有する最後のワードだけでパックされなければならない。この段はまたデータチェックサムを計算しない選択肢が存在するUDPパケットにも適用される。
一度、すべてのデータが書込まれると、SENDコマンドがホストコンピュータで動作するアプリケーションにより発生されることができる。この時点で、TCP/UDPエンジンはパケット長を計算し、チェックサムし、TCP/IPヘッダを作成する。このTCP/IPヘッダはソケットデータセクションに予めペンディングされる。パケットのバッファポインタはソケットQoSレベルと共に、その後送信待ち行列に置かれる。
送信スケジューラはペンディングパケットを有するすべてのソケットを観察し、最高のQoSレベルを有するパケットを選択する。この送信スケジューラは送信を必要とするすべてのタイプのパケットを観察する。これらのパケットには例えばTCP、UDP、ICMP、ARP、RARP、生のパケットが含まれることができる。最小の帯域幅のアルゴリズムはソケットが完全に結合されないことを確実にするために使用される。ソケットパケットが送信に選択されたとき、ソケットバッファポインタはMAC TXインターフェースへ転送される。MAC TXインターフェースはソケットバッファからデータを読取り、そのデータをMACへ送信するように動作する。バッファはイーサネット(登録商標)の衝突またはその他の理由で再送信が必要な場合に出力されるパケットを記憶するために使用される。一度パケットデータがオリジナルソケットバッファから送信されると、そのデータバッファは解放される。有効な送信状態がMACから受信されるとき、データバッファはフラッシュされ、次のパケットがその後送信されることができる。有効ではない送信状態がMACから受信されるならば、データバッファ中に記憶されている最後のパケットが再送信される。
[パケットの受信]
パケットがMACから受信されるとき、イーサネット(登録商標)ヘッダはパケットがこのネットワークスタックを目的地とするか否かを決定するために分析される。MACアドレスフィルタはユニキャストアドレス、プログラムされたマスク内に入るユニキャストアドレス、放送アドレス、またはマルチキャストアドレスを受けるようにプログラムされることができる。さらに、カプセル化プロトコルもまた決定される。イーサネット(登録商標)ヘッダの16ビットTYPEフィールドがARP(0×0806)またはRARP(0×0835)パケットを示すならば、ARP/RARPモジュールはさらにパケットを処理することを可能にされる。TYPEフィールドがIPv4(0×0800)へ復号されるならば、IPモジュールはさらにパケットを処理することを可能にされる。例のサポートされたTYPEフィールドの完全なリストが以下の表に示されている。TYPEフィールドが任意の他の値に復号されるならば、パケットは随意選択的にバッファに経路設定され、ホストコンピュータは未知のイーサネット(登録商標)パケットが受信されていることを通知される。この最後のケースでは、アプリケーションはパケットを読取り、適切な動作コースを決定する。このデータパスの構成により、例えばIPXのようなハードウェアで直接サポートされない任意のプロトコルはIT10Gにより間接的にサポートされることができる。
Figure 2010063110
注意:IPv6パケットはイーサネット(登録商標)層で例外として管理される。
[ARP/RARPパケット]
受信されたパケットがARPまたはRARPパケットであるならば、ARP/RARPモジュールが使用可能になる。これはパケットのOPフィールドを検査し、これがリクエストであるか回答であるかを決定する。リクエストであるならば、外部のエンティティが情報に対してポーリングをしている。ポールされているアドレスがIT10Gに対するものであるならば、reply_reqがARP/RARP回答モジュールへ送信される。受信されるパケットがARPまたはRARP回答であるならば、結果、即ちMACおよびIPアドレスがARP/RARPリクエストモジュールへ送信される。
別の実施形態では、ARPおよび/またはRARP機能はARP/RARPパケットを例外パスを介してホストへ伝送するためにIT10Gの専用のおよび最適化されたハードウェアを使用してホストコンピュータ中で処理される。
[IPパケット]
受信されたパケットがIPパケットであるならば、IPモジュールが使用可能になる。IPモジュールは最初に受信されたパケットがIPv4パケットであるか否かを決定するためにIPヘッダ中のバージョンフィールドを検査する。
IPモジュールは受信されたパケットの埋設されたプロトコルを構文解析する。復号されるプロトコルに基づいて、受信されたパケットは適切なモジュールへ送信される。本発明のこの実施形態のハードウェアにより直接サポートされるプロトコルには例えばTCPおよびUDPが含まれている。RDMAのような他のプロトコルは他の最適化された処理モジュールによりサポートされることができる。すべての未知のプロトコルは例外ハンドラを使用して処理される。
[TCPパケット]
TCPパケットがIT10Gにより受信されるならば、ソケット情報は構文解析され対応するソケットが使用可能になる。ソケットの状態情報が検索され、受信されたパケットのタイプに基づいて、それにしたがってソケット状態が更新される。(応用可能であるならば)パケットのデータペイロードはソケットデータバッファに記憶されている。ACKパケットが発生される必要があるならば、TCP状態モジュールはACKパケットを発生し、ACKパケットを送信するようにスケジュールする。オープンソケットに相関しないTCPパケットが受信されるならば、TCP状態モジュールはRSTパケットを発生し、そのRSTパケットは送信するようにスケジュールされる。
[UDPパケット]
UDPパケットが受信されるならば、ソケット情報が解析され、ソケット中に記憶されているデータはデータバッファを受信する。オープンソケットが存在しないならば、UDPパケットは暗黙に破棄される。
別の実施形態では、UDPパケットは例外ハンドラを使用してホストコンピュータにより処理されることができる。
[ネットワークスタックレジスタ]
IT10Gのハードウェアネットワークスタックはオンチッププロセッサに対して周辺機器として現れるように構成される。ネットワークスタックのベースアドレスはオンチッププロセッサのNS_Base_Addレジスタを介してプログラムされる。このアーキテクチャはオンチッププロセッサがネットワークスタックをそのメモリまたはI/Oスペースの種々の位置に置くことを可能にする。
[イーサネット(登録商標)MACインターフェース]
[概要]
以下の記載はイーサネット(登録商標)MACインターフェースモジュールを説明している。イーサネット(登録商標)MACインターフェースモジュールの機能はIT10Gのコアからイーサネット(登録商標)MACを抽象化することである。これは例えばIT10Gコアアーキテクチャを変更せずに、IT10Gネットワークスタックコアが異なる速度のMACおよび/または種々のソースからのMACに結合されることを可能にする。このセクションはIT10Gコアとのための通信のインターフェース要求について説明する。
[モジュールI/O]
図5はMACインターフェースモジュールで使用されるI/Oを概略的に示したブロック図である。
[イーサネット(登録商標)インターフェース]
[概要]
このセクションはイーサネット(登録商標)インターフェースモジュールを説明する。イーサネット(登録商標)インターフェースモジュールは低い端部のイーサネット(登録商標)MACインターフェースと、および高い端部のARPおよびIPモジュールのようなブロックへ通信する。イーサネット(登録商標)インターフェースモジュールは受信および送信パスの両者のデータを処理する。送信側では、イーサネット(登録商標)インターフェースモジュールは送信のためのパケットのスケジュールをし、送信のためのDMAチャンネルを設定し、イーサネット(登録商標)MACインターフェース送信信号によって通信するように動作する。受信側では、イーサネット(登録商標)インターフェースモジュールはイーサネット(登録商標)ヘッダの解析、パケットがアドレスフィルタ設定に基づいて受信されるべきであるか否かの決定、パケットヘッダのTYPEフィールドに基づいた次のカプセル化されたプロトコルのエネーブル、上部層プロトコルに対して64ビット境界で開始するようにデータを整列させるように動作する。図6はイーサネット(登録商標)インターフェース40の概略ブロック図である。
[サブモジュールブロックの説明]
[送信スケジューラ]
送信スケジューラブロック60はARP、IP、TCP、および生の送信モジュールから送信リクエストを取り、次に送信されるべきパケットを決定するように動作する。送信スケジューラは各送信リクエストのQoSレベルを比較することにより送信順序を決定する。QoSレベルと共に、各送信リクエストはパケット長と共にパケットの開始メモリブロックへのポインタを含んでいる。送信スケジューラはあるパケットタイプの送信優先順をその他よりも重く加重するようにプログラムされる能力を有する。例えばTCPモジュールからのQoSレベル5はIPモジュールからのレベル5のリクエストよりも価値があるように作られることができる。送信スケジューラは多数のモジュールが並列して、送信データトラフィックに基づいた共有された方法で動作することを可能にする。以下の説明はパケットスケジュール化の決定に現在使用されているアルゴリズムである。
パケットチャンネルが欠乏状態に到達していないかをチェックする。これはチャンネルタイプ当りのプログラム可能なレベル、即ちTCP、IP、ARP、生のバッファであり、これはスケジューラがQoSレベルを無効にし、パケットが送出される前に何回チャンネルが通過されたかを示す。2以上のパケットが同時に欠乏状態に到達したならば、高い加重を有するチャンネルに優先順位が与えられる。他のパケットはその後で次に送信されるようにスケジュールされる。パケットが同一の優先順位の加重を有するならば、それらは次の順序、即ちTCP/UDP、その後ARP、その後IP 、その後生のイーサネット(登録商標)にしたがって代わる代わる送出される。
チャンネルが欠乏状態のパケットをもたないならば、最高の結合されたQoSレベルとチャンネル加重を有するチャンネルが送信される。
1つのチャンネルだけが送信されるパケットを有している場合には、それは直ちに送信される。
一度、パケットチャンネルが送信するように選択されると、チャンネルメモリポインタ、パケット長、およびタイプがDMAエンジンに転送される。転送が終了したとき、DMAエンジンは次に信号を送信スケジューラへ戻す。この時点でスケジューラはパケットパラメータをDMAエンジンへ送信する。
[DMAエンジン]
DMAエンジン61は送信スケジューラからパケットパラメータを受信する。パケットパラメータはパケットタイプ、パケット長、開始メモリポインタを含んでいる。DMAエンジンはいくつのデータバイトがメモリから転送されるかを決定するためにパケット長を使用する。パケットタイプはどのメモリバッファからデータを検索するかをDMAエンジンへ示し、開始メモリポインタはデータの読取りを開始する場所を示す。DMAエンジンは、出力するパケットが多数のメモリブロックに及ぶため、チャンネルパケットで使用される各メモリブロックがどれ程の大きさかを理解する必要がある。DMAエンジンはメモリ制御装置から一度にデータ64ビットを受信し、データ64ビットを一度に送信機インターフェースへ供給する。
[送信機インターフェース]
送信機インターフェース62はDMAエンジンから出力を取り、イーサネット(登録商標)MACインターフェースのmacout_lock、macout_rdy、macout_eof、macout_val_byte信号を発生する。64ビットのmacout_dataバスはDMAエンジンからイーサネット(登録商標)MACインターフェースへ直接的に接続する。
[受信機インターフェース]
受信機インターフェース63はイーサネット(登録商標)MACインターフェースとインターフェースするように動作する。受信機インターフェースはデータを取り、そのデータを状態カウント情報と共にアドレスフィルタおよびパケットタイプパーサブロックへ与える。
[アドレスフィルタおよびパケットタイプパーサ]
アドレスフィルタおよびパケットタイプパーサ64はイーサネット(登録商標)ヘッダを解析し、以下の2つの主要な機能を行う。
・パケットが構内網スタック用であるか否かを決定する。
・残りのパケットを送信する場所を決定するために、カプセル化されたパケットタイプを解析する。
[アドレスフィルタ処理]
ネットワークスタックは以下のフィルタ選択肢でプログラムされることができる。
・プログラムされたユニキャストアドレスの受付、
・放送パケットの受付、
・マルチキャストパケットの受付、
・ネットマスクにより特定される範囲内のアドレスの受付、
・無差別モード(すべてのパケットを受入れる)。
これらのパラメータはすべてレジスタを介してホストコンピュータによって設定可能である。
[サポートされるパケットタイプ]
以下のパケットタイプはIT10Gハードウェアにより知られており、固有にサポートされる。
・タイプ=0×8000を有するIPv4パケット、
・タイプ=0×0806を有するARPパケット、
・タイプ=0×8035を有するRARPパケット。
パケットタイプパーサはまた802.3の長さのパラメータがTYPEフィールドに含まれるケースを処理する。このケースは値が1500(デシマル)以下であるときに検出される。この条件が検出されるとき、タイプパーサはカプセル化されたパケットを802_フレーム信号の主張と共にARPおよびIP受信モジュールの両者へ送信し、そのモジュールを本当に目的としていないという認識でパケットを復号すべきであることを各その後のモジュールが承認する。
注意:IPv6パケットはイーサネット(登録商標)層により例外パケットとして扱われる。
図7は、アドレスフィルタおよびパケットタイプパーサモジュールの概略ブロック図であり、図8はアドレスフィルタおよびパケットタイプパーサモジュールの動作を示したタイミング図である。I/Oタイミングでは、そのパケットに対応するmacin_lock信号の主張が解除されるまで、パケットタイプを示す信号は主張された状態である。All_packet信号はまた目的地MACアドレスが許容可能である場合のみトリガーする。
アドレスフィルタおよびパケットタイプパーサモジュールはそれが理解していないパケットを構文解析し、サポートされていないタイプの特性が使用可能になったならば、そのパケットは記憶およびさらに処理するために例外ハンドラへ転送される。
[データ整列器]
データ整列器65は後続するパケット処理の層のデータバイトを整列させるように動作する。イーサネット(登録商標)ヘッダが64ビットの偶数倍ではないのでデータ整列器が必要とされる。VLANタグが存在するか否かに応じて、データ整列器は上部処理層に対してデータがMSB位置調節されるように64ビットデータを方向付けする。このようにしてイーサネット(登録商標)フレームのペイロードセクションは常に偶数の64ビット境界で整列される。データ整列器はまた準備完了信号を次の層に発生するように動作する。準備完了信号はmacin_rdyが主張された後に、2または3の作動可能サイクルをアクチブにする。図9は構成データ整列モジュールの概略ブロック図である。
[イーサネット(登録商標)パケットフォーマット]
IT10Gは802.3(SNAP)とDIXフォーマットパケットの両者をネットワークから受取るが、DIXフォーマットのパケットだけを送信する。さらに、802.3パケットが受信されるとき、それらは最初にDIXフォーマットに変換され、その後イーサネット(登録商標)フィルタにより処理される。それ故、すべてのイーサネット(登録商標)例外パケットはDIXフォーマットで記憶される。
[ARPプロトコルおよびARPキャッシュモジュール]
[概要]
以下の記載はARPプロトコルおよびARPキャッシュモジュールの詳細な説明である。IT10Gアーキテクチャの1実施形態では、ARPプロトコルモジュールはRARPプロトコルもサポートするが、ARPキャッシュ自体を含まない。パケットを送信できる各モジュールは以外に早くARPキャッシュに問い合わせするので、この共通のリソースはこのARPモジュールから分離される。ARPプロトコルおよびARPキャッシュモジュールは受信されたパケットタイプに基づいてARPキャッシュへ更新を送信する。
ARP特性リスト:
・ARP回答を発生することによりARPリクエストに応答できる。
・ARPキャッシュに応答してARPリクエストを発生できる。
・複数のIPアドレスに対するARP回答を与えることができる(マルチホームホスト/ARP代理)。
・ターゲットとする(ユニキャスト)ARPリクエストを発生できる。
・不法のアドレスをフィルタリングする。
・整列されたARPデータをプロセッサへ転送する。
・無料のARPを行うことができる。
・CPUは自動ARP回答発生をバイパスし、ARPデータを例外ハンドラへダンプしてもよい。
・CPUは(バイパスモードのとき)カスタムARP回答を発生してもよい。
・ネットワーク状態に応じて、ARPパケットの可変の優先順位を有する。
RARP特性リスト:
・IPアドレスをリクエストする。
・特定のIPアドレスをリクエストする。
・RARPリクエストは例外ハンドラへハンドオフされる。
・不規則なRARP回答を管理する。
・整列されたRARPデータをプロセッサまで送る。
・CPUはカスタムRARPリクエストおよび回答を発生できる。
ARPキャッシュ特性:
・ダイナミックARPテーブルサイズ、
・自動的に更新されたARPエントリ情報、
・送信者のハードウェアアドレスが変化したときの割込み、
・ARPデータを混雑収集する能力、
・重複したIPアドレス検出および割込み生成、
・ARPモジュールを介するARPリクエスト能力、
・静的なARPエントリのサポート、
・静的なARPエントリがダイナミックARPデータにより置換されることを可能にする選択肢、
・ARP代理のサポート、
・ARPエントリの構成可能な満了時間。
(CPUはこのコンテキストではホストコンピュータCPUまたはオンチッププロセッサのいずれであってもよい。)
[ARPモジュールブロック図]
図10はARPモジュールの1構成の概略ブロック図である。
[ARPキャッシュモジュールブロック図]
図11はARPキャッシュブロックの1構成の概略ブロック図である。
[動作のARPモジュール理論]
[パケットの構文解析]
ARPモジュール100はARPとRARPパケットだけを処理する。モジュールはイーサネット(登録商標)受信モジュールから受信される準備完了信号を待機する。その信号が受信されたとき、入来するイーサネット(登録商標)フレームのフレームタイプがチェックされる。フレームタイプがARP/RARPではないならば、そのパケットは無視される。そうでなければモジュールは解析を開始する。
データは64ビットワードでイーサネット(登録商標)インターフェースから読取られる。ARPパケットは3.5ワードを取る。ARPタイプのパケットの最初のワードはほとんど静的な情報を含んでいる。ARPタイプのパケットの最初のワードの最初ン48ビットはハードウェアタイプ、プロトコルタイプ、ハードウェアアドレス長、およびプロトコルアドレス長を含んでいる。これらの受信された値はイーサネット(登録商標)でIPv4に対するARPリクエストで予測される値と比較される。受信された値が一致しないならば、データはさらに処理するために例外ハンドラへ送られる。そうでなければ、ARPモジュールは解析を継続する。ARPタイプのパケットの最初のワードの最後の16ビットは演算コードを含んでいる。ARPモジュールは演算コードを記憶し、これが有効であるか否か、即ち1、2または4であるかをチェックする。演算コードが有効ではないならば、データはさらに処理するために例外ハンドラへ送られる。そうでなければARPモジュールは解析を継続する。
ARPタイプのパケットの第2のワードはソースイーサネット(登録商標)アドレスと、半分のソースIPアドレスを含んでいる。ARPモジュールは最初の48ビットをソースイーサネット(登録商標)アドレスレジスタへ記憶する。その後、ARPモジュールはこのフィールドが有効なソースイーサネット(登録商標)アドレスであるか否かをチェックする。アドレスはIT10Gネットワークスタックのアドレスと同一であってはならない。ソースアドレスが有効ではないならば、そのパケットは破棄される。パケットの最後の16ビットはその後、ソースIPアドレスレジスタの上半分中に記憶される。
ARPタイプのパケットの第3のワードはソースIPアドレスの第2の半分の部分とターゲットイーサネット(登録商標)アドレスとを含んでいる。ARPモジュールは最初の16ビットをソースIPアドレスレジスタの下半分に記憶し、記憶された値が有効なソースIPアドレスであるか否かをチェックする。アドレスはIT10Gハードウェアのアドレスまたは放送アドレスと同一であってはならない。またソースアドレスは同一のサブネットにあるべきである。ソースアドレスが有効ではないならば、ARPモジュールはそのパケットを破棄する。パケットがARP/RARP回答であるならば、ターゲットハードウェアアドレスをイーサネット(登録商標)アドレスと比較する。アドレスが一致しないならば、ARPモジュールはそのパケットを破棄する。そうでなければ、ARPモジュールは解析を継続する。
ARPタイプのパケットの最後のワードの最初の32ビットだけがデータ(ターゲットIPアドレス)を含んでいる。ARPモジュールはターゲットIPアドレスをレジスタに記憶する。パケットが(ARPリクエストまたはRARPパケットと反対に)ARPパケットであるならば、ターゲットIPアドレスをIPアドレスと比較する。アドレスが一致しないならばこのパケットを破棄する。そうでなければ、このパケットがARPリクエストであるならば、ARP回答を発生する。これがRARP回答であるならば、割当てられたIPアドレスをRARPハンドラへ転送する。
一度、すべてのアドレスデータが確認されると、ソースアドレスはARPキャッシュに転送される。
[送信パケット]
ARPモジュールはパケットを3つのソース、即ちARPキャッシュ110(ARPリクエスト)、(ARP回答の)パーサ/FIFOバッファから内部に、(カスタムARP/RARPの)システム制御装置またはホストコンピュータからパケットを送信するためのリクエストを受信できる。この状態のために、優先順位―待ち行列のタイプがARP/RARPパケットの送信をスケジュールするのに必要である。
送信リクエストは2以上のエントリが送信を希望するときを除いて、先着順サービスで待ち行列に置かれる。その場合、待ち行列に置かれている次のリクエストはその優先順位にしたがう。RARPリクエストは通常最高の優先順位を有し、ARPリクエストがそれに続く。ARP回答は通常最低の優先順位を有する。優先順位の使用によりデータトラフィックにしたがってリソースが共有されることができる。
ARP回答が最高の優先順位を有する1つの状態が存在する。これはARP回答FIFOバッファが満たされているときに生じる。FIFOバッファが満杯であるとき、入来するARPリクエストは破棄され始め、それ故ARP回答はARPリクエストを再送信させることを避けるためにその時点で最高の優先順位を有するべきである。
送信待ち行列が満たされているとき、1以上の送信リクエストが達成されFる(待ち行列から外される)までさらにリクエストは行われない。ARPモジュールが一杯になった待ち行列を検出したとき、送信アービタからの優先順位の増加をリクエストする。待ち行列には2つの状態、即ち一杯または一杯ではない状態しか存在しないので、このリクエスト信号は単一ビットであることができる。
送信アービタがARPモジュールを送信することを可能にするとき、ARP/RARPパケットは送信されるパケットのタイプにしたがってダイナミックに発生される。パケットのタイプは命令コードにより決定され、これは待ち行列の各エントリで記憶される。図12は送信待ち行列エントリフォーマットを示している。
[バイパスモード]
ARPモジュールは入来するパケットデータの自動処理をバイパスする選択肢を有している。バイパスフラグが設定されるとき、入来するARP/RARPデータは例外ハンドラバッファへ転送される。CPUはその後、バッファをアクセスし、データを処理する。バイパスモードであるとき、CPUはそれ自身でARP回答を発生し、データを送信スケジューラへ転送する。出力するARP/RARPパケットでカスタム化されることができるフィールドは、ソースIPアドレス、ソースイーサネット(登録商標)アドレス、ターゲットIPアドレス、命令コードである。すべての他のフィールドはイーサネット(登録商標)によってIPv4のARP/RARPで使用される標準的な値に一致し、ソースイーサネット(登録商標)アドレスはイーサネット(登録商標)インターフェースのアドレスに設定される。(CPUはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。)
注意:これらの他のARP/RARPフィールドの変更が必要であるならば、CPUは生のイーサネット(登録商標)フレーム自体を発生しなければならない。
[ARPキャッシュの動作理論]
[ARPキャッシュへのARPエントリの付加]
ターゲットとするARPリクエストおよび回答(ダイナミック)を受信するとき、またはCPU(静的)によりリクエストされるときにARPが生成される。(CPUはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。)ダイナミックなエントリはARPリクエストまたは回答がインターフェースIPアドレスの1つに対して受信されるときに生成されるARPエントリである。ダイナミックエントリはユーザまたはホストコンピュータで動作するアプリケーションプログラムにより特定されるときに典型的には5乃至15分の限定された時間だけ存在する。静的エントリはユーザにより生成され、通常終了しないARPエントリである。
新しいARPデータは2つのソース、即ちARPレジスタを介するCPUおよびARPパケットパーサから来る。入来するARPデータを可能な限り迅速に処理することが必要であるので、両者のソースが同時にARPエントリを付加するようにリクエストするとき、ダイナミックARPエントリは優先順位を有する。
一度、ARPデータソースが選択されると、IT10GハードウェアメモリのどこにARPエントリを記憶されるかを決定することを必要とする。これを行うために所定のIPアドレスをメモリ位置中にマップするために探索テーブル(LUT)を使用する。探索テーブルは256のエントリを含んでいる。各エントリは16ビット幅であり、メモリポインタおよびポインタ有効(PV)ビットを含んでいる。PVビットはポインタが有効なアドレス、即ちARPキャッシュにより割当てられるメモリブロックの開始アドレスを指しているか否かを決定するために使用される。図13は探索テーブルエントリフォーマットを示している。
LUTの何処からポインタを検索する必要があるかを決定するために、8ビットインデックスを使用する。このインデックスは32ビットIPアドレスの最後のオクテットから取られる。最後のオクテットを使用する理由は構内網(LAN)では、これがホスト間で最も変化するIPアドレス部分であるからである。
一度、LUTの使用するスロットを決定すると、そのスロットに有効なポインタ(PV=“1”)が含まれているか否かをチェックする。有効なポインタが存在するならば、このインデックスに割当てられたメモリのブロックが存在することを意味し、ターゲットIPアドレスはそのブロックで発見されることができる。この点で、指向されているメモリのブロックが検索され、ターゲットIPアドレスが検索される。LUTがこのスロットに有効なポインタを含まないならば、メモリは内部メモリ、malloc1から割当てられなければならない。一度、メモリが割当てられると、割当てられたメモリの第1のワードのアドレスはLUTエントリのポインタフィールドに記憶される。
メモリを割当て、ポインタをLUTに記憶した後、必要なARPデータを記憶する必要がある。このARPデータはこれがキャッシュ探索中に正確なエントリであるか否かを決定するのに必要なIPアドレスを含んでいる。制御フィールドのセットもまた使用される。再試行カウンタは所定のIPアドレスで行われる複数のARPリクエスト試行の追跡を続けるために使用される。タイプフィールドはキャッシュエントリのタイプ(000=ダイナミックエントリ;001=静的エントリ;010=代理エントリ;011=ARPチェックエントリ)を示す。解決フラグはこのIPアドレスがイーサネット(登録商標)アドレスに適切に解決されていることを示す。有効なフラグはこのARPエントリが有効なデータを含んでいることを示す。注意;最初のARPリクエストが行われている間はエントリは有効であり解決されない。srcフィールドはARPエントリのソース(00=ダイナミックな加算、01=システムインターフェース、10=IPルータ、11=両システムインターフェースおよびIPルータの両者)を示している。インターフェースフィールドは多数のイーサネット(登録商標)インターフェースの使用を可能にするが、単一のインターフェース(0)にデフォルトする。後続する制御フィールドは以下のARPエントリを指すリンクアドレスである。リンクアドレスの上位桁ビット(MSB)は実際にはフラグlink_validである。link_validビットはこれに続く別のARPエントリが存在することを示している。最後の2つのフィールドはIPアドレスが解決されるイーサネット(登録商標)アドレスと、タイムスタンプである。タイムスタンプはARPアドレスが生成されたときを示し、エントリが満了しているか否かを決定するために使用される。図14はARPキャッシュエントリフォーマットの一例を示している。
256を超えるホストまたは多数のサブネットを有するLANでは、異なるIPアドレス間の衝突がLUTで生じる。換言すると、2以上のIPアドレスが同じLUTインデックスにマップされることができる。これはそのIPアドレスの最後のオクテットに所定の値を有する2以上のホストのためである。衝突に対処するため、ARPキャッシュは鎖を使用し、これについて次に説明する。
LUTで探索を行い、エントリがそのスロットに既に存在することが分かったとき、メモリから指向されるARPエントリを検索する。ARPエントリのIPアドレスを検査し、これをターゲットIPアドレスと比較する。IPアドレスが一致するならば、単にエントリを更新できる。しかしながら、アドレスが一致しないならば、Link_ValidフラグとARPエントリの最後の16ビットを観察する。最後の16ビットは同一のLUTインデックスにマップする別のARPエントリを指向するリンクアドレスを含んでいる。Link_Validビットが主張されるならば、リンクアドレスフィールドを指向するARPエントリを検索する。再度エントリ中のIPアドレスがターゲットIPアドレスに比較される。一致が存在するならば、エントリは更新され、存在しないならば、探索プロセスは一致が発見されるかLink_Validビットが主張されなくなるまで(鎖中の後続するリンクで)継続する。
鎖の最後に到達し、一致が発見されないときには、新しいARPエントリが生成される。新しいARPエントリの生成はmalloc1メモリ制御装置によるメモリの割当てを必要とする。メモリの各ブロックは大きさが128バイトである。したがって、各ブロックは8ARPエントリを収容できる。ブロックの最後に到達したならば、新しいメモリブロックがmalloc1からリクエストされなければならない。
前述したように、ユーザ(またはホストコンピュータで動作するアプリケーション)は静的または永久的なARPエントリを生成する選択肢を有している。ユーザはダイナミックARPデータが静的エントリを置換することを可能にする選択肢を有している。換言すると、静的ARPエントリが既に生成されているIPアドレスのためにARPデータが受信されるとき、その静的エントリは受信されたデータと置換されることができる。このアレンジメントの利点は静的エントリが古くなり、ダイナミックなデータを静的データに重ね書きすることを可能にし、より新しいARPテーブルを生じることである。IPからイーサネット(登録商標)に対するアドレスのマッピングが一定であり、例えばルータインターフェースのIPおよびイーサネット(登録商標)アドレスを記憶していることをユーザが確信しているならば、この更新能力はディスエーブルされる。ユーザはまたLANでのARP放送数を最小にするために静的エントリを保持するように選択することもできる。注意:ARP代理エントリはダイナミックARPデータにより重ね書きされることが絶対にできない。
[キャッシュのエントリの探索]
ARPキャッシュのエントリの探索はARPエントリの生成プロセスと類似したプロセスをたどる。探索はメモリが所定のインデックスに割当てられているか否かを決定するためにLUTを使用することにより開始する。メモリが割当てられているならば、メモリはエントリが発見される(キャッシュヒットが生じる)か、ゼロに設定されている(キャッシュの損失)link_validフラグを有するエントリに遭遇するまで検索される。
キャッシュの損失が生じたならば、ARPリクエストが発生される。これは必要ならば、キャッシュの新しいARPエントリと、新しいLUTエントリを生成することを含んでいる。新しいARPエントリでは、ターゲットIPアドレスが記憶され、解決ビットはゼロに設定され、有効ビットは1に設定される。リクエストカウンタは同様にゼロに設定される。エントリはその後時間スタンプされ、ARPリクエストはARPモジュールに送られる。回答が1秒後に受信されないならば、リクエストカウンタはインクリメントされ、別のリクエストが送信される。3つのリクエストを送信し、回答を受信しなかった後、ターゲットIPを解決する試みは断念される。注意:再試行インターバルと、リクエスト再試行数はユーザによる構成が可能である。
キャッシュの損失が生じたとき、リクエストモジュールは損失を通知される。これによりCPUまたはIPルータは現在のターゲットIPアドレスに対するARP回答を待機することを決定するか、別のIPアドレスの新しい探索を開始して現在のIPアドレスを待ち行列の後部に位置させる機会が与えられる。これは多数の接続の設定におけるキャッシュ損失の衝撃を最小にする。図15はARP探索プロセスを示すフロー図である。
一致するエントリが発見される(キャッシュヒット)ならば、解決されたイーサネット(登録商標)アドレスはARP探索をリクエストするモジュールに戻される。そうでなく、ターゲットIPアドレスがキャッシュで発見されず、すべてのARPリクエストの試行がタイムアウトであるならば、リクエストモジュールはターゲットIPアドレスが解決されなかったことを通知される。
注意:IPルータからのARP探索リクエストが失敗したとき、ルータはそのアドレスをさらに探索することを開始する前に最低20秒待たなければならない。
[キャッシュ初期化]
ARPキャッシュが初期化されるとき、幾つかのコンポーネントはリセットされる。探索テーブル(LUT)はすべてのPVビットをゼロに設定することによりクリアされる。現在使用されるすべてのメモリは割当てを解除され、malloc1メモリ制御装置へ解放されて戻される。ARP満了タイマもゼロに設定される。
初期化期間中、ARPリクエストは発生されない。またCPU(静止エントリ)から、或いは受信されたARPデータ(ダイナミックエントリ)からARPエントリを生成する試みは無視されるか破棄される。
[ARPエントリの満了]
ダイナミックARPエントリは限定された時間量だけARPキャッシュにのみ存在できる。これは任意のIPからイーサネット(登録商標)へのアドレスのマッピングが失効されることを防止する。古いアドレスのマッピングはLANがIPアドレスを割当てるためにDHCPを使用するか、装置のイーサネット(登録商標)インターフェースが通信セッション中に変更されるならば生じる。
時間の追跡を維持するために16ビットカウンタが使用される。1Hzのクロック周波数で動作するカウンタが経過した秒数を追跡するために使用される。各ARPエントリはこのカウンタから取られる16ビットのタイムスタンプを含んでいる。このタイムスタンプはIPアドレスが適切に解決されるときに取られる。
ARPエントリの満了はARPキャッシュがアイドルであるとき、即ち探索またはリクエストが現在処理されないときに生じる。このとき8ビットカウンタはLUTを巡回し検索するために使用される。LUTの各スロットは有効なポインタを含んでいるか否かを見るためにチェックされる。ポインタが有効ならば、指向するメモリブロックが検索される。その後、そのブロック内の各エントリはそのタイムスタンプと現在の時間との差がARPエントリの最大寿命以上であるか否かを見るためにチェックされる。他のメモリブロックが第1のメモリブロックから鎖を外されるならば、これらのブロックに含まれるエントリもチェックされる。一度、所定のLUTインデックスに関連するすべてのエントリがチェックされると、次のLUTスロットがチェックされる。
エントリが満了されていることが発見されたならば、エントリ中の有効なビットはゼロに設定される。同一のメモリブロックにその他のエントリが存在しないならば、ブロックは割当てを解除されてmalloc1に戻される。割当てを解除されたブロックは所定のLUTスロットに関連する唯一のブロックであるならば、そのスロットのPVビットもゼロに設定される。
[ARP代理の実行]
ARPキャッシュは代理ARPエントリをサポートする。ARP代理は、この装置がLANトラフィックのルータとして作用するときまたはARPの問い合わせに応答できない装置がLANに存在するときに使用される。
ARP代理が使用可能になると、ARPモジュールはそのホストに属さないIPアドレスに対するリクエストをARPキャッシュまで通過する。ARPキャッシュはその後、ターゲットIPアドレスを検索するため探索を行う。一致を発見したならば、それが代理エントリであるか否かを決定するためにARPエントリのタイプフィールドを検査する。代理エントリであるならば、ARPキャッシュは対応するイーサネット(登録商標)アドレスをARPモジュールへ戻す。ARPモジュールはその後代理エントリで発見されたイーサネット(登録商標)アドレスをソースイーサネット(登録商標)アドレスとして使用してARP回答を生成する。注意:ARP代理探索は入来するARPリクエストに対してのみ行われる。
[重複IPアドレスの検出(ARPチェック)]
システム(ホストコンピュータとIT10Gハードウェア)が最初にネットワークに接続するとき、ユーザまたはホストコンピュータで動作するアプリケーションはネットワーク上の任意の他の装置がそのインターフェースに割当てられたIPアドレスの1つを使用しているか否かを試験するために無料のARPリクエストを行うべきである。同一のLAN上の2つの装置が同じIPアドレスを使用するならば、これは2つのホストの経路設定パケットについて問題を発生する。無料のARPリクエストはホスト固有のIPアドレスのリクエストである。問合せに対する回答が受信されないならば、LANにはIPアドレスを使用しているホストが他にないと仮定されることができる。
ARPチェックはARP探索を行う方法と類似の方法で開始される。唯一の違いはキャッシュは一度ARPリクエストが完了すると破棄されることである。回答が受信されないならば、エントリは除去される。回答が受信されるならば、ホストコンピュータにIPアドレスがLAN上の別の装置により使用されていることを通知するため割込みが発生され、エントリはキャッシュから除去される。
[キャッシュアクセスの優先順位]
異なるタスクはARPキャッシュメモリに対するアクセスに関して異なる優先順位を有する。代理エントリの探索はARPリクエストに対する迅速な応答を必要とするために最高の優先順位を有する。第2の優先順位はダイナミックエントリをキャッシュに付加することであり、入来するARPパケットは非常に高いレートで受信され、再送信を避けるために可能な限り迅速に処理されなければならない。IPルータからのARP探索は次に高い優先順位を有し、それにホストコンピュータによる探索が続く。ARPエントリの手作業の生成は第2に低い優先順位を有する、満了キャッシュエントリは最低の優先順位を有し、キャッシュがARP探索を処理しないときまたは新しいエントリを生成しないときにはいつでも行われる。
[IPモジュール]
[概要]
UT10Gはすべてのタイプの受信されたパケットで自動解析するIPv4パケットを固有にサポートする。
[IPモジュールのブロック図]
図16はIPモジュールブロックの1構成の概略ブロック図である。
[IPサブモジュールの説明]
[IPパーサ]
IPパーサモジュール161は受信されたIPパケットを解析し、パケットを送信する場所を決定するように動作する。各受信されたIPパケットはTCP/UDPモジュールまたは例外ハンドラへ送信されることができる。
[IPヘッダフィールドの解析]
IPv4だけがIPモジュールにより受取られ解析され、それ故、このフィールドは処理される0×4に相違ない。IPv6パケットが検出されるならば、例外ハンドラにより例外として管理され処理される。0×4よりも小さいバージョンを有する任意のパケットは奇形(不法)として考慮され、そのパケットはドロップされる。
[IPヘッダ長]
IPヘッダ長フィールドは任意のIPオプションが存在するか否かを決定するために使用される。このフィールドは5以上でなければならない。それよりも小さいならば、パケットは奇形として考慮され、ドロップされる。
[IP TOS]
このフィールドは受信されたパケットにおいて解析または維持されない。
[パケットLen]
このフィールドは受信されたパケット中の総バイト数を決定し、次のレベルのプロトコルにそのデータセクションの最後が存在する場所を示すために使用される。このカウントの満了後で、ip_packet信号が主張を解除する前に受信されたすべてのデータバイトは埋め込みバイトであると仮定され、暗黙的に破棄される。
[パケットID、フラグ、断片化オフセット]
これらのフィールドはパケットの断片化解除に使用される。断片化されたIPパケットは専用のハードウェアにより処理されるか、または例外として扱われ、例外ハンドラにより処理されることができる。
[TTL]
このフィールドは受信されたパケットにおいて解析または維持されない。
[PROT]
このフィールドは次にカプセル化されるプロトコルの決定に使用される。以下のプロトコルはハードウェアで十分にサポート(または別の実施形態では部分的にサポート)される。
Figure 2010063110
任意のその他のプロトコルが受信され、unsupport_prot特性が使用可能になるならば、パケットはホストコンピュータに送信されることができる。プロトコルフィルタは選択的にあるプロトコルを受信することを可能にされることができる。そうでなければパケットは暗黙的に破棄される。
[チェックサム]
このフィールドは解析または維持されない。これは単にチェックサムが正しいことを確実にするために使用される。チェックサムが不適切であることが判明したならば、すべての次の層に行くbad_checksum信号が主張される。これは応答されるまで主張の状態である。
[ソースIPアドレス]
このフィールドは解析されTCP/UDP層へ送信される。
[目的地IPアドレス]
このフィールドは解析され、ローカルスタックが応答すべき有効なIPアドレスに対してチェックされる。これは1よりも多くのクロックサイクルを取り、この場合解析は継続されなければならない。パケットが誤って誘導されていることが判明したならば、bad_ip_add信号が主張される。これは応答されるまで主張の状態である。
[IP ID発生アルゴリズム]
オンチッププロセッサは任意の16ビット値をIP_ID_Startレジスタへ書込むことによりIP IDシード値を設定できる。ID発生器はこの値を取り、異なるリクエスタにより使用されるIP IDを発生するために16ビットのマッピングを行う。オンチッププロセッサ、TCPモジュール、ICMPエコー回答発生器はすべてIPIDをリクエストできる。ID発生器の1構造のブロック図が図17に示されている。
IP IDシードレジスタは新しいIP IDがリクエストされる毎にインクリメントされる。ビットマッパブロックはIP ID_Outバスが簡単なインクリメント値ではないようにIP ID_Reg値を再度アレンジする。
[IPインジェクタモジュール]
IPインジェクタモジュールはオンチッププロセッサからIPおよびTCPモジュールへパケットを注入するために使用される。IPインジェクタ制御レジスタはIPモジュールレジスタスペースに位置され、これらのレジスタはオンチッププロセッサによりプログラムされる。IPインジェクタのデータフローを示すブロック図が図18に示されている。
図から認められるように、IPインジェクタはIPモジュール下にデータを挿入できる。IP注入を使用するために、オンチッププロセッサはパケットが存在するメモリの開始アドレス、パケットの長さ、ソースMACアドレスでIPインジェクタモジュールをプログラムする。インジェクタモジュールはオンチッププロセッサのメモリからスタックへのパケットの送信を完了するときに割込みを発生する。
[TCP/UDPモジュール]
[概要]
このセクションはTCPモジュールを説明し、これはTCPおよびUDP転送プロトコルを管理する。TCPモジュールは4つの主要なセクション、即ちソケット送信インターフェース、TCP送信インターフェース、TCP受信インターフェース、ソケット受信インターフェースに分割される。
[特徴リスト]
以下はIT10GのTCP特性のリストである。
64Kソケットサポート TCPの適切でないサポート
スロースタート 高速再送信/高速度回復
選択可能なNagleアルゴリズム ウィンドウスケーリング
選択的なACK(SACK) ラップされたシーケンス番号に対する保護
(PAWS)
タイムスタンプサポート キープアライブタイマ
[ウィンドウスケーリング]
IT10Gはウィンドウスケーリングをサポートする。ウィンドウスケーリングはTCPウィンドウの規定を32ビットに拡大する拡張である。これはRFC1323セクション2(http://www.rfc-editor.org/rfc/rfc1323.txtを参照)に規定されている。ウィンドウスケール動作は3つの変数に基づいている。1つはTCP_Control1のSL_Win_Enビット(これはウィンドウスケールを使用可能にする)であり、2つ目はTCP_Control3のスライディングウィンドウスケール(これはスケーリングファクタを設定する)であり、最後のものはスケールされる値を決定するWCLAMPパラメータである。
SL_Win_Enビットなしに、ハードウェアはTCP−3方向のハンドシェイク中にTCPウィンドウスケールオプションを介してウィンドウスケーリングを交渉しようとしない。
[TCPダンプモード]
TCPダンプモードはTCPダンプおよび他のパケット監視プログラムのような広く使用される診断プログラムに対するサポートを可能にするIT10Gハードウェアモードである。TCPダンプモードが使用可能になるとき、すべての受信されたパケットは例外としてホストに送信され、ハードウェアスタックから来るすべての出力されるTCP/UDPパケットは例外パケットとしてループバックされる。
ドライバはネットワークモニタに対するこれらのパケットのコピーを作り、受信パケットを再度注入し、送信パケットを生のイーサネット(登録商標)フレームとして送信する。
[ホストACKモード]
ホストACKモードはホストコンピュータがデータをTCPセグメントから受信したときにTCP ACKだけを送信するIT10Gハードウェアモードである。ホストACKモードはデータセグメントを含んだMTXバッファのDMAがACKを送信前に完了するのを待機する。ホストコンピュータと統合ネットワークアダプタとの間をまたはその反対方向に通過するときにデータが破損する場合、ホストACKモードは付加的なデータの完全性を保証する。
[タイムスタンプ]
IT10Gはタイムスタンプのサポートを行う。タイムスタンプはRFC1323(http://www/rfc-editor.org/rfc/rfc1323txtを参照)に規定されているTCPに対する強化である。タイムスタンプはTCPがRTT(ラウンドトリップ時間)測定を良好に計算することを可能にし、またPAWS(ラップされたシーケンスに対する保護)のサポートに使用される。
[PAWS]
PAWS(ラップされたシーケンスに対する保護)はRFC1323(http://www/rfc-editor.org/rfc/rfc1323txtを参照)に規定されている。PAWSはTCP接続を破壊する古い重複セグメントに対する保護であり。これは高速度のリンクでは重要な特徴である。
[TCPホスト再送信モード]
TCPホスト再送信モードは統合ネットワークアダプタに位置するバッファからではなく、ホストのメモリバッファからの直接にデータの再送信を可能にする。これは統合ネットワークアダプタにより必要とされるメモリ量が減少されることを許容する。
[初期シーケンス番号発生]
初期シーケンス番号発生は秘密保護される必要がある。RFC1948はRFC793のオリジナルの初期シーケンス番号仕様の弱点を指摘し、幾つかの代わりの方法を推薦している。統合ネットワークアダプタはRFV1948にしたがって動作する最適化された方法を使用するが、ハードウェアで構成するのに効率的である。
[二重スタックモード]
二重スタックモードはネットワークアダプタに集積されるハードウェアTCP/IPスタックが協動してホストコンピュータのTCP/IPスタックを伴って動作することを可能にする。
二重スタックモードは統合ネットワークアダプタがそれと同一のIPアドレスを使用して並列に動作するソフトウェアスタックの共存をサポートすることを可能にする。
二重スタックモードは統合ネットワークアダプタの2つの基本的なハードウェア機能を必要とする。第1のハードウェア機能はSYN状態メッセージモードである。SYN状態メッセージモードでは、任意の受信されたSYNは状態メッセージをホストコンピュータに対して発生し、SYN/ACKはホストコンピュータが適切な命令ブロックを統合ネットワークアダプタハードウェアへ返送するまで、統合ネットワークアダプタハードウェアにより発生されない。SYN状態メッセージモードが統合ネットワークアダプタで使用可能とならないならば、SYN/ACKは統合ネットワークアダプタにより自動的に発生され、状態メッセージは発生されない。
二重スタックモードにより必要とされる第2のハードウェア機能は統合ネットワークアダプタ制御ブロックデータベースと一致しないTCPパケットが受信されるとき、統合ネットワークアダプタハードウェアからのRSTメッセージの抑制である。この場合、自動的にRSTを発生する代わりに、統合ネットワークアダプタハードウェアはホストコンピュータのソフトウェアTCP/IPスタックがこのパケットを例外パケットとして処理することを可能にするために、例外パケットとしてパケットをホストコンピュータへ送信しなければならない。
[IP ID分割]
IP(インターネット・プロトコル)ID(インターネット識別)分割は二重スタックサポートパッケージの部分である。IP ID分割はホストコンピュータおよび統合ネットワークアダプタがIP IDのオーバーラップなしにIPアドレスを共有することを可能にする。IP ID分割がオフに切換えられたとき、統合ネットワークアダプタは全16ビットID範囲(0−255)を使用する。IP ID分割がオンに切換えられたとき、IP IDのビット[15]は1にされ、ホストコンピュータソフトウェアのTCP/IPスタックがIP ID範囲の半分を使用することを可能にする(即ち統合ネットワークアダプタは128−255を使用し、ホストコンピュータソフトウェアTCP/IPスタックはIP IDで0−127を使用する)。
[カスタムフィルタリング]
あるタイプのパケットの特別な動作を限定、承認または行うために使用されることができるカスタムフィルタを有する場所がハードウェアに幾つか存在する。イーサネット(登録商標)フィルタリングは以下の属性を取ることができる。
・プログラムされたユニキャストアドレスの受取り、
・放送パケットの受取り、
・マルチキャストパケットの受取り、
・ネットマスクにより特定される範囲内のアドレスの受取り、
・無差別モードを可能にする(すべてのパケットを容認する)。
[VLANサポート]
VLANサポートは幾つかの最適化されたハードウェア素子からなる。1つのハードウェア素子は入力パケットからVLANヘッダ除去し、第2の最適化されたハードウェア素子はVLANタグが付された出力パケットを発生し、第3の最適化されたハードウェア素子は入力SYNフレームからVLANパラメータを生成し、第4の最適化されたハードウェア素子は例外パケットとUDPパケットのVLANタグ情報を通す。
[ジャンボフレームサポート]
ジャンボフレームは通常の1500バイトサイズのイーサネット(登録商標)フレームよりも大きい。ヘッダ情報に対して使用されるネットワーク帯域幅よりも小さいジャンボフレームはネットワークにおいて増加されたデータ処理能力を可能にする。統合ネットワークアダプタは9kバイトまでのジャンボフレームをサポートするために最適化されたハードウェアを使用する。
[SNMPサポート]
SNMPはネットワークおよびハードウェアアダプタ性能の統計が遠隔的に監視されることを可能にする上位レベルのプロトコルの形態である。
[MIBサポート]
統合ネットワークアダプタは多数の統計カウンタに対して最適化されたハードウェアサポートを含んでいる。これらの統計カウンタは標準的な管理情報ベース(MIB)により規定されている。各これらのSNMP MIBカウンタはネットワークおよび統合ネットワークアダプタで生じる(受信され、送信され、ドロップされたパケット)事象を追跡する。
[メモリチェック]
メモリエラーチェックおよび補正(ECC)は部分的なチェックに類似している。しかしながら、パリティチェックが単一ビットエラーだけしか検出できない場合にも、ECCは単一ビットメモリエラーを検出および補正し、二重ビットエラーを検出できる。
単一ビットエラーは最も普通であり、完全なバイトまたはワードを読取るときに不正確であるデータの単一ビットにより特徴付けされる。マルチビットエラーは同じバイトまたはワード内で2以上のビットがエラーである結果である。
ECCメモリは暗号化されたECCコードをデータと共に記憶するために追加ビットを使用する。データがメモリに書込まれるとき、ECCコードもまた記憶される。データが読み戻されるとき、記憶されたECCコードはデータが書込まれたときに発生されたECCコードと比較される。ECCコードが一致しないならば、データ中のどのビットがエラーであるかを決定できる。エラーのビットが“反転”され、メモリ制御装置が補正されたデータを解放する。エラーは“オンザフライ(on-the-fly)”で補正され、補正されたデータはメモリに戻されない。同じ破損データが再度読取られるならば、補正プロセスは反復される。
統合ネットワークアダプタはECCがアダプタ内のパケットデータおよび制御情報の両者を保護するためのフレキシブルな方法でプログラムされ選択されることを可能にする。
[遺産モード]
遺産モードはトラフィックタイプにかかわりなくすべてのネットワークトラフィックがホストコンピュータへ送信されることを可能にする。これらのモードは統合ネットワークアダプタがハードウェアTCP/IPスタックがアダプタに存在しないかのように動作することを可能にし、モードはしばしばダンプNIC(ネットワークインターフェースカード)と呼ばれる。
[IP断片化]
IP断片化されたパケットの再組立ては統合ネットワークアダプタにより処理されない。IP断片化パケットは例外パケットとして通過され、ドライバ中で再度組立てられ、その後IP注入モードを介して統合ネットワークアダプタへ“再注入”される。
[IP注入]
IP注入モードはIPパケット(例えば再度組立てられたIP断片またはIPsecパケット)が統合ネットワークアダプタのハードウェアTCP/IPスタックに注入されることを可能にする。
注入制御レジスタはIPパケットを統合ネットワークアダプタ内のTCP/IPスタックに注入するために使用される。注入制御レジスタの特徴はホストコンピュータが注入を制御し、IPパケットを統合ネットワークアダプタ内のハードウェアTCP/IPスタックに注入することを可能にする。注入制御レジスタはしたがってSYN、IPSec、または他のパケットの統合ネットワークアダプタへの注入を可能にする。注入制御レジスタもまたTCPダンプモード機能の一部である。
[NAT、IPマスカレード、ポート転送]
NAT、IPマスカレード、ポート転送はポートのプログラム可能な範囲に入る特定されたタイプのUDPまたはTCPのすべてのパケットを例外パスに転送するポート範囲レジスタを介して統合ネットワークアダプタでサポートされる。ポートレジスタはある範囲のポートがNAT、IPマスカレード、ポート転送のようなネットワーク制御動作で使用されることを可能にする。
[複数のIPアドレス]
統合ネットワークアダプタハードウェアはその固有のIPアドレスとして応答できるIPアドレスの16までの範囲をサポートする。これらのアドレス範囲はマスクを有するIPアドレスベースとしてアクセス可能である。これはIPアドレスがIPアドレスの範囲まで拡張されることを可能にする。これは統合ネットワークアダプタがマルチホーミングまたは複数のIPアドレスに応答する能力を行うことを可能にする。
[IPデバッグモード]
試験および制御ビットが統合ネットワークアダプタで使用可能になるとき、すべてのIPパケットは例外としてホストコンピュータへ送信される。このモードは診断目的用に設計される。
[時間待機状態]
時間待機は受動的なモードのTCP接続の最終状態であり、時間待機状態とその動作はRFC793に記載されており、http://www.rfc-editor.org/rfc/rfc793.txtを参照されたい。
[仮想ソケット]
統合ネットワークアダプタハードウェアは可変のソケット数または接続数をサポートし、現在の構成では645535までのソケットをサポートする。
統合ネットワークアダプタはアダプタとホストコンピュータとの間の接続を転送するため(TOEと一体化される)最適化されたハードウェアサポートを行う。
統合ネットワークアダプタハードウェアがその最大容量に等しい接続を承認するとき、次のSYNは例外パケットとしてホストへ通過され、ホストはこの接続を処理することができる。この接続を開くためにホストに対する場合、ハードウェアのデータベースに一致しないTCPパケットがRSTに回答する代りに例外パケットととしてホストへ転送されることを可能にする二重スタックモードの一部分を使用するようにハードウェアを設定する必要があることに注意すべきである。
[生存時間]
TTLすなわち生存時間はネットワークでのIPパケットの寿命をホップ数に限定するIPアドレスパラメータである(ホップはルータのような層3の装置を横切るジャンプである)。統合ネットワークアダプタハードウェアは出力するフレームに対してこの値を送信されたパケットの生存時間に限定するように設定する。さらに詳しい情報はhttp://www.faqs.org/rfcs/rfc791.htmlでRFC791のセクション生存時間を参照されたい。
[キープアライブ]
キープアライブはRFC1122のセクション4.2.3.6に記載されている。http://www.faqs.org/rfcs/rfc1122.htmlを参照されたい。キープアライブはリンクを横切ってキープ・アライブ・パケットを周期的に送信することによりアイドル状態のTCP接続が接続状態を維持し、タイムアウトしないことを可能にする。
[ToS]
TOSすなわちサービスのタイプはIPパケットを優先させるためにルータにより使用されることができるIPアドレスパラメータである。TOSパラメータはシステムおよびソケット層で調節可能である必要がある。送信のとき、統合ネットワークアダプタハードウェアは幾つかのレジスタを介してTOSを設定する。詳しい情報はhttp://www.faqs.org/rfcs/rfc791.htmlでRFC791のセクションのサービスのタイプを参照されたい。
[QoS]
統合ネットワークアダプタハードウェアは送信されたデータのQoSを可能にするために4つの送信待ち行列をサポートする。各ソケットはQoS値を割当てられることができる。この値もまたVLAN優先順位レベルへマップされるために使用されることができる。
送信動作を要約すると、以下のようなものである。TCP送信データフローはソケット問い合わせモジュールで開始し、これは送信データ有効ビットテーブルを通過し、それらの送信データ有効ビットセットを有するエントリを探す。このようなエントリを発見したとき、ソケット問い合わせモジュールはソケットのユーザ優先順位レベルにしたがってそのエントリを4つの待ち行列の1つに配置する。優先順位レベル7または6を有するソケットは待ち行列リスト3へ置かれ、レベル5および4は待ち行列リスト2へ置かれ、レベル3および2は待ち行列リスト1へ置かれ、レベル1および0は待ち行列リスト0へ置かれる。
優先順位待ち行列を使用するこれらのQoS特性は送信トラフィックにしたがって多数のハードウェアモジュールの並列使用を可能にする。
[フェイルオーバー]
ネットワークアダプタ間のフェイルオーバー(failover)はNO_SYNモードによりサポートされる。NO_SYNモードは接続を開始しようとせずにソケットが生成されることを可能にする。これにより統合ネットワークアダプタハードウェアのソケットおよびすべてのその関連するデータ構造が接続を行わずに生成されることができる。NO_SYNモードはソフトウェアTCP/IPスタックから、統合ネットワークアダプタへの別のカードまたは接続の移行からのフェイルオーバーのサポートを可能にする。
[トップレベルのブロック図]
図19はTCPモジュールの1構成のトップレベルのブロック図を示している。ソケット制御ブロック(CB)191は各ソケット接続に特有の情報、状態、パラメータ設定を含んでおり、仮想ソケット(VSOCK)アーキテクチャの最も重要またはキー部分を形成する。ロック機構は1つのモジュールがCBで動作しながら別のモジュールはそこで動作しないようにインストールされる。
[TCP受信サブモジュール]
図20はTCP受信200データフローを示している。
[概要]
正常なIPトラフィックでは、パケットは64ビットのTCP Rxデータパスを介して受信される。パケットヘッダはTCPパーサモジュールへ進み、パケットデータは受信データメモリ制御装置201へ経路設定される。IP断片化トラフィックでは、データはメモリブロックを介して受信され、ヘッダ情報は正常なパスを介して受信される。これによりIP断片化からのメモリブロックは受信データメモリ制御装置により書込まれるデータブロックに類似して見える。CPUデータもまた受信されたデータを受信データメモリ制御装置を介して注入するためにメモリブロックを使用する。このアーキテクチャは正常および断片化されたトラフィックの処理において最大のフレキシブル性を与え、これは断片化されたトラフィックをサポートしながら性能が正常なトラフィックに最適化されることを可能にする。
受信TCPパーサ202はヘッダ情報を解析し、パラメータをVSOCK203と受信状態ハンドラ204へ通過するように動作する。受信TCPパーサがデータをどうするかを知らないならば、これを例外ハンドラ205へ転送される。さらに受信TCPパーサはすべてのデータを例外ハンドラへ送るようにプログラムされることもできる。
VSOCKモジュールはローカルおよび遠隔IPと、ポートアドレスを取り、ポインタを制御ブロックへ戻す。
NAT&IPマスカレードモジュール206は受信されたパケットがNATまたはIPマスカレードパケットであるか否かを決定する。イエスならば、そのパケットは生(完全なパケット)フォーマットでホストシステムまで通過される。
受信状態ハンドラは各接続の状態の追跡を維持し、したがってその制御ブロックを更新する。
[受信TCPパーサ]
受信TCPパーサはパケットヘッダ情報をIT10GネットワークスタックのTCP受信部分のその他のモジュールへ登録し、送信する。受信TCPパーサモジュールもまたCPU(オンチッププロセッサまたはホストコンピュータ)から受信ストリーム中へデータを注入することを必要とされるレジスタを含んでいる。CPUはメモリブロックをセットアップしなければならず、その後、受信TCPパーサレジスタに情報をプログラムする。受信TCPパーサはTCPヘッダの部分的なチェックサムを生成し、この部分的なチェックサムを受信データメモリ制御装置からの部分的なチェックサムへ付加し、結果的な完全なチェックサムをTCPヘッダのチェックサムと比較する。断片化されたパケットでは、受信TCPパーサは最後の断片中のIP断片化により送信されたチェックサムに対してTCPヘッダのチェックサムをチェックする。
注意:IPモジュールはIP断片化ビットを設定し、第1のメモリブロックポインタ、最後のメモリブロックポインタ、インデックス、部分的なチェックサムを適切なパケット断片のデータストリーム中へ挿入しなければならない。またTCP受信は疑似ヘッダを計算するためにIPプロトコル情報を必要とする。
[受信データメモリ制御装置]
受信データメモリ制御装置はIPとTCPモジュール間の64ビットバスからのデータをRxDRAMのデータメモリブロックへ転送する。2つの転送モードが存在する。正常のモードはTCPデータをメモリブロックに記憶するために使用される。生のモードはパケット全体をメモリブロックに記憶するために使用される。生のモードはNAT/IPマスカレードに使用される。例外処理では、正常なモードはCBデータをCPUへ転送するためにレジスタと共に使用される。
[VSOCK]
VSOCKモジュールはローカルおよび遠隔IPとポートアドレスをパケットから通過し、ソケットオープンまたはTIME_WAIT(TW)制御ブロック(CB)ポインタを受信状態ハンドラへ戻す。VSOCKはIPおよびポートアドレスでハッシュ計算を実行し、開放/TW CB探索テーブル(LUT)207へのインデックスの役目をするハッシュ値を生成する。その位置でのLUTエントリは開放208またはTW209制御ブロックへのポインタを保持する。
開放/TW CB LUTからのポインタはゼロ以上のCBのリンクされたリストの最初の制御ブロックを指向しており、それぞれ異なるIPおよびポートアドレスを有するが、(ハッシュの衝突から生じる)同一のハッシュ番号を生じる。VSOCKはこの鎖を進み、一致が発見されるか鎖の最後に到達されるまで、パケットIPとポートアドレスを連鎖されたCB中のエントリと比較する。一致が発見されたならば、CBへのポインタは受信状態ハンドラへ通過される。鎖の最後に到達したならば、VSOCKはTCPパーサにエラーを通知する。
開放/TW CB LUTエントリに接続されるCBの鎖は開放CBとTIME_WAIT CBを含んでいる。開放CBは鎖の最初である。受信TCPMaxOpenCBperChainにより決定されるように最大数の開放CBが存在する。TW CBは開放CBの後に連鎖されている。鎖当り最大数のTW CBも存在する。開放CBは3方向のハンドシェイクが完了したときに生成され、HO CBは受信状態ハンドラにより開放CBへ移動される。TW CBは最後のACKがFINシーケンスで送信されたときに受信状態ハンドラにより開放CBから生成される。いずれのケースでももはや余地がないならば、エラーは受信状態ハンドラへ戻される。
開放CBのCBキャッシュはLUTエントリからリンク数をプリセットのではなくさらに開放CBで構成される。キャッシュ中にあるときCBのビットが設定される。キャッシュはハッシュ/LUT動作に対して並列に検索される。図21はVSOCK/受信状態ハンドラの制御ブロックサーチ解決フローを示している。
[Rcv状態ハンドラ]
SYNが受信されるならば、12ビットのハッシュは(17ビットハッシュを行い開放またはTIME_WAIT制御ブロックを検索する)VSOCKの呼出しに加えて行われ、目的地ポートは許可されたポートリストに対してチェックされる。ポートが可能にされ、VSOCKが一致する開放/TW CBを発見しないならば、ハッシュ結果はHO CBテーブルへのインデックスとして使用される。VSOCKが開放またはTIME_WAIT CBを発見するならば、Dup CBエラーがホストコンピュータへ送信されることができ、SYNはドロップされる。異なるIPおよびポートアドレスを有するエントリが既にHO CBテーブルに存在するならば、新しいパケット情報は古い情報に重ね書きされる。これはリソースがサービス(DOS)アタックのSYNフラッド否認に保持されることを可能にする。重ね書きはHO CBテーブルのエージングの必要性をなくす。既にSYN/ACKされた接続は暗黙的にドロップされることができる。CBへのポインタは受信状態ハンドラへ転送される。遠隔側(ローカル側はSYN/ACKではなくSYNを受信する)により開かれている接続だけがHO CBテーブルに入る。ローカル側により開かれている接続は開放CBにより追跡される。
ACKが受信されるならば、12ビットのハッシュが行われ、VSOCKが呼出される。12ビットのハッシュを介してHO CB中にヒットが存在するが、VSOCKは開放またはTW CBを発見しない場合、およびシーケンスおよびACK番号が有効である場合には、接続のための3方向のハンドシェイクは完全であり、CBは受信状態ハンドラにより開放CBテーブルへ転送される。VSOCKが開放またはTW CBを発見するが、12ビットハッシュとの一致がないならば、ACKは受信状態ハンドラにより有効なシーケンスとACK番号、および重複ACKをチェックされる。
一度、VSOCKモジュールが正しいソケットCBを発見すると、他の適切な情報が受信状態ハンドラにより読取られ更新される。TCPデータは大きい(2kバイト)または小さい(128バイト)メモリバッファに記憶される。単一のセグメントはメモリバッファをスパンできる。1つのサイズのバッファがなくなると、他のサイズが使用される。データが所定のソケットで受信されるとき、ソケットハッシュLUTのそのData_Availビットもまた設定される。
受信状態ハンドラがRSTパケットが必要とされることを決定するならば、受信状態ハンドラは適切なパラメータをRST発生器210へ転送する。SYN/ACKまたはACKが必要とされるならば、受信状態ハンドラはCBハンドルを受信・送信FIFOバッファ211へ送信する。
[RST発生器]
RST発生器はMACアドレス、4つのソケットパラメータ、RST応答を必要とするパケットで受信されたシーケンス番号を取り、RSTパケットを構成する。RST発生器は最初にパケットを作成するためにMTXメモリからブロックをリクエストする。RSTパケットは常に40バイトの長さであるので、これらのパケットは任意のサイズのMTXブロックで適合する。RST発生器は常に利用可能な最小のブロック、通常は128バイトのブロックをリクエストする。RSTパケットは0×0000で固定されたそれらのIP IDと、(断片ビットではない)IPヘッダ中に設定されたそれらのDFビットを有している。
RST発生器がRSTパケットを構成した後、RST発生器はRSTパケットを含んでいるMTXブロックの開始アドレスをRST送信待ち行列に記憶する。この待ち行列はM1メモリ中に形成されている。M1メモリのブロックはリクエストされ、それが一杯になるまで使用される。各M1ブロックの最後のエントリは使用される次のM1ブロックのアドレスを指向する。それ故、RST待ち行列はダイナミックに成長できる。MTXブロックアドレスが26ビットだけなので、RST発生器は一度にM1メモリの32ビットをアクセスする。この待ち行列の長さはM1メモリが利用可能である大きさに成長できる。待ち行列に対してさらに利用可能なメモリが存在しないならば、RST発生器は暗黙的にRCV状態ハンドラからのRSTパケットリクエストを破棄する。これは送信におけるRSTパケットのドロップに類似するネットワークの影響を有する。接続は存在しないので、これは性能に対して深刻に影響しない。
RST送信待ち行列の出力はTCP送信パケットスケジューラに与えられる。RSTパケットが送信されたことを送信スケジューラがRST発生器へ示したとき、RSTパケットに使用されていたMTXブロックは解放される。M1メモリブロックのすべてのエントリが送信され、次のM1ブロックへのリンクアクセスが読取られるとき、M1メモリブロックは解放される。基本的なデータフローが図22に示されている。
[受信・送信FIFOバッファ]
受信・送信FIFOバッファは、受信状態ハンドラが受信されたパケットに応答して送信を必要とされることを決定したSYV/ACKとACKを待ち行列するために使用される。受信状態ハンドラは以下の情報を受信・送信FIFOバッファヘ通過する。
・ソケット情報を含むCBアドレス(16ビット)、
・CBタイプ(2ビット;00=半開、01=開放、10=Time_Wait)、
・送信されるメッセージタイプ(1ビット、0=SYN/ACK、1=ACK)。
受信・送信FIFOバッファエントリは4バイトの長さであり、種々のメモリバッファに記憶される。現在、このバッファは4Kバイトを割当てられ、それは1Kエントリの深さの受信・送信FIFOバッファを提供する。受信・送信FIFOバッファの出力はSYN/ACK発生器に与えられる。
[SYN/ACK発生器]
SYN/ACK発生器212は受信・送信FIFOバッファから出力された情報を取り、半開、開放またはTime_Waitの特定されたCBからの他の適切な情報を探索し、SYN/ACKまたはACKの所望のパケットを作成する。SYN/ACK発生器は最初にパケットを作るためにMTXメモリからのブロックをリクエストする。SYN/ACKおよびACKパケットは常に40バイトの長さであるので、これらのパケットは常に任意のサイズのMTXブロックに適合する。SYN/ACK発生器は常に利用可能な最小のブロック、通常は128バイトのブロックをリクエストする。
SYN/ACK発生器がSYN/ACKまたはACKパケットを作成した後、SYN/ACK発生器は開始MTXブロックアドレスを16の深さの待ち行列へ置き、その後、その待ち行列はTCP送信パケットスケジューラへ供給する。受信・送信FIFOバッファがプログラム可能な高い透かし(water mark)を通過するならば、送信パケットスケジューラは状態を通知され、これらのパケットの送信優先順位を増加する。
[NATおよびIPマスカレード]
NATおよびIPマスカレードブロック206はVSOCKモジュールと並列して動作する。NATおよびIPマスカレードブロックは入来するパケットを復号し、それが予め特定されたNATまたはIPマスカレードポート範囲であるか否かを見る。イエスであるならば、これがNATパケットであることをVSOCKへ示すためにシグナリング機構が使用される。これが生じるとき、パケット全体は受信メモリバッファ中にあるように、記憶される。パケットは次に幾つかの点でホストシステムに転送される。ホストシステムのドライバはその後経路設定機能を行い、ヘッダパラメータを置換し、それを適切なネットワークインターフェースへ送信するように動作する。
[例外ハンドラ]
例外ハンドラはIT10Gコアにより処理されないホストコンピュータへパケットを送信する。
[サポート回路]
[rset発生]
rst信号はトップレベルのrset信号から同時に発生される。
[tcp_in_rd発生]
tcp_in_rdはIPからの入力データをフリーズするために使用される。これはDRAM書込みリクエストが即座に承認されないときに主張される。またDRAMが小さいまたは大きいメモリブロックを使い果たした場合にも生じる。
[ワードカウンタ]
ワードカウンタ、即ちword_cnt[12:0]はリセットおよびソフトウェアリセットではゼロである。これはtcp_in_rdがアクチブであり、ip_in_eofがアクチブでないときにインクリメントする。ip_in_data[63:0]の第1のワード中にゼロであり、第2のワード中は1である。これはip_in_eof後の第1のワードではゼロになり、有効なip_in_dataワード間ではゼロのままである。
[メモリブロック制御回路]
[保留メモリブロック]
メモリブロック制御回路は小さいおよび大きいメモリブロックを常に使用できるように維持する。これはデータがメモリブロックに書込まれなければならないときに遅延をほとんど起こさないことを確実にする。メモリブロック制御回路はまたデータの書込みと並行してブロックリクエストを行う。これらの保留メモリブロックはリセットから初期化される。
[初期化およびメモリブロックのサイズ選択]
TCPまたはUDPセグメントのパラメータが初期化される。使用されるメモリブロックのサイズはIPからのTCP長の情報とパーサからのTCPヘッダ長の情報により決定される。データサイズ(TCP長−TCPヘッダ長)が小さいメモリブロックに適合するならば、保留の小さいメモリブロックが使用され、別の小さいメモリブロックは保留を補充するようにリクエストされる。そうでなければ、保留の大きいメモリブロックが使用され、別の大きいメモリブロックが保留を補充するようにリクエストされる。小さいメモリブロックが利用可能ではないならば、大きいメモリブロックが使用される。しかしながら大きいメモリブロックが必要とされるが利用可能ではないならば、小さいメモリブロックは使用されない。
[整列されたTCPデータのメモリブロックへの書込み]
TCPヘッダ中に奇数のオプション半ワード(それぞれ32ビット幅)が存在するならば、TCPパケットのデータは整列され、データは64ビット境界で開始する。TCPパケットデータが整列されるならば、データがIPブロックから送信されるとき、TCPパケットデータは直接的にメモリブロックへ置かれることができる。セグメントに対する第2のブロックのアドレスはTCP状態マシーンに送信される。TCPセグメントに残されたデータと同様に、カウントはブロックに残されたスペースで維持される。メモリブロックが既に一杯であるならば、記録も維持されなければならない。TCPセグメントの最後に到達したとき、先のブロックが一杯であったならば、そのブロックは現在のブロックにリンクされなければならない。また現在のブロックヘッダ中のリンクはクリアされ、データ長およびデータの動作しているチェックサムはブロックヘッダに書込まれる。データ長はip_in_bytes_valのビットにより決定されるように、最後の64ビットワードのバイト数の関数である。TCPセグメントの最後になる前にブロックに余地がなくなったならば、データ長および動作しているチェックサムはブロックヘッダに書込まれ、ブロックが終了していることを示すフラグが設定される。TCPセグメントの残りのデータは大きいまたは小さい保留メモリブロックのいずれが使用されるかを決定するために使用される。ブロックサイズが尽きたならば、先の説明と同一のルールが使用される。最後のメモリブロックのアドレスはTCP状態マシーンに送信されなければならない。
[整列されていないTCPデータのメモリブロックへの書込み]
TCPセグメントのデータが整列されていない(ip_in_data[63:0]が2つの異なるメモリブロックへ書込まれるデータを含んでいる)ならば、IPブロックから第1のlo32ビットの半ワードを記憶するため、最初に余分のサイクルが存在しなければならず、それによってデータはメモリブロックで高い32ビットの半ワードとして書込まれることができる。IPブロックから次のバスサイクル中に高い32ビットの半ワードは、記憶された半ワードと同じサイクルの低い32ビット半ワードとして書込まれる。カウントおよびチェックサム計算もこの状態を処理するために調節されなければならない。そうでなければ整列されていないデータは整列されたデータと同一方法で処理され、既に説明したのと同一の終了ケースを有する。
[メモリブロックへのUDPデータの書込み]
UDPデータは常に整列されるので、UDPデータはTCPの整列されたデータと同一方法で処理される。同一の終了ケースが適用される。
[チェックサム計算]
チェックサムはREC1071に説明されているように計算される。チェックサム計算ブロックでは、チェックサムはデータについてのみ計算される。パーサはヘッダチェックサムを計算し、TCP状態マシーンは2つのチェックサムを結合し、チェックサムエラーを有するパケットにどのように対処するかを決定する。
[固定したヘッダフィールドの解析]
[ワードカウンタ]
ワードカウンタ、即ちword_cnt[12:0]はリセットおよびソフトウェアリセットではゼロである。カウンタはtcp_in_rdがアクチブであり、ip_in_eofがアクチブでないときにインクリメントする。カウンタはip_in_data[63:0]の第1のワード中にゼロであり、第2のワード中は1である。カウンタはip_in_eof後の第1のワードではゼロになり、有効なip_in_dataワード間ではゼロのままである。
[remote_jp_add[31:0]とlocal_ip_indx[3:0]のラッチ]
これらのラッチはリセットおよびソフトウェアリセットではゼロである。remote_jp_addはsrc_ip_add_valid、ip_in_dav、tcporudp_packetが主張されるときsrc_ip_add[31:0]からラッチされる。Local_jp_indxはdest_ip_add_valid、ip_in_dav、tcporudp_packetが主張されるときdest_ip_index[3:0]からラッチされる。両者は次のパケットで再ロードされるまで有効である。
Figure 2010063110
注意:フィールドはリセットおよびIPからの第1のワードでクリアまたは初期化される(括弧内)。
注意:ラッチはまたtcp_packet、udp_packet&ip_in_davにより適格になる。
[チェックサム、エラーチェック、随意選択的なヘッダフィールドの解析]
[チェックサム]
RFC1071チェックサムは、IPソースアドレス、IP目的地アドレス(インデックスではない)、8ビットのゼロが先行する(=0006の16進)8ビットタイプのフィールド、TCP長を含む疑似ヘッダと共に、ヘッダ長フィールドで規定されているようにヘッダで計算される。
[ヘッダ長チェック]
一度、rx_tcp_hdr_lenフィールドが解析されると(ワードカウント>0001)、rx_tcp_hdr_lenフィールドはチェックされる。rx_tcp_hdr_lenフィールドは5よりも小さくすることはできず、または10に設定されるMAX_HDR_LENよりも大きくてはならない。そうであるならば、エラーrx_tcp_hdr_len信号が主張され、次のパケットの開始までその状態である。
[TCP長チェック]
IPからのIPペイロード長がチェックされる。IPペイロード長は(rx_tcp_header_lenがまだ有効でないときに使用される)20バイトよりも小さくはできず、rx_tcp_header_lenよりも小さくはできない。そうであるならば、エラーrx_tcp_hdr_len信号が主張され、次のパケットの開始までその状態である。
[随意選択的なヘッダフィールドの解析]
フィールドはリセットおよびIPブロックからの第1のワードでクリアされる。タイムスタンプ(10バイト+パッディング)、MSS(4バイト)、ウィンドウスケール(3バイト+パッディング)だけがサーチされる。20バイトだけのオプションが存在できるので、ヘッダ長は10の32ビット半ワードだけである(ワードカウント=0004)。
オプションは直接的な方法で解析される。オプションは第2の半分のワードカウント=2から開始し、32ビットに整列される。オプションの第1のバイトはオプションタイプを識別する。
タイムスタンプオプションが検出されるならば、rx_tcp_timestamp、rx_tcp_tx_echoおよびrx_tcp_timestamp_valがロードされる。
MSSオプションが検出されるならば、rx_tcp_remote_mssおよびrx_tcp_remote_mss_valがロードされる。
ウィンドウスケールオプションが検出されるならば、rx_tcp_remote_win_sclとrx_tcp_rem_win_scl_valがロードされる。
これらは次のパケットの開始まで有効の状態である。
[ソケット受信サブモジュール]
ソケット受信サブモジュールはIT10Gと、受信されたデータのシステム(ホストコンピュータ)との間のインターフェースを処理する。図23はソケット受信データフローを示している。
ソケット受信サブモジュールプロセスは受信論理装置230で開始し、ソケット受信DAVビットマップテーブル231に1ビットを設定する。ソケット受信DAVビットマップテーブルは各64Kソケットに関連する1ビットを有する(それ故テーブルは8Kバイトである)。CBの位置を知ることにより、適切なビットが設定される。
Socket_DAV問い合わせモジュール232はソケット受信DAVビットマップテーブルを連続して走査しているブロックである。Socket_DAV問い合わせモジュールが1セットビットを発見するとき、対応するCBアドレスを発生し、CB構造が有効なlink_listブロックを含んでいるか否かを見るためにCB構造をチェックする。有効なlink_listブロックは64ビットメモリアドレスと16ビット長からなる。CBが有効なlink_listブロックを有するならば、CBアドレスおよび有効なlink_list情報は2段のパイプラインレジスタ対を介してDMA Prepモジュール233へ通過される。Socket_DAVモジュールはまたCBの対応するビットをその時間にクリアする。CBが有効なlink_listブロックを含まないならば、データがそのソケットで利用可能であるが有効な転送ブロック情報がそのソケットに存在しないことをホストに通知するためにソケットに対して状態メッセージが発生される。この場合、ビットマップテーブルの対応するビットはまだクリアされていない。CBはこの場合にまた、link_listブロックに尋ねる状態メッセージをホストへ既に送出していることを知っていることまで更新されることができる。同じCBに対する多数の状態メッセージを送信しないので、このステップは必要である。有効なlink_listブロックが存在するならば、次のステップはCBおよび転送情報がDMA prepモジュールへ送信されることである。DMA prepモジュールはソケットデータバッファからデータを読取り、そのデータをDMAエンジンの2つのピンポン転送FIFOバッファ234のうちの一方へ転送するように動作する。このデータ転送が終了するとき、DMA prepモジュールは転送されるデータが存在するというリクエストを送信DMAエンジン235へ送信する。link_list情報はまた送信DMAエンジンに転送される。
送信DMAエンジンがDMA prepモジュールからリクエストを得るとき、送信DMAエンジンは主要なDMAエンジン236にホストへのDMA転送を行いたいことを通知する。バスを許可されたとき、DMAエンジンはデータをピンポンバッファから読出し、それらをホストコンピュータへ送信する。DMA転送が終了するとき、ソケットに対するCBは更新され、データがホストコンピュータへ送信されていることを示す状態メッセージが発生される。
状態メッセージ発生器237は状態メッセージを発生し、状態メッセージをメモリ(1Kバイト)の状態メッセージブロックへ書込むように動作するモジュールである。状態メッセージの発生リクエストは送信DMAエンジン、ソケットDAV問合せモジュール、またはCPUから来る。
[ソケット送信サブモジュール]
ソケット送信サブモジュールはIT19Gとデータ送信用のシステムとの間のインターフェースを処理する。図24はソケット送信フローを示している。
ソケット送信フローはホストからの命令ブロックリストの受取で開始する。コマンドブロックリストはDMA転送を介して受信され、コマンドリスト241へ位置される。ここからブロックは抽出され、コマンドパーサモジュール242により解析される。パーサにより理解されるコマンドが実行され、理解されないものはオンチッププロセッサへ転送される。
コマンドがデータを転送するならば、link_list情報がCBアドレスと共にコマンドブロックから抽出され、転送待ち行列243へ位置される。
受信DMAエンジン244はこの転送待ち行列のエントリを外し、ホストコンピュータメモリからのデータ転送を実行する。データは1対のピンポンFIFOバッファ245へ置かれる。丁度受信されたデータに関連するCBアドレスはソケットXmtデータ制御モジュール246へ転送される。
ソケットXmtデータ制御モジュールはピンポンFIFOバッファからデータを採取し、そのデータを送信ソケットデータメモリ248へ与える。ソケットXmtデータ制御モジュールはmalloctxメモリ割当て装置247からブロックアドレスを検索する。ソケットXmtデータ制御モジュールはまたソケットの優先順位レベルをソケットCBに問い合わせる。すべてのデータがデータバッファに転送されたとき、ソケットXmtデータ制御モジュールはCBアドレスを4つの内1つの優先順位待ち行列に与える。ソケットXmtデータ制御モジュールはまたソケットCBを新しいデータ送信カウント情報で更新する。
データがDMA受信FIFOバッファからソケットデータメモリへ転送されるとき、ランニングするチェックサムがそのときに行われる。チェックサムはブロック毎のベースで計算される。これは後でデータがその後再度読取られる必要がないときに送信待ち時間を減少することを助ける。
[CB LUT]
[概要]
TCP受信論理装置はオープンソケット接続を発見するためにLUTを使用する。LUTは18ビットによる128Kの深さである。
[CB LUTとDRAMのインターフェース]
このセクションはmiscmemモジュールとNS DDRアービトレーションモジュールとの間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングを詳細にしている。
[データフロー]
CB LUTはデータDRAMへの単一の読み書きのアクセスだけを行う。本発明の構成では、DRAMは外部であるが、メモリには代りにオンチップが設けられている。DRAMアクセスはDWORDにある。各LUTエントリは18ビットだけなので、DWORDの下部18ビットだけがCB LUTメモリインターフェースに送られる。
[TCP送信サブモジュール]
[概要]
TCP送信サブモジュールはデータ送信に対する次にサービスされるべきソケットを決定し、したがってソケットCBブロックを更新するように動作する。データフローは図25に示されている。
TCP送信データフローはソケット問合せモジュールで開始する。ソケット問合せモジュールはXMT_DAVビットテーブルを走査し、それらの送信データの有効なビットセットを有するエントリを探す。ソケット問合せモジュールが設定された送信データの有効なビットセットを発見したとき、ソケット問合せモジュールはそのエントリをソケットのUse_Priorityレベルにしたがって4つのうちの1つの待ち行列へ位置させる。優先順位レベル7または6を有するソケットは待ち行列リスト3に位置され、レベル5および4は待ち行列リスト2に位置され、レベル3および2は待ち行列リスト1に位置され、レベル1および0は待ち行列リスト0に位置される。
これらのリストはすべてパケットスケジューラ251に供給する。パケットスケジューラは欠亡のない方法で優先順位キューからパケットを外すように動作する。パケットスケジューラはまた送出データパケットと、半分開いたサポートモジュールから発生されたSYN_ACKおよびRSTパケットとの間で調停する。
パケットスケジューラが次に送出されるパケットを決定するとき、パケットスケジューラはこの情報をソケット送信ハンドラ252へ転送する。ソケット送信ハンドラモジュールはソケットCB情報を読取り、パケットヘッダを発生し、CBを更新し、パケット送信情報を送信待ち行列253へ送信する。すべてのパケットヘッダがその後データバッファへ事前にペンディングされる別々のメモリバッファで発生される。これはまた送信されるデータがデータバッファの中間で開始する場合にも適用される。この場合、パケットヘッダデータバッファからの点は送信されるデータの第1のバイトを指す。ロック機構はこのモジュールが別のモジュールが同時に動作できる同一のソケットCBを変更しないために使用される。
送信待ち行列はマスター送信アービトレータへ送信されるでパケットの待ち行列を形成するように動作する。
[パケットスケジューラ]
パケットスケジューラは次に送出されるパケットを決定するように動作する。1構成のこのモジュールのブロック図が図26に示されている。
パケットスケジューリングプロセスは比較装置260によって、現在の状態にある待ち行列番号を取り、その待ち行列中に送信されるものがあるか否かを検査することにより開始する。待ち行列番号は待ち行列リストまたはTCP RCVパケットの一方を表すことができる。待機しているそのタイプのパケットが存在するならば、そのエントリが引出され、次に送信されるパケットとしてスケジュールされる。その待ち行列にパケットが存在しないならば、状態カウンタがインクリメントされ、次の待ち行列の状態がチェックされる。これは待ち行列番号が、送信の準備がされているパケットを有する待ち行列リスト(またはTCP受信パケット)に一致するか、または状態エントリの最終ビットが設定されるまで継続する。最終ビットが設定されているならば、状態カウンタはゼロ(0)にリセットする。
待ち行列調停シーケンスはプログラム可能である。アプリケーションは最初にQueue_Stateレジスタを0×00に設定し、その後、待ち行列番号と最終ビットをQueue_Entryレジスタに書込むことにより待ち行列調停シーケンスを設定できる。Queue_Stateレジスタでフラットまたは急峻なビットを主張することにより設定されることができる2つの組込み式調停シーケンスが存在する。
[フラットシーケンス]
フラットシーケンスはスケジューラが任意のリセット後に使用するデフォルトシーケンス状態である。フラットシーケンスはまたTシーケンスレジスタにseq_progフィールドを書込むことにより01に設定される。シーケンスを以下に示されている。
3−2−3−2−3X−1−3−2−3−X−2−3−1−3−X−2−3−2−3−D−X<反復>
ここで、3、2、1および0はそれぞれ待ち行列リストであり、XはTCP受信論理装置からのパケットである。この方式では、各リストは以下の帯域幅割当てを有する。
Figure 2010063110
[急峻なシーケンス]
プログラムされたフラットシーケンスの代りのものは急峻なシーケンスである。急峻なシーケンスは高い優先順位の待ち行列にさらに加重し、多数の高い優先順位のアプリケーションが同時に行われる場合に便利である。急峻なシーケンスはTシーケンスレジスタにseq_progフィールドを書込むことにより10に設定される。急峻なシーケンスを以下のとおりである。
3−3−2−3−3−2−X−3−3−1−3−3−2−3−X−3−2−3−3−1−3−3−X−2−3−3−2−3−3−0−X
このシーケンスのパーセンテージ帯域幅を以下に示す。
Figure 2010063110
パケットスケジューラの使用は受信データトラフィックにしたがって、ハードウェアモジュールとリソースの共有を可能にする。
[ハッシュアルゴリズム]
使用されるハッシュアルゴリズムは単一の17ビットハッシュ値を形成するためにソケットのローカルおよびピアポートと、ローカルおよびピアIPアドレスとを結合する。ハッシュアルゴリズムは簡単であるように設計され、それによって単一のクロックサイクルの結果を生じ、同様にハッシュLUT衝突を最小にするのに十分な拡散スペクトルである。ハッシュの等式を以下示す。
LP=ローカルポート、
PP=ピアポート、
LI=ローカルIPアドレス、
PIP=ピアIPアドレス
Hash[16:0]={({LP[7:0],LP[15:8]^PP},1’b0)^{1’b0,((LIP[15:8]^LIP[7:0])^(PIP[15:8]^PIP[7:0]))};
以下はハッシュに対して実行されるステップである。
・ローカルポートのバイトはスワップされる。
・新しいバイトのスワップされたローカルポートは16ビットのポート積を形成するためにピアポートによりXOR処理される。
・ローカルIPアドレスのMSBはローカルIPアドレスとLSBでXOR演算処理される。
・ピアIPアドレスのMSBはピアIPアドレスのLSBでXOR演算処理される。
・2つのIPアドレス積はIPワード積を形成するためにXOR演算処理される。
・ポート積は1ビットだけ左にシフトされ、17ビット値を形成するために0で埋められる。
・IPワード積には17ビット積を形成するために先行する0が添付される。
・新しい17ビットポート積とIPワード積は最終的なハッシュ値を形成するためにXOR演算処理される。
このハッシュアルゴリズムは図27に示されている。
以下はハッシュアルゴリズムの一例である。
LP=1024、
PP=0080、
LI=45.C3.E0.19、
PIP=23.D2.3F.A1
ポート積=0×2410^0×0080=0×2490
IP積=(0×45C3^0×E019)^(0×23D2^0×3FA1)=0×A5DA^0×1C73=0×B9A9
最終的なハッシュ={0×2490,0}^{0,0×79A9}=0×04920^0×0B9A9=0×0F089
半分オープンの制御ブロックLUTでは、12ビットのハッシュが使用される。この12ビットのハッシュ値は以下のように前述の式から得られる。
ハッシュ12[11:0]=ハッシュ17[16:5]^ハッシュ17[11:0]
ここで、ハッシュ17は先に規定された式である。
[ISNアルゴリズム]
[動作理論]
IT10Gで使用されるISNアルゴリズムはRFC1948に記載されているアルゴリズムに類似しており、4マイクロ秒ベースのタイマ、ホストシステムにより設定可能なランダムブート値、4つのソケットパラメータ(ポートおよびIPアドレス)を有している。関数は以下の形態を有する。
ISN=タイマ+F(boot_value,src_jp,dest_ip,src_port,dest_port)
ここでタイマは4マイクロ秒ベースの32ビットアップカウンタである。F()関数は関数FC()に基づいており、以下のように規定される。
FC(hv32,data32)= [(prev32<<B)^(prev32>>7)]^data32
最初に、hv32の値はシステム(ホストコンピュータ)からのランダムboot_valueに設定される。その後、リクエストされる各ISNに対して、hv32は以下のように計算される。
hv32=FC(prev32、src_ip)
hv32=FC(prev32、dest_ip)v
hv32=FC(prev32、{src_port,dest_port})
アルゴリズム全体のブロック図が図28に示されている。
現在のアーキテクチャはISNを計算するために4クロックサイクルを取る。第1のサイクルでは、ソースIPアドレス(src_ip)はhv32を発生するためにフィードスルーされる。第2のクロックサイクルでは、目的地IPアドレスがフィードスルーされ、第3のクロックサイクルでは、ポート情報がフィードスルーされる。第4のクロックサイクルは最終的な関数値にインクリメントするタイマ値を付加するために使用される。レジスタAとレジスタBは第4のクロックサイクルでクロックされないことにも注意する。
[テストモード]
ISN試験モードはISNを診断目的で所定の番号に設定する1方法として与えられている。このテストモードは以下のように使用される。
0×00を0×1A06に書込む(TCP TX読取インデックスレジスタ)、
ISNのビット[7:0]を0×1A07に書込む、
0×01を0×1A06に書込む、
ISNのビット[15:8]を0×1A07に書込む、
0×02を0×1A06に書込む、
ISNのビット[23:16]を0×1A07に書込む、
0×03を0×1A06に書込む、
ISNのビット[31:24]を0×1A07に書込む、
0×04を0×1A06に書込む、
任意の値を0×1A07に書込む(テストモードを使用可能にする)。
前述のステップ#10での書込みはISNテストモードを使用可能にする。今特定されたISNは次回にISNがリクエストされるときに使用される。テストモードをクリアするために、0×05を0×1A06に書込み、任意の値を0×1A07に書込む。
[ソケット制御ブロック構造]
[概要]
ソケット制御ブロックまたはCBは各ソケットに対する動作情報を含んでおり、CBメモリスペース中に存在する。CBはすべての状態情報、メモリポインタ、構成設定、ソケットに対するタイマ設定を含んでいる。これらのパラメータは種々のTCPサブモジュールにより更新されることができる。ロック機構は一度にただ1つだけのサブモジュールがソケットCBを変更できることを確実にする。IT10Gは半分オープン状態、設定された状態、閉じた状態であるソケットに対する異なるCB構造を使用する。
[設定されたソケットの主要なTCP/UDP CB構造]
以下のテーブルは設定されたソケットのメモリの主要なTCP/UDP CB構造におけるすべてのフィールドをリストしている。また、以下に規定される付随TCP CB構造も存在する。
Figure 2010063110
[設定されたソケットの主要なCBフィールド規定]
[遠隔IPアドレス(アドレス0×00、32ビット)]
この32ビットフィールドは接続のための遠隔IPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはSYNパケットで受信されるIPアドレスまたは受信されたUDPパケットのIPアドレスにより埋められる。
[遠隔ポート(アドレス0×01 [31:16]、16ビット)]
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットでは、このフィールドは常にアプリケーションによって特定される。サーバソケットでは、このフィールドは常にSYNまたはUDPパケットで受信されるポート番号で埋められる。
[ローカルポート(アドレス0×01 [15:0]、16ビット)]
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
[IPインデックス(アドレス0×02[31:28]、4ビット)]
このフィールドはソケットに対するホストインターフェースのIPアドレスのネットワークスタックIPアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより埋められる。
[ConnState(アドレス0×02[27:24]、4ビット)]
このフィールドは接続の現在状態を示し、以下のように復号する。
Figure 2010063110
[AX(アドレス0×02[23]、1ビット)]
このビットは受信されたACK状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するACKが受信されたとき、状態メッセージが発生される。このモードはNagleアルゴリズムと共に使用される。
[SA(アドレス0×02[22]、1ビット)]
このビットは選択的なACKオプション(SACK)がこのソケットと共に使用されるべきであることを示している(0=SACKを使用してはならない、1=SACKを使用しなさい)。
[TS(アドレス0×02[21]、1ビット)]
このビットはタイムスタンプオプションがこのソケットにより使用されるべきであることを示している(0=タイムスタンプオプションを使用してはならない、1=タイムスタンプオプションを使用しなさい)。
[WS(アドレス0×02[20]、1ビット)]
このフラグはスライディングウィンドウオプションがTCPソケットに対して適切に交渉されていることを示している(0=WSオプションを使用してはならない、1=WSオプションが使用可能になる)。このビットはUDPソケットでは使用されない。
[ZW(アドレス0×02[19]、1ビット)]
このビットはソケットのピアウィンドウが0×0000であり、ソケットがゼロのウィンドウプローブ状態にあることを示している。
[AR(アドレス0×02[18]、1ビット)]
このビットはACKパケットが特定のソケットで送信されるときに設定される。これはACKパケットが送信されるときにクリアされる。
[CF(アドレス0×02[17]、1ビット)]
このビットは現在のCBが受信・送信FIFOバッファ待ち行列中にあり、したがって減少されることができないことを示している。一度、ソケットに対するACKが送信されると、TCP送信ブロックはOpen CBからTime_Wait CBへ移動する。
[CV(アドレス0×02[16]、1ビット)]
このビットはCBが有効な情報を含んでいることを示している。任意のCBの減少前に、このビットは常にクリアされる。
[RD(アドレス0×02[15]、1ビット)]
このビットはCB再送信時間が満了したが、優先順位待ち行列が一杯であるために再送信のために待ち行列されることができないことを示している。CBポーラがCBで主張されているこのビットを発見するとき、これは再送信時間フィールドを無視し、再送信のためにCBを処理する。このビットはCBが優先順位送信待ち行列に入ったときにクリアされる。
[CBVer(アドレス0×02[14:12]、3ビット)]
これらのビットはCBのバージョンを示し、主にオンチッププロセッサにより使用され、それによって将来のハードウェアバージョンのCBのタイプを区別できる。このフィールドは0×1として現在規定されている。
[CBインターフェース(アドレス0×02[11:8]、4ビット)]
これらのビットはソケットの特定の物理的インターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィールドは0×0で残されるべきである。
[SY(アドレス0×02[7]、1ビット)]
これらのビットはTW状態にありながら、ソケットがSYNパケットを受信したことを示している。このビットが設定され、その後ソケットでRSTを受信し、kill_tw_modeが0×00に設定されるならば、CBは直ぐに無視される。
[ST(アドレス0×02[6]、1ビット)]
このビットはTXの左および右のSACKフィールドが有効であることを示している。TCP受信論理装置が受信されたデータの穴に気づいたとき、TCP受信論理装置は穴の開始および終了アドレスをTXの左および右SACKフィールドへ位置させ、次に送信されるパケットがSACKオプションを含むべきであることを示すためにこのビットを設定する。これらのパラメータを含んだパケットが送信されるとき、このビットはクリアされる。
[SR(アドレス0×02[5]、1ビット)]
このビットはRXの左および右のSACKフィールドが有効であることを示している。TCP受信論理装置がSACKオプションを受信したとき、TCP受信論理装置はSACK値の第1の対をRXの左および右SACKフィールドへ位置させ、このセクションが再送信される必要があることをTCP送信機に示すためにこのビットを設定する。セクションが再送信されるとき、このビットはクリアされる。
[KA(アドレス0×02[4]、1ビット)]
TCPソケットでは、このビットはキープアライブタイマがこのソケットを使用されるべきであることを示している(0=キープアライブタイマを使用してはならない、1=キープアライブタイマを使用しなさい)。UDPソケットでは、このビットはチェックサムがチェックされるべきであるか否かを示している(1=チェックサムを使用可能にする、0=チェックサムを無視する)。
[DF(アドレス0×02[3]、1ビット)]
このビットはソケットに対するIPヘッダのDFビットの状態を表している。このビットが設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスMTU発見のために使用される。
[VL(アドレス0×02[2]、1ビット)]
このビットはVLANタグが出力するイーサネット(登録商標)フレームに含まれるか否かを示している。このビットが主張されるならば、VLANタグ情報の4バイトはcb_tx_vian_priorityと、cb_tx_vidにより作られ、VLANタグ識別(固定された値)は後続するイーサネット(登録商標)アドレスフィールドに含まれる。
[RE(アドレス0×02[1]、1ビット、TCP CB)]
このフラグはタイムアウト状態と、再送信が必要とされることを示すために使用される。データが再送信されるときにクリアされる。このビットはTCP CB用にのみ規定される。
[UP(アドレス0×02[1]、1ビット、UDP CB)]
このフラグはUDPポートがダイナミックに割当てられるか予め特定されているかを示すために使用される。ダイナミックに割当てられるならば、CBがデプリケートされるときに割当てを解除される。そうでなく予め特定されるならば、CBがデプリケートされるときポートアクションは行われない。このビットはUDP CBに対してのみ規定される。
[AD(アドレス0×02[0]、1ビット)]
このビットはソケットでの遅延されたACK送信でACKが待ち行列されることを示している。このビットはTCP RX論理装置で設定され、ACKが送信のためにCBポーラにより待ち行列されるときにクリアされる。
[TX ACK番号(アドレス0×03,32ビット)]
これはTCP接続の動作ACK番号である。これは受信されたTCP PSHパケットの予測されるSEQ番号を表している。TCPデータパケットが受信されるとき、SYN番号はこの番号に対してチェックされる。一致するか、受信されたSEQ番号+パケットの長さがこの番号をカバーするならば、データは受入れられる。この番号はネットワークスタックにより自動的に更新され、UDP接続に使用されない。
[SEQ番号(アドレス0×4,32ビット)]
これはTCP接続の動作SEQ番号である。これはTCPパケットで使用されるSEQ番号を表しており、ネットワークスタックにより自動的に更新される。このフィールドはUDP接続に使用されない。
[キープアライブ時間0×05[31:24]、8ビット]
このフィールドはキープアライブトリガーが主張されるときの将来の時間を表している。この時間はパケットがソケットで送信される毎に、または純粋なACKパケットが受信される毎にリセットされる。その時間はここでは分の単位で表される。
[LWinスケール(アドレス0×05[23:20]、4ビット)]
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効値は0×00から0×0Eである。
[RWinスケール(アドレス0×05[19:16]、4ビット)]
このフィールドはTCP SYNパケット中の遠隔端によりリクエストされるときのスライディングウィンドウスケールファクタを表している。有効値は0×00から0×0Eである。
[遠隔MSS(アドレス0×05[15:0]、16ビット)]
このフィールドはTCP接続のためのSYNパケットで受信されたMSSを表している。これは遠隔端部が受けることができる最大のパケットサイズを示している。MSSオプションが受信されないならば、このフィールドは536(0×0218)にデフォルトされる。このフィールドはUDP接続に使用されない。
[PA(アドレス0×06[31]、1ビット)]
このビットはCBのポートが自動割当てされたことを示すために使用される。このビットが設定されるならば、CBをデプリケートするときが来ると、このビットはポートが割当てを解除される必要があるか否かを検査される。
[優先順位(アドレス0×06[30:28]、3ビット)]
このフィールドはVLANタグに使用されるユーザの優先順位レベルを表している。このフィールドはまた送信スケジュール中のソケットのサービスレベルを表している。番号の数が高い程、優先順位は高くなる(7が最高で、0が最低)。このフィールドのデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
[VID(アドレス0×06[27:16]、12ビット)]
このフィールドはVLAGタグフレームで使用されるVLAG識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定されることができる。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受けられるVIDにより設定される。
[遠隔MACアドレス(アドレス0×06[15:0]−0×07,全部で48ビット)]
このフィールドはこのソケットで送信されているパケットの目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスで問合せられる。これが解決された後、アドレスはここに記憶され、さらにARPキャッシュの問合せは避けられる。CBがサーバソケットとして生成されるならば、このアドレスはSYNソケットに含まれる目的地MACアドレスから取られる。アドレスのビット[47:32]はCBアドレス0×6に記憶される。
[ローカルIPアドレス(アドレス0×08,32ビット)]
このフィールドはソケット接続に対するローカルIPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより特定される。サーバソケットでは、このフィールドはCBが半開きから開いた状態まで転移されるときに満杯にされる。
[RX ACK番号(アドレス0×09、32ビット)]
このフィールドはこのソケットに対してピアから受信された最近のACK番号を表している。これは任意の再試行がソケットで必要とされるか否かを決定するために使用される。これは送信されたパケットで使用されるシーケンス番号とは異なる番号であることに注意すべきである。
[混雑ウィンドウ(cwnd)(アドレス0×0A[31:0]、32ビット)]
このフィールドはcwndパラメータを追跡する。cwndパラメータは混雑の回避およびスロースタートアルゴリズムで使用され、1MSSに初期化される。
[HA(ホストACK)(アドレス0×0B[31]、1ビット)]
このビットはホスト_ACKモードがこのソケットでアクチブであることを示している。このモードでは、データACKはホストによりトリガーされ、データが受信されるときに自動的に送信されない。
[SS(送信されるRX DAV状態)(アドレス0×0B[30]、1ビット)]
このビットはCBに対するRX DAV状態メッセージがオンチッププロセッサに送信されたことを示している。ビットはデータがホストにDMAされたときをクリアする。
[ソケットタイプ(アドレス0×0B[29:27]、3ビット)]
このフィールドは以下の表にしたがって制御ブロックにより表されるソケットのタイプを示している。
Figure 2010063110
示されていないすべての他の復号は将来使用するために保留されている。UDPの生のモードでは、アプリケーションにはUDPデータと共に遠隔IPアドレスおよびUDPヘッダ情報が与えられている。UDPの正常モードでは、データ部分だけがアプリケーションに与えられる。
[MI(アドレス0×0B[26]、1ビット)]
このビットはデータが現在、ソケット受信メモリブロック中に存在しないことを示すために使用される。
[RX終了メモリブロックポインタ(アドレス0×0B[25:0]、26ビット)]
このフィールドは受信データが書込まれた最後のMRXバッファのアドレスを表している。これはソケットに使用される次のメモリブロックをリンクするために使用される。
[RX開始メモリブロックポインタ(アドレス0×0C[25:0]、26ビット)]
このフィールドはホストに送信される次のMRXバッファのアドレスを表している。
[HD(アドレス0×0C[26]、1ビット)]
このビットはホストへDMAされるデータが残留し、RX DMA状態メッセージがまだ送信されていないことを示している。TCP RX論理装置はRX DMA動作をスケジュールするときにこのビットを設定し、RX DMAの行われた状態メッセージをリクエストするときにTCP RX論理装置によりクリアされる。このビットはFIN対状態メッセージタイミング発行を容易にすることに使用されている。
[ISPECモード(アドレス0×0C[30:27]、4ビット)]
これらのビットはこのソケット接続で送信されたパケットで可能にされるIPSECモードを示している。復号を以下の表で示されている。
Figure 2010063110
設定されるビットがないならば、ソケットで使用されるIPSECはない。
[AB(ACK Req ペンディング)(アドレス0×0C[31]、1ビット)]
このビットはTCP受信論理装置からTCP送信論理装置へのACKリクエストが保留中であることを示している。それはTCPデータパケットが受信されるときに設定され、データのACKが送信されるときにクリアされる。このビットが依然として設定されながら別のデータパケットが受信されるならば、別のACKがリクエストされないで、受信されたACK数が更新される。
[HR(ホスト再送信ソケット)(アドレス0×0D[30]、1ビット)]
このビットはこのソケットがiSCSIアプリケーションであることを示している。
[AS(アドレス0×0D[30]、1ビット)]
このビットはこのソケットがオンチッププロセッサソケットアプリケーションであることを示している。
[DA(アドレス0×0D[29]、1ビット)]
このビットは重複ACKのために再送信を行ったことを示している。これは再送信されたパケットが送信されるときに設定される。受信されたACKポインタを進めるACKを獲得するときクリアされる。重複ACK再送信後、新しいデータに対するACKを得るとき、cwnd=ssthresh(高速度回復アルゴリズムの一部)を設定する。このビットはワード0×14でDSビットと共に使用される。失われたセグメントの再送信は一度だけ行われるので2つのビットを必要とする。
[R0(アドレス0×0D[28]、1ビット)]
このビットは再送信時間フィールドが有効(0=無効、1=有効)であることを示している。
[RV(アドレス0×0D[27]、1ビット)]
このビットは再送信時間フィールドが有効(0=無効、1=有効)であることを示している。
[TP(アドレス0×0D[26]、1ビット)]
このビットは時間を定められたパケットが現在経過中であることを示している。RTOオプションが使用可能にならない場合のみ使用される。
[次のTXメモリブロックポインタ(アドレス0×0D[25:0]、26ビット)]
このフィールドは送信される次のMTXバッファのアドレスを表している。
[MSS_S(2ビット,ワード0×0E[31:30])]
これらのビットはSYNパケットで使用されるMSSサイズを特定するために使用される。有効な設定を以下示す。
Figure 2010063110
[シリーウィンドウサイズ(アドレス0×0E[29:0]、30ビット)]
このフィールドはTCP RXハードウェアにより追跡されるときの動作ウィンドウサイズを表している。このウィンドウは実際のウィンドウサイズを維持し、MSSよりも大きいときのみ実際のウィンドウに転送される。
[RX DMAカウント(アドレス0×0F[31:16]、アドレス0×12[31:24]24ビット)]
このフィールドは最後のRX DMA状態メッセージ移行にRX DMAを介してホストへ送信されるバイト数を表している。カウントのMSBはアドレス0×12に記憶される。
[ホストバッファオフセットポインタ(アドレス0×0F[15:0]、16ビット)]
このフィールドはRX DMAが使用されている現在のホストメモリバッファへのオフセットを表している。
[ウィンドウクランプ(アドレス0×10[31:0]、32ビット)]
このフィールドはソケット接続で可能にされた最大の広告されたウィンドウを表している。
[RXリンクリストアドレス(アドレス0×11[31:0]、32ビット)]
これはRX DMA動作に使用されるRXリンクリストのオンチッププロセッサメモリアドレスである。
[RX送信限度(アドレス0×12[15:0]、16ビット)]
これはRX DMA転送の転送限度である。RX DMA状態メッセージはこの限度に到達されると発生される。各DMA転送後に状態メッセージを必要とするCBに対しては、この限度は0×0001に設定されるべきである。
[RXリンクリストエントリ(アドレス0×12[23:16]、8ビット)]
これはRX DMAリンクリストのエントリ数である。
[K(キープアライブトリガーされた)(アドレス0×13[31]、1ビット)]
このビットは現在のCBがキープアライブ状態にあることを示すために使用される。このビットはキープアライブタイマがCBで満了するときに設定され、キーブアライブが他の側がなくなった(消滅した)ことを発見したためにCBが割当てを解除されるとき、またはキープアライブプローブ(ACKパケット)に対する応答を受信するときにTCP−RXによりクリアされる。
[DupAck(アドレス0×13[30:28]、3ビット)]
このフィールドは重複されたACKがいくつ受信されたかを追跡する。このパラメータは高速再送信アルゴリズムに使用される。
[再試行/プローブ(アドレス0×13[27:24]、4ビット)]
このフィールドは特定のパケットに対して送出される再試行数を追跡する。これはまた送信されたウィンドウプローブの数の追跡を維持するために使用される。後者の数は適切なウィンドウのプローブ送信インターバルが使用されることができるために必要とされる。
[利用可能なTXデータ(アドレス0×13[23:0]、24ビット)]
このフィールドはソケットで送信されるのに利用可能なデータの総量を表している。
[ソケットチャンネル番号(アドレス0×14[31:24]、8ビット)]
これはソケットチャンネルの番号である。状態メッセージがホストに返送されるとき、このチャンネルは使用される待ち行列を特定する。
[SX(アドレス0×14[23]、1ビット)]
このビットはSACK再送信が必要であることを示している。これはSACK再送信が送出されるときに再送信モジュールにより設定されクリアされる。
[FX(アドレス0×14[23]、1ビット)]
このビットはFINパケットがこのソケットで送出されていることを示している。これはTCP TX論理装置により設定される。
[DA(アドレス0×14[19]、1ビット)]
このビットはソケットが重複ACK状態にあることを示している。このビットは重複ACK閾値に到達するときに設定される。ピアACKが新しいデータのときにクリアされる。
[UM(アドレス0×14[18]、1ビット)]
このビットはピアの広告されたウィンドウがMSSの2倍を超えたことを示している。このビットが設定されるならば、データはMSSサイズの最大でMTXに記憶される。ビットが設定されないならば、データはMSSの4分の1の最大で記憶される。
[UC(アドレス0×14[17]、1ビット)]
このビットは次のCBリンクフィールドの制御ブロックのタイプがUDP CBであることを示している。
[TW(アドレス0×14[16]、1ビット)]
このビットは次のCBリンクフィールドの制御ブロックのタイプがTW CBであることを示している。
[次のCBリンク(アドレス0×14[15:0]、16ビット)]
このフィールドは次にリンクされたCBのCBメモリアドレスを表している。このCBはこのソケットと同一のハッシュ値を有する。VSOCKサブモジュールはこれがCBを同じハッシュ値に連結するときにこのフィールドを満たす。
[RXウィンドウサイズ(アドレス0×15[31:16]、16ビット)]
このフィールドはスライディングウィンドウスケールファクタにより調節されない遠隔端部の広告されたウィンドウを表している。
[IP TTL(アドレス0×15[15:8]、8ビット)]
このフィールドはソケットのIPヘッダで使用されるTTLを表している。
[IP TOS(アドレス0×15[7:0]、8ビット)]
このフィールドはソケット接続のためにIPヘッダで使用されるTOSフィールド設定を表している。これはアプリケーションにより設定されることができる随意選択的なパラメータである。TOSパラメータが特定されないならば、このフィールドは0×00にデフォルトする。
[RXタイムスタンプ/時間を定められたシーケンス番号(アドレス0×16、32ビット)]
一度に1つのセグメントをタイミングを定めるとき、このフィールドは時間を定められたパケットのシーケンス番号を記憶するために使用される。このシーケンス番号をカバーするACKが受信されるとき、RTTはそのパケットに対して得られることができる。このパケットが送信されたときのタイムスタンプは最後の送信フィールドのローカルタイムスタンプ中に記憶される。タイムスタンプオプションが使用可能になるとき、このフィールドはTCPパケットで受信されるタイムスタンプを記憶するために使用される。
[平滑な平均導出(アドレス0×17、32ビット)]
このフィールドはRFC793に特定されたファンヤコブソンアルゴリズムを使用して計算されるような往復時間測定の平滑化された平均導出を表している。
[スロースタート閾値(ssthresh)(アドレス0×18、32ビット)]
このフィールドはssthreshパラメータを追跡する。ssthreshパラメータは混雑回避アルゴリズムに対して使用され、0×0000FFFFに初期化される。
[平滑なRTT(アドレス0×19、32ビット)]
このフィールドはRFC793中で特定されたファンヤコブソンアルゴリズムを使用して計算されるような平滑化された往復時間値を表している。
[再送信タイムスタンプ(アドレス0×1B、16ビット)]
このフィールドは再送信がソケットで必要とされるときの将来の時間を表すために使用されている。
[TX左SACK(アドレス0×1C、32ビット)]
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第1のアイランドの第1のバイトのシーケンス番号(最低のシーケンス番号)を表している。
[TX右SACK(アドレス0×1D、32ビット)]
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第1のアイランドの最後のバイトのシーケンス番号(最高のシーケンス番号)に1を足した数を表している。
[RX左SACK(アドレス0×1E、32ビット)]
このフィールドは受信されたパケットのSACKオプションにより報告されたシーケンス外データの第1のアイランドの第1のバイトのシーケンス番号を表している。
[RX右SACK(アドレス0×1F、32ビット)]
このフィールドは受信されたパケットのSACKオプションにより報告されたシーケンス外データの第1のアイランドの最後のバイトのシーケンス番号に1を足した数を表している。
[設定されたソケット添付CB構造]]
以下の表は設定されたソケットのメモリの添付CB構造のすべてのフィールドをリストしている。
Figure 2010063110
[設定されたソケット添付CBフィールド定義]
[RX左SACKメモリアドレス(アドレス0×0[23:0]、24ビット)]
このフィールドはSACKアイランドのブロックのリンクされたリストの第1のMRXメモリブロックの第1のアドレスを表している。
[RX右SACKメモリアドレス(アドレス0×1[23:0]、24ビット)]
このフィールドはSACKアイランドのブロックのリンクされたリストの最後のMRXメモリブロックの第1のアドレスを表している。
[SACKブロックカウント(アドレス0×0−0×1[31:24]、16ビット)]
このフィールドはソケットにより使用されるメモリブロック数を表している。
[書込まれたRXバイト(アドレス0×2−0×3、64ビット)]
このフィールドはソケットのMRSメモリに書込まれるバイトの総数を表している。最下位桁ワードはアドレス0×2に記憶され、最上位桁ワードはアドレス0×3に記憶される。
[送信されたTXバイト(アドレス0×4−0×5、64ビット)]
このフィールドはソケットで送信されるバイトの総数を表している。最下位桁ワードはアドレス0×4に記憶され、最上位桁ワードはアドレス0×5に記憶される。
[iS(アドレス0×6[31]、1ビット)]
このビットはCBがiCSIソケットとして使用されていることを示している。
[MD(アドレス0×6[30]、1ビット)]
このビットはCBが受信されたバッファリストに対するMDLを使用していることを示している。
[DS(アドレス0×6[29]、1ビット)]
このビットはソケットで重複したACKを受信したことを示している。これは重複のACKを処理する論理装置により設定される。重複のACKが受信され、このビットが既に設定されるならば、失われたセグメントは再送信されない。これは主要なオープンCB構造のワード0×0DのDAビットと共に使用される。これらの2つのビットの状態テーブルを以下に示す。
Figure 2010063110
[更新されないiSCSIシード(IN)(アドレス0×6[28]、1ビット)]
このビットはiSCSIメモリブロックが処理されるときにdavscanモジュールにより設定され、そのブロックのシードが保存されるときにクリアされる。ビットはハードウェアによってCRCシードのローカルコピーが更新されていないことをホストに示すように主張される。ホストがCRCシードをリセットしたいとき、このビットを最初にプローブする必要がある。ビットが主張されるならば、ソケットにSeed_Clrd_by_Hostビットを設定する必要がある。CRCシードのローカルコピーをホストにより書かれた新しい値で更新するときに、ハードウェアはこのビットをクリアする。
[ホストによりクリアされた(CH)iSCSIシード(アドレス0×6[27]、1ビット)]
このビットは新しい値をCB ANDのCBのiSCSIシードに書込むときにホストにより設定され、INビットが設定される。davscanモジュールはこのビットが設定されることを観察するとき、iSCSIシードとCBのこのビットをクリアする。
[MDL転送長(アドレス0×6[15:0]、16ビット)]
このフィールドはMDL DMA転送がどの程度の長さであるべきかを示すために使用される。通常、RX_MDL IBを発生したRX_DAV状態メッセージで報告されたのと同じ長さである。
[IPSECハッシュ(アドレス0×7[31:0]、31ビット)]
このフィールドはソケットの接続で使用されるすべてのSAエントリのハッシュ値を表している。
[最後の未承認シーケンス番号(アドレス0×8、32ビット)]
このフィールドはピアからの、最後の未承認されたシーケンス番号を表している。この相対は計算を記憶するためタイムスタンプで使用される。
[iSCSI FIMインターバル(アドレス0×9[31:16]、16ビット)]
このフィールドはiSCSI接続のためのFIMインターバルを表している。これはバイト数として記憶される。
[iSCSI FIMオフセット(アドレス0×9[15:0]、16ビット)]
このフィールドは次のFIM挿入までのバイト数を表している。
[iSCSI CRCシード(アドレス0×A、32ビット)]
このフィールドは受信されたiSCSIデータのCRCシードを表している。
[IPSECオーバーヘッド(アドレス0×B[7:0]、8ビット)]
このフィールドはIPSECヘッダ(および過剰なIPヘッダ)が1つのパケットで占める二重ワード数(4バイト)に関するオーバーヘッドを表している。この情報はパケットに置かれることができるデータ量を決定するときに使用される。
[iSCSI FIMエネーブル [FE](アドレス0×B[8]、1ビット)]
このビットはFIMサポートがCBで必要とされるか否かを示す(0=FMディスエーブル、1=FIMエネーブル)。
[MRXバッファ(アドレス0×B[31:16]、16ビット)]
このフィールドはソケットにより現在使用されているMRXバッファの数を表している。この数がMRXバッファ限度(全般的な設定)に到達するとき、これ以上データパケットはソケットで受けられない。
[DAVバッファ長(アドレス0×C[15:0]、16ビット)]
このフィールドはDAV状態メッセージに対して使用されるバッファ長を示している。
[RX送信FIN状態メッセージ[SM](アドレス0×C[16]、1ビット)]
このビットはRX FIN受信状態メッセージがCBで送信されるべきであることを示している。
[RX送信DAV状態メッセージ[SV](アドレス0×C[17]、1ビット)]
このビットはRX DAV状態メッセージがCBに対して送信されるべきことを示している。
[RX DMA状態メッセージのペンディング[DP](アドレス0×C[18]、1ビット)]
このビットはRX DMAが行った状態メッセージがCBでペンディング中であることを示している。
[最後のDMA[LD](アドレス0×C[19]、1ビット)]
このビットはホストバッファセグメントの最後のDMAが送信されていることを示している。このDMAの完了時、RX DMA状態メッセージが発生される。
[FIN状態メッセージのペンディング[FP](アドレス0×C[20]、1ビット)]
このビットはFIN状態メッセージがペンディングであることを示している。これはMRXメモリにデータが残留するが現在進行中のDMAがないときに設定される。これはDMAがスタートし、SVビットが設定するときにクリアされる。
[リセットペンディング[RP](アドレス0×C[21]、1ビット)]
このビットはリセット状態メッセージがペンディングであり、RX DMA状態メッセージ後に送信されるべきであることを示している。これはMRXメモリにデータが残留するが現在進行中のDMAがないときに設定される。これはDMAが開始し、SVビットが設定するときにクリアされる。
[送信リセットメッセージ[RM](アドレス0×C[22]、1ビット)]
このビットはRSTパケットが受信され、tcprxstaとdavscanモジュール間でのみ使用される。
[TWへのオープン[OT](アドレス0×C[23]、1ビット)]
このビットはソケットが待機時間状態に転移され、待機時間転送プロセスへのオープンが完了されたことを示す。このビットはdavscanにより設定され、rxcbupd.vにより読取られる。
[ゼロウィンドウタイムスタンプ(アドレス0×C[31:24]、16ビット)]
このフィールドは次のゼロウィンドウプローブを送信する将来のタイムスタンプを示している。
[TXトンネルAHハンドル(アドレス0×D[15:0]、16ビット)]
このフィールドはソケットに関連するTXトンネルAH SA(セキュリティ関連)ハンドルを表している。
[TXトンネルESPハンドル(アドレス0×D[31:16]、16ビット)]
このフィールドはソケットに関連するTXトンネルAH ESP SA(セキュリティ関連)を表している。
[TX転送AHハンドル(アドレス0×E[15:0]、16ビット)]
このフィールドはソケットに関連するTX転送AH SA(セキュリティ関連)ハンドルを表している。
[TX転送ESPハンドル(アドレス0×E[31:16]、16ビット)]
このフィールドはソケットに関連するTX転送ESP SA(セキュリティ関連)を表している。
[iSCSIバイト0−1−2(アドレス0×F[23:0]、各8ビット)]
これらのバイトはiSCSI CRC計算の非整列バイトを表している。
[SBVal(アドレス0×F[25:24]、2ビット)]
このフィールドは有効であるiSCSIバイト[2:0]を示すために使用される。
[Max RXウィンドウ(アドレス0×10[15:0]、16ビット)]
このフィールドはピアにより広告された最大のウィンドウを表している。これはMTXデータパッキング限度で使用されるパラメータを決定するために使用される。
[ローカルMSS(アドレス0×10[31:16]、16ビット)]
このフィールドはSYNまたはSYN/ACKパケットで使用されるローカルMSS値を表している。これはウィンドウサイズの調節に使用される。
[最後のCWND更新(アドレス0×11[31:16]、16ビット)]
このフィールドはcwndが更新された最後のタイムスタンプを表し、この情報はそれがssthreshよりも大きいときにcwndを増加するために使用される。
[DMA ID(アドレス0×12[3:0]、4ビット)]
このフィールドはCBに対するDMA IDを表している。このフィールドはTCP TX DMAがリクエストされる毎にインクリメントされる。xmtcbwrモジュールがDMA転送のパッキングを終了したとき、MDA IDがCBにあるものと一致するならば、DMA_Pendingビットは(xmtcbwrにより)クリアされる。
[DMAペンディング(アドレス0×12[4]、1ビット)]
このフィールドはTX DMAがこのソケットでペンディングであることを示している。このビットはTX DMAをリクエストするときにsockregsにより設定され、TX DMA IDが丁度、CBのTX_DMAに一致するときにxmtcbwr.vによりクリアされる。
[結合されたCB構造]
CBメモリでは、ソケットCBは1つの連続したメモリブロックとして記憶される。フォーマットを以下の表で示す。
Figure 2010063110
[半分開かれたソケットの主要なCB構造]
以下の表は、半分開かれたソケットのメモリの主要なCB構造を規定している。
Figure 2010063110
[半分開かれたソケットの主要なCBフィールドの定義]
[遠隔IPアドレス(32ビット、ワード0×0[31:0])]
これは接続の遠隔端部のIPアドレスである。IPアドレスのビット[31:16]はワード0×0に記憶され、ビット[15:0]はワード0×1に記憶される。
[遠隔ポート(16ビット、ワード0×0[47:32])]
これは接続の遠隔端部のポートアドレスである。
[ローカルポート(16ビット、ワード0×0[63:48])]
これは接続のローカル端部のポートアドレスである。
[ローカルIPインデックス(4ビット、ワード0×1[15:12])]
これはこの接続に使用されるローカルIPアドレスのインデックスである。この値はIPモジュールによって完全なIPアドレスおよび対応するMACアドレスへ解かれる。
[接続状態(4ビット、ワード0×1[11:8])]
これは接続の現在の状態であり、以下のように復号される。
Figure 2010063110
[RxACK(1ビット、ワード0×1[7])]
このビットはRX ACK状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するACKが受信されるとき、状態メッセージが発生される。
[SACK(1ビット、ワード0×1[6])]
このビットは遠隔端部がそのSYNパケットでSACKオプションを送信したことを示している。
[RxTS(1ビット、ワード0×1[5])]
このビットは遠隔端部がタイムスタンプオプションを送信し、受信されたタイムスタンプフィールドが半分開かれた添付制御ブロックで有効であることを示している。
[WinSc(1ビット、ワード0×1[4])]
このビットは遠隔端部がウィンドウスケールオプションを送信したことを示している。
[RxMSS(1ビット、ワード0×1[3])]
このビットは遠隔端部がMSSオプションを送信し、遠隔MSSフィールドが有効であることを示している。
[ACKRq(1ビット、ワード0×1[2])]
このビットはACKがこのソケットに対してリクエストされることを示している。これは設定制御ブロックで類似のビットが重複しているが、ここでは使用されないことを意味している。
[CBinFF(1ビット、ワード0×1[1])]
このビットはこのCBがRxからTXへのFF待ち行列にあるが故に、まだ消滅されることができないことを示している。
[CBVal(1ビット、ワード0×1[0])]
このビットは半分開かれたCBが有効であることを示している。
[CBバージョン(4ビット、ワード0×1[31:28])]
これらのビットはCBのバージョンを示している。このフィールドは現在0×1に規定されている。
[TXインターフェース(4ビット、ワード0×1[27:24])]
これらのビットは発信するSYNが来るインターフェースを示している。
[IPSEC(1ビット、ワード0×1[23])]
このビットはHO CBがIPSEC保護されたパケットで使用されていることを示している。この場合、このHO CBに一致しない受信されたSYNが破棄される。
[MSSサイズ(2ビット、ワード0×1[22:21])]
これらのビットはSYN/ACKパケットで使用されるMSSサイズを特定するために使用される。有効な設定を以下示す。
Figure 2010063110
[KA(1ビット、ワード0×1[20])]
このビットはキープアライブタイマがこのソケットで使用されるべきであることを示している。
[DF(1ビット、ワード0×1[19])]
このビットはIPヘッダの断片化されてはならないビットを特定するために使用される。
[VLANV(1ビット、ワード0×1[18])]
このビットはVLANフィールドが有効であることを示している。
[再送信(1ビット、ワード0×1[17])]
このビットは再送信がこのソケットで必要とされていることを示している。
[RxURG(1ビット、ワード0×1[16])]
このビットはURGビットが受信されたパケットで設定されたことを示している。
[ACK(32ビット、ワード0×1[63:32])]
これは送信されたパケットで使用されるACK数である。
[SEQ(32ビット、ワード0×2[31:0])]
これは送信されたパケットで使用される動作シーケンス番号である。
[SAオーバーヘッド(8ビット、ワード0×2[47:40])]
このフィールドは(二重ワード数で)CBのIPSECオーバーヘッドを記憶するために使用される。
[ローカルWinScale(4ビット、ワード0×2[39:36])]
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効な値は0×00から0×0Eである。
[遠隔WinScale(4ビット、ワード0×2[35:32])]
このフィールドはTCP SYNパケットの遠隔端部によりリクエストされるようなスライディングウィンドウスケールファクタを表している。有効な値は0×00から0×0Eである。
[遠隔MSS(16ビット、ワード0×2[63:48])]
このフィールドはTCP接続に対するSYNパケットで受信されるMSSを表している。これは遠隔端部が受けることのできる最大のパケットサイズを示している。MSSオプションが受信されないならば、このフィールドは536(0×0218)にデフォルトされる。このフィールドはUDP接続に使用されない。
[VLAN優先順位(3ビット、ワード0×3[14:12])]
このフィールドはVLANタグに使用されるユーザ優先順位レベルを表している。それはまた送信スケジュール中のソケットに対するサービスレベルも表す。数が高いほど、優先順位は高い(7が最大であり0が最低である)。このフィールドに対するデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
[VLAN VID(12ビット、ワード0×3[11:0])]
このフィールドはVLANタグフレームで使用されるVLAN識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受信されるVIDにより設定される。
[遠隔MACアドレス(48ビット、ワード0×3[63:16])]
これらのフィールドはこのソケットで送信されているパケットに対する目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスに対して問合せられる。解決された後、アドレスはここに記憶され、それによりこれ以上のARPキャッシュ問合せを防止する。CBがサーバソケットとして生成されるならば、このアドレスはSYNパケットに含まれる目的MACアドレスから取られる。
[受信されたタイムスタンプ(32ビット、ワード0×4[31:0])]
これは受信されたパケットに含まれるタイムスタンプである。
[ローカルタイムスタンプ(32ビット、ワード0×4[63:32])]
これはこのソケットに対して送信された最後のパケットのタイムスタンプである。
[TTL(8ビット、ワード0×5[15:8])]
これは接続に使用されるTTLである。SYN/ACKが発生されるとき、このパラメータはIPルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
[TOS(8ビット、ワード0×5[7:0])]
これは接続に使用されるTTLである。SYN/ACKが発生されているとき、このパラメータはIPルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
[SYN/ACK再試行数(4ビット、ワード0×5[19:16])]
このフィールドは特定のソケットに対して送信されるSYN/ACK再試行数を追跡する。再試行数がプログラムされた最大値に到達するならば、ソケットはデプリケートされる。
[IPSECモード(4ビット、ワード0×5[31:28])]
このフィールドはソケットに対してアクチブなIPSECモードを示すために使用される。このフィールドの復号を以下示す。
Figure 2010063110
[ローカルIPアドレス(32ビット、ワード0×5[63:32])]
このフィールドはSYNパケットで受信された目的地IPアドレスを記憶するために使用される。これはソケット接続のためのローカルIPアドレスを表している。
[TXトンネルAH SAハンドル(16ビット、ワード0×6[15:0])]
このフィールドはCBに対して(適用可能であるならば)TXトンネルAH SAハンドルを記憶するために使用される。
[TXトンネルESP SAハンドル(16ビット、ワード0×6[31:16])]
このフィールドはCBに対して(適用可能であるならば)TXトンネルESP SAハンドルを記憶するために使用される。
[SAハッシュ(31ビット、ワード0×6[63:32])]
このフィールドはCBに対するSAハッシュを記憶するために使用される。
[TX転送AH SAハンドル(16ビット、ワード0×7[15:0])]
このフィールドはCBに対して(適用可能であるならば)TX転送AH SAハンドルを記憶するために使用される。
[TX転送ESP SAハンドル(16ビット、ワード0×7[31:16])]
このフィールドはCBに対して(適用可能であるならば)TX転送ESP SAハンドルを記憶するために使用される。
[ローカルMSS(16ビット、ワード0×7[47:32])]
このフィールドは接続で使用されるローカルMSS値を記憶するために使用される。これはシリ−ウィンドウシンドロームを避けるためにウィンドウサイズを調節するのに必要とされる。
[待機時間CB構造]
以下の表はTime_Wait状態のソケットのメモリのCB構造を規定している。
Figure 2010063110
[待機時間CBフィールド定義]
[遠隔IPアドレス(アドレス0×00、32ビット)]
この32ビットフィールドは接続のための遠隔IPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはSYNパケットで受信されたIPアドレスまたは受信されたUDPパケットのIPアドレスにより満たされる。
[遠隔ポート(アドレス0×01[31:16]、16ビット)]
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットではこのフィールドは常にアプリケーションにより特定される。サーバソケットでは、このフィールドはSYNまたはUDPパケットで受信されたポート番号で満たされる。
[ローカルポート(アドレス0×01[15:0]、16ビット)]
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
[IPインデックス(アドレス0×02[31:28]、4ビット)]
このフィールドはソケットのホストインターフェースにおけるIPアドレスのネットワークスタックIPアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより満たされる。
[ConnState(アドレス0×02[27:24]、4ビット)]
このフィールドは現在の接続状態を示しており、以下のように復号する。
Figure 2010063110
[RX(アドレス0×02[23]、1ビット)]
このビットはRX ACK状態メッセージモードが使用可能になることを示している。このモードはTW CBに対しては意味がない。
[SA(アドレス0×02[22]、1ビット)]
このビットは選択的なACKオプション(SACK)がこのソケットで使用されるべきであることを示している(0=SACKを使用してはならない、1=SACKを使用する)。
[TS(アドレス0×02[21]、1ビット)]
このビットはタイムスタンプオプションがこのソケットで使用されるべきであることを示している(0=タイムスタンプオプションを使用してはならない、1=タイムスタンプオプションを使用する)。
[WS(アドレス0×02[20]、1ビット)]
このフラグはスライディングウィンドウオプションがTCPソケットに対して適切に交渉していることを示している(0=WSオプションを使用してはならない、1=WSオプションが使用可能になる)。このビットはUDPソケットで使用されない。
[MS(アドレス0×02[19]、1ビット)]
このビットはCBの遠隔MSSフィールドが有効であることを示している。MSSはワード5[15:0]に位置されている。
[AR(アドレス0×02[18]、1ビット)]
このビットはACKパケットが特定のソケットで送信されるときを設定される。これはACKパケットが送信されているときクリアされる。
[CF(アドレス0×02[17]、1ビット)]
このビットはまだデプリケートされることができないように、現在のCBが受信・送信FIFOバッファ待ち行列にあることを示している。一度、ソケットのACKが送信されると、TCP送信ブロックはオープンCBからTime_Wait CBへ移動する。
[CVI(アドレス0×02[16]、1ビット)]
このビットはCBが有効な情報を含んでいることを示している。任意のCBをデプリケートする前に、このビットは常にクリアされる。
[CBVer(アドレス0×02[15:12]、4ビット)]
これらのビットはCBのバージョンを示しており、ハードウェアの将来のバージョンのCBを弁別するためにオンチッププロセッサにより使用される。このフィールドは現在0×1として規定される。
[CBインターフェース(アドレス0×02[11:8]、4ビット)]
このビットはソケットに対する特定の物理的なインターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィーは0×0で残されるべきである。
[KA(アドレス0×02[4]、1ビット)]
このビットはキープアライブタイマがこのソケットと共に使用されるべきであることを示している(0=キープアライブタイマを使用してはならない、1=キープアライブタイマを使用する)。
[DF(アドレス0×02[3]、1ビット)]
このビットはソケットに対するIPヘッダのDFビットの状態を表している。設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスMTU発見に使用される。
[VL(アドレス0×02[2]、1ビット)]
このビットはVLANタグが出力するイーサネット(登録商標)フレームに含まれるか否かを示している。それが主張されるならば、cb_tx_vlan_priorityおよびcb_tx_vidにより作られるVLANタグ情報の4バイトとVLANタグ識別(固定した値)が含まれ、それにイーサネット(登録商標)アドレスフィールドが後続する。
[RE(アドレス0×02[1]、1ビット)]
このフラグはタイムアウト状態および再送信が必要であることを示すために使用される。それはデータが再送信されるときにクリアされる。
[UR(アドレス0×02[0]、1ビット)]
このビットは緊急のデータが受信されたことを示している。これはアプリケーションがこの受信された緊急データポインタを読取るまで(または読取ったことを示すまで)主張される。
[ACK番号(アドレス0×03、32ビット)]
これはTCP接続のための動作ACK番号である。これは受信されたTCP PSHパケットの予測されたSEQ数を表している。TCPデータパケットが受信されるとき、SYN数はこの数に対してチェックされる。これが一致するか、受信されたSEQ数+パケット長がこの数をカバーするならば、データは受取られる。この数はネットワークスタックにより自動的に更新され、UDP接続には使用されない。
[SEQ数(アドレス0×4,32ビット)]
これはTCP接続のための動作SEQ数である。これはTCPパケットで使用されるSEQ数を表しており、ネットワークスタックにより自動的に更新される。このフィールドはUDPソケットには使用されない。
[IPSECモード(アドレス0×5[30:27]、4ビット)]
このフィールドはソケットでアクチブなIPSECモードを示すために使用される。このフィールドの復号について以下示す。
Figure 2010063110
[ソケットタイプ(アドレス0×05[26:24]、3ビット)]
このフィールドは以下の表にしたがって制御ブロックにより表されるソケットのタイプを示している。
Figure 2010063110
[LWinScale(アドレス0×05[23:20]、4ビット)]
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。
[RWinScale(アドレス0×05[19:16]、4ビット)]
このフィールドはTCP SYNパケットの遠隔端部によりリクエストされるときのスライディングウィンドウスケールファクタを表している。
[ローカルウィンドウ(アドレス0×05[15:0]、16ビット)]
このフィールドはTCPローカルスライディングウィンドウフィールドで広告されたウィンドウの16ビットを表している。
[優先順位(アドレス0×06[30:28]、3ビット)]
このフィールドはVLANタグに対して使用されるユーザ優先順位レベルを表している。また送信スケジュール化中のソケットに対するサービスレベルを表している。数が高い程、優先順位は高くなる(7が最高であり、0が最低である)。このフィールドのデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
[VID(アドレス0×06[27:16]、12ビット)]
このフィールドはVLANタグフレームで使用されるVLAN識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受信されるVLAN識別により設定される。
[遠隔MACアドレス(アドレス0×06[15:0]−0×07、全部で48ビット)]
このフィールドはこのソケットで送信されているパケットの目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスを問合せられる。解決後、さらにARPキャッシュの問合せを避けるようにアドレスはここに記憶される。CBがサーバソケットとして生成されるならば、このアドレスはSYNパケットに含まれる目的地MACアドレスから取られる。アドレスのビット[47:32]はCBアドレス0×6に記憶される。
[ローカルIPアドレス(アドレス0×8、32ビット)]
このフィールドはソケット接続のローカルIPアドレスを表している。
[遠隔タイムスタンプ(アドレス0×09、32ビット)]
これは受信されたパケットに含まれるタイムスタンプである。
[TW生成タイムスタンプ(アドレス0×A、32ビット)]
これはCBが時間待機状態を入ったときのタイムスタンプである。
[トンネルAHハンドル(アドレス0×B[31:24]、アドレス0×C[31:24]、16ビット)]
これはCBに対するトンネルAH SAハンドルである。これはCBのトンネルAH(TA)ビットが設定されるときにも有効である。
[順方向リンク(アドレス0×B[23:0]、24ビット)]
検索チェーンの次のCBのリンクである。
[トンネルESPハンドル(アドレス0×D[31:24]、アドレス0×E[31:24]、16ビット)]
これはCBに対するトンネルESP SAハンドルである。これはCBのトンネルESP(TE)ビットが設定されるときにも有効である。
[順方向エージリンク(アドレス0×D[23:0]、24ビット)]
検索チェーンのエージによる次のCBに対するリンクである。
[逆方向エージリンク(アドレス0×E[23:0]、24ビット)]
検索チェーンのエージによる先のCBに対するリンクである。
[転送AHハンドル(アドレス0×F[15:0]、16ビット)]
これはCBに対する転送AH SAハンドルである。これはCBの転送AH(NA)ビットが設定されるときにも有効である。
[転送ESPハンドル(アドレス0×F[31:16]、16ビット)]
これはCBに対する転送ESP SAハンドルである。これはCBの転送ESP(NE)ビットが設定されるときにも有効である。
[TCP混雑制御サポート]
[概要]
IT 10Gはスロースタート、混雑防止、高速再送信、高速度回復アルゴリズム、ウィンドウスケーリング、ハードウェアの順序が乱れているパケットの再順序付けを実行する。さらにIT 10Gは1よりも多数のセグメントが一度に時間を定められることを可能にするラウンドトリップ時間TCPオプションをサポートする。これらの特徴は高速度ネットワークで必要とされる。
[ラウンドトリップ時間の測定]
IT 10Gは2つの方法でラウンドトリップ時間(RTT)を測定することができる。伝統的な方法では、時間測定はTCP PSHパケットからパケットのACKが受信されるときまで行われる。時間を定められたパケットのシーケンス番号はCB中の時間を定められたパケットフィールドのシーケンス番号に記憶され、パケットのタイムスタンプはCBの最後の送信フィールドのタイムスタンプ中に記憶される。時間を定められたパケットのACKが受信されるとき、現在のタイムスタンプと記憶されたタイムスタンプとの間のデルタは往復時間RTTである。ACKが受信されるとき、ソケットCB中のRTO [1]ビットは次のパケットが時間を定められることを示すためにクリアされる。
RTオプションがオープニングTCPハンドシェ−クで交渉されるとき、RT測定は受信された各ACKから取られることができる。
ラウンドトリップ時間測定を行うために使用される方法にかかわりなく。その値をとり再送信タイムアウト(RTO)値を決定する論理フローは同じである。この論理は図29に示されている。
スケールされ平滑されたRTT、平均偏差、RTOはすべてソケットCB中に記憶される。
[スロースタートアルゴリズム]
スロースタートはRFC1122に最初に記載されたTCP混雑制御機構であり、さらにRFC2001のhttp;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtに記載されている。
スロースタートは送信中の多数のデータセグメントを一度にゆっくりと上昇させる。最初にスロースタートは肯定応答(ACK)を予測する前に(最大のセグメントサイズの2倍または2*MSSの現在のウィンドウcwndに対応する)2つのデータセグメントのみを送信させなければならない。それぞれの成功ACKを受信したとき、送信機はcwndが受信機の広告ウィンドウに等しくなるまで1MSSだけcwndを増加できる(したがって1よりも多数のセグメントの送信を可能にする)。
スロースタートは新しいデータ接続で常に開始され、時には、データトラフィックの渋滞が生じたときに接続の途中で起動される。スロースタートは事を再度行わせるために使用される。
ネットワークスタックはTCP接続毎にスロースタートアルゴリズムをサポートする。このアルゴリズムは混雑ウィンドウパラメータ(cwnd)を使用し、それはソケットが最初に設定されるとき1MSSに初期化される。
スロースタートアルゴリズムはソケットが最初に設定されるときを示し、1つのパケットだけが送出されることができ、パケットのACKが受信されるまでさらにデータが送信されることができないことを示す。ACKが受信されるとき、cwndは1MSSだけ増加され、これは2つまでのパケットが送信されることを可能にする。ACKが受信される毎に、cwndは1MSSだけ増加される。
これはcwndがピアからの広告されたウィンドウサイズを超えるまで継続する。ネットワークスタックは常に最小のcwndと広告されたウィンドウを送信する。
ネットワークスタックがICMPソース消滅メッセージを受信するならば、cwndを1MSSへリセットする。しかしながら、スロースタート閾値変数(ssthresh)はどの同一値に維持される。
[混雑防止アルゴリズム]
ネットワークスタックはピアからの最小のcwndと広告されたウィンドウの送出を維持する。混雑防止アルゴリズムはまたスロースタート閾値変数(ssthresh)を使用し、これは0×FFFFに初期化される。
混雑がタイムアウトにより検出されたとき、ssthreshは現在の送信ウィンドウ(最小のcwndとピアの広告ウィンドウ)の半分に設定される。この値がMSSの2倍よりも小さいならば、この値が代わりに使用される。またcwndは1MSSに設定される。
新しいデータが肯定応答されるとき、cwndはそれがssthresh(それ故の名称)よりも大きくなるまで1MSSだけ増加される。その後、cwndは1/cwndだけ増加される。これは混雑防止フェーズである。
[高速再送信および高速度回復アルゴリズム]
高速再送信は最初に実験プロトコルとしてRFC112に記載され、RFC2001で形式化され、http;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtを参照することができる。
高速再送信は送信者が標準的なタイムアウトを待機する代わりにホールを迅速に埋めることを可能にするために順序が乱れたセグメントが受信されるとき、直ちにACKを発生する。
高速再送信は受信機が3つの重複したACKを受けるときに呼び出される。高速再送信が呼び出されるとき、送信者はホールを埋めようとする。重複するACKはセグメントのACKおよびウィンドウ広告値が相互に一致するときに重複すると考えられている。
ネットワークスタックが重複するACKを受信するとき、パケットがドロップすることが強く示される。n個の重複パケットが受信されるとき、ドロップされたセグメントは再送信タイマがまだ満了されていなくても直ちに再送信される。これは高速再送信アルゴリズムである。再送信前に受信されなければならない重複するACKの数nはTCP_Dup_ACKレジスタ(0×36)を介して設定され、3にデフォルトされる。
特定され多数の重複するACKが受信されるとき、ssthreshは再度混雑防止アルゴリズムのケースのように現在のウィンドウサイズの半分に設定されるが、このとき、cwndはssthresh+(3*MSS)に設定される。このことは重複したACKの受信後、スロースタートではなく混雑防止アルゴリズムに戻ることを確実にする。別の重複するACKが受信される毎に、cwndは1MSSだけ増加される。これは高速度回復アルゴリズムである。
新しいデータに対するACKが受信されるとき、cwndはssthreshに設定される。
[動作の再送信理論]
論理の再送信サポートは3つの位置、即ちデータが送信される位置、受信されたACKを処理する位置、CBポーラ中の位置に存在する。
[データ送信]
データを送信するとき、送信論理装置は関連するCBの再送信有効ビットを観察する。ビットが設定されていないならば、有効な再送信時間が記憶されていないことを暗示しており、(CBに)現在記憶されているRTOは現在のタイムスタンプに付加される。結果的な時間はパケットに対する再送信時間である。この時間はCBに記憶され、CBの再送信有効ビットが設定される。
再送信有効ビットが既にCBで設定されているならば、それはソケットに現在目立ったデータが存在し、再送信時間がここで更新される必要はないことを意味する。
送信されているデータバッファがタイムアウトによるものであり、したがって再送信であるならば、CBの再送信時間は常に更新され、CBに記憶されているRTOもまた調節される(2重にされる)。
[ACK処理]
TCP RXモジュールがACKを受信するとき、(含まれるならば)ACKのタイムスタンプと共にTXモジュールへ通知を送信する。TXモジュールはRTOの更新にこの情報を使用する。ACKが再送信されたパケットに応答するならば、この更新は行われない。パケットが再送信されたか否かの指示はMTXメモリ中のデータバッファヘッダ中に維持される。
それが計算された後、新しいRTOが必要とされるならば、CBに記憶される。ソケットにおいて任意の目立ったデータが検出されるならば、新しい再送信時間はまた新しいRTOを現在のタイムスタンプに付加することにより計算され、これもまたCBに記憶される。
[CBポーラ]
CBポーラはアクチブブロックを探しているすべてのCBを循環する。CBポーラがアクチブブロックを発見するとき、CBポーラは再送信有効ビットを検査する。再送信有効ビットが設定されるならば、CBポーラは再送信時間を比較する。CBポーラが再送人時間が満了していることを発見するならば、CBポーラはCBの再送信ビット(即ちデータ送信機がどのようにしてパケットが再送信されたパケットであることを知るか)を主張し、CBを優先順位待ち行列の1つに位置させる。
[MSS選択]
[概要]
このセクションはMSSオプションがどのようにして得られるかの概要を示す。
[初期セットアップ]
TCPトランザクションを使用可能にする前に、ホストは以下のパラメータおよび設定をセットアップすべきである。
・レジスタ0×1A4A−0×1A4Bで使用されるデフォルトのローカルではないMSS、
・レジスタ0×1A4C−0×1A4Dで使用されるデフォルトのローカルMSS。
[選択アルゴリズム]
2つのうち任意の接続に使用されるMSS値を選択するとき、TCPエンジンはIPルータに問い合わせる。目的地ルートがゲートウェイを通過するならば、ローカルではないMSSが使用される。
[TCPオプション]
[概要]
以下の説明はサポートされるTCPオプションおよびそれらのフォーマットの概要である。サポートされる4つのオプションは、
・MSS、
・ウィンドウスケーリング、
・タイムスタンプ、
・SACKである。
[MSSオプション]
このオプションは常に送信される。使用される実際のMSS値は既に説明されたアルゴリズムにしたがって決定される。MSSオプションのフォーマットは図30に示されている。
[ウィンドウスケーリングオプション]
このオプションはSl_Win_EnビットがTCP_Controlレジスタ中で設定される限り、SYNパケットで常に送信される。このオプションはこれがSYN/ACK応答を発生するSYNパケットに含まれる場合のみSYN/ACKパケットで送信される。このオプションのフォーマットは図31に示されている。このオプションはこれが4バイト境界で整列するように常にNOPバイトにより先行されることに注意する。
[タイムスタンプオプション]
このオプションはタイムスタンプオプションが使用可能になるならばSYNパケットで常に送信され、タイムスタンプオプションが使用可能になるか否かにかかわりなく、オプションがSYN/ACK応答を発生するSYNパケットに含まれる場合にのみSYN/ACKパケットで送信される。オプションのフォーマットは図32に示されている。このオプションはこれが4バイト境界で整列するように常に2つのNOPバイトにより先行されることに注意する。
[選択的なACK(SACK)オプション]
選択的な肯定応答(SACK)はTCPがホール(失われたデータパケット)を含むデータを承認することを可能にし、ドロップ後のすべてのデータではなく失われたデータの再送信を可能にする。この特徴はRFC2018に記載されている。
このオプションはSACK_EnビットがTCP_Controlレジスタに設定される限り、SYNおよびSYN/ACKパケットで常に送信される。SACKは2つの異なるTCPオプションの種類を使用する。一方のオプションの種類はSYNパケットで使用され、その他のオプションの種類はデータパケットで使用される。オプションのフォーマットは図33と34に示されている。
[MTXバッファヘッダフォーマット]
[概要]
このセクションはMTXデータバッファ毎の開始で使用されるヘッダフォーマットを記載している。ヘッダはチェックサム、シーケンス番号、次のリンク等のようなバッファに含まれるデータについての情報を含んでいる。ヘッダフォーマットはTCPとUDPで異なっている。
[TCPのキープアライブタイマ]
[概要]
このセクションではTCP接続に使用されるキープアライブタイマを説明する。このセクションはこの特徴がIT 10Gネットワークスタックで実行される態様についての動作理論を含んでいる。
[キープアライブパラメータ]
以下のパラメータはネットワークスタックのキープアライブ特性で使用される。
Figure 2010063110
[動作理論]
デフォルトにより、キープアライブタイマはソケットでディスエーブルされル。ソケットが生成されるとき、ホストはSocket_Configurationレジスタ中のKeep_Aliveビットを設定するオプションを有する。このビットが設定され、ソケットパラメータが与えられるならば、キープアライブ特性はそのソケットで使用可能になる。
一度、ソケットが設定されると、keep_aliveタイムスタンプはCB(ワード0×05)中に維持される。このタイムスタンプはソケットがアイドルであると考えられている将来の時間を表す。パケットがソケットで送信される毎に、またはパケットがソケットに到着するとき、このタイムスタンプは更新される。更新されたタイムスタンプは現在動作している分のカウンタと(Keep_Alive_Timerレジスタ(0×1A3A)を介してホストにより入力されるような)keep_alive時間の合計である。
CBポーラモジュールはキープアライブ特性を有する各CBの分が一度使用可能になるとキープアライブタイムスタンプをチェックする。CBポーラモジュールが現在の自由動作している分カウンタに一致するタイムスタンプを有するソケットを発見するならば、CBポーラモジュールはそのソケットで送信されるキープアライブプローブをスケジュールする。CBポーラモジュールはデータ送信待ち行列にCBを行列させ、Kビット(CBのワード0×0Bのキープアライブ再試行ビット)を設定することによりこれを行う。CBポーラモジュールはまたCBのキープアライブ再試行フィールド(ワード0×13)を0×1に設定する。送信待ち行列が一杯であるならば、CBポーラモジュールは次の分チェック中にCBポーラを再度トリガーするためにCBのkeep_aliveタイムスタンプをインクリメントする。
データパケット発生器が設定されているKビットを有するCBに遭遇するとき、データパケット発生器はシーケンス番号が通常設定されるよりも1だけ低い値に設定されるシーケンス番号を有する1バイトPSHパケットを送出する。データ発生器はまたCBのキープアライブタイムスタンプを現在の自由動作している分カウントプラスキープアライブ再試行インターバルで更新する。これが依然として動作中(アクチブ)であるならば、正確な予測されたシーケンス番号を有するACKをピアに返送させる。
ピアがアクチブであり、応答を送信するならば、TCP−RXモジュールはCB中のKビットをクリアし、再試行カウントを0×0にリセットし、キープアライブタイムスタンプを更新する。
ピアがキープアライブ再試行インターバル内に応答を送信しないならば、CBポーラは再度、以前の分のキープアライブタイムスタンプチェックを行っていたときのソケットに遭遇する。Kビットが既に設定されていることを観察するとき、キープアライブ再試行カウンタを1だけインクリメントし、データパケット送信のためにCBを再スケジュールする。
CBポーラが再試行数が最大数に到達したことを発見したならば、CBポーラはホストコンピュータへ通知を送信し、ソケットをデプリケートする。
キープアライブプローブの送出コース中、ネットワークスタックはRSTパケットを受信し、これは適切にソケットを閉じることなくピアが再ブート(リセットまたは再スタート)されたことを意味する可能性が大きい。この場合、ソケットはデプリケートされる。
別の可能性は、ネットワークスタックがキープアライブプローブ、例えば到達可能ではないネットワークのキープアライブプローブに応答してICMPエラーメッセージを受信することである。この状態は中間ルータがダウンすることにより生じる。この場合には、ICMPメッセージはオンチッププロセッサに送られる。複数のこれらのICMPメッセージの受信後、オンチッププロセッサはソケットCBを読取り、これがキープアライブ再試行状態であることを観察できる。オンチッププロセッサはその後、CBデプリケーションプロセスを起こすことができる。
[TCP ACKモード]
[概要]
以下の説明はIT10Gネットワークスタックで有効なTCP ACKモードの詳細である。4つのモードのうちスタックが動作しているモードを決定する2つのビットが存在する。これらはTCP_Control1レジスタ中のDly_ACKビットと、Socket_configurationレジスタのHost_ACKビットである。演算マトリックスは以下の表に示されている。
Figure 2010063110
[正常なACKモード]
このモードでは、データはそれらがNRX DRAMへ受信されるとすぐにACKされる。TCP受信論理装置はこれをRXからTXへのパケットFIFOバッファへ位置付けることによりACKをスケジュールする。ソケットCBのARビットはこのモードでは使用されない。これはTCPモジュールのデフォルトモードであり、TCP_Control1レジスタでDly_ACKビットの主張を解除することにより使用可能になる。これはすべてのソケットに適用するように全般的なTCP設定である。
[遅延されたACKモード]
このモードでは、データは直ちにACKされない。代りに、データがソケットに到着するとき、TCP受信論理装置はソケットCBにARビットを設定する。CBポーラモジュールはその後、ARビットセットを有するCBを観察するためすべてのアクチブCBを周期的に試験する。CBポーラがセットビットを発見するとき、CBポーラはそのソケットに対するACKをスケジュールする。ARビットを探すポーリングインターバルはDel_ACK_Waitレジスタを介して設定されることができ、2msのタイマ刻みに関して特定される。デフォルトインターバルは250msである。このモードはTCP_Control1レジスタ中のDly_ACKビットの主張により使用可能になる。それはまたすべてのソケットに適用するように全般的なTCP設定である。
[ホスト−正常ACKモード]
このモードでは、データはMRX DRAMへ受信されるときACKされない。代りにACKはデータがホストコンピュータへ送信された後にのみ送信され、ホストコンピュータはデータのACKコマンドを発生することによりデータの受信を承認する。IT 10GハードウェアがACKコマンドを受信するとき、CB、即ちソケットハンドルをHost_ACK_CBレジスタに書込む。この動作はRX−TXパケットFIFOバッファを介してACKパケットをスケジュールさせる。ソケットCBのARビットはこのモードで使用されない。このモードはSocket_Configurationレジスタ中でHost_ACKビットを主張することによりソケットベースにしたがって使用可能にすることができる。
[ホスト遅延されたACKモード]
このモードでは、データは直ちにACKされない。代りに、データは受信後、ホストコンピュータに送信され、ホストコンピュータはデータのACKコマンドを発生することによりデータの受信を承認する。IT 10GハードウェアがACKコマンドを受信するとき、CB、即ちソケットハンドルをHost_ACK_CBレジスタに書込む。この動作はソケットのCB中のARビットを設定させる。CBポーラモジュールが次のACKポーリングサイクルにおいてすべてのARビットをチェックするとき、CBポーラはACKをそのソケットに対して送出されるようにスケジュールする。Del_ACK_Waitレジスタを介して特定されるCBポーリングサイクルはARビットのポーリングインターバルだけを特定し、データをホストコンピュータへ最初に送信してホストコンピュータがそのデータに応答するのを待機することによって生じる遅延を考慮しないことに注意すべきである。それ故、このモードが使用されるならば、ACKポーリングインターバルはデフォルト250msよりも低いある値に設定されることが示唆される。最適なインターバルはACKコマンドを発生するホストコンピュータのターンアラウンド時間に依存している。
[ホスト再送信モード]
[概要]
IT 10GネットワークスタックはそのローカルデータバッファからまたはホストメモリからTCPデータを再送信するように設計されている。この説明はネットワークスタックが後者のモードで動作しているときの動作の詳細である。ホストメモリから再送信する利点はローカル送信バッファメモリの量が最小に維持されることができることである。これはデータがワイヤで送信されるとすぐに、MXデータバッファブロックがリリースされるからである。欠点はホストメモリ再送信をサポートするために、より多くのホストメモリと、ホストCPUサイクルと、待ち時間がかかることである。
[ホスト再送信モードエネーブル]
ホスト再送信モードはSocket_Configuration2レジスタでHost_Retransビットを主張することによりソケットベースにしたがって使用可能にすることができる。このモードは任意のACK動作モードと共に使用されることができる。
[ホスト再送信モード動作理論]
ホスト再送信モードで動作するとき、ホストCPUはシーケンス番号の追跡を続けるように動作する。ホストメモリからDMAされた各データセクションでは、最初の128ビットがデータブロックに対するヘッダを形成する。
ホストは各データ転送の最初の128ビットとしてこのヘッダに書込まなければならない。ヘッダのビット[127:64]は最初の64ビットワードをDMAされるべきであり、それに続いてヘッダのビット[63:0]、その後、最初のデータバイトが後続する。
IT10Gハードウェアがデータパケットを発生するとき、これはソケットCBからの代わりのデータバッファヘッダのシーケンス番号を取る。IT10Gハードウェアはその後、通常のようにパケットを形成し、そのデータパケットをワイヤで送信する。パケットの転送後、MTXデータバッファは直ちにフリーにされる。
データのACKがピアから受信されるとき、ホストコンピュータはデータを受信したCBと、受信されたSCK番号について、状態メッセージを介して通知される。この情報により、ホストコンピュータはホストコンピュータメモリからのデータをフリーにするためにクリアされるときを決定できる。
再送信タイマは正常状態下で、依然としてソケットCB中で使用される。再送信タイマが満了するとき、状態メッセージが対応するソケットハンドルと共にホストコンピュータへ送信される。ホストコンピュータはその後、まだACKされていないメモリ中に存在する最も古いデータのDMA転送をスケジュールする。
[ピアゼロのウィンドウケース]
[概要]
時には、TCP接続のピア側は受信バッファスペースを使い果たす。この場合には、ピアは0×0000のウィンドウサイズを広告する。ピアウィンドウは常にTCP受信セクションによりソケットCBへ書込まれる。受信論理装置が0×0000のウィンドウサイズを検出するとき、これはCBフラグワード(ワード0×02のビット[19])にZWビットを設定する。次にデータがこのソケットで送信される時、TCP送信論理装置は設定されているZWビットを発見し、データの送出の代りに、正しくないシーケンス番号を有する1バイトデータパケットを送出する。シーケンス番号は正しいシーケンス番号よりも1だけ小さい。このデータパケットはキープアライブプローブパケットのように見える。この正しくないデータパケットに応答して、ピアは更新されたウィンドウサイズを有するACKパケットを送信しなければならない。1バイトデータパケットの送信後、CBzero_windowプローブカウントは1だけインクリメントされ(ワード0×13のビット[27:24])、次のzero_windowプローブが送信されるべきときにCB zero_win_timestamp(ワード0×0Cのビット[31:26])が書込まれる。
[Zero_Window Timestamp]
このフィールドは次のzero_windowプローブが送信されるべきときを決定するために使用される。zero_windowプローブが送信される度に、プローブカウントはインクリメントされ、タイムスタンプは更新される。送信論理装置は送信されたプローブ数だけzero_window_intervalカウントをシフトし、この時間を現在の自由に動作している秒タイマへ付加することにより次のzero_window timestampを決定する。結果的なタイムスタンプは次のプローブが送信される将来の時間を表す。それ故、3秒のデフォルト値により、プローブは0、3、6、12、24、48、60秒のインターバルで送出される。一度インターバルが60秒に達すると、キャップされる。
CBポーラモジュールでは、論理装置はX秒毎にすべてのアクチブなCB ZWビットをポールし、ここでXはzero_window_intervalカウントである。CBポーラがZWビットの設定されているCBを発見するとき、CBポーラはzero_window timestampを読取り、そのタイムスタンプを自由動作する第2のタイマと比較する。これらが一致するならば、ゼロウィンドウプローブは送信されるように待ち行列される。キープアライブプローブと異なって、送信されるゼロウィンドウプローブの数に制限はない。
[ウィンドウのオープン]
ピアのウィンドウが最終的に開くとき、ピアは任意のACK(ウィンドウ告示)を送信するか、またはピアはACKの開いたウィンドウがゼロウィンドウプローブに応答することを示す。TCP受信論理装置はその後、CBのピアのウィンドウを更新する。次にCBがzero_windowプローブで現れるとき、CBポーラはウィンドウが開かれていることを観察する。CBポーラはその後ZWビットをクリアし、規則的なデータ転送をスケジュールする。zero_window再試行の数もまた0×0にリセットされる。
[ナグル動作]
[概要]
このセクションはナグル(Nagle)アルゴリズムのIT10Gハードウェアサポートを説明する。このアルゴリズムはTCP接続が転移中にACKされていないデータを有するときにデータが承認されるまで小さいセグメントが送信されることができないことを述べている。
[ナグル送信IB]
別々の送信命令ブロックがナグルアルゴリズムの使用で与えられる。これらの命令ブロック(IB)はこれらが主張されたIBコードのmsbを持たない点を除いて通常の非ナグルIBに類似している。32ビットアドレスのナグル送信IBは0×81であり、64ビットアドレスのコードは0×82である。ナグル送信IBはこれらがHWによりパースされるときソケットCBのR×ACKビットが主張される点を除いて通常の送信IBと同一方法で動作する。通常の送信IBの処理はこれが設定されるならば、このビットをクリアする。
[RxACKビット]
これはソケットCBに存在するビットであり、Socket_Confg1レジスタ中でビット[3]を主張することによりアプリケーションを介して設定されることができる。設定のとき、このビットはACKが受信されるときにすべての目立ったデータを承認したというRX_ACK状態メッセージを発生させる。この状態は受信されたACK番号がソケットにより使用されるSEQ番号に一致するときに満たされる。状態メッセージコードは受信されたACKに対して0×16である。
規則的な送信IBがIT10Gハードウェアにより処理されるとき、またはRxACK状態メッセージが送信されるとき、或いはソケットCBのビットを手作業でクリアするアプリケーションによって、RxACK状態ビットはクリアされる。最後のケースは診断目的だけのために行われる。
[MTXデータ記憶]
[概要]
このセクションはデータがMTXバッファに記憶されることのできるサイズをTOEが決定するために使用するアルゴリズムを説明する。これは1つのMTXバッファが1つのTCPパケットに対応するときに送信されるTCPパケットのサイズに影響する。
[MSS対4分の1MSS(または最大の半分のピアウィンドウ)]
ピアの広告されたウィンドウがMSSの2倍を超えるならば、(CB位置0×05に記憶されるような)ソケットMSSサイズはいくつのバイトがMTXバッファに記憶されることができるかについてのソケット決定ファクタとして使用される。ピアの広告されたウィンドウが2倍のMSSレベルに到達しないならば、MTXバッファに記憶されたバイトの最大数は(構成にしたがって)MSSの4分の1またはピアの最大の広告されたウィンドウの半分である。この比較を維持するビットはCBワード0×14のビット[18]である。
[パケットオーバーヘッド]
(構成に応じて)MSS、またはMSSの4分の1或いはピアの最大のウィンドウ値の半分から、固定したバイトオーバーヘッドが控除される。このオーバーヘッドはパケットヘッダバイト、IPSECオーバーヘッドを含んでいる。
[CBサイズ限度対バッファサイズ]
(構成に応じて)MSS、またはMSSの4分の1或いはピアの最大のウィンドウ値の半分のいずれを使用するかを決定し、パケットオーバーヘッドを控除した後、論理装置は利用可能なバッファの種類を観察する。128バイトのバッファだけが利用可能であるならば、これは記憶サイズを限定する。また上記計算後、データサイズが依然として大きいMTXバッファサイズよりも大きいならば、パケットサイズは再度MTXバッファサイズにより限定されることができる。
[IPルータ]
[IPルータ特徴]
・デフォルトルート能力を提供する。
・多数のホストIPアドレスに対するルートを提供する。
・ホスト特定およびネットワーク特定ルートを提供する。
・ICMP再誘導後、ルートをダイナミックに更新する。
・IP放送アドレスを処理する(限定され、サブネット再誘導され、ネットワーク誘導された放送)。
・IPループバックアドレスを処理する。
・IPマルチキャストアドレスを処理する。
[モジュールブロック図]
図35はIPルータの概略ブロック図である。
[IPルータの動作理論]
[ルートのリクエスト]
ローカルホストがIPパケットを送信しようとするとき、そのパケットを送信する場所、即ち構内ネットワークの別のホストか、外部ネットワークか、ローカルホスト自体であるかを決定しなければならない。これは出力するIPパケットを適切なホストへ誘導するIPルータのタスクである。
モジュールがルートをリクエストするとき、送信モジュールはパケットの目的地IPアドレスをIPルータへ送る。IPルータはターゲットのIPアドレスをIPルートリストに記憶されている目的地のリストと比較する。一致が見つかったならば、IPルータは適切なイーサネット(登録商標)アドレスを解決しようとする。IPルータはこの解決を、ARPキャッシュ中の目的地IPアドレスに対するARP検索をリクエストすることにより行う。目的地イーサネット(登録商標)アドレスが解決されるならば、イーサネット(登録商標)アドレスは送信モジュールへ戻され、このイーサネット(登録商標)アドレスを出力するイーサネット(登録商標)フレームの目的地として使用する。
ルート情報は3つの別々のコンポーネント、即ちデフォルトルートレジスタ351、カスタムルートリスト352、ルート可能ではないアドレスキャッシュ353により与えられる。これらのコンポーネントはルートリクエストが与えられるときに同時にすべて待ち行列される。
[デフォルトルート]
パケットの目的地はローカルまたは外部として説明されることができる。ローカルな目的地は送信ホストとして同一の構内ネットワークに取り付けられる。外部目的地は送信ホストの構内ネットワークとは別のネットワークに属す。
出力するパケット目的地IPアドレスが構内ネットワークに取り付けられたホストに属すことが分かったとき、IPルータは解決された目的地Ipアドレスをその対応するイーサネット(登録商標)アドレスに設定しようと試みるためにARPを使用する。目的地IPアドレスが外部ネットワークに属すことが決定されたならば、IPルータは出力するパケットを外部ネットワークへ中継するために使用するゲートウェイホストを決定しなければならない。一度、ゲートウェイホストが選択されると、出力するIPパケットはそれらの目的地イーサネット(登録商標)アドレスとしてゲートウェイホストのイーサネット(登録商標)アドレスを使用する。
ルートがパケット目的地IPアドレスに対して発見されることができない場合、そのパケットはデフォルトルートにより特定されるゲートウェイホストを使用しなければならない。デフォルトルートは他に所定の目的地IPアドレスに対して発見されることができるルートがないときにのみ使用される。
ARPキャッシュへのアクセス数を最小にするため、IPルータはデフォルトルートが設定されるときにデフォルトゲートウェイイーサネット(登録商標)アドレスをキャッシュする。デフォルトゲートウェイイーサネット(登録商標)アドレスはARPキャッシュのダイナミックエントリがキャッシュされることを可能にされる時間量に等しい最大時間量だけキャッシュされる。
[放送およびマルチキャスト目的地]
目的地IPアドレスが放送またはマルチキャストIPアドレスであるとき、ARP探索が必要とされる。代りに目的地イーサネット(登録商標)アドレスはIPアドレスのタイプに応じて発生される。IP放送アドレス(255.255.255.255)に対して設定された目的地IPアドレスを有するパケットはイーサネット(登録商標)放送アドレス(FF:FF:FF:FF:FF:FF)に送信される。マルチキャストIPアドレス(244.x.x.x)に設定された目的地IPアドレスを有するパケットはマルチキャストIPアドレスから計算されるそれらの目的地イーサネット(登録商標)アドレスを有する。
[静的ルート]
デフォルトルートに加えて、IPルータは目的地IPアドレスを特別なイーサネット(登録商標)インターフェースまたはゲートウェイホストへマップするために静的ルートの生成を可能にする。IPルートエントリは目的地IPアドレス、ネットマスク、ゲートウェイIPアドレスを含んでいる。ネットマスクは目的地IPアドレスの範囲をIPルートエントリ内に記憶されている目的地IPアドレスと一致させるために使用される。ネットマスクはまた特別なホストのルートとネットワークのルートとの間の弁別を可能にする。ゲートウェイIPアドレスはARPを介して目的地イーサネット(登録商標)アドレスを解くときに使用される。
IPルートリスト中に多数のルートを有することが可能であるので、IPルートエントリはダイナミックに割当てられたメモリ(この構造ではm1メモリと呼ばれる)に記憶される。各IPルートエントリは128ビットを使用する。各エントリの最後の32ビットは何等のデータも記憶しないで、64ビット境界に沿ってIPルートエンジンを整列するためにパッディングとして使用される。各IPルートエントリのフォーマットは図36に示されている。
IPルートリストは分類されたリンクリストとして構成される。IPルートがIPルートリストに付加されるので、これらはそれらのネットマスクにしたがって順序付けされ、最上位の特定のIPルートはリストの正面で現れ、最下位の特定のネットマスクを有するIPルートはリストの最後に置かれる。IPルートエントリのルートポインタフィールドはm1メモリアドレスを含み、そこでは次のIPルートエントリはm1メモリで発見されることができる。ルートポインタフィールドの第1(最上位)ビットはm1メモリアドレスが有効であり現在のものに続くルートが存在するか否かを決定するためのフラグとして使用される。ルートポインタフィールドのポインタ有効ビットが主張されないならば、IPルートリストにはさらにIPルートは存在せず、IPルートリストの最後に到達する。
目的地IPアドレスが放送またはマルチキャストIPアドレスであることが決定されないならば、IPルートリストは一致するIPルートエントリに対して検索される。一致がIPルートリストで見つからないならば、デフォルトルートがゲートウェイ情報を提供するために使用される。
IPルータはまた多数の物理的およびループバックインターフェースの使用を可能にする。IPルートエントリのインターフェースIDフィールドを使用して、IPルータは出力するパケットをIT10Gの特定のイーサネット(登録商標)インターフェースへ誘導できる。インターフェースIDフィールドはまたARPリクエストを適切なイーサネット(登録商標)インターフェースへ導くために使用される。
[ループバックアドレス]
目的地IPアドレスがIT10Gに属すか、ループバックIPアドレス(127.x.x.x)であるならば、出力するパケットはIT10Gにフィードバックされることが想定される。ループバック目的地に対するIPルータはIPルートリスト中に記憶されている。IT10Gに割当てられていないIPアドレスもまたループバックアドレスとして構成されることができる。このローカル再誘導を可能にするために、IPルートエントリのインターフェースIDフィールドは0×8に設定されなければならない。そうでなければ、IPルートエントリのインターフェースIDフィールドはイーサネット(登録商標)インターフェース(0×0、0×1、0×2など)の1つに設定されなければならない。
[ルートの生成]
新しいIPルートはシステムインターフェース(例えばホストコンピュータ)から来る。システムインターフェースにより生成されるIPルートは静的ルートであり、これらがシステムインターフェースにより除去されるまでテーブルに残ることを意味している。システムインターフェースはIPルータモジュールレジスタインターフェースを介してルートを付加および除去する。
ICMP再誘導メッセージはIPパケットが正しくないゲートウェイホストへ送信されているときに送信される。ICMP再誘導メッセージは通常不正確に導かれたIPパケットに対して使用されるための正しいゲートウェイホストの情報を含んでいる。ICMP再誘導メッセージが受信されるとき、そのメッセージはシステムインターフェースにより処理される。システムインターフェースはIPルータのレジスタインターフェースを介してルートリストを更新し、既存のIPルートを更新し、または新しいIPルートを生成することに従事する。
[ローカルネットワークのホストへのルーティング]
ローカルイーサネット(登録商標)ネットワークの他のホストへ直接パケットを導くために、IT10Gサブネットマスクを有するIPルートが生成されなければならない。このルートのゲートウェイとして別のホストを特定する代りに、ゲートウェイIPアドレスはこのルートがローカルネットワークを横切って直接的な接続を行うことを示すため0.0.0.0に設定されなければならない。
[ルートリクエストシグナリング]
各送信モジュールはルートをリクエストするためにIPルータへのその固有のインターフェースを有する。ルートのリクエストおよび受信に使用されるシグナリングは図37に示されている。
モジュールがIPルートをリクエストするとき、リクエストするモジュールはルートリクエスト信号(例えばTCP_Route_Req)を主張し、目的地IPアドレス(図21のTCP_Trgt_IP)をIPルータへ提供する。一度IPルータが供給されたIPアドレスのためのルートを発見すると、IPルータはルートダン信号を主張し、目的地イーサネット(登録商標)アドレスを出力する。route_valid信号はIPルートが適切に発見された場合に送信モジュールに示すために使用される。ルートダン信号が主張されるときにroute_valid信号が主張されるならば、有効なルートが発見された。route_valid信号が主張されないならば、これはルーティングが成功しなかったことを意味する。このルーティングの失敗はデフォルトルートセットをもたないか。一致するIPルートエントリにより供給されるゲートウェイがダウンしており、ARPリクエストに応答しない等の幾つかの原因によるものである。ルート故障の場合には、送信モジュールは待機し、後に再度ルートを解決しようとするか、現在の接続試行を中止することに従事する。
IPルートがホストまたはゲートウェイのIPアドレスに対するイーサネット(登録商標)アドレスを解くためにARP探索を必要とするとき、そのIPアドレスがARPキャッシュで発見されないならば遅延が生じる可能性がある。キャッシュの損失があるとき、即ちターゲットIPアドレスがARPキャッシュにエントリをもたないとき、ARPキャッシュはIPルータに損失を通知する。IPルータはその後、IPルートをリクエストした送信モジュールにARPキャッシュ損失が生じたという信号を送る。この時点で、送信モジュールは現在の接続の設定の遅延を選択するか、接続待ち行列の次の接続の設定を試みて、別のルートをリクエストしようとする。送信モジュールがIPルータへのルートリクエストを有しても、ARP探索は継続する。ARP探索のターゲットがアクチブであり、IT10GからのARPリクエストに応答するならば、ターゲットIPアドレスの解決されたイーサネット(登録商標)アドレスは後に使用される可能性があるためにARPキャッシュに付加される。注意:IPルータは多数の目立ったARPリクエストを有することができる。
[個々のルートの表示]
静的ルートの生成後、ユーザは2つの方法でルートテーブルに記憶されたエントリを読み返すことができる。ユーザが所定のルートのターゲットIPアドレスを知っているならば、Show_Routeコマンドコードがそのルートのネットマスクおよびゲートウェイの表示のために使用されることができる。
ルートテーブル内のすべてのエントリを表示するため、Show_Indexコマンドが使用されることができる。Route_Indexレジスタを使用して、システムインターフェースは特殊性の順序でルートをアクセスしてもよい。さらに特別な(ホスト)ルートが最初に表示され、その後に特別性の少ない(ネットワーク)ルートが続く。例えばroute_index0×001を有するIPルートエントリはIPルートリストで最も特別なルートである。注意:デフォルトはインデックスゼロ(0×0000)に記憶される。Route_Foundレジスタはルートが適切に発見された場合に主張され、ルートデータはRoute_Trgt、Route_Mask。Route_Gwレジスタに記憶される。
[解決不能な目的地のキャッシング]
IPルータが目的地ホスト/ゲートウェイに対するイーサネット(登録商標)アドレスを解くことができないとき、ルータは20秒間、その目的地IPアドレスをキャッシュする。その時間中に、ルータがこれらのうちの1つのキャッシュされた解決不能な目的地に対するリクエストを受信するならば、IPルータは直ちにルート故障を有するルートをリクエストしているモジュールに応答する。この解決不能な目的地のキャッシングはアクセス数を共有されたm1メモリに減少することを目的としており、ここでARPキャッシュエントリが記憶される。解決不能な目的地のキャッシングは冗長ARPリクエストを避けるようにも動作する。注意:解決されないアドレスがキャッシュされる時間量はUnres_Cash_Timeレジスタを介してユーザ構成可能である。
[システム例外ハンドラ]
[概要]
以下の説明はシステム例外ハンドラの詳細である。このモジュールはIT10Gハードウェアが直接に処理できないデータが存在するときにはいつでも呼び出される。これは未知のイーサネット(登録商標)タイプのパケット、IGMPパケット、TCPまたはIPオプションなどであってもよい。それぞれのこれらの例外の場合、主要なパーサは例外ケースを検出するときシステム例外ハンドラを動作可能にする。システム例外ハンドラモジュールはデータを記憶し、処理される例外データが存在することをシステムインターフェース(典型的にはホストコンピュータで動作するアプリケーション)に通知し、データをシステムインターフェースへ送るように動作する。
[例外ハンドラブロック図]
図38は例外ハンドラの1構成の概略ブロック図である。
[例外ハンドラの動作理論]
例外メモリはオンチッププロセッサメモリの一部である。例外パケットを発生できる各ソースモジュールはそれら固有の例外バッファ開始アドレスと例外バッファ長レジスタとを有する。このモジュールはFIFOバッファに例外パケットを与え、それをオンチッププロセッサメモリに記憶するように待ち行列する。exception_fifo_full信号は例外FIFOバッファが一杯であることを示すために各呼モジュールへフィードバックされる。このモジュールは一度にただ1つの例外パケットをサービスすることができる。後続する例外パケットが受信される場合、これは先のパケットがメモリに記憶されるまで保持される。
例外パケットはオンチッププロセッサメモリに記憶されるので、ホストコンピュータアクセスはこのモジュールを通して与えられない。
[メモリアロケータ1]
[概要]
このセクションではIPモジュール、ARPキャッシュ、ルートテーブル、オンチッププロセッサにサービスするために使用されるメモリアロケータ(malloc1)について説明する。このアロケータは最初にM1メモリをディスクリートなブロックに分割し、それらをリクエストのときに割当て、フリーにされたブロックをスタックに戻すように動作する。
[動作理論]
malloc1はその動作を開始する前に入力された2つのパラメータを有する必要がある。これらはM1のメモリブロックの全体のサイズと、各メモリブロックのサイズである。1つのみのメモリサイズがこのアロケータでサポートされる。
これらのパラメータの入力後、システムはM1_ControlレジスタでM1_Enableビットを主張する。これが生じたとき、アロケータはM1メモリブロックの上部から開始してブロックアドレスの埋め込みを開始する。即ちM1メモリブロックが全体で4Kバイトの深さであり、ブロックサイズが512バイトであるならば、M1メモリマップは図39に示されているように見える。
4つのアドレスがM1ブロックアドレスに対してM1アドレス位置毎に維持されている。開始ブロックアドレスをメモリに維持することに加えて、Malloc1はまた16エントリキャッシュを含んでいる。初期化時に、第1の16アドレスはそのキャッシュに維持される。ブロックがリクエストされるとき、これらはキャッシュから取り出される。キャッシュ数がゼロに到達するとき、4つのアドレス(1つのメモリ読取)はメモリから読取られる。同様に、キャッシュがアドレスで満杯であるときにはいつでも。4つのアドレスはメモリに書き戻される。これはアロケータが最初にM1メモリからアドレスを読取った後にのみ実施する。
[TX/RX/CB/SAメモリアロケータ]
[概要]
このセクションではソケット送信(malloctx)、ソケット受信(mallocrx)、制御ブロック(malloccb)、SA(mallcsa)メモリで使用されるメモリアロケータを説明する。これらのアロケータはリクエスト時にメモリブロックを割当て、フリーにされたブロックをスタックに戻し、メモリを使用するため調停するように動作する。
[動作理論]
mallocはその動作の開始前に入力された幾つかのパラメータを有する必要がある。これらはMPメモリスペース内の開始および終了アドレスポインタ位置、および各メモリスペース内の各利用可能なブロックを表すビットマップである。2つのサイズのブロック、即ち128バイトと2kバイトがソケットデータメモリで利用可能である。CBメモリは固定した128バイトブロックを有する。すべてのアロケータもまた各メモリサイズのブロックアドレスに対して8エントリキャッシュを利用する。
これらのパラメータの入力後、システムは制御レジスタ中のエネーブルビットを主張する。アロケータはその後メモリブロックを割当て、および割当て解除を開始することができる。
[デフォルトメモリマップ]
図40は一体化されたネットワークスタックデータメモリの256Mバイトのメモリを想定したサンプルメモリマップを示しており、即ちMRXとMTXは共通の物理的メモリバンクを共有している。現在の構成はMRXとMTXの両者で外部DDR DRAMを使用するが、別の構成では、これらのメモリをオンチップで配置するか異なるタイプのメモリ(例えばSRAM)を使用することも可能である。
[ネットワークスタックデータDDRブロック図]
ネットワークスタックデータDDR DRAMは送信および受信データバッファとオンチッププロセッサとの間で共用されている。データのブロック図のフローは図41に示されている。
データDDR DRAMアービトレータ411は異なるリソース間で共用されるDDR DRAMへのアクセスを調停するように動作する。全体的なDDR DRAM412もオンチッププロセッサのメモリスペースへマップされるメモリである。
[MTX DRAMインターフェースおよびデータフロー]
[概要]
以下の説明はmalloctxモジュールとデータDDR調停モジュールとの間のインターフェースの概要である。データフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を説明する。
[データフロー]
3つの異なるアクセスタイプはMTX DRAMでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。malloctx413はこれらのサイクルタイプのそれぞれに対する異なるソースからのリクエストを調停するが、すべての3つのサイクルはデータDDRアービトレータから同時にリクエストされる。mtxarbサブユニットのブロック図が図42に示されている。
MTXメモリに書込まれるデータは最初にFIFOバッファに書込まれ、それからDDR DRAMにバースト書込みされる。
[RX DRAMインターフェースおよびデータフロー]
[概要]
このセクションはmallocrx414と受信ソケットデータDRAM制御装置との間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を示している。
[データフロー]
受信DRAMでは、最高の優先順位がメモリに書込まれているデータに与えられる。これはネットワークスタックがネットワークインターフェースから受信されているデータに追いつかなければならないためである。DRAMへの書き込みは最初にFIFOバッファへ行われる。すべてのデータがFIFOバッファへ書込まれると、制御装置はそれをDRAMへバースト書込みする。ジャンボフレームでは、TCP受信論理装置はバースト書込みリクエストを2Kサイズのチャンクへ分割する。
DRAMからバースト読取されるデータでは、DRAM制御装置はメモリを読取り、PCI制御装置へ供給する1対のピンポンFIFOバッファへリクエストされたデータを書込む。これらのFIFOバッファはDRAMクロックからPCIクロックドメインへデータレートを移行するため必要とされる。
[ネットワークスタックDDRブロック図]
ネットワークスタックDDRはCB、雑メモリ、SAメモリ間で共有される。データのブロック図のフローは図43に示されている。
NS DDRアービトレータは異なるリソース間で共用されたDDRへのアクセスを調停するように動作する。
[MCB DRAMインターフェースおよびデータフロー]
[概要]
このセクションはmalloccbモジュールとNS DDR調停モジュールとの間のインターフェースについて説明する。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングの詳細を説明する。
[データフロー]
2つの異なるアクセスタイプがMCB DRAMに対してサポートされる。これらはバースト読取り、単一アクセスである。malloccbはこれらのサイクルタイプのそれぞれに対して異なるソースからのリクエストを調停するが、両者のサイクルはNS DDRアービトレータから同時にリクエストされる可能性がある。mcbarbサブユニットのブロック図は図44に示されている。
[ネットワークスタックメモリマップ]
図45はネットワークスタックのデフォルトメモリマップを示している。示されているアドレスはバイトアドレスである。
[雑メモリ]
[概要]
以下の説明は512Kバイトの雑メモリバンクの詳細である。このメモリは以下列挙する目的で使用される。
・半分開いた制御ブロック(メイン)、
・TCPポート認証テーブル、
・UDPソースポート使用テーブル、
・TCPソースポート使用テーブル、
・待機時間制御ブロック割当てテーブル、
・設定された制御ブロック割当てテーブル、
・TXメモリブロック割当てテーブル(128および2Kビットブロックの両者)、
・RXメモリブロック割当てテーブル(128および2Kビットブロックの両者)、
・TCP RXからTXへのパケットのFIFOバッファ、
・ソケットデータの有効なビットマップ、
・サーバポート情報、
・SAエントリ割当てテーブル。
[メモリ組織および性能]
雑メモリはCBメモリと共用される。大部分のリソースはアクセスで最小にするために256ビットワードのデータをアクセスする。
[記憶されたデータの定義]
[半分開いた制御ブロック]
これらは半分開いたTCP接続に対する制御ブロックである。各制御ブロックは大きさが64バイトであり、全体で4Kの制御ブロックが存在する。それ故、半分開いた制御ブロックに必要なバイト数は4K×64=256Kバイトである。
[TCPポート認証テーブル]
このテーブルは接続を受け入れるために認証されるTCPポートの追跡を維持する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。代わりの構成では、TCPポート認証テーブルおよびUDPおよびTCPソースポート使用テーブルがホストコンピュータに維持されることができる。
[UDPソースポート使用テーブル]
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なUDPPポートを追跡する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。このテーブルはローカルUDPサービスポートおよび使用されることができるポートを含むべきではない。
[TCPソースポート使用テーブル]
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なポート数を追跡する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。
[待機時間制御ブロック割当てテーブル]
これは待機時間制御ブロックの割当てテーブルである。32Kの待機時間制御ブロックのそれぞれの1ビットを維持する。それ故、この割当てテーブルは32K/8=4Kバイトを使用する。このモジュールは全部で16ビットデータバスを使用する。
[設定された制御ブロック割当てテーブル]
これは設定された制御ブロックの割当てテーブルである。64Kの制御ブロックのそれぞれの1ビットを維持する。それ故、この割当てテーブルは64K/8=8Kバイトを使用する。
[TXソケットデータバッファブロック割当てテーブル]
このテーブルは2Kバイトのブロック割当てテーブルと128Kバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた送信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは72Kバイトに固定される。これは最大で475Kの128バイトブロックを可能にする。このレベルで、2Kバイトブロックの数は98Kである。
[RXソケットデータバッファブロック割当てテーブル]
このテーブルは2Kバイトのブロック割当てテーブルと128Kバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた受信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは72Kバイトに固定される。これは最大で475Kの128バイトブロックを可能にする。このレベルで、2Kバイトブロックの数は98Kである。
[TCP RX FIFOバッファ]
このFIFOバッファはTCP受信論理装置からTCP送信論理装置へのパケット送信リクエストの追跡を維持するために使用される。各TCP RX FIFOバッファエントリは、全部で4バイト(4つのフラグ、26ビットアドレス、2つの未使用ビット)で幾つかの制御フラグおよび制御ブロックアドレスから作られる。このTCP RX FIFOバッファは1024ワードの深さであり、それ故1024×4=4Kバイトを必要とする。
[ソケットデータの利用可能なビットマップ]
このビットマップはホストシステムに送信される準備がされているデータを有する64Kソケットを表している。各ソケットで1ビットを維持する。それ故、このビットマップは64K/8=4Kバイトを使用する。
[SAエントリ割当てテーブル]
これはSAエントリの割当てテーブルである。各64K SAエントリで1ビットを維持する。それ故、この割当てテーブルは64K/8=4Kバイトを使用する。
[サーバポート情報]
このデータベースはLISTEN状態で開かれているTCPポートに対するパラメータ情報の記憶に使用される。これらのサーバポートはこれらが開かれるまでそれらに関連するCBをもたないので、ポート特定パラメータはこの領域に維持される。各ポートエントリは2バイトからなり、64Kの可能なポートが存在する。それ故、このデータベースは64K×2=128Kバイトを必要とする。
[雑メモリマップ]
雑メモリに使用されるメモリマップは構成可能である。デフォルト設定は図46に示されている。ブロックはスケールされない。
[雑メモリの動作理論]
[モジュールの初期化]
CPUが雑メモリアービトレータを起動する前に初期化する必要があることはほとんどない。デフォルトメモリマップが使用されるならば、CPUはMisc_Mem_ControlレジスタでMM_Enableビットを主張することによりアービトレータを使用可能にできる。
非デフォルトメモリマップが使用されるならば、すべてのベースアドレスレジスタはアービトレータが使用可能になる前に初期化されなければならない。プログラムされたベースアドレスが任意のオーバーラップするメモリ領域を発生しないことを確実にすることがホストコンピュータソフトウェアの役目である。これをチェックするハードウェアは与えられない。
[CPUアクセス]
CPUは雑メモリの任意の位置をアクセスできる。これは最初にMM_CPU_Addレジスタ(0×1870−0×1872)へのアドレスにおいてプログラミングし、バイトを読取るかMM_CPU_Dataレジスタ(0×1874)へ書込むことによってこれを行う。アドレスレジスタはデータレジスタがアクセスされる毎に自動的にインクリメントする。
[MIBサポート]
[概要]
このセクションではIT10Gネットワークスタックに組込まれたMIBサポートを説明する。これはレジスタの定義、動作理論、MIBが何に使用されるかの概要を含んでいる。
[SNMPおよびMIBの前置き]
SNMPはSNMP管理局がネットワーク接続された装置の統計およびその他の情報を得ることを可能にし、装置が構成されることを可能にする管理プロトコルである。装置で動作するソフトウェアはエージェントと呼ばれる。エージェントはUDPソケットの上部で動作し、SNMP管理局からのリクエストを処理する。エージェントはまたある事象が装置で生じたときにSNMP管理局へトラップを送信することもできる。SNMP RFCは、共にグループ化されるとき管理情報ベース(MIB)と呼ばれる標準的な情報オブジェクトのセットを文書化している。ベンダはまたRFCで規定されている応用可能な標準的MIBに加えて、これらがサポートする固有のMIBも規定することができる。
標準的なMIBは特定されるタイプの大部分の装置が提供しなければならない情報を規定する。幾つかの情報はSNMPエージェントソフトウェアにより完全に処理されることができ、残りはオペレーティングシステム、ドライバおよび装置からの幾らかのレベルのサポートを必要とする。SNMPサポートは主要な転送可能物、ハードウェア、埋設されたソフトウェア、ドライバの3つのすべてで行われる。
大部分のケースでは、ハードウェアサポートはハードウェアで構成するネットワーク化層に関連するあるカウンタの統計的な情報収集に限定される。割込みもまたある事象でトリガーされることができる。埋設されたソフトウェアの開発はまたICMP、例外処理等のソフトウェアで実行される層に対するカウンタをサポートする。さらに、埋設されたソフトウェアはARPテーブルエントリ、TCP/UDPソケット状態、およびその他の非カウンタ統計データのような事柄について報告できるようにハードウェアにより生成されたデータベースに問い合わせることができる。ドライバのサポートは、関連するオブジェクトをSNMPエージェントに戻すことができるAPIへ埋設されたプラットフォームをインターフェースし、SNMPエージェントの幾らかのレベルの構成を可能にすることに焦点が置かれる。
[MMUおよびタイマモジュール]
[概要]
以下の説明は汎用目的のタイマとシステムで使用されるMMUの概要を提供する。
[CPUタイマ]
先のタイマからカスケードされるか独立している4つの汎用目的の32ビットタイマが設けられる。すべてのタイマはシングルショットまたはループモードで動作されることができる。さらに、各タイマにより使用される前に主要なコアクロックを分割することのできるクロックプリスケーラが設けられる。これは最小のコード変化を異なるコアクロック周波数に対して可能にする。
[タイマテストモード]
各個々のタイマは対応するタイマ制御レジスタにTimer_Testビットを主張することによりテストモードにされることができる。このモードが起動されると、32ビットカウンタは8ビットクロックデバイダ設定の3つのlsbにしたがって異なるレートで増加する。
[オンチッププロセッサMMU]
オンチッププロセッサはプロセッサの4Gバイトメモリスペースを異なる領域に分割するためにMMUを使用する。各領域はベースアドレスとアドレスマスクで個々に特定されることができる。領域はまたオーバーラップしてもよいが、この場合共用されたメモリ領域から読み返されるデータは予測不可能である。
[オンチッププロセッサDRAMインターフェースおよびデータフロー]
[概要]
このセクションではオンチッププロセッサとネットワークスタック(NS)データDDR調停モジュールとの間のインターフェースを説明する。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
[データフロー]
3つの異なるアクセスタイプがオンチッププロセッサDRAMでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。さらに、連続する単一アクセスがDRAMを放棄せずにオンチッププロセッサにより行われるようにロックが適用されることができる。オンチッププロセッサメモリのアービトレータはこれらのサイクルタイプのそれぞれで異なるソースからのリクエストを調停するが、すべての3つのサイクルはNS DDRアービトレータから同時にリクエストされる。レジスタビットを介して使用可能にする必要があるとき、オンチッププロセッサ自体だけがロック特性を使用すると仮定される。
[命令/状態ブロックの動作理論]
[概要]
以下の説明は、ホスト、オンチッププロセッサ、ネットワークスタック間を通過する命令ブロック(IB)と状態ブロック(SB)の動作理論の概要である。それはまたMDLの概念をカバーする。
個々のIBおよびSBは待ち行列に連結される。IB待ち行列とSB待ち行列が存在する。各待ち行列はホストコンピュータコンポーネントとオンチッププロセッサコンポーネントとを有する。また、各IB待ち行列は関連するSB待ち行列を有する。一致するIBとSB待ち行列は共にチャンネルを形成する。これは図47に示されている。
注意:すべての状態および命令待ち行列の長さは16バイトの倍数でなければならず、DWORD整列される。
好ましい実施形態は4つのチャンネルをサポートする。各待ち行列(IBとSBの両者)では、待ち行列記述子が存在する。これらの記述子は待ち行列の長さと共に、待ち行列の存在する場所と、読取および書込みポインタを詳細に示している。各待ち行列は円形のFIFOバッファとして扱われる。各待ち行列を規定するパラメータはホストメモリ利用を構成するパラメータに対してホストレジスタインターフェース中のレジスタと、オンチッププロセッサメモリ利用を規定する全般的なネットワークスタックレジスタスペースのレジスタに分割される。待ち行列記述子のフォーマットは以下のテーブルで示されている。ここでリストされているアドレスオフセットは待ち行列記述子レジスタの開始に関連する。
命令ブロック待ち行列の処理フローは図48に示されている。これはまたIBパーサモジュールとの関連も示している。
[SBパシング]
ネットワークスタックと、オンチッププロセッサと、ホストコンピュータとの間を通過する状態ブロックのデータフローを示すブロック図が図49に示されている。
SBタイマ閾値は統合ネットワークアダプタハードウェア中の主要な割込み集約機構である。割込み集約は統合ネットワークアダプタとホストコンピュータとの間の割り込みの数を減らし、割り込みの減少またはその集合はデータ処理能力を増加する。
HWは一般的なSBをオンチッププロセッサへ送信し、ソケット特定SBを直接的にホストコンピュータへ送信できる。ホストコンピュータの状態メッセージはソケット設定、RX DMA、CB_Create、Socket_RST状態メッセージを含んでいる。
[HWからホストへのSB]
ソケット特定事象が生じるとき、CBの所有者はソケットCB構造中のHSビットを検査することにより決定される。ソケットがホストコンピュータに属すならば、CBチャンネル番号もCBから読取られる。そのチャンネル番号は事象通知と共にHW状態メッセージ発生装置(statgenモジュール)491へ送信される。
statgenモジュールは適切なSBを形成し、そのSBを4つのうちの1つのDMA FIFOバッファ492へ位置させる。これらのFIFOバッファは物理的にオンチッププロセッサメモリ中に位置し、オンチッププロセッサSB FIFOバッファアドレスとオンチッププロセッサSB FIFOバッファ長とにより特定される。
[HWからオンチッププロセッサへのSB]
非ソケット特定事象、即ち例外イーサネット(登録商標)パケットが生じるとき、statgenモジュールは適切なSBを発生し、それをオンチッププロセッサメモリに規定される1つの状態メッセージ待ち行列に送信する。割込みはstatgen_intが使用可能になるならば、このときにオンチッププロセッサに対して発生されることができる。ハードウェアからオンチッププロセッサへ規定されるただ1つの状態メッセージ待ち行列だけが存在し、すべてのSBはこの1つの待ち行列へ行く。
SB待ち行列は実際にオンチッププロセッサメモリに存在する。エントリがこのメモリ領域に書込まれるとき、それらはSTAT_READ_DATAレジスタ(ネットワークスタック全般レジスタ0×005C−0×005F)を介して読取られるように自動的にオンチッププロセッサのレジスタFIFOバッファへ引き込まれる。オンチッププロセッサはまたどのぐらいの量のデータが0×005AでSTAT_FIFO_FILLEDレジスタを読取ることにより利用可能であるかを見るためにポールすることもできる。このレジスタは待ち行列で利用可能な二重ワード数を戻す。
[オンチッププロセッサからホストコンピュータへのSB]
オンチッププロセッサがSBをホストのSB待ち行列の1つへ送信することを必要とするとき、これをstatgen(状態発生)ハードウェアモジュールを介して送信する。この場合、オンチッププロセッサはそのメモリにSBを発生し、このSBの開始アドレス、SBのチャンネル番号、statgenモジュールに送信されるCBの長さをプログラムする。HWはその後、SB(または複数のSB)をホストへの適切なSB待ち行列へ転送する。このようにしてオンチッププロセッサとHWからのSBはSB DMAエンジン493を供給する同一のSB待ち行列中で混合される。
オンチッププロセッサはSBが割込みを介してまたは状態ビットのポーリングにより適切なSB待ち行列へ転送されたことを通知されることができる。この機能の任意のパラメータを書込む前に、オンチッププロセッサはstatgenモジュールが任意の先のSBリクエストの転送を完了していることを確実にすべきであり、即ちオンチッププロセッサはSBビットがstatgenコマンドレジスタで主張されていないことを確証すべきである。
[MDL処理]
MDL(メモリ記述子リスト)は最初にホストコンピュータメモリからDDR DRAMのオンチッププロセッサメモリへDMAされる。オンチッププロセッサはMDL DDRアドレスに基づいて、MDLハンドルをホストへ戻す。
MDLハンドル、MDLへのオフセット、転送長を含んでいるSendMDL32/64IBはIBパーサにより解析され、以下の動作を行う。
MDLの第1のエントリを読取り、特定されたオフセットがこのエントリ内であるかを理解する。この決定をオフセットと第1のMDLエントリの長さと比較することにより行う。
第1のMDLのエントリ内に入らないならば、次のMDLエントリを読取る。最終的に正しいMDLエントリを発見するとき、これはMDL中のアドレスを使用してTX DMA転送を待ち行列する。転送はオフセットが開始する点から多数のMDLエントリに及ぶ。
オンチッププロセッサがIBを獲得するとき、オンチッププロセッサはオフセットをソケットCBにプログラムする。CBがこの情報を獲得するとき、これはデータをDMAできる。代りに、ホストコンピュータが意外に早くオフセットを知るならば、オフセットを意外に早くCBへプログラムできる。
RX DMA状態メッセージが発生される前に、DMAされなければならないバイト数を特定する転送閾値は依然としてMDLモードで応用可能である。
[命令ブロックおよび状態メッセージ]
[概要]
以下の説明は命令ブロックおよび状態メッセージフォーマットの詳細である。ホストはIT10Gハードウェアへコマンドを転送するためにIBを使用し、IT10Gハードウェアは情報をオンチッププロセッサとホストコンピュータへ転送するために状態ブロックを使用する。
[命令ブロック構造]
ハードウェアが直接解析する唯一のIBは種々の形態のSend_Commandである。
[HW解析された命令]
これらの命令はデータを送信し、所定のソケットの受信パラメータを閉じるかポストするようにIT10Gハードウェアにリクエストするために使用される。TCP、UDP、32ビットおよび64ビットホストコンピュータメモリアドレシングを処理するためにSEND命令には4つの形態がある。
[iSCSIサポート]
IT10Gの1実施形態はiSCSI PDUヘッダをアセンブルするためにホストコンピュータを使用するが、別の実施形態ではiSCSI PDUをアセンブルし処理するためにIT10Gハードウェアとオンチッププロセッサを使用する。両実施形態を以下説明する。
[iSCSIサポート]
[概要]
このセクションはiSCSI PDUヘッダをアセンブルするためにホストコンピュータを使用するIT10GのiSCSIのハードウェアサポートを説明している。IT10Gハードウェアは送信および受信のためにiSCSI CRCの計算をオフロードし、ハードウェアは送信のために固定したインターバルのマーカ(FIM)を使用してiSCSIフレーミングを行う。フレーミングは現在受信用にはサポートされない。
[動作理論]
iSCSIプロトコルはハードウェア機能の定義の規範的な文書であるIETF iSCSIインターネット草案に規定されている。iSCSIプロトコルはTCP/IPバイトストリームで伝送されるプロトコルデータユニット(PDU)中のSCSIコマンドをカプセル化する(SCSIコマンドはコマンド記述子ブロックまたはCDBである)。SCSIコマンドは幾つかの標準で文書化されている。ハードウェアはiSCSIヘッダセグメントとiSCSIデータセグメントをホストiSCSIドライバから受取り、iSCSI PDUを送信するように準備する。ハードウェアはiSCSI PDUを受信し、iSCSI CRCを計算し、その結果をホストiSCSIドライバへ送付する。
ハードウェアは主としてiSCSI PDUの外部フォーマットに関連され、これはiSCSIヘッダセグメントとiSCSIデータセグメントとを含んでいる。iSCSI PDUは必要な基本ヘッダセグメント(BHS)と、それに続くゼロ以上の追加ヘッダセグメント(AHS)と、それに続くゼロ以上のデータセグメントからなる。iSCSI CRCはオプショナルであり、ヘッダダイジェストおよびデータダイジェストとしてiSCSI PDUに含まれる。説明された構成はiSCSIヘッダおよびデータが別々にされ、ホストコンピュータに付加的なメモリコピーを必要とせずに、ホストコンピュータメモリにコピーされることを可能にする。
[iSCSI送信]
[概要]
iSCSI送信データパスのブロック図が図50に示されている。
[iSCSI制御モジュール]
iSCSI制御モジュール501はTX DMAエンジンモジュール502、CBアクセスモジュール503、Statgenモジュール504から制御信号を受信する。
iSCSI制御モジュールは制御信号をCBアクセスモジュール503、iSCSI CRC計算モジュール505、FIM挿入モジュール506へ提供する。iSCSI制御モジュールは任意のiSCSI CRCワードと任意のマーカを含んでいるiSCSI PDU長を計算し、iSCSI CRCワードと任意のマーカを含んでいるiSCSI PDU長をXMTCTL MUXモジュールへ提供する。
ホストiSCSIドライバはホストメモリ中で完全なiSCSI PDUヘッダをアセンブルする。ホストiSCSIドライバはその後、32ビットアドレスまたは64ビットアドレスのいずれが必要とされるかに応じて、TCP送信32iSCSI IBまたはYCP送信64iSCSIIBを生成する。ホストiSCSIはその後、TCP送信iSCSI IBを送信し、これはオンチッププロセッサにより受信される。ホストiSCSIドライバがTCP送信iSCSI IBをオンチッププロセッサに送信する効果は、iSCSI PDUをホストコンピュータメモリのバッファの連結されたリストへDMA転送することを開始するようにiSCSI制御モジュールに命令することである。
BHS、任意のAHS、任意のデータセグメントを含んでいるiSCSI PDUはTCP送信32iSCSI IBまたはTCP送信64iSCSI IBを使用して転送される。
iSCSI PDUが完全に単一のDMA転送中に含まれないならば、iSCSI PDUヘッダセグメントの最後またはiSCSI PDUデータセグメントの最後にiSCSIを挿入しなければならないiSCSI CRC計算モジュールを設計することは困難である。
iSCSI PDUが48バイト(BHS)程度に小さいとき、各iSCSI PDUに対して単一のIBを使用するオーバーヘッドは単一のDMA転送に対するiSCSI PDUを合体し、その後再度処理するためにiSCSI PDUを分離するオーバーヘッドよりも大きくない。
第1の転送ブロックは1つの完全なiSCSI PDUヘッダまたは複数のヘッダ、即ち0、1、またはそれより多くのAHSにより後続されるBHSでなければならず、すべてのヘッダは第1の転送ブロックに含まれる。
CRC計算モジュールがiSCSI PDUヘッダの最後にiSCSI ヘッダCRCを挿入することができるように、第1の転送ブロックが1つの完全なiSCSI PDUヘッダまたは複数のヘッダであることが必要である。
iSCSI制御モジュールはTCP送信32iSCSI IBまたはTCP送信64iSCSI IBが少なくとも一つの転送ブロックを含んでいることをチェックすべきである。これは正しい動作では必要な条件である。この条件が満たされないならば、エラーであり、モジュールは適格に欠ける。
iSCSI制御モジュールはDMA転送を行うことを許可するようにDMAエンジンモジュールにリクエストすることによりiSCSI PDUのDMA転送を開始する。DMA転送を行うためのiSCSI制御モジュールのリクエストが受入れられるとき、iSCSI制御モジュールはDMAエンジンへのアクセスをロックされる。DMAエンジンはiSCSI IB中のすべての転送ブロックがサービスされるまでロックされる。iSCSI IBのすべての転送ブロックはすべてのiSCSIヘッダおよびiSCSIデータ情報がDMAによりホストメモリからハードウェアへ転送されるときにサービスされる。DMAエンジンはすべてのiSCSIヘッダおよびiSCSIデータ情報がDMAによりホストメモリからハードウェアへ転送されるときにiSCSI制御モジュールに信号を送る。
iSCSI制御モジュールはFIMおよびCRC動作の実行を容易にし、iSCSIログイン相を考慮するためにDMAエンジンへのアクセスをロックされる。
iSCSI IB、iSCSI CRC選択ビット1およびiSCSI CRC選択ビット0の2ビットは、iSCSI CRC計算モジュールがiSCSIヘッダまたはiSCSIデータまたはその両者またはその両者以外のiSCSI CRCを計算すべきであるならば、iSCSI制御モジュールに信号を送るためにホストiSCSIドライバにより設定される。これらの2つのiSCSI CRC選択ビットは1および0の任意の組合せを取ってもよい。
iSCSI IBは、ホストメモリ中のバッファのリンクリスト(LL)に対応し、転送ブロックとして知られている、アドレス及び長さの対のセットを含んでいる。ホストメモリのバッファのリンクされたリストはiSCSIヘッダおよびiSCSIデータ情報を記憶する。TCP送信iSCSI IBに含まれている転送ブロックはバッファのリンクされたリストを介してiSCSIヘッダとiSCSIデータを見つける場所についてのiSCSI制御モジュール情報を提供する。各iSCSI IBの第1の転送ブロックがホストメモリのiSCSIヘッダを指し、iSCSI IB中の残りの転送ブロックがホストメモリのiSCSIデータを指している。
iSCSI制御モジュールはCRCワードを含むがマーカを除外するiSCSI PDU長を取り、任意のCRCワードと任意のマーカを含んでいるiSCSI PDUの長さを計算する。XMTCTL MUXモジュールはXMTCTLモジュールにXMTCTLモジュールへ入力されるデータの長さを提供するためのCRCワードとマーカを含んだiSCSI PDUの長さを必要する。
XMTCTL MUXモジュールはiSCSI PDUをMTXバッファに記憶する前に、任意のCRCワードと任意のマーカを含んでいるPDU長を必要とする。
iSCSI制御モジュールはTCP送信32iSCSI IBまたはTCP送信64iSCSI IBに含まれ、任意のCRCワードを含むが任意のマーカを除外するiSCSI PDU長を使用することによりiSCSI PDUの長さを計算する。
任意のCRCワードと任意のマーカを含んでいるPDU長の計算には以下の情報を使用する。
・FIMインターバル、バイト中のマーカインターバル、
・現在のFIMカウント、最後のマーカが挿入され、ソケットCBに記憶された以降のバイト数、
・TCP送信32iSCSI IBまたはTCP送信64iSCSI IBに含まれ、CRCワードを含むがマーカを除外するPDU長。
2つのカウンタ、即ちPDU長カウンタとマーカカウンタを使用して、任意のCRCワードおよび任意のマーカを含んでいるPDU長の計算は以下に等しい。
1.マーカカウンタをゼロに初期化する。
2.PDU長カウンタを現在のFIMカウントに初期化する。
3.PDU長カウンタを任意のCRCワードを含むが任意のマーカを除外するPDU長に対してチェックする。
4.PDU長カウンタが任意のCRCワードを含むが任意のマーカを除外するPDU長よりも大きいならば、ループを出る。
5.FIMインターバルをPDU長カウンタへ付加し、マーカカウンタを1だけ増加する。
6.ステップ3へ進む。
7.マーカカウントから計算されるマーカの長さを付加することにより任意のCRCワードと任意のマーカを含んでいるPDU長を計算する。
[別のFIMアルゴリズム]
1.total_marker_lengthをゼロに初期化する。
2.length_counterを次のマーカ(FIM_interval−current_FIM_count)に初期化する。
3.length_counter>PDU_lengthであるならば、ステップ7へ進む。
4.marker_sizeだけ、total_marker_lenをインクリメントする。
5.length_counter=length_counter+FIM_interval。
6.ステップ3へ進む。
7.xmitctlはtotal_marker_len+PDUサイズを得る。
マーカが正確にPDUの後に入り、現在のFIMカウント=0であるケースを正確に処理することを確実にしなければならないならば、最終マーカを位置させなければならないことに注意する。
前述の計算では、
FIMインターバルはCBから来る。
Current_FIM_countはCBから来る。
total_marker_lengthはFIM挿入モジュールに対する時間変数である。
length_counterはFIM挿入モジュールの時間変数である。
marker_sizeはバイトによるFIMマーカの全体のサイズである。
図51はiSCSI送信フローチャートを示している。
[iSCSI CRC計算モジュール]
DMA TXモジュールはiSCSIヘッダセグメントとiSCSIデータセグメントからなるiSCSI CRC計算モジュールへiSCSI PDUを提供する。
任意の挿入されたCRCワードを含んでいるPDUであるiSCSI CRC計算モジュールからの出力はFIM挿入モジュールへ与えられる。
iSCSI CRC計算モジュールはiSCSI PDUヘッダとiSCSI PDUデータとの両者に対してiSCSI CRC値を計算する。
CRC計算モジュールはiSCSI PDUヘッダの最後またはiSCSI PDUデータの最後またはその両者またはその両者以外にiSCSI CRCを挿入する。iSCSI CRCの計算はTCP送信iSCSI IBのiSCSI CRC選択ビット1とiSCSI選択ビット0により制御され指示される。
CRC計算モジュールへの入力は第1の転送ブロックでは0、1、またはより多くのAHSが後続するBHSであり、第2の転送ブロックでは0または1のデータセグメントが後続するBHSである。
DMAエンジンは転送ブロックの境界のiSCSI計算モジュールに信号を送らなければならない。iSCSI計算モジュールは第1の転送ブロックが開始し終了する場所と、最後の転送ブロックが終了する場所を知らなくてはならない。iSCSIヘッダCRCはヘッダCRCが使用可能になるならば、常に第1の転送ブロックの最後にiSCSI PDUを挿入される。iSCSIデータCRCはデータCRCが使用可能になるならば、常に最後の転送ブロックの最後にiSCSI PDUを挿入される。
IBの第1の転送ブロックが完全なiSCSIヘッダ(BHSプラス0、1またはより多くのAHS)であることは臨界的である。
[FIM挿入モジュール]
FIM挿入モジュールは固定したインターバルのマーカ(FIM)をiSCSI PDU中に挿入し、これは固定したインターバルのマーカをiSCSI送信ストリーム中へ挿入することに等しい。
FIM挿入モジュールがアクチブであるときFIM挿入モジュールはマーカだけを挿入する。FIM挿入モジュールは現在のiSCSIソケット(iSCSIソケットCB)に対応するCBでFIMが設定されるときのみアクチブである。
FIM挿入モジュールは各iSCSIソケットに対してiSCSI CRC計算モジュールにより挿入されることのできる任意のCRCバイトを含んでいる各iSCSIストリームの4バイトワード数のカウントの追跡を維持できなければならない。FIM挿入モジュールはiSCSIソケットCB中に2つのFIM値、即ちFIMインターバルと現在のFIMカウントを記憶することにより4バイトのワード数の追跡を維持する。これらの各フィールド、FIMインターバルと現在のFIMカウントは4バイトワードで測定される。
FIMインターバルと現在のFIMカウントは16ビットフィールドで記憶されることができる。
FIMインターバルまたは現在のFIMカウントがオーバーフローするならば、適格な故障機構が存在すべきである。
iSCSIログイン相を含むiSCSI接続セットアップを使用可能にするために、マーカが使用されるならば、マーカの挿入はiSCSIログイン相の末尾の後の第1のマーカインターバルでのみ開始される。しかしながら、マーカの含有および除外機構がiSCSIログイン相の長さを知らずに動作することを可能にするために、第1のマーカはマーカのないインターバルがマーカを含んでいるかのようにiSCSI PDUストリームに置かれる。したがってすべてのマーカは次式により与えられるバイト位置でiSCSI PDUストリーム中に現れる。
[(MI+8)*n−8]
ここでMI=FIM(マーカ)インターバルであり、n=整数である。
一例として、マーカインターバルが512バイトであり、iSCSIログイン相がバイト1003で終了するならば(第1のiSCSIの位置されたバイトは0である)、第1のマーカはそのストリームのバイト1031の後に挿入される。
iSCSI PDUストリームはiSCSIインターネット草案に規定されているが、インターネット草案で使用される用語はTCPストリームである。FIMはマーカ自体を除くTCPストリームのiSCSIにより位置されるあらゆるバイトを含んでいるペイロードバイトストリームカウンティングを使用する。これはTCPがカウントするがiSCSIにより開始されない任意のバイトを除外する。
ホストiSCSIドライバはiSCSI FIMインターバルコマンドブロックを発生することにより、iSCSIソケットCBのFIMインターバルと初期FIMカウントを初期化する。オンチッププロセッサはiSCSI FIMインターバルコマンドブロックを受信する。オンチッププロセッサはFIMインターバルをソケット特定TX_FIM_Intervalレジスタと、iSCSIソケットCBのFIMインターバルフィールドへ書込む。オンチッププロセッサは初期FIMカウントをソケット特定TX_FIM_COUNTレジスタと、iSCSIソケットCBの現在のFIMカウントへ書込む。
ホストiSCSIドライバはiSCSIセットFIM状態コマンドブロックを発生することによりiSCSIソケットCBのFIM状態を制御する。オンチッププロセッサはiSCSIセットFIM状態コマンドブロックを受信する。オンチッププロセッサはその後、FIM状態をiSCSIソケットCB中のFIMONビットに書込む。
FIMインターバル、初期FIMカウント、FIM状態の初期化後、FIM挿入モジュールはiSCSI IBを待機する初期化状態にある。
FIMがアクチブでありながら、現在のiSCSIソケットに対するFIM状態、FIMカウント、またはFIMインターバルを変化しようとする試みはエラーである。
FIM挿入モジュールがiSCSI IBを待機している状態にあり、iSCSI IBが受信されるとき、FIM挿入モジュールはソケットCB中のFIMONビットと現在のFIMカウントを読取る。iSCSIソケットCB中のFIMONビットが設定されるならば、FIM挿入モジュールはアクチブである。FIM挿入モジュールがアクチブであるならば、FIM挿入モジュールはFIMインターバルカウンタをiSCSIソケットCBからの現在のFIMカウントに設定する。FIM挿入モジュールがアクチブではないならば、FIM挿入モジュールはiSCSI IBを待機する状態に戻る。
FIM挿入モジュールは今や、CRC計算モジュールから受信されたデータの各4バイトワードをカウントする状態にある。iSCSI PDU中の各4バイトワードがiSCSI CRC計算モジュールにより挿入される任意のCRCバイトを含んでいるFIM挿入モジュールにより受信された後、FIM挿入モジュールは1だけFIMインターバルカウンタをデクリメントする。FIM挿入モジュールはその後、各4バイトワードをカウントする状態に戻る。
各4バイトワードをカウントする状態にありながらFIM挿入モジュールがiSCSIソケットからのデータの走査を完了するとき、FIM挿入モジュールは現在のFIMインターバルカウンタ値を現在のiSCSIソケットCBの現在のFIMカウントへ保存する。FIM挿入モジュールはiSCSI IB中のすべての転送ブロックがサービスされたときiSCSIソケットからのデータの走査を完了する。この点で、FIM挿入モジュールはiSCSI IBを待機する状態にある。
各4バイトワードをカウントする状態にありながら、FIMインターバル挿入モジュールはFIMインターバルカウンタがゼロに到達するときiSCSI PDU中にマーカを挿入する。iSCSI PDU中にマーカを挿入した後、FIM挿入モジュールはFIMインターバルカウンタをFIMインターバルへリセットし、ソケットCBから読取り、その後、4バイトワードをカウントする状態に戻る。
マーカは、次のiSCSI PDUヘッダまでiSCSIストリームでスキップするバイト数に等しい次のiSCSI PDU開始ポインタを含んでいる。FIM挿入モジュールは各マーカに対する次のiSCSI PDU開始ポインタを計算しなければならない。次のiSCSI PDU開始ポインタを計算するため、FIM挿入モジュールは現在のPDUのバイト数をカウントし、現在のiSCSI PDUの開始から現在のiSCSI PDUバイトカウントであるマーカ挿入点までを測定しなければならない。現在のiSCSI PDUのバイト数をカウントするため、FIM挿入モジュールはiSCSI PDUバイトカウンタを使用する。現在のiSCSI PDUバイトカウントに加えて、FIM挿入モジュールは現在のPDUヘッダの開始に関して次のiSCSI PDUヘッダの開始位置を知らなければならない。次のiSCSI PDUヘッダの開始と、現在のiSCSI PDUヘッダの開始との差は現在のiSCSI PDU長に等しい。FIM挿入モジュールは以下のようにして次のiSCSI PDU開始ポインタを計算する。
次のiSCSI PDU開始ポインタ=現在のiSCSI PDU長−現在のiSCSI PDUバイトカウント
次のiSCSI PDU開始ポインタは32ビットの長さである。
iSCSIインターネット草案はPDUデータセグメントサイズに対して交渉された最大値MaxRecvPDUDataSizeを512バイトから((224**)−1)バイト(16777216−1バイトまたは約16Mバイト)までに規定する。
(バイトで測定された)現在のiSCSI PDU長は少なくとも25ビットであるべきである。
FIM挿入モジュールに任意のCRCワードを含むが任意のマーカを除外するiSCSI PDU長を与える方法が幾つか存在する。FIMモジュールにPDU長を提供する1つの方法はiSCSIホストドライバがPDU長を計算する方法である。
iSCSIホストドライバは48バイト(BHS長)+総AHS長+データセグメント長の和として、iSCSI PDUヘッダCRCまたはiSCSI PDUデータCRCを除外する現在のiSCSI PDU長を計算する。
総AHS長とデータセグメント長は既にこれらがBHSに含まれるときソフトウェアで計算されなければならない。
ホストiSCSIドライバはその後、任意のCRCワードを含むがマーカを除外する現在のiSCSI PDU長を計算する。任意のCRCワードを含むがマーカを除外する現在のiSCSI PDU長は、iSCSI PDUヘッダCRCまたはiSCSI PDUデータCRCを除外するiSCSI PDU長に等しく、iSCSI PDUヘッダCRCが使用可能になるならば+4バイト、iSCSIデータCRCが使用可能になるならば+4バイトに等しい。
ホストiSCSIドライバはTCP送信32iSCSI IBまたはTCP送信64iSCSI IBに任意のCRCワードを含むがマーカを除外する現在のiSCSI PDU長を挿入する。TCP送信32iSCSI IBとTCP送信64iSCSI IBの説明を参照されたい。
[XMTCTL Muxモジュール]
XMTCTL muxモジュールはDMA Tx FIFOバッファからTCPデータを受信し、FIM挿入モジュールからiSCSIデータを受信する。
XMTCTL muxモジュールはデータをDMA TX FIFOバッファまたはFIM挿入モジュールからXMTCTLモジュールへ提供する。
機能:XMTCTL muxモジュールはXMTCTLモジュールへのデータ入力を多重化するように動作する。
XMTCTL muxモジュールはデータ長をXMTCTLモジュールへ提供する。
iSCSIデータの長さはCRC計算モジュールにより挿入される任意のCRCバイトを含まなければならない。
iSCSIデータの長さはFIM挿入モジュールにより挿入される任意のマーカも含まなければならない。
XMTCTLモジュールはMSS等に基づいて、データをTCPパケットの適切な寸法に分離するために入力データのサイズを使用する。XMTCTLモジュールはMTXメモリバッファに記憶された適切なサイズのパケットを生成する。各MTXバッファは別々のTCPパケットに対応する。
XMTCTL muxモジュールはデータを128ビット幅のフォーマットのXMTCTLモジュールへ提供する。データはdav/grantハンドシェイクを使用してXMTCTLモジュールへ送られる。
[iSCSI受信]
[概要]
受信DMAエンジンはiSCSI受信データパスを含んでいる。受信DMAデータパスはiSCSI CRCを計算し、最後のiSCSI CRCをiSCSI CRCメッセージを有するRX DMA状態を介してホストiSCSIドライバへ通過する。
[iSCSI受信の動作理論]
ハードウェアはiSCSI CRCの計算をオフロードする。ホストiSCSIドライバはiSCSI CRC機構の正しい動作を確実にするために受信データパスを制御する。
iSCSI CRC情報は2つの場所でハードウェアとホストiSCSIドライバとの間で転送される。最後のiSCSI CRCはハードウェアからホストiSCSIドライバへ送信されたiSCSI CRCメッセージを有するRX DMA状態の一部分である。iSCSI CRCシードはホストiSCSIドライバからハードウェアへ送信されるTCP受信iSCSI32IBとTCP受信iSCSI64IBの両者の一部分である。
ホストiSCSIドライバはiSCSI CRC計算機構が正しく動作するように維持するためにTCP受信iSCSI32IBとTCP受信iSCSI64IB中に正確なサイズのバッファをポストしなければならない。
iSCSI記録相中、ホストiSCSIドライバは正常のTCPソケットと同じ方法でiSCSIソケットを扱う。iSCSI記録相が完了するとき、iSCSI接続はフル特徴相に入る。
iSCSI接続がフル特徴相に入るとき、接続はiSCSIヘッダまたはiSCSIデータ或いはその両者中にiSCSI CRC情報を含んでいる可能性のあるiSCSI PDUを転送する準備が整っている。
RX DMAエンジンはTCP受信iSCSI32IBとTCP受信iSCSI64IBにより特定される散乱集合リストからiSCSI CRCメッセージを有するRX DMA状態を介して計算される最後のiSCSI CRCを送信する。
一度、iSCSI記録相が完了すると、ホストiSCSI CRCドライバはiSCSI PDUヘッダの正しいサイズの受信バッファをポストする。ホストiSCSIドライバはその後、iSCSI PDUヘッダを解析する。ホストiSCSIドライバはその後、データセグメントが存在するならばiSCSI PDUデータセグメントの正しいサイズの受信バッファをポストする。ホストiSCSIドライバはそれぞれ次のiSCSI PDUデータセグメントの正しいサイズのバッファをポストし続ける。DMAエンジンは各iSCSI PDUヘッダセグメントとiSCSI PDUデータセグメントのiSCSI CRCを計算する。
iSCSI PDUヘッダの場合、ホストiSCSIドライバはiSCSI基本ヘッダセグメント(BHS)サイズ(48バイト)と、ヘッダCRCがiSCSIログイン相中に交渉するならばiSCSI PDU CRC(4バイト)の和のサイズをポストする。BHSはその後、存在するならば後続のiSCSI PDUヘッダを含むDMAにより転送される。
BHSのDMA転送が完了するとき、iSCSI CRCメッセージを有するRX DMA状態はハードウェアにより計算される最終的なiSCSI CRCの残りを含む。ホストiSCSIドライバはハードウェアにより計算される最終的なiSCSI CRCの残りを含むiSCSI CRCメッセージを有するRX DMA状態を受信する。ホストiSCSIドライバはその後、その値がこのiSCSI多項式の予測される余りに一致することを確実にするためにRX DMA状態の最後のiSCSI CRCをチェックする。ヘッダCRCがiSCSI記録相中に交渉されないならば、ホストiSCSIドライバはiSCSI CRCメッセージを有するRX DMA状態で戻された最後のiSCSI CRCの残りを無視する。
BHSには追加ヘッダセグメント(AHS)が後続する。BHSのバイト4はTotalAHSLength、即ちAHSの全長を含んでいる。AHSを含み、それ故長さが48バイトを超えるiSCSI PDUヘッダの場合、ホストiSCSIドライバはAHSに対する付加的なTCP受信iSCSI32IBまたはTCP受信iSCSI64IBを発生する。
iSCSI CRCが使用可能になるならば、ホストiSCSIドライバは算出されたiSCSI CRC値を、TCP 受信iSCSI32IBまたはTCP受信iSCSI64IB中のiSCSI CRCシードフィールドを使用してシードする。iSCSI CRCシードフィールドの使用はiSCSI PDUヘッダCRCの残りが正確にチェックされることを可能にする。
iSCSI CRC計算の継続が必要とされない場合、TCP 受信iSCSI32IBまたはTCP受信iSCSI64IB中のiSCSI CRCシードはゼロに設定されなければならない。
iSCSI PDUのデータセクションに対してiSCSI CRCをリクエストするとき、ホストiSCSIドライバはiSCSI CRCを記憶するための余分な4バイトデータバッファを特定しなければならない。この4バイトデータバッファは最終転送ブロックとして挿入され、TCP受信iSCSI32IBまたはTCP受信iSCSI64IBでリンクリストの最後に余分な4バイトを効率的に付加する。4バイトのデータバッファはiSCSI PDUデータセグメントのiSCSI CRCがiSCSI PDUデータストリーム外で転送されることを可能にする。4バイトバッファの使用は図52に示されている。
[RX DMAの動作理論]
ホストドライバはハードウェアからRX DAV状態メッセージを受信するときに利用可能なRXデータが存在することを知っている。このRX DAV状態メッセージの通知は通常のTCP接続と同じである。RX DAV状態メッセージ中のCBハンドルはiSCSIに関連するCBを指している。ホストドライバはその後、RXデータを記憶するようにバッファを割当て、総リンクリストバッファサイズはホストドライバが受信することを予測するデータ量プラス予測されるならばCRCに等しくなければならない(図52参照)。またiSCSI PDUはそのフォーマットにあることが予測されるので、総バッファサイズは常にdword境界で整列されなければならない。ホストドライバはまたCRCシードを32’hffffffffに初期化しなければならない。
RX DMA動作が行われるとき、ハードウェアは最初にソケットCBの付属からiSCSI CRCシードを抽出する。ハードウェアはまたメインCB構造からホスト再送信(HR)ビットを抽出する。HRビットはこれがiSCSIソケットであるか否かを他のハードウェアへ示す。ハードウェアはその後、データを転送しながら新しいCRCを計算する。
データストリームはPDUヘッダまたはデータセグメントに対する予測されるiSCSI CRC値を含んでも含まなくてもよい。データストリームがiSCSI CRCダイジェストを含まないならば、ハードウェアにより計算されるiSCSI CRCは動作しているiSCSI CRCとしてCBの付属へ記憶して戻される。RX−DMA状態メッセージは発生されてもされなくてもよい。RX DMA状態メッセージが発生されるならば、状態メッセージはこの動作しているiSCSI CRCを含む。データストリームがiSCSI CRCダイジェストをその終端部に含んでいるならば、iSCSI CRCハードウェアはiSCSI CRCダイジェスト(これは予測されるiSCSI CRC値である)を含んでいるPDUセグメントにわたってiSCSI CRCを計算する。PDUセグメントは破損せず、iSCSI CRCダイジェストが正確ならば、ハードウェアにより計算される最終的なiSCSI CRC値は常に固定したiSCSI CRCの余りに等しい。
一度すべてのポストされたバッファリストが埋められると、Statgenモジュールは最後のiSCSI CRCの余りを含むiSCSI CRCメッセージを有するRX DMA状態を発生する。
オンチッププロセッサはTCP受信iSCSI32IBまたはTCP受信iSCSI64IBを処理するように動作する。IBの処理中、オンチッププロセッサは新しいCRC計算の開始を示すために32’hffffffffである可能性があるiSCSI CRCシード、または先のRX DMA状態メッセージからのiSCSI CRCシードをソケットCBの付属へ書込む。このようにしてiSCSI CRCシードの書込みはiSCSI CRCの正しい値を設定する。
標準的な受信32および受信64lbsを使用し、RX DMAエンジンにしたがう他の非iSCSI機構では、CRC機構は無視され、CRCシードは無意味であり、スキップされることができる。
RX DMA動作が行われる前、ピアは最終的にDMAによりホストメモリへ転送されるデータペイロードを含む1以上のTCPパケットを送信する。ピアのネットワークスタックの動作方法に応じて、iSCSIがすべてのPDUがdword境界でそれ自体整列することを必要としても、このペイロードは非dword整列される境界に分割されることができる。DMA動作は直接的に各TCPパケットのペイロードのサイズに一致しない。ペイロードが非dword整列されるならば、DMA動作は非dword整列され、この非dword整列されたデータストリームを通じてCRCを計算することが必要とされる。問題はiSCSI CRCハードウェアがすべてのデータがdword整列されることを予測することである。
iSCSI CRCハードウェアがこの窮地に遭遇するとき、非整列のデータストリームを通してiSCSI CRCを計算し続ける。最後に到達するとき、これは非二重ワード整列された1−3バイトをCBの付属へ記憶する。それはまた有効なバイト数も記憶する。例えばデータストリームが15バイトの長さであるならば、ハードウェアは最後の3バイトを記憶し、有効なバイト数は3である。データストリームが32バイトの長さであるならば、このデータストリームはdword整列されているので有効なバイト数は0である。CBの付属に記憶されている情報は検索され、次のDMA転送の前に挿入される。
[iSCSI命令ブロック]
TCP送信iSCSI命令ブロック(IB)はiSCSIソケットを使用してiSCSI PDUを送信するために使用される。TCP送信iSCSI32IBの長さはこのIBがDMA転送で使用される1以上の転送ブロックを含むことができるので可変である。転送ブロックはアドレス(ヘッダまたはデータ)と転送長の対からなる。
iSCSI CRC選択ビット1とiSCSI CRC選択ビット0はiSCSI制御モジュールによりiSCSI CRCの計算を決定する。iSCSI CRC選択ビット0=1ならば、iSCSI制御モジュールはiSCSIヘッダにわたってiSCSI CRCを計算する。iSCSI CRC選択ビット=1ならば、iSCSI制御モジュールはiSCSIデータにわたってiSCSI CRCを計算する。iSCSI CRC計算はiSCSIヘッダとiSCSIデータの両者、iSCSIデータのみ、iSCSIヘッダのみ、またはそれ以外にわたってiSCSI CRC計算エンジンにより行われることができる。
iSCSIの総DMA長はiSCSI送信ブロックによりDMAされる必要のあるデータ全体の長さである。これは計算される必要のあるCRC長を含まない。
TCP送信iSCSI32IBの第1の転送ブロックのアドレスおよび転送長の対はホストメモリ中のiSCSIヘッダを指している。TCP送信iSCSI32IBの第2および任意のさらに別の転送ブロックはホストメモリ中のiSCSIデータを指している。
BHSと任意のAHSと任意のデータセグメントを含んでいるiSCSI PDUはTCP送信32iSCSI IBまたはTCP送信64iSCSI IBを使用して転送される。
TCP送信iSCSI32IBの第1の転送ブロックは完全な単数または複数のiSCSI PDUヘッダ、0、1、またはより多くのAHSが後続するBHSでなければならず、すべての単数または複数のヘッダはTCP送信iSCSI32IBの第1の転送ブロックに含まれなければならない。
強調するために異なる方法で同じことを言うと、ホストiSCSIドライバはTCP送信iSCSI32IBでiSCSIヘッダセグメントを有する任意のiSCSIデータセグメントを含まなければならない。iSCSIデータセグメントはTCP送信iSCSI32IB中で、iSCSIヘッダセグメントとは別の転送ブロックに存在しなければならない。
TCP送信iSCSI32IBの各転送ブロックのホストメモリアドレスは32ビットである。64ビットアドレスが必要とされるならば、TCP送信iSCSI64IBが使用されるべきである。
明確に図示された3つの転送ブロックを有するTCP送信iSCSI32IBのフォーマットを以下説明する。
CRC選択ビット0とCRC選択ビット1は各転送ブロックの処理を同様にするために第1の転送ブロックの未使用部分ではなくIB中の別々のワードに記憶される。
TCP受信iSCSI32IBはiSCSIソケットで受信するのに使用されるようにバッファをポストするために使用される。
TCP受信iSCSI32IBの長さはこのIBがDMA転送に使用される随意選択的な数の転送ブロックからなるので可変である。TCP受信iSCSI32IBの転送ブロックはアドレスと転送長の対からなる。
iSCSI CRCシードはDMAおよびiSCSI CRC計算が開始する前にiSCSI CRCエンジンをシードするために使用される。iSCSI CRCシードはiSCSI CRCがリクエストされるならば、32’hffffffffに設定されなければならない。iSCSI CRCがリクエストされないならば、シード値のセットは不適切である。
説明:iSCSI CRC計算が必要とされないならば、iSCSI CRCシードをゼロに設定する必要はない。
TCP受信iSCSI32IB中の各転送ブロックのアドレス長は32ビットである。64ビットのアドレシングでは、TCP受信iSCSI64IBが使用されなければならない。
[別のiSCSI構成]
先の説明はiSCSI PDUヘッダを組立てるためにホストコンピュータを使用するIT10Gの動作を詳細にしている。別の実施形態はIT10GハードウェアとオンチッププロセッサがiSCSI PDUを組立て処理することを可能にする。この別の実施形態を次に説明する。
このセクションはオンチッププロセッサの使用によるiSCSIのハードウェアサポートを説明する。高レベルから、ハードウェアは送信されたパケットのCRCおよび固定したインターバルのマーカ(FIM)をオフロードする。受信されるデータパスでは、PDUヘッダをオンチッププロセッサまたはホストコンピュータへDMAし、PDUのデータセクションをホストへDMAする能力はCRCチェックと共にサポートされる。これはホストコンピュータで付加的なメモリコピーを必要とせずに、iSCSIヘッダとデータが別々にされ、ホストコンピュータメモリにコピーされることを可能にする。
[ヘッダ記憶装置(HSU)]
送信されるiSCSI PDUに対しては、オンチッププロセッサはそのメモリでパケットのヘッダを構築するように動作する。オンチッププロセッサは発生するiSCSI PDUの種類を示すためにホストコンピュータからiSCSI命令ブロック(IB)を受信する。PDUに関連するSCSIデータが存在する場合、バッファのリンクリストもIBを介して与えられる。
一度、オンチッププロセッサがPDUヘッダを発生すると、それはオンチッププロセッサメモリからMTXメモリ(送信データバッファ)へヘッダを転送するためにHSUモジュールを使用する。HSUはまた必要ならばヘッダのCRCも計算する。
PDUに関連するSCSIデータが存在しないならば、HSUモジュールが使用可能になるとすぐに、オンチッププロセッサメモリからMTXメモリへデータの転送を開始する。必要ならば、CRCもまた計算されFIMは挿入される。
PDUで転送されるSCSIが存在するならば、DMAの2つのモード、即ちワンショットおよびリンクリストが与えられる。リンクリストモードが使用されるならば、HSUは第1のリンクリスト(LL)エントリを検索し、ホストDMA転送をリクエストする。DMAエンジンがHSUに第1の転送が終了したことを示すとき、HSUはARMメモリからMTXメモリへのヘッダの転送を開始する。丁度DMAされたデータはヘッダの最後に添付される。またこの時間中に、次のLLエントリが検索され、DMAはリクエストされる。一度HSUがホストDMA転送を承認されると、LLのすべてのエントリがサービスされるまで(少なくともTX側の)DMAエンジンへのアクセスをロックする。これはFIMおよびCRC論理装置がデータパスで実行することを容易にする。
[CRC計算モジュール]
このモジュールはPDUヘッダとデータセクションの両者のCRC値を計算するように動作する。CRCはその後、対応するフィールドに添付される。このモジュールを供給するデータは(ヘッダデータに対しては)HSUを介してオンチッププロセッサメモリ、または(SCSIデータに対しては)DMA TX FIFOから来ることができる。CRC計算装置からの出力はFIMモジュールに与えられる。
[FIM挿入モジュール]
このモジュールはFIMをPDUへ挿入するように動作する。これは初期オフセット、インターバルカウント、PDU長をHSUユニットから受信する。FIMを挿入するとき、データの何等かのリパックが必要とされよう。このモジュールの別の機能は送信されるPDUの全長を決定することである。この長さはPDU+任意のCRCバイト+任意のFIMのプログラムされた長さである。この長さはその後、XMTCTLモジュールへ送られ、それはPDUを適切なサイズのTCPパケットに分割するように動作する。
[XMTCTL Mux モジュール]
このモジュールはXMTCTLモジュールへ入力されるデータを多重化するように動作する。データはDMA TX FIFOバッファまたはFIM挿入モジュールから直接的である。いずれかのパスにより、多重化論理装置はパケットの全長を示し、また128ビット幅のフォーマットのデータを提供する。データはdav/grantハンドシェークを使用してXMTCTLモジュールヘ送られる。
[iSCSI受信サポート]
[概要]
iSCSI受信データパスのブロック図が図53に示されている。
[TCPRXモジュール]
このモジュール531は受信されたTCPパケットを解析するように動作する。iSCSIパケットが到着するとき、これは128バイトまたは2KバイトバッファでMRXメモリに記憶されるので、任意の他のTCPデータと同様に最初に扱われる。ソケットのCBのビット(WORD 0×D、ビット[30])はこのソケットがホストまたはオンチッププロセッサにより所有されているか否かを示す。ソケットがオンチッププロセッサにより所有されているならば、データは自動的にホストにDMAされない。代りに状態メッセージが発生され、正常のネットワークスタック状態メッセージ待ち行列を介してオンチッププロセッサに送信される。
[MRXメモリへのオンチッププロセッサのアクセス]
オンチッププロセッサがソケットにiSCSIデータが受信されていることを通知されたとき、CPUアドレスとmallocrxレジスタセットのデータレジスタを介してMRX中のデータを読取ることができる。オンチッププロセッサはその中のヘッダから受信されたPDUタイプを決定するためにMRXメモリ532を主に読取っていることが予測される。オンチッププロセッサがヘッダをそのメモリへ移動することを決定したならば、これはLDMAモジュールを使用する。データをホストへDMAおよびPDUすることを決定したならば、HDMAモジュール533を使用する。
[RXISCSIモジュール]
オンチッププロセッサがMRXメモリからそれ自身のローカルメモリへデータを移動しようと望んでいるとき、RXISCSIモジュールを使用する。データのCRCは選択的にこの転送中にチェックされる。動作が完了するとき、割込みまたは状態メッセージが発生される。
データが多数のMRXバッファをスパンするならば、転送は2つのリクエストに分割されなければならない。この一例が図54に示されている。
この場合、第1の転送はMRXソースアドレスとしてAdd1、転送長としてLength1によりプログラムされる。LAST_BLKビットもまた第1の転送用に設定されない。動作が完了するとき、部分的なCRC結果もまた状態メッセージ中に戻される。オンチッププロセッサはその後、ローカルDMA(LDAM)をAdd2およびLength2によりプログラムし、ヘッダ転送を終了するようにLAST__BLKビットを設定する。動作が連続しているならば、CRCシードはプログラムされる必要はない。そうでなければ、状態メッセージ中に戻されたCRCの部分的結果は第2の転送のためにCRCシードとしてプログラムされるべきではない。CRCバイトだけが第2のバッファに残留する場合、長さ0の転送は使用可能になったCRCチェックで使用されるべきである。
[オンチッププロセッサで開始されたHDMA]
オンチッププロセッサが受信されたSCSIデータをホストへ送信しようと望むとき、それはホストDMA(HDMA)エンジンを転送長と共にMRXおよびホストメモリの両方に開始アドレスでプログラムする。代りに、オンチッププロセッサはバッファのリンクリストが位置されるそのメモリ中の位置を特定できる。
リンクリストは255までのエントリを含むことができる。DMA転送中、HDMAモジュールはCRC値をチェックするように随意選択的にプログラムされることができる。このオプションが使用可能になるならば、DMA転送長はCRCバイトを含んではならない。また、CRCチェックがリクエストされるとき、随意選択的なCRC開始シードはプログラムされることができる。
SCSIデータが多数のMRXバッファを横切って分割されるならば、ホストへのDMA転送は別々のリクエストに分割されなければならない。この状態は図55に示されている。
この場合、HDMAは最初に開始MRXメモリアドレスとしてのAdd1と、転送長としてのLength1とでプログラムされなければならない。Last_Host_Blkビットはまた第1の転送用に設定されてはならない。DMA動作が完了するとき、状態メッセージが発生される。CRCチェックもまたリクエストされるならば、状態メッセージはまた部分的なチェックサム値を戻す。オンチッププロセッサはその後、HDMAエンジンをAdd2およびLength2によってプログラムし、データ転送を終了するようにLAST_Host_Blkビットを設定する。これらの2つの転送が連続しているならば、CRCシード値はプログラムされる必要はない。そうでなければ、状態メッセージ中で戻される部分的なCRCの結果は第2のDMA転送リクエストの一部としてプログラムされる。CRCバイトだけが第2のバッファに残る場合、長さ=0とCRC_En=1の転送が使用されなければならない。
[オンチッププロセッサのMRXバッファの解放]
オンチッププロセッサが所有するソケットでは、オンチッププロセッサはもはや使用されないMRXバッファをMRXバッファの割当て解除装置へ解放するように動作する。これはMRX_128_Block_AddまたはMRX_2K_Block_Addレジスタへ解放されるブロックに対するベースアドレスを書込み、その後、解放コマンドを対応するMRX_Block_Commandレジスタへ発生することによってこれを行う。
[IPSecサポートアーキテクチャ]
[概要]
以下の説明は、IPSECに対してハードウェアで実行されるサポートの詳細である。この構成はプロトコルの暗号化、暗号解読、認証機能のコンピュータ特性を処理するために別々のモジュールを仮定し、これらの特性のすべてはよく知られ理解されている。構成はまたIKEのようなよく知られよく理解され使用されている任意のキー交換プロトコルがホストコンピュータでアプリケーションとして処理されることも仮定している。勿論、キー交換機能を一体化することも可能である。
この説明はIPSECサポートを送信および受信セクションに分割する。これは共通のセキュリティ関連(SA)ブロックを共用する以外に、2つのモジュールが相互に独立して動作するので、行われる。
IPSec特性:
・SA毎のアンチリプレイサポート、
・ゼロ、DES、3DESアルゴリズムと、暗号ブロック連鎖(CBC)モードにおけるAESの128ビットアルゴリズム、
・ゼロ、SHA−1、MD−5認証アルゴリズム、
・192ビットまでの可変長暗号化キー、
・160ビットまでの可変長認証キー、
・Jumboフレームサポート、
・時間および転送される総データに基づいたSA満了の自動処理、
・IPsecポリシー施行、
・例外パケットの生成と状態通知とを含むIPsec例外処理。
IPsecプロトコルおよびモード:
・転送AH、
・転送ESP、
・転送ESP+AH、
・トンネルAH、
・トンネルESP、
・トンネルESP+AH、
・転送AH+トンネルAH、
・転送AH+トンネルESP、
・転送AH+トンネルESP+AH、
・転送ESP+トンネルAH、
・転送ESP+トンネルESP、
・転送ESP+トンネルESP+AH、
・転送ESP+AH+トンネルAH、
・転送ESP+AH+トンネルESP、
・転送ESP+AH+トンネルESP+AH。
[セキュリティ関連ブロックフォーマット(SA)]
専用のメモリ構造は各IPSEC接続における情報を記憶するために使用される。AHとESPプロトコル、およびRXとTX SAの両者(RX SAのカバーデータは受信されTX SAのカバーデータは送信される)に対しては別々のブロックが存在する。それ故、データの送信および受信の両者のためにAHおよびESPの両者を使用するソケット接続は多数のSAブロックを必要とする。AHは1SAブロックを必要とし、ESPは2つのブロック(ESP−1とESP−2)を必要とする。秘密保護されるソケット接続の総数はSAブロックに対して与えられたメモリの総量にしたがう。
Txデータパスは単一の転送でトンネルおよび転送モードをサポートできる。最悪の場合のシナリオでは、AHとESPの両者がトンネルおよび転送モードの両者で使用されるならば、6つのSAブロックが共に連結されることができる。送信されるデータに対しては、ソケットCBはトンネル/転送TX AHまたはトンネル/転送TX ESP−1 SAへのポインタを含んでいる。両プロトコルが送信されるデータで使用される場合には、CBはTX AH SAへのリンクを含み、これはTX ESP−1 SAへのリンクを含んでいる。
Rxデータパスは単一の転送でAHとESP解読をサポートしない。Rxデータパスは単一の転送でトンネルおよび転送モードをサポートしない。暗号化されたパケットは反復して解読される。受信されたデータでは、RX_SA_LUTはRX AHまたはTX ESP−1 SAへのポインタを含んでいる。
図56はSAブロックフローを示している。
[クライアントソケットの生成]
アプリケーションがIPSEC保護されたクライアントソケットを生成する必要があるとき、以下のシーケンスを実行しなければならない。
・すべての応用可能なSAパラメータをIPSEC SA特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。SAハンドルはRX SA LUTへ挿入される。
・IPSECは新しいSAハンドルを戻す。
・このSAハンドルをソケット特定レジスタへ書込む。
・ソケット構造2レジスタのIPSECビットの設定を含んだすべての応用可能なソケットパラメータをCPソケット特定レジスタへ書込む。
・commit_socketコマンドを発生する。
TX SAへのリンクはオープンCBに記憶されている。ソケットは現在使用する準備が整っている。
[サーバソケットのSA生成]
アプリケーションがIPSEC保護されたサーバソケットを生成する必要があるときには、以下のシーケンスを実行しなければならない。
・すべての応用可能なSAパラメータをIPSEC SA特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。SAハンドルはRX SA LUT中へ挿入される。
・IPSECは新しいSAハンドルを戻す。
・このSAハンドルをソケット特定レジスタへ書込む。
・ソケット構造2レジスタのIPSECビットの設定を含んだすべての応用可能なソケットパラメータをCPソケット特定レジスタへ書込む。
・commit_socketコマンドを発生する。
コミットソケットコマンドは、サーバポート情報テーブルエントリの生成に加えて、HO CBも生成する。HO CBはその中にIPSECビットセットを有する。このビットはHO CBが同一のHASHへ偶然に復号する別の入来するSYNにより再使用されないようにする。TX SAハンドルはHO CB中に記憶される。ソケットは現在使用の準備が整っている。
注意:この場合、前述したように、HO CBは同一のHASHを有するSYNが受信されるときに重ね書きされない。HO CBはソケットが設定された状態に転移されオープンCBが生成されるときにデプリケートされる。しかしながら、ソケットが設定された状態に到達できなかった場合、ホストはHO CBをマニュアルでデプリケートするように動作する。これはHO CBハンドルをHO_CBハンドルレジスタに入力し、その後Deprecate_HOCBコマンドを発生することによりこれを行う。この状態のホストは関連するSAブロックをデプリケートしなければならない。
[SA連結]
SAブロックはリンク有効ビットとリンクフィールドとを有し、これは別のSAを指している。CPUは必要ならば、多数のSAをリンクするためにこのフィールドを使用できる。CPUはSAブロックを連結するために以下のシーケンスを実行しなければならない。
・連結されるSAブロックによりSA_Linkレジスタを構成する。
・CFG1レジスタにLink_Valビットを設定する。
・連結されるSAブロックによりSA_Handleレジスタを構成する。
・“更新SA”コマンドを発生する。
[SAデプリケーション/割当て解除]
TxまたはRx SAブロックはCBがデプリケートされるときに自動的にデプリケートされるのではない。CPUは使用されていないSAブロックの追跡を維持してこれらのSAブロックをデプリケート/割当て解除するための“SA無効化”コマンドを発生する。
SAが満了するとき、HWはマスクされていないならば、割込みを発生する。満了されたSAブロックはメモリから割当てを解除されない。この事象はまた満了されたSAのSAハンドルを含んでいる状態メッセージを発生する。CPUこのSAを更新するためにこのハンドルを使用でき、またはCPUはそのSAブロックをデプリケート/割当て解除するための“SA無効化”コマンドを発生できる。
[TX AH転送SAブロックフォーマット]
図57はTX AH転送SAブロックフォーマットを示している。
[TX ESP−1転送SAブロックフォーマット]
図58はTX ESP−1転送SAブロックフォーマットを示している。
[TX ESP−2転送SAブロックフォーマット]
図59はTX ESP−2転送SAブロックフォーマットを示している。
[TX AHトンネルSAブロックフォーマット]
図60はTX AHトンネルSAブロックフォーマットを示している。
[TX ESP−1トンネルSAブロックフォーマット]
図61はTX ESP−1トンネルSAブロックフォーマットを示している。
[TX ESP−2トンネルSAブロックフォーマット]
図62はTX ESP−2トンネルSAブロックフォーマットを示している。
[RX AH SAブロックフォーマット]
図63はRX AH SAブロックフォーマットを示している。
[RX ESP−1 SAブロックフォーマット]
図64はRX ESP−1 SAブロックフォーマットを示している。
[RX ESP−2 SAブロックフォーマット]
図65はRX ESP−2 SAブロックフォーマットを示している。
[セキュリティ関連ブロックフィールドの定義]
[SAタイプ]
これらのビットはブロックが表すSAブロックのタイプを特定するために使用され、診断サポートのために与えられる。復号は以下の表で示されている。
Figure 2010063110
上記の表に示されていないすべての他の復号は将来使用するために保留されている。
[SAバージョン]
これらのビットはSAのバージョン数を特定し、診断目的用に与えられる。すべてのSAブロックタイプの現在のバージョンは0×1である。
[XV、RV(有効な送信/受信SA)]
これらのビットはSAブロックが有効であり使用されることができることを示している。
[XA、RA(エネーブルな送信/受信認証)]
これらのビットは認証がこのプロトコルに対して使用可能になり、このソケットのパケットで使用されるべきであることを示している。対応する認証アルゴリズムおよびキーフィールドもまた有効である。TX/RX AH SAでは、このビットは常に設定されるべきである。TX/RX ESP SAでは、これは随意選択的である。
[XA_ALG、RA_ALG(送信/受信認証アルゴリズム)]
これらのビットは認証に使用されるアルゴリズムを示している。可能な選択肢が以下の表にリストされている。
Figure 2010063110
示されていないすべての復号は将来使用するために保留されている。
[XE、RE(送信/受信暗号化エネーブル)]
これらのビットは暗号化がこのソケットのパケットに対して使用されるべきであり、暗号化キーおよび暗号化アルゴリズムフィールドが有効であることを示している。このビットはTX/RX ESP SAに対してのみ規定されている。
[XE_ALG、RE_ALG(送信/受信アルゴリズム)]
これらのビットは暗号化に使用されるアルゴリズムを示している。可能な選択肢が以下の表にリストされている。
Figure 2010063110
示されていないすべての他の復号は将来使用するために保留されている。
[RAR(受信アンチリプレイエネーブル)]
このビットはアンチリプレイアルゴリズムが受信されたパケットで使用されるべきであることを示している。
[XTV、RTV(送信/受信タイムスタンプ有効)]
これらのビットはタイムスタンプフィールドがSAで有効であり、タイムスタンプが満了するとき、SAブロックは古いと考えられるべきであることを示している。
[XBV、RBV(送信/受信バイトカウント有効)]
これらのビットはバイトカウント限定フィールドがSAで有効であり、バイトカウントがこの値に到達するとき、そのSAブロックが古いと考えられるべきであることを示している。
[XSV、RSV(送信/受信シーケンス限定有効)]
これらのビットはシーケンス番号フィールドが0×FFFFFFFFをラップするとき、SAブロックは古いと考えられるべきであることを示している。
注意:xTV、xBVまたはxSVビットがすべて設定されないならば、SAブロックは永続的であると判断され、決して満了しない。
[RDC(受信目的地IPチェックエネーブル)]
このビットは任意のパケットの目的地IPアドレスがこのSAの目的地IPアドレスフィールドに一致しなければならないことを示している。
[RSC(受信SPIチェックエネーブル)]
このビットはIPSECヘッダのSPIフィールドがこのSAの目的地IPアドレスフィールドに一致しなければならないことを示している。
[RTR(到達した/ディスエーブルされた受信タイムスタンプの透かし限定)]
このビットが設定されないならば、タイムスタンプの透かしチェックが行われることができる。これが状態メッセージを発生するとき、さらに透かし状態メッセージが送信されないようにこのビットが設定される。
[LV(リンク有効)]
このビットはSAブロックがこのSAにリンクされていることを示している。このビットが有効であるとき、リンクフィールドは次のSAブロックのSAハンドルを含んでいる。
[SPI番号]
これはプロトコルに関連するSPIである。TX SAでは、このSPIはプロトコルヘッダに含まれている。RX SAでは、このSPIは受信されたデータパケットの対応するフィールドに対して比較される。
[シーケンス番号]
これはプロトコルに関連するシーケンス番号である。AHとESP SAは異なる次官に満了するので、シーケンス番号は2つのプロトコル間で異なっている。TX SAでは、このシーケンス番号は、SAが生成され、SAブロックを使用して送信される各パケットに対して1だけインクリメントされるときに0×00000000にリセットされる。受信されたパケットでは、このフィールドはソケットで受信される最後のシーケンス番号を表し、パケットリプレイでチェックするために使用される。
[認証キー]
このパラメータはプロトコルの認証に使用されるキーである。キーが160ビットよりも小さいならば、lsb正しいとされるべきである。
[暗号化キー]
このパラメータはIPSECパケットの暗号化に使用されるキーであり、TX/RX ESP SAに対してのみ規定される。192ビットよりも小さいビットを使用するアルゴリズムでは、キーはlsb正しいとされるべきである。
[タイムスタンプ]
これはSAブロックが古いと考えられるときの将来のタイムスタンプである。SAが生成されるときに初期化される。パケットが送出または受信されるとき、現在の自由動作するミリ秒のタイムスタンプはこの時間と比較される。時間がこのタイムスタンプに一致するかそれ以上であるならば、SAブロックは古いと考えられる。
[バイトカウント]
このパラメータはSAが初期化されるときに設定される。SAブロックを使用して送出されることのできる最大のバイト数を決定する。HWはこれをカウンタをデクリメントカウンタに対する初期番号として使用する。パケットがこのSAで送信または受信されるときに、HWがこのバイトカウントをデクリメントする。バイトカウントがゼロに達するとき、SAは古いと考えられる。この限度が使用されるならば、xBVビットは設定されるべきである。
[リンク]
このフィールドはソケットに関連される次のSAブロックを指している。
[IPsecモジュール]
IPsecは以下の4つの主なモジュールに分割される。
・IPSECX、
・IPSECR、
・IPSECREGS、
・IPSECメモリ。
IPSECXはIPSECの送信データパス論理を含んでいる。データおよび制御パケットは最初に内部IPSECXメモリに転送される。暗号化エンジンはこれらのパケットを読取り、これらを暗号化し、これらのパケットをIPSECXメモリへ書戻す。これらのパケットはその後、送信するためにイーサネット(登録商標)送信機へ転送される。
IPSECRはIPSECの受信データパス論理を含んでいる。任意の入来するパケットはIPSECタイプのパケットに対して解析される。パケットがIPSECパケットであるならば、内部IPSECRメモリに転送される。解読エンジンはこれらのパケットを解読し、このパケットをIPSECRメモリへ書戻す。このパケットは読取られ、ネットワークスタックに注入して戻される。このとき、このパケットは解読されるので、パーサはIPSECパケットとして識別せず、これは正常なTCP/IPパケットとして識別される。
IPSECREGSはCPUに対するプログラム可能なレジスタを含んでいる。これらのレジスタのプログラミングにより、CPUはSAを生成し、更新または消去する。このモジュールは診断の目的で、間接的なメモリアクセスを内部メモリに対して行う。
IPSECは以下の図に示されているように2つのSRAMを使用する。両者のメモリは9KBサイズのパケットを保持できる。IPSECメモリサイズを以下示す。
・IPSECXメモリ:592×32ビット×4デュアルポート(9472バイト)、
・IPSECRメモリ:1168×32ビット×2デュアルポート(9344バイト)。
図66はIPSEC論理装置の全体的なフローを示すブロック図である。
[IPSEC送信データパス(IPSECX)]
[概要]
以下の説明は送信IPSECデータパスの詳細である。IPSEC暗号化/認証エンジンはそれが呼び出される前に行われるパケットで動作する。データフローを概説するブロック図は図67に示されている。
[IPSEC送信されたパケットのデータフロー]
[TXDATCB/TCPACK]
IPSEC保護されたソケットに対する送信データは最初に通常のソケットと同一方法でMTX DRAM671に記憶される。TXDATCB/TCPACKモジュール672はパケットに対するイーサネット(登録商標)、IP、TCP、任意のIPSECヘッダを形成するように動作する。このモジュールはいずれのヘッダか、および必要とされるヘッダのフォーマットを決定するために適切なSAブロックから情報を読取る。各ソケットはそれに関連するCB構造を有する。CBは各ソケットの古い情報を含んでいる。CB構造内に、使用されるSAブロックのポインタが存在する。多数のSAブロックを必要とするソケットでは、そのCBはすべてのAHおよびESP1 SAブロックへのポインタを含んでいる。
TXDATCB/TCPACKモジュールはパケットのヘッダをMTX DRAM中のバッファに書込む。パケットがIPSEC処理を必要とすることが分かると、TXDATCB/TCPACKモジュールは処理する準備が整ったパケットが存在することをIPSECXIFモジュール673に通知する。ヘッダ発生プロセスの開始時に、TXDATCB/TCPACKモジュールがIPSECXIFブロックが満杯であることに気づいたならば、後に処理するために送信待ち行列にパケットを戻す。
[TCPACK]
データパケットに加えて、TCPユーティリティパケット(ACK、SYN、FIN)もまた暗号化されることができる。これらのパケットはTCPACKモジュールから来る。図67の前述のデータパスには示されていないが、このモジュールもまたCBとSAメモリをアクセスした。
注意:ローカルソケットが利用可能ではないために発生されたRSTパケットはIPSEC保護されない。保護される唯一のRSTは打切り終結に使用されるかまたはSYNに応答して受信された違法のSYN/ACKに応答するパケットである。これらの両者のRSTパケットは通常のRSTパケット待ち行列ではなくTCPACKモジュールにより形成される。
[IPSECXIF]
このモジュールはパケットを(TCPDATCBを介して)MTX DRAMまたはTCPACKからIPSECX内部メモリへ転送するように動作する。この内部メモリは576×128ビットとして組織される。TXDATCBまたはTCPACKからパケットを得たとき、このモジュールはデータをIPSECメモリへ転送し始める。これはSAに適用可能な情報を暗号化エンジンに送るためにそれをSAレジスタからも獲得する。読取ポインタはこのモジュールがIPSECXメモリ内の現在のパケットを重ね書きしないようにするためにIPSECTXからフィードバックされる。
[暗号化/認証エンジン]
このモジュール674は暗号化および認証をパケットに付加するように動作する。これはIPSECXIFモジュールにより提供されたパラメータを取り、IPSECXメモリ675に記憶されているパケットを処理する。認証と暗号化の両者がパケットで必要とされるならば、このモジュールはパケットをIPSECTXモジュールへ転送する前の両特性前であると仮定される。暗号化されたデータはソースパケットと同一メモリ位置に書込まれるべきである。処理が終了するとき、完了したパケットが送信の準備が整っていることをIPSECTXモジュールに通報する。暗号化エンジンはdram_clkドメインで全体的に動作する。
このモジュールは2つの並列した同一の暗号化エンジンからなる。この場合、これらは交互の順序でサービスされる。またencrypt_rdyインジケータがIPSECTXに送信されるとき、与えられるパケットはこれらが暗号化エンジンに与えられたのと同じ順序でなければならない。
[IPSECTX]
このモジュール676は処理されたパケットを暗号化エンジンから取出し、送信するためにこれをスケジュールするように動作する。準備完了指示を暗号化エンジンから受けたとき、開始アドレスおよびパケット長情報を登録する。その後、送信リクエストをイーサネット(登録商標)送信アービトレータへ送信する。イーサネット(登録商標)送信アービトレータはIPSECXメモリから直接的にパケット情報を読取り、これをMACの送信バッファへ送信する。パケット全体が読出されるとき、これはipsectx_doneをストローブする。この指示を受信するとき、IPSECTXモジュールはそのipsectx_rd_addを更新する。このバスはさらに多くのメモリがフリーにされていることを示すためにIPSECXIFに戻される。
[IPSECXメモリアービトレータ(IPSECX MEMARB)]
このモジュール677はIPSECXメモリバンクへのアクセスを調停するように動作する。このモジュールはdram_clkドメインで動作する。
[IPSECXメモリインターフェース(IPSECX MEMIF)]
このモジュール678はインターフェースをデュアルポートRAMへ提供する。このモジュールはSRAMと、RAMをアクセスするその他の論理装置との間を結合する。このモジュールはRAMモデルが変更されるときに変更する必要がある。このモジュールはdram_clkドメインで全体的に動作する。
[IPSEC受信データパス(IPSECR)]
[概要]
図68のブロック図は受信されたIPSECパケットのデータパスフローを示している。これは以下の説明の基礎を形勢する。
[IPSEC受信されたパケットのデータフロー]
[IPIN]
IPSEC保護されたソケットの受信されたデータは最初にIPINモジュール687で解析される。最も外部のIPヘッダ内には次のヘッダのプロトコルタイプを示すプロトコルフィールドが存在する。プロトコルが0×50(ESP)または0×51(AH)であることを検出するならば、IPSECRIFモジュールに対して最も外部のIPヘッダを含んだパケットを完了する。
受信されたパケットが断片化されているならば、これは任意の他の断片化されたIPパケットのように扱われ、例外プロセッサに送信される。パケットが完全であるとき、IPINARBモジュール682を介してIPスタックの下部に再度注入される。
[IPSECRIF]
IPINがIPSECパケットが受信されたことをこのモジュール683に示すとき、そのパケットをIPSECRメモリ684に記憶し始める。パケットはヘッダから記憶され始めて、そのすぐ後に最も外部のIPヘッダが記憶される。IPSECRIFモジュールも正確なRX SAブロックを発見するようにLUT発見を行うためにSPI、ソースIPアドレス、AH/ESP設定を解析する。LUT値を獲得するとき、SAブロックを読取り、そのパラメータが受信されたパケットのパラメータに一致するかを検査する。それらが一致するならば、適切なSAを有することになる。一致しないならば、パケットはドロップされ、事象は記録される。
正確なSAブロックが発見されるとき、受信SAパラメータが読取られ記憶される。アンチリプレイ特性がこのSAに対して使用可能になるならば、シーケンス番号はそれが有効であるか否かを見るためにチェックされる。これが良好ならば、SAパラメータはパケットのIPSECRメモリ中の開始メモリアドレスと共に、解読モジュール685へ転送される。シーケンス番号が有効ではないならば、パケットはドロップされ事象は記録される。しかしながらシーケンス番号とシーケンスビットマップはこのときには更新されない。この点でアンチリプレイチェックを行う目的は不良なパケットが不必要に解読され認証されることを防止するためである。アンチリプレイ更新はパケットが認証された後にIPSECRXモジュール686中で処理される。
[暗号化/認証]
このモジュール685はIPSECパケットを解読し認証するように動作する。パケットが利用可能であるとき、IPSECRIFモジュールはipsecrif_rdy信号を主張することによりこれを解読エンジンへ示す。IPSECRIFモジュールはまたパケットの開始アドレスを提供する。パケットが認証に失敗したならば、これは破棄され、事象が記録される。認証にパスするならば、パケットは必要ならば解読される。解読されたパケットはもとのパケットと同一のIPSECRメモリ位置へ書き戻される。解読エンジンはその後、decrypt_rdyを主張することによりパケットが受信される準備が整っていることをIPSECRXモジュールへ示す。パケットが認証と解読の両者を必要とするならば、両機能がIPSECRXモジュールへパケットをオフする処理を行う前に完了されることが仮定される。
このモジュールは2つの並列した同一の解読エンジンからなる。この場合、それらは交互の順序でサービスされる。またdecrypt_rdyインジケータがIPSECRXに送信されるとき、与えられたパケットはこれらが解読エンジンに与えられたのと同一の順序でなければならない。
注意:解読/認証エンジンはDRAMクロックから外れて動作する。
[IPSECRX]
このモジュール686は解読/認証されたパケットを取り、それをスタックに再度注入するように動作する。トンネルモードパケットでは、処理されたパケットはIPINARBを介して直接的に注入して戻されることができる。転送モードパケットでは、IPヘッダが生成され、パケットの開始にプリペンドされる。これを行うことにより、すべてのパケットに対するIPINの内部のTCPチェックサムとインターフェース論理装置を再使用することが可能である。
このモジュールはまたパケットの受信SAブロックを更新するように動作する。SAに対する新しいシーケンス番号とビットマップはSAハンドルと共に解読エンジンからこのモジュールに転送される。このモジュールは受信されたタイムスタンプおよびバイトカウントを更新する。これは任意のパラメータがそれらの限度に到達していることを発見するならば、SAは無効にされ、状態メッセージは例外プロセッサに送られる。
[IPSECRメモリアービトレータ(IPSECRMRMARB)]
このモジュール687はIPSECRメモリバンクへのアクセスを調停するように動作する。このモジュールはdram_clkドメインで動作する。
[IPSECRメモリインターフェース(IPSECR MEMIF)]
このモジュールはインターフェースをデュアルポートRAMへ提供する。このモジュールはSRAMと、RAMをアクセスするその他の論理装置との間を結合する。このモジュールはRAMモデルが変更されるときに変更する必要がある。このモジュールはdram_clkドメインで全体的に動作する。
[IPSEC LUT]
このLUTは17ビットにより128Kとして組織される。各ワードは16ビットのSAハンドルと1ビットの有効なインジケータから構成される。物理的にLUTはMTX DRAMバンク内に含まれる。
[IPARB]
このモジュールはイーサネット(登録商標)入力パーサおよびIPSECRXから来るトラフィックを調停する。
[IPSECアンチリプレイアルゴリズム]
これはアンチリプレイチェックの検査に使用されるアルゴリズムである。このアルゴリズムは最後の32のシーケンス番号をチェックするために32ビットウィンドウを使用する。ビットマップのmsbは最も古いシーケンス番号を表し、lsbは現在のシーケンス番号を表している。このアルゴリズムはAHとESPプロトコルの両者に対して使用される。
LAST_SEQ:最後に受信されたシーケンス番号。これはSAブロックに記憶される。
SEQ:受信されたパケットのシーケンス番号。
BITMAP:最後の32の逐次的なシーケンス番号を表す32ビットのビットマップ。
図69はIPSECアンチリプレイアルゴリズムを示すフロー図である。
[IPSECレジスタ(IPSECREGS)]
[概要]
このモジュールはCPUに対するインターフェースを提供し、プログラム可能なレジスタを含んでいる。このモジュールもまたCPUが適切なコマンドを発生するときにSAを生成し、更新し、または無効にする。これは診断の目的で以下のメモリへの間接的なアクセスを行う。
・IPSECX、
・IPSECR、
・RX SA LUT、
・SAブロック。
[IPSEC SA状態メッセージ]]
受信および送信SAブロックの両者では、ブロックが無効になるときにはいつでも状態メッセージがオンチッププロセッサに対して発生される。シーケンス番号が0×FFFFに到達することにより、またはタイムスタンプ或いはバイトカウントがそれらの限度に到達することにより、ブロックは無効になる可能性がある。
[DRAMインターフェースに対するSAブロックおよびデータフロー]
[概要]
以下の説明はNS DDR調停モジュールを介してSAブロックアクセスするためのインターフェースの概要である。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
[データフロー]
3つの異なるアクセスタイプがSAブロックでサポートされる。これらはバースト書込、バースト読取、単一の読取である。ipsecsarbモジュールはSAメモリへアクセスするために異なるソースからのリクエストを調停する。
[SA LUT]
[概要]
IPSEC受信論理装置は適切なSAブロックを発見するためにLUTを使用する。LUTは16ビット×32Kの深さである。各LUTブロックはSAブロックハンドルを含んでいる。SAハンドルが値0を有するならば、これは無効であると考えられる。
[DRAMインターフェースへのSA LUT]
以下の説明はSA LUTとデータDDR調停モジュールとの間のインターフェースの概要である。それはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
[データフロー]
SA LUTはDRAMへ単一の読取および書込みアクセスを行うだけである。そのアクセスは常にWORDにある。各LUTブロックは16ビットのみであるので、WORDの下部16ビットだけがSA LUTメモリインターフェースへ転送される。読取および書込みは同じLUTアクセスサイクルで行われない。
本発明を好ましい実施形態を参照してここで説明したが、当業者は本発明の技術的範囲を逸脱せずにここで説明した応用を他の応用に置換することができることを容易に認識するであろう。したがって、本発明は特許請求の範囲によってのみ限定されるべきである。

Claims (79)

  1. ネットワークプロトコルを復号および符号化しデータを処理する統合ネットワークアダプタであって、
    ストリーミングデータを処理するための、配線接続されたデータパスと、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    複数の並列の、配線接続されたプロトコル状態マシーンと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
    トラフィックに基づいて共有リソースをスケジュールする手段と、
    を備え、
    前記複数のプロトコル状態マシーンは特定のネットワークプロトコル用に最適化され、
    前記プロトコル状態マシーンは並列で処理を実行し、
    前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
    ことを特徴とする統合ネットワークアダプタ。
  2. 単一の集積回路で構成される統合ネットワークアダプタであって、
    配線接続された転送オフロードエンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    物理層モジュール(PHY)と、
    メディアアクセス層モジュール(MAC)と、
    前記TOEと一体化したIPsec処理エンジンと、
    前記TOEと一体化した、オフロード処理のための上位レベルプロトコル(ULP)と、
    プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
    を備え、
    前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
    ネットワークアダプタ。
  3. 前記ULPはiSCSIプロトコルを実行する、
    請求項2に記載のネットワークアダプタ。
  4. 前記ULPは送受信のためにiSCSI CRCの計算をオフロードする、
    請求項3に記載のネットワークアダプタ。
  5. 前記ULPは送信のために固定インターバルのマーカー(FIM)を使用してiSCSIフレーミングを実行する、
    請求項3に記載のネットワークアダプタ。
  6. 前記TOEはiSCSIヘッダセグメント及びiSCSIデータセグメントをホストiSCSIドライバから取得し、送信のためにiSCSI PDUを準備する、
    請求項3に記載のネットワークアダプタ。
  7. ホストコンピュータに存在するホストiSCSIドライバを更に備え、
    前記ホストiSCSIドライバは前記TOEと通信する、
    請求項3に記載のネットワークアダプタ。
  8. 前記TOEはiSCSIプロトコルデータユニット(PDU)を受信し、iSCSI CRCを計算し、当該iSCSI CRCを前記ホストiSCSIドライバへ送る、
    請求項7に記載のネットワークアダプタ。
  9. 前記ホストiSCSIドライバは算出されたiSCSI CRC値を、iSCSI命令ブロック(IB)のiSCSI CRCシードフィールドを使用してシードする、
    請求項8に記載のネットワークアダプタ。
  10. 前記ホストiSCSIドライバはホストメモリで完全なiSCSIプロトコルデータユニット(PDU)ヘッダを組立て、iSCSI命令ブロック(IB)を生成し、当該iSCSI IBを前記TOEへ送信する、
    請求項7に記載のネットワークアダプタ。
  11. iSCSI IBは、ホストコンピュータメモリのバッファのリンクリストに対応し、転送ブロックとして知られている、アドレス及び長さの対のセットを含む、
    請求項10に記載のネットワークアダプタ。
  12. 前記ホストiSCSIドライバは、iSCSIデータを受信するときに最終転送ブロックのバッファサイズを調節してCRCバイトを記憶し、iSCSIヘッダとデータセグメントとを正確に分離する、
    請求項11に記載のネットワークアダプタ。
  13. 対応する基本ヘッダセグメント(BHS)と、任意の追加ヘッダセグメント(AHS)と、任意のデータセグメントとを含むiSCSIプロトコルデータユニットが、iSCSI命令ブロック(IB)を用いて前記ホストiSCSIドライバと前記TOEとの間で伝送される、
    請求項7に記載のネットワークアダプタ。
  14. 前記ホストiSCSIドライバは、iSCSI PDUヘッダに対する正確なサイズの受信バッファをポストし、且つ、データセグメントが存在する場合にはiSCSI PDUデータセグメントの正確なサイズの受信バッファをポストすることにより、受信の際にiSCSIプロトコルデータユニット(PDU)ヘッダとデータセグメントを分割する、
    請求項7に記載のネットワークアダプタ。
  15. 前記ホストiSCSIドライバは、命令ブロックを用いて受信された任意の追加ヘッダセグメント(AHS)の正確に寸法付けされたバッファをポストする、
    請求項14に記載のネットワークアダプタ。
  16. 前記TOEと前記ホストiSCSIドライバはiSCSI PDUレベルでインターフェースする請求項7に記載のネットワークアダプタ。
  17. 前記TOEは、プロトコルデータユニット(PDU)ヘッダを前記プロセッサまたは前記ホストコンピュータに直接メモリアクセス(DMA)しPDUデータセクションを前記ホストコンピュータに直接メモリアクセス(DMA)することにより、前記ホストコンピュータのメモリの付加的なメモリコピーを必要とせずにiSCSIプロトコルデータユニット(PDU)のヘッダとデータセグメントとを分離する、
    請求項7に記載のネットワークアダプタ。
  18. 前記TOEはセキュリティ・アソシエーション(SA)毎にIPsecのアンチリプレイサポートを行う、
    請求項2に記載のネットワークアダプタ。
  19. 前記TOEはIPSecゼロ、DES、3DESアルゴリズム、およびAES128ビ
    ットアルゴリズムを暗号ブロック連鎖(CBC)モードで実行する、
    請求項2に記載のネットワークアダプタ。
  20. 前記TOEはIPSecゼロ、SHA−1、およびMD−5認証アルゴリズムを実行する、
    請求項2に記載のネットワークアダプタ。
  21. 前記TOEはIPSec可変長暗号キーを実行する、
    請求項2に記載のネットワークアダプタ。
  22. 前記TOEはIPSec可変長認証キーを実行する、
    請求項2に記載のネットワークアダプタ。
  23. 前記TOEはIPSecジャンポフレームサポートを実行する、
    請求項2に記載のネットワークアダプタ。
  24. 前記TOEは時間と転送される全データとに基づいてセキュリティ・アソシエーション(SA)の満了のIPSec自動処理を実行する、
    請求項2に記載のネットワークアダプタ。
  25. 前記TOEはIPSecポリシー施行を実行する、
    請求項2記載のネットワークアダプタ。
  26. 前記TOEは例外パケットの生成と状態通知とを含むIPSec例外処理を実行する、
    請求項2記載のネットワークアダプタ。
  27. 統合ネットワークアダプタであって、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    少なくとも一つの配線接続されたプロトコル状態マシーンと、
    少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
    を備え、
    前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
    統合ネットワークアダプタ。
  28. 前記少なくとも一つの通信チャンネルは、命令ブロック(IB)と状態メッセージ(SM)とを使用してデータおよび制御情報を転送する、
    請求項27に記載のネットワークアダプタ。
  29. 前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つの閾値タイマを更に備え、
    データは選択された閾値インターバルで伝送される、
    請求項27に記載のネットワークアダプタ。
  30. 前記閾値タイマは、前記ネットワークアダプタと前記ホストコンピュータとの間の割り込みの数を減少させ、データの処理能力を増加させるための割込み集約機構を備える、
    請求項29に記載のネットワークアダプタ。
  31. 前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つのデータ閾値を設定するモジュールを更に備え、
    データレベルが選択された閾値に達したときにデータが伝送される、
    請求項27に記載のネットワークアダプタ。
  32. 前記プロセッサおよび前記TOEのデータ処理能力を最適化する割込み集約機構を更に備える請求項27に記載のネットワークアダプタ。
  33. TCP選択肯定応答(SACK)用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
    TCPはデータパケットの紛失を応答し、当該紛失したデータパケットだけを再送信する、
    請求項27に記載のネットワークアダプタ。
  34. TCP高速再送信用に最適化されたハードウェアサポートを提供するモジュールを更に備える、
    請求項27に記載のネットワークアダプタ。
  35. 前記TCP高速再送信は、順序違いのセグメントが受信されたときに、標準的なアイムアウトを待つ代わりに、送信機が穴を迅速に埋めることを可能にするためにACKを直ちに生成する、
    請求項34に記載のネットワークアダプタ。
  36. 受信機が重複する三つのACKを受信したときに、前記TCP高速再送信が呼び出され、
    前記TCP高速再送信が呼び出されたときに、送信機が穴を埋めようとし、
    ACKとセグメントのウィンドウ広告値とが相互に一致した場合に、重複するACKが重複と判定される、
    請求項34に記載のネットワークアダプタ。
  37. TCPウィンドウスケーリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  38. ウィンドウスケーリング動作が、ウィンドウスケールを可能にする少なくとも一つのビットと、スケーリングファクタを設定するための少なくとも一つのビットと、スケーリング値を決定するためのパラメータとを備える3つの変数に基づいている、
    請求項27に記載のネットワークアダプタ。
  39. iSCSIヘッダとデータCRCの生成およびチェックとのために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  40. iSCSIの固定インターバルのマーカー(FIM)を生成するために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  41. 診断プログラムおよびパケット監視プログラムをサポートするTCPダンプモード用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  42. TCPダンプモードが使用可能になった場合に、受信されたパケットのすべてが例外として前記ホストに送信され、ハードウェアスタックから来る出力TCP/UDPパケットのすべてが例外パケットとしてループバックされる、
    請求項41に記載のネットワークアダプタ。
  43. 前記例外パケットをネットワークモニタ用にコピーし、RXパケットを再注入するためにTXパケットを生のイーサネット(登録商標)フレームとして送信するドライバを更に備える請求項42に記載のネットワークアダプタ。
  44. ホストACKモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
    前記ホストコンピュータと前記ネットワークアダプタとの間をデータが通過したときに当該データが破損した可能性がある場合にデータの完全性を保証するために、前記ホストがTCPセグメントからデータを受信したときだけTCP ACKが送信される、
    請求項27に記載のネットワークアダプタ。
  45. 前記ホストACKモードは、ACKを送信する前に、データセグメントを含んでいるMTXバッファの直接メモリアクセス(DMA)が完了するのを待つ、
    請求項44に記載のネットワークアダプタ。
  46. TCPがラウンドトリップ時間測定(RTTM)を良好に計算し、ラップシーケンスに対する保護(PAWS)をサポートすることを可能にするために、TCPタイムスタンプ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  47. 古い重複セグメントによるTCP接続の破壊を防止するためにTCP PAWS用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  48. 前記ネットワークアダプタ内のバッファからではなくホストメモリのバッファから直接にデータを再送信させるために、TCPホスト再送信モード用に最適化されたハードウェアサポート提供するモジュールを更に備える請求項27記載のネットワークアダプタ。
  49. ランダムな初期シーケンス番号用に最適化されたハードウェアサポートを行うモジュールを更に備える請求項27記載のネットワークアダプタ。
  50. デュアルスタックモード用に最適化されたハードウェアサポートを行うモジュールと、
    前記ホストのソフトウェアTCP/IPスタックと協動および関連して動作する前記ネットワークアダプタに組み込まれたハードウェアTCP/IPスタックと、
    を更に備え、
    前記ネットワークアダプタは、前記ネットワークアダプタと同一のIPアドレスを使用して並列に動作する前記ソフトウェアTCP/IPスタックの共存をサポートする、
    請求項27に記載のネットワークアダプタ。
  51. 同期(SYN)状態メッセージモードをサポートするモジュールを更に備え、
    受信された任意のSYNは状態メッセージを前記ホストへ戻し、
    SYN/ACKは、前記ホストが適切な命令ブロックを前記ネットワークアダプタへ戻すまで前記ネットワークアダプタにより生成されず、
    前記SYN状態メッセージモードが前記ネットワークアダプタで使用可能にならない場合には、SYN/ACKが前記ネットワークアダプタにより自動的に生成され、SYN受信状態メッセージは生成されない、
    請求項50に記載のネットワークアダプタ。
  52. ネットワークアダプタ制御ブロックデータベースに一致しないTCPパケットが受信されたときに、前記ネットワークアダプタからのリセット(RST)メッセージの抑制をサポートするモジュールを更に備え、
    前記ネットワークアダプタは、自動的にRSTを生成する代わりにパケットを例外パケットとして前記ホストへ送信することで、前記ホストのTCP/IPスタックが当該パケットを例外パケットとして処理できるようにする、
    請求項50に記載のネットワークアダプタ。
  53. 前記ホストおよび前記ネットワークアダプタがIP IDをオーバーラップすることなくIPアドレスを共有できるようにするために、IP ID分割用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  54. あるタイプのパケットに対する特別な動作を制限し、受け付け、または実行するために、データパケットのフィルタリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  55. 前記フィルタリングは、プログラムされたユニキャストアドレスの受付、放送パケットの受付、マルチキャストパケットの受付、ネットマスクにより特定される範囲内のアドレスの受付、および全パケットを受け付ける無差別モードのうちの任意の特性を取ることができる、
    請求項54に記載のネットワークアダプタ。
  56. 仮想構内網(VLAN)用に最適化されたハードウェアサポートを提供するVLANモジュールを更に備える、
    請求項27に記載のネットワークアダプタ。
  57. 前記VLANモジュールは、入力パケットからVLANヘッダを除去する要素、VLANのタグが付された出力パケットを生成する要素、入力SYNフレームからVLANパラメータを生成する要素、および例外パケットとUDPパケットのVLANタグ情報を通す要素のいずれかを備える、
    請求項56に記載のネットワークアダプタ。
  58. ジャンボフレーム用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  59. シンプルネットワーク管理プロトコル(SNMP)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  60. 管理情報ベース(MIB)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  61. レガシーモードでのネットワークアダプタの動作用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
    すべてのネットワークトラフィックはトラフィックタイプにかかわりなく前記ホストに送信され、
    前記ネットワークアダプタはハードウェアTCP/IPスタックが該アダプタに存在しないかのように動作する、
    請求項27に記載のネットワークアダプタ。
  62. ハードウェアおよびソフトウェアのいずれかでIP分割が処理されることを可能にする最適化されたハードウェアサポートを提供するモジュールを更に備え、
    例外パケットとして伝送されソフトウェアドライバで再構築されるIP分割されたパケットがIP注入モードにより前記ネットワークアダプタへ再注入されて戻される、
    請求項27に記載のネットワークアダプタ。
  63. IPパケットが前記ネットワークアダプタのTCP/IPスタックに注入されることを可能にするIP注入用に最適化されたハードウェアサポートを提供するIP注入モジュールを更に備える請求項27に記載のネットワークアダプタ。
  64. 前記IP注入モジュールは、IPパケットを前記ネットワークアダプタのTCP/IPスタックへ注入するための1以上の注入制御レジスタを備え、
    前記1以上の注入制御レジスタは前記ホストがIPパケットを前記ネットワークアダプ
    タのTCP/IPスタックへ注入することを可能にする、
    請求項63に記載のネットワークアダプタ。
  65. 複数のIPアドレス用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  66. デバッグモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
    試験および制御ビットが前記ネットワークアダプタ中で使用可能になった場合に、すべてのIPパケットが例外として前記ホストへ送信される、
    請求項27に記載のネットワークアダプタ。
  67. TCP時間待機状態用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  68. 可変の接続数に対して最適化されたハードウェアサポートを行うモジュールを更に備える請求項27に記載のネットワークアダプタ。
  69. 前記ネットワークアダプタがネットワークアダプタの最大容量に等しい接続を容認する場合に、次の同期(SYN)が、前記ホストが当該接続を処理できるように、例外パケットとして前記ホストへ通される、
    請求項27に記載のネットワークアダプタ。
  70. ユーザデータグラムプロトコル(UDP)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27記載のネットワークアダプタ。
  71. IPパケットの寿命を選択されたホップ数に限定するためにTTL(生存時間)に対して最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  72. キープ・アライブ・パケットをリンクにおいて周期的に送信することによりアイドル状態のTCP接続を維持しタイムアウトさせないことを可能にするために、TCPのキープアライブ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  73. IPパケットを優先させるためにルータにより使用されるサービスのTCPタイプ(TOS)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
  74. 統合ネットワークアダプタであって、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    少なくとも一つの配線接続されたプロトコル状態マシーンと、
    少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    TCPスロースタート用に最適化されたハードウェアサポートを行うためのモジュールと、
    を備え、
    前記スロースタートは、
    肯定応答(ACK)を予測する前に、最大セグメントサイズ(MSS)の2倍の現在のウィンドウ(cwnd)に対応する二つのデータセグメントが流れることだけをまず許可し、
    更に一つのセグメントを流すために、前記cwndが受信機の広告ウィンドウと等しくなるまで、成功ACKが受信される度に一つのMSS分だけcwndを増加させることにより、
    一度に流れるデータセグメント数を徐々に増加させる、
    統合ネットワークアダプタ。
  75. 前記スロースタートは新規のデータ接続で常に開始され、
    前記スロースタートはデータトラフィックの渋滞が発生したときに接続の中間で起動される、
    請求項74に記載のネットワークアダプタ。
  76. 統合ネットワークアダプタであって、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    少なくとも一つの配線接続されたプロトコル状態マシーンと、
    少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    フレキシブルでプログラム可能なメモリエラー検査および補正(ECC)用に最適化されたハードウェアサポートを提供するECCモジュールと、
    を備え、
    前記ECCモジュールは、少なくとも一つの追加ビットを用いて、暗号化されたECCコードをデータと共にパケットに記憶し、
    前記データがメモリに書き込まれたときに前記ECCコードも記憶され、
    前記データが読み出されたときに、前記記憶されたECCコードは当該データが書き込まれたときに生成されたECCコードと比較され、
    前記ECCコードが一致しない場合には、前記データ中のどのビットがエラーであるかについての判定が実行され、
    エラーになっているビットが反転され、メモリ制御装置が当該補正されたデータを解放し、
    エラーはオンザフライで補正され、補正されたデータは前記メモリに戻されず、
    同一の破損データが再度読み取られたならば、前記ECCモジュールの動作が繰り返される、
    統合ネットワークアダプタ。
  77. 統合ネットワークアダプタであって、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    少なくとも一つの配線接続されたプロトコル状態マシーンと、
    少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    TCPのサービス品質(QoS)用に最適化されたハードウェアサポートを提供するモジュールと、
    を備え、
    TCP送信データフローはソケット問い合わせモジュールで開始し、当該データフローは送信データ有効ビットセットを有するエントリを探す送信データ有効ビットテーブルを通過し、
    前記ソケット問い合わせモジュールは、前記エントリを発見した場合に、ソケットのユーザ優先順位レベルに従って当該エントリを複数の待ち行列のうちの一つに置く、
    統合ネットワークアダプタ。
  78. 統合ネットワークアダプタであって、
    パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
    少なくとも一つの配線接続されたプロトコル状態マシーンと、
    少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    フェイルオーバー用に最適化されたハードウェアサポートを提供するフェイルオーバーモジュールと、
    を備え、
    前記フェイルオーバーモジュールは、接続を開始しようとすることなくソケットが生成されることを可能にするNO_SYNモードを有し、
    前記ネットワークアダプタ内のソケットおよび当該ソケットに関連するすべてのデータ構造が接続を生成することなく生成され、
    前記NO_SYNモードは別のカードからの、またはソフトウェアTCP/IPスタックから前記ネットワークアダプタへの接続移行からのフェイルオーバーをサポートする、
    統合ネットワークアダプタ。
  79. 統合ネットワークアダプタであって、
    パケットを受信するための、配線接続されたデータパスと、
    複数の並列の、配線接続されたプロトコル状態マシーンと、
    トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
    配線接続された転送オフロード・エンジン(TOE)と、
    前記TOEと一体化したプロセッサと、
    プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
    を備え、
    前記プロトコル状態マシーンは並列で処理を実行し、
    前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
    統合ネットワークアダプタ。
JP2009217450A 2002-06-06 2009-09-18 Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ Expired - Lifetime JP4875126B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US38692402P 2002-06-06 2002-06-06
US60/386,924 2002-06-06
US10/456,871 US7535913B2 (en) 2002-03-06 2003-06-05 Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols
US10/456,871 2003-06-05

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2004512013A Division JP2005529523A (ja) 2002-06-06 2003-06-06 Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ

Publications (2)

Publication Number Publication Date
JP2010063110A true JP2010063110A (ja) 2010-03-18
JP4875126B2 JP4875126B2 (ja) 2012-02-15

Family

ID=42189353

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009217450A Expired - Lifetime JP4875126B2 (ja) 2002-06-06 2009-09-18 Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ

Country Status (1)

Country Link
JP (1) JP4875126B2 (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101577034B1 (ko) * 2014-06-26 2015-12-14 (주)모두텍 소프트웨어적인 네트워크 부가기능 추가가 용이한 멀티코어 기반의 toe 시스템 및 그 제어 방법
CN107241382A (zh) * 2017-04-24 2017-10-10 天津瑞能电气有限公司 用于串口与以太网间的数据转换方法及其装置
US9912557B2 (en) 2013-03-01 2018-03-06 Nec Corporation Node information detection apparatus, node information detection method, and program
CN109815176A (zh) * 2019-01-14 2019-05-28 中国科学院上海高等研究院 特定dma数据发送方法、接收方法、系统及介质
CN111819561A (zh) * 2018-03-09 2020-10-23 高通股份有限公司 集成电路数据保护
US10897391B2 (en) 2018-01-24 2021-01-19 Fujitsu Limited Fault detection method and node device
CN113127390A (zh) * 2021-05-13 2021-07-16 西安微电子技术研究所 一种多协议数据总线适配器引擎架构设计方法
CN113810370A (zh) * 2021-08-04 2021-12-17 方一信息科技(上海)有限公司 一种基于Socket对接TOE驱动的TCP加速方法
CN116661987A (zh) * 2022-12-29 2023-08-29 荣耀终端有限公司 内存申请方法和电子设备
CN119728811A (zh) * 2024-09-19 2025-03-28 鹏城实验室 基于混合标签协议栈的数据包传输方法、网关设备及基于混合标签协议栈的数据包传输系统

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9912557B2 (en) 2013-03-01 2018-03-06 Nec Corporation Node information detection apparatus, node information detection method, and program
KR101577034B1 (ko) * 2014-06-26 2015-12-14 (주)모두텍 소프트웨어적인 네트워크 부가기능 추가가 용이한 멀티코어 기반의 toe 시스템 및 그 제어 방법
CN107241382B (zh) * 2017-04-24 2023-10-03 天津瑞能电气有限公司 用于串口与以太网间的数据转换方法及其装置
CN107241382A (zh) * 2017-04-24 2017-10-10 天津瑞能电气有限公司 用于串口与以太网间的数据转换方法及其装置
US10897391B2 (en) 2018-01-24 2021-01-19 Fujitsu Limited Fault detection method and node device
CN111819561A (zh) * 2018-03-09 2020-10-23 高通股份有限公司 集成电路数据保护
CN111819561B (zh) * 2018-03-09 2023-11-03 高通股份有限公司 集成电路数据保护
CN109815176A (zh) * 2019-01-14 2019-05-28 中国科学院上海高等研究院 特定dma数据发送方法、接收方法、系统及介质
CN113127390A (zh) * 2021-05-13 2021-07-16 西安微电子技术研究所 一种多协议数据总线适配器引擎架构设计方法
CN113127390B (zh) * 2021-05-13 2023-03-14 西安微电子技术研究所 一种多协议数据总线适配器引擎架构设计方法
CN113810370A (zh) * 2021-08-04 2021-12-17 方一信息科技(上海)有限公司 一种基于Socket对接TOE驱动的TCP加速方法
CN116661987A (zh) * 2022-12-29 2023-08-29 荣耀终端有限公司 内存申请方法和电子设备
CN119728811A (zh) * 2024-09-19 2025-03-28 鹏城实验室 基于混合标签协议栈的数据包传输方法、网关设备及基于混合标签协议栈的数据包传输系统

Also Published As

Publication number Publication date
JP4875126B2 (ja) 2012-02-15

Similar Documents

Publication Publication Date Title
US7535913B2 (en) Gigabit ethernet adapter supporting the iSCSI and IPSEC protocols
JP4875126B2 (ja) Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ
US7535907B2 (en) TCP engine
US8218555B2 (en) Gigabit ethernet adapter
US7420931B2 (en) Using TCP/IP offload to accelerate packet filtering
KR100938519B1 (ko) 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체
US7590755B2 (en) Method to offload a network stack
EP1570361B1 (en) Method and apparatus for performing network processing functions
EP1494426B1 (en) Secure network processing
US20070253430A1 (en) Gigabit Ethernet Adapter
US7483376B2 (en) Method and apparatus for discovering path maximum transmission unit (PMTU)
JP4504977B2 (ja) オフロードユニットを使用したtcp接続のためのデータ処理
US7831745B1 (en) Scalable direct memory access using validation of host and scatter gather engine (SGE) generation indications
US7188250B1 (en) Method and apparatus for performing network processing functions
US7623450B2 (en) Methods and apparatus for improving security while transmitting a data packet
US8943214B2 (en) Communication apparatus
JP4916482B2 (ja) ギガビット・イーサネット・アダプタ

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111108

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111124

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141202

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4875126

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term