(57)【要約】ホストコンピュータのリソースが、独立したネットワーク機器に見えるように、ホストコンピュータのチップセット内に存在するネットワーク処理装置（ＮＰＵ）にインターネットプロトコル（ＩＰ）ルータの機能を組み込む新規なネットワークアーキテクチャ。ＮＰＵは、一実施形態ではホストコンピュータと同じチップを共用するが、論理的にはホストコンピュータから独立しているように見える。
2006511126.tif 000002
【特許請求の範囲】
【請求項１】
パケットが横断する入出力点として動作するために、少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）と通信するメディアアクセスコントローラインターフェース（ＭＩ）サブユニットと、
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するホストメディアアクセスコントローラ（ＨＭ）サブユニットと、
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するシーケンスプロセッサ（ＳＰ）サブユニットと、
前記シーケンスプロセッササブユニットと通信するアドレス変換（ＡＴ）サブユニットとを備え、前記複数のサブユニットがルータパケット処理とホストパケット処理の両方を行うネットワーク処理装置。
【請求項２】
前記ルータパケット処理が、入出力ネットワークアドレス変換（ＮＡＴ）を含む、請求項１に記載の装置。
【請求項３】
前記ルータパケット処理がパケットルーティングを含む、請求項１に記載の装置。
【請求項４】
前記ルータパケット処理がブリッジングを含む、請求項１に記載の装置。
【請求項５】
前記ルータパケット処理がパケットマルチキャスティングを含む、請求項１に記載の装置。
【請求項６】
前記ルータパケット処理がファイアウォーリングを含む、請求項１に記載の装置。
【請求項７】
前記ルータパケット処理と前記ホストパケット処理とがパケットのカプセル化解除とカプセル化とを含む、請求項１に記載の装置。
【請求項８】
前記ルータパケット処理と前記ホストパケット処理とがパケットの暗号化解除と暗号化とを含む、請求項１に記載の装置。
【請求項９】
前記ルータパケット処理と前記ホストパケット処理とがパケットの圧縮解除と圧縮とを含む、請求項１に記載の装置。
【請求項１０】
前記ルータパケット処理と前記ホストパケット処理とが妥当性検査を含む、請求項１に記載の装置。
【請求項１１】
前記ルータパケット処理と前記ホストパケット処理とが断片化を含む、請求項１に記載の装置。
【請求項１２】
前記ルータパケット処理と前記ホストパケット処理とがチェックサムを含む、請求項１に記載の装置。
【請求項１３】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がメディアに依存しないインターフェースＭＡＣ（ｍｉｉＭＡＣ）である、請求項１に記載の装置。
【請求項１４】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がｄｓｐＭＡＣである、請求項１に記載の装置。
【請求項１５】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がｗｉＭＡＣである、請求項１に記載の装置。
【請求項１６】
前記複数のサブユニットが２つのポイントツーポイントバスを介して互いに通信する、請求項１に記載の装置。
【請求項１７】
フロントエンドサブユニットと共用キャッシュとをさらに含み、前記フロントエンドサブユニットが、前記サブユニットのうちの少なくとも２つの間で、前記共用キャッシュを管理する、請求項１に記載の装置。
【請求項１８】
前記フロントエンドサブユニットが前記共用キャッシュを複数のバンクに分割して、前記サブユニットのうちの前記少なくとも２つの間でロードバランシングを達成する、請求項１７に記載の装置。
【請求項１９】
前記フロントエンドサブユニットが前記共用キャッシュとシステムメモリとの間のダイレクトメモリアクセスを管理する、請求項１７に記載の装置。
【請求項２０】
前記フロントエンドサブユニットが前記共用キャッシュの管理にラウンドロビンスケジューリング方法を用いる、請求項１７に記載の装置。
【請求項２１】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、第１の非同期インターフェースを介してパケットを前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットに転送する、請求項１に記載の装置。
【請求項２２】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、制御メッセージを伝達するために、第２のサイドバンドインターフェースを介して、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信する、請求項２１に記載の装置。
【請求項２３】
前記メディアアクセスコントローラインターフェース（ＭＩ）が、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、入力ファーストインファーストアウト（ＦＩＦＯ）バッファを用いる、請求項１に記載の装置。
【請求項２４】
前記入力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項２３に記載の装置。
【請求項２５】
前記メディアアクセスコントローラインターフェース（ＭＩ）が、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファを用いる、請求項１に記載の装置。
【請求項２６】
前記少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項２５に記載の装置。
【請求項２７】
前記少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファが、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、４つのバッファを含む、請求項２５に記載の装置。
【請求項２８】
前記ホストメディアアクセスコントローラ（ＨＭ）サブユニットが、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するために、複数のプッシュバッファを用いる、請求項１に記載の装置。
【請求項２９】
前記複数のプッシュバッファが、前記ネットワーク処理装置を構成するために用いられる、請求項２８に記載の装置。
【請求項３０】
前記シーケンスプロセッサ（ＳＰ）サブユニットが受信パイプラインと送信パイプラインとを含む、請求項１に記載の装置。
【請求項３１】
前記受信パイプラインと前記送信パイプラインとが共通操作パイプラインを共用する、請求項３０に記載の装置。
【請求項３２】
ネットワーク処理の実行方法であって、
ａ）パケットが横断する入出力点として動作するために、少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）と通信するメディアアクセスコントローラインターフェース（ＭＩ）サブユニットを提供するステップと、
ｂ）前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するホストメディアアクセスコントローラ（ＨＭ）サブユニットを提供するステップと、
ｃ）前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するシーケンスプロセッサ（ＳＰ）サブユニットを提供するステップと、
ｄ）前記シーケンスプロセッササブユニットと通信するアドレス変換（ＡＴ）サブユニットを提供するステップとを含み、前記複数のサブユニットがルータパケット処理とホストパケット処理の両方を行う方法。
【請求項３３】
前記ルータパケット処理が、入出力ネットワークアドレス変換（ＮＡＴ）を含む、請求項３２に記載の方法。
【請求項３４】
前記ルータパケット処理がパケットルーティングを含む、請求項３２に記載の方法。
【請求項３５】
前記ルータパケット処理がブリッジングを含む、請求項３２に記載の方法。
【請求項３６】
前記ルータパケット処理がパケットマルチキャスティングを含む、請求項３２に記載の方法。
【請求項３７】
前記ルータパケット処理がファイアウォーリングを含む、請求項３２に記載の方法。
【請求項３８】
前記ルータパケット処理と前記ホストパケット処理とがパケットのカプセル化解除とカプセル化とを含む、請求項３２に記載の方法。
【請求項３９】
前記ルータパケット処理と前記ホストパケット処理とがパケットの暗号化解除と暗号化とを含む、請求項３２に記載の方法。
【請求項４０】
前記ルータパケット処理と前記ホストパケット処理とがパケットの圧縮解除と圧縮とを含む、請求項３２に記載の方法。
【請求項４１】
前記ルータパケット処理と前記ホストパケット処理とが妥当性検査を含む、請求項３２に記載の方法。
【請求項４２】
前記ルータパケット処理と前記ホストパケット処理とが断片化を含む、請求項３２に記載の方法。
【請求項４３】
前記ルータパケット処理と前記ホストパケット処理とがチェックサムを含む、請求項３２に記載の方法。
【請求項４４】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がメディアに依存しないインターフェースＭＡＣ（ｍｉｉＭＡＣ）である、請求項３２に記載の方法。
【請求項４５】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がｄｓｐＭＡＣである、請求項３２に記載の方法。
【請求項４６】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）がｗｉＭＡＣである、請求項３２に記載の方法。
【請求項４７】
前記複数のサブユニットが２つのポイントツーポイントバスを介して互いに通信する、請求項３２に記載の方法。
【請求項４８】
（ｅ）フロントエンドサブユニットと共用キャッシュとを提供するステップをさらに含み、前記フロントエンドサブユニットが、前記サブユニットのうちの少なくとも２つの間で、前記共用キャッシュを管理する、請求項３２に記載の方法。
【請求項４９】
前記フロントエンドサブユニットが前記共用キャッシュを複数のバンクに分割して、前記サブユニットのうちの前記少なくとも２つの間でロードバランシングを達成する、請求項４８に記載の方法。
【請求項５０】
前記フロントエンドサブユニットが前記共用キャッシュとシステムメモリとの間のダイレクトメモリアクセスを管理する、請求項４８に記載の方法。
【請求項５１】
前記フロントエンドサブユニットが前記共用キャッシュの管理にラウンドロビンスケジューリング方法を用いる、請求項４８に記載の方法。
【請求項５２】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、第１の非同期インターフェースを介してパケットを前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットに転送する、請求項３２に記載の方法。
【請求項５３】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、制御メッセージを伝達するために、第２のサイドバンドインターフェースを介して、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信する、請求項５２に記載の方法。
【請求項５４】
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットが、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、入力ファーストインファーストアウト（ＦＩＦＯ）バッファを用いる、請求項３２に記載の方法。
【請求項５５】
前記入力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項５４に記載の方法。
【請求項５６】
前記メディアアクセスコントローラインターフェース（ＭＩ）が、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファを用いる、請求項３２に記載の方法。
【請求項５７】
前記少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項５６に記載の装置。
【請求項５８】
前記少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファが、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、４つのバッファを含む、請求項５６に記載の方法。
【請求項５９】
前記ホストメディアアクセスコントローラ（ＨＭ）サブユニットが、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するために、複数のプッシュバッファを用いる、請求項３２に記載の方法。
【請求項６０】
前記複数のプッシュバッファが、前記ネットワーク処理装置を構成するために用いられる、請求項５７に記載の方法。
【請求項６１】
前記シーケンスプロセッサ（ＳＰ）サブユニットが受信パイプラインと送信パイプラインとを含む、請求項３２に記載の方法。
【請求項６２】
前記受信パイプラインと前記送信パイプラインとが共通操作パイプラインを共用する、請求項５９に記載の方法。
【請求項６３】
パケットが横断する入出力点として動作するために、少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）と通信するメディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段と、
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段と通信するホストメディアアクセスコントローラ（ＨＭ）サブユニット手段と、
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段と通信するシーケンスプロセッサ（ＳＰ）サブユニット手段と、
前記シーケンスプロセッササブユニット手段と通信するアドレス変換（ＡＴ）サブユニット手段とを含み、前記複数のサブユニット手段がルータパケット処理とホストパケット処理の両方を行うネットワーク処理装置。
【請求項６４】
前記複数のサブユニット手段が２つのポイントツーポイントバスを介して互いに通信する、請求項６１に記載の装置。
【請求項６５】
フロントエンドサブユニット手段と共用キャッシュとをさらに含み、前記フロントエンドサブユニット手段が、前記サブユニット手段のうちの少なくとも２つの間で、前記共用キャッシュを管理する、請求項６１に記載の装置。
【請求項６６】
前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、第１の非同期インターフェースを介してパケットを前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段に転送し、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）が、制御メッセージを伝達するために、第２のサイドバンドインターフェースを介して、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段と通信する、請求項６１に記載の装置。
【請求項６７】
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段が、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、入力ファーストインファーストアウト（ＦＩＦＯ）バッファを用い、前記入力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項６１に記載の装置。
【請求項６８】
前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段が、前記少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）のそれぞれに対し、少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファを用い、前記少なくとも１つの出力ファーストインファーストアウト（ＦＩＦＯ）バッファが部分的にキャッシュに実装され、部分的にメモリに実装される、請求項６１に記載の装置。
【請求項６９】
前記ホストメディアアクセスコントローラ（ＨＭ）サブユニット手段が、前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニット手段と通信するために、複数のプッシュバッファを用いる、請求項６１に記載の装置。
【請求項７０】
前記シーケンスプロセッサ（ＳＰ）サブユニット手段が受信パイプラインと送信パイプラインとを含み、前記受信パイプラインと前記送信パイプラインとが共通操作パイプラインを共用する、請求項６１に記載の装置。
【請求項７１】
複数の命令を格納しているコンピュータ可読メディアであって、前記複数の命令に含まれる命令が、プロセッサによって実行されたときに、
ａ）パケットが横断する入出力点として動作するために、少なくとも１つのメディアアクセスコントローラ（ＭＡＣ）と通信するメディアアクセスコントローラインターフェース（ＭＩ）サブユニットを提供するステップと、
ｂ）前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するホストメディアアクセスコントローラ（ＨＭ）サブユニットを提供するステップと、
ｃ）前記メディアアクセスコントローラインターフェース（ＭＩ）サブユニットと通信するシーケンスプロセッサ（ＳＰ）サブユニットを提供するステップと、
ｄ）前記シーケンスプロセッササブユニットと通信するアドレス変換（ＡＴ）サブユニットを提供するステップとを含むステップを前記プロセッサに実行させ、前記複数のサブユニットがルータパケット処理とホストパケット処理の両方を行うコンピュータ可読メディア。
【請求項７２】
（ｅ）フロントエンドサブユニットと共用キャッシュとを提供するステップをさらに含み、前記フロントエンドサブユニットが、前記サブユニットのうちの少なくとも２つの間で、前記共用キャッシュを管理する、請求項６９に記載のコンピュータ可読メディア。
【請求項７３】
パケットに対して認証を実行する認証モジュールと、
前記パケットの全体に対する前記認証処理が完了する前に、前記認証されたパケットの一部を受け取って、前記認証されたパケットの前記部分の暗号化解除を開始する暗号化解除モジュールと、
前記パケットの全体に対する前記暗号化解除処理が完了する前に、前記暗号化解除されたパケットの一部を受け取って、前記暗号化解除されたパケットの前記部分のチェックサム処理を開始するチェックサムモジュールとを備えたシーケンス処理装置。
【請求項７４】
前記認証処理の前に前記パケットをカプセル化解除するカプセル化解除モジュールをさらに備えた、請求項７１に記載の装置。
【請求項７５】
前記チェックサム処理の前に前記暗号化解除されたパケットを圧縮解除する圧縮解除モジュールをさらに備えた、請求項７１に記載の装置。
【請求項７６】
次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化解除されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持するストレージとしての再循環バッファをさらに備えた、請求項７１に記載の装置。
【請求項７７】
前記チェックサムモジュールが前記パケットをインターネットワーキング伝送プロトコルパケットとしてチェックサム処理し、前記チェックサムモジュールが、前記パケット内のパディング長を調べ、前記チェックサム処理ステップの結果から前記パディング長を減算する、請求項７１に記載の装置。
【請求項７８】
前記インターネットワーキング伝送プロトコルパケットが伝送制御プロトコル（ＴＣＰ）パケットである、請求項７５に記載の装置。
【請求項７９】
前記インターネットワーキング伝送プロトコルパケットがユーザデータグラムプロトコル（ＵＤＰ）パケットである、請求項７５に記載の装置。
【請求項８０】
前記モジュールによって実行される前記機能が構成可能である、請求項７１に記載の装置。
【請求項８１】
前記モジュールによって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項７８に記載の装置。
【請求項８２】
パケットに対して認証を実行する認証手段と、
前記パケットの全体に対する前記認証処理が完了する前に、前記認証されたパケットの一部を受け取って、前記認証されたパケットの前記部分の暗号化解除を開始する暗号化解除手段と、
前記パケットの全体に対する前記暗号化解除処理が完了する前に、前記暗号化解除されたパケットの一部を受け取って、前記暗号化解除されたパケットの前記部分のチェックサム処理を開始するチェックサム手段とを含むシーケンス処理装置。
【請求項８３】
前記認証処理の前に前記パケットをカプセル化解除するカプセル化解除手段をさらに含む、請求項８０に記載の装置。
【請求項８４】
前記チェックサム処理の前に前記暗号化解除されたパケットを圧縮解除する圧縮解除手段をさらに含む、請求項８０に記載の装置。
【請求項８５】
次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化解除されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持する再循環バッファ手段をさらに含む、請求項８０に記載の装置。
【請求項８６】
前記手段によって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項８０に記載の装置。
【請求項８７】
ａ）パケットに対して認証を実行する認証モジュールを提供するステップと、
ｂ）前記パケットの全体に対する前記認証処理が完了する前に、前記認証されたパケットの一部を受け取って、前記認証されたパケットの前記部分の暗号化解除を開始する暗号化解除モジュールを提供するステップと、
ｃ）前記パケットの全体に対する前記暗号化解除処理が完了する前に、前記暗号化解除されたパケットの一部を受け取って、前記暗号化解除されたパケットの前記部分のチェックサム処理を開始するチェックサムモジュールを提供するステップとを含むシーケンス処理方法。
【請求項８８】
ｄ）前記認証処理の前に前記パケットをカプセル化解除するカプセル化解除モジュールを提供するステップをさらに含む、請求項８５に記載の方法。
【請求項８９】
ｄ）前記チェックサム処理の前に前記暗号化解除されたパケットを圧縮解除する圧縮解除モジュールを提供するステップをさらに含む、請求項８５に記載の方法。
【請求項９０】
ｄ）次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化解除されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持するストレージとしての再循環バッファを提供するステップをさらに含む、請求項８５に記載の方法。
【請求項９１】
前記チェックサムモジュールが前記パケットをインターネットワーキング伝送プロトコルパケットとしてチェックサム処理し、前記チェックサムモジュールが、前記パケット内のパディング長を調べ、前記チェックサム処理ステップの結果から前記パディング長を減算する、請求項８５に記載の方法。
【請求項９２】
前記モジュールによって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項８５に記載の方法。
【請求項９３】
複数の命令を格納しているコンピュータ可読メディアであって、前記複数の命令に含まれる命令が、プロセッサによって実行されたときに、
ａ）パケットに対して認証を実行する認証モジュールを提供するステップと、
ｂ）前記パケットの全体に対する前記認証処理が完了する前に、前記認証されたパケットの一部を受け取って、前記認証されたパケットの前記部分の暗号化解除を開始する暗号化解除モジュールを提供するステップと、
ｃ）前記パケットの全体に対する前記暗号化解除処理が完了する前に、前記暗号化解除されたパケットの一部を受け取って、前記暗号化解除されたパケットの前記部分のチェックサム処理を開始するチェックサムモジュールを提供するステップとを含むステップを前記プロセッサに実行させるコンピュータ可読メディア。
【請求項９４】
ａ）パケットに対してチェックサム処理を実行するチェックサムモジュールを提供するステップと、
ｂ）前記パケットの全体に対する前記チェックサム処理が完了する前に、前記チェックサム処理されたパケットの一部を暗号化モジュールに渡して、前記チェックサム処理されたパケットの前記部分の暗号化を開始する暗号化解除モジュールを提供するステップと、
ｃ）前記パケットの全体に対する前記暗号化処理が完了する前に、前記暗号化されたパケットの一部を認証モジュールに渡して、前記暗号化されたパケットの前記部分の認証を開始する暗号化解除モジュールを提供するステップとを含む、シーケンス処理装置を提供する方法。
【請求項９５】
ｄ）前記認証ステップｃ）の後に、前記パケットをカプセル化するカプセル化モジュールを提供するステップをさらに含む、請求項９２に記載の方法。
【請求項９６】
ｂ'）前記暗号化ステップｂ）の前に、前記チェックサム処理されたパケットを圧縮する圧縮モジュールを提供するステップをさらに含む、請求項９２に記載の方法。
【請求項９７】
ｄ）次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持するストレージとしての再循環バッファを提供するステップをさらに含む、請求項９２に記載の方法。
【請求項９８】
前記モジュールによって実行される前記機能が構成可能である、請求項９２に記載の方法。
【請求項９９】
前記モジュールによって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項９６に記載の方法。
【請求項１００】
パケットに対してチェックサム処理を実行するチェックサムモジュールと、
前記パケットの全体に対する前記チェックサム処理が完了する前に、前記チェックサム処理されたパケットの一部を受け取って、前記チェックサム処理されたパケットの前記部分の暗号化を開始する暗号化モジュールと、
前記パケットの全体に対する前記暗号化処理が完了する前に、前記暗号化されたパケットの一部を受け取って、前記暗号化されたパケットの前記部分の認証を開始する認証モジュールとを備えたシーケンス処理装置。
【請求項１０１】
前記認証処理の後に前記パケットをカプセル化するカプセル化モジュールをさらに備えた、請求項９８に記載の装置。
【請求項１０２】
前記暗号化処理の前に前記チェックサム処理されたパケットを圧縮する圧縮モジュールをさらに備えた、請求項９８に記載の装置。
【請求項１０３】
次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持する再循環バッファをさらに備えた、請求項９８に記載の装置。
【請求項１０４】
前記モジュールによって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項９８に記載の装置。
【請求項１０５】
パケットに対してチェックサム処理を実行するチェックサム手段と、
前記パケットの全体に対する前記チェックサム処理が完了する前に、前記チェックサム処理されたパケットの一部を受け取って、前記チェックサム処理されたパケットの前記部分の暗号化を開始する暗号化手段と、
前記パケットの全体に対する前記暗号化処理が完了する前に、前記暗号化されたパケットの一部を受け取って、前記暗号化されたパケットの前記部分の認証を開始する認証手段とを含むシーケンス処理装置。
【請求項１０６】
前記認証処理の後に前記パケットをカプセル化するカプセル化手段をさらに含む、請求項１０３に記載の装置。
【請求項１０７】
前記暗号化処理の前に前記チェックサム処理されたパケットを圧縮する圧縮手段をさらに含む、請求項１０３に記載の装置。
【請求項１０８】
次のモジュールがパケットの前記関連部分を受け取ることができない場合のみ、前記認証されたパケットの前記部分、前記暗号化されたパケットの前記部分、または前記チェックサム処理されたパケットの前記部分を保持する再循環バッファ手段をさらに含む、請求項１０３に記載の装置。
【請求項１０９】
前記手段によって実行される前記機能が、アドレス変換処理の前または後に動作するように構成されることが可能な、請求項１０３に記載の装置。
【請求項１１０】
複数の命令を格納しているコンピュータ可読メディアであって、前記複数の命令に含まれる命令が、プロセッサによって実行されたときに、
ａ）パケットに対してチェックサム処理を実行するチェックサムモジュールを提供するステップと、
ｂ）前記パケットの全体に対する前記チェックサム処理が完了する前に、前記チェックサム処理されたパケットの一部を暗号化モジュールに渡して、前記チェックサム処理されたパケットの前記部分の暗号化を開始する暗号化解除モジュールを提供するステップと、
ｃ）前記パケットの全体に対する前記暗号化処理が完了する前に、前記暗号化されたパケットの一部を認証モジュールに渡して、前記暗号化されたパケットの前記部分の認証を開始する暗号化解除モジュールを提供するステップとを含むステップを前記プロセッサに実行させるコンピュータ可読メディア。
【請求項１１１】
ネットワーク処理装置とともに配置されるシーケンス処理サブユニットを提供する方法であって、
ａ）ネットワーク処理装置内で現在の状況を反映する複数のエントロピービットを生成する乱数発生器を提供するステップと、
ｂ）前記エントロピービットを混合し、前記混合されたエントロピービットを、ネットワークセキュリティを実現するネットワークセキュリティ方法で用いる認証モジュールを提供するステップとを含む方法。
【請求項１１２】
前記ネットワークセキュリティ方法がＭＤ５である、請求項１０９に記載の方法。
【請求項１１３】
前記ネットワークセキュリティ方法がセキュアハッシュアルゴリズム（ＳＨＡ−１）である、請求項１０９に記載の方法。
【請求項１１４】
ネットワーク処理装置とともに配置されるシーケンス処理装置であって、
ネットワーク処理装置内で現在の状況を反映する複数のエントロピービットを生成する乱数発生手段と、
前記エントロピービットを混合し、前記混合されたエントロピービットを、ネットワークセキュリティを実現するネットワークセキュリティ方法で用いる認証手段とを含む装置。
【請求項１１５】
前記ネットワークセキュリティ方法がＭＤ５である、請求項１１２に記載の装置。
【請求項１１６】
前記ネットワークセキュリティ方法がセキュアハッシュアルゴリズム（ＳＨＡ−１）である、請求項１１２に記載の装置。
【発明の詳細な説明】
【開示の背景】
【０００１】
[0001]本発明は、新規なネットワーク処理装置に関する。より具体的には、本発明は、ホストコンピュータの各リソースが独立したネットワーク機器として認識されるように、ホストコンピュータのチップセット内に存在するネットワーク処理装置に、インターネットプロトコル（ＩＰ）ルータの諸機能を組み込む。
【０００２】
[0002]図１は、データルーティング機能がホストの中央処理装置（ＣＰＵ）およびそのオペレーティングシステム（ＯＳ）１１０によって実行される、従来の内部コンテンツソースおよびデータパイプを示す。すなわち、ホストコンピュータは、多数のストレージデバイス１２０、複数のメディアエンジン１３０、および入出力ポート１４０（例えば、ユニバーサルシリアルバス（ＵＳＢ）など）を介してアクセス可能な他の複数のデバイスを含むことができる。また、ホストコンピュータは、アプリケーションプログラミングインターフェース（ＡＰＩ）およびメディアアクセスコントローラ（ＭＡＣ）を介してネットワーク１５０にアクセスできる。
【０００３】
[0003]ただし、このデータルーティングアーキテクチャには、ホストＣＰＵ／ＯＳが関与しないと、ホストコンピュータのリソースまたはデバイスにアクセスできないという重大な弱点がある。一般に、外部コンピュータからホストリソースにアクセスすることは、禁止されているか、高レベルプロトコルを用いてホストコンピュータ経由でアクセスを要求することを必要とする。ホストＣＰＵ／ＯＳが過負荷の場合は、データフローがＯＳスタック内で停滞する可能性があり、その場合は実質的な待ち時間が存在する。
【０００４】
[0004]ホストコンピュータは、ネットワーキング機能を高速化するために、ホストコンピュータのチップセットに組み込まれない、独立したネットワークインターフェースコントローラ（ＮＩＣ）カードを用いることができる。しかしそれでもＯＳは、ルータ機能およびゲートウェイ機能を制御する。そのためには、オペレーティングシステムが起動され、パケットを処理するために完全動作電力状態であることが必要である。
【０００５】
[0005]そこで、ネットワーキング機能を高めるために、インターネットプロトコル（ＩＰ）ルータの諸機能を実装し、ホストコンピュータのチップセット内に存在する新規なネットワーク処理装置が必要である。
【発明の概要】
【０００６】
[0006]本発明は、新規なネットワーク処理装置である。より具体的には、本発明は、ホストコンピュータのチップセット内に存在するネットワーク処理装置（ＮＰＵ）に、インターネットプロトコル（ＩＰ）ルータの諸機能を組み込む。このＮＰＵは、ホスト側と汎用ルータ／ゲートウェイの両方の高速化を結合する。ＮＰＵは、一実施形態ではホストコンピュータと同じチップを共用するが、論理的にはホストコンピュータから独立しているように見える。
【０００７】
[0007]動作時のホストコンピュータは、ネットワーク処理装置と通信している仮想ポート（すなわち、ｈｏｓｔ  ＭＡＣ）を有し、ＮＰＵが標準ネットワーキングプロトコルを用いる外部ネットワーク機器であるかのようにＮＰＵと通信する。一実施形態では、ホストの、ＮＰＵとの「ＭＡＣ」接続で用いるために、プッシュバッファ（ＰＢ）と呼ばれる抽象コマンドキューが提供される。プッシュバッファは、データフレームの送受信に用いることができ、また、抽象コマンドの受け取りや生成を行うように構成することもできる。
【０００８】
[0008]「ｈｏｓｔ  ＭＡＣ」とは別に、ＮＰＵには、追加ＭＡＣ（例えば、１０／１００／１０００、８０２．１１、ＨｏｍｅＰＮＡ）および補助処理装置（例えば、後述のＸＰＵ）が接続される。パケットは、これらのＭＡＣからＮＰＵに流れ込む。ＮＰＵはそれらをオンチップキャッシュまたはシステムメモリに格納できる。ＭＡＣからのデータフレームの受け取りが正常に行われると、ＮＰＵは、それらのデータフレームをＮＰＵ自体の高速化パイプラインから転送することを選択できる。
【０００９】
[0009]ＮＰＵパイプラインは、モジュールの新規な対象形の集まりであり、各モジュールは共用モジュールリソースを用いて入力側処理および出力側処理を実装する。ＮＰＵパイプラインは、広義には、ＭＡＣインターフェース（ＭＩ）モジュール、シーケンスプロセッサ（ＳＰ）モジュール、およびアドレス変換（ＡＴ）モジュールを含む。パイプライン内のＭＩモジュールは、各ＭＡＣとＮＰＵとの間の非同期境界として動作する。パイプラインのシーケンスプロセッサ（ＳＰ）は、入力側で自動カプセル化解除、暗号化解除、認証、およびチェックサムを提供する。出力側にも同様な機能を提供するが、順序は逆になる。最後に、アドレス変換（ＡＴ）モジュールは、ルーティング機能およびステートフルファイアウォール機能を実装する。
【００１０】
一実施形態では、パイプラインモジュールは、エッジベースのルーティング／ゲートウェイシナリオにおいて、時間的局所性を利用するために、（ａ）最後に使用されたテーブルエントリの内部サブユニットキャッシング、（ｂ）ＮＰＵ内の汎用プログラマブルキャッシュ領域におけるテーブルエントリのキャッシュ、および（ｃ）システムメモリのフルテーブルの、３つのレベルのキャッシングを利用する。キャッシングとハッシングを組み合わせることにより、待ち時間およびシステムメモリとの間の往復を減らすことができる。ＮＰＵはさらに、再循環させなければならないパケットを格納するために、手動で管理されるキャッシュおよびメモリにおいて様々な構成可能領域を利用する。
【００１１】
[0010]一実施形態では、ＮＰＵは、システムメモリのアクセスする際の待ち時間を隠すために拡大プリフェッチを利用できる。ＮＰＵ内部の複数のモジュールが、プリフェッチ（書き込み収集）を同時に行うことができる。パケットが廃棄されるか、任意のＭＡＣおよびＭＡＣキュー（ＰＢ）に転送されるように、テーブルエントリをプログラミングできる。
【００１２】
[0011]一実施形態では、ホストコンピュータは、専用タスクを実行するために配備された１つまたは複数の補助処理装置または専用処理装置と、ＮＰＵを介して通信する。これらの補助処理装置は、様々なアプリケーション要求を満たすために、ホストの一部であることも、ホストから独立して配備されることも可能である。例えば、これらの補助処理装置のいくつかは、グラフィックス処理装置（ＧＰＵ）、オーディオ処理装置（ＡＰＵ）、ビデオ処理装置（ＶＰＵ）、ストレージ処理装置（ＳＰＵ）、物理処理装置（ＰＰＵ）などを含み、これらに限定されない。本開示では、これらの補助処理装置をＸＰＵと呼ぶ。各処理装置で実行される特定機能を示す場合は「Ｘ」を置き換える。最後に、ネットワーク処理装置自体もＸＰＵである。これは、ＸＰＵ間でパケットをルーティングすることに加えて、これらのパケットに対する様々な処理（例えば、認証、暗号化、圧縮、ＴＣＰ、ＩＰＳｅｃ／ＶＰＮ／ＰＰＰカプセル化など）の高速化を実施できるからである。
【００１３】
[0012]本発明の一態様は、組み込みルータとして有効に動作するＮＰＵに、ＸＰＵが論理的に直接接続され、それによって、ＸＰＵが、独立したネットワーク機器のように見えることである。これらの補助処理装置は、この論理ネットワークアーキテクチャにおいて第１クラスのステータスを有するので、ホストＣＰＵ／ＯＳが関与することなく、ＩＰ、ＴＣＰ、ＵＤＰなどの標準インターネットプロトコルを用いて、互いに通信すること、または任意の外部コンピュータと（例えば、別のＮＰＵを介して）直接通信することを許可される。この新規なアーキテクチャを用いることにより、ＮＰＵは、分散コンピューティング環境においてローカル（ホスト）アクセスとリモートアクセスの両方を高速化できる。
【００１４】
[0013]さらに、本発明は、ホストコンピュータの残りのリソース（例えば、ホストコンピュータの物理メモリ、ＲＯＭ、実時間クロック、割込など）を仮想化することにより、このＮＰＵにそれぞれ接続された複数の仮想ホストコンピュータを単一のチップセットで提供できるようにする。これらの各仮想コンピュータまたは仮想ホストは、同一のオペレーティングシステムまたは異なるオペレーティングシステムをそれぞれ独自に実行でき、他の仮想コンピュータおよび組み込みネットワーク機器と、標準ネットワーキングプロトコルを用いて通信できる。効果として、本発明は、ホストオペレーティングシステムおよびホストコンピュータの標準定義の下に存在する専用ハードウェアレベルオペレーティングシステムおよびグラフィカルユーザインターフェース（ＧＵＩ）を実装し、コンピュータユーザが容易にネットワークを構成したり、そのホストコンピュータの標準定義を変更することなく１つの仮想コンピュータから別の仮想コンピュータに切り替えたりすることを可能にする。
【００１５】
[0014]以下の詳細説明を添付図面と併せて考察することによって、本発明の教示を容易に理解できよう。
【００１６】
[0033]理解を容易にするために、各図面に共通する同一要素には、可能な限り、同一の参照符号を用いている。
【詳細な説明】
【００１７】
[0034]図２は、本発明の新規な内部コンテンツソースおよびデータパイプ２００を示すブロック図である。図１と異なり、このネットワークアーキテクチャは、内部コンテンツソースおよびデータパイプの中央に本発明のネットワーク処理装置２１０を有する。ホストＣＰＵ／ＯＳ  ２５０は、もはやデータルーティングスキームの中心ではない。この新しいアーキテクチャの１つの利点は、ＮＰＵ  ２１０がローカル（ホスト）アクセスとリモートアクセスの両方の高速化を実現することである。
【００１８】
[0035]動作時のホストＣＰＵ／ＯＳ  ２５０は、ネットワーク処理装置２１０と通信している仮想ポート（すなわち、ｈｏｓｔ  ＭＡＣ）を有し、ＮＰＵが標準ネットワーキングプロトコル（例えば、ＴＣＰ／ＩＰプロトコル）を用いる外部ネットワーク機器であるかのようにＮＰＵと通信する。一実施形態では、ホストコンピュータは、専用タスクを実行するために配備された１つまたは複数の補助処理装置または専用処理装置２２０、２３０と、ＮＰＵを介して通信する。これらの補助処理装置は、様々なアプリケーション要求を満たすために、ホストの一部であることも、ホストから独立して配備されることも可能である。
【００１９】
[0036]例えば、これらの補助処理装置のいくつかは、グラフィックス処理装置（ＧＰＵ）、オーディオ処理装置（ＡＰＵ）、ビデオ処理装置（ＶＰＵ）、物理処理装置（ＰＰＵ）、ストレージ処理装置（ＳＰＵ）２２０などを含み、これらに限定されない。これらの補助処理装置のいくつかは、メディアエンジン２３０の一部として配備でき、ＳＰＵ  ２２０は、ホストのストレージデバイスとともに配備される。最後に、ネットワーク処理装置自体もＸＰＵである。これは、ＸＰＵ間でパケットをルーティングすることに加えて、これらのパケットに対する様々な処理（例えば、認証、暗号化、圧縮、ＴＣＰ、ＩＰＳｅｃ／ＶＰＮ／ＰＰＰカプセル化など）の高速化を実施できるからである。
【００２０】
[0037]一実施形態では、ＮＰＵ  ２１０は、ホストコンピュータ２５０と同じ「筐体」（シャーシ）の中に存在する（すなわち、一般に同じチップセット内にある）ネットワークルータ機器である。このＮＰＵは、以下に示すような、専用機能を実行した他の様々な「ＸＰＵ」と接続するよう動作する。
１）ストレージ処理装置（ＳＰＵ）は、ファイルシステムを実装する補助処理装置である。このファイルシステムには、ホストがローカルにアクセスしたり、ＮＰＵによる外界との接続を介してリモートにアクセスしたりできる。ＳＰＵは、データストレージ用エンドポイントとして動作する点で特殊なＸＰＵである。ＳＰＵファイルからストリームを開始したり、ＳＰＵファイルでストリームを終了したりできる。
２）オーディオ処理装置（ＡＰＵ）は、個々の「音声」に対してオーディオ効果を実装し、それらの音声を少数のチャネルにミックスダウンする補助処理装置である。ＡＰＵはさらに、ＮＰＵを介してネットワーク上で送受信されるオーディオパケットのカプセル化／カプセル化解除を実行する。
３）ビデオ処理装置（ＶＰＵ）は、（例えば、ＭＰＥＧ−２の）圧縮ビデオパケットに対して動作する（それらを圧縮するか、圧縮解除する）以外は、ＡＰＵとよく似た補助処理装置である。ＶＰＵはさらに、ビットストリームまたはネットワークビデオパケットへのカプセル化を実行する。
４）グラフィックス処理装置（ＧＰＵ）は、グラフィックスプリミティブを取得し、（部分的）フレームバッファを生成する補助処理装置である。ＧＰＵは、レンダリングされたグラフィックスプリミティブのエンドポイントとして動作する点で特殊なＸＰＵである。ストリームをＧＰＵフレームバッファで終了したり、ストリームをローピクセルとしてフレームバッファから開始したりできる。
５）物理処理装置（ＰＰＵ）は、物体の位置、現在の速度ベクトル、および力式を取得し、新しい位置、速度ベクトル、およびコリジョン情報を生成する補助処理装置である。
６）ネットワーク処理装置（ＮＰＵ）自体もＸＰＵである。これは、ＸＰＵ間でパケットをルーティングすることに加えて、これらのパケットに対する様々な処理（例えば、認証、暗号化、圧縮、ＴＣＰ、ＩＰＳｅｃ／ＶＰＮ／ＰＰＰカプセル化など）の高速化を実施できるからである。
【００２１】
[0038]上記ＸＰＵのいくつかは、ホスト  ２５０およびＮＰＵ  ２１０に関連付けられることに関して、いくつかの共通点がある。第１に、ＸＰＵへは、ホストＣＰＵ／ＯＳ  ２５０からローカルリソースとして直接アクセスできる。通信は、直接ローカルチャネルを用いることによって有効になる。
【００２２】
[0039]第２に、ＮＰＵを介してＸＰＵをネットワーク上に配置し、（図３の下部に示すように）他のネットワークノードからリモートにＸＰＵにアクセスすることができる。このことは、ネットワークパケット内にカプセル化された情報をＸＰＵが処理できることを示す。
【００２３】
[0040]第３に、ＸＰＵへは、ローカルホストからでも「リモート」ノードとしてアクセスできる。通信は、ネットワークプロトコルを用いることによって、ＮＰＵ経由で有効になる。
【００２４】
[0041]第４に、ＸＰＵは、（ほとんどの機器と同様に）ホスト（ＣＰＵ＋ＯＳ）が「オフ」状態にあるときも含めて、常に「オン」状態にある。このユニークな特徴により、ＸＰＵは、ホストＣＰＵ／ＯＳの関与がなくても動作可能である（例えば、ホストの関与がなくてもホストのディスクドライブからデータを抽出できる）。より重要なことに、ＣＰＵ／ＯＳが活動停止状態（例えば、スリープモード）にあっても、ホストの各リソースは利用可能なままである。
【００２５】
[0042]第５に、ＸＰＵには少なくとも二組の処理キューがあり、一組は非実時間パケット用、少なくとも一組は実時間パケット用である。このキューの二元性と、ＮＰＵの同様の実時間キューとの組合せにより、ＮＰＵとＸＰＵのシステムは、実時間ストリーム用の待ち時間および帯域幅を保証できる。
【００２６】
[0043]第６に、ＸＰＵは２つのソフトウェア（ＳＷ）ドライバを有する。１つは、ホスト側のＸＰＵとの接続を管理し、１つは、ＸＰＵの、リモートにアクセスされるコンポーネントを管理する。動作時のＳＷドライバは、プッシュバッファ（ＰＢ）と呼ばれる抽象コマンドキューを用いてＸＰＵと通信する。各ドライバは、ドライバからＸＰＵに向かうＰＢを少なくとも１つと、ＸＰＵからドライバに向かうＰＢを少なくとも１つ有する。
【００２７】
[0044]第７に、ＸＰＵへは、ホスト側において、ユーザレベルアプリケーションから直接アクセスすることもできる。これは、ＯＳによる、ユーザ空間バッファのレイジーピンニングを伴う。レイジーピンニングは、メモリページの仮想から物理へのアドレス変換を、要求に応じて（すなわち、特定のＸＰＵが変換を必要とするときに）ロックすることを意味する。変換が不要になると、ロックを解除でき、オペレーティングシステムはそれらのページをスワップアウトできるようになる。これらのバッファの仮想から物理へのマッピングがＸＰＵに渡される。ＰＢの独立したペアがユーザのアドレス空間内にリンクされ、ＯＳドライバが、コンテキストスイッチをＸＰＵと連動させる。
【００２８】
[0045]本発明は、ネットワーク処理装置２１０を用い、ＣＰＵ／ＯＳを関与させないでルーティング機能を実行することを開示するが、一方でＣＰＵ／ＯＳ  ２５０は、そのリソース（例えば、ストレージデバイス）との代替直接通信チャネル２５５も有する。これにより、ホストＣＰＵ／ＯＳは、そのリソースまたはメディアエンジンとＮＰＵ経由で通信するか、ローカルアクセスチャネル２５５または２５７経由で直接通信するかを選択できる。
【００２９】
[0046]実際、本発明の一実施形態では、ＣＰＵ／ＯＳは一般的なルーティング機能には関与しないが、例外的なルーティング問題は、ホストＣＰＵ／ＯＳによって解決される。例えば、ＮＰＵは、処理できないパケットを受信した場合には、そのパケットを解決のためにホストＣＰＵ／ＯＳに転送する。このようにＣＰＵ／ＯＳを限定的に使用することは、ホストの処理を高速化し、同時に、ホストＣＰＵの処理能力を難題の解決のために合理的に使用する選択肢を保持することに役立つ。
【００３０】
[0047]さらに、ホストのリソースへは、ホストＣＰＵ／ＯＳ  ２５０を関与させずに、ＮＰＵから入出力通信チャネル２４０（例えば、ＵＳＢ）を介してアクセスすることもできる。例えば、本アーキテクチャでは、ホストコンピュータ２５０の残りのリソース（例えば、物理メモリ、読み出し専用メモリ（ＲＯＭ）、実時間クロック、割込など）を仮想化し、それによって、それぞれＮＰＵ  ２１０に接続された複数の仮想ホストを単一のチップセットで提供することが可能になる。
【００３１】
[0048]本発明のユニークな一態様は、組み込みルータとして有効に動作するＮＰＵに、ＸＰＵが論理的に直接接続され、それによって、ＸＰＵが、独立したネットワーク機器のように見えることである。これらの補助処理装置は、この論理ネットワークアーキテクチャにおいて第１クラスのステータスを有するので、ホストＣＰＵ／ＯＳが関与することなく、ＩＰ、ＴＣＰ、ＵＤＰなどの標準インターネットプロトコルを用いて、互いに通信すること、または任意の外部コンピュータと（例えば、別のＮＰＵを介して）直接通信することを許可される。この新規なアーキテクチャを用いることにより、ＮＰＵは、分散コンピューティング環境においてローカル（ホスト）アクセスとリモートアクセスの両方を高速化できる。
【００３２】
[0049]図３は、複数のネットワーク処理装置３１０ａ〜ｎを介してホストコンピュータ３００ａ〜ｎのネットワークが互いに通信している場合のブロック図である。このユニークな構成は、ホストアクセスとリモートアクセスの両方の高速化を実現する。
【００３３】
[0050]この、ＮＰＵとＸＰＵのシステムの考察は、このシステム内を流れるパケット化されたデータのストリームというコンテキストにおいて行うのが最善である。このシステムでは、様々な種類のストリームが許可される。この説明では、「ホスト」という用語は、ＯＳカーネルまたはユーザレベルプロセスのコンテキストにおけるホストＣＰＵとメモリの組合せを意味するものとする。「ノード」という用語は、（例えば、図４下部に示すように）ＮＰＵに直接接続されているＭＡＣへの有線接続または無線接続を介してＮＰＵに接続されたリモートネットワークホストまたはリモートネットワークデバイスを指す。
【００３４】
[0051]「ホスト→ＸＰＵ」ストリームは、ホスト３５０ａからＸＰＵ  ３３０ａに直接流れるストリームである。これは、専用ＸＰＵの一般的なケースである（例えば、通信パス３５７を介する専用ＧＰＵ）。このストリームはＮＰＵ  ３１０ａをトラバースしない。
【００３５】
[0052]「ＸＰＵ→ホスト」ストリームは、ＸＰＵからホストに直接流れるストリームである。一例は、パス３５５を介する、ＳＰＵ  ３２０ａからのローカルファイルの読み出しである。このストリームはＮＰＵ  ３１０ａをトラバースしない。
【００３６】
[0053]「ホスト→ＸＰＵ→ホスト」ストリームは、処理のためにホスト３５０ａからＸＰＵ  ３３０ａに流れてからホスト３５０ａに戻るストリームである。一例は、音声を最終ミックスバッファに入れる処理のためにホストが音声データをＡＰＵに直接転送し、その後、パス３５７を介してその音声データをホストに戻すケースである。このストリームはＮＰＵ  ３１０ａをトラバースしない。
【００３７】
[0054]「ホスト→ＮＰＵ→ＸＰＵ」ストリームは、ホスト３５０ａからＮＰＵ  ３１０ａを介してＸＰＵ  ３３０ａまたは３２０ａに流れるネットワークストリームである。これら３つのパーティは、標準ネットワーキングプロトコル（例えば、ＴＣＰ／ＩＰ）を用いて、パケット化されたデータを転送する。
【００３８】
[0055]「ＸＰＵ→ＮＰＵ→ホスト」ストリームは、ＸＰＵ  ３３０ａまたは３２０ａからＮＰＵ  ３１０ａを介してホスト３５０ａに流れるネットワークストリームである。これら３つのパーティは、標準ネットワーキングプロトコル（例えば、ＴＣＰ／ＩＰ）を用いて、パケット化されたデータを転送する。
【００３９】
[0056]「ホスト→ＮＰＵ→ＸＰＵ→ＮＰＵ→ホスト」ストリームは、その前の２つのストリームを組み合わせたネットワークストリームである。これら３つのパーティは、標準ネットワーキングプロトコル（例えば、ＴＣＰ／ＩＰ）を用いて、パケット化されたデータを転送する。
【００４０】
[0057]「ホスト→ＮＰＵ→ノード」ストリームは、ホスト３５０ａからＮＰＵ  ３１０ａを介してリモートノード（例えば、ＮＰＵ  ３１０ｂ）に流れるネットワークストリームである。これにより、ローカルホスト３５０ａは、第２のＮＰＵ  ３１０ｂを介して、別のホストのＸＰＵ  ３３０ｂと通信し、これにアクセスすることが可能になる。
【００４１】
[0058]「ノード→ＮＰＵ→ホスト」ストリームは、リモートノード（例えば、ＮＰＵ  ３１０ｂ）からＮＰＵ  ３１０ａを介してホスト３５０ａに流れる逆方向のネットワークストリームである。これにより、リモートＮＰＵ  ３５０ｂは、ローカルＮＰＵ  ３１０ａを介してローカルホスト３５０ａと通信することが可能になる。
【００４２】
[0059]「ノード→ＮＰＵ→ＸＰＵ」ストリームは、リモートノード３５０ｂからＮＰＵ  ３１０ａを介してＸＰＵ  ３３０ａに流れ、そこで終了するネットワークストリームである。これにより、リモートＮＰＵ  ３１０ｂは、ローカルＮＰＵ  ３１０ａを介してローカルＸＰＵ  ３３０ａと通信することが可能になる。
【００４３】
[0060]「ＸＰＵ→ＮＰＵ→Ｎｏｄｅ」ストリームは、ＸＰＵ  ３３０ａから始まり、ローカルＮＰＵ  ３１０ａを介してリモートノード（例えば、ＮＰＵ  ３１０ｂ）に流れるネットワークストリームである。
【００４４】
[0061]「ノード０→ＮＰＵ→ＸＰＵ→ＮＰＵ→ノード１」ストリームは、その前の２つのストリームの組合せである。ノード０およびノード１は同じであっても異なっていてもよい。例えば、ノード０を３１０ａ、ＮＰＵを３１０ｂ、ＸＰＵを３３０ｂ、ＮＰＵを３１０ｂ、およびノード１を３１０ｎとすることができる。あるいは、ノード０を３１０ａ、ＮＰＵを３１０ｂ、ＸＰＵを３３０ｂ、ＮＰＵを３１０ｂ、およびノード１を３１０ａとすることができる。
【００４５】
[0062]「｛Ｈｏｓｔ，Ｎｏｄｅ０，ＸＰＵ０｝→ＮＰＵ→ＸＰＵ１→ＮＰＵ→ＸＰＵ２→ＮＰＵ→｛Ｈｏｓｔ，Ｎｏｄｅ１，ＸＰＵ３｝ストリームは、ホスト、リモートノード、またはＸＰＵから始まり、何らかの処理のためにＮＰＵをパススルーして別のＸＰＵに流れ、さらに何らかの処理のためにＮＰＵをパススルーして別のＸＰＵに流れ、ホスト、別のリモートノード、または別のＸＰＵで終了するストリームである。本アーキテクチャによる組み込み型処理装置のネットワークが、ホストアクセスとリモートアクセスの両方の高速化を大いに促進する、強力かつ柔軟な分散処理環境を提供することは明らかである。
【００４６】
[0063]本アーキテクチャの下では、多くの優位点が実現される。第１の利点として、他のコンピュータやネットワーク機器を同じチップセットに緊密に組み込むことができる。第２の利点として、非常に有利なことに、ホストコンピュータの入出力機能をインテリジェントな処理装置の分散ネットワークに肩代わりさせることにより、従来あった、ＣＰＵ／ＯＳの過負荷に伴う待ち時間を解消できる。第３の利点として、（任意で図２に破線で示した）チップセット内で、ホストコンピュータの定義を変更することなく、これらの補助入出力処理装置に第１クラスのネットワーク機器ステータスを与えることができる。第４の利点として、これらの補助入出力処理装置をホストコンピュータ、外部コンピュータ、内部ネットワーク機器、および外部ネットワーク機器の間で共用できる。第５の利点として、ホストコンピュータの残りのリソースを仮想化して、ホストコンピュータの複数の仮想コピーを同じチップセット内で具現化させ、インテリジェントな補助入出力処理装置のネットワークを共用させることが可能である。最後の利点として、ユーザがネットワークを構成し、ホストコンピュータ（仮想ホスト）の複数の仮想コピーをシームレスに切り替えることを可能にする、ハードウェアレベルのオペレーティングシステムとグラフィカルユーザインターフェース（ＧＵＩ）を用いることができる。
【００４７】
[0064]本発明の一実施形態では、前述の組み込み型処理装置のネットワークを用いて、実時間メディアストリーミングを実装する。具体的には、メディアストリーミングは、複数のソフトウェアレイヤを必要とするのが一般的である。そのため、特にソフトウェアが汎用コンピュータで実行される場合には、待ち時間が予測不能である可能性がある。より重要なことに、メディアストリーミングは、通常、ホストコンピュータで動作している他のアプリケーションに深刻な悪影響を及ぼす。
【００４８】
[0065]ただし、ＮＰＵ＋ＳＰＵの組合せにＡＰＵやＧＰＵのようなメディアデバイスを接続すれば、メインホストＣＰＵの負担を軽減するとともに、待ち時間を最小化および保証することが可能になる。例えば、図３に示すように、（一般に無線接続された）リモート受信者３５０ｂから制御要求を受け取ることができる。これらの制御要求として、再生、停止、巻き戻し、早送り、一時停止、タイトル選択などがある。ストリームがセットアップされていれば、ＳＰＵ  ３２０ａによって管理されるディスクから、ＮＰＵ  ３１０ａを経由して宛先のクライアントに、ローデータを直接ストリーミングできる。あるいは、データをＮＰＵ  ３１０ａ経由で送出する前に、ＧＰＵ  ３３０ａまたはＡＰＵ  ３３０ａで前処理できる。繰り返すが、重要な一態様として、ホストＣＰＵ  ３５０ａを関与させることなく実時間メディアストリーミングを行うことができる。システムを通しての専用キューイングによって、待ち時間と帯域幅が保証される。
【００４９】
[0066]このメディアストリーミングの実施形態は、本発明が強力かつ柔軟であることを明確に示す。この実時間メディアストリーミングの実施形態の実用的な一実施態様では、家庭環境において、集中型マルチメディアホストサーバまたはコンピュータが、蓄積されたメディアストリームのライブラリを収容する大規模ストレージデバイスを有するか、あるいは単純にＤＶＤプレーヤ、「ＰＶＲ」（パーソナルビデオレコーダ）、または「ＤＶＲ」（デジタルビデオレコーダ）に接続される。家庭内に別のクライアントデバイスがある場合は、前述のネットワークアーキテクチャを用いて実時間メディアストリーミングを実装するのが効果的である。その場合は、ホストコンピュータのストレージデバイスから、家庭内の別の場所にある別のホストコンピュータまたはテレビにメディアストリームを送信できる。このように、ホストコンピュータを関与させることなく、待ち時間と帯域幅を保証して、実時間メディアストリーミングを実装できる。
【００５０】
[0067]図４は、本発明のネットワーク処理装置のブロック図である。具体的には、本発明は、ホストコンピュータのチップセット内に存在するネットワーク処理装置（ＮＰＵ）に、インターネットプロトコル（ＩＰ）ルータの諸機能を組み込む。このＮＰＵは、ホスト側と汎用ルータ／ゲートウェイの両方の高速化を結合する。ＮＰＵは、一実施形態ではホストコンピュータと同じチップを共用するが、論理的にはホストコンピュータから独立しているように見える。
【００５１】
[0068]図４に示すネットワーク処理装置（ＮＰＵ）４００は、５つのモジュールまたはサブユニットを有する。すなわち、メディアアクセスコントローラ（ＭＡＣ）サブユニット４１０、ＭＡＣインターフェースサブユニット４２０、シーケンスプロセッサ（ＳＰ）４３０、アドレス変換サブユニット４４０、およびフロントエンドサブユニット４５０である。メディアアクセスコントローラ（ＭＡＣ）サブユニット４１０は、１つまたは複数のＭＡＣ（例えば、ｈｏｓｔ  ＭＡＣ  ４１２、ｗｉＭＡＣ  ４１４、メディアに依存しないインターフェースＭＡＣ  ４１６（ｍｉｉＭＡＣ）、およびｄｓｐＭＡＣ  ４１８）を含むことができることに注目されたい。これらの各種ＭＡＣは、データリンクレイヤを実装し、リンクレベル制御を扱う。
【００５２】
[0069]ＮＰＵサブユニットは、ＮＰＵインターフェースと呼ばれる共通のインターフェース型を用いて互いに通信する。ＮＰＵインターフェースは、共有アドレスおよびデータワイヤを有する非スプリット書き込みインターフェースによく似ている。本発明の一実施形態では、ほとんどのＮＰＵインターフェースがアドレスもデータも３２ビット幅であるが、低帯域幅インターフェースは、領域を節約し、ルーティングの輻輳を回避するために８ビット幅である。ＮＰＵインターフェースは、２つのポイントツーポイントバスからなる。１つは書き込み要求／データおよび読み出し要求に用い、もう１つは読み出しの戻りデータに用いる。
【００５３】
[0070]例えば、サブユニットｘｘがサブユニットｙｙと３２ビットＮＰＵインターフェースで通信すると仮定すると、ｘｘ２ｙｙ要求（ｒｅｑ）バスは以下のようになる。
ｙｙ２ｘｘ＿ｂｕｓｙ              −  ｙｙがこのサイクルで要求／データを受け取れる場合は０。
ｘｘ２ｙｙ＿ｒｅｑ                −  ｘｘがこのサイクルで有効な要求／データを有する場合は１。
ｘｘ２ｙｙ＿ｃｍｄ                −  １＝＝書き込み。０＝＝読み出し。他のビットを追加してもよい。
ｘｘ２ｙｙ＿ｉｓｏ                −  等時性要求を示すオプションビット。
ｘｘ２ｙｙ＿ｓｕｂｉｄ［？：０］  −  ｘｘが複数の読み出し要求ストリームを有する場合のオプション読み出しサブＩＤ。このサブＩＤは、下のｙｙ２ｘｘバスでｒｉｄ＿ｎｅｘｔとして返される。
ｘｘ２ｙｙ＿ｓｚ［？：０］        −  「３２ビットダブルワード数−１」の数（オプション）。常に１ダブルワードの場合は不要。
ｘｘ２ｙｙ＿ａｄ［３１：０］      −  アドレスまたは書き込みデータ。書き込みの第１のサイクルはアドレス。後続のサイクルは書き込みデータ。読み出しはアドレスサイクルのみ。
ｘｘ２ｙｙ＿ｂｅ［３：０］        −  オプションのバイトイネーブル（ＢＥ）。逆検知される（ｂｅ＝０はすべてを書き込む／読み出すことを意味する）。
ｘｘ２ｙｙ＿ｄａｔａ［３ｌ：０］  −  ３２ビットのデータ（ダブルワード）。
ｘｘ２ｙｙ＿ｅｏｆ                −  フレーム終了ビット。カウントを必要とせずに、１つのフレームと他のフレームとの境界を定めるために用いる。
【００５４】
[0071]ｒｅｑ＝＝１かつｂｕｓｙ＝＝０の場合にサイクルが転送される。データサイクル間に任意のアイドルサイクルを配置できる。
ｙｙ２ｘｘの読み出しの戻りデータ（ｒｄａｔ）のバスは以下のようになる。
ｙｙ２ｘｘ＿ｒｄａｔ＿ｖｉｄ                −  現在のサイクルが有効な読み出しデータを有する。
ｙｙ２ｘｘ＿ｒｄａｔ＿ｓｕｂｉｄ［？：０］  −  読み出し要求のオリジナルサブＩＤ（オプション）。
ｙｙ２ｘｘ＿ｒｄａｔ［３１：０］            −  読み出しデータ。
【００５５】
[0072]ｙｙ２ｘｘバスにフロー制御がないことは、読み出し要求側が、要求した読み出しデータをすべて受け取ることが可能でなければならないことを示している。有効なサイクルの間に任意の数のアイドルサイクルを置くことができる。
【００５６】
[0073]送信側（ｘｘ）と受信側（ｙｙ）は、論理出力の前にｒｅｑ信号とｂｕｓｙ信号を明確に登録できるように、ｒｅｑ＿ｎｅｘｔ／ｂｕｓｙ＿ｎｅｘｔインターフェースを用いることができる。これは特に、受信側が入力ＦＩＦＯを有する場合に、送信側のオーバーフローレジスタをＦＩＦＯにシフトでき、便利である。
【００５７】
[0074]動作時には、フレームのヘッダが処理されれば、サブユニットがデータサイクル全体を素早く処理できる。具体的には、イーサネットフレームが１つのサブユニットから次のサブユニットに流れる。再循環はなく、逆方向の信号を与える必要もない。
【００５８】
[0075]一実施形態では、前述のＮＰＵパイプラインを３２ビット幅（ダブルワード）として実装し、３００ＭＨｚ（１．２ＧＢ／秒のロー帯域幅）で動作させる。ただし、当業者であれば、本ＮＰＵパイプラインはこれだけに限定されず、様々な要件を満たすために様々な構成で実装できることを理解されよう。
【００５９】
[0076]実際、本発明は、本ＮＰＵパイプラインで実行される複数の機能を開示するが、当業者であれば、本発明を、さらなる機能および／または本開示で開示された機能の一部のみを含むように適合させることが可能であることを理解されよう。さらに、本開示では、様々なバッファ、インターフェース、コマンド、その他を識別するために、ユニークな参照ラベルを採用する。これらの参照ラベルは、読み手が本開示をたどるためのものであり、いかなる形でも本発明の範囲を限定するものではない。すなわち、特許請求項は、これらの要素を、その固有の参照ラベルにおいてではなく、「一般的」な形で参照できるものとする。
【００６０】
[0077]本ＮＰＵは、そのユニークなパイプラインアーキテクチャを実装するために、様々な種類のバッファやルックアップテーブルを用いる。以下、これらのバッファおよびルックアップテーブルについて紹介するが、これらのバッファが、後で開示するように、ＮＰＵの様々なサブユニットとの動作についてさらに説明する時点で、読み手はさらなる深い認識を得られよう。
【００６１】
[0078]一般に、サブユニットは、可能な限り、物理的に連続したメモリバッファにアクセスする。図５のメモリアービタ４５１によって実行される隠しアドレス変換はない。ＮＰＵソフトウェア（ＳＷ）がカーネル内に存在するので、ＳＷがＮＰＵとの間で物理アドレスをやりとりするのを防ぐ必要がないことに注意されたい。実際、ＳＷは、それらの物理アドレスをカーネル内の上位プロトコルから取得でき、ＳＷは、システムメモリ内の任意の場所をポイントできる。
【００６２】
[0079]ＮＰＵは、システムメモリ内で、以下の４種類の、物理的に連続するバッファを用いる。
１．プッシュバッファ（ＰＢ）  −  ＳＷからＦＥ／ＨＭへの、またはＦＥ／ＨＭからＳＷへのコマンドの循環バッファ。
２．フレームバッファ（ＦＢ）  −  フレームの一部、フレーム全体、または複数のフレーム全体を保持する。
３．フレームバッファポインタリスト（ＦＢＰＬ）  −  ＦＢへのポインタの配列。ＦＢＰＬは、通常、コマンドの一部としてＰＢに書き込まれるが、何らかの論理空間（スピルバッファなど）の全般図としても用いることができる。
４．ルックアップテーブル（ＬＴ）  −  圧縮されたルックアップ。
【００６３】
[0080]ＳＷとＦＥ／ＨＭの間のプッシュバッファはすべて、比較的小さいので、物理的に連続している。ＰＢは、一般にコマンドとデータへのポインタとを含み、一般にデータの大きなかたまりを含まない。
【００６４】
[0081]一実施形態では、ＰＢを、３２ビット・ダブルワードの循環バッファとして配置する。各ＰＢは、ＰＢの、ダブルワードアラインメントの物理バイトベースアドレスを表すＰＢＢＡＳＥレジスタを有する。各ＰＢは、「ＰＢ内のバイト数−１」を表すＰＢＭＡＸレジスタを有する。各ＰＢは、生成側によって次に書き込まれる、ダブルワードアラインメントのバイトオフセットを示すＰＢＰＵＴレジスタ（初期値：０）を有する。同様に、ＰＢＧＥＴレジスタは、消費側によって次に読み出される、ダブルワードアラインメントのバイトオフセットを示す（初期値：０）。ＰＢＧＥＴ＝＝ＰＢＰＵＴであれば、ＰＢは空である。生成側は、ラップアラウンドを避けるために、最大で「ＰＢＭＡＸ−７」バイトをＰＢに置くことができる。オフセット「ＰＢＭＡＸ−３」にあるダブルワードは、ＰＢの方向に応じて、ＰＢＰＵＴポインタまたはＰＢＧＥＴポインタのメモリコピー用に予約される。このメモリ内コピーにより、ＣＰＵは、ＮＰＵ内の実際のレジスタをポーリングする代わりにキャッシュをポーリングアウトできる。ＰＢＢＡＳＥ、ＰＢＭＡＸ、ＰＢＰＵＴ、ＰＢＧＥＴの各レジスタは、ＰＢを保有するサブユニット（通常はＦＥ  ４５０またはＨＭ  ４１２）に存在する。
【００６５】
[0082]ＦＥ／ＨＭはさらに、シングルビットＰＢＩＮＴレジスタが１で、ＰＢが空から空でなくなった場合に、ＣＰＵに割込をかける。この後の説明のために、ＰＢＰＵＴおよびＰＢＧＥＴは、ＮＰＵレジスタ内またはシステムメモリ内に存在しうる実際の値を指すものとする。
【００６６】
[0083]生成側は、ダブルワードコマンドと、コマンド固有の数のデータダブルワードをＰＢに書き込む。コマンドダブルワードのビット３１：２４はコマンドインデックスを表し、ビット２３：０はコマンド固有の引数を含む。データダブルワードもコマンド固有である。そこで、生成側はＰＢＰＵＴを４＊ダブルワードだけインクリメントする。生成側は、ＰＢＰＵＴをインクリメントする前にフルコマンドを書き込まなければならない。生成側は、ＰＢＰＵＴを常時認識しているが、ＦＩＦＯにおいてＰＢにフルコマンド分の余地がなくなると、ＰＢＧＥＴをポーリングする。ＦＥ／ＨＭは、生成側として、ＰＢＧＥＴを連続的にポーリングできる。
【００６７】
[0084]消費側は、ＰＢＧＥＴを常時認識している。消費側は、ＰＢＰＵＴ！＝ＰＢＧＥＴとなるまでＰＢＰＵＴをポーリングし、そうなった時点で、処理するフルコマンドがＰＢにあることを認識する。ＦＥ／ＨＭは、消費側として、ＰＢＰＵＴを連続的にポーリングする。
【００６８】
[0085]１つのフレームバッファ（ＦＢ）は、物理的に連続している。これには、小（例えば１２８バイト）、中（例えば２０４８キロバイト）、大（例えば１６メガバイト）の大きさがある。ＦＢは、次の２つの動作に用いられる。（１）ホストが送信または受信するフレームの一部またはすべてを保持すること。（２）ＮＰＵパイプラインがバックアップされている間、フレームを一時的に保管するために、ＭＩサブユニットが用いるスピルバッファ。
【００６９】
[0086]（例えば、ＦＢポインタリスト（ＦＢＰＬ）を用いて）論理的に大きなＦＢを作成するために、ＦＢが仮想的に連結されるのは、よくあることである。
以下のいくつかの操作で、ＦＢＰＬを用いることができる。
１．ＳＷが収集したフレームをＨＭに渡す
ＳＷは、フレームのＦＢＰＬを「ＳＷ→ＨＭ」ＰＢに書き込む。各ＦＢは、上位プロトコルからＳＷスタックに下ろされる任意の数のバイトを有することができるので、ＰＢ内の各「ポインタ」は、実際には、物理アドレスが６４ビットで、バイト長が３２ビットである。
２．ＳＷが受信バッファを提供する
ＳＷは、同じサイズの空きＦＢのリストをＨＭに与えるために、ＦＢＰＬを「ＳＷ→ＨＭ」ＰＢに書き込む。この場合、ＦＢのサイズはＦＢＰＬとともにＰＢコマンドで指定され、すべてのＦＢが同じサイズなので、各「ポインタ」は、ＦＢの６４ビット物理アドレスそのものである。実際には、ＳＷは、小さなＦＢのＨＭ  ＦＢＰＬを１つのＰＢに渡し、大きなＦＢのＦＢＰＬを別のＰＢに渡す。これらのＦＢＰＬを、ＨＭが要求に応じて消費する。ＳＷは、ＰＢが空に近くなると、ＰＢを新しいＦＢＰＬで再度満たす。実際には、各ＦＢＰＬは１つのＦＢを有することができ、コマンドは暗黙的であることができる。すなわち、ＰＢは、ＦＢを受け取るためにポインタを格納するだけである。
３．ＨＭが分散したフレームをＳＷに渡す
ＨＭは、受信したフレームのＦＢＰＬを、ＣＦＨとともに「ＨＭ→ＳＷ」ＰＢに書き込む。ＨＭは、ＳＷが前に上記＃２でＨＭに与えたＦＢＰＬのいずれかにあるＦＢを用いることができる。
４．スピルバッファ（ＳＢ）のマッピング
スピルバッファ（ＳＢ）は、非常に大きくなる可能性があるので、物理的に連続していなければならないとするのは現実的でない場合がある。ただし、それらは多数のＳＢ（すなわち、ＭＡＣごとの優先ＦＩＦＯごとに１つ）になる可能性があるので、物理的に連続していることは非常に好ましく、ＳＢの１つずつにＦＢＰＬを用意するのを避けるためにも好ましい。ＳＢが物理的に連続しない場合、ＳＷは、「ＳＷ→ＦＥ」ＰＢ  ｃｏｎｆｉｇコマンドにおいて各ＳＢのＦＢＰＬにポインタを渡さなければならない。あるいは、グローバルキャッシュＳＳＲＡＭにマッピングを配置することができる。ＭＩサブユニットは、ＦＢＰＬを用いて、論理的に連続な、循環型であるＳＢにＦＢをマッピングする。他のＭＩレジスタは、各ＳＢのＳＢＦＢＰＬＢＡＳＥ、ＳＢＦＢＰＬＬＥＮ、ＳＢＰＵＴ、ＳＢＧＥＴの各ポインタを保持する。
ＳＢＦＢＰＬＢＡＳＥはＦＢＰＬの物理アドレスであり、ＳＢＰＬＬＥＮは、ダブルワードアラインメントの、ＦＢＰＬのバイトサイズであり、ＳＢＰＵＴとＳＢＧＥＴは、論理ＳＢへの論理バイトオフセットである。所与の論理バイトオフセットに対してＦＢＰＬエントリを見つけるには、オフセットをｌｏｇ２（ＦＢサイズ）だけ右にシフトするのが簡単である。
【００７０】
[0087]ＦＢＰＬは、良好な局所性を有し、ＮＰＵがリストのバースト書き込み／読み出しを（例えば、１キャッシュラインを一度に）行うことを可能にする。局所性は、ＦＢＰＬが、バースト書き込み／読み出しされる他のコマンドとともに、１つのプッシュバッファ（ＰＢ）に集められると一層良好になる。グローバルキャッシュＳＳＲＡＭは、ＮＰＵとＰＢまたはＦＢとの間でステージ書き込みおよびステージ読み出しを行う場合に用いられる。
【００７１】
[0088]２つのコアルーティングサブユニット（ＳＰ、ＡＴ）は、一部がキャッシュＳＳＲＡＭに格納され、一部が物理的に連続したシステムメモリに格納されているルックアップテーブルをフル活用する。
【００７２】
[0089]一般には、ＳＷがテーブルを書き込み、ＮＰＵサブユニットはそれを読み出すだけであるが、本発明はこの方式に限定されない。ＳＷは、最もよくアクセスされるエントリをキャッシュＳＳＲＡＭに配置し、それほどアクセスされないエントリをシステムメモリに配置しようとする。さらに、ＳＷは、可能な限り多くの情報をキャッシュＳＳＲＡＭおよび各システムメモリバースト読み出しに詰め込むために、テーブルを圧縮しようとする。ＮＰＵサブユニットは、その情報を即座に圧縮解除できる。サブユニットは、ルーティングストリームに一時的な局所性があるという前提で、最新のテーブルルックアップをＦＦまたはラッチＲＡＭにローカルにキャッシュする。
【００７３】
[0090]場合によっては、ＳＷは、特定のサブユニットに関してキャッシュＳＳＲＡＭ内およびシステムメモリ内のルックアップテーブルを書き直したり、サブユニットｐｒｉｖレジスタ内の他のルーティングパラメータを変更したりする。ＳＷは、テーブルのサイズに応じて、各種サブユニットへのキャッシュＳＳＲＡＭの割り当てを、それらのＣＥＡＳＥ、ＣＭＡＸレジスタを調整することによって変更することを決定することもできる。同様に、ＳＷは、「ＳＷ→ＦＥ」ＰＢコマンドを用いて、ルックアップテーブルのＭＢＡＳＥ、ＭＭＡＸレジスタを調整することにより、ルックアップテーブルのシステムメモリ部分の位置とサイズを変更できる。
【００７４】
[0091]本発明の一実施形態では、特定のサブユニットに関してキャッシュＳＳＲＡＭ内およびシステムメモリ内のルックアップテーブルを書き直すことを、以下のように実装できる。
１）ＳＷが、待ち時間を短縮するために、システムメモリ内のルックアップテーブルのコピーをフォーマットする。
２）ＳＷがテーブル情報を、「ＳＷ→ＦＥ」ＰＢのＵＰＤＡＴＥ  ＴＡＢＬＥコマンドで送る。
３）ＦＥがコマンドを受け取り、処理する。
４）ＦＥがＭＩに、ルーティングを一時停止するよう通知する。ＭＩがルーティングパイプラインへのフレームの注入を停止し、着信フレームがメモリにスピルされる。
５）ＦＥが、すべてのサブユニットのｘｘ２ｆｅ＿ｉｄｌｅ信号をポーリングすることにより、ルーティングパイプラインがアイドル状態になるのを待つ。
６）ＦＥが新しいルックアップテーブルコンテンツをキャッシュおよびシステムメモリに書き込む。ただし、ＣＥＡＳＥおよびＣＭＡＸレジスタの書き込みには、サブユニット内部のルックアップテーブルエントリの内部コピーがまったく無効になるという副作用がある。
７）ＦＥがＭＩに、フレームの注入を再開するよう指示する。
【００７５】
[0092]図５は、図４のネットワーク処理装置４００のより詳細なブロック図である。簡単に言えば、ホストコンピュータは、ネットワーク処理装置４００と通信している仮想ポート４１２（すなわち、ｈｏｓｔ  ＭＡＣ）を有し、ＮＰＵが標準ネットワーキングプロトコルを用いる外部ネットワーク機器であるかのようにＮＰＵと通信する。一実施形態では、ホストの、ＮＰＵとの「ＭＡＣ」接続で用いるために、プッシュバッファ（ＰＢ）５１０と呼ばれる抽象コマンドキューが提供される。プッシュバッファ５１０は、データフレームの送受信に用いることができ、また、抽象コマンドの受け取りや生成を行うように構成することもできる。一実施形態では、図５に示すように、プッシュバッファを、プッシュバッファペアとして実装する（例えば、「ホストパケット入力」と「ホストパケット出力」、「ホストＲＴ入力」と「ホストＲＴ出力」、「ソフトＭＡＣ入力」と「ソフトＭＡＣ出力」など）。プッシュバッファについては、後でさらに詳細に説明する。
【００７６】
[0093]「ｈｏｓｔ  ＭＡＣ」とは別に、追加のＭＡＣを実装できる。例えば、ｍｉｉＭＡＣ  ４１６は、１０／１００／１０００  ８０２．３およびＨｏｍｅＰＮＡを実装し、標準ＭＩＩ／ＲＧＭＩＩピンを介して外部物理インターフェース（例えば、ネットワークインターフェースのアナログ部分）に接続される。ｗｉＭＡＣ  ４１４は、８０２．１１  ＭＡＣを実装し、外部ベースバンドに接続される。ｄｓｐＭＡＣ  ４１８は、汎用デジタル信号処理装置（ＤＳＰ）（例えば、本発明のいずれかのＸＰＵ）をＮＰＵに接続する。ＤＳＰは、（例えば、「ｆｉｒｍＭＡＣ」と呼ばれる）ファームウェア４１８ａを実行して、任意の機能（例えば、ボイスオーバーインターネットプロトコル（ＶｏＩＰ）、特定の外部ＮＩＣへのブリッジング、将来の機能の負担軽減など）を実装することができる。したがって、ホストに転送できるフレームであれば、それをＸＰＵにも転送でき、それによって、本発明の特徴である非常に高い柔軟性がもたらされる。
【００７７】
[0094]パケットは、ＭＡＣレイヤ４１０からＮＰＵに流れ込む。ＮＰＵ  ４００はそれらをオンチップキャッシュまたはシステムメモリに格納できる。ＭＡＣからのデータフレームの受け取りが正常に行われると、ＮＰＵは、それらのデータフレームをＮＰＵ自体の高速化パイプラインから転送することを選択できる。
【００７８】
[0095]ＮＰＵパイプラインは、モジュールの新規な対象形の集まりであり、各モジュールは共用モジュールリソースを用いて入力側処理および出力側処理を実装する。ＮＰＵパイプラインは、広義には、ＭＡＣインターフェース（ＭＩ）モジュール４２０、シーケンスプロセッサ（ＳＰ）モジュール４３０、およびアドレス変換（ＡＴ）モジュール４４０を含む。パイプライン内のＭＩモジュールは、各ＭＡＣとＮＰＵとの間の非同期境界として動作する。パイプラインのシーケンスプロセッサ（ＳＰ）は、入力側４３０ａで自動カプセル化解除、暗号化解除、認証、チェックサム、および圧縮解除を提供する。出力側４３０ｂにも同様な機能を提供するが、順序は逆になる。これは既定の方式であるが、本発明の重要な態様は、これらすべての動作とそれぞれに相対する動作とを、ＳＰによって、「ＡＴ前」または「ＡＴ後」に実行できることである。最後に、アドレス変換（ＡＴ）モジュールは、ルーティング機能およびステートフルファイアウォール機能を実装する。
【００７９】
[0096]本ＮＰＵパイプラインには、様々な有利点がある。ここではそれらの有利点のいくつかについて簡単に説明するが、後でさらに説明する。第１に、複数のパケットを並列に処理できる（各ステージにおいても並列に処理できる）。第２に、ＮＰＵパイプラインのアーキテクチャにより、新しい機能のための新しいステージ（および並列処理）を追加することが可能である。第３に、ＮＰＵパイプラインにより、予定外の機能や、相互運用性のための回避策のために、必要に応じて任意のパケットをオンチップＤＳＰに転送できる。
【００８０】
[0097]フロントエンド（ＦＥ）モジュール４５０は、ソフトウェアドライバとＮＰＵの間のインターフェースモジュールとして動作する。フロントエンドモジュールが実行する機能として、ＰＣＩバスとのインターフェーシング、ルーティング状態に関するＮＰＵの構成、メモリアクセスアービトレーションの実行などが挙げられるが、これらに限定されない。
【００８１】
[0098]具体的には、フロントエンド（ＦＥ）モジュールは、メモリアービタ４５１、特権およびコマンドエンジン４５２、およびシステムの他の部分との通信を行うＦＰＣＩ（Ｆａｓｔ  ＰＣＩ）インターフェース４５３を含む。一実施形態では、ＦＰＣＩクロックドメインが、ＮＰＵタイムフレームにおいて約２００ＭＨｚで動作する。ＦＰＣＩクロックドメインと３００ＭＨｚのＮＰＵクロックドメインとの間に「非同期ＦＩＦＯ」が存在することに注意されたい。
【００８２】
[0099]ＦＥモジュールの処理を、（例えば、特権およびコマンドエンジン４５２を含む）「スレーブ側」のコンテキストと、（例えば、メモリアービタ４５１を含む）「マスタ側」のコンテキストとで説明する。スレーブ側とマスタ側は、互いに無関係に動作する。
【００８３】
[00100]スレーブ側は、ＦＰＣＩ構成（ｃｏｎｆｉｇ）アクセスとＮＰＵ特権（ｐｒｉｖ）アクセスを処理する。一般に、ドライバは、レジスタアクセスを初期化中および割込処理中にのみ実行することによって、通常動作時のレジスタアクセスを避けることが好ましい。通常動作時のＮＰＵ構成は、抽象プッシュバッファ（ＰＢ）コマンドにより実装できる。この方式は、ドライバの前方互換性および後方互換性を促進し、ハードウェアに対するありがちな誤操作を防ぐ。
【００８４】
[00101]ＦＰＣＩ  ｃｏｎｆｉｇ書き込みおよび読み出し動作は、ＦＰＣＩクロックドメイン内のＦＰＣＩブロック４５３の内部で処理される。これらの動作により、標準ＰＣＩ  ｃｏｎｆｉｇレジスタ５１５と、ｉｓｏ／ｎｉｓｏサブＩＤ、電力管理などの追跡を行う他のレジスタ（図示せず）とが操作される。
【００８５】
[00102]すべてのＣＰＵレジスタアクセスがＦＥ  ４５０をパススルーする。具体的には、ＮＰＵ  ｐｒｉｖアクセスは、一般に、ＮＰＵメモリ空間アクセスを意味する。ＣＰＵからの、これらのメモリ空間アクセスは「ポスト」される。すなわち、それらのアクセスは、ＣＰＵから指示された後、ＣＰＵによって関知されない。
【００８６】
[00103]一実施形態では、ＮＰＵ  ｐｒｉｖアクセスは３２ビットである（ＦＰＣＩ  ｓｚ＝０）。ＮＰＵ  ｐｒｉｖアドレスは、以下の１６個の関連ビットを有する。
ａｄｄｒ［３１：１６］＝＝０（予約）
ａｄｄｒ［１５：１２］＝＝サブユニット
０＝＝フロントエンド（ＦＥ）
１＝＝ＨｏｓｔＭａｃ（ＨＭ）
２＝＝ＭＡＣインターフェース（ＭＩ）
３＝＝シーケンスプロセッサ（ＳＰ）
５＝＝アドレス変換（ＡＴ）
ａｄｄｒ［１１：０］＝＝サブユニット内のバイトアドレス
【００８７】
[00104]各サブユニットにはさらに、ＦＥ  ｐｒｉｖブロックを有する８ビットＮＰＵインターフェースがあるため、各読み出しは６サイクル（２つの８ビットアドレスサイクルと４つの８ビットデータサイクル）を要する。各書き込みまたは読み出しには、４つのバイトイネーブル（ＢＥ）ビットが関連付けられている。４ビットのＢＥは、第１のアドレスサイクルの上位４ビットを占める。転送順序は、ビッグエンディアンである（すなわち、左から右に読み出す）。区画内の領域とルーティング輻輳を減らすために、８ビットインターフェースを選択した。サブユニットの名前をｘｘとして、スレーブインターフェースの名前をｆｅ２ｘｘ＿ｓｌｖ、ｒｄａｔインターフェースの名前をｘｘ２ｆｅ＿ｓｌｖ＿ｒｄａｔとする。ｃｍｄ［０］は、読み出し（０）または書き込み（１）を表す。アドレスはダブルワードアラインメントである。
インターフェースインスタンスは以下のとおりである。
ｆｅ２ｈｍ＿ｓｌｖ  −  ＨＭサブユニットへ
ｆｅ２ｍｉ＿ｓｌｖ  −  ＭＩサブユニットへ
ｆｅ２ｓｐ＿ｓｌｖ  −  ＳＰサブユニットへ
ｆｅ２ａｔ＿ｓｌｖ  −  ＡＴサブユニットへ
ｈｍ２ｆｅ＿ｓｌｖ＿ｒｄａｔ  −  ＨＭからの戻りデータの読み出し
ｍｉ２ｆｅ＿ｓｌｖ＿ｒｄａｔ  −  ＭＩからの戻りデータの読み出し
ｓｐ２ｆｅ＿ｓｌｖ＿ｒｄａｔ  −  ＳＰからの戻りデータの読み出し
ａｔ２ｆｅ＿ｓｌｖ＿ｒｄａｔ  −  ＡＴからの戻りデータの読み出し
【００８８】
[00105]ｐｒｉｖアクセスは、非同期ＦＩＦＯを一通り経由して、すべてのＮＰＵレジスタが存在するＮＰＵクロックドメインに伝達される。読み出し要求は、読み出しデータが返るまで即時再試行される。これにより、ＦＰＣＩバス上での他のトランザクションの進展が可能になる。非同期ＦＩＦＯが満杯の場合は、書き込み要求も、ＦＩＦＯが１エントリを排出するまで再試行される。
【００８９】
[00106]ｐｒｉｖアクセスがＮＰＵクロックドメインに正常に到達すると、ＦＥが、ｐｒｉｖアクセスの上位アドレスビット［１５：１２］をデコードして所有サブユニットを識別し、適切なインターフェース（例えば、ｆｅ２ｘｘ＿ｓｌｖ）を経由してｐｒｉｖアクセスを送る。読み出しデータは、別のインターフェース（例えば、ｘｘ２ｆｅ＿ｓｌｖ＿ｒｄａｔ）に返され、１エントリ非同期ＦＩＦＯを経由してＦＰＣＩクロックドメインに渡され、ＦＰＣＩが次に読み出しを再試行したときに返される。
【００９０】
[00107]一実施形態では、ＦＥ  ４５０は、３組のレジスタ４５５、すなわち、１）割込レジスタ、２）メモリアービタパフォーマンスレジスタ、および３）ＰＢレジスタを有する。
【００９１】
[00108]ＮＰＵを構成するためにＰＢレジスタを用いる。ＰＢレジスタは、ＳＷ２ＦＥＰＢＢＡＳＥ、ＳＷ２ＦＥＰＢＭＡＸ、ＳＷ２ＦＥＰＢＰＵＴ、およびＳＷ２ＦＥＰＢＧＥＴとして識別される。ソフトウェアが新しいコマンドをＰＢレジスタに追加すると、ＰＢレジスタがＳＷ２ＦＥＰＢＰＵＴレジスタを押し出し、これによって、エンジン４５２がＰＢレジスタ内でコマンドの処理を開始するようトリガされる。
【００９２】
[00109]以下、各種「ＳＷ→ＦＥ」ＰＢコマンドについて説明する。「ｃｍｄ」はコマンドダブルワードを表し、「ｄａｔａ０、ｄａｔａ１、．．．」はデータダブルワードを表すものとする。特権およびコマンドエンジン４５２は、以下のコマンドを実行するために、内部ｐｒｉｖ書き込み／読み出し、またはメモリアービタトランザクションの実行が必要になる場合がある。
ＮＯＰ（無動作）
ｃｍｄ［３１：２４］＝＝０
ｃｍｄ［２３：０］  ＝＝０（予約）
何もしない。
ルーティング段階の設定
ｃｍｄ［３１：２４］＝＝３
ｃｍｄ［２３：２２］＝＝状態＝オフ（０）、オン（１）、パススルー（２）、または一時停止中（３）
ｃｍｄ［２１：０］  ＝＝０（予約）
状態がオフの場合は、新しい入力フレームや保留中の入力フレームがすべて廃棄される。このコマンドは、ＮＰＵルーティングパイプラインがアイドル状態になるまで、ＰＢから廃棄されない。ルーティングパイプライン内のフレームはすべて、正常にルーティングされる。
状態がオンの場合は、ＮＰＵルーティングパイプラインが有効になり、すべてのルーティング機能が有効になる。保留中のフレームはすべて、ルーティングのためにパイプラインに注入される。このコマンドはすぐに廃棄される。
状態がパススルーの場合は、すべての入力フレームがパススルーモードでＮＰＵパイプラインに注入される。これは、それらのフレームが何も操作されずにパイプラインを通り抜け、処理のためにホストに送られることを意味する。このコマンドはすぐに廃棄される。
状態が一時停止中の場合は、ＮＰＵパイプラインが一時停止中とマーキングされるが、入力フレームは廃棄されずに待ち行列に入る。このコマンドは、ＮＰＵパイプラインがアイドル状態になるまで廃棄されない。
テーブルの更新
ｃｍｄ［３１：２４］＝＝４
ｃｍｄ［２３：２２］＝＝どれ＝＝ＦＣ（０）、ＳＰ（１）、またはＡＴ（２）サブユニットルックアップテーブル
ｃｍｄ［２１：０］  ＝＝０（予約）
ｄａｔａ０＝＝ｐｈｙｓ＿ａｄｄｒ
ｄａｔａ１＝＝ｍａｘ
ｄａｔａ２＝＝ｃｂａｓｅ
ｄａｔａ３＝＝ｃｍａｘ
このコマンドは、現在のルーティング状態がオンの場合にトラップされる。通常、ＳＷは、このコマンドの前にルーティング状態を「一時停止中」に変更し、このコマンドの後にルーティング状態をオンに戻す。
各ルーティングサブユニット（例えば、ＦＥ、ＳＰ、ＡＴなど）は単一の集合体ルックアップテーブルを有することができるが、これは本発明の制限ではない。したがって、「どれ」は、どのルックアップテーブルが再書き込みされるかを示す。「ｐｈｙｓ  ａｄｄｒ」は、ルックアップテーブルの開始物理バイトアドレスをポイントする。ルックアップテーブルの全長は「ｍａｘ＋１」バイトである。ルックアップテーブルの最初の「ｃｍａｘ＋１」（≦ｍａｘ＋１）バイトが、メモリアービタＤＭＡ読み出しコマンドにより、論理キャッシュアドレスｃｂａｓｅで始まるキャッシュＳＳＲＡＭにコピーされる。サブユニットのｍｂａｓｅレジスタは、ｐｈｙｓ＿ａｄｄｒ＋ｃｍａｘ＋１に設定される。サブユニットのｍｍａｘレジスタは、ｍａｘ−ｃｍａｘ−ｌに設定される。このコマンドは、それらすべての更新が実行されるまで廃棄されず、ＦＥは、所定の数のｍｓｔｒ２ｐｂ＿ｒｄａｔダミーサイクルが返されるのを待つ（ｐｂ２ｍｓｔｒ  ＤＭＡ読み出しコマンドが発行されるごとに１つ）。
【００９３】
[00110]メモリアービタ４５１は、「マスタ」側のプロセスを実行する。具体的には、ＦＥメモリアービタは、大まかに次の３つの機能を実行する。（１）ＮＰＵ内の様々なサブユニットの中でソフトウェアが擬似静的に分割した共用キャッシュＳＳＲＡＭを管理する。（２）ＮＰＵ内のサブユニット（すなわち、ＦＰＣＩマスタとして動作するＦＥ）からのシステムメモリ要求を処理する。（３）キャッシュＳＳＲＡＭとシステムメモリとの間のダイレクトメモリアクセス（ＤＭＡ）を実行する。
【００９４】
[00111]一実施形態では、キャッシュＳＳＲＡＭの共用プールは論理的に連続であり、３２ビット幅である。これは、正当なバイトアドレス０．．．ＮＰＵ＿ＣＭＡＸを有する。ＮＰＵ＿ＣＭＡＸ＿ＬＧ２は、ｌｏｇ２（ＮＰＵ＿ＣＬＥＮ＿ＭＡＸ＋１）であり、アドレス幅を構築するために用いることができる。
【００９５】
[00112]第１に、メモリアービタ４５１は、異なる複数の要求側（例えば、様々なサブユニット）の間でのロードバランシングおよび同時実行を達成するために、キャッシュＳＳＲＡＭを複数のバンクに分割する。キャッシュＳＳＲＡＭの論理アドレス空間は、実際には、複数のＳＳＲＡＭバンクにわたってストライピングされる。これにより、配置／ルーティングに関するＳＳＲＡＭのアスペクト比が改善され、ロードバランシングが実現され、メモリアービタ４５１が複数の要求を同時にサービスすることが可能になる。一例では、メモリアービタ４５１は、最適なバンク数およびＳＳＲＡＭのアスペクト比を決定するために解析を実行する。
【００９６】
[00113]各サブユニットは、キャッシュＳＳＲＡＭにキャッシングできるデータの種類ごとにＣＢＡＳＥおよびＣＭＡＸレジスタを有することに注意されたい。同様に、各サブユニットは、システムメモリにおいてアクセスするデータの種類ごとにＭＢＡＳＥおよびＭＭＡＸレジスタを有する。ソフトウェアは、これらのレジスタをセットアップし、異なるサブユニットがコリジョンを起こさないようにする。
【００９７】
[00114]第２に、メモリアービタ４５１は、ＮＰＵ内のサブユニットによるシステムメモリ要求を処理する。一実施形態では、各サブユニット（モジュール）４２０〜４４０は、メモリアービタへの３２ビットパスを有する。この方式により、サブユニット（モジュール）４２０〜４４０が複雑なバッファ管理を実行する必要がなくなり、これらのモジュールの実装が簡略化される。
【００９８】
[00115]例えば、要求側サブユニットの名前をｘｘとして、要求インターフェースの名前をｘｘ２ｆｅ＿ｒｎｓｔｒ、ｒｄａｔインターフェースの名前をｆｅ２ｘｘ＿ｍｓｔｒ＿ｒｄａｔとする。ｃｍｄ［０］は、読み出し（０）または書き込み（１）を表す。ｃｍｄ［０］は、キャッシュＳＳＲＡＭ（１）またはシステムメモリ（０）のアドレスを表す。アドレスはダブルワードアラインメントである。「ｓｚ」は０〜６３（１〜６４ダブルワード）でありうる。一実施形態では、ＦＥは、１６ＤＷキャッシュライン境界において要求を分割する。したがって、余分な分割を避けるために、要求を１６ＤＷ境界上に並べるのが有利である。サブユニットは、必要に応じて、サブストリームごとに異なるサブＩＤを供給できる。サブＩＤの値は、そのサブユニットに対してローカルであり、サブユニットごとに０から始まる番号が付けられる。このインターフェースにはＢＥはない。
【００９９】
[00116]第３に、メモリアービタ４５１は、キャッシュＳＳＲＡＭとシステムメモリとの間のＤＭＡを管理する。具体的には、ｃｍｄ［２］が、キャッシュＳＳＲＡＭとシステムメモリとの間のＤＭＡを実行するかどうかを指定する（０＝ＤＭＡなし、１＝ＤＭＡ）。ＤＭＡが実行されると、２つのアドレスサイクルが「ａｄ」上で渡される。第１のアドレスはシステムメモリアドレス（ｃｍｄ［１］＝＝０）であり、第２のアドレスはキャッシュＳＳＲＡＭアドレスである（ｃｍｄ［１］＝＝１）。書き込み（ｃｍｄ［０］＝１）は、データがキャッシュＳＡＲＡＭアドレスからシステムメモリアドレスにダイレクトメモリアクセスされることを意味する。書き込み（ｃｍｄ［０］＝０）は、データがシステムメモリアドレスからキャッシュＳＡＲＡＭアドレスにダイレクトメモリアクセスされることを意味する。ＤＭＡ読み出しは、通常の読み出しと同様にパイプライン化できる。ＤＭＡ読み出しが完了し、すべてのデータがキャッシュＳＳＲＡＭに収容されると、メモリアービタ４５１が、オリジナルのサブＩＤとダミーデータで単一のｆｅ２ｘｘ＿ｍｓｔｒ＿ｒｄａｔサイクルをアサートする。要求側のサブユニットは、これらのダミーｒｄａｔサイクルの間、待機すれば、未処理のＤＭＡがいつ完了したかを知ることができる。
インターフェースインスタンス：
ｐｂ２ｍｓｔｒ  ＦＥサブユニットから（プッシュバッファエンジンの場合は内部）
ｈｍ２ｆｅ＿ｍｓｔｒ            −  ＨＭサブユニットから
ｍｉ２ｆｅ＿ｍｓｔｒ            −  ＭＩサブユニットから
ｓｐ２ｆｅ＿ｍｓｔｒ            −  ＳＰサブユニットから
ａｔ２ｆｅ＿ｍｓｆｒ            −  ＡＴサブユニットから
ｍｓｔｒ２ｐｂ＿ｒｄａｔ        −  ＰＢエンジンへの読み出しの戻りデータ
ｆｅ２ｈｍ＿ｍｓｔｒ＿ｒｄａｔ  −  ＨＭへの読み出しの戻りデータ
ｆｅ２ｍｉ＿ｍｓｔｒ＿ｒｄａｔ  −  ＭＩへの読み出しの戻りデータ
ｆｅ２ｓｐ＿ｍｓｔｒ＿ｒｄａｔ  −  ＳＰへの読み出しの戻りデータ
ｆｅ２ａｔ＿ｍｓｔｒ＿ｒｄａｔ  −  ＡＴへの読み出しの戻りデータ
【０１００】
[00117]ＦＥはまた、前に注入されたすべてのコマンドがアービトレーション用として受け入れられていることを示すために、各インターフェースにｆｅ２ｘｘ＿ｍｓｔｒ＿ｑｅｍｐｔｙ信号をエクスポートする。ｆｅ２ｘｘ＿ｍｓｔｒ＿ｑｅｍｐｔｙは、キャッシュ／メモリへの先行書き込みの後にＣＰＵにポストされなければならない、ＦＥへの割込を、サブユニットがアサートする必要がある場合に用いることができる。
【０１０１】
[00118]一般に、異なる複数の要求側からのトランザクションの間、あるいは同じ要求側からのｉｓｏトランザクションと非ｉｓｏトランザクションの間に暗黙の順序は存在しない。「ｉｓｏ」（等時性）は、「同じレートで」という意味であることに注意されたい。すなわち、ＮＰＵがＦＰＣＩ＋ＬＤＴを介してシステムメモリの等時性読み出しを行う場合、その読み出しは、あらかじめ計算された特定の待ち時間および帯域幅が保証される。ただし、一実施形態では、特定の要求側のｉｓｏまたは非ｉｓｏトランザクションに対して、アドレスの競合に以下の規則が適用される場合がある。
書き込みが順序付けされる
読み出しが順序付けされる
読み出し応答データが順序どおりに返される
読み出しは書き込みをバイパスできない
書き込みは読み出しをバイパスできる
【０１０２】
[00119]さらに、非ｉｓｏ読み出し戻りデータはＣＰＵをバイパスしない。ＦＥは、ＭＥＭ空間（ｐｒｉｖ）アクセスのために書き込みをポストする。これは、ＦＥの特権およびコマンドエンジン４５２とメモリアービタ４５１との間に相互依存がないことを意味する。
【０１０３】
[00120]メモリアービタ４５１は、スピルバッファへの書き込みの制御も行う。この機能は、フレームのドロップを避けるために、優先度が非常に高い。
【０１０４】
[00121]図５に示すように、メモリアービタ４５１は、グローバルキャッシュＳＳＲＡＭ  ４５０ａへのアクセスを制御する。一実施形態では、アービトレーションストラテジは、スピルバッファ書き込みを除き、「ラウンドロビン」である。ラウンドロビンは、固定された循環順序でプロセスをアクティブ化するスケジュール方法である。何らかのイベント（例えば、子プロセスまたは入出力動作の終了）を待っているために先に進めないプロセスは、単純に制御をスケジューラに返す。ラウンドロビンスケジューリングの特長は、プロセスが待っているもの、あるいは待っているものが起こったことを通知する方法を、プロセス自身が知っていればよいという単純さである。
【０１０５】
[00122]図６は、本発明のＭＡＣインターフェース（ＭＩ）サブユニット（モジュール）４２０のブロック図である。ＮＰＵパイプライン内のＭＩモジュールは、各ＭＡＣとＮＰＵとの間の非同期境界として動作する。
【０１０６】
[00123]ＭＡＣレイヤ４１０内の各ＭＡＣとＮＰＵとの間の非同期境界は、ＭＩ内に存在する。各インターフェースは、境界にまたがる待ち時間をカバーするだけの深さを持つ非同期ＦＩＦＯ  ６１０を有する。
【０１０７】
[00124]クロックドメインは３つある。ｍｃｌｋ（ｍｉｉＭＡＣ）、ｄｃｌｋ（ｄｓｐＭＡＣ）、およびｎｃｌｋ（ＮＰＵ）である。境界の各側は、区画間タイミング規則に従う。
【０１０８】
[00125]ＭＩから見ると、すべてのｍｉｉＭＡＣが同じインターフェースを有する。ＤｓｐＭＡＣとＨｏｓｔＭＡＣ（ＨＭ）のインターフェースは、３２ビットデータパスを持つことと、サイドバンドインターフェースを持たないことを除き、同等である。以下、各種のＭＩインターフェースの定義を示し、さらに説明する。
「ＭＡＣ→ＮＰＵ」入力フレームデータインターフェース（ｍａｃ２ｎｐｕ）
ｎｐｕ２ｍａｃ＿ｂｕｓｙ            −  このサイクルではＮＰＵがビジー
ｍａｃ２ｎｐｕ＿ｒｅｑ              −  このサイクルではｍａｃ２ｎｐｕ＿ｄａｔａとｅｏｆが有効
ｍａｃ２ｎｐｕ＿ｄａｔａ［７：０］  −  ８ビットデータ（注意：ｄｓｐＭＡＣ／ｈｏｓｔＭＡＣの場合は３２ビット）
ｍａｃ２ｎｐｕ＿ｅｏｆ              −  エンドオブフレームマーカ
「ＮＰＵ→ＭＡＣ」出力フレームデータインターフェース（ｎｐｕ２ｍａｃ）
ｍａｃ２ｎｐｕ＿ｂｕｓｙ            −  このサイクルではＭＡＣがビジー
ｎｐｕ２ｍａｃ＿ｒｅｑ              −  このサイクルではｎｐｕ２ｍａｃ＿ｄａｔａとｅｏｆが有効
ｎｐｕ２ｍａｃ＿ｄａｔａ［７：０］  −  ８ビットデータ（注意：ｄｓｐＭＡＣ／ｈｏｓｔＭＡＣの場合は３２ビット）
ｎｐｕ２ｍａｃ＿ｅｏｆ              −  エンドオブフレームマーカ
「ＮＰＵ→ＭＡＣ」サイドバンドインターフェース（ｎｐｕ２ｍａｃ＿ｓｂ。ｈｏｓｔＭＡＣの場合は存在せず）
ｍａｃ２ｎｐｕ＿ｓｂ＿ｂｕｓｙ            −  このサイクルではＭＡＣがビジー
ｎｐｕ２ｍａｃ＿ｓｂ＿ｒｅｑ              −  このサイクルではｎｐｕ２ｍａｃ＿ｓｂ＿ｄａｔａが有効
ｎｐｕ２ｍａｃ＿ｓｂ＿ｄａｔａ［７：０］  −  ８ビットサイドバンド制御情報
ｓｂ［３：０］＝＝０                      −  ｐｒｉｖ書き込み（このサイクルの後に１バイトのダブルワードアドレスと４バイトのデータが続く）
ｓｂ［７：４］＝＝ｂｅ                    −  （コマンドサイクルの間のバイトイネーブル）
ｓｂ［３：０］＝＝１                      −  ｐｒｉｖ読み出し（このサイクルの後に１バイトのダブルワードアドレスが続く。読み出し応答がｍａｃ２ｎｐｕ＿ｓｂ経由で返される）
ｓｂ［７：４］＝＝ｂｅ                    −  （コマンドサイクルの間のバイトイネーブル）
ｓｂ［３：０］＝＝２                      −  ＭＡＣを一時停止する（入力ＦＩＦＯが最高水位を横切ると送られる）
ｓｂ［３：０］＝＝３                      −  ＭＡＣを再開する（入力ＦＩＦＯが最低水位を横切ると送られる）
「ＭＡＣ→ＮＰＵ」サイドバンドインターフェース（ｍａｃ２ｎｐｕ＿ｓｂ。ｈｏｓｔＭＡＣの場合は存在せず）
ｎｐｕ２ｍａｃ＿ｓｂ＿ｂｕｓｙ            −  このサイクルではＮＰＵがビジー
ｍａｃ２ｎｐｕ＿ｓｂ＿ｒｅｑ              −  このサイクルではｍａｃ２ｎｐｕ＿ｓｂ＿ｄａｔａが有効
ｍａｃ２ｎｐｕ＿ｓｂ＿ｄａｔａ［７：０］  −  ８ビットサイドバンド制御情報
ｓｂ［３：０］＝＝０                      −  ｐｒｉｖ読み出し応答（このサイクルの後に４バイトのデータが続く）
ｓｂ［３：０］＝＝１                      −  ＲＸフレームをコミット（０バイトが続く）
ｓｂ［３：０］＝＝２                      −  ＲＸフレームを拒否（０バイトが続く）
ｓｂ［７：４］＝＝ＲＸステータス：            ０＝＝コリジョンが検出された
１＝＝レイトコリジョンが検出された
２＝＝短すぎるフレーム（そのメディアにおける最低限より短いフレーム）
３＝＝長すぎるフレーム（ＭＴＵサイズより大きい）
４＝＝ｍａｃ２ｎｐｕオーバーフロー（長すぎるバックアップ）
５＝＝ＣＲＣが不一致
ｓｂ［３：０］＝＝３                      −  ＴＸフレームをコミット（０バイトが続く）
ｓｂ［３：０］＝＝４                      −  ＴＸフレームを拒否（０バイトが続く）
ｓｂ［７：４］＝＝ＴＸステータス：            ０＝＝コリジョンが検出された
１＝＝レイトコリジョンが検出された
【０１０９】
[00126]フレームは、ＭＡＣからＭＩサブユニットを介して受け取られ、処理のためにＮＰＵパイプラインに渡される。各ＭＡＣは、「ｍａｃ２ｎｐｕインターフェース」経由でデータをＭＩに送る。これは前述のように非同期である。「ｍａｃ２ｎｐｕ＿ｓｂ」サイドバンドインターフェースは、フレームの受け取りには用いられない。ｎｐｕ２ｍａｃ＿ｓｂサイドバンドインターフェースは、フロー制御を送信側に戻すことをＭＡＣがアサートできる場合に、入力ＦＩＦＯのオーバーフローを避けるための、一時停止／再開フロー制御メッセージの送信に用いられる。
【０１１０】
[00127]例えば、ハードＭＡＣがフレームを送信しようとする場合、ハードＭＡＣは、最初に、渡そうとするフレームの種類を示す１バイトのｍａｃ２ｎｐｕ＿ｄａｔａを渡す。
ｄａｔａ［７：４］＝＝０（予約）
ｄａｔａ［３：３］＝＝ｈａｓ＿８０２．１ｐ
ｄａｔａ［２：０］＝＝ｐｒｏｔｏ２（レベル２プロトコル＝＝イーサネットフレームフォーマット）
０＝＝８０２．３／ＳＮＡＰ
１＝＝Ｅｔｈｅｒｎｅｔ  ＩＩ
２＝＝管理フレーム（パススルーされる）
【０１１１】
[00128]このヘッダバイトの後に続くデータバイト（任意のバブルを有することが可能）が、フレームそのものをビッグエンディアンの順序で含む。フレームの最後のバイトはｍａｃ２ｎｐｕ＿ｅｏｆ＝＝１を有する。
【０１１２】
[00129]ＭＩは、ヘッダバイトをレジスタに格納し、それから、フレームを１ダブルワードずつ収集し、それらをＭＡＣの入力ＦＩＦＯ  ６１０（後で詳述）に推論的に配置する。例えば、ＭＡＣは、ｅｏｆバイトの後に、以下のような、フレームのコミットステータスを示すステータスバイトを「ｍａｃ２ｎｐｕ」経由で送る（「ｍａｃ２ｎｐｕ」はフレームと同期している）。
ｓｂ［３：０］＝＝０＝＝ＲＸフレームをコミット（０バイトが続く）
ｓｂ［３：０］＝＝１＝＝ＲＸフレームを拒否（０バイトが続く）
ｓｂ［７：４］＝＝ＲＸステータス：０＝＝コリジョンが検出された
１＝＝レイトコリジョンが検出された
２＝＝短すぎるフレーム（突然終了したフレーム）
３＝＝長すぎるフレーム（ＭＴＵサイズより大きい）
４＝＝ｍａｃ２ｎｐｕオーバーフロー（長すぎるバックアップ）
５＝＝ＣＲＣが不一致
【０１１３】
[00130]ｈｏｓｔＭＡＣおよびｄｓｐＭＡＣ入力フレームの場合、「ｍａｃ２ｎｐｕ＿ｄａｔａ」はダブルワード幅である。ＭＡＣは、ヘッダバイトではなく、標準フレームヘッダ（ＣＦＨ）を渡す。ＨＭは、ｅｏｆダブルワードの後にはステータスダブルワードを送らない。すべてのＨＭフレームがＨＭによって暗黙的にコミットされる。ＭＩは、ＨＭが明示的な「コミットフレーム」を発行したように見せるだけである。
【０１１４】
[00131]より具体的には、現在のＮＰＵがイーサネットフレームフォーマットをサポートする。動作時には、ＭＩ入力処理によって、通常フレームのイーサネットヘッダが削除されるが、ローフレームおよび管理フレームのイーサネットヘッダは残される。各サブユニットでヘッダ情報が再解析されないようにするために、各フレームの先頭に４ダブルワード（必要に応じて２ダブルワード）の標準フレームヘッダ（ＣＦＨ）が配置される。ＣＦＨは、以下のフレームとともに、標準フレーム（ＣＦ）を構成する。ＣＦＨのレイアウトは次のとおりである（ＬＳＢからＭＳＢの順で示す）。
ｃｆｈ０［３１］＝＝ｈａｓ＿ｃｆｈ１：ｈａｓ  ＣＦＨダブルワード１（現時点では常に０）
ｃｆｈ０［３０：２７］＝＝ｐａｓｓｔｈｒｏｕｇｈ＿ａｆｔｅｒ：この機能の後はパススルーする
０＝＝ＳＰカプセル化解除
１＝＝ＳＰ暗号化解除
２＝＝ＳＰ再アセンブリ
３＝＝ＳＰ圧縮解除
５＝＝ＡＴ入力ＮＡＴ
６＝＝ＡＴルーティング
７＝＝ＡＴ出力ＮＡＴ
８＝＝ＳＰ圧縮
９＝＝ＳＰ断片化
ａ＝＝ＳＰ暗号化
ｂ＝＝ＳＰカプセル化
ｆ＝＝ＭＩ出力
ｃｆｈ０［２６：２３］＝＝ｐａｓｓｔｈｒｏｕｇｈ＿ｂｅｆｏｒｅ：この機能の前はパススルーする
０＝＝ＳＰカプセル化解除
１＝＝ＳＰ暗号化解除
２＝＝ＳＰ再アセンブリ
３＝＝ＳＰ圧縮解除
５＝＝ＡＴ入力ＮＡＴ
６＝＝ＡＴルーティング
７＝＝ＡＴ出力ＮＡＴ
８＝＝ＳＰ圧縮
９＝＝ＳＰ断片化
ａ＝＝ＳＰ暗号化
ｂ＝＝ＳＰカプセル化
ｆ＝＝ＭＩ出力
ｃｆｈ０［２２］      ＝＝０（予約）
ｃｆｈ０［２１：１９］＝＝出力ＦＩＦＯインデックス（ｏｕｔｐｕｔ＿ｍａｃの場合）
ｃｆｈ０［１８：１６］＝＝ｏｕｔｐｕｔ＿ｍａｃ：ＭＡＣインデックスを出力する
ｃｆｈ０［１５：１２］＝＝ｐｒｏｔｏ４（ＩＰより高レベルのプロトコル。ＳＰ入力およびＳＰ出力によって埋められる）
０＝＝不明
１＝＝ＩＣＭＰ
２＝＝ＴＣＰ
３＝＝ＵＤＰ
４＝＝ＥＳＰ（セキュリティペイロードをカプセル化する）
５＝＝ＡＨ（認証ヘッダ）
ｃｆｈ０［１１：９］  ＝＝ｐｒｏｔｏ３（レベル３プロトコル。ＭＩ入力およびＳＰ出力によって埋められる）
０＝＝不明
１＝＝ＩＰｖ４
２＝＝ＩＰｖ６
３＝＝ＡＲＰ
４＝＝ＰＰＰ
５＝＝ＰＰＰｏＥ
ｃｆｈ０［８：６］    ＝＝ｐｒｉｏ：８０２．１ｐ優先ビット（出力で用いることができない）
ｃｔｈ０［５：３］    ＝＝ｐｒｏｔｏ２（レベル２プロトコル＝＝フレームフォーマット）
０＝＝フレームヘッダなし（削除される−入力の場合は正常）
１＝＝８０２．３／ＳＮＡＰ
２＝＝８０２．３／ＳＮＡＰおよび８０２．１ｐ  ｐｒｉｏ
３＝＝Ｅｔｈｅｒｎｅｔ  ＩＩ
４＝＝Ｅｔｈｅｒｎｅｔ  ＩＩおよび８０２．１ｐ  ｐｒｉｏ
７＝＝ロー管理（常にパススルー）
ｃｆｈ０［２：０］    ＝＝ｉｎｐｕｔ＿ｍａｃ：ＭＡＣインデックスを入力する（パススルーフレームの場合にｈｏｓｔ／ＤＳＰで必要）
【０１１５】
[00132]ＭＩ出力がフレームヘッダのないＣＦを受け取った場合、ＭＩ出力は、そのｏｕｔｐｕｔ＿ｍａｃにふさわしいフレームの種類を追加する。ＭＩ入力は、ｐａｓｓｔｈｒｏｕｇｈ＿ｂｅｆｏｒｅ＝ＭＩ  ｏｕｔｐｕｔと設定することにより、フレームを完全にパススルーするようにマーキングできる。これが行われると、各サブユニットはｐａｓｓｔｈｒｏｕｇｈ＿ｂｅｆｏｒｅがヒットするまで処理を開始しないので、ｐａｓｓｔｈｒｏｕｇｈ＿ａｆｔｅｒは完全に意味がなくなる。ＭＩ入力およびＭＩ出力は常に実行されるが、それらはパススルーフレームに関しては何もしない。ＭＩ入力は、ｐａｓｓｔｈｒｏｕｇｈ＿ｂｅｆｏｒｅ＝０およびｐａｓｓｔｈｒｏｕｇｈ＿ａｆｔｅｒ＝０ｘｆと設定することにより、フレームを絶対にパススルーしないようにマーキングできる。
【０１１６】
[00133]前述のように、各ＭＡＣは入力ＦＩＦＯ  ６１０を有する。一実施形態では、ＦＩＦＯ空間６１０ａの一部がグローバルキャッシュＳＳＲＡＭに存在し、他の部分がシステムメモリ６１０ｂに存在する。各入力ＦＩＦＯは以下の属性を有する。
１）キャッシュＳＳＲＡＭの基本と最大（ＭＩＩＣＢＡＳＥ［０−７］およびＭＩＩＣＭＡＸ［０−７］）
キャッシュＳＳＲＡＭの基本バイトオフセットおよび最大オフセットは、各入力ＦＩＦＯで占められる。これらのレジスタはラッチＲＡＭで保持される。
２）システムメモリの基本と最大（ＭＩＩＭＢＡＳＥ［０−７］およびＭＩＩＭＭＡＸ［０−７］）
システムメモリの基本バイトオフセットおよび最大オフセットは、各入力ＦＩＦＯで占められる。これらのレジスタはラッチＲＡＭで保持される。
３）コミッテッドプットポインタ
コミッテッドプットポインタは、コミットされたフレームを最後に通過したポインタである。
４）推論的プットポインタ
推論的プットポインタは、新しいダブルワードが書き込まれる、次のＦＩＦＯ位置へのポインタである。ＭＡＣによってフレーム全体が書き込まれ、コミットされると、コミッテッドプットポインタが、推論的プットポインタに設定される。
５）ゲットポインタ
ゲットポインタは、読み出される、次のＦＩＦＯ位置へのポインタである。
６）最高水位標および最低水位標（ＭＩＩＨＩＷＡＴ［０−７］およびＭＩＩＬＯＷＡＴ［０−７］）
ＦＩＦＯのサイズが最高水位標の上を横切ると、ＭＩは、可能な場合、フロー制御を送信側に戻すことをアサートするようＭＡＣに指示するために、ｎｐｕ２ｍａｃ＿ｓｂ経由で一時停止コマンドを送る。ＦＩＦＯのサイズが最低水位標の下を横切ると、ＭＩは、送信側の送信再開を許可するようＭＡＣに指示するために、ｎｐｕ２ｍａｃ＿ｓｂ経由で再開コマンドを送る。入力ＦＩＦＯが満杯の場合、ＭＩは、最後の手段として、フレームデータを廃棄せずに、ｍａｃ２ｎｐｕ経由でフロー制御をアサートする。ｍａｃ２ｎｐｕがバックアップされたためにＭＡＣがフレームを失った場合、ＭＡＣは、ｍａｃ２ｎｐｕがオーバーフローしたことにより、そのフレームを拒否する。一部のＭＡＣ（特に擬似ＭＡＣ）は、この種の、ナノ秒単位までのフロー制御を処理できる（あるいは求める）場合がある。したがって、ＭＩは、フレームを拒否するという形でＭＡＣに制御を渡す。
【０１１７】
[00134]一般に、入力ＦＩＦＯ  ６１０は、フレームがシステムメモリ６１０ｂに行かないように、フレームをキャッシュＳＳＲＡＭ  ６１０ａに格納しようとする。したがって、すべての入力ＦＩＦＯ書き込みが等時性である。それらの書き込みは、データのドロップを防ぐために、システムにおいて最優先である。
【０１１８】
[00135]図７は、ＭＡＣからの入力フレームの、ＭＩによる処理の方法７００のフローチャートである。方法７００は、ステップ７０５から始まり、ステップ７１０に進む。
【０１１９】
[00136]ステップ７１０で、ＭＩは、ＭＡＣが、例えば「ｍａｃ２ｎｐｕ」経由で、１ダブルワードのデータを蓄積するのを待つか、ＭＡＣが「ｍａｃ２ｎｐｕ」経由でフレームをコミット／拒否するのを待つ。複数のＭＡＣがそれらのいずれかの保留状態にある場合は、「ラウンドロビン」ストラテジに従って１つのＭＡＣを選択する。これは、ＭＩが、サイクルごとに１つのＭＡＣに対して動作することを意味する。したがって、この方法では、各ＭＡＣの情報をラッチＲＡＭに格納して領域を節約し、現在のサイクルにおいてサービスされている特定のＭＡＣの情報を読み出す。
【０１２０】
[00137]方法７００は、ＭＡＣの入力ＦＩＦＯが満杯の場合（フレームの先頭では、「満杯−１」の場合）にはＭＡＣを考慮しないことに注意されたい。その代わりに方法７００は、その入力ＦＩＦＯが満杯でなくなるまで、「ｍａｃ２ｎｐｕ」に対するフロー制御をアサートする（すなわち、ｎｐｕ２ｍａｃ＿ｂｕｓｙ＝＝１と設定する）。
【０１２１】
[00138]ステップ７２０で、方法７００は、新しいデータダブルワードが、関係のあるデータダブルワードかどうかを照会する。例えば、このＭＡＣがローモードでなく（ＭＩＭＡＣＣＴＬ  ＲＡＷ＿ＭＯＤＥビットがクリア）、これが管理フレームでなく、このダブルワードがイーサネットヘッダ内にあって、このダブルワードがＨＭ  ＣＦＨでない場合、方法７００は、このデータダブルワードをステップ７２５で廃棄し、ステップ７１０に戻る。
【０１２２】
[00139]また、照会に対して肯定応答が行われた場合、方法７００はステップ７３０に進み、そのダブルワードが入力ＦＩＦＯ  ６１０に格納される。さらに、それがフレームの第１のダブルワードである場合、方法７００は、８０２．１ｐ優先ビットおよびフレームダブルワードカウントを格納するために余分のダブルワードを確保する。この特殊なダブルワードは、後でｅｏｆが発生したときに書き込まれる。方法７００は、この特殊なダブルワード位置のＦＩＦＯ位置を一時変数で記録する（２つのコミットされないフレームのそれぞれに対して１つのコピー）。このダブルワードは入力ＦＩＦＯ  ６１０に書き込まれ、方法７００は、ステップ７４０で、推論的プットポインタをインクリメントする。
【０１２３】
[00140]ステップ７５０で、方法７００は、最高水位標（例えば、ＭＩＩＨＩＷＡＴ［０−７］）を超えているかどうかを照会する。この照会に対して肯定応答が行われた場合、方法７００はステップ７５５に進み、ｎｐｕ２ｍａｃ＿ｓｂ経由での一時停止コマンドをスケジュールする。ＭＡＣは、有効であれば、フレーム損失を防ぐために、送信側に対してフロー制御をアサートする。照会に対して否定応答が行われた場合、方法７００はステップ７６０に進む。
【０１２４】
[00141]ステップ７６０で、方法７００は、エンドオブフレームに到達したかどうか（例えば、ｍａｃ２ｎｐｕ＿ｅｏｆ＝＝１かどうか）を照会する。この照会に対して否定応答が行われた場合、方法７００はステップ７１０に進む。
【０１２５】
[00142]照会に対して肯定応答が行われた場合、方法７００はさらに、保存されている８０２．１ｐ優先ビットおよびフレームダブルワードカウントを、そのフレームダブルワードに先行する、あらかじめ予約されていた入力ＦＩＦＯ位置に書き込む。ダブルワードカウントは、ちょうど、現在の入力ＦＩＦＯポインタから、保存されている入力ＦＩＦＯポインタを引いたものである。８０２．１ｐ優先ビットは、特殊なダブルワードの［２：０］を占める。ダブルワードカウントは、特殊なダブルワードの［３１：１６］を占め、そのＭＡＣのＭＴＵを超えてはならない。その後、方法７００はステップ７７０に進む。
【０１２６】
[00143]ステップ７７０で、方法７００は、フレームが拒否されたかどうかを照会する。この照会に対して肯定応答が行われた場合、方法７００は、ステップ７７５でそのフレームを廃棄し、ステップ７１０に戻る。すなわち、推論的プットポインタをコミッテッドプットポインタに再設定することにより、入力ＦＩＦＯに入力されたばかりのフレームが廃棄される。照会に対して否定応答が行われた場合、方法７００はステップ７８０に進む。
【０１２７】
[00144]ステップ７８０で、方法７００は、入力ＦＩＦＯのコミッテッドプットポインタを推論的プットポインタに設定し、それによって、フレーム全体が処理のためにＮＰＵパイプラインに送られることをコミットする。その後、方法７００はステップ７１０に戻る。
【０１２８】
[00145]ＭＡＣの入力ＦＩＦＯでフレームがコミットされると、ＭＩは、並行して、多数の入力ＦＩＦＯの１つから、コミットされたフレームを、ＮＰＵパイプライン（すなわち、シーケンスプロセッサ）に送るために選択しなければならない。
【０１２９】
[00146]動作時に、ＭＩは、入力ＦＩＦＯのゲットポインタおよびコミッテッドプットポインタを調べて、コミットされたフレームが入力ＦＩＦＯにあるかどうかを判別する。ＭＩは、入力ＦＩＦＯデータがキャッシュＳＳＲＡＭにあるかシステムメモリにあるかにかかわらず、ラウンドロビンスケジューリングを用いて、次にサービスする入力ＦＩＦＯを選択する。あるいは、ＭＩは、フレーム全体が既にＳＳＲＡＭにある場合に限り、ＭＡＣを任意で考慮できる。
【０１３０】
[00147]図６に示すように、各出力ＭＡＣに対し、４つの出力ＦＩＦＯ  ６２０〜６２３がある。着信フレームのＣＦＨは、出力ＭＡＣインデックスと出力ＦＩＦＯインデックスを含む。出力ＦＩＦＯは、基本的に、入力ＦＩＦＯと同じように実装されるが、いくつかの追加属性がある。各出力ＦＩＦＯは以下の属性を有する。
１）キャッシュＳＳＲＡＭの基本と最大（ＭＩＯＣＢＡＳＥ［０−７］およびＭＩＯＣＭＡＸ［０−７］）
キャッシュＳＳＲＡＭの基本バイトオフセットおよび最大オフセットは、出力ＦＩＦＯの各組で占められる。これらのレジスタはラッチＲＡＭで保持される。ある１つのＭＡＣの出力ＦＩＦＯは、同じキャッシュＳＳＲＡＭを共用する。
２）システムメモリの基本と最大（ＭＩＯＭＢＡＳＥ［０−７］［０−３］およびＭＩＯＭＭＡＸ［０−７］［０−３］）
システムメモリの基本バイトオフセットおよび最大オフセットは、各出力ＦＩＦＯ（８ＭＡＣ×４出力ＦＩＦＯ）で占められる。これらのレジスタはラッチＲＡＭで保持される。
３）コミッテッドプットポインタ
コミッテッドプットポインタは、ＳＰからコミットされたフレームを最後に通過したポインタである。
４）推論的プットポインタ
推論的プットポインタは、ＳＰから新しいダブルワードが書き込まれる、次のＦＩＦＯ位置へのポインタである。ＭＩによってＳＰからフレーム全体が書き込まれ、コミットされると、コミッテッドプットポインタが、推論的プットポインタに設定される。この推論的ポインタは、可能なＦＩＦＯオーバーフロー条件のアドレスを指定することが必要である。
５）推論的ゲットポインタ
推論的ゲットポインタは、予定されたＭＡＣへの転送に関して読み出される、次のＦＩＦＯ位置へのポインタである。ＭＡＣによってフレームが拒否された場合、推論的ゲットポインタは、可能な再試行に向けて、コミッテッドゲットポインタに再設定される。拒否されていない場合は、そのフレームが廃棄されないのであれば、コミッテッドゲットポインタが（そのフレームを過ぎた）推論的ゲットポインタに設定される。
６）コミッテッドゲットポインタ
コミッテッドゲットポインタは、ｍａｃ２ｎｐｕ＿ｓｂコマンドにより、ＭＡＣによってコミットされた最後のフレームの後の、次のＦＩＦＯ位置へのポインタである。
７）カットオフフラクション（優先度ごと）
各フレーム優先度（０〜７）に対して、Ｎ／１２８フラクション（１２７／１２８＝＝１）で表される数があり、この数をＦＩＦＯの全体サイズに乗じることにより、そのフレームをＦＩＦＯに書き込むかどうかを決定するカットオフ点が求められる。ＦＩＦＯ内の総バイト数がこのカットオフより少ない場合は、そのフレームが書き込まれ、そうでない場合は、そのフレームが廃棄される。このカットオフ値は、優先度ごとに１つずつ、（ラッチＲＡＭに実装される）ＭＩＯＣＵＴＯＦＦ［０−７］レジスタに収容される。
８）ＢＷフラクション（ＭＡＣごと、ＦＩＦＯごと）
各出力ＭＡＣ  ＦＩＦＯに対して、Ｎ／１０２４フラクション（１０２３／１０２４＝＝１）で表される数があり、この数を、（ＢＷウィンドウ内のＮＰＵクロックサイクル数を収容する）ＢＷウィンドウ（ＭＩＢＷＷＩＮ）レジスタに乗じることにより、この出力ＦＩＦＯから現在のＢＷウィンドウ内に送ることができるバイト数が求められる。ＭＩＯＢＷ［０−７］＿［０−３］レジスタは、現在のウィンドウの間に各ＭＡＣの出力ＦＩＦＯから送られたバイト数を記録している。これらのレジスタは、ラッチＲＡＭ内に存在する。
９）スケジューリング優先度（ＭＡＣごと、ＦＩＦＯごと）
各出力ＭＡＣ  ＦＩＦＯに対して、出力ＦＩＦＯの固定された優先度を表す３ビットの数がある。ＭＩＯＰＲＩＯ［０−７］＿［０−３］レジスタは、これらの値をラッチＲＡＭに保持する（独立した４つのラッチＲＡＭなので、すべての優先度を一度に比較できる）。現在のＢＷウィンドウに対してＦＩＦＯがそのＢＷフラクションを超えていないとすると、所与のＭＡＣに対して、最高優先度の出力ＦＩＦＯが次に選択される。優先度が同じ中からの選択にはラウンドロビンスケジューリングが用いられる。
【０１３１】
[00148]さらに各出力ＦＩＦＯは、すべてのものをキャッシュＳＳＲＡＭ内にとどめて、システムメモリに転送されないようにしようとする。
【０１３２】
[00149]動作時には、ＭＩは、「ｎｐｕ２ｍａｃ」インターフェース経由でＭＡＣにフレームを送る。このインターフェースは、前述のように非同期である。「ｍａｃ２ｎｐｕ＿ｓｂ」サイドバンドインターフェースは、ＭＡＣが、送信フレームをコミットまたは拒否する場合に用いる。ただし、ｎｐｕ２ｍａｃ＿ｓｂインターフェースは、出力側では用いられない。
【０１３３】
[00150]ＭＩは、以下に示す図８の方法を実行して、サイクルあたり１ダブルワードを処理する。ＭＩは、各出力ＭＡＣの状態を保持するので、どのサイクルの間でも、どのＭＡＣについても実行を再開できる。ＭＩが所与のｎｐｕ２ｍａｃインターフェースに書き込みを行おうとして、ｍａｃ２ｎｐｕ＿ｂｕｓｙが設定されていると、ＭＩは、そのインターフェースが解放されるまで、別の出力ＭＡＣを処理することに切り替わる。同様に、ＭＩは、出力ＦＩＦＯからダブルワードを読み出すが、ｍｉｉＭＡＣのｎｐｕ２ｍａｃインターフェースは、一度に１バイトしか処理できない。そこで、ＭＩは、その４バイトが順序付けられる間、別の出力ＭＡＣに切り替わる。
【０１３４】
[00151]さらに、ＭＩは、ステータスがコミットまたは拒否されるのを待つことなく、コミットされていない２つのフレームをＭＡＣに送ることができる。このことは、非同期境界を越えて戻るコミット／拒否の待ち時間を隠すために重要である。
【０１３５】
[00152]図８は、ＭＡＣへの出力ＦＩＦＯからの出力フレームの、ＭＩによる処理の方法８００のフローチャートである。方法８００は、ステップ８０５から始まり、ステップ８１０に進む。
【０１３６】
[00153]ステップ８１０で、方法８００は、ＭＡＣの出力ＦＩＦＯの１つが変化するのを待つ。複数のＭＡＣに保留中の変化がある場合、方法８００は、ラウンドロビンストラテジに従って１つを選択する。ＭＩは、サイクルあたり１つのＭＡＣダブルワードを処理する。この方式の１つの有利点は、一度に１つのＭＡＣしか処理されないので、ＭＡＣレジスタをラッチＲＡＭに保持できることである。
【０１３７】
[00154]一実施形態では、方法８００は、ＭＡＣが、コミットされていないフレームを未処理の状態で既に２つ有する場合、または、ＭＡＣが１つの送信を再試行していて、コミットされていないフレームを未処理の状態で１つ有する場合には、そのＭＡＣを選択しない。ＭＩは、選択されたＭＡＣへの送信を再試行する場合は、その再試行を有する出力ＦＩＦＯを選択することを強制される。
【０１３８】
[00155]ＭＡＣが選択されると、方法８００は、ステップ８２０で、そのＭＡＣの１つの出力ＦＩＦＯを選択する。すなわち、方法８００は、スケジューリングの優先度が最高である、空でない出力ＦＩＦＯを選択する。方法８００は、そのＭＡＣの複数の出力ＦＩＦＯが空でない場合には、ラウンドロビンストラテジを用いる。現在のＢＷウィンドウの間に出力ＦＩＦＯがその最大ＢＷフラクションを超えた場合（前述）、方法８００は、そのＦＩＦＯを、次のＢＷウィンドウまでスケジューリング不可であるとマーキングする。
【０１３９】
[00156]ステップ８３０で、方法８００は、出力ＦＩＦＯからｄｗｏｒｄ＿ｃｏｕｎｔを読み出す。そのｄｗｏｒｄ＿ｃｏｕｎｔのＭＳＢの中の無視フラグが設定されている場合、方法８００は、推論的ゲットポインタをｄｗｏｒｄ＿ｃｏｕｎｔだけインクリメントする。無視フラグが設定されていない場合、方法８００は、推論的ゲットポインタを１ダブルワードだけインクリメントする。
【０１４０】
[00157]ステップ８４０で、方法８００は、出力ＦＩＦＯからＣＦＨダブルワードを読み出し、推論的ゲットポインタをインクリメントする。ｄｓｐＭＡＣｓおよびｈｏｓｔＭＡＣの場合、方法８００はステップ８４０をスキップしてステップ８５０に直接進むことに注意されたい。ステップ８５０では、ＣＦＨを含むダブルワードがとにかく「ｎｐｕ２ｍａｃ」に渡される。ＣＦＨのｐｒｏｔｏ２フィールドがローである場合も、方法８００はステップ８５０に直接進む。
【０１４１】
[00158]ＣＦＨのｐｒｏｔｏ２フィールドがローでない場合、ＣＦＨのｐｒｏｔｏ２フィールドはフレームヘッダであってはならない。方法８００は、ｐｒｉｏビットを保存し、適切なＭＩＭＡＣＣＴＬ［０−７］ＭＩＯＦＭＴフィールドを読み出して、ＭＡＣに送るイーサネットフレームの種類を決定する（８０２．３／ＳＮＡＰまたはＥｔｈｅｒｎｅｔ  ＩＩ、８０２．１１かどうか）。
【０１４２】
[00159]ステップ８５０で、方法８００は、次のダブルワード（例えば、次の２ダブルワード）を出力ＦＩＦＯから読み出す。これらのダブルワードは、４８ビットのイーサネット宛先アドレスを含む。８０２．１１出力ＭＡＣの場合は、４８ビットの宛先アドレスと４８ビットの１ホップアドレス（両方とも必須）を取得するために、次の３ダブルワードを実際に読み出す。
【０１４３】
[00160]ステップ８６０で、方法８００は、前に収集したフィールドを用いて、正しいネットワークプロトコル（例えば、イーサネット）のフレームヘッダを構築する。
【０１４４】
[00161]ステップ８７０で、方法８００は、追加ダブルワードがあるかどうかを照会する。この照会に対して肯定応答が行われた場合、方法８００は、ステップ８５０で出力ＦＩＦＯからダブルワードを読み出し、それをｎｐｕ２ｍａｃに書き込むことを、このフレームからｄｗｏｒｄ＿ｃｏｕｎｔ個のダブルワードがすべてなくなるまで続ける。さらに、この時点で推論的ゲットポインタがインクリメントされる。これは、ＭＡＣがまだそのフレームをコミットしていないためである。最後のバイト／ダブルワードの場合は、ｎｐｕ２ｍａｃ＿ｓｂ＝＝１と設定する。この照会に対して否定応答が行われた場合、方法８００はステップ８１０に戻る。
【０１４５】
[00162]第１および第２（あれば）のコミットされていないフレームについては、方法８００は、あらかじめ出力ＦＩＦＯを格納していることに注意されたい。第２のコミットされていないフレームがある場合、方法８００は、何か別の操作を行う前に、この第２のフレームのステータスをｍａｃ２ｎｐｕ＿ｓｂ経由で待つ。第２のフレームのステータスが「拒否」の場合、方法８００は、第２のフレームの出力ＦＩＦＯの推論的ゲットポインタを第２のフレームの前に再設定することを含め、第２のフレームがあるという事実を無視する。第２のフレームのステータスが「拒否」の場合、方法８００は、この第２のフレームが無視されることを示す書き込みを、ｄｗｏｒｄ＿ｃｏｕｎｔのＭＳＢの中の無視フラグに行う。この時点で、第２のフレームについて考慮する必要はなくなる。
【０１４６】
[00163]ただし、ＭＡＣごとの再試行回数がＭＩＯＭＡＸＲＴＲＹ［０−７］レジスタに等しい場合、方法８００は第１のフレームを廃棄する。方法８００は、再試行回数をクリアし、コミッテッドゲットポインタを推論的ゲットポインタに設定する。
【０１４７】
[00164]ＭＡＣごとの再試行回数がＭＩＯＭＡＸＲＴＲＹ［０−７］レジスタに等しくない場合、方法８００は、ＭＡＣごとの再試行回数をインクリメントし、推論的ゲットポインタをコミッテッドゲットポインタに再設定する。方法８００は、現在の対象である出力ＦＩＦＯを、再試行により次に選択されるものとしてマーキングする。これにより、フレームが確実に再送される。
【０１４８】
[00165]「ｎｐｕ２ｍａｃ＿ｓｂ」インターフェースは、ＭＡＣに対するｐｒｉｖ書き込みおよび読み出しの発行に用いられる。具体的には、ＭＩが、４ビットのＢＥと１２ビットのアドレスをｆｅ２ｍｉ＿ｓｌｖ経由で受け取る（ビッグエンディアンの順序のビットの２サイクル）。１２ビットアドレスの上位４ビットは、ｐｒｉｖアクセスの宛先をＭＩに知らせる。ａｄｄｒ［１１］が１の場合、ｐｒｉｖアクセスの宛先は、ａｄｄｒ［１０：８］で表されるＭＡＣであり、ａｄｄｒ［７：０］は、内部ＭＡＣダブルワードアドレスである（すなわち、最大で１０２４バイトのＭＡＣアドレス空間）。ａｄｄｒ［１１］が０の場合、ａｄｄｒ［１０：０］は、ＭＩ  ｐｒｉｖバイトアドレスを表す。「ｎｐｕ２ｍａｃ＿ｓｂ」インターフェースと「ｍａｃ２ｎｐｕ＿ｓｂ」インターフェースは、ｐｒｉｖアクセスとＭＩまたはＭＡＣからの他のコマンドとを多重化する。ｐｒｉｖアクセスは、優先度が最高であり、他のコマンドを機能停止させる。
【０１４９】
[00166]図９は、本発明のＨｏｓｔＭＡＣ（ＨＭ）サブユニット４１２のブロック図である。前述のように、ＭＩとＨＭの間のインターフェースは、いくつかの領域で、一般的なｍｉｉＭＡＣインターフェースと異なる。第１に、このインターフェースは、ＦＩＦＯをまったく持たない同期ローインターフェースである。第２に、ｍａｃ２ｎｐｕインターフェースとｎｐｕ２ｍａｃインターフェースが、ＮＰＵ帯域幅（３２ビット）のデータと１ビットのエンドオブフレーム（ｅｏｆ）に対応するために、（９ビット非同期ではなく）３３ビット幅の同期データパスである。第３に、ｍａｃ２ｎｐｕ＿ｓｂサイドバンドインターフェースもｎｐｕ２ｍａｃ＿ｓｂサイドバンドインターフェースも存在しない。フレームが常にＨＭによってコミットされ、一時停止／再開コマンドがＨＭに対して無効である。最後に、ｐｒｉｖアクセスがｆｅ２ｈｍ＿ｓｌｖインターフェース経由で送られる。
【０１５０】
[00167]ＨＭは、一組のＰＢ  ９１０ａ〜ｎ（例えば、構成可能な１６個のプッシュバッファ）とともに配備される。これらのプッシュバッファは、システムメモリ内に存在する。例えば、ＨＭ  ＰＢは、ホストが宛先または発信元であるフレーム９１０ａ、ＳＷによって提供される空き受信バッファ、ＳＷによってルーティングされるフレーム９１０ｂ、またはｓｏｆｔＭＡＣ  ９１０ｃに転送されるか、ｓｏｆｔＭＡＣ  ９１０ｃから転送され（その後、何らかの外部ネットワークアダプタにブリッジされ）るフレームに用いることができる。
【０１５１】
[00168]これらのプッシュバッファの構成は、以下のｐｒｉｖレジスタを用いて制御される。これらのｐｒｉｖレジスタのほとんどは、ラッチＲＡＭ内に置くことができる。
１）ＰＢ制御（ＨＭＰＢＣＴＬ［０−１５］）
このｐｒｉｖレジスタは、ＰＢの種類を定義する。０＝＝「ＳＷ→ＨＭ」空き受信バッファ、１＝＝「ＨＭ→ＳＷ」受信フレーム、２＝＝「ＳＷ→ＮＭ」送信フレームである。
２）ＰＢシステムメモリ要求（ＨＭＰＢＢＡＳＥ［０−１５］、ＨＭＰＢＭＡＸ［０−１５］、ＨＭＰＢＰＵＴ［０−１５］、ＨＭＰＢＧＥＴ［０−１５］）
ＨＭＰＢＢＡＳＥレジスタは、ＰＢの、ダブルワードアラインメントの物理バイトベースアドレスを示す。ＨＭＰＢｍａｘレジスタは、「ＰＢ内のバイト数−１」を示す。ＨＭＰＢＰＵＴレジスタは、生成側によって次に書き込まれる、ダブルワードアラインメントのバイトオフセットを示す。同様に、ＨＭＰＢＧＥＴレジスタは、消費側によって次に読み出される、ダブルワードアラインメントのバイトオフセットを示す。これらのｐｒｉｖレジスタの動作は、既に開示したとおりである。
３）ＰＢキャッシュＳＳＲＡＭステージングバッファ（ＨＭＰＢＣＢＡＳＥ［０−１５］およびＨＭＰＢＣＭＡＸ［０−１５］）
すべてのＰＢが、グローバルキャッシュＳＳＲＡＭ内に小さなステージング領域９２０を有する。ＨＭは、ＳＳＲＡＭステージング領域とシステムメモリとの間でバーストＤＭＡを実行する。「ＨＭ→ＳＷ」ＰＢは、例えば１６ダブルワードバースト用として十分な、小さなステージングバッファを必要とする。「ＳＷ→ＨＭ」ＰＢは、メモリ待ち時間（１００＋ＮＰＵクロック）を隠し、かつ、現在のデータブロックを処理しながら次のデータブロックを読み出すことができるダブルバッファリングを考慮に入れるのに十分なステージング領域を有する。キャッシュＲＡＭ内にこれらのステージング領域を保持することにより、ＨＭ内で高価なＲＡＭを使用し、かつ、それらの管理に必要なすべてのロジックを使用することを避けることができる。
４）「ＳＷ→ＨＭ」ＰＢ制御（ＨＭＩＰＢＣＴＬ［０−７］）
このレジスタは、ホスト送信フレームに用いる最大８個の「ＳＷ→ＨＭ」ＰＢのインデックスを管理する。有効なビットは、この「ＳＷ→ＨＭ」ＰＢスロットがアクティブかどうかを示す。４ビットのｐｂ＿ｉｎｄｅｘは、１６個の汎用ＰＢのどれが、この「ＳＷ→ＨＭ」ＰＢの実装に用いられているかを示す。３ビットの優先度フィールドは、この「ＳＷ→ＨＭ」ＰＢのスケジューリング優先度を示す。
５）「ＨＭ→ＳＷ」ＰＢ制御（ＨＭＯＰＢＣＴＬ［０−７］）
このレジスタは、ホスト受信フレームに用いる最大８個の「ＨＭ→ＳＷ」ＰＢのインデックスを管理する。有効なビットは、この「ＨＭ→ＳＷ」ＰＢスロットがアクティブかどうかを示す。４ビットのｐｂ＿ｉｎｄｅｘは、１６個の汎用ＰＢのどれが、この「ＨＭ→ＳＷ」ＰＢの実装に用いられているかを示す。４ビットのｆｒｅｅ０＿ｐｂ＿ｉｎｄｅｘおよびｆｒｅｅ１＿ｐｂ＿ｉｎｄｅｘは、どの汎用ＰＢが、空きバッファを供給するためにホストによって用いられているかを示す。通常は、一方のインデックスが小さなバッファを供給し、他方のインデックスが大きなバッファを供給するが、両方のインデックスが同じＰＢをポイントした場合は、１つのバッファサイズだけが構成される。１６ビットのｉｎｌｉｎｅ＿ｃｕｔｏｆｆ値は、フレームが、空きバッファに分散９５０されずに「ＨＭ→ＳＷ」ＰＢに埋め込まれるためには、どれだけ小さくなければならないかを示す。値０は、インライン化を無効にする。
【０１５２】
[00169]「ＳＷ→ＨＭ」ＰＢは、ホストがネットワーク上のエンドポイントとして送るフレーム、またはホストがＮＰＵへ再ルーティングするフレームのために存在する。このＰＢでは、以下のコマンドを定義する。
ＮＯＰ
ｃｍｄ［３１：２４］＝＝０
ｃｍｄ［２３：０］  ＝＝０（予約）
何もしない。
フレーム
ｃｍｄ［３１：２４］＝＝１
ｃｍｄ［２３］      ＝＝ｉｎｌｉｎｅ（０＝＝収集、１＝＝このコマンドに埋め込まれたデータ）
ｃｍｄ［２２：２０］＝＝０（予約）
ｃｍｄ［１９：１２］＝＝ｎ（ｉｎｌｉｎｅ＝＝０の場合は＜ｐｈｙｓ＿ａｄｄｒ，ｌｅｎ＞ペアの数。ｉｎｌｉｎｅ＝＝１の場合はＣＦＨの後のデータダブルワードの数）
ｃｍｄ［１１：０］  ＝＝０（予約）
ｄａｔａ０      ＝＝ＣＦＨ（全体説明で定義されたものと同じフォーマット）
ｄａｔａ１      ＝＝ＦＢ０  物理アドレス（ｉｎｌｉｎｅ＝＝０の場合）
ｄａｔａ２      ＝＝ＦＢ０  バイト長（ｉｎｌｉｎｅ＝＝０の場合）
．．．
ｄａｔａ２ｎ−１    ＝＝ＦＢｎ−１  物理アドレス（ｉｎｌｉｎｅ＝＝０の場合）
ｄａｔａ２ｎ        ＝＝ＦＢｎ−１  バイト長（ｉｎｌｉｎｅ＝＝０の場合）
【０１５３】
[00170]ホストは、標準フレームヘッダＣＦＨがあるフレームを構築している。ｉｎｌｉｎｅ＝＝０の場合は、可変長コマンドで与えられるｎ個のフレームバッファ（ＦＢ）ポインタのリストからフレームコンテンツが収集９３０される。ＨＭは、すべてのＦＢを（ビッグエンディアンのバイト順で）連結し、それらをＭＩに送る。ＨＭがＰＢＧＥＴポインタを、このコマンドを過ぎるところまで進めれば、ＳＷがこれらのＦＢを自由に再利用できる。ｉｎｌｉｎｅ＝＝１の場合は、このコマンドの、ＣＦＨの後にフレームコンテンツとｎダブルワードが埋め込まれる。それらをＨＭがＭＩに送る。
【０１５４】
[00171]ＨＭに空き受信バッファを供給する「ＳＷ→ＨＭ」ＰＢでは、以下のコマンドが定義されている。
ＮＯＰ
ｃｍｄ［３１：２４］＝＝０
ｃｍｄ［２３：０］  ＝＝０（予約）
何もしない。
ＦＢＰＬ（フレームバッファポインタリスト）
ｃｍｄ［３１：２４］＝＝２
ｃｍｄ［２３：１６］＝＝ｎ（このコマンドにある空きバッファポインタの数）
ｃｍｄ［１５：０］  ＝＝ｂｕｆｆ＿ｌｅｎ（このコマンドにある各空きバッファのバイト数）
ｄａｔａ０          ＝＝ＦＢ０  物理アドレス
ｄａｔａ１          ＝＝ＦＢ１  物理アドレス
．．．
ｄａｔａｎ−１      ＝＝ＦＢｎ−１  物理アドレス
【０１５５】
[00172]ホストは、ｎ個の空きフレームバッファ（ｂｕｆｆ＿ｌｅｎバイトの各バイト）にポインタのリストを渡している。ＨＭは、これらのバッファを、「ＨＭ→ＳＷ」ＰＢフレームの分散に用いる。
【０１５６】
[00173]図１０は、フレームを「ＳＷ→ＨＭ」プッシュバッファからＭＩに転送する方法１０００のフローチャートである。すなわち、ＨＭは、コマンド処理における待ち時間を避けるために、コマンドのバースト読み出しを行い、それらを動かし続ける。
【０１５７】
[00174]方法１０００は、ステップ１００５から始まり、ステップ１０１０に進む。ステップ１０１０で、方法１０００は、空でない「ＳＷ→ＨＭ」プッシュバッファの数を検出して「ＳＷ→ＨＭ」プッシュバッファを選択する。一実施形態では、方法１０００は、関係を破壊するラウンドロビンストラテジにより、「ｓｃｈｅｄ＿ｐｒｉｏ」が最高である「ＳＷ→ＨＭ」プッシュバッファを選択する。ＨＭＩＰＢＣＴＬレジスタは、どのＰＢが「ＳＷ→ＨＭ」ＰＢとして構成されているかと、そのＰＢのｓｃｈｅｄ＿ｐｒｉｏを示す。
【０１５８】
[00175]ステップ１０２０で、方法１０００は、次のコマンドダブルワードをＰＳから呼び出し、ステップ１０３０で、そのコマンドがＮＯＰ（無動作）コマンドかどうかを判別する。この照会に対して肯定応答が行われた場合、方法１０００はステップ１０１０に戻り、ＮＯＰが廃棄される。照会に対して否定応答が行われた場合、方法１０００はステップ１０４０に進む。
【０１５９】
[00176]ステップ１０４０で、方法１０００は、そのコマンドがＦＲＡＭＥコマンドかどうかを照会する。この照会に対して否定応答が行われた場合、方法１０００はステップ１０４５に進み、ＨＭが一時停止される。すなわち、コマンドがＦＲＡＭＥコマンドでない場合には、何かが非常に悪い状態である。方法１０００は、ＨＭＴＳＴＡＴＵＳをＢＡＤ＿ＰＢ＿ＣＭＤに設定し、ｈｍ２ｆｅ＿ｔｉｎｔ（トラップ割込）信号をＦＥにパルス送信する。
【０１６０】
[00177]照会に対して肯定応答が行われた場合、方法１０００はステップ１０５０に進み、コマンドダブルワードから「ｉｎｌｉｎｅ」フィールドおよび「ｎ」フィールドを抽出する。
【０１６１】
[00178]ステップ１０６０で、方法１０００は、「ｉｎｌｉｎｅ」が０または１に等しいかどうかを照会する。ｉｎｌｉｎｅが１に等しい場合、「ｎ］はダブルワード数を表す。次に方法１０００は、ステップ１０６４に進み、すべての「ｎ」ダブルワードをＰＢから入力データステージング領域に読み出す（ＨＭＩＣＢＡＳＥ／ＨＭＩＣＭＡＸ  ｐｒｉｖ規則はキャッシュＳＳＲＡＭ内の範囲を示す）。
【０１６２】
[00179]ｉｎｌｉｎｅが０に等しい場合、「ｎ」は、ｐｈｙｓ＿ａｄｄｒ／ｂｙｔｅ＿ｌｅｎペアの数を表す。その場合、方法１０００はステップ１０６２に進み、各ペアをＰＢから読み出す。方法１０００は、バースト読み出しで、ｂｙｔｅ＿ｌｅｎバッファを、グローバルキャッシュＳＳＲＡＭ内の入力データステージング領域に読み出す。ＨＭは、複数のペアを一度に処理しなければならないので、入力ステージング領域の全体を常に保持する。
【０１６３】
[00180]ステップ１０７０で、入力ステージング領域にダブルワードが現れたときに、ＨＭは、ＭＩからのビジー信号を尊重しながら、それらのダブルワードを可能な限り速やかにＭＩに渡す。このステップはこの全方法１０００と並行して行われ、それによって入力データステージング領域がＭＩに移される前に別のフレームコマンドを開始することができることに留意すべきである。ＨＭは、フレームをＭＩにコミットすることを必要としない。すなわち、ＨＭはカーネルを信頼し、ＭＩは、フレームが常にコミットされていると見なす。
【０１６４】
[00181]ステップ１０８０で、ＦＲＡＭＥコマンドのｎ個の要素すべてが消費された後、方法１０００は、Ｆｒａｍｅコマンドを過ぎたＰＢＧＥＴポインタをインクリメントする。これにより、ＳＷが自身の送信バッファを再利用できることがＳＷに伝えられる。
【０１６５】
[00182]図１１は、フレームをＭＩから「ＨＭ→ＳＷ」プッシュバッファに転送する方法１１００のフローチャートである。方法１１００は、ステップ１１０５から始まり、ステップ１１１０に進む。
【０１６６】
[00183]ステップ１１１０で、方法１１００は、次のフレームのｄｗｏｒｄ＿ｃｏｕｎｔおよびＣＦＨをＭＩから受け取る。方法１１００は、ｏｕｔｐｕｔ＿ｑｕｅｕｅ＿ｉｎｄｅｘをＣＦＨから抽出し、これを用いて、適切なＨＭＯＰＢＣＴＬレジスタへのインデックスを取得する。
【０１６７】
[00184]ステップ１１１５で、方法１１００は、ＣＦＨから始まるＭＩフレームコンテンツを出力データステージング領域にステージングする（ＨＭＯＣＢＡＳＥ／ＨＭＯＣＭＡＸ  ｐｒｉｖ規則はキャッシュＳＳＲＡＭ内の範囲を表す）。方法１１００は、このステージング領域から適切な受信バッファ領域にバーストＤＭＡを行うことができる。
【０１６８】
[00185]ステップ１１２０で、方法１１００は、このｏｕｔｐｕｔ＿ｑｕｅｕｅ＿ｉｎｄｅｘに用いられるＰＢをＨＭＯＰＢＣＴＬから識別する。これは、この「ＨＭ→ＳＷ」ＰＢに用いられる１つまたは２つの「ＳＷ→ＨＭ」空きバッファＰＢを明らかにする。これは、ｉｎｌｉｎｅ＿ｃｕｔｏｆｆを明らかにすることもできる。
【０１６９】
[00186]ステップ１１２５で、方法１１００は、そのフレームのｄｗｏｒｄ＿ｃｏｕｎｔとｉｎｌｉｎｅ＿ｃｕｔｏｆｆとを比較する。ｄｗｏｒｄ＿ｃｏｕｎｔがｉｎｌｉｎｅ＿ｃｕｔｏｆｆ以下の場合、方法１１００は、ＦＲＡＭＥコマンドを、ｉｎｌｉｎｅ＝１およびｎ＝ｄｗｏｒｄ＿ｃｏｕｎｔで「ＨＭ→ＳＷ」ＰＢに書き込む。方法１１００は、単純に、出力データステージング領域から「ＨＭ→ＳＷ」ＰＢに、フレームコンテンツのバースト書き込みを行う。その後、方法１１００はステップ１１８５に進む。
【０１７０】
[00187]ただし、「ＳＷ→ＨＭ」空きバッファＰＢが空でないか、ＦＢＰＬ読み出しがまだない場合、方法１１００は、ステップ１１３０で、ＦＢＰＬコマンドをステージングし、その処理を開始する。これは、少なくとも、各バッファのバッファサイズと使用可能なバッファポインタを開示する。ＳＷは、最初の「ＳＷ→ＨＭ」空きバッファＰＢがより小さいバッファを持つようにしなければならない。
【０１７１】
[00188]ステップ１１３５では、方法１１００は、両方の空きフレームＰＢが空かどうかを照会する。この照会に対して肯定応答が行われた場合、方法１１００は、ｈｍ２ｆｅ＿ｐｉｎｔ信号をＦＥにパルス送信してドライバに警報を出し、ドライバが空でなくなるのを待つ。肯定応答が行われない場合、方法１１００はステップ１１３０に戻る。
【０１７２】
[00189]ステップ１１４０で、方法１１００は、フレームに残っているｄｗｏｒｄ＿ｃｏｕｎｔと、より小さい空きバッファサイズとを比較する（その小さい空きバッファＰＢは空でないとする）。ｄｗｏｒｄ＿ｃｏｕｎｔがこのバッファサイズ以下であるか、より大きい空きバッファＰＢが空である場合、方法１１００は、ステップ１１４５で、次のバッファポインタを小さいＦＢＰＬで用いる。そうでない場合は、次のバッファポインタを大きいバッファＰＢで用いる。
【０１７３】
[00190]ステップ１１５０で、方法１１００は、バッファポインタおよびｂｙｔｅ＿ｌｅｎ＝ｍｉｎ（ｄｗｏｒｄ＿ｃｏｕｎｔ＊４、ｆｒｅｅ＿ｂｕｆｆ＿ｌｅｎ）を「ＨＭ→ＳＷ」ＰＢに書き込み、このＦＲＡＭＥコマンドのｎをインクリメントする。
【０１７４】
[00191]ステップ１１６０で、方法１１００は、ＦＢＰＬが空になったかどうかを照会する。小さい方／大きい方のＦＢＰＬが空になった場合、方法１１００は、ステップ１１６５で、小さい方／大きい方のＰＢＧＥＴポインタを、ＦＢＰＬコマンドを過ぎるところまで進める。このステップは、そのＦＢＰＬの中のすべてのバッファが使い切られたこと、および、それらが（最終的に）「ＨＭ→ＳＷ」ＰＢ  ＦＲＡＭＥコマンドに含まれる予定であることをＳＷに知らせる。
【０１７５】
[00192]ステップ１１７０では、方法１１００は、出力データステージング領域においてｍｉｎ（６４＊４，ｂｙｔｅ＿ｌｅｎ）バイトが使用可能になったかどうかを照会する。この照会に対して肯定応答が行われた場合、方法１１００は、それらのバーストＤＭＡをステージング領域から空きバッファに行う。
【０１７６】
[00193]ステップ１１８０では、方法１１００は、ｄｗｏｒｄ＿ｃｏｕｎｔからｂｙｔｅ＿ｌｅｎ／４を減算する。ｄｗｏｒｄ＿ｃｏｕｎｔが０になったら、方法１１００は、ａｄｄｒ／ｌｅｎによってペアが分散される前に、ＦＲＡＭＥコマンドを、ｉｎｌｌｎｅ＝０，ｎで「ＨＭ→ＳＷ」ＰＢに書き込む。
【０１７７】
[00194]最後にステップ１１８５で、方法１１００は、「ＨＭ→ＳＷ」ＰＢＰＵＴポインタを、新しく書き込まれたＦＲＡＭＥコマンドを過ぎるところまで進める。ＰＢが空だった場合、方法１１００は、ｈｍ２ｆｅ＿ｐｉｎｔ（ＰＢ割込）信号をＦＥにパルス送信する。
【０１７８】
[00195]図１２は、本発明のシーケンスプロセッサ（ＳＰ）サブユニット４３０のブロック図である。簡単に言えば、ＳＰは、ＭＩからＡＴ（プリＡＴ／入力）に転送される途中のフレーム、およびＡＴからＭＩ（ポストＡＴ／出力）に転送される途中のフレームを処理する。ＳＰは、ホストによって制御される複数の機能を提供するが、これには、ＩＰＳｅｃ暗号化技術および認証、ＴＣＰおよびＵＤＰのチェックサム、ＩＰ断片化、圧縮／圧縮解除、ＰＰＰｏＥ／ＰＰＰ、ＩＰカプセル化、およびＩＰ再アセンブリが含まれ、これらに限定されない。さらに、暗号化技術コンポーネントは、８０２．１１暗号化用Ｗｉ−Ｆｌ  ＭＡＣ（ＲＣ−４またはＡＥＳ）でも用いることができる。さらにＳＰは、ＭＡＣが、「バックオフ」で用いる乱数を取得できるように、インターフェースを乱数発生器（ＲＮＧ）にエクスポートする。
【０１７９】
[00196]各種動作をＳＰにグループ化する目的は、パケットの再循環を１つのサブユニットに限定し続けることである。パケット全体を処理しないとヘッダ値の更新や認証ができないので、パケットは、チェックサム、認証、暗号化など様々な機能のために再循環されなければならない。ただし、多くの場合は、操作を単一のパスにパイプライン化でき、すべての操作についてのヘッダ更新を第２のパスで適用できる。これらすべての操作のテストを緊密に連係させて行う必要があるが、このテストを、１つのサブユニットの検証環境で行えば、すべてを最適にカバーできる。
【０１８０】
[00197]図１２に示すように、ＳＰ  ４３０は、パス１２０５でＭＩからパケットを受け取り、それらを処理して、パス１２０７でＡＴに転送する。同様に、ＳＰはまた、パス１２９７でＡＴからパケットを受け取り、それらを処理して、パス１２９５でＭｌに転送する。これらの相補的な処理側をそれぞれ、ＳＰのプリＡＴ側（または全体入力側）、ポストＡＴ側（または全体出力側）と呼ぶ。
【０１８１】
[00198]動作時には、パケットがＭＩから到着した場合、一構成では、そのパケットは、カプセル化解除およびＩＰヘッダの妥当性検査１２１０、認証１２１５、暗号化解除１２２０、圧縮解除１２２５、およびＵＤＰ／ＴＣＰチェックサム１２３０のために、プリＡＴ側を通って処理される。パケットがＡＴから到着した場合、そのパケットは、ＴＣＰ／ＵＤＰチェックサムの生成１２５０、圧縮１２５５、暗号化１２６０、認証値の生成１２７０、およびカプセル化１２７５のために、ポストＡＴ側を通って処理される。ただし、パイプラインは構成可能なので、これらの暗号化／暗号化解除およびチェックサムの生成／検証は、プリＡＴでもポストＡＴでも行うことができる。これらの処理ステップのいくつかは、マルチパスであるか、他のステップで処理されるフィールドを更新する前にパケットを完全に処理しなければならない可能性があるので、パス間でパケットを格納するために、再循環保持バッファ（ＲＨＢ）１２４０ａおよび１２４０ｂを用いられる。同様に、圧縮解除および圧縮操作のために、履歴バッファ１２４６を備える。
【０１８２】
[00199]さらに、ＳＰは、チップの他の部分からエントロピービットを収集し、発生させた乱数をＭＡＣにエクスポートするための乱数発生器（ＲＮＧ）１２４０を備える。最後に、ＳＰはさらに、メインメモリ１２３５に格納されるマルチレベルのルックアップテーブル（例えば、セキュリティアソシエーションテーブル（ＳＡＴ）およびＰＳＴ）を備える。
【０１８３】
[00200]一実施形態では、ＳＰは、最高度の柔軟性が得られるように、暗号化技術（ＸＥＳ）、認証（ＡＵＴＨ）、乱数発生（ＲＮＧ）、テーブルルックアップ（ＴＢＬ）、チェックサムなどの各種操作用コアロジックを、ＳＰのプリＡＴ側とポストＡＴ側のいずれでもパイプライン化および使用できる個別のロジック装置として実装する。ＳＰのプリＡＴ側とポストＡＴ側は両方とも、この、コアロジック装置のグループを単一ブロックと見てこれにアクセスし、ＳＰの一方の側がコアを使用しているときは他方の側がロックアウトされる。ただし、各側は、それぞれの再循環保持バッファ（ＲＨＢ）１２４０ａおよびｂを管理し、パイプラインのそれぞれの側でＳＰ操作が不要なときにパケットが操作パイプラインをバイパスできるタイミングを決定できる。これは、ロック操作を集中化することでロジックを簡略化し、ロジックおよび状態を複製しないことで領域要件を最小化する。この一般的なコア方式を図１３に示す。ただし、このコアロジックは、特定の実装の要件を満たすために必要であれば、複製することも可能であることに注意されたい。
【０１８４】
[00201]図１３は、共通コアロジックを有するシーケンスプロセッサ（ＳＰ）サブユニット４３０のブロック図である。図１２と異なり、ＳＰの入力側と出力側の両方が、同じコアロジックを共用するように示されており、両方が同じ操作一式を実行できる。一実施形態では、これらの操作は、送信側操作（チェックサムの生成１３１０、認証値の生成１３３０、暗号化１３２０、およびＩＰ断片化１３３５）と受信側操作（チェックサムの妥当性検査１３１０、認証値の妥当性検査１３３０、および暗号化解除１３２０）に分割できる。したがって、暗号化技術、認証、およびチェックサムのための各モジュールは、１つのモジュールの出力を次のモジュールの入力にパイプライン化できる集中コアの一部として実装される。ＳＰのプリＡＴ側とポストＡＴ側の両方でこのパイプラインを使用できるため、一方の側が、いずれかのモジュールを使用している間、他方の側をロックアウトする状況がありうることに注意されたい。
【０１８５】
[00202]ＩＰ断片化を除き、受信側と送信側のすべての操作が、プリＡＴでもポストＡＴでも実行可能である。したがって、ＳＰ  ４３０の２つの側はほとんど同じである。わずかな違いは主に、制御ロジックを構成するために調べられるレジスタフィールドおよびヘッダフィールドの選択にあり、これは使用可能な情報の違いによる。
【０１８６】
[00203]例えば、ＡＴがルーティングパケットであれば、ＳＰのポストＡＴ側が、そのパケットの宛先がＨＯＳＴＭＡＣかどうかを判別できる。プリＡＴ側は、この判別ができない。したがって、ポストＡＴ処理は、より選択的に行うことができ、ＨＯＳＴＭＡＣを宛先とするパケットに対してのみ受信側操作を適用できる。
【０１８７】
[00204]前述のとおり、ＩＰ断片化１３３５は、出力側操作にのみ含まれ、このコアブロックの外側に実装される。したがって、ＩＰ断片化だけが必要なパケットは、入力側処理と並行して処理できる。
【０１８８】
[00205]図１３はさらに、パケットがＳＰからＡＴに直接パススルーされることが可能であること、パケットが操作パイプライン１３２５に直接転送されることが可能であること、またはパケットが、ＲＨＢ  １２４０ａおよび１２４０ｂのいずれかで、あるいはＳＰへの入力インターフェースでブロックされている間、操作パイプラインを待つことが可能であることを示している。処理されるパケットは、操作パイプラインに流れ込む。操作パイプラインは、キャッシュまたはメモリに格納されているテーブル内のセキュリティアソシエーションのルックアップ処理を、ＴＢＬモジュール１３０５を介して行う。次に操作パイプラインは、パケットを、認証（ＡＵＴＨ）、暗号化（ＸＥＳ）、およびチェックサムの各モジュールの特定の順列に通してからＲＨＢに戻す。ＲＨＢはキャッシュに存在し、大きなパケットはメモリにスピルされる。次にパケットは、ＲＨＢからＡＴに流れるか、さらなる処理のために操作パイプラインに戻ることができる。
【０１８９】
[00206]ＸＥＳ  １３０２モジュールおよびＡＵＴＨ  １３３０モジュールが乱数発生器（ＲＮＧ）１３４０を用いて鍵および初期化ベクトルを生成することにも注意されたい。さらに図１３は、ＸＥＳモジュールおよびＲＮＧモジュールが、様々なインターフェース１３０２を介して他のサブユニットからアクセスできることを示している。具体的には、ＸＥＳモジュール１３２０は、ＭＩが無線パケットの暗号化を行うためにアクセスでき、ＲＮＧモジュール１３４０は、ＭＡＣがそのバックオフ値をランダム化するために用いることができる。
【０１９０】
[00207]動作時には、ＡＴまたはＭＩから３３ビットインターフェース（３２ビットのデータと１ビットのエンドオブフレーム（ＥＯＦ））にパケットが到着する。パケットのＣＦＨを調べることにより、ＳＰ処理が必要かどうかが決定される。パケットは、次のサブユニット（ＡＴまたはＭＩ）に直接転送されることにより、ＳＰ処理を完全にバイパスできる。バイパスの決定は、ＳＰの他方の側で別のフレームが処理されている間に行うことができる。ただし、入力インターフェースにおいて使用可能なフレームがＳＰをバイパスできない場合、ＳＰは、ＳＰのその側に向けられた前のパケットが次のサブユニットに転送されていない限り、そのフレームの残りを読み込まない。
【０１９１】
[00208]パケットがパイプラインに入力されると、ＳＰは、ヘッダを解析して、適用されるべき操作を決定し、パケットが適切なモジュールを適切な順序でパススルーし、パケットの循環を開始するように、パイプラインを構成する。パケットがＩＰＳｅｃ処理を必要とする場合、セットアップ手順は、テーブルモジュール（ＴＢＬ）を用いてセキュリティアソシエーションテーブル（ＳＡＴ）内のテーブルルックアップを行い、そのパケットに適用されるＳＡＴエントリ（ＳＡＴＥ）を見つけることを含む。そのＳＡＴＥは、ローカルのレジスタセットにキャッシュされる。この構成はさらに、フレームが、ＳＰを通る別のパスを必要とするかどうかを決定することを含む。前者の場合、ＲＨＢは、次の読み出しで操作パイプラインに流れるように構成されなければならない。後者の場合、ＲＨＢは、次の読み出しで次のサブユニットに流れなければならない。
【０１９２】
[00209]以下、パイプラインおよびモジュールの構成および動作について、さらに説明する。簡単に言えば、受信側の処理を必要とするパケットが、認証（ＡＵＴＨ）、暗号化解除（ＸＥＳ）、および／またはチェックサムのモジュールをパススルーできる。最も一般的なケースでは、これら３つの操作をパイプライン化できる。送信側の処理を必要とするパケットは、チェックサム生成、または場合によって暗号化および／または認証のパイプラインをパススルーできる。ＴＣＰ／ＵＤＰチェックサム生成は、他の操作とのパイプライン化ができない。これは、生成されたチェックサムをパケットヘッダに書き込まなければならず、それにはデータを通る第２のパスが必要なためである。最も複雑なケースでは、フレームをＩＰＳｅｃトンネルの一部にすることができる。これには、暗号化解除によって明らかにされる内部ヘッダをさらに解析することが必要である。
【０１９３】
[00210]最後に、これらのモジュールのいくつかは、無線ｍｉｉＭＡＣによって、暗号化および乱数発生に活用される。したがって、ＸＥＳモジュールからＷｉ−Ｆｉ  ＭＡＣへの８ビット入出力インターフェース１３０２が存在する。また、ＲＮＧ内に、チップの他の部分からエントロピービットを収集し、発生させた乱数を（ランダムバックオフに用いるために）ＭＡＣにエクスポートするためのインターフェース１３０２が存在する。
【０１９４】
[00211]ＳＰのプリＡＴ側およびポストＡＴ側に対してインターフェース／ＲＨＢ管理装置が別々に存在するが、これらの動作はほとんど同じなので、本明細書では両側についてまとめて説明する。フレームが出力インターフェースに現在転送されている場合、この操作は、フレームが完了するまで優先される。このフレームは、ＲＨＢから転送されているフレームであっても、ＳＰのその側をバイパスするフレームであってもよい。
【０１９５】
[00212]インターフェース管理により、パケットは、ＳＰをバイパスすると同時に、ＲＨＢと操作パイプラインとの間でフレームを（いずれの方向にでも）転送することができる。操作パイプラインの出力はＲＨＢに転送されるので、バイパスパケットと操作パイプラインとの間には競合がまったくない。入力インターフェースに使用可能なデータがあり、入力インターフェースがブロックされていない場合であれば、インターフェース管理は、バイパスの決定を行うために、（プリＡＴの場合はＭＩから、ポストＡＴの場合はＡＴから）そのインターフェースにあるフレームの最初の３ダブルワードを調べる。そのパケットがバイパスパケットであれば、（ＲＨＢからのパケットが出力インターフェースに現在転送されていない限り）出力インターフェースに直接転送される。そのパケットがバイパスパケットではなく、ＳＰがその側でフレームを現在処理しているのであれば、入力インターフェースをサービスすることは、現在のフレームが完了するまで延期される。ただし、ＳＰのその側で現在処理中のフレームがない場合は、フレームをＲＨＢまたは操作パイプラインに読み込むことが可能である。動作は、２つのデバッグビットすなわちＲＨＢ＿ＷＨＥＮ＿ＢＬＯＣＫＥＤおよびＲＨＢ＿ＡＬＷＡＹＳで決定される。以下の表１に、これらのビットの各組合せの動作を示す。
【表１】
2006511126.tif 000003
【０１９６】
[00213]ＲＨＢ＿ＡＬＷＡＹＳビットがセットされている場合、フレームは常に最初にＲＨＢに転送される。ＲＨＢ＿ＡＬＷＡＹＳビットがＦＡＬＳＥの場合、操作パイプラインが使用可能であれば、フレームが操作パイプラインに直接転送される。ＳＰの両側がコアにアクセスしようとすると、ポストＡＴ側が優先されることに注意されたい。操作パイプラインが使用可能ではなく、ＲＨＢ＿ＷＨＥＮ＿ＢＬＯＣＫＥＤビットがＴＲＵＥの場合は、フレームがＲＨＢに転送される。一方、ＢＵＦＦＥＲ＿ＷＨＥＮ＿ＢＬＯＣＫＥＤがＦＡＬＳＥの場合はフレームが読み込まれず、操作パイプラインがパケットを処理できるようになるまで、インターフェースが一時停止する。
【０１９７】
[00214]操作パイプラインでの処理のためにパケットがＲＨＢに受け取られるか、操作パイプラインに直接受け取られると、後続のヘッダがダブルワード境界上に並ぶようにするために、イーサネットヘッダにトレーリングパディングに追加される。同様に、データがＲＨＢから出力インターフェースに読み出されると、このパディングが除去される。
【０１９８】
[00215]一般に、チェックサム、ＩＰＳｅｃ、またはＩＰ断片化が不要であれば、パケットはＳＰ  ４３０をバイパスできる。第１のフィルタとして、ＩＰパケットでないパケットはすべて、ＳＰをバイパスできる。さらに、ＩＰ断片はプリＡＴ  ＳＰをバイパスできるが、ポストＡＴ  ＳＰはＩＰ断片をさらに断片化しなければならない可能性がある。
【０１９９】
[00216]一実施形態では、パケットがＩＰＳｅｃまたはチェックサムの処理を必要とする可能性がある場合でも、ＮＰＵの反対側に操作を適用させるよう任意に構成することができる。ＳＰは、ＭｉｉＭＡＣからのフレームについては、入力ＭＡＣに関連付けられたＳＰＭＡＣＣＴＬレジスタ内のビットを頼りにする。チェックサムに関しては、ＰＲＥ＿ＡＴ＿ＩＰＳＥＣ用およびＰＯＳＴ＿ＡＴ＿ＩＰＳＥＣ用のフィールドと、対応するフィールドがある。ホストは暗号化解除またはチェックサム妥当性検査のためにパケットを再循環できるので、受信操作がｈｏｓｔＭＡＣから来る場合もある。これらをチェックするために、ＳＰ  ４３０は、ＣＦＨ内のＤＩＲＥＣＴＩＯＮ（方向）フィールドを調べる。方向がＲＥＣＥＩＶＥの場合、ＳＰはさらに、標準フレームヘッダ（ＣＦＨ）内の対応するフィールドも調べる。送信操作の場合は、ＣＦＨだけをチェックし、方向がＴＲＡＮＳＭＩＴかどうかだけを確認する。
【０２００】
[00217]バイパスの決定の困難な一側面は、パケットの中を詳細に調べることなく決定を行うことである。困難であるのは、パケットの中を調べるためには、パケットを読み込んでバッファリングすることが必要であり、それは、特にパケットが既にＲＨＢ内のある場合には好ましくないからである。この問題に対処するために、ＭＩおよびＨＭは、パケットが処理されるときにパケットのヘッダを調べ、そのパケットがＩＰ断片かどうか（ＣＦＨ．ＰＲＯＴＯ３＝ＩＰ４＿ＦＲＡＧ）、あるいはそのパケットがＩＰＳｅｃペイロードを含むかどうか（ＣＦＨ．ＰＲＯＴＯ４＝＝ＡＨまたはＣＦＨ．ＰＲＯＴＯ４＝＝ＥＳＰ）を記録する。ＡＴはさらに、パケットがＩＰ断片化を必要とする場合に、ＣＦＨ内のビット（ＣＦＨ．ＤＯ＿ＩＰＦＲＡＧ）を設定することを支援する。これらの他のサブユニットによって与えられた情報は、ＳＰにおけるバイパスの決定を促進する。
【０２０１】
[00218]さらに、ＳＰのプリＡＴ側においては、パケットの最終的な宛先が不明の状態で決定を行わなければならない。パケットの宛先がこのホストの場合は、受信側操作（暗号化解除、認証およびチェックサムの妥当性検査）適用することだけが必要がある。ただし、（入力ＭＡＣのＳＰＭＡＣＣＴＬレジスタ内のフィールドに基づいて）プリＡＴの受信操作が有効になっている場合、ＳＰは、パケットの宛先がこのホストであると見なす。ＳＰは、ＨＯＳＴＭＡＣによって再循環されたパケットに受信操作を適用する必要がある場合もある。その場合は、ＣＦＨの方向ビットがＲＥＣＥＩＶＥに設定され、ＧＥＮ＿＊＿ＣＨＥＣＫＳＵＭが、チェックサムの妥当性検査が必要かどうかを示す。さらに、ＩＰＳｅｃ操作が必要な場合は、ＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴフィールドのすべてのビットがセットされる（０×７）。この値が用いられるのは、ＳＰが受信側操作の間にＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴを設定して、（部分的試行を含めて）試行された操作の数を示すからである。用いるＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴの値を小さくすると、ＩＰＳｅｃが必要な信号で成功と非試行を区別することができなくなる。
【０２０２】
[00219]さらに、ｓｅｃｕｒｉｔｙ  ｏｐ  ｃｏｕｎｔフィールドは、ＣＦＨ引数フィールドに渡されるＳＡＴインデックスの数を示す。受信操作の場合は、渡される引数はない。ＳＰＩ値は、パケットヘッダから解析される。
【０２０３】
[00220]送信操作のほうが処理は簡単である。適用する必要があるＩＰＳｅｃ操作がある場合は、入力ＭＡＣがＨＯＳＴＭＡＣになり、ＣＦＨのＤＩＲＥＣＴＩＯＮフィールドがＴＲＡＮＳＭＩＴになり、ＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴフィールドが非ゼロになる。同様に、チェックサムの生成が必要であれば、ＧＥＮ＿＊＿ＣＨＥＣＫＳＵＭフィールドがセットされる。最後に、パケットが既に、この装置より後の特定の装置に対してパススルーとマーキングされている場合は、パケットをバイパスさせることも可能である。
【０２０４】
[00221]操作パイプラインの外側で行われる他の操作がＩＰ断片化である。ＳＰは、ポストＡＴ側でのみ、フレームがＳＰを離れるときにＩＰ断片化を実行する。この決定は、（ＡＴがＣＦＨ  ＬＥＮおよびＩｐｖ４  ｌｅｎに基づいて設定する）ＣＦＨ内のＩＰ断片化ビットに基づく。ＣＦＨが、ＩＰ断片化が必要であることを示すと、ＣＦＨ内のＭＳＳフィールドが、使用するＭＴＵを示す。ＭＴＵは、ダブルワードアラインメントでなければならない。そうでない場合は、処理のためにソフトウェアに送られる。
【０２０５】
[00222]インターフェース管理モジュールは、ＲＨＢを通って再循環されるフレームをバッファリングするための、ＲＨＢへのインターフェースを有する。操作パイプラインをパススルーしたフレームは、ＡＴまたはＭＩに送られるのではなく、２つの再循環保持バッファ（ＲＨＢ）４１０ａおよびｂの１つに書き込まれる。ＲＨＢは、入力（ＩＲＨＢ）側と出力（ＯＲＨＢ）側の両方に対して存在する。さらに、パケットは、最初にＳＰに受け取られたときに、処理が開始される前にＲＨＢに読み込まれる場合がある。各ＲＨＢとして、部分的にグローバルキャッシュＳＳＲＡＭ  １２３９を用い、部分的にシステムメモリ１２３８を用いることができる。通常、ＳＷは、巨大でない再循環パケットがすべてチップ内に残るように、ＲＨＢを、グローバルキャッシュＳＳＲＡＭ内で十分大きいように構成する（例えば、それぞれ２ＫＢ）。さらに、ＳＰのＩＲＨＢおよびＯＲＨＢの位置とサイズを定義するために、ｐｒｉｖレジスタ（図示せず）が用いられる。
【０２０６】
[00223]ＳＰ  ４３０の中核は、操作パイプライン１３２５である。ＳＰのプリＡＴ側とポストＡＴ側は、両方とも、専用の再循環バッファを保持し、現在のフレームがＳＰをバイパスできるかどうかを判別するロジックを含むが、これら２つの側は、単一の操作パイプラインを共用する。操作パイプラインは、パイプラインのプリＡＴ側とポストＡＴ側の両方からの要求信号をチェックし、それに対するビジー信号のアサートを停止する。一実施形態では、両方が待っている場合、ポストＡＴ側が選択される。
【０２０７】
[00224]その後、操作パイプラインは、フレームを受け取り、ヘッダを解析する。操作パイプラインは、ヘッダ内の情報に基づいて、そのフレームが後述の受信処理または送信処理を必要としているかどうかを判別する。
【０２０８】
[00225]具体的には、バイパスを想定されていないフレームの場合、パケット処理は大まかに２つのフェーズがある。「パイプラインの構成」と「データのパイプライン化」である。一般に、操作パイプラインは、実行する操作を決定するために、通過するヘッダを解析する。パイプライン出力は、常にＲＨＢに向かう。そのパスの後、残っている操作および／または暗号化解除によって明らかになったヘッダに基づいてパイプラインを再構成できる。
【０２０９】
[00226]ＳＰは、操作パイプライン１３２５を最大限に構成するために、パイプラインの構成中に、可能な限り多くのフレームのサブヘッダを読み込む。ネットワークヘッダおよびトランスポートヘッダは、完全に構成されない限りパイプラインに送られることが可能にならないので、ヘッダが処理されるにつれ、それらのヘッダがＲＨＢに書き込まれる。暗号化が行われている場合、最初はアクセスができないヘッダがあることに注意されたい。構成には、ＳＡＴエントリの取得（必要な場合）、実行する操作の指定、およびＲＨＢからの読み出しの次の組の送り先（例えば、操作パイプラインまたは次のサブユニット）の指定を含めることができる。
【０２１０】
[00227]受信側パイプライン（例えば、暗号化解除および妥当性検査））または送信側パイプライン（例えば、暗号化およびチェックサムまたは認証値の生成）を通る、データのパイプライン化が可能である。これら２つのパイプラインは、単純に、同じモジュールを様々に構成し、順序付けたものである。ＨＯＳＴＭＡＣからではなく入力ＭＡＣから到着したデータは、受信側処理を通る（ＳＰをバイパスしなかった場合）。ＨＯＳＴＭＡＣから到着したデータについては、ＣＦＨの方向フィールドによって、受信パイプラインが適用されるか、送信パイプラインが適用されるかが決まる。
【０２１１】
[00228]図１４は、本発明のシーケンスプロセッサの受信パイプライン１４００を示す図である。この図１４は、フローチャートと見ることもできる。具体的には、一実施形態では、３つの操作、すなわち、認証１４１０、暗号化解除１４２０、およびチェックサム１４３０（例えば、ＵＤＰ／ＴＣＰ）のいずれかまたはすべてを通る、データのパイプライン化および再循環が可能である。
【０２１２】
[00229]考えられる構成は、以下の２つのパイプラインのいずれかのサブセットを含むことができる。
ＥＳＰ認証→ＥＳＰ暗号化解除→ＵＤＰ／ＴＣＰチェックサム
ＡＨ認証→ＥＳＰ暗号化解除→ＵＤＰ／ＴＣＰチェックサム
【０２１３】
[00230]ＡＨとＥＳＰは同じ認証装置を用いるので、ＳＰは、ＡＨ認証をＥＳＰ認証の中にパイプライン化しない。複数の認証が必要な場合は、第１の認証ステージの結果をＲＨＢに送らなければならない。最後の認証ステージだけが、ＥＳＰ暗号化および／またはＵＤＰ／ＴＣＰチェックサムとのパイプライン化が可能である。あるいは、特定の実装においてＡＨ認証とＥＳＰ認証との組合せが必要な場合は、ＳＰの受信パイプライン１４００を、その２つの認証装置とともに配備することができる。
受信パイプライン１４００の構成は以下のとおりである。
１）最初に、受信パイプライン１４００がＣＦＨヘッダおよびイーサネットヘッダを読み込む。
２）（反復に応じてＰＲＯＴＯ３またはＥＳＰ／ＡＨの次のプロトコルに基づいて）次のプロトコルがＩＰであれば、ＩＰヘッダを読み込み、ＩＰヘッダを検査する。問題があれば、受信パイプラインがパススルーとマーキングされ、「受信操作」に移る。これにより、パケットがヌルパイプラインを通って外に転送される。「受信操作」は、以下に示す一連の操作である。
３）次のプロトコルがＡＨまたはＥＳＰであり、（ＳＰＭＡＣＣＴＬレジスタまたはＣＦＨフィールドで）ＩＰＳｅｃが有効になっている場合は、受信パイプラインがＳＰＩ値からＡＨ／ＥＳＰサブヘッダを読み込む。
４）次のプロトコルがＵＤＰまたはＴＣＰであり、ＵＤＰ／ＴＣＰチェックサムが有効になっている場合は、受信パイプラインが、ＵＤＰ／ＴＣＰチェックサムをオンにする（これについては後でさらに詳しく開示する）。
５）そうでない場合、フレームにＰＴとマーキングせずに「受信操作」に進む。
６）ＳＰＩ値からＡＨ／ＥＳＰサブヘッダを読み込む。
７）ＭＲＵの中で、ＳＰＩ値と一致するＳＡＴエントリを調べる。見つからない場合は、ＴＢＬブロックにルックアップを要求する。ＴＢＬブロックで行われる処理では、キャッシュおよびメモリをチェックし、ハッシュチェーンに従い、すべての可能性がなくなった場合か、一致が見つかった場合のみ戻る。エントリが見つからなかった場合は、パススルー理由コードをＩＮ＿ＳＡＴＥ＿ＮＯＴ＿ＦＯＵＮＤで埋める。ＣＦＨ．ＲＯＵＴＥがＴＲＵＥであって、これがＰＲＥ＿ＡＴの場合は、前のパススルーフィールドを埋めずに「受信操作」に進む。ＡＴは、理由フィールドをチェックし、パケットがルーティングされている場合はそのフィールドをクリアし、パケットがローカルホストに向かう場合はパケットにパススルーとマーキングする。エントリが見つからず、ＲＯＵＴＥ＝ＦＡＬＳＥの場合、またはこれがＰＯＳＴ  ＡＴであって、出力ＭＡＣがＨＯＳＴＭＡＣだった場合は、パススルー理由コードおよび前のパススルーフィールドを埋める。ＳＡＴエントリが見つかったものの、無視ビットがセットされている場合、このパケットは、そのノードによるＩＰＳｅｃ処理が不要である。パイプライン操作を有効にせずに「受信操作」に進む。それ以外の場合は先に進む。
８）ＳＡＴＥ情報を用いて、ＡＵＴＨブロックまたはＸＥＳブロックに転送するデータを構成する。ＡＨおよびＥＳＰの両方について認証が必要であり、これがＡＨパスの場合は、暗号化解除をオンにせず、このヘッダの後に何か他のものがあるかどうかを調べるために戻ることをしない。そうしないで「受信操作」に進む。暗号化解除をオンにしなければならないかどうかを調べるために、サブ反復が終わるたびにこのステップに戻る。暗号化解除をオンにしたばかりの場合は、後続のヘッダおよびデータのソースとしてＸＥＳを用いることに切り替え、暗号化されたペイロードがＴＣＰ／ＵＤＰである可能性があるので次のステップに進む。
９）最後に、ＵＤＰ／ＴＣＰチェックサムをオンにする。時間が経過したら、ＵＤＰおよびＴＣＰのチェックサム値を保存する。この時点では、受信パイプラインは、トランスポートプロトコルがＴＣＰ／ＵＤＰかそれ以外かを認識していない。これは、ＥＳＰが次のヘッダフィールドをトレーラに格納するからである。したがって、両方を格納して、チェックサムを計算し、実際のプロトコルの種類が明らかになったらそのチェックサム計算値を適用するか無視する。「受信操作」に進む。
【０２１４】
[00231]受信パイプライン１４００を構成した後、実際にデータを処理するには、「受信操作」のステップを実行する。ただし、受信操作のステップが実行される前に、受信パイプラインが、ＥＳＰが用いられているかどうかを確認する。
【０２１５】
[00232]具体的には、ＥＳＰの使用時に、ＥＳＰトレーラ内の次のヘッダフィールドを読み出すまで、暗号化されたデータのプロトコルの種類が不明である。さらに、カプセル化されたパケットの長さは、ＥＳＰトレーラの直前のパディング長が読み出されるまで不明である。暗号化がチェックサムとパイプライン化されているとすれば、これは、チェックサム計算において、ａ）ＵＤＰチェックサムを計算するのか、ＴＣＰチェックサムを計算するのかが認識されていないことと、ｂ）パディングデータおよびＥＳＰトレーリングデータが含まれることとを意味する。この問題に対処するために、チェックサムは、（ＲＨＢに書き込まれた最新のブロックを読み出して）パディングデータを減算し、正しいｐｒｏｔｏ４数を加算する。
１）「受信操作」では、まず、入力を読み込み、出力をＲＨＢに向け、パイプライン構成に従って処理する。これらの処理ステップは、ＡＵＴＨモジュール１４１０、ＸＥＳモジュール１４２０、およびチェックサムモジュール１４３０によって取り扱われる。
２）受信パイプラインが、パケットを完全に処理した後、すべてのパイプライン操作を構成解除する。
３）認証が有効だった場合は、受信パイプラインが、認証が成功したかどうかを検査する。認証が有効でなく、暗号化解除とパイプライン化されていた場合、処理は、暗号化、ＲＨＢからの入力、再暗号化、およびＰＴの設定のためにパイプラインをセットアップすることに進む。これが失敗しても、暗号化解除が行われていなければ、ＰＴを設定する（すなわち、パススルーとマーキングする）。
成功した場合であって、
ＵＤＰ／ＴＣＰチェックサムが有効だった場合は、ＵＤＰ／ＴＣＰチェックサムが一致しているかどうかを調べ、ＶＡＬＩＤ＿ＣＨＥＣＫＳＵＭを記録するか、パススルーオンエラーとマーキングする。
暗号化解除が有効だった場合は、暗号化解除が成功したかどうか（パディング長エラーがなかったかどうか）を確認する。
エラーの場合はパススルーとマーキングする。
４）受信パイプラインがＡＨの認証のみのパスを完了したばかりであり、それが最後でなかった場合は、既に開示したように、構成パイプラインのステップ８に戻る。
５）最後に、ＩＰＳｅｃパケットが完結していて、それが２回目だった場合、または次のヘッダがＩＰｖ４でもＩＰｖ６でもなかった場合は、前述のステップ１に戻る。それ以外の場合は、既に開示したように構成パイプラインのステップ２に進み、可能性のある内側ＩＰＳｅｃパケットを処理する（または、少なくとも内部ＩＰヘッダの妥当性検査を行う）。
【０２１６】
[00233]図１５は、本発明のシーケンスプロセッサの送信パイプライン１５００を示す図である。この図１５は、フローチャートと見ることもできる。送信パイプライン１５００の場合、適用される操作は、受信操作の逆である。さらに、それらの順序も逆になる。図１５は、パケットの流れと、パイプラインを通る可能な再循環を示す。最も内側のプロトコル（ＴＣＰ／ＵＤＰ）を最初に処理し、最も外側のプロトコル（ＩＰ）を最後に処理しなければならない。送信パイプラインは、送信に関しては、最大で２つの操作（暗号化１５２０および認証１５３０）を通るようにパイプライン化できる。ＵＤＰ／ＴＣＰチェックサム１５１０には、独立したパスが必要である。理由は、ＴＣＰ／ＵＤＰヘッダ内のチェックサムフィールドを更新しなければならないこと、およびそのフィールドが暗号化ステージおよび認証ステージへの入力の一部であり、パケットが暗号化または認証の処理を受ける前に再循環されなければならないことである。
送信時に所与のフレームに対して実行しなければならない操作は、ＣＦＨ内のフィールドによって決まる。
【０２１７】
[00234]考えられる構成は、ＵＤＰ／ＴＣＰチェックサムおよび／または以下の２つのパイプラインのいずれかのサブセットを含むことができる。
ＥＳＰ暗号化→ＥＳＰ認証
ＥＳＰ暗号化→ＡＨ認証
【０２１８】
[00235]受信操作の場合と同様に、ＡＨおよびＥＳＰは同じ認証装置を用いるので、ＡＨ認証をＥＳＰ認証にパイプライン化することは、複製装置を用意しないと不可能である。複数の認証が必要な場合は、第１の認証ステージの結果をＲＨＢに送らなければならない。最後の認証ステージだけが、ＥＳＰ暗号化および／またはＵＤＰ／ＴＣＰチェックサムとのパイプライン化が可能である。
【０２１９】
[00236]送信パイプライン操作は、反対の向きで進められる。各操作について、ＰＲＥ  ＡＴフラグがＳＰの現在の側と一致すると仮定すると、送信パイプラインの構成方法は以下のとおりである。
１）適用する必要があるすべての操作が、ＣＦＨから決定できる。ＣＦＨは、通常、パイプライン自体で処理されないので、ヘッダ解析を、実際の受信操作とパイプライン化できる。
２）ＣＦＨ．ＧＥＮ＿ＩＰ＿ＣＨＥＣＫＳＵＭの場合は、ＩＰヘッダチェックサム生成をアクティブ化し、ＩＰヘッダを記録し、それらのチェックサムも同様に計算する（ＩＰＳｅｃトンネルが有効であれば、複数ある可能性がある）。ヘッダが更新されると同時にＧＥＮビットをクリアする。
３）ＣＦＨ．ＧＥＮＥＲＡＴＥ＿｛ＴＣＰ，ＵＤＰ｝＿ＣＨＥＣＫＳＵＭの場合は、内側ＴＣＰ／ＵＤＰヘッダに至るまで、ヘッダを解析する。内部ＴＣＰ／ＵＤＰヘッダがある場合は、ＴＣＰ／ＵＤＰチェックサムを実行するパイプラインを構成し、「受信操作」を実行してＲＨＢに出力する。ＴＣＰ／ＵＤＰおよびＩＰについてヘッダのチェックサム値を更新し、ＧＥＮビットをクリアする。
４）ＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴ＞０の場合は、最も深い、カプセル化されたヘッダに適用される引数（ＳＡＴインデックス）を取得する。ＭＲＵエントリに照らしてインデックスをチェックする。インデックスが一致していれば、このＳＡＴに基づいてパイプラインを構成する（次のステップに進む）。見つからない場合は、ＴＢＬブロックにルックアップを要求する。ＴＢＬブロックで行われる処理では、キャッシュおよびメモリをチェックし、すべての可能性がなくなった場合か、一致が見つかった場合のみ戻る。エントリが見つからなかった場合は、パススルー理由コードをＩＮ＿ＳＡＴＥ＿ＮＯＴ＿ＦＯＵＮＤで埋める。パススルー理由コードおよび前のパススルーフィールドを埋める。ＳＡＴエントリが見つかったものの、無視ビットがセットされている場合、このパケットは、そのノードによるＩＰＳｅｃ処理が不要である。パイプライン操作をまったく有効にすることなく、「送信操作」に進む。これらには、後述する一連のデータ処理ステップが含まれる。
５）ＳＡＴＥ情報を用いて、ＡＵＴＨブロックまたはＸＥＳブロックに転送するデータを構成する。ＡＨおよびＥＳＰの両方について認証が必要であって、これがＥＳＰパスである場合は、（ＥＳＰ  ＡＵＴＨデータに基づいて）暗号化およびＡＵＴＨをオンにし、「送信操作」に進む。ＡＨ認証をオンにしなければならないかどうかを調べるために、サブ反復が終わるとこのステップに戻る。ＡＵＴＨパスが１つだけ実行される場合は、このステップに戻る必要がない。このパスの後、ＳＥＣＵＲＩＴＹ＿ＯＰ＿ＣＯＵＮＴをデクリメントし、ステップ４に戻る。
【０２２０】
[00237]「送信操作」の各ステップは以下のとおりである。
１）入力を読み込み、示されたデータフローに従って、有効化された操作を適用する。これらのステップは、ＡＵＴＨ  １５３０、ＸＥＳ  １５２０、チェックサム１５１０の各計算モジュールによって取り扱われる。
２）パケットを完全に処理した後、すべてのパイプライン操作を構成解除する。
３）これがチェックサムパスであった場合は、前述の送信パイプラインの構成（ステップ４）に戻る。
４）ＥＳＰ認証パスが完了したばかりであって、ＡＨ認証が残っている場合は、送信パイプラインの構成（ステップ４）に戻る。それ以外の場合は終了である。
注意：ＥＳＰが、ＩＰパケット長を変更するパディングを導入する場合は、ヘッダ長フィールドとチェックサムを調整しなければならない（この時点では、ドライバが自動的に、ＥＳＰに必要なパディングの余地を残すものとする）。
【０２２１】
[00238]ＳＰは、以下の方法を実行してＩＰヘッダの妥当性を検査する。特定のフィールドのオフセットおよび長さが、ＩＰｖ６とＩＰｖ４とでは異なることに注意されたい。さらに、このプロトコルレイヤをダブルチェックするのに用いる外部情報は、ＩＰヘッダがトンネルＩＰかトランスポートＩＰかによって異なる。
１）これが外側ＩＰヘッダの場合は、ＣＦＨ０  ＰＲＯＴＯ３をＩＰｖ４またはＩＰｖ６とする。これが内側ヘッダの場合は、前のヘッダの次のヘッダフィールドをＩＰｖ４またはＩＰｖ６とする。
２）長さフィールドを調べる（外側ＩＰに関してＭＩから渡されたｄｗｏｒｄ＿ｃｏｕｎｔを用いるか、カプセル化されたプロトコルのペイロード値からヘッダとパディングを減算したものに基づくパケットの計算値を用いる）。
３）ＩＰｖ４の場合は、ヘッダのチェックサムを計算し、可変フィールドをスキップする。
４）ＩＰｖ６の場合は、拡張ヘッダをスキャンして、最初のＩＰＳｅｃ、ＴＣＰ／ＵＤＰ、またはＩＰヘッダへのオフセットを見つける。
５）上述の方法に何か問題がある場合は、ＳＰＣＴＬレジスタで与えられるエラー出力ＭＡＣにフレームをパススルーする。
【０２２２】
[00239]チェックサム計算は、メイン操作パイプラインモジュール１３２５で実行される。パケットの末尾が処理されるまではトランスポートプロトコルが不明な場合があるので（ＥＳＰトレーラ）、チェックサムは、実際には、ＳＰをパススルーするすべてのパケットについて計算される。ただし、パケットがTCPパケットでもUDPパケットでもない場合、その計算値は廃棄される。
【０２２３】
[00240]パイプラインがチェックサムを計算するように構成されている場合、チェックサムは、データがパイプラインをパススルーするときに計算される。ＴＣＰとＵＤＰのチェックサムの計算は、同じように、最後に適用ステップが終わるまでに処理される。これは効率的であり、これによって、（ＥＳＰパケットの暗号化されたトレーラの中にある）ＥＳＰの次のヘッダフィールドが処理されるまでパケットの種類が不明でも処理が可能になる。以下の開示では、どのフィールドが検査されるかを詳述する。ネットワークトランスポートプロトコルはＩＰｖ４であるとする。ＩＰｖ６の場合は、擬似ヘッダにＩＰｖ６アドレスを含めなければならない。
【０２２４】
[00241]ＳＰは、以下の方法でＴＣＰ／ＵＤＰチェックサムを計算する。
１）ヘッダの解析時に記録されたオフセットを用いて、ＵＤＰ／ＴＣＰ擬似ヘッダの読み出し可能なフィールドを読み出す（ソースＩＰアドレス、宛先ＩＰアドレス、ゼロバイト、８ビットプロトコル値、および１６ビットＵＤＰ／ＴＣＰ長）。プロトコルの値および長さのフィールドは、パケット全体が処理された後に埋められる。同様に、実際のヘッダからのチェックサム値は、最後に計算から除去される。この時点では、ＵＤＰとＴＣＰのチェックサムがあるオフセットでの値を記録する。パケットの残りを、１ダブルワードずつパススルーする。実際のチェックサム値を記録し、計算中はＵＤＰチェックサム値にゼロを用いる。
２）実行時のチェックサムを計算し、結果をパイプラインの次のステージに渡す。
３）計算されたチェックサムがＥＳＰパケット内で暗号化されていた場合、処理された何バイトかはパディングだった可能性がある。正確なチェックサムを得るためには、パディングの先頭に戻って、それらの値を減算する必要がある（この戻るステップでは、再循環や、ＳＰの外側のメモリへのアクセスが不要であることに注意されたい。そのパケットの最後にあるそれらのパディングバイトは、そのままＲＨＢになければならないからである）。
４）プロトコルの種類がＵＤＰの場合は、ＵＤＰオフセットを用いてＵＤＰチェックサムを減算し、ＵＤＰの長さとプロトコルの種類（０ｘ１７）をチェックサムに加算する。プロトコルの種類がＴＣＰの場合は、ＴＣＰオフセットを用いてＴＣＰチェックサムを減算し、（パケット長からパディングを減算したものに基づいて計算された）ＴＣＰの長さとプロトコルの種類（０ｘ６）をチェックサムに加算する。そのパケットがＴＣＰでもＵＤＰでもない場合は、チェックサムのテストをスキップし、最終段に進む。チェックサムの妥当性を検査する場合は、ステップ５を実行する。チェックサムを生成する場合は、ステップ６を実行する。
５）チェックサムが一致する場合は、次の循環でＣＦＨ内のＶＥＲＩＦＩＥＤ＿＊＿ＣＨＥＣＫＳＵＭ値を設定する準備をする。チェックサムが一致しない場合は、ＣＦＨのＰＴ＿ＲＥＡＳＯＮフィールドを＊＿ＢＡＤ＿ＣＨＥＣＫＳＵＭに設定し、ＰＴ＿ＢＥＦＯＲＥをＰＴ＿ＢＥＦＯＲＥ＿ＭＩ＿ＯＵＴＰＵＴに設定する。最終段に進む。
６）ＲＨＢ／メモリへの書き込みを生成し、計算されたチェックサム値をパケット内に記録する。
【０２２５】
[00242]本ＮＰＵの別のユニークな態様は、乱数を与える機能である。具体的には、一実施形態では、ＳＰにおける乱数発生は、変更する一組のエントロピービットを検査し、最後に標本抽出したときから変化しているエントロピービットを、前のサイクルで集めたエントロピービットと連結する。
【０２２６】
[00243]例えば、１２ダブルワードのエントロピーが集められている場合、または、ＳＰあるいはＭＡＣの一部でランダム値が必要な場合は、ランダムモジュールが、乱数を認証アルゴリズム（ＭＤ−５またはＳＨＡ）の１つに通して並べ替えることにより、乱数を白色化する。これは、１２８ビット鍵（その前の認証サイクルの下位１２８ビット）と１２ダブルワードとをＡＵＴＨモジュールにプッシュすることを意味する（１２ダブルワード未満しか使用できない場合は、使用可能なものを送り、ＡＵＴＨモジュールに、５１２ビット未満のブロックの取得を扱わせる。ＳＨＡは、１６０ビット値を生成し、ＭＤ−５は、１２８ビット値を生成する。いずれの場合も、下位１２８ビットが保存される。下位６４ビットが乱数として返される。１２８ビットすべてが保存され、次の白色化パスの鍵として使用される。上位６４ビットは秘密鍵として扱われる。さらに、秘密鍵の下位ビットによって、次の白色化がＭＤ５（１）か、ＳＨＡ（０）かが決まる。
【０２２７】
[00244]ＭｉＭＡＣが乱数を要求することに対応するために、本方法では、６４ビットの乱数を１６ビットずつのチャンクに分けて４つのＭＡＣに分配する。ＭＡＣは、その値を、今後の使用に備えてキャッシュする。基本的に唯一の変更は、要求／ビジー信号を、ＳＰ内からのみ多重化するのではなく、ＭＡＣの１つから多重できる点である。
【０２２８】
[00245]図１６は、本発明のアドレス変換（ＡＴ）サブユニット４４０のブロック図である。具体的には、ＮＰＵのＡＴサブユニットは、ネットワークアドレス変換（１６０５、１６４０）、ブリッジング１６１０、ルーティング１６１０、マルチキャスティング１６２０、およびファイアウォーリング１６３０を実行する。ＮＰＵのＡＴ装置は、４ポートスイッチ、ルータ、およびゲートウェイのネットワーク通信を加速する、ソフトウェアで設定されるハードウェアを備え、それによって、ブリッジング、ルーティング、ファイアウォーリング、ネットワークアドレス変換、マルチキャスティングの各操作を加速する。これらのＡＴ動作を支援するために、バッファ１６５０および１６５５を備える。これら各バッファの一部はＳＳＲＡＭに実装され、残りの部分はメインメモリに実装される。
【０２２９】
[00246]動作時のＡＴサブユニットは、ＳＰからパケットを受け取り、着信インターフェースがネットワークアドレス変換（ＮＡＴ）を実行しているかどうかを判別する。この照会に対して肯定応答が行われた場合は、ＡＴサブユニットがインバウンドＮＡＴフィルタリングを実行する。
【０２３０】
[00247]次にＡＴサブユニットは、ＭＡＣ宛先アドレスが、特定のインターフェースに関連付けられたＭＡＣアドレスと一致するかどうかを判別する。ＭＡＣ宛先アドレスが一致する場合は、パケットがルーティングされる（そのようなルーティングをハードウェアがサポートしている場合）。そのようなルーティングをハードウェアがサポートしていない場合、パケットは、処理のためにソフトウェアに送られる。
【０２３１】
[00248]ＭＡＣ宛先アドレスが、特定のインターフェースに関連付けられたＭＡＣアドレスと一致しない場合、パケットは、ＡＲＴ内でＭＡＣ宛先をルックアップし、ＡＲＴインデックスをｘＣＦＨに格納することによってブリッジされる。
【０２３２】
[00249]パケットが、ＡＴサブユニットによって、マルチキャストベースアプリケーションの一部であると判断された場合、パケットは、そのマルチキャスト宛先アドレスに従ってマルチキャストされる。
【０２３３】
[00250]次に、そのパケットに関する、ＡＴサブユニットによってファイアウォーリングされた接続が、ファイアウォール接続テーブルに従って追跡される。
【０２３４】
[00251]最後にＡＴサブユニットが、アウトバウンドＮＡＴフィルタリングを実行する。例えば、送信インターフェースがＮＡＴ対応であることをＡＴサブユニットが検出した場合は、ＮＴｖ４＿ｉｎｄｅｘがｘＣＦＨに格納される。
【０２３５】
[00252]図１７は、ホストコンピュータの各リソースが本発明のネットワーク処理装置４００を介してネットワーク接続されている場合のブロック図である。具体的には、ホスト１７５０が、ＭＡＣ  １７１５（すなわち、ｈｏｓｔ  ＭＡＣ）を介してＮＰＵ  ４００と通信する。そしてそのＮＰＵには、複数のＸＰＵと他のホストリソース１７３０が、ＮＰＵのＭＡＣインターフェース（ＭＩ）（図示せず）とインターフェースする複数のＭＡＣ  １７２５を介して接続される。
【０２３６】
[00253]図１８は、本発明のネットワーク処理装置１８２０と通信している仮想パーソナルコンピュータまたは仮想ホストのネットワークのブロック図である。より具体的には、図１８は、単一システム（または単一シャーシ）１８００内の仮想パーソナルコンピュータ（ＶＰＣ）のネットワークを示す。このシステムは、単一パーソナルコンピュータ、セットトップボックス、ビデオゲームコンソールなどであってもよい。
【０２３７】
[00254]運用時には、図１８は、複数の仮想ホスト１８１０ａ〜ｅを示す。これらは、異なる複数のオペレーティングシステム（例えば、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＷｉｎｄｏｗｓ（別々の２つのシステム１８１０ａおよび１８１０ｂ）、Ｌｉｎｕｘ  １８１０ｃなど）、ロービデオゲームアプリケーション１８１０ｄ、または他のローアプリケーション１８１０ｅを含むことができる。ここで、各仮想ホストは、ストレージ処理装置１８３０を、物理ストレージ１８４０を有するリモートファイルサーバとして扱う。本質的には、図１８は、「ボックス内のＶＰＣネットワーク」を表していると見ることができる。
【０２３８】
[00255]一実施形態では、ＮＰＵ  １８２０は、システム内部で各ＶＰＣのための複数のＩＰアドレスを管理する。例えば、ＮＰＵ  １８２０にパブリックＩＰアドレスを割り当て、各ＶＰＣには、（例えば、動的ホスト構成プロトコル（ＤＨＣＰ）に従って）プライベートＩＰアドレスを割り当てることができる。これによって、各ＶＰＣが、互いに、かつ、ＳＰＵと、標準ネットワーキングプロトコルを用いて互いに通信できる。
【０２３９】
[00256]本発明のＸＰＵは、通信チャネル経由でホストＣＰＵと結合される１つまたは複数の物理デバイスとして実装できることを理解されたい。あるいは、ＸＰＵは、１つまたは複数のソフトウェアアプリケーション（またはソフトウェアと、例えば特定用途向け集積回路（ＡＳＩＣ）を用いたハードウェアとの組合せ）で表すこともできる。この場合、ソフトウェアは、ストレージメディア（例えば、ＲＯＭ、磁気または光ドライブ（またはディスケット））からロードされ、コンピュータのメモリ内で操作される。したがって、本発明の（関連する方法およびデータ構造を含む）ＸＰＵは、コンピュータ可読メディア（例えば、ＲＯＭまたはＲＡＭメモリ、磁気または光ドライブ（またはディスケット）、その他）に格納できる。
【０２４０】
[00257]本明細書では、本発明の教示を組み込んだ各種の実施形態について詳細に説明してきたが、当業者であれば、それらの教示を組み込んだ他の様々な変形実施形態を容易に考案できよう。クレームでは、方法クレームの各要素を特定の順序で列挙したが、これは、クレームの各要素が番号順またはアルファベット順に列挙されていたとしても、本発明の実行順序を意味するものではない。
【図面の簡単な説明】
【０２４１】
【図１】従来の内部コンテンツソースおよびデータパイプを示すブロック図である。
【図２】本発明の新規な内部コンテンツソースおよびデータパイプを示すブロック図である。
【図３】複数のネットワーク処理装置を介してホストコンピュータのネットワークが互いに通信している場合のブロック図である。
【図４】本発明のネットワーク処理装置のブロック図である。
【図５】図４のネットワーク処理装置（ＮＰＵ）４００の詳細を示す図である。
【図６】本発明のＭＡＣインターフェース（ＭＩ）サブユニットのブロック図である。
【図７】ＭＡＣからの入力フレームの、ＭＩによる処理の方法のフローチャートである。
【図８】ＭＡＣへの出力ＦＩＦＯからの出力フレームの、ＭＩによる処理の方法のフローチャートである。
【図９】本発明のＨｏｓｔＭＡＣ（ＨＭ）サブユニットのブロック図である。
【図１０】フレームを「ＳＷ→ＨＭ」プッシュバッファからＭＩに転送する方法のフローチャートである。
【図１１】フレームをＭＩから「ＨＭ→ＳＷ」プッシュバッファに転送する方法のフローチャートである。
【図１２】本発明のシーケンスプロセッササブユニットのブロック図である。
【図１３】共通コアロジックを有するシーケンスプロセッサ（ＳＰ）サブユニットのブロック図である。
【図１４】本発明のシーケンスプロセッサ（ＳＰ）の受信パイプラインを示す図である。
【図１５】本発明のシーケンスプロセッサ（ＳＰ）の送信パイプラインを示す図である。
【図１６】本発明のアドレス変換サブユニット４４０のブロック図である。
【図１７】ホストコンピュータの各リソースが本発明のネットワーク処理装置を介してネットワーク接続されている場合のブロック図である。
【図１８】本発明のネットワーク処理装置と通信している仮想パーソナルコンピュータのネットワークのブロック図である。
【図１】
2006511126.tif 000004
【図２】
2006511126.tif 000005
【図３】
2006511126.tif 000006
【図４】
2006511126.tif 000007
【図５】
2006511126.tif 000008
【図６】
2006511126.tif 000009
【図７】
2006511126.tif 000010
【図８】
2006511126.tif 000011
【図９】
2006511126.tif 000012
【図１０】
2006511126.tif 000013
【図１１Ａ】
2006511126.tif 000014
【図１１Ｂ】
2006511126.tif 000015
【図１２】
2006511126.tif 000016
【図１３】
2006511126.tif 000017
【図１４】
2006511126.tif 000018
【図１５】
2006511126.tif 000019
【図１６】
2006511126.tif 000020
【図１７】
2006511126.tif 000021
【図１８】
2006511126.tif 000022
【国際調査報告】
2006511126.tif 000023
2006511126.tif 000024
2006511126.tif 000025
2006511126.tif 000026
2006511126.tif 000027
2006511126.tif 000028