JP2010063110A - Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ - Google Patents
Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ Download PDFInfo
- 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
Links
- 238000004891 communication Methods 0.000 claims abstract description 36
- 230000015654 memory Effects 0.000 claims description 324
- 238000012546 transfer Methods 0.000 claims description 159
- 239000000872 buffer Substances 0.000 claims description 156
- 230000005540 biological transmission Effects 0.000 claims description 130
- 238000012545 processing Methods 0.000 claims description 63
- 238000004422 calculation algorithm Methods 0.000 claims description 61
- 238000000034 method Methods 0.000 claims description 48
- 239000003550 marker Substances 0.000 claims description 47
- 230000008569 process Effects 0.000 claims description 42
- 238000004364 calculation method Methods 0.000 claims description 39
- 230000009977 dual effect Effects 0.000 claims description 13
- 230000007246 mechanism Effects 0.000 claims description 13
- 238000012360 testing method Methods 0.000 claims description 13
- 230000001360 synchronised effect Effects 0.000 claims description 10
- 239000007924 injection Substances 0.000 claims description 8
- 238000002347 injection Methods 0.000 claims description 8
- 239000007928 intraperitoneal injection Substances 0.000 claims description 8
- 238000005259 measurement Methods 0.000 claims description 7
- 230000007704 transition Effects 0.000 claims description 6
- 238000001914 filtration Methods 0.000 claims description 5
- 238000013519 translation Methods 0.000 claims description 5
- 235000008694 Humulus lupulus Nutrition 0.000 claims description 4
- 230000002776 aggregation Effects 0.000 claims description 4
- 238000004220 aggregation Methods 0.000 claims description 4
- 238000000638 solvent extraction Methods 0.000 claims description 4
- 238000012937 correction Methods 0.000 claims description 3
- 238000009432 framing Methods 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 claims description 2
- 230000001629 suppression Effects 0.000 claims description 2
- 230000006378 damage Effects 0.000 claims 1
- 238000013461 design Methods 0.000 abstract description 4
- 238000010276 construction Methods 0.000 abstract 1
- 206010009944 Colon cancer Diseases 0.000 description 175
- 238000010586 diagram Methods 0.000 description 82
- 206010040736 Sinoatrial block Diseases 0.000 description 73
- 238000003780 insertion Methods 0.000 description 43
- 230000037431 insertion Effects 0.000 description 43
- 239000000523 sample Substances 0.000 description 27
- 230000006870 function Effects 0.000 description 21
- 230000003068 static effect Effects 0.000 description 18
- 230000004044 response Effects 0.000 description 13
- 101000714168 Homo sapiens Testisin Proteins 0.000 description 12
- 102100036494 Testisin Human genes 0.000 description 12
- 230000036961 partial effect Effects 0.000 description 10
- 238000007726 management method Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 8
- 238000013467 fragmentation Methods 0.000 description 6
- 238000006062 fragmentation reaction Methods 0.000 description 6
- 230000002093 peripheral effect Effects 0.000 description 6
- 230000002265 prevention Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000011084 recovery Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 108700010388 MIBs Proteins 0.000 description 4
- 239000012634 fragment Substances 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 101150005267 Add1 gene Proteins 0.000 description 2
- 101150060298 add2 gene Proteins 0.000 description 2
- 239000013256 coordination polymer Substances 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 102100032757 Cysteine-rich protein 2 Human genes 0.000 description 1
- 101000942088 Homo sapiens Cysteine-rich protein 2 Proteins 0.000 description 1
- 101000851593 Homo sapiens Separin Proteins 0.000 description 1
- 240000007320 Pinus strobus Species 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008033 biological extinction Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000002431 foraging effect Effects 0.000 description 1
- 235000003642 hunger Nutrition 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 238000012857 repacking Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000015607 signal release Effects 0.000 description 1
- 230000007727 signaling mechanism Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000037351 starvation Effects 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
- 208000011580 syndromic disease Diseases 0.000 description 1
Images
Landscapes
- Small-Scale Networks (AREA)
Abstract
【解決手段】ギガビット・イーサネット(登録商標)・アダプタで実施されるシステムは、高いネットワーク通信速度を処理するためのコンパクトなハードウェアの解決策を提供する。さらに、モジュール構造および設計を介して多数の通信プロトコルに適合する。
【選択図】図1
Description
[一般的な説明]
本発明は高速度ハードウェアネットワークスタックで使用されるアーキテクチャ(以下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パケットを処理する。
2 これはパケット当りの500の命令オーバーヘッドとバイト当りの1命令を仮定している。
IT10Gは種々のアーキテクチャを実装することでホストコンピュータの処理パワーの制限を解決する。当該実装は以下の特性を含んでいる。
・入力および出力されるデータのオンザフライ(ストリーミング)処理、
・超広いデータパス(現在の構造では64ビット)、
・プロトコル状態マシーンの並列動作、
・共有されたリソースのインテリジェントなスケジュール化、
・最小にされたメモリコピー。
[概要]
このセクションは好ましい実施形態の上部レベルを説明する。これはシステムのブロックレベルの説明および異なるデータパスと転送タイプに対する動作理論を提供する。
現在の本発明の好ましい実施形態は異なるクロックドメインで動作するように設計されたチップである。以下の表は1Gbpsと10Gbps動作の両者のすべてのクロックドメインをリストしている。
[概要]
このセクションは内部プロトコルプロセッサの概要を与える。
ここで説明するチップはプログラム能力とフレキシブル性のために内部(またはオンチップ)プロセッサを使用する。このプロセッサもまた動作システムを完成するために必要なすべての周辺機器を完備している。正常の動作状態下で、オンチッププロセッサはネットワークスラックを制御する。
オンチッププロセッサは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パケットにも適用される。
パケットがMACから受信されるとき、イーサネット(登録商標)ヘッダはパケットがこのネットワークスタックを目的地とするか否かを決定するために分析される。MACアドレスフィルタはユニキャストアドレス、プログラムされたマスク内に入るユニキャストアドレス、放送アドレス、またはマルチキャストアドレスを受けるようにプログラムされることができる。さらに、カプセル化プロトコルもまた決定される。イーサネット(登録商標)ヘッダの16ビットTYPEフィールドがARP(0×0806)またはRARP(0×0835)パケットを示すならば、ARP/RARPモジュールはさらにパケットを処理することを可能にされる。TYPEフィールドがIPv4(0×0800)へ復号されるならば、IPモジュールはさらにパケットを処理することを可能にされる。例のサポートされたTYPEフィールドの完全なリストが以下の表に示されている。TYPEフィールドが任意の他の値に復号されるならば、パケットは随意選択的にバッファに経路設定され、ホストコンピュータは未知のイーサネット(登録商標)パケットが受信されていることを通知される。この最後のケースでは、アプリケーションはパケットを読取り、適切な動作コースを決定する。このデータパスの構成により、例えばIPXのようなハードウェアで直接サポートされない任意のプロトコルはIT10Gにより間接的にサポートされることができる。
受信されたパケットがARPまたはRARPパケットであるならば、ARP/RARPモジュールが使用可能になる。これはパケットのOPフィールドを検査し、これがリクエストであるか回答であるかを決定する。リクエストであるならば、外部のエンティティが情報に対してポーリングをしている。ポールされているアドレスがIT10Gに対するものであるならば、reply_reqがARP/RARP回答モジュールへ送信される。受信されるパケットがARPまたはRARP回答であるならば、結果、即ちMACおよびIPアドレスがARP/RARPリクエストモジュールへ送信される。
受信されたパケットがIPパケットであるならば、IPモジュールが使用可能になる。IPモジュールは最初に受信されたパケットがIPv4パケットであるか否かを決定するためにIPヘッダ中のバージョンフィールドを検査する。
TCPパケットがIT10Gにより受信されるならば、ソケット情報は構文解析され対応するソケットが使用可能になる。ソケットの状態情報が検索され、受信されたパケットのタイプに基づいて、それにしたがってソケット状態が更新される。(応用可能であるならば)パケットのデータペイロードはソケットデータバッファに記憶されている。ACKパケットが発生される必要があるならば、TCP状態モジュールはACKパケットを発生し、ACKパケットを送信するようにスケジュールする。オープンソケットに相関しないTCPパケットが受信されるならば、TCP状態モジュールはRSTパケットを発生し、そのRSTパケットは送信するようにスケジュールされる。
UDPパケットが受信されるならば、ソケット情報が解析され、ソケット中に記憶されているデータはデータバッファを受信する。オープンソケットが存在しないならば、UDPパケットは暗黙に破棄される。
IT10Gのハードウェアネットワークスタックはオンチッププロセッサに対して周辺機器として現れるように構成される。ネットワークスタックのベースアドレスはオンチッププロセッサのNS_Base_Addレジスタを介してプログラムされる。このアーキテクチャはオンチッププロセッサがネットワークスタックをそのメモリまたはI/Oスペースの種々の位置に置くことを可能にする。
[概要]
以下の記載はイーサネット(登録商標)MACインターフェースモジュールを説明している。イーサネット(登録商標)MACインターフェースモジュールの機能はIT10Gのコアからイーサネット(登録商標)MACを抽象化することである。これは例えばIT10Gコアアーキテクチャを変更せずに、IT10Gネットワークスタックコアが異なる速度のMACおよび/または種々のソースからのMACに結合されることを可能にする。このセクションはIT10Gコアとのための通信のインターフェース要求について説明する。
図5はMACインターフェースモジュールで使用されるI/Oを概略的に示したブロック図である。
[概要]
このセクションはイーサネット(登録商標)インターフェースモジュールを説明する。イーサネット(登録商標)インターフェースモジュールは低い端部のイーサネット(登録商標)MACインターフェースと、および高い端部のARPおよびIPモジュールのようなブロックへ通信する。イーサネット(登録商標)インターフェースモジュールは受信および送信パスの両者のデータを処理する。送信側では、イーサネット(登録商標)インターフェースモジュールは送信のためのパケットのスケジュールをし、送信のためのDMAチャンネルを設定し、イーサネット(登録商標)MACインターフェース送信信号によって通信するように動作する。受信側では、イーサネット(登録商標)インターフェースモジュールはイーサネット(登録商標)ヘッダの解析、パケットがアドレスフィルタ設定に基づいて受信されるべきであるか否かの決定、パケットヘッダのTYPEフィールドに基づいた次のカプセル化されたプロトコルのエネーブル、上部層プロトコルに対して64ビット境界で開始するようにデータを整列させるように動作する。図6はイーサネット(登録商標)インターフェース40の概略ブロック図である。
[送信スケジューラ]
送信スケジューラブロック60はARP、IP、TCP、および生の送信モジュールから送信リクエストを取り、次に送信されるべきパケットを決定するように動作する。送信スケジューラは各送信リクエストのQoSレベルを比較することにより送信順序を決定する。QoSレベルと共に、各送信リクエストはパケット長と共にパケットの開始メモリブロックへのポインタを含んでいる。送信スケジューラはあるパケットタイプの送信優先順をその他よりも重く加重するようにプログラムされる能力を有する。例えばTCPモジュールからのQoSレベル5はIPモジュールからのレベル5のリクエストよりも価値があるように作られることができる。送信スケジューラは多数のモジュールが並列して、送信データトラフィックに基づいた共有された方法で動作することを可能にする。以下の説明はパケットスケジュール化の決定に現在使用されているアルゴリズムである。
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パケット。
データ整列器65は後続するパケット処理の層のデータバイトを整列させるように動作する。イーサネット(登録商標)ヘッダが64ビットの偶数倍ではないのでデータ整列器が必要とされる。VLANタグが存在するか否かに応じて、データ整列器は上部処理層に対してデータがMSB位置調節されるように64ビットデータを方向付けする。このようにしてイーサネット(登録商標)フレームのペイロードセクションは常に偶数の64ビット境界で整列される。データ整列器はまた準備完了信号を次の層に発生するように動作する。準備完了信号はmacin_rdyが主張された後に、2または3の作動可能サイクルをアクチブにする。図9は構成データ整列モジュールの概略ブロック図である。
IT10Gは802.3(SNAP)とDIXフォーマットパケットの両者をネットワークから受取るが、DIXフォーマットのパケットだけを送信する。さらに、802.3パケットが受信されるとき、それらは最初にDIXフォーマットに変換され、その後イーサネット(登録商標)フィルタにより処理される。それ故、すべてのイーサネット(登録商標)例外パケットはDIXフォーマットで記憶される。
[概要]
以下の記載はARPプロトコルおよびARPキャッシュモジュールの詳細な説明である。IT10Gアーキテクチャの1実施形態では、ARPプロトコルモジュールはRARPプロトコルもサポートするが、ARPキャッシュ自体を含まない。パケットを送信できる各モジュールは以外に早くARPキャッシュに問い合わせするので、この共通のリソースはこのARPモジュールから分離される。ARPプロトコルおよびARPキャッシュモジュールは受信されたパケットタイプに基づいてARPキャッシュへ更新を送信する。
・ARP回答を発生することによりARPリクエストに応答できる。
・ARPキャッシュに応答してARPリクエストを発生できる。
・複数のIPアドレスに対するARP回答を与えることができる(マルチホームホスト/ARP代理)。
・ターゲットとする(ユニキャスト)ARPリクエストを発生できる。
・不法のアドレスをフィルタリングする。
・整列されたARPデータをプロセッサへ転送する。
・無料のARPを行うことができる。
・CPUは自動ARP回答発生をバイパスし、ARPデータを例外ハンドラへダンプしてもよい。
・CPUは(バイパスモードのとき)カスタムARP回答を発生してもよい。
・ネットワーク状態に応じて、ARPパケットの可変の優先順位を有する。
・IPアドレスをリクエストする。
・特定のIPアドレスをリクエストする。
・RARPリクエストは例外ハンドラへハンドオフされる。
・不規則なRARP回答を管理する。
・整列されたRARPデータをプロセッサまで送る。
・CPUはカスタムRARPリクエストおよび回答を発生できる。
・ダイナミックARPテーブルサイズ、
・自動的に更新されたARPエントリ情報、
・送信者のハードウェアアドレスが変化したときの割込み、
・ARPデータを混雑収集する能力、
・重複したIPアドレス検出および割込み生成、
・ARPモジュールを介するARPリクエスト能力、
・静的なARPエントリのサポート、
・静的なARPエントリがダイナミックARPデータにより置換されることを可能にする選択肢、
・ARP代理のサポート、
・ARPエントリの構成可能な満了時間。
(CPUはこのコンテキストではホストコンピュータCPUまたはオンチッププロセッサのいずれであってもよい。)
図10はARPモジュールの1構成の概略ブロック図である。
図11はARPキャッシュブロックの1構成の概略ブロック図である。
[パケットの構文解析]
ARPモジュール100はARPとRARPパケットだけを処理する。モジュールはイーサネット(登録商標)受信モジュールから受信される準備完了信号を待機する。その信号が受信されたとき、入来するイーサネット(登録商標)フレームのフレームタイプがチェックされる。フレームタイプがARP/RARPではないならば、そのパケットは無視される。そうでなければモジュールは解析を開始する。
ARPモジュールはパケットを3つのソース、即ちARPキャッシュ110(ARPリクエスト)、(ARP回答の)パーサ/FIFOバッファから内部に、(カスタムARP/RARPの)システム制御装置またはホストコンピュータからパケットを送信するためのリクエストを受信できる。この状態のために、優先順位―待ち行列のタイプがARP/RARPパケットの送信をスケジュールするのに必要である。
ARPモジュールは入来するパケットデータの自動処理をバイパスする選択肢を有している。バイパスフラグが設定されるとき、入来するARP/RARPデータは例外ハンドラバッファへ転送される。CPUはその後、バッファをアクセスし、データを処理する。バイパスモードであるとき、CPUはそれ自身でARP回答を発生し、データを送信スケジューラへ転送する。出力するARP/RARPパケットでカスタム化されることができるフィールドは、ソースIPアドレス、ソースイーサネット(登録商標)アドレス、ターゲットIPアドレス、命令コードである。すべての他のフィールドはイーサネット(登録商標)によってIPv4のARP/RARPで使用される標準的な値に一致し、ソースイーサネット(登録商標)アドレスはイーサネット(登録商標)インターフェースのアドレスに設定される。(CPUはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。)
注意:これらの他のARP/RARPフィールドの変更が必要であるならば、CPUは生のイーサネット(登録商標)フレーム自体を発生しなければならない。
[ARPキャッシュへのARPエントリの付加]
ターゲットとするARPリクエストおよび回答(ダイナミック)を受信するとき、またはCPU(静的)によりリクエストされるときにARPが生成される。(CPUはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。)ダイナミックなエントリはARPリクエストまたは回答がインターフェースIPアドレスの1つに対して受信されるときに生成されるARPエントリである。ダイナミックエントリはユーザまたはホストコンピュータで動作するアプリケーションプログラムにより特定されるときに典型的には5乃至15分の限定された時間だけ存在する。静的エントリはユーザにより生成され、通常終了しないARPエントリである。
ARPキャッシュのエントリの探索はARPエントリの生成プロセスと類似したプロセスをたどる。探索はメモリが所定のインデックスに割当てられているか否かを決定するためにLUTを使用することにより開始する。メモリが割当てられているならば、メモリはエントリが発見される(キャッシュヒットが生じる)か、ゼロに設定されている(キャッシュの損失)link_validフラグを有するエントリに遭遇するまで検索される。
ARPキャッシュが初期化されるとき、幾つかのコンポーネントはリセットされる。探索テーブル(LUT)はすべてのPVビットをゼロに設定することによりクリアされる。現在使用されるすべてのメモリは割当てを解除され、malloc1メモリ制御装置へ解放されて戻される。ARP満了タイマもゼロに設定される。
ダイナミックARPエントリは限定された時間量だけARPキャッシュにのみ存在できる。これは任意のIPからイーサネット(登録商標)へのアドレスのマッピングが失効されることを防止する。古いアドレスのマッピングはLANがIPアドレスを割当てるためにDHCPを使用するか、装置のイーサネット(登録商標)インターフェースが通信セッション中に変更されるならば生じる。
ARPキャッシュは代理ARPエントリをサポートする。ARP代理は、この装置がLANトラフィックのルータとして作用するときまたはARPの問い合わせに応答できない装置がLANに存在するときに使用される。
システム(ホストコンピュータとIT10Gハードウェア)が最初にネットワークに接続するとき、ユーザまたはホストコンピュータで動作するアプリケーションはネットワーク上の任意の他の装置がそのインターフェースに割当てられたIPアドレスの1つを使用しているか否かを試験するために無料のARPリクエストを行うべきである。同一のLAN上の2つの装置が同じIPアドレスを使用するならば、これは2つのホストの経路設定パケットについて問題を発生する。無料のARPリクエストはホスト固有のIPアドレスのリクエストである。問合せに対する回答が受信されないならば、LANにはIPアドレスを使用しているホストが他にないと仮定されることができる。
異なるタスクはARPキャッシュメモリに対するアクセスに関して異なる優先順位を有する。代理エントリの探索はARPリクエストに対する迅速な応答を必要とするために最高の優先順位を有する。第2の優先順位はダイナミックエントリをキャッシュに付加することであり、入来するARPパケットは非常に高いレートで受信され、再送信を避けるために可能な限り迅速に処理されなければならない。IPルータからのARP探索は次に高い優先順位を有し、それにホストコンピュータによる探索が続く。ARPエントリの手作業の生成は第2に低い優先順位を有する、満了キャッシュエントリは最低の優先順位を有し、キャッシュがARP探索を処理しないときまたは新しいエントリを生成しないときにはいつでも行われる。
[概要]
UT10Gはすべてのタイプの受信されたパケットで自動解析するIPv4パケットを固有にサポートする。
図16はIPモジュールブロックの1構成の概略ブロック図である。
[IPパーサ]
IPパーサモジュール161は受信されたIPパケットを解析し、パケットを送信する場所を決定するように動作する。各受信されたIPパケットはTCP/UDPモジュールまたは例外ハンドラへ送信されることができる。
IPv4だけがIPモジュールにより受取られ解析され、それ故、このフィールドは処理される0×4に相違ない。IPv6パケットが検出されるならば、例外ハンドラにより例外として管理され処理される。0×4よりも小さいバージョンを有する任意のパケットは奇形(不法)として考慮され、そのパケットはドロップされる。
IPヘッダ長フィールドは任意のIPオプションが存在するか否かを決定するために使用される。このフィールドは5以上でなければならない。それよりも小さいならば、パケットは奇形として考慮され、ドロップされる。
このフィールドは受信されたパケットにおいて解析または維持されない。
このフィールドは受信されたパケット中の総バイト数を決定し、次のレベルのプロトコルにそのデータセクションの最後が存在する場所を示すために使用される。このカウントの満了後で、ip_packet信号が主張を解除する前に受信されたすべてのデータバイトは埋め込みバイトであると仮定され、暗黙的に破棄される。
これらのフィールドはパケットの断片化解除に使用される。断片化されたIPパケットは専用のハードウェアにより処理されるか、または例外として扱われ、例外ハンドラにより処理されることができる。
このフィールドは受信されたパケットにおいて解析または維持されない。
このフィールドは解析または維持されない。これは単にチェックサムが正しいことを確実にするために使用される。チェックサムが不適切であることが判明したならば、すべての次の層に行くbad_checksum信号が主張される。これは応答されるまで主張の状態である。
このフィールドは解析されTCP/UDP層へ送信される。
このフィールドは解析され、ローカルスタックが応答すべき有効なIPアドレスに対してチェックされる。これは1よりも多くのクロックサイクルを取り、この場合解析は継続されなければならない。パケットが誤って誘導されていることが判明したならば、bad_ip_add信号が主張される。これは応答されるまで主張の状態である。
オンチッププロセッサは任意の16ビット値をIP_ID_Startレジスタへ書込むことによりIP IDシード値を設定できる。ID発生器はこの値を取り、異なるリクエスタにより使用されるIP IDを発生するために16ビットのマッピングを行う。オンチッププロセッサ、TCPモジュール、ICMPエコー回答発生器はすべてIPIDをリクエストできる。ID発生器の1構造のブロック図が図17に示されている。
IPインジェクタモジュールはオンチッププロセッサからIPおよびTCPモジュールへパケットを注入するために使用される。IPインジェクタ制御レジスタはIPモジュールレジスタスペースに位置され、これらのレジスタはオンチッププロセッサによりプログラムされる。IPインジェクタのデータフローを示すブロック図が図18に示されている。
[概要]
このセクションは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パラメータである。
TCPダンプモードはTCPダンプおよび他のパケット監視プログラムのような広く使用される診断プログラムに対するサポートを可能にするIT10Gハードウェアモードである。TCPダンプモードが使用可能になるとき、すべての受信されたパケットは例外としてホストに送信され、ハードウェアスタックから来るすべての出力されるTCP/UDPパケットは例外パケットとしてループバックされる。
ホストACKモードはホストコンピュータがデータをTCPセグメントから受信したときにTCP ACKだけを送信するIT10Gハードウェアモードである。ホストACKモードはデータセグメントを含んだMTXバッファのDMAがACKを送信前に完了するのを待機する。ホストコンピュータと統合ネットワークアダプタとの間をまたはその反対方向に通過するときにデータが破損する場合、ホストACKモードは付加的なデータの完全性を保証する。
IT10Gはタイムスタンプのサポートを行う。タイムスタンプはRFC1323(http://www/rfc-editor.org/rfc/rfc1323txtを参照)に規定されているTCPに対する強化である。タイムスタンプはTCPがRTT(ラウンドトリップ時間)測定を良好に計算することを可能にし、またPAWS(ラップされたシーケンスに対する保護)のサポートに使用される。
PAWS(ラップされたシーケンスに対する保護)はRFC1323(http://www/rfc-editor.org/rfc/rfc1323txtを参照)に規定されている。PAWSはTCP接続を破壊する古い重複セグメントに対する保護であり。これは高速度のリンクでは重要な特徴である。
TCPホスト再送信モードは統合ネットワークアダプタに位置するバッファからではなく、ホストのメモリバッファからの直接にデータの再送信を可能にする。これは統合ネットワークアダプタにより必要とされるメモリ量が減少されることを許容する。
初期シーケンス番号発生は秘密保護される必要がある。RFC1948はRFC793のオリジナルの初期シーケンス番号仕様の弱点を指摘し、幾つかの代わりの方法を推薦している。統合ネットワークアダプタはRFV1948にしたがって動作する最適化された方法を使用するが、ハードウェアで構成するのに効率的である。
二重スタックモードはネットワークアダプタに集積されるハードウェアTCP/IPスタックが協動してホストコンピュータのTCP/IPスタックを伴って動作することを可能にする。
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サポートは幾つかの最適化されたハードウェア素子からなる。1つのハードウェア素子は入力パケットからVLANヘッダ除去し、第2の最適化されたハードウェア素子はVLANタグが付された出力パケットを発生し、第3の最適化されたハードウェア素子は入力SYNフレームからVLANパラメータを生成し、第4の最適化されたハードウェア素子は例外パケットとUDPパケットのVLANタグ情報を通す。
ジャンボフレームは通常の1500バイトサイズのイーサネット(登録商標)フレームよりも大きい。ヘッダ情報に対して使用されるネットワーク帯域幅よりも小さいジャンボフレームはネットワークにおいて増加されたデータ処理能力を可能にする。統合ネットワークアダプタは9kバイトまでのジャンボフレームをサポートするために最適化されたハードウェアを使用する。
SNMPはネットワークおよびハードウェアアダプタ性能の統計が遠隔的に監視されることを可能にする上位レベルのプロトコルの形態である。
統合ネットワークアダプタは多数の統計カウンタに対して最適化されたハードウェアサポートを含んでいる。これらの統計カウンタは標準的な管理情報ベース(MIB)により規定されている。各これらのSNMP MIBカウンタはネットワークおよび統合ネットワークアダプタで生じる(受信され、送信され、ドロップされたパケット)事象を追跡する。
メモリエラーチェックおよび補正(ECC)は部分的なチェックに類似している。しかしながら、パリティチェックが単一ビットエラーだけしか検出できない場合にも、ECCは単一ビットメモリエラーを検出および補正し、二重ビットエラーを検出できる。
遺産モードはトラフィックタイプにかかわりなくすべてのネットワークトラフィックがホストコンピュータへ送信されることを可能にする。これらのモードは統合ネットワークアダプタがハードウェアTCP/IPスタックがアダプタに存在しないかのように動作することを可能にし、モードはしばしばダンプNIC(ネットワークインターフェースカード)と呼ばれる。
IP断片化されたパケットの再組立ては統合ネットワークアダプタにより処理されない。IP断片化パケットは例外パケットとして通過され、ドライバ中で再度組立てられ、その後IP注入モードを介して統合ネットワークアダプタへ“再注入”される。
IP注入モードはIPパケット(例えば再度組立てられたIP断片またはIPsecパケット)が統合ネットワークアダプタのハードウェアTCP/IPスタックに注入されることを可能にする。
NAT、IPマスカレード、ポート転送はポートのプログラム可能な範囲に入る特定されたタイプのUDPまたはTCPのすべてのパケットを例外パスに転送するポート範囲レジスタを介して統合ネットワークアダプタでサポートされる。ポートレジスタはある範囲のポートがNAT、IPマスカレード、ポート転送のようなネットワーク制御動作で使用されることを可能にする。
統合ネットワークアダプタハードウェアはその固有のIPアドレスとして応答できるIPアドレスの16までの範囲をサポートする。これらのアドレス範囲はマスクを有するIPアドレスベースとしてアクセス可能である。これはIPアドレスがIPアドレスの範囲まで拡張されることを可能にする。これは統合ネットワークアダプタがマルチホーミングまたは複数のIPアドレスに応答する能力を行うことを可能にする。
試験および制御ビットが統合ネットワークアダプタで使用可能になるとき、すべてのIPパケットは例外としてホストコンピュータへ送信される。このモードは診断目的用に設計される。
時間待機は受動的なモードのTCP接続の最終状態であり、時間待機状態とその動作はRFC793に記載されており、http://www.rfc-editor.org/rfc/rfc793.txtを参照されたい。
統合ネットワークアダプタハードウェアは可変のソケット数または接続数をサポートし、現在の構成では645535までのソケットをサポートする。
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すなわちサービスのタイプはIPパケットを優先させるためにルータにより使用されることができるIPアドレスパラメータである。TOSパラメータはシステムおよびソケット層で調節可能である必要がある。送信のとき、統合ネットワークアダプタハードウェアは幾つかのレジスタを介してTOSを設定する。詳しい情報はhttp://www.faqs.org/rfcs/rfc791.htmlでRFC791のセクションのサービスのタイプを参照されたい。
統合ネットワークアダプタハードウェアは送信されたデータのQoSを可能にするために4つの送信待ち行列をサポートする。各ソケットはQoS値を割当てられることができる。この値もまたVLAN優先順位レベルへマップされるために使用されることができる。
ネットワークアダプタ間のフェイルオーバー(failover)はNO_SYNモードによりサポートされる。NO_SYNモードは接続を開始しようとせずにソケットが生成されることを可能にする。これにより統合ネットワークアダプタハードウェアのソケットおよびすべてのその関連するデータ構造が接続を行わずに生成されることができる。NO_SYNモードはソフトウェアTCP/IPスタックから、統合ネットワークアダプタへの別のカードまたは接続の移行からのフェイルオーバーのサポートを可能にする。
図19はTCPモジュールの1構成のトップレベルのブロック図を示している。ソケット制御ブロック(CB)191は各ソケット接続に特有の情報、状態、パラメータ設定を含んでおり、仮想ソケット(VSOCK)アーキテクチャの最も重要またはキー部分を形成する。ロック機構は1つのモジュールがCBで動作しながら別のモジュールはそこで動作しないようにインストールされる。
図20はTCP受信200データフローを示している。
正常なIPトラフィックでは、パケットは64ビットのTCP Rxデータパスを介して受信される。パケットヘッダはTCPパーサモジュールへ進み、パケットデータは受信データメモリ制御装置201へ経路設定される。IP断片化トラフィックでは、データはメモリブロックを介して受信され、ヘッダ情報は正常なパスを介して受信される。これによりIP断片化からのメモリブロックは受信データメモリ制御装置により書込まれるデータブロックに類似して見える。CPUデータもまた受信されたデータを受信データメモリ制御装置を介して注入するためにメモリブロックを使用する。このアーキテクチャは正常および断片化されたトラフィックの処理において最大のフレキシブル性を与え、これは断片化されたトラフィックをサポートしながら性能が正常なトラフィックに最適化されることを可能にする。
受信TCPパーサはパケットヘッダ情報をIT10GネットワークスタックのTCP受信部分のその他のモジュールへ登録し、送信する。受信TCPパーサモジュールもまたCPU(オンチッププロセッサまたはホストコンピュータ)から受信ストリーム中へデータを注入することを必要とされるレジスタを含んでいる。CPUはメモリブロックをセットアップしなければならず、その後、受信TCPパーサレジスタに情報をプログラムする。受信TCPパーサはTCPヘッダの部分的なチェックサムを生成し、この部分的なチェックサムを受信データメモリ制御装置からの部分的なチェックサムへ付加し、結果的な完全なチェックサムをTCPヘッダのチェックサムと比較する。断片化されたパケットでは、受信TCPパーサは最後の断片中のIP断片化により送信されたチェックサムに対してTCPヘッダのチェックサムをチェックする。
受信データメモリ制御装置はIPとTCPモジュール間の64ビットバスからのデータをRxDRAMのデータメモリブロックへ転送する。2つの転送モードが存在する。正常のモードはTCPデータをメモリブロックに記憶するために使用される。生のモードはパケット全体をメモリブロックに記憶するために使用される。生のモードはNAT/IPマスカレードに使用される。例外処理では、正常なモードはCBデータをCPUへ転送するためにレジスタと共に使用される。
VSOCKモジュールはローカルおよび遠隔IPとポートアドレスをパケットから通過し、ソケットオープンまたはTIME_WAIT(TW)制御ブロック(CB)ポインタを受信状態ハンドラへ戻す。VSOCKはIPおよびポートアドレスでハッシュ計算を実行し、開放/TW CB探索テーブル(LUT)207へのインデックスの役目をするハッシュ値を生成する。その位置でのLUTエントリは開放208またはTW209制御ブロックへのポインタを保持する。
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により追跡される。
RST発生器はMACアドレス、4つのソケットパラメータ、RST応答を必要とするパケットで受信されたシーケンス番号を取り、RSTパケットを構成する。RST発生器は最初にパケットを作成するためにMTXメモリからブロックをリクエストする。RSTパケットは常に40バイトの長さであるので、これらのパケットは任意のサイズのMTXブロックで適合する。RST発生器は常に利用可能な最小のブロック、通常は128バイトのブロックをリクエストする。RSTパケットは0×0000で固定されたそれらのIP IDと、(断片ビットではない)IPヘッダ中に設定されたそれらのDFビットを有している。
受信・送信FIFOバッファは、受信状態ハンドラが受信されたパケットに応答して送信を必要とされることを決定したSYV/ACKとACKを待ち行列するために使用される。受信状態ハンドラは以下の情報を受信・送信FIFOバッファヘ通過する。
・ソケット情報を含むCBアドレス(16ビット)、
・CBタイプ(2ビット;00=半開、01=開放、10=Time_Wait)、
・送信されるメッセージタイプ(1ビット、0=SYN/ACK、1=ACK)。
SYN/ACK発生器212は受信・送信FIFOバッファから出力された情報を取り、半開、開放またはTime_Waitの特定されたCBからの他の適切な情報を探索し、SYN/ACKまたはACKの所望のパケットを作成する。SYN/ACK発生器は最初にパケットを作るためにMTXメモリからのブロックをリクエストする。SYN/ACKおよびACKパケットは常に40バイトの長さであるので、これらのパケットは常に任意のサイズのMTXブロックに適合する。SYN/ACK発生器は常に利用可能な最小のブロック、通常は128バイトのブロックをリクエストする。
NATおよびIPマスカレードブロック206はVSOCKモジュールと並列して動作する。NATおよびIPマスカレードブロックは入来するパケットを復号し、それが予め特定されたNATまたはIPマスカレードポート範囲であるか否かを見る。イエスであるならば、これがNATパケットであることをVSOCKへ示すためにシグナリング機構が使用される。これが生じるとき、パケット全体は受信メモリバッファ中にあるように、記憶される。パケットは次に幾つかの点でホストシステムに転送される。ホストシステムのドライバはその後経路設定機能を行い、ヘッダパラメータを置換し、それを適切なネットワークインターフェースへ送信するように動作する。
例外ハンドラはIT10Gコアにより処理されないホストコンピュータへパケットを送信する。
[rset発生]
rst信号はトップレベルのrset信号から同時に発生される。
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ヘッダ中に奇数のオプション半ワード(それぞれ32ビット幅)が存在するならば、TCPパケットのデータは整列され、データは64ビット境界で開始する。TCPパケットデータが整列されるならば、データがIPブロックから送信されるとき、TCPパケットデータは直接的にメモリブロックへ置かれることができる。セグメントに対する第2のブロックのアドレスはTCP状態マシーンに送信される。TCPセグメントに残されたデータと同様に、カウントはブロックに残されたスペースで維持される。メモリブロックが既に一杯であるならば、記録も維持されなければならない。TCPセグメントの最後に到達したとき、先のブロックが一杯であったならば、そのブロックは現在のブロックにリンクされなければならない。また現在のブロックヘッダ中のリンクはクリアされ、データ長およびデータの動作しているチェックサムはブロックヘッダに書込まれる。データ長はip_in_bytes_valのビットにより決定されるように、最後の64ビットワードのバイト数の関数である。TCPセグメントの最後になる前にブロックに余地がなくなったならば、データ長および動作しているチェックサムはブロックヘッダに書込まれ、ブロックが終了していることを示すフラグが設定される。TCPセグメントの残りのデータは大きいまたは小さい保留メモリブロックのいずれが使用されるかを決定するために使用される。ブロックサイズが尽きたならば、先の説明と同一のルールが使用される。最後のメモリブロックのアドレスはTCP状態マシーンに送信されなければならない。
TCPセグメントのデータが整列されていない(ip_in_data[63:0]が2つの異なるメモリブロックへ書込まれるデータを含んでいる)ならば、IPブロックから第1のlo32ビットの半ワードを記憶するため、最初に余分のサイクルが存在しなければならず、それによってデータはメモリブロックで高い32ビットの半ワードとして書込まれることができる。IPブロックから次のバスサイクル中に高い32ビットの半ワードは、記憶された半ワードと同じサイクルの低い32ビット半ワードとして書込まれる。カウントおよびチェックサム計算もこの状態を処理するために調節されなければならない。そうでなければ整列されていないデータは整列されたデータと同一方法で処理され、既に説明したのと同一の終了ケースを有する。
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は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]からラッチされる。両者は次のパケットで再ロードされるまで有効である。
注意:ラッチはまた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信号が主張され、次のパケットの開始までその状態である。
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)。
ソケット受信サブモジュールはIT10Gと、受信されたデータのシステム(ホストコンピュータ)との間のインターフェースを処理する。図23はソケット受信データフローを示している。
ソケット送信サブモジュールはIT19Gとデータ送信用のシステムとの間のインターフェースを処理する。図24はソケット送信フローを示している。
[概要]
TCP受信論理装置はオープンソケット接続を発見するためにLUTを使用する。LUTは18ビットによる128Kの深さである。
このセクションはmiscmemモジュールとNS DDRアービトレーションモジュールとの間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングを詳細にしている。
CB LUTはデータDRAMへの単一の読み書きのアクセスだけを行う。本発明の構成では、DRAMは外部であるが、メモリには代りにオンチップが設けられている。DRAMアクセスはDWORDにある。各LUTエントリは18ビットだけなので、DWORDの下部18ビットだけがCB LUTメモリインターフェースに送られる。
[概要]
TCP送信サブモジュールはデータ送信に対する次にサービスされるべきソケットを決定し、したがってソケットCBブロックを更新するように動作する。データフローは図25に示されている。
パケットスケジューラは次に送出されるパケットを決定するように動作する。1構成のこのモジュールのブロック図が図26に示されている。
フラットシーケンスはスケジューラが任意のリセット後に使用するデフォルトシーケンス状態である。フラットシーケンスはまた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受信論理装置からのパケットである。この方式では、各リストは以下の帯域幅割当てを有する。
プログラムされたフラットシーケンスの代りのものは急峻なシーケンスである。急峻なシーケンスは高い優先順位の待ち行列にさらに加重し、多数の高い優先順位のアプリケーションが同時に行われる場合に便利である。急峻なシーケンスは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
このシーケンスのパーセンテージ帯域幅を以下に示す。
使用されるハッシュアルゴリズムは単一の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演算処理される。
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は先に規定された式である。
[動作理論]
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試験モードは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に書込む(テストモードを使用可能にする)。
[概要]
ソケット制御ブロックまたはCBは各ソケットに対する動作情報を含んでおり、CBメモリスペース中に存在する。CBはすべての状態情報、メモリポインタ、構成設定、ソケットに対するタイマ設定を含んでいる。これらのパラメータは種々のTCPサブモジュールにより更新されることができる。ロック機構は一度にただ1つだけのサブモジュールがソケットCBを変更できることを確実にする。IT10Gは半分オープン状態、設定された状態、閉じた状態であるソケットに対する異なるCB構造を使用する。
以下のテーブルは設定されたソケットのメモリの主要なTCP/UDP CB構造におけるすべてのフィールドをリストしている。また、以下に規定される付随TCP CB構造も存在する。
[遠隔IPアドレス(アドレス0×00、32ビット)]
この32ビットフィールドは接続のための遠隔IPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはSYNパケットで受信されるIPアドレスまたは受信されたUDPパケットのIPアドレスにより埋められる。
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットでは、このフィールドは常にアプリケーションによって特定される。サーバソケットでは、このフィールドは常にSYNまたはUDPパケットで受信されるポート番号で埋められる。
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
このフィールドはソケットに対するホストインターフェースのIPアドレスのネットワークスタックIPアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより埋められる。
このビットは受信されたACK状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するACKが受信されたとき、状態メッセージが発生される。このモードはNagleアルゴリズムと共に使用される。
このビットは選択的なACKオプション(SACK)がこのソケットと共に使用されるべきであることを示している(0=SACKを使用してはならない、1=SACKを使用しなさい)。
このビットはタイムスタンプオプションがこのソケットにより使用されるべきであることを示している(0=タイムスタンプオプションを使用してはならない、1=タイムスタンプオプションを使用しなさい)。
このフラグはスライディングウィンドウオプションがTCPソケットに対して適切に交渉されていることを示している(0=WSオプションを使用してはならない、1=WSオプションが使用可能になる)。このビットはUDPソケットでは使用されない。
このビットはソケットのピアウィンドウが0×0000であり、ソケットがゼロのウィンドウプローブ状態にあることを示している。
このビットはACKパケットが特定のソケットで送信されるときに設定される。これはACKパケットが送信されるときにクリアされる。
このビットは現在のCBが受信・送信FIFOバッファ待ち行列中にあり、したがって減少されることができないことを示している。一度、ソケットに対するACKが送信されると、TCP送信ブロックはOpen CBからTime_Wait CBへ移動する。
このビットはCBが有効な情報を含んでいることを示している。任意のCBの減少前に、このビットは常にクリアされる。
このビットはCB再送信時間が満了したが、優先順位待ち行列が一杯であるために再送信のために待ち行列されることができないことを示している。CBポーラがCBで主張されているこのビットを発見するとき、これは再送信時間フィールドを無視し、再送信のためにCBを処理する。このビットはCBが優先順位送信待ち行列に入ったときにクリアされる。
これらのビットはCBのバージョンを示し、主にオンチッププロセッサにより使用され、それによって将来のハードウェアバージョンのCBのタイプを区別できる。このフィールドは0×1として現在規定されている。
これらのビットはソケットの特定の物理的インターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィールドは0×0で残されるべきである。
これらのビットはTW状態にありながら、ソケットがSYNパケットを受信したことを示している。このビットが設定され、その後ソケットでRSTを受信し、kill_tw_modeが0×00に設定されるならば、CBは直ぐに無視される。
このビットはTXの左および右のSACKフィールドが有効であることを示している。TCP受信論理装置が受信されたデータの穴に気づいたとき、TCP受信論理装置は穴の開始および終了アドレスをTXの左および右SACKフィールドへ位置させ、次に送信されるパケットがSACKオプションを含むべきであることを示すためにこのビットを設定する。これらのパラメータを含んだパケットが送信されるとき、このビットはクリアされる。
このビットはRXの左および右のSACKフィールドが有効であることを示している。TCP受信論理装置がSACKオプションを受信したとき、TCP受信論理装置はSACK値の第1の対をRXの左および右SACKフィールドへ位置させ、このセクションが再送信される必要があることをTCP送信機に示すためにこのビットを設定する。セクションが再送信されるとき、このビットはクリアされる。
TCPソケットでは、このビットはキープアライブタイマがこのソケットを使用されるべきであることを示している(0=キープアライブタイマを使用してはならない、1=キープアライブタイマを使用しなさい)。UDPソケットでは、このビットはチェックサムがチェックされるべきであるか否かを示している(1=チェックサムを使用可能にする、0=チェックサムを無視する)。
このビットはソケットに対するIPヘッダのDFビットの状態を表している。このビットが設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスMTU発見のために使用される。
このビットはVLANタグが出力するイーサネット(登録商標)フレームに含まれるか否かを示している。このビットが主張されるならば、VLANタグ情報の4バイトはcb_tx_vian_priorityと、cb_tx_vidにより作られ、VLANタグ識別(固定された値)は後続するイーサネット(登録商標)アドレスフィールドに含まれる。
このフラグはタイムアウト状態と、再送信が必要とされることを示すために使用される。データが再送信されるときにクリアされる。このビットはTCP CB用にのみ規定される。
このフラグはUDPポートがダイナミックに割当てられるか予め特定されているかを示すために使用される。ダイナミックに割当てられるならば、CBがデプリケートされるときに割当てを解除される。そうでなく予め特定されるならば、CBがデプリケートされるときポートアクションは行われない。このビットはUDP CBに対してのみ規定される。
このビットはソケットでの遅延されたACK送信でACKが待ち行列されることを示している。このビットはTCP RX論理装置で設定され、ACKが送信のためにCBポーラにより待ち行列されるときにクリアされる。
これはTCP接続の動作ACK番号である。これは受信されたTCP PSHパケットの予測されるSEQ番号を表している。TCPデータパケットが受信されるとき、SYN番号はこの番号に対してチェックされる。一致するか、受信されたSEQ番号+パケットの長さがこの番号をカバーするならば、データは受入れられる。この番号はネットワークスタックにより自動的に更新され、UDP接続に使用されない。
これはTCP接続の動作SEQ番号である。これはTCPパケットで使用されるSEQ番号を表しており、ネットワークスタックにより自動的に更新される。このフィールドはUDP接続に使用されない。
このフィールドはキープアライブトリガーが主張されるときの将来の時間を表している。この時間はパケットがソケットで送信される毎に、または純粋なACKパケットが受信される毎にリセットされる。その時間はここでは分の単位で表される。
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効値は0×00から0×0Eである。
このフィールドはTCP SYNパケット中の遠隔端によりリクエストされるときのスライディングウィンドウスケールファクタを表している。有効値は0×00から0×0Eである。
このフィールドはTCP接続のためのSYNパケットで受信されたMSSを表している。これは遠隔端部が受けることができる最大のパケットサイズを示している。MSSオプションが受信されないならば、このフィールドは536(0×0218)にデフォルトされる。このフィールドはUDP接続に使用されない。
このビットはCBのポートが自動割当てされたことを示すために使用される。このビットが設定されるならば、CBをデプリケートするときが来ると、このビットはポートが割当てを解除される必要があるか否かを検査される。
このフィールドはVLANタグに使用されるユーザの優先順位レベルを表している。このフィールドはまた送信スケジュール中のソケットのサービスレベルを表している。番号の数が高い程、優先順位は高くなる(7が最高で、0が最低)。このフィールドのデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
このフィールドはVLAGタグフレームで使用されるVLAG識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定されることができる。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受けられるVIDにより設定される。
このフィールドはこのソケットで送信されているパケットの目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスで問合せられる。これが解決された後、アドレスはここに記憶され、さらにARPキャッシュの問合せは避けられる。CBがサーバソケットとして生成されるならば、このアドレスはSYNソケットに含まれる目的地MACアドレスから取られる。アドレスのビット[47:32]はCBアドレス0×6に記憶される。
このフィールドはソケット接続に対するローカルIPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより特定される。サーバソケットでは、このフィールドはCBが半開きから開いた状態まで転移されるときに満杯にされる。
このフィールドはこのソケットに対してピアから受信された最近のACK番号を表している。これは任意の再試行がソケットで必要とされるか否かを決定するために使用される。これは送信されたパケットで使用されるシーケンス番号とは異なる番号であることに注意すべきである。
このフィールドはcwndパラメータを追跡する。cwndパラメータは混雑の回避およびスロースタートアルゴリズムで使用され、1MSSに初期化される。
このビットはホスト_ACKモードがこのソケットでアクチブであることを示している。このモードでは、データACKはホストによりトリガーされ、データが受信されるときに自動的に送信されない。
このビットはCBに対するRX DAV状態メッセージがオンチッププロセッサに送信されたことを示している。ビットはデータがホストにDMAされたときをクリアする。
このビットはデータが現在、ソケット受信メモリブロック中に存在しないことを示すために使用される。
このフィールドは受信データが書込まれた最後のMRXバッファのアドレスを表している。これはソケットに使用される次のメモリブロックをリンクするために使用される。
このフィールドはホストに送信される次のMRXバッファのアドレスを表している。
このビットはホストへDMAされるデータが残留し、RX DMA状態メッセージがまだ送信されていないことを示している。TCP RX論理装置はRX DMA動作をスケジュールするときにこのビットを設定し、RX DMAの行われた状態メッセージをリクエストするときにTCP RX論理装置によりクリアされる。このビットはFIN対状態メッセージタイミング発行を容易にすることに使用されている。
このビットはTCP受信論理装置からTCP送信論理装置へのACKリクエストが保留中であることを示している。それはTCPデータパケットが受信されるときに設定され、データのACKが送信されるときにクリアされる。このビットが依然として設定されながら別のデータパケットが受信されるならば、別のACKがリクエストされないで、受信されたACK数が更新される。
このビットはこのソケットがiSCSIアプリケーションであることを示している。
このビットはこのソケットがオンチッププロセッサソケットアプリケーションであることを示している。
このビットは重複ACKのために再送信を行ったことを示している。これは再送信されたパケットが送信されるときに設定される。受信されたACKポインタを進めるACKを獲得するときクリアされる。重複ACK再送信後、新しいデータに対するACKを得るとき、cwnd=ssthresh(高速度回復アルゴリズムの一部)を設定する。このビットはワード0×14でDSビットと共に使用される。失われたセグメントの再送信は一度だけ行われるので2つのビットを必要とする。
このビットは再送信時間フィールドが有効(0=無効、1=有効)であることを示している。
このビットは再送信時間フィールドが有効(0=無効、1=有効)であることを示している。
このビットは時間を定められたパケットが現在経過中であることを示している。RTOオプションが使用可能にならない場合のみ使用される。
このフィールドは送信される次のMTXバッファのアドレスを表している。
このフィールドはTCP RXハードウェアにより追跡されるときの動作ウィンドウサイズを表している。このウィンドウは実際のウィンドウサイズを維持し、MSSよりも大きいときのみ実際のウィンドウに転送される。
このフィールドは最後のRX DMA状態メッセージ移行にRX DMAを介してホストへ送信されるバイト数を表している。カウントのMSBはアドレス0×12に記憶される。
このフィールドはRX DMAが使用されている現在のホストメモリバッファへのオフセットを表している。
このフィールドはソケット接続で可能にされた最大の広告されたウィンドウを表している。
これはRX DMA動作に使用されるRXリンクリストのオンチッププロセッサメモリアドレスである。
これはRX DMA転送の転送限度である。RX DMA状態メッセージはこの限度に到達されると発生される。各DMA転送後に状態メッセージを必要とするCBに対しては、この限度は0×0001に設定されるべきである。
これはRX DMAリンクリストのエントリ数である。
このビットは現在のCBがキープアライブ状態にあることを示すために使用される。このビットはキープアライブタイマがCBで満了するときに設定され、キーブアライブが他の側がなくなった(消滅した)ことを発見したためにCBが割当てを解除されるとき、またはキープアライブプローブ(ACKパケット)に対する応答を受信するときにTCP−RXによりクリアされる。
このフィールドは重複されたACKがいくつ受信されたかを追跡する。このパラメータは高速再送信アルゴリズムに使用される。
このフィールドは特定のパケットに対して送出される再試行数を追跡する。これはまた送信されたウィンドウプローブの数の追跡を維持するために使用される。後者の数は適切なウィンドウのプローブ送信インターバルが使用されることができるために必要とされる。
このフィールドはソケットで送信されるのに利用可能なデータの総量を表している。
これはソケットチャンネルの番号である。状態メッセージがホストに返送されるとき、このチャンネルは使用される待ち行列を特定する。
このビットはSACK再送信が必要であることを示している。これはSACK再送信が送出されるときに再送信モジュールにより設定されクリアされる。
このビットはFINパケットがこのソケットで送出されていることを示している。これはTCP TX論理装置により設定される。
このビットはソケットが重複ACK状態にあることを示している。このビットは重複ACK閾値に到達するときに設定される。ピアACKが新しいデータのときにクリアされる。
このビットはピアの広告されたウィンドウがMSSの2倍を超えたことを示している。このビットが設定されるならば、データはMSSサイズの最大でMTXに記憶される。ビットが設定されないならば、データはMSSの4分の1の最大で記憶される。
このビットは次のCBリンクフィールドの制御ブロックのタイプがUDP CBであることを示している。
このビットは次のCBリンクフィールドの制御ブロックのタイプがTW CBであることを示している。
このフィールドは次にリンクされたCBのCBメモリアドレスを表している。このCBはこのソケットと同一のハッシュ値を有する。VSOCKサブモジュールはこれがCBを同じハッシュ値に連結するときにこのフィールドを満たす。
このフィールドはスライディングウィンドウスケールファクタにより調節されない遠隔端部の広告されたウィンドウを表している。
このフィールドはソケットのIPヘッダで使用されるTTLを表している。
このフィールドはソケット接続のためにIPヘッダで使用されるTOSフィールド設定を表している。これはアプリケーションにより設定されることができる随意選択的なパラメータである。TOSパラメータが特定されないならば、このフィールドは0×00にデフォルトする。
一度に1つのセグメントをタイミングを定めるとき、このフィールドは時間を定められたパケットのシーケンス番号を記憶するために使用される。このシーケンス番号をカバーするACKが受信されるとき、RTTはそのパケットに対して得られることができる。このパケットが送信されたときのタイムスタンプは最後の送信フィールドのローカルタイムスタンプ中に記憶される。タイムスタンプオプションが使用可能になるとき、このフィールドはTCPパケットで受信されるタイムスタンプを記憶するために使用される。
このフィールドはRFC793に特定されたファンヤコブソンアルゴリズムを使用して計算されるような往復時間測定の平滑化された平均導出を表している。
このフィールドはssthreshパラメータを追跡する。ssthreshパラメータは混雑回避アルゴリズムに対して使用され、0×0000FFFFに初期化される。
このフィールドはRFC793中で特定されたファンヤコブソンアルゴリズムを使用して計算されるような平滑化された往復時間値を表している。
このフィールドは再送信がソケットで必要とされるときの将来の時間を表すために使用されている。
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第1のアイランドの第1のバイトのシーケンス番号(最低のシーケンス番号)を表している。
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第1のアイランドの最後のバイトのシーケンス番号(最高のシーケンス番号)に1を足した数を表している。
このフィールドは受信されたパケットのSACKオプションにより報告されたシーケンス外データの第1のアイランドの第1のバイトのシーケンス番号を表している。
このフィールドは受信されたパケットのSACKオプションにより報告されたシーケンス外データの第1のアイランドの最後のバイトのシーケンス番号に1を足した数を表している。
[RX左SACKメモリアドレス(アドレス0×0[23:0]、24ビット)]
このフィールドはSACKアイランドのブロックのリンクされたリストの第1のMRXメモリブロックの第1のアドレスを表している。
このフィールドはSACKアイランドのブロックのリンクされたリストの最後のMRXメモリブロックの第1のアドレスを表している。
このフィールドはソケットにより使用されるメモリブロック数を表している。
このフィールドはソケットのMRSメモリに書込まれるバイトの総数を表している。最下位桁ワードはアドレス0×2に記憶され、最上位桁ワードはアドレス0×3に記憶される。
このフィールドはソケットで送信されるバイトの総数を表している。最下位桁ワードはアドレス0×4に記憶され、最上位桁ワードはアドレス0×5に記憶される。
このビットはCBがiCSIソケットとして使用されていることを示している。
このビットはCBが受信されたバッファリストに対するMDLを使用していることを示している。
このビットはソケットで重複したACKを受信したことを示している。これは重複のACKを処理する論理装置により設定される。重複のACKが受信され、このビットが既に設定されるならば、失われたセグメントは再送信されない。これは主要なオープンCB構造のワード0×0DのDAビットと共に使用される。これらの2つのビットの状態テーブルを以下に示す。
このビットはiSCSIメモリブロックが処理されるときにdavscanモジュールにより設定され、そのブロックのシードが保存されるときにクリアされる。ビットはハードウェアによってCRCシードのローカルコピーが更新されていないことをホストに示すように主張される。ホストがCRCシードをリセットしたいとき、このビットを最初にプローブする必要がある。ビットが主張されるならば、ソケットにSeed_Clrd_by_Hostビットを設定する必要がある。CRCシードのローカルコピーをホストにより書かれた新しい値で更新するときに、ハードウェアはこのビットをクリアする。
このビットは新しい値をCB ANDのCBのiSCSIシードに書込むときにホストにより設定され、INビットが設定される。davscanモジュールはこのビットが設定されることを観察するとき、iSCSIシードとCBのこのビットをクリアする。
このフィールドはMDL DMA転送がどの程度の長さであるべきかを示すために使用される。通常、RX_MDL IBを発生したRX_DAV状態メッセージで報告されたのと同じ長さである。
このフィールドはソケットの接続で使用されるすべてのSAエントリのハッシュ値を表している。
このフィールドはピアからの、最後の未承認されたシーケンス番号を表している。この相対は計算を記憶するためタイムスタンプで使用される。
このフィールドはiSCSI接続のためのFIMインターバルを表している。これはバイト数として記憶される。
このフィールドは次のFIM挿入までのバイト数を表している。
このフィールドは受信されたiSCSIデータのCRCシードを表している。
このフィールドはIPSECヘッダ(および過剰なIPヘッダ)が1つのパケットで占める二重ワード数(4バイト)に関するオーバーヘッドを表している。この情報はパケットに置かれることができるデータ量を決定するときに使用される。
このビットはFIMサポートがCBで必要とされるか否かを示す(0=FMディスエーブル、1=FIMエネーブル)。
このフィールドはソケットにより現在使用されているMRXバッファの数を表している。この数がMRXバッファ限度(全般的な設定)に到達するとき、これ以上データパケットはソケットで受けられない。
このフィールドはDAV状態メッセージに対して使用されるバッファ長を示している。
このビットはRX FIN受信状態メッセージがCBで送信されるべきであることを示している。
このビットはRX DAV状態メッセージがCBに対して送信されるべきことを示している。
このビットはRX DMAが行った状態メッセージがCBでペンディング中であることを示している。
このビットはホストバッファセグメントの最後のDMAが送信されていることを示している。このDMAの完了時、RX DMA状態メッセージが発生される。
このビットはFIN状態メッセージがペンディングであることを示している。これはMRXメモリにデータが残留するが現在進行中のDMAがないときに設定される。これはDMAがスタートし、SVビットが設定するときにクリアされる。
このビットはリセット状態メッセージがペンディングであり、RX DMA状態メッセージ後に送信されるべきであることを示している。これはMRXメモリにデータが残留するが現在進行中のDMAがないときに設定される。これはDMAが開始し、SVビットが設定するときにクリアされる。
このビットはRSTパケットが受信され、tcprxstaとdavscanモジュール間でのみ使用される。
このビットはソケットが待機時間状態に転移され、待機時間転送プロセスへのオープンが完了されたことを示す。このビットはdavscanにより設定され、rxcbupd.vにより読取られる。
このフィールドは次のゼロウィンドウプローブを送信する将来のタイムスタンプを示している。
このフィールドはソケットに関連するTXトンネルAH SA(セキュリティ関連)ハンドルを表している。
このフィールドはソケットに関連するTXトンネルAH ESP SA(セキュリティ関連)を表している。
このフィールドはソケットに関連するTX転送AH SA(セキュリティ関連)ハンドルを表している。
このフィールドはソケットに関連するTX転送ESP SA(セキュリティ関連)を表している。
これらのバイトはiSCSI CRC計算の非整列バイトを表している。
このフィールドは有効であるiSCSIバイト[2:0]を示すために使用される。
このフィールドはピアにより広告された最大のウィンドウを表している。これはMTXデータパッキング限度で使用されるパラメータを決定するために使用される。
このフィールドはSYNまたはSYN/ACKパケットで使用されるローカルMSS値を表している。これはウィンドウサイズの調節に使用される。
このフィールドはcwndが更新された最後のタイムスタンプを表し、この情報はそれがssthreshよりも大きいときにcwndを増加するために使用される。
このフィールドはCBに対するDMA IDを表している。このフィールドはTCP TX DMAがリクエストされる毎にインクリメントされる。xmtcbwrモジュールがDMA転送のパッキングを終了したとき、MDA IDがCBにあるものと一致するならば、DMA_Pendingビットは(xmtcbwrにより)クリアされる。
このフィールドはTX DMAがこのソケットでペンディングであることを示している。このビットはTX DMAをリクエストするときにsockregsにより設定され、TX DMA IDが丁度、CBのTX_DMAに一致するときにxmtcbwr.vによりクリアされる。
[遠隔IPアドレス(32ビット、ワード0×0[31:0])]
これは接続の遠隔端部のIPアドレスである。IPアドレスのビット[31:16]はワード0×0に記憶され、ビット[15:0]はワード0×1に記憶される。
これは接続の遠隔端部のポートアドレスである。
これは接続のローカル端部のポートアドレスである。
これはこの接続に使用されるローカルIPアドレスのインデックスである。この値はIPモジュールによって完全なIPアドレスおよび対応するMACアドレスへ解かれる。
このビットはRX ACK状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するACKが受信されるとき、状態メッセージが発生される。
このビットは遠隔端部がそのSYNパケットでSACKオプションを送信したことを示している。
このビットは遠隔端部がタイムスタンプオプションを送信し、受信されたタイムスタンプフィールドが半分開かれた添付制御ブロックで有効であることを示している。
このビットは遠隔端部がウィンドウスケールオプションを送信したことを示している。
このビットは遠隔端部がMSSオプションを送信し、遠隔MSSフィールドが有効であることを示している。
このビットはACKがこのソケットに対してリクエストされることを示している。これは設定制御ブロックで類似のビットが重複しているが、ここでは使用されないことを意味している。
このビットはこのCBがRxからTXへのFF待ち行列にあるが故に、まだ消滅されることができないことを示している。
このビットは半分開かれたCBが有効であることを示している。
これらのビットはCBのバージョンを示している。このフィールドは現在0×1に規定されている。
これらのビットは発信するSYNが来るインターフェースを示している。
このビットはHO CBがIPSEC保護されたパケットで使用されていることを示している。この場合、このHO CBに一致しない受信されたSYNが破棄される。
このビットはキープアライブタイマがこのソケットで使用されるべきであることを示している。
このビットはIPヘッダの断片化されてはならないビットを特定するために使用される。
このビットはVLANフィールドが有効であることを示している。
このビットは再送信がこのソケットで必要とされていることを示している。
このビットはURGビットが受信されたパケットで設定されたことを示している。
これは送信されたパケットで使用されるACK数である。
これは送信されたパケットで使用される動作シーケンス番号である。
このフィールドは(二重ワード数で)CBのIPSECオーバーヘッドを記憶するために使用される。
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効な値は0×00から0×0Eである。
このフィールドはTCP SYNパケットの遠隔端部によりリクエストされるようなスライディングウィンドウスケールファクタを表している。有効な値は0×00から0×0Eである。
このフィールドはTCP接続に対するSYNパケットで受信されるMSSを表している。これは遠隔端部が受けることのできる最大のパケットサイズを示している。MSSオプションが受信されないならば、このフィールドは536(0×0218)にデフォルトされる。このフィールドはUDP接続に使用されない。
このフィールドはVLANタグに使用されるユーザ優先順位レベルを表している。それはまた送信スケジュール中のソケットに対するサービスレベルも表す。数が高いほど、優先順位は高い(7が最大であり0が最低である)。このフィールドに対するデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
このフィールドはVLANタグフレームで使用されるVLAN識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受信されるVIDにより設定される。
これらのフィールドはこのソケットで送信されているパケットに対する目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスに対して問合せられる。解決された後、アドレスはここに記憶され、それによりこれ以上のARPキャッシュ問合せを防止する。CBがサーバソケットとして生成されるならば、このアドレスはSYNパケットに含まれる目的MACアドレスから取られる。
これは受信されたパケットに含まれるタイムスタンプである。
これはこのソケットに対して送信された最後のパケットのタイムスタンプである。
これは接続に使用されるTTLである。SYN/ACKが発生されるとき、このパラメータはIPルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
これは接続に使用されるTTLである。SYN/ACKが発生されているとき、このパラメータはIPルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
このフィールドは特定のソケットに対して送信されるSYN/ACK再試行数を追跡する。再試行数がプログラムされた最大値に到達するならば、ソケットはデプリケートされる。
このフィールドはSYNパケットで受信された目的地IPアドレスを記憶するために使用される。これはソケット接続のためのローカルIPアドレスを表している。
このフィールドはCBに対して(適用可能であるならば)TXトンネルAH SAハンドルを記憶するために使用される。
このフィールドはCBに対して(適用可能であるならば)TXトンネルESP SAハンドルを記憶するために使用される。
このフィールドはCBに対するSAハッシュを記憶するために使用される。
このフィールドはCBに対して(適用可能であるならば)TX転送AH SAハンドルを記憶するために使用される。
このフィールドはCBに対して(適用可能であるならば)TX転送ESP SAハンドルを記憶するために使用される。
このフィールドは接続で使用されるローカルMSS値を記憶するために使用される。これはシリ−ウィンドウシンドロームを避けるためにウィンドウサイズを調節するのに必要とされる。
[遠隔IPアドレス(アドレス0×00、32ビット)]
この32ビットフィールドは接続のための遠隔IPアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはSYNパケットで受信されたIPアドレスまたは受信されたUDPパケットのIPアドレスにより満たされる。
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットではこのフィールドは常にアプリケーションにより特定される。サーバソケットでは、このフィールドはSYNまたはUDPパケットで受信されたポート番号で満たされる。
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
このフィールドはソケットのホストインターフェースにおけるIPアドレスのネットワークスタックIPアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより満たされる。
このビットはRX ACK状態メッセージモードが使用可能になることを示している。このモードはTW CBに対しては意味がない。
このビットは選択的なACKオプション(SACK)がこのソケットで使用されるべきであることを示している(0=SACKを使用してはならない、1=SACKを使用する)。
このビットはタイムスタンプオプションがこのソケットで使用されるべきであることを示している(0=タイムスタンプオプションを使用してはならない、1=タイムスタンプオプションを使用する)。
このフラグはスライディングウィンドウオプションがTCPソケットに対して適切に交渉していることを示している(0=WSオプションを使用してはならない、1=WSオプションが使用可能になる)。このビットはUDPソケットで使用されない。
このビットはCBの遠隔MSSフィールドが有効であることを示している。MSSはワード5[15:0]に位置されている。
このビットはACKパケットが特定のソケットで送信されるときを設定される。これはACKパケットが送信されているときクリアされる。
このビットはまだデプリケートされることができないように、現在のCBが受信・送信FIFOバッファ待ち行列にあることを示している。一度、ソケットのACKが送信されると、TCP送信ブロックはオープンCBからTime_Wait CBへ移動する。
このビットはCBが有効な情報を含んでいることを示している。任意のCBをデプリケートする前に、このビットは常にクリアされる。
これらのビットはCBのバージョンを示しており、ハードウェアの将来のバージョンのCBを弁別するためにオンチッププロセッサにより使用される。このフィールドは現在0×1として規定される。
このビットはソケットに対する特定の物理的なインターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィーは0×0で残されるべきである。
このビットはキープアライブタイマがこのソケットと共に使用されるべきであることを示している(0=キープアライブタイマを使用してはならない、1=キープアライブタイマを使用する)。
このビットはソケットに対するIPヘッダのDFビットの状態を表している。設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスMTU発見に使用される。
このビットはVLANタグが出力するイーサネット(登録商標)フレームに含まれるか否かを示している。それが主張されるならば、cb_tx_vlan_priorityおよびcb_tx_vidにより作られるVLANタグ情報の4バイトとVLANタグ識別(固定した値)が含まれ、それにイーサネット(登録商標)アドレスフィールドが後続する。
このフラグはタイムアウト状態および再送信が必要であることを示すために使用される。それはデータが再送信されるときにクリアされる。
このビットは緊急のデータが受信されたことを示している。これはアプリケーションがこの受信された緊急データポインタを読取るまで(または読取ったことを示すまで)主張される。
これはTCP接続のための動作ACK番号である。これは受信されたTCP PSHパケットの予測されたSEQ数を表している。TCPデータパケットが受信されるとき、SYN数はこの数に対してチェックされる。これが一致するか、受信されたSEQ数+パケット長がこの数をカバーするならば、データは受取られる。この数はネットワークスタックにより自動的に更新され、UDP接続には使用されない。
これはTCP接続のための動作SEQ数である。これはTCPパケットで使用されるSEQ数を表しており、ネットワークスタックにより自動的に更新される。このフィールドはUDPソケットには使用されない。
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。
このフィールドはTCP SYNパケットの遠隔端部によりリクエストされるときのスライディングウィンドウスケールファクタを表している。
このフィールドはTCPローカルスライディングウィンドウフィールドで広告されたウィンドウの16ビットを表している。
このフィールドはVLANタグに対して使用されるユーザ優先順位レベルを表している。また送信スケジュール化中のソケットに対するサービスレベルを表している。数が高い程、優先順位は高くなる(7が最高であり、0が最低である)。このフィールドのデフォルト値は0×0であり、ソフトウェアにより設定されることができる。
このフィールドはVLANタグフレームで使用されるVLAN識別を表している。このフィールドのデフォルト値は0×000であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングSYNパケットで受信されるVLAN識別により設定される。
このフィールドはこのソケットで送信されているパケットの目的地MACアドレスを表している。ソケットが最初に設定されるとき、ARPキャッシュはこのアドレスを問合せられる。解決後、さらにARPキャッシュの問合せを避けるようにアドレスはここに記憶される。CBがサーバソケットとして生成されるならば、このアドレスはSYNパケットに含まれる目的地MACアドレスから取られる。アドレスのビット[47:32]はCBアドレス0×6に記憶される。
このフィールドはソケット接続のローカルIPアドレスを表している。
これは受信されたパケットに含まれるタイムスタンプである。
これはCBが時間待機状態を入ったときのタイムスタンプである。
これはCBに対するトンネルAH SAハンドルである。これはCBのトンネルAH(TA)ビットが設定されるときにも有効である。
検索チェーンの次のCBのリンクである。
これはCBに対するトンネルESP SAハンドルである。これはCBのトンネルESP(TE)ビットが設定されるときにも有効である。
検索チェーンのエージによる次のCBに対するリンクである。
検索チェーンのエージによる先のCBに対するリンクである。
これはCBに対する転送AH SAハンドルである。これはCBの転送AH(NA)ビットが設定されるときにも有効である。
これはCBに対する転送ESP SAハンドルである。これはCBの転送ESP(NE)ビットが設定されるときにも有効である。
[概要]
IT 10Gはスロースタート、混雑防止、高速再送信、高速度回復アルゴリズム、ウィンドウスケーリング、ハードウェアの順序が乱れているパケットの再順序付けを実行する。さらにIT 10Gは1よりも多数のセグメントが一度に時間を定められることを可能にするラウンドトリップ時間TCPオプションをサポートする。これらの特徴は高速度ネットワークで必要とされる。
IT 10Gは2つの方法でラウンドトリップ時間(RTT)を測定することができる。伝統的な方法では、時間測定はTCP PSHパケットからパケットのACKが受信されるときまで行われる。時間を定められたパケットのシーケンス番号はCB中の時間を定められたパケットフィールドのシーケンス番号に記憶され、パケットのタイムスタンプはCBの最後の送信フィールドのタイムスタンプ中に記憶される。時間を定められたパケットのACKが受信されるとき、現在のタイムスタンプと記憶されたタイムスタンプとの間のデルタは往復時間RTTである。ACKが受信されるとき、ソケットCB中のRTO [1]ビットは次のパケットが時間を定められることを示すためにクリアされる。
スロースタートはRFC1122に最初に記載されたTCP混雑制御機構であり、さらにRFC2001のhttp;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtに記載されている。
ネットワークスタックはピアからの最小のcwndと広告されたウィンドウの送出を維持する。混雑防止アルゴリズムはまたスロースタート閾値変数(ssthresh)を使用し、これは0×FFFFに初期化される。
高速再送信は最初に実験プロトコルとしてRFC112に記載され、RFC2001で形式化され、http;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtを参照することができる。
論理の再送信サポートは3つの位置、即ちデータが送信される位置、受信されたACKを処理する位置、CBポーラ中の位置に存在する。
データを送信するとき、送信論理装置は関連するCBの再送信有効ビットを観察する。ビットが設定されていないならば、有効な再送信時間が記憶されていないことを暗示しており、(CBに)現在記憶されているRTOは現在のタイムスタンプに付加される。結果的な時間はパケットに対する再送信時間である。この時間はCBに記憶され、CBの再送信有効ビットが設定される。
TCP RXモジュールがACKを受信するとき、(含まれるならば)ACKのタイムスタンプと共にTXモジュールへ通知を送信する。TXモジュールはRTOの更新にこの情報を使用する。ACKが再送信されたパケットに応答するならば、この更新は行われない。パケットが再送信されたか否かの指示はMTXメモリ中のデータバッファヘッダ中に維持される。
CBポーラはアクチブブロックを探しているすべてのCBを循環する。CBポーラがアクチブブロックを発見するとき、CBポーラは再送信有効ビットを検査する。再送信有効ビットが設定されるならば、CBポーラは再送信時間を比較する。CBポーラが再送人時間が満了していることを発見するならば、CBポーラはCBの再送信ビット(即ちデータ送信機がどのようにしてパケットが再送信されたパケットであることを知るか)を主張し、CBを優先順位待ち行列の1つに位置させる。
[概要]
このセクションはMSSオプションがどのようにして得られるかの概要を示す。
TCPトランザクションを使用可能にする前に、ホストは以下のパラメータおよび設定をセットアップすべきである。
・レジスタ0×1A4C−0×1A4Dで使用されるデフォルトのローカルMSS。
2つのうち任意の接続に使用されるMSS値を選択するとき、TCPエンジンはIPルータに問い合わせる。目的地ルートがゲートウェイを通過するならば、ローカルではないMSSが使用される。
[概要]
以下の説明はサポートされるTCPオプションおよびそれらのフォーマットの概要である。サポートされる4つのオプションは、
・MSS、
・ウィンドウスケーリング、
・タイムスタンプ、
・SACKである。
このオプションは常に送信される。使用される実際の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バイトにより先行されることに注意する。
選択的な肯定応答(SACK)はTCPがホール(失われたデータパケット)を含むデータを承認することを可能にし、ドロップ後のすべてのデータではなく失われたデータの再送信を可能にする。この特徴はRFC2018に記載されている。
[概要]
このセクションはMTXデータバッファ毎の開始で使用されるヘッダフォーマットを記載している。ヘッダはチェックサム、シーケンス番号、次のリンク等のようなバッファに含まれるデータについての情報を含んでいる。ヘッダフォーマットはTCPとUDPで異なっている。
[概要]
このセクションではTCP接続に使用されるキープアライブタイマを説明する。このセクションはこの特徴がIT 10Gネットワークスタックで実行される態様についての動作理論を含んでいる。
デフォルトにより、キープアライブタイマはソケットでディスエーブルされル。ソケットが生成されるとき、ホストはSocket_Configurationレジスタ中のKeep_Aliveビットを設定するオプションを有する。このビットが設定され、ソケットパラメータが与えられるならば、キープアライブ特性はそのソケットで使用可能になる。
[概要]
以下の説明はIT10Gネットワークスタックで有効なTCP ACKモードの詳細である。4つのモードのうちスタックが動作しているモードを決定する2つのビットが存在する。これらはTCP_Control1レジスタ中のDly_ACKビットと、Socket_configurationレジスタのHost_ACKビットである。演算マトリックスは以下の表に示されている。
このモードでは、データはそれらがNRX DRAMへ受信されるとすぐにACKされる。TCP受信論理装置はこれをRXからTXへのパケットFIFOバッファへ位置付けることによりACKをスケジュールする。ソケットCBのARビットはこのモードでは使用されない。これはTCPモジュールのデフォルトモードであり、TCP_Control1レジスタでDly_ACKビットの主張を解除することにより使用可能になる。これはすべてのソケットに適用するように全般的なTCP設定である。
このモードでは、データは直ちにACKされない。代りに、データがソケットに到着するとき、TCP受信論理装置はソケットCBにARビットを設定する。CBポーラモジュールはその後、ARビットセットを有するCBを観察するためすべてのアクチブCBを周期的に試験する。CBポーラがセットビットを発見するとき、CBポーラはそのソケットに対するACKをスケジュールする。ARビットを探すポーリングインターバルはDel_ACK_Waitレジスタを介して設定されることができ、2msのタイマ刻みに関して特定される。デフォルトインターバルは250msである。このモードはTCP_Control1レジスタ中のDly_ACKビットの主張により使用可能になる。それはまたすべてのソケットに適用するように全般的なTCP設定である。
このモードでは、データはMRX DRAMへ受信されるときACKされない。代りにACKはデータがホストコンピュータへ送信された後にのみ送信され、ホストコンピュータはデータのACKコマンドを発生することによりデータの受信を承認する。IT 10GハードウェアがACKコマンドを受信するとき、CB、即ちソケットハンドルをHost_ACK_CBレジスタに書込む。この動作はRX−TXパケットFIFOバッファを介してACKパケットをスケジュールさせる。ソケットCBのARビットはこのモードで使用されない。このモードはSocket_Configurationレジスタ中でHost_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ビットがデータブロックに対するヘッダを形成する。
[概要]
時には、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プローブが送信されるべきときを決定するために使用される。zero_windowプローブが送信される度に、プローブカウントはインクリメントされ、タイムスタンプは更新される。送信論理装置は送信されたプローブ数だけzero_window_intervalカウントをシフトし、この時間を現在の自由に動作している秒タイマへ付加することにより次のzero_window timestampを決定する。結果的なタイムスタンプは次のプローブが送信される将来の時間を表す。それ故、3秒のデフォルト値により、プローブは0、3、6、12、24、48、60秒のインターバルで送出される。一度インターバルが60秒に達すると、キャップされる。
ピアのウィンドウが最終的に開くとき、ピアは任意のACK(ウィンドウ告示)を送信するか、またはピアはACKの開いたウィンドウがゼロウィンドウプローブに応答することを示す。TCP受信論理装置はその後、CBのピアのウィンドウを更新する。次にCBがzero_windowプローブで現れるとき、CBポーラはウィンドウが開かれていることを観察する。CBポーラはその後ZWビットをクリアし、規則的なデータ転送をスケジュールする。zero_window再試行の数もまた0×0にリセットされる。
[概要]
このセクションはナグル(Nagle)アルゴリズムのIT10Gハードウェアサポートを説明する。このアルゴリズムはTCP接続が転移中にACKされていないデータを有するときにデータが承認されるまで小さいセグメントが送信されることができないことを述べている。
別々の送信命令ブロックがナグルアルゴリズムの使用で与えられる。これらの命令ブロック(IB)はこれらが主張されたIBコードのmsbを持たない点を除いて通常の非ナグルIBに類似している。32ビットアドレスのナグル送信IBは0×81であり、64ビットアドレスのコードは0×82である。ナグル送信IBはこれらがHWによりパースされるときソケットCBのR×ACKビットが主張される点を除いて通常の送信IBと同一方法で動作する。通常の送信IBの処理はこれが設定されるならば、このビットをクリアする。
これはソケットCBに存在するビットであり、Socket_Confg1レジスタ中でビット[3]を主張することによりアプリケーションを介して設定されることができる。設定のとき、このビットはACKが受信されるときにすべての目立ったデータを承認したというRX_ACK状態メッセージを発生させる。この状態は受信されたACK番号がソケットにより使用されるSEQ番号に一致するときに満たされる。状態メッセージコードは受信されたACKに対して0×16である。
[概要]
このセクションはデータがMTXバッファに記憶されることのできるサイズをTOEが決定するために使用するアルゴリズムを説明する。これは1つのMTXバッファが1つのTCPパケットに対応するときに送信されるTCPパケットのサイズに影響する。
ピアの広告されたウィンドウがMSSの2倍を超えるならば、(CB位置0×05に記憶されるような)ソケットMSSサイズはいくつのバイトがMTXバッファに記憶されることができるかについてのソケット決定ファクタとして使用される。ピアの広告されたウィンドウが2倍のMSSレベルに到達しないならば、MTXバッファに記憶されたバイトの最大数は(構成にしたがって)MSSの4分の1またはピアの最大の広告されたウィンドウの半分である。この比較を維持するビットはCBワード0×14のビット[18]である。
(構成に応じて)MSS、またはMSSの4分の1或いはピアの最大のウィンドウ値の半分から、固定したバイトオーバーヘッドが控除される。このオーバーヘッドはパケットヘッダバイト、IPSECオーバーヘッドを含んでいる。
(構成に応じて)MSS、またはMSSの4分の1或いはピアの最大のウィンドウ値の半分のいずれを使用するかを決定し、パケットオーバーヘッドを控除した後、論理装置は利用可能なバッファの種類を観察する。128バイトのバッファだけが利用可能であるならば、これは記憶サイズを限定する。また上記計算後、データサイズが依然として大きいMTXバッファサイズよりも大きいならば、パケットサイズは再度MTXバッファサイズにより限定されることができる。
[IPルータ特徴]
・デフォルトルート能力を提供する。
・多数のホストIPアドレスに対するルートを提供する。
・ホスト特定およびネットワーク特定ルートを提供する。
・ICMP再誘導後、ルートをダイナミックに更新する。
・IP放送アドレスを処理する(限定され、サブネット再誘導され、ネットワーク誘導された放送)。
・IPループバックアドレスを処理する。
・IPマルチキャストアドレスを処理する。
図35はIPルータの概略ブロック図である。
[ルートのリクエスト]
ローカルホストがIPパケットを送信しようとするとき、そのパケットを送信する場所、即ち構内ネットワークの別のホストか、外部ネットワークか、ローカルホスト自体であるかを決定しなければならない。これは出力するIPパケットを適切なホストへ誘導するIPルータのタスクである。
パケットの目的地はローカルまたは外部として説明されることができる。ローカルな目的地は送信ホストとして同一の構内ネットワークに取り付けられる。外部目的地は送信ホストの構内ネットワークとは別のネットワークに属す。
目的地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アドレスが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ルータモジュールレジスタインターフェースを介してルートを付加および除去する。
ローカルイーサネット(登録商標)ネットワークの他のホストへ直接パケットを導くために、IT10Gサブネットマスクを有するIPルートが生成されなければならない。このルートのゲートウェイとして別のホストを特定する代りに、ゲートウェイIPアドレスはこのルートがローカルネットワークを横切って直接的な接続を行うことを示すため0.0.0.0に設定されなければならない。
各送信モジュールはルートをリクエストするためにIPルータへのその固有のインターフェースを有する。ルートのリクエストおよび受信に使用されるシグナリングは図37に示されている。
静的ルートの生成後、ユーザは2つの方法でルートテーブルに記憶されたエントリを読み返すことができる。ユーザが所定のルートのターゲットIPアドレスを知っているならば、Show_Routeコマンドコードがそのルートのネットマスクおよびゲートウェイの表示のために使用されることができる。
IPルータが目的地ホスト/ゲートウェイに対するイーサネット(登録商標)アドレスを解くことができないとき、ルータは20秒間、その目的地IPアドレスをキャッシュする。その時間中に、ルータがこれらのうちの1つのキャッシュされた解決不能な目的地に対するリクエストを受信するならば、IPルータは直ちにルート故障を有するルートをリクエストしているモジュールに応答する。この解決不能な目的地のキャッシングはアクセス数を共有されたm1メモリに減少することを目的としており、ここでARPキャッシュエントリが記憶される。解決不能な目的地のキャッシングは冗長ARPリクエストを避けるようにも動作する。注意:解決されないアドレスがキャッシュされる時間量はUnres_Cash_Timeレジスタを介してユーザ構成可能である。
[概要]
以下の説明はシステム例外ハンドラの詳細である。このモジュールはIT10Gハードウェアが直接に処理できないデータが存在するときにはいつでも呼び出される。これは未知のイーサネット(登録商標)タイプのパケット、IGMPパケット、TCPまたはIPオプションなどであってもよい。それぞれのこれらの例外の場合、主要なパーサは例外ケースを検出するときシステム例外ハンドラを動作可能にする。システム例外ハンドラモジュールはデータを記憶し、処理される例外データが存在することをシステムインターフェース(典型的にはホストコンピュータで動作するアプリケーション)に通知し、データをシステムインターフェースへ送るように動作する。
図38は例外ハンドラの1構成の概略ブロック図である。
例外メモリはオンチッププロセッサメモリの一部である。例外パケットを発生できる各ソースモジュールはそれら固有の例外バッファ開始アドレスと例外バッファ長レジスタとを有する。このモジュールはFIFOバッファに例外パケットを与え、それをオンチッププロセッサメモリに記憶するように待ち行列する。exception_fifo_full信号は例外FIFOバッファが一杯であることを示すために各呼モジュールへフィードバックされる。このモジュールは一度にただ1つの例外パケットをサービスすることができる。後続する例外パケットが受信される場合、これは先のパケットがメモリに記憶されるまで保持される。
[概要]
このセクションではIPモジュール、ARPキャッシュ、ルートテーブル、オンチッププロセッサにサービスするために使用されるメモリアロケータ(malloc1)について説明する。このアロケータは最初にM1メモリをディスクリートなブロックに分割し、それらをリクエストのときに割当て、フリーにされたブロックをスタックに戻すように動作する。
malloc1はその動作を開始する前に入力された2つのパラメータを有する必要がある。これらはM1のメモリブロックの全体のサイズと、各メモリブロックのサイズである。1つのみのメモリサイズがこのアロケータでサポートされる。
[概要]
このセクションではソケット送信(malloctx)、ソケット受信(mallocrx)、制御ブロック(malloccb)、SA(mallcsa)メモリで使用されるメモリアロケータを説明する。これらのアロケータはリクエスト時にメモリブロックを割当て、フリーにされたブロックをスタックに戻し、メモリを使用するため調停するように動作する。
mallocはその動作の開始前に入力された幾つかのパラメータを有する必要がある。これらはMPメモリスペース内の開始および終了アドレスポインタ位置、および各メモリスペース内の各利用可能なブロックを表すビットマップである。2つのサイズのブロック、即ち128バイトと2kバイトがソケットデータメモリで利用可能である。CBメモリは固定した128バイトブロックを有する。すべてのアロケータもまた各メモリサイズのブロックアドレスに対して8エントリキャッシュを利用する。
図40は一体化されたネットワークスタックデータメモリの256Mバイトのメモリを想定したサンプルメモリマップを示しており、即ちMRXとMTXは共通の物理的メモリバンクを共有している。現在の構成はMRXとMTXの両者で外部DDR DRAMを使用するが、別の構成では、これらのメモリをオンチップで配置するか異なるタイプのメモリ(例えばSRAM)を使用することも可能である。
ネットワークスタックデータDDR DRAMは送信および受信データバッファとオンチッププロセッサとの間で共用されている。データのブロック図のフローは図41に示されている。
[概要]
以下の説明はmalloctxモジュールとデータDDR調停モジュールとの間のインターフェースの概要である。データフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を説明する。
3つの異なるアクセスタイプはMTX DRAMでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。malloctx413はこれらのサイクルタイプのそれぞれに対する異なるソースからのリクエストを調停するが、すべての3つのサイクルはデータDDRアービトレータから同時にリクエストされる。mtxarbサブユニットのブロック図が図42に示されている。
[概要]
このセクションはmallocrx414と受信ソケットデータDRAM制御装置との間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を示している。
受信DRAMでは、最高の優先順位がメモリに書込まれているデータに与えられる。これはネットワークスタックがネットワークインターフェースから受信されているデータに追いつかなければならないためである。DRAMへの書き込みは最初にFIFOバッファへ行われる。すべてのデータがFIFOバッファへ書込まれると、制御装置はそれをDRAMへバースト書込みする。ジャンボフレームでは、TCP受信論理装置はバースト書込みリクエストを2Kサイズのチャンクへ分割する。
ネットワークスタックDDRはCB、雑メモリ、SAメモリ間で共有される。データのブロック図のフローは図43に示されている。
[概要]
このセクションは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ポートの追跡を維持する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。代わりの構成では、TCPポート認証テーブルおよびUDPおよびTCPソースポート使用テーブルがホストコンピュータに維持されることができる。
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なUDPPポートを追跡する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。このテーブルはローカルUDPサービスポートおよび使用されることができるポートを含むべきではない。
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なポート数を追跡する。64Kの可能なポートのそれぞれの1ビットを維持する。それ故、このテーブルは64K/8=8Kバイトを使用する。
これは待機時間制御ブロックの割当てテーブルである。32Kの待機時間制御ブロックのそれぞれの1ビットを維持する。それ故、この割当てテーブルは32K/8=4Kバイトを使用する。このモジュールは全部で16ビットデータバスを使用する。
これは設定された制御ブロックの割当てテーブルである。64Kの制御ブロックのそれぞれの1ビットを維持する。それ故、この割当てテーブルは64K/8=8Kバイトを使用する。
このテーブルは2Kバイトのブロック割当てテーブルと128Kバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた送信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは72Kバイトに固定される。これは最大で475Kの128バイトブロックを可能にする。このレベルで、2Kバイトブロックの数は98Kである。
このテーブルは2Kバイトのブロック割当てテーブルと128Kバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた受信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは72Kバイトに固定される。これは最大で475Kの128バイトブロックを可能にする。このレベルで、2Kバイトブロックの数は98Kである。
このFIFOバッファはTCP受信論理装置からTCP送信論理装置へのパケット送信リクエストの追跡を維持するために使用される。各TCP RX FIFOバッファエントリは、全部で4バイト(4つのフラグ、26ビットアドレス、2つの未使用ビット)で幾つかの制御フラグおよび制御ブロックアドレスから作られる。このTCP RX FIFOバッファは1024ワードの深さであり、それ故1024×4=4Kバイトを必要とする。
このビットマップはホストシステムに送信される準備がされているデータを有する64Kソケットを表している。各ソケットで1ビットを維持する。それ故、このビットマップは64K/8=4Kバイトを使用する。
これはSAエントリの割当てテーブルである。各64K SAエントリで1ビットを維持する。それ故、この割当てテーブルは64K/8=4Kバイトを使用する。
このデータベースはLISTEN状態で開かれているTCPポートに対するパラメータ情報の記憶に使用される。これらのサーバポートはこれらが開かれるまでそれらに関連するCBをもたないので、ポート特定パラメータはこの領域に維持される。各ポートエントリは2バイトからなり、64Kの可能なポートが存在する。それ故、このデータベースは64K×2=128Kバイトを必要とする。
雑メモリに使用されるメモリマップは構成可能である。デフォルト設定は図46に示されている。ブロックはスケールされない。
[モジュールの初期化]
CPUが雑メモリアービトレータを起動する前に初期化する必要があることはほとんどない。デフォルトメモリマップが使用されるならば、CPUはMisc_Mem_ControlレジスタでMM_Enableビットを主張することによりアービトレータを使用可能にできる。
CPUは雑メモリの任意の位置をアクセスできる。これは最初にMM_CPU_Addレジスタ(0×1870−0×1872)へのアドレスにおいてプログラミングし、バイトを読取るかMM_CPU_Dataレジスタ(0×1874)へ書込むことによってこれを行う。アドレスレジスタはデータレジスタがアクセスされる毎に自動的にインクリメントする。
[概要]
このセクションではIT10Gネットワークスタックに組込まれたMIBサポートを説明する。これはレジスタの定義、動作理論、MIBが何に使用されるかの概要を含んでいる。
SNMPはSNMP管理局がネットワーク接続された装置の統計およびその他の情報を得ることを可能にし、装置が構成されることを可能にする管理プロトコルである。装置で動作するソフトウェアはエージェントと呼ばれる。エージェントはUDPソケットの上部で動作し、SNMP管理局からのリクエストを処理する。エージェントはまたある事象が装置で生じたときにSNMP管理局へトラップを送信することもできる。SNMP RFCは、共にグループ化されるとき管理情報ベース(MIB)と呼ばれる標準的な情報オブジェクトのセットを文書化している。ベンダはまたRFCで規定されている応用可能な標準的MIBに加えて、これらがサポートする固有のMIBも規定することができる。
[概要]
以下の説明は汎用目的のタイマとシステムで使用されるMMUの概要を提供する。
先のタイマからカスケードされるか独立している4つの汎用目的の32ビットタイマが設けられる。すべてのタイマはシングルショットまたはループモードで動作されることができる。さらに、各タイマにより使用される前に主要なコアクロックを分割することのできるクロックプリスケーラが設けられる。これは最小のコード変化を異なるコアクロック周波数に対して可能にする。
各個々のタイマは対応するタイマ制御レジスタにTimer_Testビットを主張することによりテストモードにされることができる。このモードが起動されると、32ビットカウンタは8ビットクロックデバイダ設定の3つのlsbにしたがって異なるレートで増加する。
オンチッププロセッサはプロセッサの4Gバイトメモリスペースを異なる領域に分割するためにMMUを使用する。各領域はベースアドレスとアドレスマスクで個々に特定されることができる。領域はまたオーバーラップしてもよいが、この場合共用されたメモリ領域から読み返されるデータは予測不可能である。
[概要]
このセクションではオンチッププロセッサとネットワークスタック(NS)データDDR調停モジュールとの間のインターフェースを説明する。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
3つの異なるアクセスタイプがオンチッププロセッサDRAMでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。さらに、連続する単一アクセスがDRAMを放棄せずにオンチッププロセッサにより行われるようにロックが適用されることができる。オンチッププロセッサメモリのアービトレータはこれらのサイクルタイプのそれぞれで異なるソースからのリクエストを調停するが、すべての3つのサイクルはNS DDRアービトレータから同時にリクエストされる。レジスタビットを介して使用可能にする必要があるとき、オンチッププロセッサ自体だけがロック特性を使用すると仮定される。
[概要]
以下の説明は、ホスト、オンチッププロセッサ、ネットワークスタック間を通過する命令ブロック(IB)と状態ブロック(SB)の動作理論の概要である。それはまたMDLの概念をカバーする。
ネットワークスタックと、オンチッププロセッサと、ホストコンピュータとの間を通過する状態ブロックのデータフローを示すブロック図が図49に示されている。
ソケット特定事象が生じるとき、CBの所有者はソケットCB構造中のHSビットを検査することにより決定される。ソケットがホストコンピュータに属すならば、CBチャンネル番号もCBから読取られる。そのチャンネル番号は事象通知と共にHW状態メッセージ発生装置(statgenモジュール)491へ送信される。
非ソケット特定事象、即ち例外イーサネット(登録商標)パケットが生じるとき、statgenモジュールは適切なSBを発生し、それをオンチッププロセッサメモリに規定される1つの状態メッセージ待ち行列に送信する。割込みはstatgen_intが使用可能になるならば、このときにオンチッププロセッサに対して発生されることができる。ハードウェアからオンチッププロセッサへ規定されるただ1つの状態メッセージ待ち行列だけが存在し、すべてのSBはこの1つの待ち行列へ行く。
オンチッププロセッサがSBをホストのSB待ち行列の1つへ送信することを必要とするとき、これをstatgen(状態発生)ハードウェアモジュールを介して送信する。この場合、オンチッププロセッサはそのメモリにSBを発生し、このSBの開始アドレス、SBのチャンネル番号、statgenモジュールに送信されるCBの長さをプログラムする。HWはその後、SB(または複数のSB)をホストへの適切なSB待ち行列へ転送する。このようにしてオンチッププロセッサとHWからのSBはSB DMAエンジン493を供給する同一のSB待ち行列中で混合される。
MDL(メモリ記述子リスト)は最初にホストコンピュータメモリからDDR DRAMのオンチッププロセッサメモリへDMAされる。オンチッププロセッサはMDL DDRアドレスに基づいて、MDLハンドルをホストへ戻す。
[概要]
以下の説明は命令ブロックおよび状態メッセージフォーマットの詳細である。ホストはIT10Gハードウェアへコマンドを転送するためにIBを使用し、IT10Gハードウェアは情報をオンチッププロセッサとホストコンピュータへ転送するために状態ブロックを使用する。
ハードウェアが直接解析する唯一のIBは種々の形態のSend_Commandである。
これらの命令はデータを送信し、所定のソケットの受信パラメータを閉じるかポストするようにIT10Gハードウェアにリクエストするために使用される。TCP、UDP、32ビットおよび64ビットホストコンピュータメモリアドレシングを処理するためにSEND命令には4つの形態がある。
IT10Gの1実施形態はiSCSI PDUヘッダをアセンブルするためにホストコンピュータを使用するが、別の実施形態ではiSCSI PDUをアセンブルし処理するためにIT10Gハードウェアとオンチッププロセッサを使用する。両実施形態を以下説明する。
[概要]
このセクションは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送信データパスのブロック図が図50に示されている。
iSCSI制御モジュール501はTX DMAエンジンモジュール502、CBアクセスモジュール503、Statgenモジュール504から制御信号を受信する。
・FIMインターバル、バイト中のマーカインターバル、
・現在のFIMカウント、最後のマーカが挿入され、ソケットCBに記憶された以降のバイト数、
・TCP送信32iSCSI IBまたはTCP送信64iSCSI IBに含まれ、CRCワードを含むがマーカを除外するPDU長。
1.マーカカウンタをゼロに初期化する。
2.PDU長カウンタを現在のFIMカウントに初期化する。
3.PDU長カウンタを任意のCRCワードを含むが任意のマーカを除外するPDU長に対してチェックする。
4.PDU長カウンタが任意のCRCワードを含むが任意のマーカを除外するPDU長よりも大きいならば、ループを出る。
5.FIMインターバルをPDU長カウンタへ付加し、マーカカウンタを1だけ増加する。
6.ステップ3へ進む。
7.マーカカウントから計算されるマーカの長さを付加することにより任意のCRCワードと任意のマーカを含んでいるPDU長を計算する。
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サイズを得る。
FIMインターバルはCBから来る。
Current_FIM_countはCBから来る。
total_marker_lengthはFIM挿入モジュールに対する時間変数である。
length_counterはFIM挿入モジュールの時間変数である。
marker_sizeはバイトによるFIMマーカの全体のサイズである。
DMA TXモジュールはiSCSIヘッダセグメントとiSCSIデータセグメントからなるiSCSI CRC計算モジュールへiSCSI PDUを提供する。
FIM挿入モジュールは固定したインターバルのマーカ(FIM)をiSCSI PDU中に挿入し、これは固定したインターバルのマーカをiSCSI送信ストリーム中へ挿入することに等しい。
[(MI+8)*n−8]
ここでMI=FIM(マーカ)インターバルであり、n=整数である。
次のiSCSI PDU開始ポインタ=現在のiSCSI PDU長−現在のiSCSI PDUバイトカウント
次のiSCSI PDU開始ポインタは32ビットの長さである。
XMTCTL muxモジュールはDMA Tx FIFOバッファからTCPデータを受信し、FIM挿入モジュールからiSCSIデータを受信する。
[概要]
受信DMAエンジンはiSCSI受信データパスを含んでいる。受信DMAデータパスはiSCSI CRCを計算し、最後のiSCSI CRCをiSCSI CRCメッセージを有するRX DMA状態を介してホストiSCSIドライバへ通過する。
ハードウェアはiSCSI CRCの計算をオフロードする。ホストiSCSIドライバはiSCSI CRC機構の正しい動作を確実にするために受信データパスを制御する。
ホストドライバはハードウェアからRX DAV状態メッセージを受信するときに利用可能なRXデータが存在することを知っている。このRX DAV状態メッセージの通知は通常のTCP接続と同じである。RX DAV状態メッセージ中のCBハンドルはiSCSIに関連するCBを指している。ホストドライバはその後、RXデータを記憶するようにバッファを割当て、総リンクリストバッファサイズはホストドライバが受信することを予測するデータ量プラス予測されるならばCRCに等しくなければならない(図52参照)。またiSCSI PDUはそのフォーマットにあることが予測されるので、総バッファサイズは常にdword境界で整列されなければならない。ホストドライバはまたCRCシードを32’hffffffffに初期化しなければならない。
TCP送信iSCSI命令ブロック(IB)はiSCSIソケットを使用してiSCSI PDUを送信するために使用される。TCP送信iSCSI32IBの長さはこのIBがDMA転送で使用される1以上の転送ブロックを含むことができるので可変である。転送ブロックはアドレス(ヘッダまたはデータ)と転送長の対からなる。
先の説明はiSCSI PDUヘッダを組立てるためにホストコンピュータを使用するIT10Gの動作を詳細にしている。別の実施形態はIT10GハードウェアとオンチッププロセッサがiSCSI PDUを組立て処理することを可能にする。この別の実施形態を次に説明する。
送信されるiSCSI PDUに対しては、オンチッププロセッサはそのメモリでパケットのヘッダを構築するように動作する。オンチッププロセッサは発生するiSCSI PDUの種類を示すためにホストコンピュータからiSCSI命令ブロック(IB)を受信する。PDUに関連するSCSIデータが存在する場合、バッファのリンクリストもIBを介して与えられる。
このモジュールはPDUヘッダとデータセクションの両者のCRC値を計算するように動作する。CRCはその後、対応するフィールドに添付される。このモジュールを供給するデータは(ヘッダデータに対しては)HSUを介してオンチッププロセッサメモリ、または(SCSIデータに対しては)DMA TX FIFOから来ることができる。CRC計算装置からの出力はFIMモジュールに与えられる。
このモジュールはFIMをPDUへ挿入するように動作する。これは初期オフセット、インターバルカウント、PDU長をHSUユニットから受信する。FIMを挿入するとき、データの何等かのリパックが必要とされよう。このモジュールの別の機能は送信されるPDUの全長を決定することである。この長さはPDU+任意のCRCバイト+任意のFIMのプログラムされた長さである。この長さはその後、XMTCTLモジュールへ送られ、それはPDUを適切なサイズのTCPパケットに分割するように動作する。
このモジュールはXMTCTLモジュールへ入力されるデータを多重化するように動作する。データはDMA TX FIFOバッファまたはFIM挿入モジュールから直接的である。いずれかのパスにより、多重化論理装置はパケットの全長を示し、また128ビット幅のフォーマットのデータを提供する。データはdav/grantハンドシェークを使用してXMTCTLモジュールヘ送られる。
[概要]
iSCSI受信データパスのブロック図が図53に示されている。
このモジュール531は受信されたTCPパケットを解析するように動作する。iSCSIパケットが到着するとき、これは128バイトまたは2KバイトバッファでMRXメモリに記憶されるので、任意の他のTCPデータと同様に最初に扱われる。ソケットのCBのビット(WORD 0×D、ビット[30])はこのソケットがホストまたはオンチッププロセッサにより所有されているか否かを示す。ソケットがオンチッププロセッサにより所有されているならば、データは自動的にホストにDMAされない。代りに状態メッセージが発生され、正常のネットワークスタック状態メッセージ待ち行列を介してオンチッププロセッサに送信される。
オンチッププロセッサがソケットにiSCSIデータが受信されていることを通知されたとき、CPUアドレスとmallocrxレジスタセットのデータレジスタを介してMRX中のデータを読取ることができる。オンチッププロセッサはその中のヘッダから受信されたPDUタイプを決定するためにMRXメモリ532を主に読取っていることが予測される。オンチッププロセッサがヘッダをそのメモリへ移動することを決定したならば、これはLDMAモジュールを使用する。データをホストへDMAおよびPDUすることを決定したならば、HDMAモジュール533を使用する。
オンチッププロセッサがMRXメモリからそれ自身のローカルメモリへデータを移動しようと望んでいるとき、RXISCSIモジュールを使用する。データのCRCは選択的にこの転送中にチェックされる。動作が完了するとき、割込みまたは状態メッセージが発生される。
オンチッププロセッサが受信されたSCSIデータをホストへ送信しようと望むとき、それはホストDMA(HDMA)エンジンを転送長と共にMRXおよびホストメモリの両方に開始アドレスでプログラムする。代りに、オンチッププロセッサはバッファのリンクリストが位置されるそのメモリ中の位置を特定できる。
オンチッププロセッサが所有するソケットでは、オンチッププロセッサはもはや使用されないMRXバッファをMRXバッファの割当て解除装置へ解放するように動作する。これはMRX_128_Block_AddまたはMRX_2K_Block_Addレジスタへ解放されるブロックに対するベースアドレスを書込み、その後、解放コマンドを対応するMRX_Block_Commandレジスタへ発生することによってこれを行う。
[概要]
以下の説明は、IPSECに対してハードウェアで実行されるサポートの詳細である。この構成はプロトコルの暗号化、暗号解読、認証機能のコンピュータ特性を処理するために別々のモジュールを仮定し、これらの特性のすべてはよく知られ理解されている。構成はまたIKEのようなよく知られよく理解され使用されている任意のキー交換プロトコルがホストコンピュータでアプリケーションとして処理されることも仮定している。勿論、キー交換機能を一体化することも可能である。
・SA毎のアンチリプレイサポート、
・ゼロ、DES、3DESアルゴリズムと、暗号ブロック連鎖(CBC)モードにおけるAESの128ビットアルゴリズム、
・ゼロ、SHA−1、MD−5認証アルゴリズム、
・192ビットまでの可変長暗号化キー、
・160ビットまでの可変長認証キー、
・Jumboフレームサポート、
・時間および転送される総データに基づいたSA満了の自動処理、
・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。
専用のメモリ構造は各IPSEC接続における情報を記憶するために使用される。AHとESPプロトコル、およびRXとTX SAの両者(RX SAのカバーデータは受信されTX SAのカバーデータは送信される)に対しては別々のブロックが存在する。それ故、データの送信および受信の両者のためにAHおよびESPの両者を使用するソケット接続は多数のSAブロックを必要とする。AHは1SAブロックを必要とし、ESPは2つのブロック(ESP−1とESP−2)を必要とする。秘密保護されるソケット接続の総数はSAブロックに対して与えられたメモリの総量にしたがう。
アプリケーションがIPSEC保護されたクライアントソケットを生成する必要があるとき、以下のシーケンスを実行しなければならない。
・すべての応用可能なSAパラメータをIPSEC SA特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。SAハンドルはRX SA LUTへ挿入される。
・IPSECは新しいSAハンドルを戻す。
・このSAハンドルをソケット特定レジスタへ書込む。
・ソケット構造2レジスタのIPSECビットの設定を含んだすべての応用可能なソケットパラメータをCPソケット特定レジスタへ書込む。
・commit_socketコマンドを発生する。
アプリケーションがIPSEC保護されたサーバソケットを生成する必要があるときには、以下のシーケンスを実行しなければならない。
・すべての応用可能なSAパラメータをIPSEC SA特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。SAハンドルはRX SA LUT中へ挿入される。
・IPSECは新しいSAハンドルを戻す。
・このSAハンドルをソケット特定レジスタへ書込む。
・ソケット構造2レジスタのIPSECビットの設定を含んだすべての応用可能なソケットパラメータをCPソケット特定レジスタへ書込む。
・commit_socketコマンドを発生する。
SAブロックはリンク有効ビットとリンクフィールドとを有し、これは別のSAを指している。CPUは必要ならば、多数のSAをリンクするためにこのフィールドを使用できる。CPUはSAブロックを連結するために以下のシーケンスを実行しなければならない。
・連結されるSAブロックによりSA_Linkレジスタを構成する。
・CFG1レジスタにLink_Valビットを設定する。
・連結されるSAブロックによりSA_Handleレジスタを構成する。
・“更新SA”コマンドを発生する。
TxまたはRx SAブロックはCBがデプリケートされるときに自動的にデプリケートされるのではない。CPUは使用されていないSAブロックの追跡を維持してこれらのSAブロックをデプリケート/割当て解除するための“SA無効化”コマンドを発生する。
図57はTX AH転送SAブロックフォーマットを示している。
図58はTX ESP−1転送SAブロックフォーマットを示している。
図59はTX ESP−2転送SAブロックフォーマットを示している。
図60はTX AHトンネルSAブロックフォーマットを示している。
図61はTX ESP−1トンネルSAブロックフォーマットを示している。
図62はTX ESP−2トンネルSAブロックフォーマットを示している。
図63はRX AH SAブロックフォーマットを示している。
図64はRX ESP−1 SAブロックフォーマットを示している。
図65はRX ESP−2 SAブロックフォーマットを示している。
[SAタイプ]
これらのビットはブロックが表すSAブロックのタイプを特定するために使用され、診断サポートのために与えられる。復号は以下の表で示されている。
これらのビットはSAのバージョン数を特定し、診断目的用に与えられる。すべてのSAブロックタイプの現在のバージョンは0×1である。
これらのビットはSAブロックが有効であり使用されることができることを示している。
これらのビットは認証がこのプロトコルに対して使用可能になり、このソケットのパケットで使用されるべきであることを示している。対応する認証アルゴリズムおよびキーフィールドもまた有効である。TX/RX AH SAでは、このビットは常に設定されるべきである。TX/RX ESP SAでは、これは随意選択的である。
これらのビットは暗号化がこのソケットのパケットに対して使用されるべきであり、暗号化キーおよび暗号化アルゴリズムフィールドが有効であることを示している。このビットはTX/RX ESP SAに対してのみ規定されている。
このビットはアンチリプレイアルゴリズムが受信されたパケットで使用されるべきであることを示している。
これらのビットはタイムスタンプフィールドがSAで有効であり、タイムスタンプが満了するとき、SAブロックは古いと考えられるべきであることを示している。
これらのビットはバイトカウント限定フィールドがSAで有効であり、バイトカウントがこの値に到達するとき、そのSAブロックが古いと考えられるべきであることを示している。
これらのビットはシーケンス番号フィールドが0×FFFFFFFFをラップするとき、SAブロックは古いと考えられるべきであることを示している。
このビットは任意のパケットの目的地IPアドレスがこのSAの目的地IPアドレスフィールドに一致しなければならないことを示している。
このビットはIPSECヘッダのSPIフィールドがこのSAの目的地IPアドレスフィールドに一致しなければならないことを示している。
このビットが設定されないならば、タイムスタンプの透かしチェックが行われることができる。これが状態メッセージを発生するとき、さらに透かし状態メッセージが送信されないようにこのビットが設定される。
このビットはSAブロックがこのSAにリンクされていることを示している。このビットが有効であるとき、リンクフィールドは次のSAブロックのSAハンドルを含んでいる。
これはプロトコルに関連する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は以下の4つの主なモジュールに分割される。
・IPSECX、
・IPSECR、
・IPSECREGS、
・IPSECメモリ。
・IPSECXメモリ:592×32ビット×4デュアルポート(9472バイト)、
・IPSECRメモリ:1168×32ビット×2デュアルポート(9344バイト)。
[概要]
以下の説明は送信IPSECデータパスの詳細である。IPSEC暗号化/認証エンジンはそれが呼び出される前に行われるパケットで動作する。データフローを概説するブロック図は図67に示されている。
[TXDATCB/TCPACK]
IPSEC保護されたソケットに対する送信データは最初に通常のソケットと同一方法でMTX DRAM671に記憶される。TXDATCB/TCPACKモジュール672はパケットに対するイーサネット(登録商標)、IP、TCP、任意のIPSECヘッダを形成するように動作する。このモジュールはいずれのヘッダか、および必要とされるヘッダのフォーマットを決定するために適切なSAブロックから情報を読取る。各ソケットはそれに関連するCB構造を有する。CBは各ソケットの古い情報を含んでいる。CB構造内に、使用されるSAブロックのポインタが存在する。多数のSAブロックを必要とするソケットでは、そのCBはすべてのAHおよびESP1 SAブロックへのポインタを含んでいる。
データパケットに加えて、TCPユーティリティパケット(ACK、SYN、FIN)もまた暗号化されることができる。これらのパケットはTCPACKモジュールから来る。図67の前述のデータパスには示されていないが、このモジュールもまたCBとSAメモリをアクセスした。
このモジュールはパケットを(TCPDATCBを介して)MTX DRAMまたはTCPACKからIPSECX内部メモリへ転送するように動作する。この内部メモリは576×128ビットとして組織される。TXDATCBまたはTCPACKからパケットを得たとき、このモジュールはデータをIPSECメモリへ転送し始める。これはSAに適用可能な情報を暗号化エンジンに送るためにそれをSAレジスタからも獲得する。読取ポインタはこのモジュールがIPSECXメモリ内の現在のパケットを重ね書きしないようにするためにIPSECTXからフィードバックされる。
このモジュール674は暗号化および認証をパケットに付加するように動作する。これはIPSECXIFモジュールにより提供されたパラメータを取り、IPSECXメモリ675に記憶されているパケットを処理する。認証と暗号化の両者がパケットで必要とされるならば、このモジュールはパケットをIPSECTXモジュールへ転送する前の両特性前であると仮定される。暗号化されたデータはソースパケットと同一メモリ位置に書込まれるべきである。処理が終了するとき、完了したパケットが送信の準備が整っていることをIPSECTXモジュールに通報する。暗号化エンジンはdram_clkドメインで全体的に動作する。
このモジュール676は処理されたパケットを暗号化エンジンから取出し、送信するためにこれをスケジュールするように動作する。準備完了指示を暗号化エンジンから受けたとき、開始アドレスおよびパケット長情報を登録する。その後、送信リクエストをイーサネット(登録商標)送信アービトレータへ送信する。イーサネット(登録商標)送信アービトレータはIPSECXメモリから直接的にパケット情報を読取り、これをMACの送信バッファへ送信する。パケット全体が読出されるとき、これはipsectx_doneをストローブする。この指示を受信するとき、IPSECTXモジュールはそのipsectx_rd_addを更新する。このバスはさらに多くのメモリがフリーにされていることを示すためにIPSECXIFに戻される。
このモジュール677はIPSECXメモリバンクへのアクセスを調停するように動作する。このモジュールはdram_clkドメインで動作する。
このモジュール678はインターフェースをデュアルポートRAMへ提供する。このモジュールはSRAMと、RAMをアクセスするその他の論理装置との間を結合する。このモジュールはRAMモデルが変更されるときに変更する必要がある。このモジュールはdram_clkドメインで全体的に動作する。
[概要]
図68のブロック図は受信されたIPSECパケットのデータパスフローを示している。これは以下の説明の基礎を形勢する。
[IPIN]
IPSEC保護されたソケットの受信されたデータは最初にIPINモジュール687で解析される。最も外部のIPヘッダ内には次のヘッダのプロトコルタイプを示すプロトコルフィールドが存在する。プロトコルが0×50(ESP)または0×51(AH)であることを検出するならば、IPSECRIFモジュールに対して最も外部のIPヘッダを含んだパケットを完了する。
IPINがIPSECパケットが受信されたことをこのモジュール683に示すとき、そのパケットをIPSECRメモリ684に記憶し始める。パケットはヘッダから記憶され始めて、そのすぐ後に最も外部のIPヘッダが記憶される。IPSECRIFモジュールも正確なRX SAブロックを発見するようにLUT発見を行うためにSPI、ソースIPアドレス、AH/ESP設定を解析する。LUT値を獲得するとき、SAブロックを読取り、そのパラメータが受信されたパケットのパラメータに一致するかを検査する。それらが一致するならば、適切なSAを有することになる。一致しないならば、パケットはドロップされ、事象は記録される。
このモジュール685はIPSECパケットを解読し認証するように動作する。パケットが利用可能であるとき、IPSECRIFモジュールはipsecrif_rdy信号を主張することによりこれを解読エンジンへ示す。IPSECRIFモジュールはまたパケットの開始アドレスを提供する。パケットが認証に失敗したならば、これは破棄され、事象が記録される。認証にパスするならば、パケットは必要ならば解読される。解読されたパケットはもとのパケットと同一のIPSECRメモリ位置へ書き戻される。解読エンジンはその後、decrypt_rdyを主張することによりパケットが受信される準備が整っていることをIPSECRXモジュールへ示す。パケットが認証と解読の両者を必要とするならば、両機能がIPSECRXモジュールへパケットをオフする処理を行う前に完了されることが仮定される。
このモジュール686は解読/認証されたパケットを取り、それをスタックに再度注入するように動作する。トンネルモードパケットでは、処理されたパケットはIPINARBを介して直接的に注入して戻されることができる。転送モードパケットでは、IPヘッダが生成され、パケットの開始にプリペンドされる。これを行うことにより、すべてのパケットに対するIPINの内部のTCPチェックサムとインターフェース論理装置を再使用することが可能である。
このモジュール687はIPSECRメモリバンクへのアクセスを調停するように動作する。このモジュールはdram_clkドメインで動作する。
このモジュールはインターフェースをデュアルポートRAMへ提供する。このモジュールはSRAMと、RAMをアクセスするその他の論理装置との間を結合する。このモジュールはRAMモデルが変更されるときに変更する必要がある。このモジュールはdram_clkドメインで全体的に動作する。
このLUTは17ビットにより128Kとして組織される。各ワードは16ビットのSAハンドルと1ビットの有効なインジケータから構成される。物理的にLUTはMTX DRAMバンク内に含まれる。
このモジュールはイーサネット(登録商標)入力パーサおよびIPSECRXから来るトラフィックを調停する。
これはアンチリプレイチェックの検査に使用されるアルゴリズムである。このアルゴリズムは最後の32のシーケンス番号をチェックするために32ビットウィンドウを使用する。ビットマップのmsbは最も古いシーケンス番号を表し、lsbは現在のシーケンス番号を表している。このアルゴリズムはAHとESPプロトコルの両者に対して使用される。
SEQ:受信されたパケットのシーケンス番号。
BITMAP:最後の32の逐次的なシーケンス番号を表す32ビットのビットマップ。
[概要]
このモジュールはCPUに対するインターフェースを提供し、プログラム可能なレジスタを含んでいる。このモジュールもまたCPUが適切なコマンドを発生するときにSAを生成し、更新し、または無効にする。これは診断の目的で以下のメモリへの間接的なアクセスを行う。
・IPSECX、
・IPSECR、
・RX SA LUT、
・SAブロック。
受信および送信SAブロックの両者では、ブロックが無効になるときにはいつでも状態メッセージがオンチッププロセッサに対して発生される。シーケンス番号が0×FFFFに到達することにより、またはタイムスタンプ或いはバイトカウントがそれらの限度に到達することにより、ブロックは無効になる可能性がある。
[概要]
以下の説明はNS DDR調停モジュールを介してSAブロックアクセスするためのインターフェースの概要である。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
3つの異なるアクセスタイプがSAブロックでサポートされる。これらはバースト書込、バースト読取、単一の読取である。ipsecsarbモジュールはSAメモリへアクセスするために異なるソースからのリクエストを調停する。
[概要]
IPSEC受信論理装置は適切なSAブロックを発見するためにLUTを使用する。LUTは16ビット×32Kの深さである。各LUTブロックはSAブロックハンドルを含んでいる。SAハンドルが値0を有するならば、これは無効であると考えられる。
以下の説明はSA LUTとデータDDR調停モジュールとの間のインターフェースの概要である。それはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
SA LUTはDRAMへ単一の読取および書込みアクセスを行うだけである。そのアクセスは常にWORDにある。各LUTブロックは16ビットのみであるので、WORDの下部16ビットだけがSA LUTメモリインターフェースへ転送される。読取および書込みは同じLUTアクセスサイクルで行われない。
Claims (79)
- ネットワークプロトコルを復号および符号化しデータを処理する統合ネットワークアダプタであって、
ストリーミングデータを処理するための、配線接続されたデータパスと、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
複数の並列の、配線接続されたプロトコル状態マシーンと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
トラフィックに基づいて共有リソースをスケジュールする手段と、
を備え、
前記複数のプロトコル状態マシーンは特定のネットワークプロトコル用に最適化され、
前記プロトコル状態マシーンは並列で処理を実行し、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
ことを特徴とする統合ネットワークアダプタ。 - 単一の集積回路で構成される統合ネットワークアダプタであって、
配線接続された転送オフロードエンジン(TOE)と、
前記TOEと一体化したプロセッサと、
物理層モジュール(PHY)と、
メディアアクセス層モジュール(MAC)と、
前記TOEと一体化したIPsec処理エンジンと、
前記TOEと一体化した、オフロード処理のための上位レベルプロトコル(ULP)と、
プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
ネットワークアダプタ。 - 前記ULPはiSCSIプロトコルを実行する、
請求項2に記載のネットワークアダプタ。 - 前記ULPは送受信のためにiSCSI CRCの計算をオフロードする、
請求項3に記載のネットワークアダプタ。 - 前記ULPは送信のために固定インターバルのマーカー(FIM)を使用してiSCSIフレーミングを実行する、
請求項3に記載のネットワークアダプタ。 - 前記TOEはiSCSIヘッダセグメント及びiSCSIデータセグメントをホストiSCSIドライバから取得し、送信のためにiSCSI PDUを準備する、
請求項3に記載のネットワークアダプタ。 - ホストコンピュータに存在するホストiSCSIドライバを更に備え、
前記ホストiSCSIドライバは前記TOEと通信する、
請求項3に記載のネットワークアダプタ。 - 前記TOEはiSCSIプロトコルデータユニット(PDU)を受信し、iSCSI CRCを計算し、当該iSCSI CRCを前記ホストiSCSIドライバへ送る、
請求項7に記載のネットワークアダプタ。 - 前記ホストiSCSIドライバは算出されたiSCSI CRC値を、iSCSI命令ブロック(IB)のiSCSI CRCシードフィールドを使用してシードする、
請求項8に記載のネットワークアダプタ。 - 前記ホストiSCSIドライバはホストメモリで完全なiSCSIプロトコルデータユニット(PDU)ヘッダを組立て、iSCSI命令ブロック(IB)を生成し、当該iSCSI IBを前記TOEへ送信する、
請求項7に記載のネットワークアダプタ。 - iSCSI IBは、ホストコンピュータメモリのバッファのリンクリストに対応し、転送ブロックとして知られている、アドレス及び長さの対のセットを含む、
請求項10に記載のネットワークアダプタ。 - 前記ホストiSCSIドライバは、iSCSIデータを受信するときに最終転送ブロックのバッファサイズを調節してCRCバイトを記憶し、iSCSIヘッダとデータセグメントとを正確に分離する、
請求項11に記載のネットワークアダプタ。 - 対応する基本ヘッダセグメント(BHS)と、任意の追加ヘッダセグメント(AHS)と、任意のデータセグメントとを含むiSCSIプロトコルデータユニットが、iSCSI命令ブロック(IB)を用いて前記ホストiSCSIドライバと前記TOEとの間で伝送される、
請求項7に記載のネットワークアダプタ。 - 前記ホストiSCSIドライバは、iSCSI PDUヘッダに対する正確なサイズの受信バッファをポストし、且つ、データセグメントが存在する場合にはiSCSI PDUデータセグメントの正確なサイズの受信バッファをポストすることにより、受信の際にiSCSIプロトコルデータユニット(PDU)ヘッダとデータセグメントを分割する、
請求項7に記載のネットワークアダプタ。 - 前記ホストiSCSIドライバは、命令ブロックを用いて受信された任意の追加ヘッダセグメント(AHS)の正確に寸法付けされたバッファをポストする、
請求項14に記載のネットワークアダプタ。 - 前記TOEと前記ホストiSCSIドライバはiSCSI PDUレベルでインターフェースする請求項7に記載のネットワークアダプタ。
- 前記TOEは、プロトコルデータユニット(PDU)ヘッダを前記プロセッサまたは前記ホストコンピュータに直接メモリアクセス(DMA)しPDUデータセクションを前記ホストコンピュータに直接メモリアクセス(DMA)することにより、前記ホストコンピュータのメモリの付加的なメモリコピーを必要とせずにiSCSIプロトコルデータユニット(PDU)のヘッダとデータセグメントとを分離する、
請求項7に記載のネットワークアダプタ。 - 前記TOEはセキュリティ・アソシエーション(SA)毎にIPsecのアンチリプレイサポートを行う、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSecゼロ、DES、3DESアルゴリズム、およびAES128ビ
ットアルゴリズムを暗号ブロック連鎖(CBC)モードで実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSecゼロ、SHA−1、およびMD−5認証アルゴリズムを実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSec可変長暗号キーを実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSec可変長認証キーを実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSecジャンポフレームサポートを実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEは時間と転送される全データとに基づいてセキュリティ・アソシエーション(SA)の満了のIPSec自動処理を実行する、
請求項2に記載のネットワークアダプタ。 - 前記TOEはIPSecポリシー施行を実行する、
請求項2記載のネットワークアダプタ。 - 前記TOEは例外パケットの生成と状態通知とを含むIPSec例外処理を実行する、
請求項2記載のネットワークアダプタ。 - 統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
統合ネットワークアダプタ。 - 前記少なくとも一つの通信チャンネルは、命令ブロック(IB)と状態メッセージ(SM)とを使用してデータおよび制御情報を転送する、
請求項27に記載のネットワークアダプタ。 - 前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つの閾値タイマを更に備え、
データは選択された閾値インターバルで伝送される、
請求項27に記載のネットワークアダプタ。 - 前記閾値タイマは、前記ネットワークアダプタと前記ホストコンピュータとの間の割り込みの数を減少させ、データの処理能力を増加させるための割込み集約機構を備える、
請求項29に記載のネットワークアダプタ。 - 前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つのデータ閾値を設定するモジュールを更に備え、
データレベルが選択された閾値に達したときにデータが伝送される、
請求項27に記載のネットワークアダプタ。 - 前記プロセッサおよび前記TOEのデータ処理能力を最適化する割込み集約機構を更に備える請求項27に記載のネットワークアダプタ。
- TCP選択肯定応答(SACK)用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
TCPはデータパケットの紛失を応答し、当該紛失したデータパケットだけを再送信する、
請求項27に記載のネットワークアダプタ。 - TCP高速再送信用に最適化されたハードウェアサポートを提供するモジュールを更に備える、
請求項27に記載のネットワークアダプタ。 - 前記TCP高速再送信は、順序違いのセグメントが受信されたときに、標準的なアイムアウトを待つ代わりに、送信機が穴を迅速に埋めることを可能にするためにACKを直ちに生成する、
請求項34に記載のネットワークアダプタ。 - 受信機が重複する三つのACKを受信したときに、前記TCP高速再送信が呼び出され、
前記TCP高速再送信が呼び出されたときに、送信機が穴を埋めようとし、
ACKとセグメントのウィンドウ広告値とが相互に一致した場合に、重複するACKが重複と判定される、
請求項34に記載のネットワークアダプタ。 - TCPウィンドウスケーリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- ウィンドウスケーリング動作が、ウィンドウスケールを可能にする少なくとも一つのビットと、スケーリングファクタを設定するための少なくとも一つのビットと、スケーリング値を決定するためのパラメータとを備える3つの変数に基づいている、
請求項27に記載のネットワークアダプタ。 - iSCSIヘッダとデータCRCの生成およびチェックとのために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- iSCSIの固定インターバルのマーカー(FIM)を生成するために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 診断プログラムおよびパケット監視プログラムをサポートするTCPダンプモード用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- TCPダンプモードが使用可能になった場合に、受信されたパケットのすべてが例外として前記ホストに送信され、ハードウェアスタックから来る出力TCP/UDPパケットのすべてが例外パケットとしてループバックされる、
請求項41に記載のネットワークアダプタ。 - 前記例外パケットをネットワークモニタ用にコピーし、RXパケットを再注入するためにTXパケットを生のイーサネット(登録商標)フレームとして送信するドライバを更に備える請求項42に記載のネットワークアダプタ。
- ホストACKモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
前記ホストコンピュータと前記ネットワークアダプタとの間をデータが通過したときに当該データが破損した可能性がある場合にデータの完全性を保証するために、前記ホストがTCPセグメントからデータを受信したときだけTCP ACKが送信される、
請求項27に記載のネットワークアダプタ。 - 前記ホストACKモードは、ACKを送信する前に、データセグメントを含んでいるMTXバッファの直接メモリアクセス(DMA)が完了するのを待つ、
請求項44に記載のネットワークアダプタ。 - TCPがラウンドトリップ時間測定(RTTM)を良好に計算し、ラップシーケンスに対する保護(PAWS)をサポートすることを可能にするために、TCPタイムスタンプ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 古い重複セグメントによるTCP接続の破壊を防止するためにTCP PAWS用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 前記ネットワークアダプタ内のバッファからではなくホストメモリのバッファから直接にデータを再送信させるために、TCPホスト再送信モード用に最適化されたハードウェアサポート提供するモジュールを更に備える請求項27記載のネットワークアダプタ。
- ランダムな初期シーケンス番号用に最適化されたハードウェアサポートを行うモジュールを更に備える請求項27記載のネットワークアダプタ。
- デュアルスタックモード用に最適化されたハードウェアサポートを行うモジュールと、
前記ホストのソフトウェアTCP/IPスタックと協動および関連して動作する前記ネットワークアダプタに組み込まれたハードウェアTCP/IPスタックと、
を更に備え、
前記ネットワークアダプタは、前記ネットワークアダプタと同一のIPアドレスを使用して並列に動作する前記ソフトウェアTCP/IPスタックの共存をサポートする、
請求項27に記載のネットワークアダプタ。 - 同期(SYN)状態メッセージモードをサポートするモジュールを更に備え、
受信された任意のSYNは状態メッセージを前記ホストへ戻し、
SYN/ACKは、前記ホストが適切な命令ブロックを前記ネットワークアダプタへ戻すまで前記ネットワークアダプタにより生成されず、
前記SYN状態メッセージモードが前記ネットワークアダプタで使用可能にならない場合には、SYN/ACKが前記ネットワークアダプタにより自動的に生成され、SYN受信状態メッセージは生成されない、
請求項50に記載のネットワークアダプタ。 - ネットワークアダプタ制御ブロックデータベースに一致しないTCPパケットが受信されたときに、前記ネットワークアダプタからのリセット(RST)メッセージの抑制をサポートするモジュールを更に備え、
前記ネットワークアダプタは、自動的にRSTを生成する代わりにパケットを例外パケットとして前記ホストへ送信することで、前記ホストのTCP/IPスタックが当該パケットを例外パケットとして処理できるようにする、
請求項50に記載のネットワークアダプタ。 - 前記ホストおよび前記ネットワークアダプタがIP IDをオーバーラップすることなくIPアドレスを共有できるようにするために、IP ID分割用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- あるタイプのパケットに対する特別な動作を制限し、受け付け、または実行するために、データパケットのフィルタリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 前記フィルタリングは、プログラムされたユニキャストアドレスの受付、放送パケットの受付、マルチキャストパケットの受付、ネットマスクにより特定される範囲内のアドレスの受付、および全パケットを受け付ける無差別モードのうちの任意の特性を取ることができる、
請求項54に記載のネットワークアダプタ。 - 仮想構内網(VLAN)用に最適化されたハードウェアサポートを提供するVLANモジュールを更に備える、
請求項27に記載のネットワークアダプタ。 - 前記VLANモジュールは、入力パケットからVLANヘッダを除去する要素、VLANのタグが付された出力パケットを生成する要素、入力SYNフレームからVLANパラメータを生成する要素、および例外パケットとUDPパケットのVLANタグ情報を通す要素のいずれかを備える、
請求項56に記載のネットワークアダプタ。 - ジャンボフレーム用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- シンプルネットワーク管理プロトコル(SNMP)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 管理情報ベース(MIB)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- レガシーモードでのネットワークアダプタの動作用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
すべてのネットワークトラフィックはトラフィックタイプにかかわりなく前記ホストに送信され、
前記ネットワークアダプタはハードウェアTCP/IPスタックが該アダプタに存在しないかのように動作する、
請求項27に記載のネットワークアダプタ。 - ハードウェアおよびソフトウェアのいずれかでIP分割が処理されることを可能にする最適化されたハードウェアサポートを提供するモジュールを更に備え、
例外パケットとして伝送されソフトウェアドライバで再構築されるIP分割されたパケットがIP注入モードにより前記ネットワークアダプタへ再注入されて戻される、
請求項27に記載のネットワークアダプタ。 - IPパケットが前記ネットワークアダプタのTCP/IPスタックに注入されることを可能にするIP注入用に最適化されたハードウェアサポートを提供するIP注入モジュールを更に備える請求項27に記載のネットワークアダプタ。
- 前記IP注入モジュールは、IPパケットを前記ネットワークアダプタのTCP/IPスタックへ注入するための1以上の注入制御レジスタを備え、
前記1以上の注入制御レジスタは前記ホストがIPパケットを前記ネットワークアダプ
タのTCP/IPスタックへ注入することを可能にする、
請求項63に記載のネットワークアダプタ。 - 複数のIPアドレス用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- デバッグモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
試験および制御ビットが前記ネットワークアダプタ中で使用可能になった場合に、すべてのIPパケットが例外として前記ホストへ送信される、
請求項27に記載のネットワークアダプタ。 - TCP時間待機状態用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 可変の接続数に対して最適化されたハードウェアサポートを行うモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 前記ネットワークアダプタがネットワークアダプタの最大容量に等しい接続を容認する場合に、次の同期(SYN)が、前記ホストが当該接続を処理できるように、例外パケットとして前記ホストへ通される、
請求項27に記載のネットワークアダプタ。 - ユーザデータグラムプロトコル(UDP)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27記載のネットワークアダプタ。
- IPパケットの寿命を選択されたホップ数に限定するためにTTL(生存時間)に対して最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- キープ・アライブ・パケットをリンクにおいて周期的に送信することによりアイドル状態のTCP接続を維持しタイムアウトさせないことを可能にするために、TCPのキープアライブ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- IPパケットを優先させるためにルータにより使用されるサービスのTCPタイプ(TOS)用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項27に記載のネットワークアダプタ。
- 統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
TCPスロースタート用に最適化されたハードウェアサポートを行うためのモジュールと、
を備え、
前記スロースタートは、
肯定応答(ACK)を予測する前に、最大セグメントサイズ(MSS)の2倍の現在のウィンドウ(cwnd)に対応する二つのデータセグメントが流れることだけをまず許可し、
更に一つのセグメントを流すために、前記cwndが受信機の広告ウィンドウと等しくなるまで、成功ACKが受信される度に一つのMSS分だけcwndを増加させることにより、
一度に流れるデータセグメント数を徐々に増加させる、
統合ネットワークアダプタ。 - 前記スロースタートは新規のデータ接続で常に開始され、
前記スロースタートはデータトラフィックの渋滞が発生したときに接続の中間で起動される、
請求項74に記載のネットワークアダプタ。 - 統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
フレキシブルでプログラム可能なメモリエラー検査および補正(ECC)用に最適化されたハードウェアサポートを提供するECCモジュールと、
を備え、
前記ECCモジュールは、少なくとも一つの追加ビットを用いて、暗号化されたECCコードをデータと共にパケットに記憶し、
前記データがメモリに書き込まれたときに前記ECCコードも記憶され、
前記データが読み出されたときに、前記記憶されたECCコードは当該データが書き込まれたときに生成されたECCコードと比較され、
前記ECCコードが一致しない場合には、前記データ中のどのビットがエラーであるかについての判定が実行され、
エラーになっているビットが反転され、メモリ制御装置が当該補正されたデータを解放し、
エラーはオンザフライで補正され、補正されたデータは前記メモリに戻されず、
同一の破損データが再度読み取られたならば、前記ECCモジュールの動作が繰り返される、
統合ネットワークアダプタ。 - 統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
TCPのサービス品質(QoS)用に最適化されたハードウェアサポートを提供するモジュールと、
を備え、
TCP送信データフローはソケット問い合わせモジュールで開始し、当該データフローは送信データ有効ビットセットを有するエントリを探す送信データ有効ビットテーブルを通過し、
前記ソケット問い合わせモジュールは、前記エントリを発見した場合に、ソケットのユーザ優先順位レベルに従って当該エントリを複数の待ち行列のうちの一つに置く、
統合ネットワークアダプタ。 - 統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
フェイルオーバー用に最適化されたハードウェアサポートを提供するフェイルオーバーモジュールと、
を備え、
前記フェイルオーバーモジュールは、接続を開始しようとすることなくソケットが生成されることを可能にするNO_SYNモードを有し、
前記ネットワークアダプタ内のソケットおよび当該ソケットに関連するすべてのデータ構造が接続を生成することなく生成され、
前記NO_SYNモードは別のカードからの、またはソフトウェアTCP/IPスタックから前記ネットワークアダプタへの接続移行からのフェイルオーバーをサポートする、
統合ネットワークアダプタ。 - 統合ネットワークアダプタであって、
パケットを受信するための、配線接続されたデータパスと、
複数の並列の、配線接続されたプロトコル状態マシーンと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン(TOE)と、
前記TOEと一体化したプロセッサと、
プログラム可能なポート範囲に入るUDPまたはTCPのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換(NAT)、IPマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記プロトコル状態マシーンは並列で処理を実行し、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
統合ネットワークアダプタ。
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)
| 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 | 鹏城实验室 | 基于混合标签协议栈的数据包传输方法、网关设备及基于混合标签协议栈的数据包传输系统 |
-
2009
- 2009-09-18 JP JP2009217450A patent/JP4875126B2/ja not_active Expired - Lifetime
Cited By (13)
| 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 |