(57)【要約】【課題】ネットワークパケットをシステム内の他のコンポーネントが正確に処理および送信できるようにする、ソフトウェア・デファインド・ネットワーキング（ＳＤＮ）システムを提供する。【解決手段】システムは、パケットの変更および転送のためのルックアップを生成し決定を行うエンジン（ＬＤＥ）１００を含み、このＬＤＥ１００は、各入力トークン２００に対するルックアップキーを生成するキー生成器１１５と、ルックアップキーに対応するルックアップ結果のコンテンツに基づいて入力トークンを変更することによって出力トークンを生成する出力生成器１２５とを備える。【選択図】図１
2015165650.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムにおいてパケットの変更および転送のためのルックアップを生成し決定を行うエンジン（ＬＤＥ）を含む装置であって、
前記ＬＤＥは、
各入力トークンに対するルックアップキーを生成するキー生成器と、
前記ルックアップキーに対応するルックアップ結果のコンテンツに基づいて前記入力トークンを変更することによって出力トークンを生成する出力生成器とを備えた、装置。
【請求項２】
請求項１に記載の装置において、
前記ＬＤＥが、さらに、
入力トークンが前記ＬＤＥで処理される前に、前記入力トークンを一時的に格納する入力バッファと、
前記入力トークンそれぞれのフィールドの位置を特定するテンプレートテーブルと、
前記入力トークンを前記ルックアップ結果に結合し、前記ルックアップ結果と結合された前記入力トークンを前記出力生成器に送信するルックアップ結果収集器と、
前記出力トークンが、このＬＤＥに返送されるものか、ＳＤＮシステム内の他のエンジンに返送されるものかを判定するループバックチェッカと、
ループバックトークンを格納するループバックバッファとを備えた、装置。
【請求項３】
請求項２に記載の装置において、前記テンプレートテーブルへのテンプレートルックアップポインタが、前記入力トークンの内部の「テンプレートＩＤ」フィールドの値である、装置。
【請求項４】
請求項３に記載の装置において、前記テンプレートテーブルのテンプレートルックアップ結果が、前記入力トークン内のトークン層の数およびこれらトークン層のオフセット、ならびに前記入力トークンの内部では入手できない、追加の制御ビットであるメタデータビットの情報を含む、装置。
【請求項５】
請求項２に記載の装置において、
前記ルックアップ結果収集器が、トークンバッファおよびルックアップ結果バッファを含み、
前記トークンバッファおよび前記ルックアップ結果バッファそれぞれの深さが、前記ＬＤＥが最大限のスループットで動作することを保証するように、リモート検索エンジンの遅延に少なくとも等しい、装置。
【請求項６】
請求項２に記載の装置において、前記ループバックチェッカによる前記判定が、前記出力トークンの内の「Dst_EngineAddress」フィールドと前記ＬＤＥのアドレスとの比較に基づく、装置。
【請求項７】
請求項２に記載の装置において、デッドロックを回避するにように、前記ループバックバッファの内部のトークンが、前記入力バッファ内のトークンよりも高い優先度を有する、装置。
【請求項８】
請求項２に記載の装置において、前記入力バッファおよび前記ループバックバッファがＦＩＦＯバッファである、装置。
【請求項９】
請求項１に記載の装置において、
前記キー生成器が、
命令を生成するコントロールパスと、
前記コントロールパスで生成される命令を実行するデータパスとを含む、装置。
【請求項１０】
請求項９に記載の装置において、
前記コントロールパスが、
前記入力トークンから制御ビット、かつ、対応するテンプレート情報からメタデータビットを抽出する制御ビット抽出器と、
前記入力トークンおよび対応するテンプレートメタデータ内の多ビットワードを比較するＭＵＸ／ＣＭＰコーンと、
前記制御ビットおよび前記ＭＵＸ／ＣＭＰコーンの出力が、前記ＬＤＥのために設定された特定のネットワーク機能およびプロトコルの条件およびルールを満たすか否かをチェックするＭＵＸ／ＬＵＴ論理コーンと、
前記ＭＵＸ／ＬＵＴ論理コーンの出力に基づいて前記命令を生成する複数の命令テーブルとを含む、装置。
【請求項１１】
請求項１０に記載の装置において、前記制御ビット抽出器が、前記制御ビットおよび前記メタデータビットのうちのどのビットを抽出するかをユーザが選択できるように、ソフトウェアによって再構成可能である、
装置。
【請求項１２】
請求項１０に記載の装置において、
前記ＭＵＸ／ＣＭＰコーンが、複数のＭＵＸ／ＣＭＰセルを並列に含み、
前記ＭＵＸ／ＣＭＰセルが、それぞれ、
前記入力トークンおよび前記対応するテンプレートメタデータから２つのワードを選択する２つの再構成可能なマルチプレクサと、
一致／等しい（＝＝）、より大きい（＞）、およびより小さい（＜）を含む少なくとも３つの演算をサポートする再構成可能な比較器とを含む、装置。
【請求項１３】
請求項１２に記載の装置において、前記ＭＵＸ／ＣＭＰセルが、それぞれ、前記入力トークンからのひとつのワードと、前記対応するテンプレートメタデータの一定値とを比較する、装置。
【請求項１４】
請求項１０に記載の装置において、
前記ＭＵＸ／ＬＵＴ論理コーンは、複数のステージを含み、これらステージは、それぞれ、複数のＭＵＸ／ＬＵＴセルを並列に含む、装置。
【請求項１５】
請求項１４に記載の装置において、
前記ＭＵＸ／ＬＵＴセルは、それぞれ、
当該ＭＵＸ／ＬＵＴセルの入力ビットから６つのビットを選択する６つの再構成可能なマルチプレクサと、
前記６つの再構成可能なマルチプレクサの６つの出力ビットによってインデックスされた、６４ビットを含む再構成可能なルックアップテーブル（ＬＵＴ）とを含む、装置。
【請求項１６】
請求項１０に記載の装置において、前記コントロールパスによって返される複数の命令が、前記ルックアップキーを生成できる、装置。
【請求項１７】
請求項１６に記載の装置において、コピー命令およびＡＬＵ命令からなる２種類の命令がサポートされる、装置。
【請求項１８】
請求項１７に記載の装置において、
前記コピー命令が、ソースからのデータまたは一定値を出力キーにおけるある位置にコピーし、
前記ソースが前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである、装置。
【請求項１９】
請求項１７に記載の装置において、
前記ＡＬＵ命令が、２つのオペランドのＡＬＵ結果を出力キーにおけるある位置にコピーし、
前記２つのオペランドが、入力ソースから取得されるものであり、
前記入力ソースが、前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである、装置。
【請求項２０】
請求項１７に記載の装置において、
前記ＡＬＵ命令が、一定値と１つのオペランドのＡＬＵ結果を出力キーにおけるある位置にコピーし、
前記オペランドが、入力ソースから出力キーにおけるある位置に取得されるものであり、
前記入力ソースが、前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである、装置。
【請求項２１】
請求項１７に記載の装置において、前記ＡＬＵ命令のためのＡＬＵ演算が、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、およびビット単位の右シフト（＞＞）のうちの１つである、装置。
【請求項２２】
請求項９に記載の装置において、
前記データパスが、
前記コントロールパスが前記命令を生成するのを待つ間に前記入力トークンをバッファリングする遅延整合キューと、
前記ルックアップキーを生成するために、前記コントロールパスによって生成される前記命令の全てを並行に実行する命令実行ブロックとを含む、装置。
【請求項２３】
請求項２２に記載の装置において、前記キー生成器が最大限のスループットで動作できるように、前記遅延整合キューが、前記コントロールパスの遅延に等しい深さを有するＦＩＦＯバッファまたはシフトレジスタである、装置。
【請求項２４】
請求項２２に記載の装置において、前記ルックアップキーが、全ての命令が実行される前に、全てゼロで初期化される、
装置。
【請求項２５】
請求項１に記載の装置において、前記出力生成器が、前記キー生成器と類似の設計を有し、前記キー生成器の入力データおよび出力データとは異なる入力データおよび出力データを有する、装置。
【請求項２６】
請求項２５に記載の装置において、前記出力生成器の前記入力データが、前記入力トークン、対応するテンプレート情報からのメタデータビット、および前記ルックアップ結果を含む、装置。
【請求項２７】
請求項２５に記載の装置において、前記出力生成器の前記出力データが、前記入力トークンを変更したものである、装置。
【請求項２８】
請求項２５に記載の装置において、
前記出力生成器が、前記キー生成器におけるＭＵＸ／ＣＭＰコーンよりも多いＭＵＸ／ＣＭＰセルを有するＭＵＸ／ＣＭＰコーンを含み、
前記出力生成器が、前記キー生成器におけるＭＵＸ／ＬＵＴ論理コーンよりも多いステージを有するＭＵＸ／ＬＵＴ論理コーンを含む、装置。
【請求項２９】
請求項２５に記載の装置において、前記出力トークンが、全ての命令が実行される前に、前記入力トークンと同じコンテンツを有するように初期化される、装置。
【請求項３０】
請求項１に記載の装置において、前記キー生成器および前記出力生成器の両方のコントロールパスが、異なるネットワーク機能およびプロトコルをサポートするためにユーザが前記ＬＤＥを設定できるように、プログラム可能である、
装置。
【請求項３１】
請求項１に記載の装置において、前記出力トークンのコンテンツが、ＳＤＮシステム内の他のコンポーネントによって用いられて、対応するネットワークパケットが適切に変更および転送される、
装置。
【請求項３２】
ソフトウェア・デファインド・ネットワーク（ＳＤＮ）エンジンにおいてパケットの変更および転送のためにルックアップを生成し決定を行う方法であって、
入力バッファに入力トークンをバッファリングすることと、
前記入力トークンの内部で入手できないメタデータビットを、前記入力トークンそれぞれについて取り出すことと、
前記入力トークンおよび前記メタデータビットそれぞれの少なくとも特定のビットに基づいて前記入力トークンそれぞれに対するルックアップキーを生成することと、
前記ルックアップキーに基づいたルックアップ結果を受信することと、
前記ルックアップ結果および前記入力トークンのコンテンツに基づいて前記入力トークン内の１つ以上のフィールドを変更することと、
前記変更されたトークンがこのエンジンに返送されるものか、ＳＤＮシステム内の他のエンジンに返送されるものかを判定することと、
前記判定に基づいて、ループバックバッファに前記変更したトークンをバッファリングすることであって、前記ループバックバッファ内のトークンが、前記入力バッファ内のトークンよりも高い優先度を有する、バッファリングを行うこととを備える、方法。
【請求項３３】
請求項３２に記載の方法において、トークンのデータフォーマットが、共通部および層部を含む、方法。
【請求項３４】
請求項３３に記載の方法において、
前記共通部が、対応するネットワークパケットの包括的な制御ビットと、テンプレートテーブルへのルックアップポインタの値とを含み、
前記ルックアップポインタの値が、前記トークンの「テンプレートＩＤ」フィールド内に存在する、方法。
【請求項３５】
請求項３４に記載の方法において、さらに、
前記層部における層の数と前記トークンにおける前記層の各オフセットとを取り出すことを備えた、方法。
【請求項３６】
請求項３３に記載の方法において、
前記層部が、対応するネットワークパケットの全てのパースされたパケットヘッダの情報を含み、
前記パースされたパケットヘッダが、それぞれ、前記層部における「コントロール」フィールドおよび「データ」フィールドに関連づけられる、方法。
【請求項３７】
請求項３２に記載の方法において、前記入力バッファおよび前記ループバックバッファが、ＦＩＦＯバッファである、方法。
【請求項３８】
ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムであって、
入来ネットワークパケットを受信し、これら入来ネットワークパケットのヘッダをパースし、トークンを出力するパーサと、
各トークンに対するルックアップキーを生成し、１つ以上のルックアップ結果に基づいて前記トークンを変更する、少なくとも１つのルックアップ・決定エンジン（ＬＤＥ）と、
各ＬＤＥによって送信された各ルックアップキーに対するルックアップ結果を返す検索エンジンと、
前記変更されたトークンに基づいて対応する前記ネットワークパケットの前記パケットヘッダを変更する更新読取り書込み（ＵＲＷ）ブロックと、
前記変更されたパケットヘッダと対応する前記パケットの元のペイロードとを出力のために組み合わせる、パケットメモリ・送信キューブロックとを備えた、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システム。
【請求項３９】
請求項３８に記載のソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムにおいて、前記少なくとも１つのルックアップ・決定エンジンは、複数のルックアップを、連続して行うために直列に、または、同時に行うために並列に連結された複数のルックアップ・決定エンジンを含む、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システム。
【請求項４０】
請求項３８に記載のソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムにおいて、
前記少なくとも１つのルックアップ・決定エンジンが、
前記トークンに対するルックアップキーを生成するキー生成器と、
前記ルックアップキーに関連づけられたルックアップ結果のコンテンツに基づいて前記変更されたトークンを出力する、出力生成器とを含む、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ルックアップキーの生成およびネットワークパケットの修正を行うエンジンアーキテクチャに関し、より詳細には、ソフトウェア・デファインド・ネットワークエンジンにおいてパケット修正・転送のためにルックアップを生成し決定を行う装置および方法に関する。
【背景技術】
【０００２】
従来、ネットワーク装置におけるネットワーキング機能およびプロトコルは、ハードウェアによるＡＳＩＣ設計によって実現されてきた。これらの固定したＡＳＩＣ設計は、新しいプロトコルの導入率を制限する。新しいプロトコルをサポートするハードウェアの変更は、コストと時間の両方の観点から費用がかかる。その結果、ユーザがソフトウェアによって新しい機能およびプロトコルを導入することを可能にするプログラム可能なネットワーキング装置が、より魅力的になりつつある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
新しいネットワークプロトコルを実現する従来技術の方法は、最新の汎用ＣＰＵ上で動作するソフトウェアを用いることである。しかし、現在最大６４ビットでのこれらの汎用ＣＰＵの処理能力では、最大１００Ｇｂｐｓのネットワークのパケットのフローをサポートする現在のネットワーキングシステムのためのリアルタイムの性能を保証できない。
【０００４】
新しいネットワークプロトコルを実現する従来技術の別の方法は、再構成可能なＦＰＧＡチップを用いることである。しかし、ＦＰＧＡチップの論理セル能力における制限により、何百バイトのような大きなサイズを有するネットワークパケットを、最大限のスループットで処理することはできない。さらに、内部相互接続配線が極めて複雑なため、高遅延、低周波数で、ＦＰＧＡチップが動作することになる。ＦＰＧＡチップのこれらの不十分な特性は、最新の企業およびデータセンタのネットワークにおいて要求される複雑なネットワークの機能を行うのに適切ではない。
【課題を解決するための手段】
【０００５】
ソフトウェア・デファインド・ネットワーキング（ＳＤＮ）システムにおいて、提案されるルックアップ・決定エンジン（ＬＤＥ）は、対応するネットワークパケットをシステム内の他のコンポーネントが正確に処理および送信できるように、入力トークンに対するルックアップキーを生成し、ルックアップ結果に基づいて入力トークンを修正（変更）できる。キーの生成およびトークンの修正のための条件およびルールは、ソフトウェアによって完全にプログラム可能であり、ＬＤＥのために設定されたネットワーク機能およびプロトコルに基づく。ＬＤＥは、典型的には２つの主なブロック、すなわち、キー生成器および出力生成器を含む。名前の通り、キー生成器は各入力トークンに対するルックアップキーを生成し、出力生成器は出力トークンを生成する。出力トークンはルックアップ結果に基づいて入力トークンを修正したものである。キー生成器および出力生成器は、同様の設計アーキテクチャを有し、この設計アーキテクチャは、コントロールパスおよびデータパスを含む。コントロールパスは、その入力における特定のフィールドおよびビットが、設定プロトコルの条件を満たすか否かを検査する。コントロールパスは、検査結果に基づきそれに応じて、命令を生成する。データパスは、キー生成器でルックアップキーを生成する命令または出力生成器で出力トークンを生成する命令であって、コントロールパスが生成する全ての命令を実行する。キー生成および出力生成のための条件およびルールは、キー生成器および出力生成器のコントロールパスにおいて完全にプログラム可能である。
【０００６】
一構成において、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムにおいてパケットの変更および転送のためのルックアップを生成し決定を行うエンジンが提供される。前記提供されるエンジンは、簡略化して、ルックアップ・決定エンジン（ＬＤＥ）と名付けられる。前記ＬＤＥは、典型的には、各入力トークンに対するルックアップキーを生成するキー生成器と、前記ルックアップキーに対応するルックアップ結果のコンテンツに基づいて前記入力トークンを変更することによって出力トークンを生成する出力生成器とを備える。
【０００７】
いくつかの実施形態では、前記ＬＤＥは、入力トークンが前記ＬＤＥに処理される前に、前記入力トークンを一時的に格納する入力バッファ（ＦＩＦＯバッファであってもよい）と、前記入力トークン内のフィールドの位置を特定するテンプレートテーブルと、前記入力トークンを前記ルックアップ結果に結合し、前記ルックアップ結果と結合された前記入力トークンを前記出力生成器に送信するルックアップ結果収集器と、前記出力トークンをこのＬＤＥに返送するべきか、ＳＤＮシステム内の他のエンジンに返送すべきかを判定するループバックチェッカと、前記ループバックトークンを格納するループバックバッファ（ＦＩＦＯバッファであってもよい）とをさらに備える。
【０００８】
いくつかの実施形態では、前記テンプレートテーブルへのテンプレートルックアップポインタは、前記入力トークンの内部の「テンプレートＩＤ」フィールドの値である。いくつかの実施形態では、前記テンプレートテーブルのテンプレートルックアップ結果は、前記入力トークン内のトークン層の数およびこれらトークン層のオフセット、ならびに前記入力トークンの内部で入手できない、追加の制御ビットであるメタデータビットの情報を含む。
【０００９】
いくつかの実施形態では、前記ルックアップ結果収集器は、トークンバッファおよびルックアップ結果バッファを含む。前記トークンバッファおよび前記ルックアップ結果バッファそれぞれの深さは、前記ＬＤＥが最大限のスループットで動作することを保証するように、（前記ＬＤＥが生成する各ルックアップキーのためのルックアップ結果を返すことを担う）リモート検索エンジンの遅延に少なくとも等しい。
【００１０】
いくつかの実施形態では、前記ループバックチェッカによる前記判定は、前記出力トークン内の「Dst_EngineAddress（宛先エンジンアドレス）」フィールドと前記ＬＤＥのアドレスとの比較に基づく。
【００１１】
いくつかの実施形態では、デッドロックを回避するように、前記ループバックバッファの内部のトークンが、前記入力バッファ内のトークンよりも高い優先度を有する。
【００１２】
いくつかの実施形態では、前記キー生成器は、命令を生成するコントロールパスと、前記コントロールパスで生成される命令を実行するデータパスとを含む。
【００１３】
前記コントロールパスは、前記入力トークンから制御ビット、かつ、対応するテンプレート情報からメタデータビットを抽出する制御ビット抽出器と、前記入力トークンおよび対応するテンプレートメタデータ内の多ビットワードを比較するＭＵＸ／ＣＭＰコーンと、前記制御ビットおよび前記ＭＵＸ／ＣＭＰコーンの出力が、前記ＬＤＥのために設定された特定のネットワーク機能およびプロトコルの条件およびルールを満たすか否かをチェックするＭＵＸ／ＬＵＴ論理コーンと、前記ＭＵＸ／ＬＵＴ論理コーンの出力に基づいて前記命令を生成する複数の命令テーブルとを含む。
【００１４】
いくつかの実施形態では、前記制御ビット抽出器は、前記制御ビットおよび前記メタデータビットのうちのどのビットを抽出するかをユーザが選択できるように、ソフトウェアによって再構成可能である。
【００１５】
いくつかの実施形態では、前記ＭＵＸ／ＣＭＰコーンは、複数のＭＵＸ／ＣＭＰセルを並列に含み、前記ＭＵＸ／ＣＭＰセルは、それぞれ、前記入力トークンおよび前記対応するテンプレートメタデータから２つのワードを選択する２つの再構成可能なマルチプレクサと、一致／等しい（＝＝）、より大きい（＞）、およびより小さい（＜）を含む少なくとも３つの演算をサポートする再構成可能な比較器とを含む。前記ＭＵＸ／ＣＭＰセルは、それぞれ、前記入力トークンからの１つのワードと、前記対応するテンプレートメタデータの一定値とを比較する。
【００１６】
いくつかの実施形態では、前記ＭＵＸ／ＬＵＴ論理コーンは、複数のステージを含み、これらステージは、それぞれ、複数のＭＵＸ／ＬＵＴセルを並列に含む。前記ＭＵＸ／ＬＵＴセルは、それぞれ、当該ＭＵＸ／ＬＵＴセルの入力ビットから６つのビットを選択する６つの再構成可能なマルチプレクサと、前記６つの再構成可能なマルチプレクサの６つの出力ビットによってインデックスされた、６４ビットを含む再構成可能なルックアップテーブル（ＬＵＴ）とを含む。
【００１７】
前記コントロールパスによって返される複数（多数）の命令は前記ルックアップキーを生成できる。いくつかの実施形態では、２種類の命令、すなわち、コピー命令およびＡＬＵ命令が、前記コントロールパスによって生成される。前記コピー命令は、ソースからのデータまたは一定値を出力キーにおけるある位置にコピーでき、前記ソースは前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである。前記ＡＬＵ命令は、２つのオペランド（演算対象）のＡＬＵ結果を出力キーにおけるある位置にコピーでき、前記２つのオペランドは、入力ソースから取得されるものであり、前記入力ソースは、前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである。前記ＡＬＵ命令は、一定値と１つのオペランドのＡＬＵ結果を出力キーにおけるある位置にコピーでき、前記オペランドは、入力ソースから出力キーにおけるある位置に取得されるものであり、前記入力ソースは、前記入力トークンおよび前記対応するテンプレートメタデータのうちの１つである。前記ＡＬＵ命令のためのＡＬＵ演算は、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、およびビット単位の右シフト（＞＞）のうちの１つである。
【００１８】
前記データパスは、前記コントロールパスが前記命令を生成するのを待つ間に前記入力トークンをバッファリングする遅延整合キューと、前記ルックアップキーを生成するために、前記コントロールパスによって生成される前記命令の全てを並行に実行する命令実行ブロックとを含む。
【００１９】
いくつかの実施形態では、前記キー生成器が最大限のスループットで動作できるように、前記遅延整合キューは、前記コントロールパスの遅延に等しい深さを有するＦＩＦＯバッファまたはシフトレジスタである。
【００２０】
いくつかの実施形態では、前記ルックアップキーは、全ての命令が実行される前に全てゼロで初期化される。
【００２１】
いくつかの実施形態では、前記出力生成器は、前記キー生成器と類似の設計を有するが、前記キー生成器の入力データおよび出力データとは異なる入力データおよび出力データを有する。前記出力生成器の前記入力データは、前記入力トークン、対応するテンプレート情報からのメタデータビット、および前記ルックアップ結果を含む。前記出力生成器の前記出力データは前記入力トークンを変更したものである。
【００２２】
いくつかの実施形態では、前記出力生成器は、前記キー生成器におけるＭＵＸ／ＣＭＰコーンよりも多いＭＵＸ／ＣＭＰセルを有するＭＵＸ／ＣＭＰコーンを含み、前記出力生成器は、前記キー生成器におけるＭＵＸ／ＬＵＴ論理コーンよりも多いステージを有するＭＵＸ／ＬＵＴ論理コーンを含む。
【００２３】
いくつかの実施形態では、前記出力トークンは、全ての命令が実行される前に、前記入力トークンと同じコンテンツを有するように初期化される。
【００２４】
いくつかの実施形態では、前記キー生成器および前記出力生成器の両方のコントロールパスは、異なるネットワーク機能およびプロトコルをサポートするためにユーザが前記ＬＤＥを設定できるように、プログラム可能である。前記出力トークンのコンテンツが、ＳＤＮシステム内の他のコンポーネントによって用いられて、その対応するネットワークパケットが適切に（適宜）変更および転送される。
【００２５】
別の構成において、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）エンジンにおいてパケット変更・転送のためにルックアップを生成し決定を行う方法を提供する。前記方法は、入力バッファに入力トークンをバッファリングすることと、前記入力トークンの内部で入手できないメタデータビットを、前記入力トークンそれぞれについて取り出すことと、前記入力トークンおよび前記メタデータビットそれぞれの少なくとも特定のビットに基づいて前記入力トークンそれぞれに対するルックアップキーを生成することと、前記ルックアップキーに基づいたルックアップ結果を受信することと、前記ルックアップ結果および前記入力トークンのコンテンツに基づいて前記入力トークン内の１つ以上のフィールドを変更することと、前記変更されたトークンがこのエンジンに返送されるものか、ＳＤＮシステム内の他のエンジンに返送されるものかを判定することと、前記判定に基づいて、ループバックバッファに前記変更したトークンをバッファリングすることであって、前記ループバックバッファ内のトークンは前記入力バッファ内のトークンよりも高い優先度を有する、バッファリングを行うこととを含む。
【００２６】
いくつかの実施形態では、前記入力バッファおよび前記ループバックバッファはＦＩＦＯバッファである。
【００２７】
いくつかの実施形態では、トークンのデータフォーマットは、共通部および層部を含む。前記共通部は、対応するネットワークパケットの包括的な制御ビットと、テンプレートテーブルへのルックアップポインタの値とを含む。前記ルックアップポインタの値は、前記トークン内の「テンプレートＩＤ」フィールドによって与えられる。いくつかの実施形態では、前記方法は、前記トークンの前記層部におけるトークンの層の数と各オフセットとを前記テンプレートテーブルから取り出すことをさらに含む。
【００２８】
前記層部は、対応するネットワークパケットの全てのパースされたパケットヘッダの情報を含む。前記パースされたパケットヘッダは、それぞれ、前記層部における「コントロール」フィールドおよび「データ」フィールドに関連づけられる。
【００２９】
さらに別の構成において、ソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムが提供される。前記システムは、パーサと、少なくとも１つのルックアップ・決定エンジンと、検索エンジンと、更新読取り書込みブロックと、パケットメモリ・送信キューブロックとを含む。前記パーサは、入来ネットワークパケットを受信し、これらの入来ネットワークパケットのヘッダをパースし、トークンを出力する。前記少なくとも１つのルックアップ・決定エンジンは、これらのトークンに対するルックアップキーを生成し、次いで受信されたルックアップ結果に基づいてこれらのトークンを変更する。前記検索エンジンは、各ＬＤＥによって送信された各ルックアップキーに対するルックアップ結果を返す。前記更新読取り書込み（ＵＲＷ）ブロックは、前記変更されたトークンに基づいて前記ネットワークパケットそれぞれの前記パケットヘッダを変更する。前記パケットメモリ・送信キューブロックは、前記変更されたパケットヘッダと対応する前記パケットの元のペイロードとを出力のために組み合わせる。
【００３０】
いくつかの実施形態では、前記少なくとも１つのルックアップ・決定エンジンは、多数のルックアップを、連続して行うために直列に、または、同時に行うために並列に、連結された複数のルックアップ・決定エンジンを含む。いくつかの実施形態では、前記少なくとも１つのルックアップ・決定エンジンは、それぞれ、キー生成器および出力生成器を含む。前記キー生成器は、各入力トークンに対するルックアップキーを生成する。前記出力生成器は、前記ルックアップキーに関連づけられたルックアップ結果のコンテンツに基づいて前記入力トークンを変更する。
【図面の簡単な説明】
【００３１】
【図１】本発明の一実施形態による、ルックアップキーを生成し、トークンを修正するためのソフトウェア・デファインド・ネットワーク（ＳＤＮ）エンジンのブロック図である。
【図２Ａ】本発明の一実施形態によるトークンのフォーマットである。
【図２Ｂ】本発明の一実施形態によるテンプレートテーブルのブロック図である。
【図３】本発明の一実施形態によるキー生成器のブロック図である。
【図４Ａ】本発明の一実施形態によるキー生成のためのコピー命令のフォーマットである。
【図４Ｂ】本発明の一実施形態によるキー生成のためのＡＬＵ命令のフォーマットである。
【図４Ｃ】本発明の一実施形態によるキー生成命令のソースを列挙したテーブルである。
【図５】本発明の一実施形態によるルックアップ結果収集器のブロック図である。
【図６】本発明の一実施形態による出力生成器のブロック図である。
【図７Ａ】本発明の一実施形態による出力生成のためのコピー命令のフォーマットである。
【図７Ｂ】本発明の一実施形態による出力生成のためのＡＬＵ命令のフォーマットである。
【図７Ｃ】本発明の一実施形態による出力生成命令のソースを列挙したテーブルである。
【図７Ｄ】本発明の一実施形態による出力生成命令の宛先を列挙したテーブルである。
【図８】本発明の一実施形態によるソフトウェア・デファインド・ネットワーク（ＳＤＮ）システムのブロック図である。
【発明を実施するための形態】
【００３２】
上記は、以下の本発明の例示的な実施形態のさらに具体的な説明から明らかになるであろう。添付図面において、異なる図全体にわたり、同様の部分は同様の参照符号で示す。図面は必ずしも原寸に比例しておらず、本発明の実施形態の説明に重点が置かれている。
【００３３】
以下の記載において、多くの詳細が説明を目的として述べられる。しかし、当業者ならば、本発明はこれらの特定の詳細を用いることなく実行可能であることを理解するであろう。このため、本発明は、図示された実施形態に限定されることを意図するものではなく、本明細書で説明される原理および特徴に合致する最大限の範囲に従う。
【００３４】
ソフトウェア・デファインド・ネットワーキング（ＳＤＮ）システムにおいて、提案されるルックアップ・決定エンジン（ＬＤＥ）は、対応するネットワークパケットをシステム内の他のコンポーネントが正確に処理および送信できるように、入力トークンに対するルックアップキーを生成し、ルックアップ結果に基づいて入力トークンを修正（変更）できる。ＳＤＮは１つ以上の装置において実現され、ＬＤＥはその装置のうちの１つに含まれる。キーの生成およびトークンの修正のための条件およびルールは、ソフトウェアによって完全にプログラム可能であり、ＬＤＥのために設定されたネットワーク機能およびプロトコルに基づく。ＬＤＥは、典型的には２つの主なブロック、すなわち、キー生成器および出力生成器を含む。名前の通り、キー生成器は各入力トークンに対するルックアップキーを生成し、出力生成器は出力トークンを生成する。出力トークンはルックアップ結果に基づいて入力トークンを修正したものである。キー生成器および出力生成器は、同様の設計アーキテクチャを有し、この設計アーキテクチャは、コントロールパスおよびデータパスを含む。コントロールパスは、その入力における特定のフィールドおよびビットが、設定プロトコルの条件を満たすか否かを検査する。コントロールパスは、検査結果に基づきそれに応じて、命令を生成する。データパスは、キー生成器でルックアップキーを生成する命令または出力生成器で出力トークンを生成する命令であって、コントロールパスが生成する全ての命令を実行する。キー生成および出力生成のための条件およびルールは、キー生成器および出力生成器のコントロールパスにおいて完全にプログラム可能である。
【００３５】
ＬＤＥはまた、入力トークンを一時的に格納するための入力ＦＩＦＯと、ルックアップキーに対するルックアップ結果を収集するルックアップ結果収集器と、出力トークンを、同じＬＤＥで多数の連続するルックアップが当該トークンについて要求される場合に、ＬＤＥに返送するためのループバックチェッカと、ループバックトークンを格納するためのループバックＦＩＦＯとを含む。ループバックパスは、典型的には入力パスよりも高い優先度を有し、デッドロックがないことを保証する。
【００３６】
キー生成器および出力生成器は、「ソフトウェア・デファインド・ネットワーク処理エンジンにおける並行かつ条件付きのデータ操作の方法および装置」と題されて出願された、参照により本明細書中に援用する米国特許出願に述べられているＳＤＮ処理エンジンと同様に構成される。
【００３７】
図１は、本発明の実施形態による、ルックアップキーを生成し、トークンを修正するソフトウェア・デファインド・ネットワーク（ＳＤＮ）エンジン１００のブロック図を示す。本発明のＳＤＮエンジン１００は、ルックアップ・決定エンジン（ＬＤＥ）と呼ばれる。ＬＤＥ１００は、ルックアップキーを生成し、入力トークンのルックアップ結果およびコンテンツに基づいて入力トークンを修正する。ルックアップキーの生成および入力トークンの修正のための条件およびルールは、典型的にはユーザによってプログラム可能である。
【００３８】
ＬＤＥ１００は、パーサから入力トークンを受信できる。パーサは、典型的には各ネットワークパケットのヘッダをパースし（構文解析し）、各ネットワークパケットに対する入力トークンを出力する。入力トークンは、典型的には、ＬＤＥ１００が入力トークンを処理可能となるように予め定められたフォーマットを有する。入力トークンのフォーマットは、図２Ａを参照して以下に詳細に説明する。ＬＤＥ１００はまた、多数のＬＤＥが、多数のルックアップステップおよびトークン修正ステップを連続に行うためにチェーン状に結合される場合、先行のＬＤＥから入力トークンを受信することもできる。
【００３９】
上流のパーサまたは上流のＬＤＥからＬＤＥ１００で受信される入力トークンは、まず入力ＦＩＦＯ１０５内部にバッファリングされる。入力トークンは、ＬＤＥが入力トークンを処理する準備ができるまで、入力ＦＩＦＯ１０５内部で待機する。入力ＦＩＦＯ１０５が満杯ならば、ＬＤＥ１００は、新しいトークンの送信を停止するよう、入力トークンの供給源（すなわち、上流のパーサまたは上流のＬＤＥ）に通知する。
【００４０】
各入力トークンにおけるフィールドの位置は、テーブル、すなわち、テンプレートルックアップブロック１１０からのルックアップによって特定される。入力トークンは、次いでキー生成器１１５に送信される。キー生成器１１５は、ルックアップキーを作成するために入力トークン内の特定のデータをピックアップする。キー生成器１１５の構成は、典型的にはユーザが定義し、ユーザがＬＤＥ１００に行わせたいネットワーク機能およびプロトコルに依存する。
【００４１】
入力トークン毎のルックアップキーは、キー生成器１１５から出力され、リモート検索エンジン（図示せず）に送信される。リモート検索エンジンは、ＴＣＡＭルックアップ、直接アクセスルックアップ、ハッシュに基づくルックアップ、および最長プレフィックス一致ルックアップのような多数の構成変更可能なルックアップ動作を行うことができる。リモート検索エンジンに送信される各ルックアップキーに対して、ルックアップ結果が、ルックアップ結果収集器１２０においてＬＤＥ１００に返される。
【００４２】
各入力トークンに対するルックアップキーを生成しながら、キー生成器１１５はまた、当該入力トークンをルックアップ結果収集器１２０に伝送する。この入力トークンは、ルックアップ結果収集器１２０内部にバッファリングされる。入力トークンは、ルックアップ結果がリモート検索エンジンによって返されるまでルックアップ結果収集器１２０内部で待機する。ルックアップ結果が利用可能になると、入力トークンはルックアップ結果とともに出力生成器１２５に送信される。
【００４３】
入力トークンのルックアップ結果およびコンテンツに基づいて、出力生成器１２５は、入力トークンの１つまたは数個のフィールドを修正し、その後、その修正されたトークンを送信して出力する。キー生成器１１５と同様に、例えば、トークンの修正のための条件およびルールに関する出力生成器１２５の構成は、典型的にはユーザが定義し、ユーザがＬＤＥ１００に行わせたいネットワーク機能およびプロトコルに依存する。
【００４４】
トークンの修正後、修正されたトークンは、ループバックチェッカ１３０に送信される。ループバックチェッカ１３０は、修正されたトークンが他のルックアップを行うために現在のＬＤＥに返送されるべきか、関連するＳＤＮシステム内の別のエンジンに送信されるべきかを判定する。このループバックチェックは、同じトークンのために１つのＬＤＥに連続で多数のルックアップを行わせ得る設計選択事項であり、多数のエンジンを用いて同じことを行うよりも有利となる。この設計選択事項は、チップ領域の割当量のような制約のためにＬＤＥの数が限られるシステムにおいて有用である。このＬＤＥに返送されるトークンは、ループバックパス１４０経由でループバックＦＩＦＯ１３５内部にバッファリングされる。ループバックパス１４０は、常に入力パス（例えば、入力ＦＩＦＯ１０５から）よりも高い優先度を有し、デッドロックを回避する。図１は、ＦＩＦＯバッファを用いるものとして説明されたが、他のバッファタイプでもよい。
【００４５】
ＬＤＥ１００が各トークンのコンテンツを理解するように、トークンは、ＳＤＮシステムにおける全てのエンジンが理解する共通のフォーマットを有する。図２Ａは、本発明の実施形態によるトークン２００のフォーマットを示す。トークン２００は、２つの主な部分、すなわち、共通部２０５および層部２１０を含む。
【００４６】
共通部２０５は、パーサによってトークンに格納された、対応するネットワークパケットの一般的な制御ビット２２０を含む。制御ビットは、これらに限定されないが、タイムスタンプ、連続番号、優先度、ＳＤＮシステムオンチップにおける次のエンジンアドレス、ソースポート、ネットワークパケットバイト数などのためのビットを含む。これらの一般的な制御フィールド２２０は、ＳＤＮシステム設計者のようなユーザが選択し、典型的には、ＳＤＮシステム内のエンジンがネットワークパケットを適切に操作するのに有用である。
【００４７】
トークンの層部２１０は、対応するネットワークパケットの全てのパースされたヘッダを含む。ネットワークにおいて、各ネットワークパケットは、イーサネット（登録商標）、ＭＰＬＳ、ＩＰ、ＴＣＰ、ＨＴＴＰ、ＶＬＡＮなどの多数のヘッダをカプセル化することが多い。あるネットワークパケットがネットワーク上を進む間、このネットワークパケットは８以上の異なるヘッダを有するのが一般的である。ＳＤＮシステム内のエンジンがネットワークパケットを正確に処理するように、全てのネットワークパケットヘッダがＳＤＮシステム内のパーサによってパースされる。特に、パーサは、これらのネットワークパケットヘッダをパースし、パケットヘッダのパースされた情報をトークンの層部２１０に格納する。パースされたネットワークパケットヘッダは、それぞれ、トークンの層部２１０内部に、対応する層２２５を有する。
【００４８】
トークン内の各層２２５は、２つのフィールド、すなわち、「コントロール」フィールド２２５ａおよび「Data」フィールド２２５ｂを有する。「コントロール」フィールド２２５ａは、優先度およびプロトコルの種類などの対応するパースされたパケットヘッダの主制御ビットを含み、この主制御ビットは、ＳＤＮシステム内のエンジンが層部２１０内のネットワークパケットヘッダを適切に操作できるようにパーサによって層２２５内に埋め込まれる。「データ」フィールド２２５ｂは、対応するパースされたネットワークパケットヘッダの情報の残りを含む。
【００４９】
各ネットワークパケットは、異なるサイズを有する多数のヘッダを含むことができるので、各トークン内部の層部２１０も、異なるサイズを有する多数の層を含む。層２２５の数とそれらのサイズをトークン内部のそれらの位置とともに特定するために、トークンの共通部２０５内部の「テンプレートＩＤ」フィールド２１５を図１のＬＤＥ１００のようなエンジンが用いる。「テンプレートＩＤ」フィールド２１５は、対応するネットワークパケットをパースする時にパーサによって共通部２０５に予め埋め込まれる。ＬＤＥ１００は、「テンプレートＩＤ」フィールド２１５の値を、図１のテンプレートルックアップ１１０である図２Ｂのテンプレートテーブル２５０へのルックアップポインタとして用いる。
【００５０】
テンプレートテーブル２５０は、図２Ｂに示すように、「テンプレートＩＤ」フィールド２１５の値を受信し、層部２１０の中に格納された層の数と、トークン内のこれらの層のオフセットとを返す。オフセットは、トークンの内部の層２２５の位置を提供するので、層２２５の順序は、各ネットワークパケットのヘッダの順序に必ずしも対応する必要はないことを理解されたい。
【００５１】
さらに、テンプレートテーブル２５０はまた、各入力トークンに対する追加的な制御ビットであるメタデータビットを、その入力トークンに対して返す。テンプレートテーブル２５０を用いると、有利なことに、各トークンのサイズを小さくし、そのため、ハードウェアコストを低減する。その理由は、メタデータビットおよび層のオフセットなどの情報を、トークン自体によって運ぶのではなくテンプレートテーブル２５０に格納できるからである。テンプレートテーブル２５０の構成は、典型的にはユーザが定義し、ＳＤＮシステムにおけるパーサおよびエンジンがサポートするネットワーク機能およびネットワークパケットヘッダに依存する。
【００５２】
テンプレートテーブル２５０が返す、各入力トークンおよびその対応するテンプレート情報は、結合されて、ルックアップキーを生成するために図１のテンプレートルックアップ１１０からキー生成器１１５に送信される。図３は、本発明の実施形態によるキー生成器３００のブロック図を示す。いくつかの実施形態では、図１のキー生成器１１５は、キー生成器３００と同様に構成される。最上位でみると、キー生成器３００は、２つの論理パス、すなわち、コントロールパス３０５およびデータパス３１０に、分けられる。入力トークンおよびテンプレート情報は、結合されて、コントロールパス３０５およびデータパス３１０を通ってキー生成器３００内を流される。コントロールパス３０５は、ルックアップキーを生成するためにデータパス３１０によって後で実行される命令を生成することを担う。
【００５３】
キー生成器コントロールパス（ＫＧＣＰ）３０５は、４つのブロック、すなわち、制御ビット抽出器（ＣＢＥ）３１５、ＭＵＸ／ＣＭＰコーン（ＭＣＣ）３２０、ＭＵＸ／ＬＵＴ論理コーン（ＭＬＬＣ）３２５、およびキー生成命令テーブル（ＫＧＩＴ）３３０を含む。
【００５４】
ＫＧＣＰ３０５内のＣＢＥ３１５は、入力トークン内にカプセル化された主なネットワーク機能を典型的には含む入力トークンから上位ビットを抽出する。入力トークンは、図２Ａの共通部２０５内の特定ビットおよび図２Ａの層部２１０内の層２２５それぞれの全制御ビット２２５ａを含む。トークンの共通部２０５から抽出されるビットの位置は、典型的には、ソフトウェアによって再構成可能である。さらに、ＣＢＥ３１５はまた、テンプレートテーブル２５０が返すテンプレートルックアップ結果の全てのメタデータビットを抽出する。
【００５５】
ＫＧＣＰ３０５内のＭＣＣ３２０は、複数の構成変更可能なＭＵＸ／ＣＭＰセルを並列に含む。各ＭＵＸ／ＣＭＰセルは、トークン内の２つの任意のワードを比較する。これらの２つのワードの位置は、典型的にはソフトウェアによって構成変更可能である。各ＭＵＸ／ＣＭＰセルはまた、１つのワードを一定値と比較できる。いくつかの実施形態では、３つの比較動作、すなわち、等しい（＝＝）、より大きい（＞）、およびより小さい（＜）がサポートされる。選択された各ワードのビット幅は、典型的には１６または３２ビットであるが、異なるサイズも可能である。ＫＧＣＰ３０５のＭＣＣ３２０内のＭＵＸ／ＣＭＰセルの数は、典型的には、８から１６であるが、ＭＣＣ３２０内のＭＵＸ／ＣＭＰセルの数は、その数が入力トークンの層部に格納されたトークンの層の最大数未満でない限りにおいて、異なるものであってもよい。
【００５６】
ＣＢＥ３１５およびＭＣＣ３２０の全ての出力ビットが結合されて、ＭＬＬＣ３２５に送信される。ＫＧＣＰ３０５内のＭＬＬＣ３２５は、典型的には複数のステージを有する。各ステージは、複数のＭＵＸ／ＬＵＴセルを並列に含む。最初のステージの入力ビットは、ＣＢＥ３１５およびＭＣＣ３２０の結合された出力ビットである。ステージｉの入力ビットは、ステージｉ−１のすべての出力ビットである。最後のステージの出力ビットは、ＫＧＩＴ３３０を読み取るためのインデックスを形成する。
【００５７】
いくつかの実施形態では、ＭＵＸ／ＬＵＴセルは、６つのマルチプレクサを含み、これら６つのマルチプレクサはその入力ビットから６つの任意のビットを選択する。これらの６つの選択されたビットの位置は、典型的には、ソフトウェアによって構成変更可能である。これらの６つの選択されたビットは、それぞれ、１つの１ビットの出力を返して、６４ビットのルックアップテーブルへのポインタを形成する。各ＭＵＸ／ＬＵＴセルの設計は、有利なことに、ユーザがその入力ビットからの６つの任意のビットに任意の論理式を適用することを可能にする。
【００５８】
ＭＬＬＣ３２５は複数のステージを有し、各ステージは複数のＭＵＸ／ＬＵＴセルを並列に有するので、ユーザは、ユーザが図１のＬＤＥ１００にサポートさせたいネットワーク機能およびプロトコルに依存する適切なルックアップキーを生成するようにトークンをチェックするための数個の複合された、式およびルールを適用するようにＭＬＬＣ３２５をプログラムできる。ＭＬＬＣ３２５は、典型的には、３つまたは４つのステージを有するが、ステージはこれよりも多くてもまたは少なくてもよい。ＭＬＬＣ３２５内の最後のステージを除く各ステージは、典型的には、３２から６４のＭＵＸ／ＬＵＴセルを有する。最後のステージにおけるＭＵＸ／ＬＵＴセルの数は、ＫＧＩＴ３３０に入る全てのインデックスのビット数に等しい。
【００５９】
ＭＬＬＣ３２５の出力ビットは、ＫＧＩＴ３３０を読み取るためのインデックスポインタを作成する。キーのサイズに応じて、ＫＧＣＰ３０５は、１つまたは複数のテーブルを並列に有することができる。各テーブルエントリは、複数の命令を含む。各入力トークンに対してＫＧＩＴ３３０が返す命令の数は、テーブルエントリ毎の命令の数を乗じたテーブル数に等しい。キーのサイズがＬバイトであり、各命令は最大Ｃバイトの操作を可能とすると仮定する。命令テーブルが返す命令の数は、Ｌ／Ｃに少なくとも等しい。
【００６０】
入力トークンおよびテンプレート情報の結合されたデータがコントロールパス３０５をフローする（流れる）間、当該結合されたデータもデータパス３１０をフローする（流れる）。キー生成器データパス（ＫＧＤＰ）３１０は、２つのブロック、すなわち、遅延整合キュー３３５およびキー生成命令実行ブロック３４０を含む。
【００６１】
上記結合されたデータは遅延整合キュー３３５内部にバッファリングされる。遅延整合キュー３３５は、ＦＩＦＯまたはシフトレジスタであってもよい。遅延整合キュー３３５は、図１のＬＤＥ１００のようなＬＤＥが最大限のスループットで動作できるように、ＫＧＣＰ３０５の遅延に等しいバッファ深さを有する。各トークンのための命令がＫＧＣＰ３０５によって生成されると、対応するトークンが、遅延整合キュー３３５から取り出され、キー生成命令実行ブロック３４０に送信される。キー生成命令実行ブロック３４０は、命令を実行し、ルックアップキーを構築するためのソースデータとして入力トークンを用いる。いくつかの実施形態では、この出力ルックアップキーを作成するための２種類の命令、すなわち、コピー命令およびＡＬＵ命令が、サポートされる。
【００６２】
図４Ａは本発明の実施形態によるキー生成のためのコピー命令４００のフォーマットを示す。コピー命令４００は、出力キーにおける特定の位置にソースからのデータをコピーすることを可能にする。「Src_ID（ソースＩＤ）」フィールド４０５は、最大Ｃバイトをコピーする元であるソースデータを指し示す。各コピー命令のためのＣバイトの最大数は、図１のＬＤＥ１００のようなＬＤＥのシリコン領域の割当量を含む設計選択事項に基づいて選択される。ＫＧＤＰ３１０の全てのソースデータが、図４Ｃに示すテーブルに列挙される。ルックアップキーを作成するためのソースデータは、トークンの層、入力トークンの共通部、および当該入力トークンに関連づけられたテンプレート情報内のメタデータフィールドの全てである。
【００６３】
「Src_ByteOffset」フィールド４１０は、選択されたソースデータにおける開始バイト位置を示す。Ｃバイトがコピーされるのはその開始バイト位置からである。場合によっては、ユーザは、バイトではなくビットをコピーすることまたはＣバイト未満をコピーすることを望むであろう。これらの場合において、「BitMask」フィールド４１５を用いてコピーされるバイトをマスクする。また、場合によっては、ユーザは、ソースデータからではなく、ルックアップキーへ一定値をコピーすることを望むであろう。これらの場合において、「IsConst」フィールド４２０が設定され、「BitMask」フィールド４１５を、当該一定値を含むように用いる。最終的に、「Dst_ByteOffset」フィールド４２５は、コピーされマスクされたバイトまたは一定値が貼り付けられる（ペーストされる）出力キーにおける位置を指し示す。
【００６４】
図４Ｂは、本発明の実施形態によるキー生成のためのＡＬＵ命令４３０のフォーマットを示す。各ＡＬＵ命令４００が、算術論理演算ユニット（ＡＬＵ）モジュールの２つのオペランドのために一定値をコピーすることまたはソースデータからコピーすることを可能にすることを以外は、ＡＬＵ命令４３０におけるフィールド４４０〜４７５の意味は、コピー命令４００における意味と同じである。ＡＬＵ演算は、少なくとも以下の演算、すなわち、加算（＋）、減算（−）、ビット単位のＡＮＤ（＆）、ビット単位のＯＲ（｜）、ビット単位のＸＯＲ（＾）、ビット単位の左シフト（＜＜）、およびビット単位の右シフト（＞＞）、をサポートする「OpCode」フィールド４３５によって選択される。ＡＬＵの結果は、「Dst_ByteOffset」フィールド４８０によって特定される位置で出力キーに貼り付けられる。
【００６５】
ＡＬＵ命令毎のコピーされるバイトの最大数およびＡＬＵ演算のビット幅は、設計選択事項に基づいて選択される。コピーされるバイトの数は、典型的には、４バイトから８バイトであり、ＡＬＵ演算のサイズは、典型的には、１６ビットまたは３２ビットである。しかし、コピーされるバイトの数およびＡＬＵ演算のサイズは、異なるものであってもよい。
【００６６】
各入力トークンに対してルックアップキーを作成するために、ＫＧＣＰ３０５が生成する全ての命令が、ＫＧＤＰ３１０によって並行に実行される。ルックアップキーは、全ての命令が実行される前に全てゼロで初期化される。ルックアップキーは次いで全ての命令によって修正され、その後リモート検索エンジンに送信される。リモート検索エンジンは、後に各ルックアップキーに対するルックアップ結果を返す。
【００６７】
ＫＧＤＰ３１０が命令を実行する間、ＫＧＤＰ３１０はまた、元の入力トークンおよび対応するテンプレート情報を図１のルックアップ結果収集器１２０に伝送する。図５は、本発明の実施形態によるルックアップ結果収集器５００のブロック図を示す。いくつかの実施形態では、図１のルックアップ結果収集器１２０は、ルックアップ結果収集器５００と同様に構成される。リモート検索エンジンによって返されるルックアップ結果を待つ間、入力トークンおよび対応するテンプレート情報を含むすべての入力データがトークンバッファ５１５内部にバッファリングされる。トークンバッファ５１５の深さは、図１のＬＤＥ１００のようなＬＤＥが最大限のスループットで動作できるように、リモート検索エンジンの遅延と少なくとも等しい。
【００６８】
対応するルックアップキーについてリモート検索エンジンが返すルックアップ結果は、ルックアップ結果バッファ５２０内部にバッファリングされる。ルックアップ結果収集器５００は、ルックアップ結果バッファ５２０をチェックして、ルックアップ結果がトークンバッファ５１５内部の入力トークンにとって利用可能であるか否かを判定する。ルックアップ結果収集器５００は、入力トークンをそのテンプレート情報および対応するルックアップ結果とともにバッファ５１５，５２０から取得し、データを結合し、結合したデータを図１の出力生成器１２５に送信する。
【００６９】
図６は、本発明の実施形態による出力生成器６００のブロック図を示す。いくつかの実施形態では、図１の出力生成器１２５は、出力生成器６００と同様に構成される。出力生成器６００およびキー生成器３００の設計は同様のものである。キー生成器設計および出力生成器設計の両方における類似性により、有利なことに、多くの設計の再利用が可能になり、それによってＬＤＥのための開発および検証コストが効果的に低減される。
【００７０】
最上位でみると、出力生成器６００も、２つの論理パス、すなわち、コントロールパス６０５およびデータパス６１０に、分けられる。出力生成器６００とキー生成器３００との間のいくつかの違いには、入力データおよび出力データがある。出力生成器６００の入力データは、元の入力トークン、それに対応するテンプレート情報、および対応するルックアップ結果である。出力データは、ルックアップ結果および元の入力トークン自体のコンテンツに基づいて修正されるトークンである。
【００７１】
出力生成器コントロールパス（ＯＧＣＰ）６０５は、４つのブロック、すなわち、制御ビット抽出器（ＣＢＥ）６１５、ＭＵＸ／ＣＭＰコーン（ＭＣＣ）６２０、ＭＵＸ／ＬＵＴ論理コーン（ＭＬＬＣ）６２５、および出力生成命令テーブル（ＯＧＩＴ）６３０を含む。
【００７２】
出力生成器６００の入力は、図３のキー生成器３００の入力よりも多い入力データを有するので、出力生成器６００におけるブロックは、キー生成器３００における対応するブロックよりも大きい。特に、入力トークン制御ビットおよびテンプレートメタデータビットの抽出に加えて、ＯＧＣＰ６０５内のＣＢＥ６１５はルックアップ結果の内部の制御ビットも抽出する。したがって、ルックアップ結果は、好ましくは、リモート検索エンジンおよび図１のＬＤＥ１００のようなＬＤＥの両方が理解するフォーマットを有する。
【００７３】
ＯＧＣＰ６０５内のＭＣＣ６２０は、典型的には、図３のＫＧＣＰ３０５内のＭＣＣ３２０よりも多いＭＵＸ／ＣＭＰセルを有する。ＯＧＣＰ６０５のＭＣＣ６２０内のＭＵＸ／ＣＭＰセルの数は、典型的には、１６から３２であるが、ＭＣＣ６２０内のＭＵＸ／ＣＭＰセルの数は、（ルックアップ結果からのデータワードの追加的な比較をサポートするために、）トークンの層の数プラス１未満でない限りにおいて、異なるものであってもよい。
【００７４】
ＯＧＣＰ６０５内のＭＬＬＣ６２５は、典型的には、図３のＫＧＣＰ３０５内のＭＬＬＣ３２５よりも多いステージを有し、ルックアップ結果からの追加的な制御ビットがあるためにさらに複合された、チェック条件およびルールをサポートする。ＯＧＣＰ６０５におけるＭＬＬＣ６２５内のステージの数は、典型的には、５または６ステージであるが、これよりも多いかまたはこれより少ないステージでもよい。
【００７５】
ＯＧＣＰ６０５は、典型的には、図３のＫＧＣＰ３０５よりも多い命令テーブルを有する。ＯＧＣＰ６０５が返す命令の数は、出力トークン内の全てのフィールドを操作するのに十分である必要がある。トークンのサイズがＭバイトであり、各命令が最大Ｃバイトの操作を可能にすると仮定する。命令テーブルが返す命令の数は、少なくともＭ／Ｃに等しい。
【００７６】
いくつかの実施形態では、出力トークンを生成するための２種類の命令、すなわち、コピー命令およびＡＬＵ命令がサポートされる。図７Ａおよび図７Ｂは、本発明の実施形態による、出力生成のためのコピー命令７００のフォーマットおよびＡＬＵ命令７４０のフォーマットを、それぞれ示す。コピー命令７００およびＡＬＵ命令７４０がより多くのソースデータおよび宛先を有すること以外は、出力生成のためのコピー命令７００のフォーマットおよびＡＬＵ命令７４０のフォーマットは、キー生成のためのコピー命令４００（図４Ａ）のフォーマットおよびＡＬＵ命令４３０（図４Ｂ）のフォーマットと同様である。
【００７７】
コピー命令７００の「Src_ID」フィールド７０５、「Src_ByteOffset」フィールド７１０、「BitMask」フィールド７１５、「IsConst」フィールド７２０、および「Dst_ByteOffset」フィールド７３０は、コピー命令４００の「Src_ID」フィールド４０５、「Src_ByteOffset」フィールド４１０、「BitMask」フィールド４１５、「IsConst」フィールド４２０、および「Dst_ByteOffset」フィールド４２５とそれぞれ同様に構成される。
【００７８】
ＡＬＵ命令７４０の「OpCode」フィールド７４５、「SrcA_ID」フィールド７５０、「SrcA_ByteOffset」フィールド７５５、「SrcA_BitMask」フィールド７６０、「SrcA_IsConst」フィールド７６５、「SrcB_ID」フィールド７７０、「SrcB_ByteOffset」フィールド７７５、「SrcB_BitMask」フィールド７８０、「SrcB_IsConst」フィールド７８５、および「Dst_ByteOffset」フィールド７９５は、ＡＬＵ命令４３０の「OpCode」フィールド４３５、「SrcA_ID」フィールド４４０、「SrcA_ByteOffset」フィールド４４５、「SrcA_BitMask」フィールド４５０、「SrcA_IsConst」フィールド４５５、「SrcB_ID」フィールド４６０、「SrcB_ByteOffset」フィールド４６５、「SrcB_BitMask」フィールド４７０、「SrcB_IsConst」フィールド４７５、および「Dst_ByteOffset」フィールド４８０とそれぞれ同様に構成される。
【００７９】
出力生成器データパス（ＯＧＤＰ）６１０の命令のための全てのソースデータが、図７Ｃに示すテーブルに列挙される。出力トークンを生成するためのソースデータは、入力トークンの全ての層、入力トークンの共通部、入力トークンに関連づけられたテンプレート情報内のメタデータフィールド、および入力トークンのルックアップ結果である。
【００８０】
ＯＧＤＰ６１０の命令のための全ての宛先ＩＤが、図７Ｄに示すテーブルに列挙される。命令内の「Dst_ID（宛先ＩＤ）」フィールド７２５、７９０は、ソースからのコピーされたデータが貼り付けられることになる出力トークンにおける層または共通部のうちのどの宛先を選択するかを示す。データを貼り付けるための選択された宛先における位置は、キー生成命令におけるのと同様の「Dst_ByteOffset」フィールド７３０、７９５によって与えられる。
【００８１】
ＯＧＣＰ６０５が生成する全ての命令は、新しい出力トークンを生成するために、ＯＧＤＰ６１０によって並行に実行される。出力トークンは、全ての命令が実行される前に入力トークンと同じコンテンツを有するように初期化される。すべての命令の実行が終わると、出力トークンは、入力トークンを修正したものとなっている。
【００８２】
図１のＬＤＥ１００は、高い柔軟性を持ち、完全にプログラム可能であり、プロトコルに依存しないため、有利なことに、ユーザがキー生成器１１５および出力生成器１２５のコントロールパスを適切に構成することによって、種々のネットワーク機能およびプロトコルを適用することを可能にする。例えば、ＬＤＥ１００は、ルータとしてのＩＰルックアップ、スイッチとしてのイーサネット（登録商標）Ｌ２ルックアップもしくはＶＬＡＮルックアップ、ファイアウォールとしてのネットワーク攻撃検出ルックアップ、またはネットワークアドレストランスレータとしてのアドレスから名前へのルックアップを行うためのルックアップキーを生成するように構成され得る。ルックアップ結果に基づいて、トークンが適切に修正される。
【００８３】
修正されたトークンは、次いでループバックチェッカ１３０によってチェックされて、修正されたトークンが他のルックアップを行うために現在のＬＤＥに返送されるべきか、ＳＤＮシステム内の他のエンジンに送信されるべきかを調べられる。ループバックパス１４０をサポートすることは、有利なことに、同じエンジンで多数のルックアップを行うことを可能にする。ループバックチェッカ１３０は、修正されたトークンの共通部の内部の「Dst_EngineAddress」フィールドを、現在のエンジンのアドレスと比較する。これらが同じであれば、修正されたトークンが次いで、図１に示すループバックパス１４０経由で現在のエンジンに返送される。図１において、ループバックパス１４０は、入力パス（例えば、入力ＦＩＦＯ１０５から）よりも高い優先度を有して、デッドロックを回避する。
【００８４】
最終の出力トークンは、必要であれば、さらなるルックアップを行うために他のエンジンに送信される、または、更新読取り書込み（ＵＲＷ）ブロックに送信される。トークン内の修正されたコンテンツに基づきそれに応じて、ＵＲＷブロックは、（元のトークンがパースされた元である）対応するネットワークパケットヘッダを修正することになる。これらの修正されたネットワークパケットヘッダは、次いで送信キューブロックによってその対応するペイロードと組み合わされることとなり、ＬＤＥのために設定されたネットワーク機能およびプロトコルを反映する最終の修正された出力ネットワークパケットを形成する。修正されたネットワークパケットは、次いで、さらなる処理のためにＳＤＮシステム内の他のコンポーネントに送信される、または、ネットワーク内の他の装置に転送される。
【００８５】
図８は、本発明の実施形態によるソフトウェア・デファインド・ネットワーク（ＳＤＮ）システム８００のブロック図を示す。システム８００は、パーサ８０５と、少なくとも１つのＬＤＥ８１０と、検索エンジン８１５と、更新読取り書込み（ＵＲＷ）ブロック８２０と、パケットメモリおよび送信キュー（ＴｘＱ）ブロック８２５とを含む。ネットワークパケットは、パーサ８０５で受信される。パーサ８０５は、ネットワークパケットのヘッダをパースし、制御ビットおよびパースしたヘッダをトークン内に格納する。パーサ８０５は、元のパケットペイロードをパケットメモリおよびＴｘＱ８２５に送信するとともに、トークンを１つまたは複数のＬＤＥ８１０に送信し、ネットワークパケットの元のパケットヘッダをＵＲＷ８２０に送信する。
【００８６】
トークンは、典型的には、ＬＤＥ８１０によって理解されるフォーマットを有する。ＬＤＥ８１０のうちの１つが、パーサ８０５からトークンを受信する。上述のように、各ＬＤＥ８１０は、ルックアップキーを生成し、このルックアップキーを、後にルックアップ結果を返すリモート検索エンジン８１５に送信する。検索エンジン８１５からのルックアップ結果の受信の後、ＬＤＥ８１０は、ルックアップ結果およびトークンのコンテンツに基づいてトークンを修正する。修正されたトークンの「Dst_EngineAddress」フィールドに基づいて、必要に応じて、修正されたトークンは複数のＬＤＥ８１０の中の他のＬＤＥに送信され得るか、またはさらなるルックアップを行うために同じＬＤＥに送信され得る。ＬＤＥ８１０による全ての必要なルックアップおよびトークン修正の完了の後、最終的な出力トークンがＵＲＷブロック８２０に送信される。ＵＲＷブロック８２０は、修正されたトークンのコンテンツに基づいて対応するパケットヘッダを修正し、これによって、修正されたパケットヘッダは、ＬＤＥ８１０のために構成されたネットワーク機能を適切に反映する。修正されたパケットヘッダは、次いでパケットメモリおよびＴｘＱブロック８２５に送信される。パケットメモリおよびＴｘＱブロック８２５は、元のパケットペイロードと修正されたパケットヘッダとを組み合わせて、最終的な出力ネットワークパケットを形成する。最終的な出力ネットワークパケットは、必要に応じて、次いでＳＤＮシステム内の他のコンポーネントにさらなる処理のために送信されるか、ネットワーク内の他の装置に転送されるか、または、さらなるルックアップを可能にするためにパーサに返送（ループバック）されてもよい。
【００８７】
本発明の実施形態は、入力トークンに対するルックアップキーを生成し、ルックアップ結果のコンテンツに基づいて入力トークンを修正するためのルックアップ・決定エンジン（ＬＤＥ）に関する。入力トークンは、パーサによってネットワークパケットヘッダからパースされ、トークンは次いでＬＤＥによって修正される。ＬＤＥによって修正されたトークンは、対応するネットワークパケットが、ソフトウェア・デファインド・ネットワーキング（ＳＤＮ）システム内の他のコンポーネントによってどのように修正されるまたは送られるかを導く。ＬＤＥの設計は、柔軟性が高く、プロトコルに依存しない。ルックアップキーの生成およびトークンの修正のための条件およびルールは、ＬＤＥがＳＤＮシステム内の様々な種類の再構成可能なネットワーク機能およびプロトコルを適用できる、完全にプログラム可能である。
【００８８】
当業者ならば、他の使用法や利点もまた存在することを理解するであろう。本発明を様々な特定の詳細を参照に説明したが、当業者ならば、本発明の精神から逸脱することなく本発明が他の特定の形式で実施され得ることを理解するであろう。したがって、当業者ならば、本発明が上述の例示の詳細によって限定されず、添付の請求項によって定義されることを理解するであろう。
【図１】
2015165650.tif 000003
【図２Ａ】
2015165650.tif 000004
【図２Ｂ】
2015165650.tif 000005
【図３】
2015165650.tif 000006
【図４Ａ】
2015165650.tif 000007
【図４Ｂ】
2015165650.tif 000008
【図４Ｃ】
2015165650.tif 000009
【図５】
2015165650.tif 000010
【図６】
2015165650.tif 000011
【図７Ａ】
2015165650.tif 000012
【図７Ｂ】
2015165650.tif 000013
【図７Ｃ】
2015165650.tif 000014
【図７Ｄ】
2015165650.tif 000015
【図８】
2015165650.tif 000016
【外国語明細書】
2015165650000001.pdf
2015165650000002.pdf
2015165650000003.pdf
2015165650000004.pdf