(57)【特許請求の範囲】
【請求項１】
パケットを識別するパケット識別情報と前記パケット識別情報を含むパケットに対して実行すべき処理を表す第１の処理情報とを対応付けて記憶した第１の記憶部と、
前記パケットに対して実行すべき処理を表す第２の処理情報を記憶した第２の記憶部であって、前記第２の処理情報を該第２の記憶部内で識別する索引情報が前記第２の処理情報に各々付されている該第２の記憶部と、
受信した前記パケットである受信パケットに含まれるパケット識別情報に対応付けられて前記第１の記憶部に記憶されている第１の処理情報を特定し、特定した第１の処理情報が、前記第２の記憶部に記憶されている前記第２の処理情報による処理を指定している場合に、前記指定と共に前記第１の記憶部に記憶されている、前記第２の記憶部についての前記索引情報を、前記受信パケットと共に出力する第１の処理部と、
前記第１の処理部が出力する前記索引情報が前記第２の記憶部において付されている前記第２の処理情報に従って、前記第１の処理部が出力する前記受信パケットに対する処理を実行する第２の処理部と、
を有することを特徴とするパケット処理装置。
【請求項２】
前記第２の処理部が前記第２の処理情報に従って実行する前記処理に用いるパラメタであって前記パケット識別情報に応じた該パラメタの取得に用いる実行情報を記憶した第３の記憶部と、
前記第２の処理情報に従って前記第２の処理部が実行する、前記第１の処理部が出力する前記受信パケットに対する前記処理を、前記第３の記憶部を参照して実行した場合に、前記第３の記憶部の参照により得られる実行情報に従って、前記第１の記憶部に、前記受信パケットのパケット識別情報と、前記第２の処理情報による処理を指定している前記第１の処理情報であって前記第２の処理情報についての前記索引情報を含む該第１の処理情報とを格納し、前記第２の記憶部に、前記第２の処理情報に対応付けて、前記実行情報を格納する更新部と、
を更に有することを特徴とする請求項１記載のパケット処理装置。
【請求項３】
第１の記憶部と、第２の記憶部と、第１の処理部と、第２の処理部とを有するパケット処理装置における前記第２の処理部として用いられる情報処理装置の制御プログラムであって、
前記第１の記憶部は、パケットを識別するパケット識別情報と前記パケット識別情報を含むパケットに対して実行すべき処理を表す第１の処理情報とを対応付けて記憶し、
前記第２の記憶部は、前記パケットに対して実行すべき処理を表す第２の処理情報を記憶し、前記第２の処理情報を前記第２の記憶部内で識別する索引情報が前記第２の処理情報に各々付されており、
前記第１の処理部は、受信した前記パケットである受信パケットに含まれるパケット識別情報に対応付けられて前記第１の記憶部に記憶されている第１の処理情報を特定し、
前記制御プログラムは、
前記第１の処理部が特定した第１の処理情報が、前記第２の記憶部に記憶されている前記第２の処理情報による処理を指定している場合に、前記第１の処理部が前記受信パケットと共に出力する、前記指定と共に前記第１の記憶部に記憶されている、前記第２の記憶部についての前記索引情報を取得し、
前記第１の処理部が出力する前記索引情報が付されている前記第２の処理情報を前記第２の記憶部から抽出し、
抽出した前記第２の処理情報に従って、前記第１の処理部が出力するパケットに対する処理を実行する
ことを前記情報処理装置に行わせることを特徴とするパケット処理装置の制御プログラム。
【請求項４】
パケットを識別するパケット識別情報と前記パケット識別情報を含むパケットに対して実行すべき処理を表す第１の処理情報とを対応付けて記憶した第１の記憶部と、前記パケットに対して実行すべき処理を表す第２の処理情報を記憶した第２の記憶部であって、前記第２の処理情報を該第２の記憶部内で識別する索引情報が前記第２の処理情報に各々付されている該第２の記憶部と、を有するパケット処理装置の制御方法であって、
前記パケット処理装置が有する第１の処理部が、受信した前記パケットである受信パケットに含まれるパケット識別情報に対応付けられて前記第１の記憶部に記憶されている第１の処理情報を特定し、特定した第１の処理情報が、前記第２の記憶部に記憶されている前記第２の処理情報による処理を指定している場合に、前記指定と共に前記第１の記憶部に記憶されている、前記第２の記憶部についての前記索引情報を、前記受信パケットと共に出力し、
前記パケット処理装置が有する第２の処理部が、前記第１の処理部が出力する前記索引情報が前記第２の記憶部において付されている前記第２の処理情報に従って、前記第１の処理部が出力する前記受信パケットに対する処理を実行する
ことを特徴とするパケット処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置、その制御プログラム、及びパケット処理装置の制御方法に関する。
【背景技術】
【０００２】
現在、情報処理装置の大部分はネットワークと接続可能となっている。このこともあり、現在では、ネットワークは、社会生活、及び経済活動の基板として不可欠な社会インフラストラクチャーとなっている。
【０００３】
ネットワークは、スイッチ、或いはルータ等のパケット処理装置を用いて構築される。スイッチ、及びルータ以外のパケット処理装置としては、ファイアウォール、ゲートウェイ、及びロードバランサ等を挙げることができる。
【０００４】
近年、多様な通信プロトコル、或いは通信規格（ここでは以降、特に断らない限り「プロトコル」はそれらの総称として用いる）が策定されている。多様なプロトコルの策定により、ネットワークに対応させるべき通信プロトコルの数も多くなっている。そのため、パケット処理装置に搭載される機能も増える傾向にある。
【０００５】
機能追加のために、機能別に専用のハードウェアをパケット処理装置に搭載させることは、製造コストを大きく増大させる。また、長い開発期間が必要となる。ハードウェア量の増大に伴い、消費電力も増大する。このようなことから、パケット処理装置では、ソフトウェア処理により、機能を追加させることが多い。
【０００６】
近年、サーバの仮想化が進み、データセンターなどでは、ネットワーク機能を汎用計算機上のソフトウェアにより実現するＮＦＶ（Network Functions Virtualization）が行われている。このＮＦＶでは、ネットワークに用いる通信機器の機能はソフトウェアとして実装され、そのソフトウェアは汎用計算機の仮想化されたＯＳ上で実行される。このＮＦＶを採用することにより、異なる種類の複数台の通信機器を１台の汎用計算機に集約することができ、特定の機能の増減、及び構成の変更等にも柔軟に対応することができる。
【０００７】
ソフトウェア処理に要する処理時間は、ハードウェア処理に要する処理時間と比較して、長い。そのため、パケット処理装置では、基本的な機能はハードウェアにより実現させ、基本的な機能以外はソフトウェア処理により実現させるようになっているのが普通である。このことから、パケット処理装置は、パケット処理のために、ハードウェアによる処理を実行する部分（以降「ハードウェア処理部」と表記）と、ソフトウェアによる処理を実行する部分（以降「ソフトウェア処理部」と表記）とを備えているのが普通である。そのようなハードウェア処理部を備えることにより、パケット処理に要する平均の処理時間を抑えることができる。
【０００８】
パケット処理装置では、通常、テーブルと呼ばれるデータ構造を用いて、受信パケットに対する処理内容を決定する。テーブルの各エントリには、パケットに含まれる宛先アドレスやパケットのタイプなどの識別情報と、識別情報で特定されるパケットに対応する処理内容(転送や廃棄、パケットの加工など)とパラメタ(出力ポート指定、加工の場合、加工に必要なデータなど)などの処理情報が併せて格納されている。それにより、パケット処理装置は、受信パケットに含まれる識別情報をキーとしてテーブルを検索し、受信パケットに対して実行すべき処理を決定し、実行する。
【０００９】
前述の様な、ハードウェア処理部とソフトウェア処理部を備えたパケット処理装置では、通常、ハードウェア処理部においてソフトウェア処理部で処理を行うかどうかを判断することにより、ソフトウェア処理部で処理を行うパケットを受信した場合には、ソフトウェア処理部に受信パケットが転送される。ソフトウェア処理部は、ハードウェア処理部からパケットを受け取り、テーブル検索を実行して受信パケットに対する処理内容を決定することになる。これは、ハードウェア処理部とソフトウェア処理部の両方でテーブル検索およびパケットの内容検査を行っていることになる。特に、ソフトウェアでは、テーブル検索に要するハッシュ値の計算やデータの照合の処理は重い処理である。パケット処理装置が、パケットの処理をより迅速に行えるようにするには、可能な限りソフトウェア処理部によるテーブル検索処理を削減することが重要であると思われる。
【００１０】
特許文献１に記載のシステムおよび方法は、ＭＡＣ（Media Access Control）機能の一部をＭＡＣ層のハードウェア部分に、ＭＡＣ機能の一部をＭＡＣ層のソフトウェア部分に割り振る無線通信システムを提供することによって、音声、ビデオその他の必要に対処する。例えば、より大きいＱｏＳ（Quality of Service）関連の時間感度を有する受信パケットに対する応答は、遅延を低減するために、完全にＭＡＣ層のハードウェア部分内で識別され、処理され得る。これに対して、あまり時間に敏感ではないＭＡＣ処理ステップは、ＭＡＣ層のソフトウェア部分で実行され得る。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特表２００７−５２７１６７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
１側面では、本発明は、テーブルの参照によるパケットの処理をより高速に実行するための技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明を適用した１システムは、パケットを識別するパケット識別情報とパケット識別情報を含むパケットに対して実行すべき処理を表す第１の処理情報とを対応付けて記憶した第１の記憶部と、パケットに対して実行すべき処理を表す第２の処理情報を記憶した第２の記憶部であって、第２の処理情報を第２の記憶部内で識別する索引情報が第２の処理情報に各々付されている第２の記憶部と、受信したパケットである受信パケットに含まれるパケット識別情報に対応付けられて第１の記憶部に記憶されている第１の処理情報を特定し、特定した第１の処理情報が、第２の記憶部に記憶されている第２の処理情報による処理を指定している場合に、その指定と共に第１の記憶部に記憶されている、第２の記憶部についての索引情報を、受信パケットと共に出力する第１の処理部と、第１の処理部が出力する索引情報が第２の記憶部において付されている第２の処理情報に従って、第１の処理部が出力する受信パケットに対する処理を実行する第２の処理部と、を有する。
【発明の効果】
【００１４】
本発明を適用した場合には、テーブルの参照によるパケットの処理をより高速に実行することができる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施形態によるパケット処理装置の機能構成例を表す図である。
【図２】第２の実施形態によるパケット処理装置を用いて構築された情報処理システムの構成例を説明する図である。
【図３】第２の実施形態によるパケット処理装置であるゲートウェイの構成例を表す図である。
【図４】第２の実施形態によるパケット処理装置であるゲートウェイの機能構成例を表す図である。
【図５】第２の実施形態によるパケット処理装置であるゲートウェイの他の構成例を表す図である。
【図６】第２の実施形態で用いられるＡＣＬ例を説明する図である。
【図７】ＶＸＬＡＮパケットの構成を説明する図である。
【図８】受信されたＶＸＬＡＮパケットのなかでマッチングデータ、及びマスクデータを用いてデータが照合されるフィールド例を説明する図である。
【図９】索引情報の受信パケットへの付加例を説明する図である。
【図１０】第２の実施形態で用いられるＦＤＢ例を説明する図である。
【図１１】ソフトテーブル例を説明する図である。
【図１２】第１の処理テーブル例を説明する図である。
【図１３】第２の処理テーブル例を説明する図である。
【図１４】受信パケットから作成されるパケット例を説明する図である。
【図１５】ホストが実行するパケット送信処理のフローチャートである。
【図１６】作成時のＡＣＬ例を説明する図である。
【図１７】作成時のソフトテーブル例を説明する図である。
【図１８】作成されたソフトテーブルの更新例を説明する図である。
【図１９】作成されたＡＣＬの更新例を説明する図である。
【図２０】第２の実施形態によるパケット処理装置であるゲートウェイのパケット受信時の動作を表すフローチャートである。
【図２１】パケット処理のフローチャートである。
【図２２】スイッチ部の第１の変形例を説明する図である。
【図２３】スイッチ部の第２の変形例を説明する図である。
【図２４】間接マッピング方法の第１の適用例を説明する図である。
【図２５】間接マッピング方法の第２の適用例を説明する図である。
【図２６】間接マッピング方法の第３の適用例を説明する図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
【００１７】
（第１の実施形態）
図１は、第１の実施形態によるパケット処理装置の機能構成例を表す図である。このパケット処理装置１０は、不図示のネットワークと接続され、そのネットワークを介して受信したパケットに対し、予め設定された処理を行うネットワーク機器である。そのパケット処理装置１０は、図１に表すように、第１の処理部１１、第２の処理部１２、及び設定部１３を備えている。第１の処理部１１と第２の処理部１２とは、通信手段１４により接続されている。
【００１８】
第１の処理部１１と第２の処理部１２を接続する通信手段１４は、例えばケーブル、専用のバス、或いは専用のネットワーク等である。その通信手段１４は、特に限定されない。それにより、第１の処理部１１と第２の処理部１２は異なる筐体の装置であっても良い。
【００１９】
具体的には、第１の処理部１１は、例えばスイッチＬＳＩ（Large Scale Integration）、若しくはＮＩＣ（Network Interface Card）であり、第２の処理部１２は、例えばＣＰＵ（Central Processing Unit）を含む情報処理装置である。これは１例であり、この例に限定されない。
【００２０】
第１の処理部１１は、受信パケットに対して最初に処理を行う構成要素であり、第１のパケット処理部１１ａ、第１の記憶部１１ｂ、及び計算部１１ｃを備えている。第２の処理部１２は、第２のパケット処理部１２ａ、及び第２の記憶部１２ｂを備えている。
【００２１】
第１の処理部１１の第１の記憶部１１ｂには、パケットを識別する識別情報と、その識別情報によって識別されるパケットに対して実行すべき処理を表す処理指定情報とが対応付けられて記憶される。
【００２２】
第１のパケット処理部１１ａは、受信パケット上の一部のデータを用いて値（以降「第１の値」と表記）を計算し、計算した第１の値によって特定されるデータ（ここでは、識別情報と処理指定情報）を第１の記憶部１１ｂから読み出して参照する。それにより、第１のパケット処理部１１ａは、第１の記憶部１１ｂから読み出した処理指定情報に従って、受信パケットに対する処理を行う。
【００２３】
読み出した処理指定情報が第２の処理部１２での処理を指定していた場合、第１のパケット処理部１１ａは、検索結果情報（図１中「生成情報１（検索結果）」と表記）を生成し、生成した検索結果情報を受信パケットと共に第２の処理部１２に出力する。第１のパケット処理部１１ａは、第１の値から処理指定情報を読み出せなかった場合も、検索結果情報を生成して、生成した検索結果情報と受信パケットと共に第２の処理部１２に出力する。
【００２４】
計算部１１ｃは、受信パケット上の予め定められたデータを用いて値（以降「第２の値」と表記する。図１中）生成情報２（計算結果）」と表記）を計算する。第１のパケット処理部１１ａは、計算部１１ｃから入力した第２の値を、受信パケット等と共に第２の処理部１２に出力する。なお、異なる第２の値を算出する複数の計算部を持ち、複数の第２の値を第２の処理部に出力しても良い。
【００２５】
第２の処理部１２の第２の記憶部１２ｂには、受信パケットに対して実行すべき処理内容を表す処理内容情報、及び実行すべき処理に必要な付加情報（１つ以上のパラメタ等）が格納される（図１では、処理内容情報と付加情報をまとめて「処理情報」と表記）。第２のパケット処理部１２ａは、第２の記憶部１１ｂに記憶された処理内容情報、及び付加情報を用いて、受信パケットに対する処理を実行する。
【００２６】
本実施形態では、第１の記憶部１１ｂに記憶された処理指定情報のなかで第２の処理部１２による処理を指定している処理指定情報と、第２の記憶部１２ｂに記憶された処理内容情報と付加情報は、１対１の対応関係とさせている。本実施形態では、第２の処理部１２による処理を指定している処理指定情報の第１の記憶部１１ｂ上の記憶位置を表す値は、その処理に対応する処理内容情報と付加情報の第２の記憶部１２ｂ上の記憶位置を表す値と同じとなるように管理している。このことから、検索結果情報として、上記第１の値を用いることができる。他には、処理指定情報を第１の記憶部１１ｂから読み出した位置を直接的に表す位置情報（アドレス値、インデックス値、等）を用いることもできる。検索結果情報には、例えばそのような記憶位置を表す情報の他に、処理指定情報を読み出せたか否かを表す情報が含まれる。
【００２７】
第１のパケット処理部１１ｂが処理指定情報を読み出せなかった場合、第２のパケット処理部１２ａは、第２の記憶部１２ｂから処理情報を読み出すべき位置を検索結果情報から特定することができない。第２の値は、検索結果情報の代わりに、第２の記憶得１２ｂから処理情報を読み出すために用いられる。それにより、第２のパケット処理部１２ａは、検索結果情報を参照し、処理指定情報が読み出されていた場合、検索結果情報によって特定される処理情報を読み出し、処理指定情報が読み出されていない場合、第２の値によって特定される処理情報を読み出す。
【００２８】
このように、第２のパケット処理部１２ａは、検索結果情報、或いは第２の値を用いて、参照すべき処理情報を第２の記憶部１２ｂから読み出す。言い換えれば、第１の処理部１１に、第２のパケット処理部１２ａが第２の記憶部１２ｂから参照すべき処理情報を読み出すための情報を提供させる。そのため、第２のパケット処理部１２ａは、第２の記憶部１２ｂから参照すべき処理情報をより迅速に読み出すことができる。参照すべき処理情報を第２の記憶部１２ｂからより迅速に読み出せることから、第２のパケット処理部１２ｂによる受信パケットへの処理もより高速に行えるようになる。
【００２９】
第１の値の計算に用いられる受信パケット上のデータは、例えば宛先のＭＡＣアドレスである。第２の値の計算に用いられる受信パケット上のデータは、例えば宛先ＩＰ（Internet Protocol）アドレス、送信元ＩＰアドレス、宛先Ｌ４ポート番号、及び送信元Ｌ４ポート番号である。これらのデータは、何れも１例であり、特に限定されない。
【００３０】
付加情報は、受信パケットによって異なるのが普通である。第２の値によって特定される処理情報は、例えば不特定のパケットに対する処理を実行するための情報であり、付加情報は存在しない。しかし、付加情報は、第２のパケット処理部１２ａが受信パケットに対する処理を実行する過程で特定される。このことから、本実施形態では、第２の値によって特定される処理情報に従った処理を第２のパケット処理部１２ａが実行することを契機に、処理情報の第２の記憶部１２ｂへの登録、及び処理指定情報の第１の記憶部１１ｂへの登録を行うようにしている。設定部１３は、そのような登録のための第１の記憶部１１ｂ、及び第２の記憶部１２ｂの更新を実現させる構成要素である。
【００３１】
設定部１３は、第２のパケット処理部１２ａから、処理情報、及び処理指定情報の登録に必要な情報を取得し、処理情報を記憶させる第２の記憶部１２ｂ上の位置を決定して、決定した位置に処理情報を記憶させる。また、設定部１３は、第２の記憶部１２ｂ上で決定した位置と同じ第１の記憶部１１ｂ上の位置に、処理指定情報を記憶させる。そのようにして、設定部１３は、第１の記憶部１１ｂ上の処理指定情報と、第２の記憶部１２ｂ上の処理情報とを１対１に対応付ける。
【００３２】
また、設定部１３は、予め定められた設定に従い、第１の記憶部１１ｂ、及び第２の記憶部１２ｂの初期化を行うことができる。その初期化時に第２の記憶部１２ｂに登録させる処理情報は、例えば必要最小限度である。そのような初期化を行った場合、第２のパケット処理部１２ａによる受信パケットへの処理の実行により、第２の記憶部１２ｂに登録される処理情報が増えていくことになる。設定部１３は、第２の記憶部１２ｂに登録させた処理情報数が上限値に達した場合、消去すべき処理情報を選択して消去し、登録すべき処理情報を登録する場所を確保する。
【００３３】
なお、本実施形態では、設定部１３は、第１の処理部１１、第２の処理部１２とは別の構成要素としているが、第１の処理部１１、或いは第２の処理部１２の一部としても良い。
【００３４】
（第２の実施形態）
図２は、第２の実施形態によるパケット処理装置を用いて構築された情報処理システムの構成例を説明する図である。その情報処理システムは、例えばデータセンターに構築されたシステムであり、複数台のサーバ１（１ａ、及び１ｂ）がＶＬＡＮ（Virtual Local Area Network）３、或いはＶＸＬＡＮ（Virtual eXtensible LAN）４に接続されている。
【００３５】
ＶＬＡＮ３、及びＶＸＬＡＮ４は、例えば物理的に同じネットワーク（ＬＡＮ）である。図２では、サーバ１を、ＶＸＬＡＮ４に非対応のサーバ１ａと、ＶＸＬＡＮ４に対応のサーバ１ｂとに大別している。本実施形態によるパケット処理装置は、ＶＬＡＮ３とＶＸＬＡＮ４間のパケット通信を可能にするゲートウェイ（図２中「VXLAN GW」と表記）２として実現されている。ゲートウェイ２は、ＶＸＬＡＮ４に対応のサーバ１ｂと同じく、ＶＸＬＡＮ４上を転送されるパケット（以降「ＶＸＬＡＮパケット」と総称）の送信元、或いは宛先となるＶＴＥＰ（VXLAN Tunnel End Point）機能を備える。以降、ＶＬＡＮ３上を転送されるパケットは「ＶＬＡＮパケット」と総称し、転送されるネットワークを特に限定する必要のない場合は単に「パケット」と表記する。
【００３６】
図３は、本実施形態によるパケット処理装置であるゲートウェイの構成例を表す図である。図３に表すように、ゲートウェイ２は、Ｎ個の受信ポート２１（２１−１〜２１−Ｎ）、Ｎ個の送信ポート２２（２２−１〜２２−Ｎ）、管理用ポート２３、スイッチ部（スイッチングモジュール）２４、及びＣＰＵ２５を備えている。
【００３７】
スイッチ部２４は、何れかの受信ポート２１がパケットを受信した場合に、受信したパケットに対して必要な処理を実行し、送信ポート２２からパケットを送信させるハードウェアである。そのスイッチ部２４は、ＡＣＬ（Access Control List）記憶部２４ａ、ＡＣＬ制御部２４ｂ、ＦＤＢ（Forwarding DataBase）記憶部２４ｃ、及びＦＤＢ制御部２４ｄを備えている。
【００３８】
ＡＣＬ記憶部２４ａは、ＡＣＬを記憶させるメモリであり、ＡＣＬの記憶に用いられるメモリには、多くの場合、ＴＣＡＭ（Ternary Content Addressable Memory）が採用される。このＴＣＡＭは、高速なテーブル・ルックアップ用に設計されたメモリである。
【００３９】
ＡＣＬは、受信したパケットのフィルタリング等のためのテーブルである。ＡＣＬに登録された各エントリには、パケットを識別するためのパケット識別情報、及びパケット識別情報にマッチするパケットに対して実行すべき処理を表す情報（以降「処理指定情報」と表記）が格納される。処理指定情報が表す処理とは、パケットの転送、パケットの廃棄、或いはパケット内容の変更を伴う転送、等である。
【００４０】
ＡＣＬ制御部２４ｂは、ＡＣＬ記憶部２４ａに記憶されているＡＣＬを参照し、受信したパケットに対して実行すべき処理を実行する。処理がパケットの転送であった場合、処理指定情報は、パケットの転送に用いるべき送信ポート２２を指定することが可能である。そのため、ＡＣＬ制御部２４ｂは、処理指定情報が指定する送信ポート２２からパケットを送信させることができる。
【００４１】
ＦＤＢ記憶部２４ｃは、ＦＤＢを記憶させるメモリである。そのＦＤＢは、パケットの転送のためのテーブルである。そのＦＤＢでは、エントリ（レコード）毎に、宛先アドレス（ＭＡＣアドレス、或いはＩＰアドレス。以降、便宜的にＭＡＣアドレスのみを想定する）と、パケットを送信させる送信ポート２２の対応関係が定義されている。ＦＤＢ制御部２４ｄは、ＦＤＢ記憶部２４ｃに記憶されているＦＤＢを参照し、対象となるパケットの転送を実現させる。
【００４２】
ＣＰＵ２５は、スイッチ部２４が対象としない処理が必要なパケットに対し、ソフトウェア処理を実行するソフトウェア処理部として機能する。そのＣＰＵ２５は、コア２５ａ、ＲＯＭ（Read Only Memory）２５ｂ、及びＲＡＭ（Random Access Memory ）２５ｃを備えている。
【００４３】
このＲＯＭ２５ｂには、コア２５ａが実行する各種プログラムが格納されている。そのプログラムのなかには、パケットに対するソフトウェア処理のためのプログラム群（以降「パケット処理ルーチン群」と表記）が含まれる。
【００４４】
ＣＰＵ２５には、管理用ポート２３が接続されている。この管理用ポート２３は、外部装置によりゲートウェイ２を制御・管理するためのポートであり、例えば管理用に構築されたネットワークと接続されている。それにより、ＣＰＵ２５は、外部装置からの指示に従って、ゲートウェイ２を制御する。
【００４５】
図４は、本実施形態によるパケット処理装置であるゲートウェイの機能構成例を表す図である。図４では、スイッチ部２４のＡＣＬ制御部２４ｂ、及びＦＤＢ制御部２４ｄ、並びにＣＰＵ２５に着目し、その機能構成例を表している。
【００４６】
図４において、３２１、及び３３１は、それぞれＡＣＬ、及びＦＤＢである。受信ポート群３１は、受信ポート２１−１〜２１−Ｎの集合である。送信ポート群３２は、送信ポート２２−１〜２２−Ｎの集合である。
【００４７】
ＡＣＬ制御部２４ｂは、受信処理部３０１、ＡＣＬ処理部３０２、出力部３０３、及び入出力部３０４を備える。
【００４８】
受信処理部３０１は、受信ポート群３１によって受信されたパケットをスイッチ部２４内に入力するための機能である。受信処理部３０１によって入力された受信パケットは、ＡＣＬ処理部３０２に出力される。
【００４９】
ＡＣＬ処理部３０２は、ＡＣＬ３２１を参照し、受信処理部３０１から入力した受信パケットに対する処理を実行する機能である。送信ポート群３２を用いて受信パケット（ここでは内容を変更した受信パケットを含む）を転送させる場合、ＡＣＬ処理部３０２は、出力部３０３を介して受信パケットをＦＤＢ制御部２４ｄに出力する。
【００５０】
ＡＣＬ３２１に登録されたエントリのなかには、ＣＰＵ２５によるソフトウェア処理を表す処理指定情報が格納されているエントリが存在する。そのため、ＡＣＬ制御部２４ｂは、ＣＰＵ２５との間でパケットを含むデータの入出力を行う。入出力部３０２は、ＣＰＵ２５との間でデータを入出力する機能である。
【００５１】
図６は、本実施形態で用いられるＡＣＬ例を説明する図である。
図６において、アドレスはエントリの識別情報であり、便宜的に表している。ＡＣＬ３２１に登録される各エントリは、マッチングフィールド、マスクフィールド、及びアクションフィールドに分割されている。
【００５２】
マッチングフィールドに格納されるデータ（マッチングデータ）は、対象とするパケットを特定するためのデータである。マスクフィールドに格納されるデータ（マスクデータ）は、パケットのなかでマッチング対象としないフィールド、或いはビットを表すデータである。これらマッチングデータ、及びマスクデータは、パケット識別情報の１例に相当する。
【００５３】
図７は、ＶＸＬＡＮパケットの構成を説明する図であり、図８は、受信されたＶＸＬＡＮパケットのなかでマッチングデータ、及びマスクデータを用いてデータが照合されるフィールド例を説明する図である。ここで図７、及び図８を参照し、マッチングデータ、及びマスクデータを用いたデータ照合について具体的に説明する。
【００５４】
ＶＸＬＡＮパケットは、図７に表すように、本来のイーサネット（Ethernet）フレームをカプセル化したパケットである。カプセル化のために、本来のイーサネット・フレームにアウターヘッダが付加されている。アウターヘッダは、アウターイーサネットヘッダ、アウターＩＰヘッダ、アウターＵＤＰ（User Datagram Protocol）ヘッダ、及びＶＸＬＡＮヘッダを含む。
【００５５】
図７に表すＶＸＬＡＮパケットを受信した場合、ＡＣＬ制御部２４ｂの受信処理部３０１は、そのＶＸＬＡＮパケットに対し、そのＶＸＬＡＮを受信した受信ポート２１を表す識別情報（以降「ポート番号」と表記する）を付加する。図８に表記の「Ingress Port」は、ＶＸＬＡＮパケットに付加されたフィールド（及びそのフィールドに格納されたポート番号）を表している。
【００５６】
アウターイーサネットヘッダは、宛先ＭＡＣアドレスフィールド（図７中「Destination VTEP MAC Address(H)」「Destination VTEP MAC Address(L)」が表記されたフィールド）、送信元ＭＡＣアドレスフィールド（図７中「Source VTEP MAC Address(H)」「Source VTEP MAC Address(L)」が表記されたフィールド）、EtherType（Ethernet Type）フィールド、及びOuter VLAN Tag Informationフィールドを含む。
【００５７】
上記フィールドのなかで、EtherTypeフィールドは、通信プロトコルの種類を表す識別子がデータとして格納されるフィールドである。Optional EtherTypeフィールドに表記の「C-Tag 802.1Q」は、ネットワーク規格としてＩＥＥＥ（Institute of Electrical and Electronic Engineers）８０２．１Ｑが指定されていることを表している。その場合、Outer VLAN Tag Informationフィールドには、ＰＣＰ（Priority Code Point）、ＣＦＩ（Canonical Format Indicator）、及びＶＬＡＮ  ＩＤ（Identifier）がデータとして格納される。ＲＣＰは、ＶＸＬＡＮパケットの優先度を指定するデータである。ＣＦＩは、ＭＡＣアドレスが正規フォーマットか否かを表すデータである。
【００５８】
アウターＩＰヘッダは、ＴｏＳ（Type of Service）フィールド、Protocolフィールド、送信元ＩＰアドレスフィールド（図７中「Source VTEP IP Address」と表記）、及び宛先ＩＰアドレスフィールド（図７中「Destination VTEP IP Address」と表記）を含む。ＴｏＳフィールドには、サービスの種類を表す種別データが格納され、Protocolフィールドには、通信プロトコルの種類を表す識別子が格納される。
【００５９】
アウターＵＤＰヘッダは、受信ポートフィールド（図７中「Source Port」と表記）、及び送信ポートフィールド（図７中「Dest Port」と表記）を含む。図７中に表記の「Source Port=xxxx」は、カプセル化するパケットの対応するデータが格納されることを表している。また、「Dest Port=VXLAN Port」は、ＶＸＬＡＮパケットのままの転送を要求するデータが格納されていることを表している。
【００６０】
ＶＸＬＡＮヘッダは、ＶＮＩ（VXLAN Network Identifier）が格納されるVXLAN Network Identifierフィールドを含む。
【００６１】
図８に表記の「MAC src」「MAC dst」「EtherType」「VLAN ID」及び「VLAN pri」は、全てアウターイーサネットヘッダに確保されるフィールドを表している。「MAC src」と表記のフィールドには送信元ＭＡＣアドレスが格納される。「MAC dst」と表記のフィールドには宛先ＭＡＣアドレス、「EtherType」と表記のフィールドには通信プロトコルの識別子、「VLAN ID」と表記のフィールドにはＶＬＡＮ  ＩＤ、「VLAN pri」と表記のフィールドにはＲＣＰがそれぞれ格納される。
【００６２】
図８に表記の「IP ToS」「IP proto」「IP src」及び「IP dst」は、全てアウターＩＰヘッダに確保されるフィールドを表している。「IP ToS」と表記のフィールドにはサービスの種別データが格納される。「IP proto」と表記のフィールドには通信プロトコルの識別子、「IP src」と表記のフィールドには送信元ＩＰアドレス、「IP dst」と表記のフィールドには宛先ＩＰアドレスがそれぞれ格納される。
【００６３】
図８に表記の「L4 sport」「L4 dport」は、共にアウターＵＤＰヘッダに確保されるフィールドを表している。「L4 sport」と表記のフィールドにはソフトウェア的な通信端としての送信元を表すデータ、「L4 dport」と表記のフィールドにはソフトウェア的な通信端としての宛先を表すデータが格納される。
【００６４】
ＡＣＬ３２１の各エントリに格納されるマッチングデータ、及びマスクデータは、図８に表すような各フィールドのデータを対象にしたマッチング（照合）を可能にさせる。それにより、マッチングデータ、及びマスクデータは、対象とするパケットの適切な特定を可能にさせる。
【００６５】
なお、マスクデータは、何れかのフィールドに格納されるデータのビット単位の照合を可能にさせる。それにより、例えばＭＡＣアドレスでは、不必要とするビットを除いた形での照合が可能となっている。図８に表すフィールド（データ）の組み合わせは、ＶＸＬＡＮパケットを想定した場合の１例であり、そのフィールドの組み合わせは特に限定されない。
【００６６】
ＡＣＬ３２１の各エントリには、マッチングフィールド、及びマスクフィールドの他に、アクションフィールドが存在する。そのアクションフィールドに格納されるデータ（以降「アクションデータ」と表記）は、ＡＣＬ制御部２４ｂが実行すべき処理を表す処理指定情報の１例である。
【００６７】
図６には、アクションデータの内容として、「Add-info(1234),forward-to-CPU」「Drop」及び「Forward-to-Port(10)」を表記している。それらの表記は、それぞれ以下のような処理の実行をＡＣＬ制御部２４ｂに要求する。
【００６８】
「Add-info(1234),forward-to-CPU」は、受信パケットに１２３４を付加してＣＰＵ２５に出力する処理の実行をＡＣＬ制御部２５ｂに要求する。それにより、「Add-info(1234),forward-to-CPU」は、ＣＰＵ２５によるソフトウェア処理を実行させる。「Drop」は、受信パケットの廃棄をＡＣＬ制御部２４ｂに要求する。「Forward-to-Port(10)」は、受信パケットを、ポート番号として１０が割り当てられた送信ポート２２から送信させることをＡＣＬ制御部２４ｂに要求する。
【００６９】
受信パケットに付加する１２３４の数値は、ＣＰＵ２５が処理の実行のために参照するソフトテーブル３６１から抽出すべきエントリを表す索引情報である。本実施形態では、その索引情報は、例えば図９に表すように、ヘッダ内に格納する形で受信パケットに付加している。
【００７０】
その図９に表す例では、通常のパケット（イーサネットフレーム）に索引情報を付加する場合を想定している。索引情報自体は、図９中に「Index val」と表記しており、索引情報は送信元ＭＡＣアドレスフィールドとEtherTypeフィールドの間に挿入されている。その索引情報の前には、「Tag」と表記の索引情報の存在を表す情報が付加されている。図９に表すような索引情報の受信パケットへの付加は１例であり、索引情報の付加方法は特に限定されない。
【００７１】
図７に表すように、Optional EtherTypeフィールドに「C-Tag 802.1Q」と表記のデータを格納した場合、送信元ＭＡＣアドレスフィールドとEtherTypeフィールドの間に４バイトのフィールドが確保される。本実施形態では、このことを利用し、索引情報を受信パケット内に格納している。Optional EtherTypeフィールドに格納されたデータが図９に表記の「Tag」であり、Optional EtherTypeフィールドは２バイトであることから、索引情報の格納用に最大で２バイトを用いることができる。
【００７２】
ＡＣＬ処理部３０２は、受信パケットから特定したエントリに、ＣＰＵ２５によるソフトウェア処理の実行を要求するアクションデータが格納されていた場合、入出力部３０４を介して、索引情報を付加した受信パケットをＣＰＵ２５に出力する。ＣＰＵ２５は、入力した受信パケットを用いた処理を実行し、その実行により得られたパケットをＡＣＬ制御部２４ｂに出力する。ＡＣＬ制御部２４ｂに出力されたパケットは、入出力部３０４を介してＡＣＬ処理部３０２に入力される。ＡＣＬ処理部３０２は、入力したパケットを出力部３０３に出力する。その結果、入力したパケットは、ＦＤＢ制御部２４ｄを介して、送信ポート群３２から送信させる。
【００７３】
ＦＤＢ制御部２４ｄは、入力部３１１、ＦＤＢ処理部３１２、送信処理部３１３、及び入出力部３１４を備える。
【００７４】
ＡＣＬ制御部２４ｂの出力部３０３からＦＤＢ制御部２４ｄに出力されたパケットは、入力部３１１を介してＦＤＢ処理部３１２に入力される。ＦＤＢ処理部３１２は、ＦＤＢ３３１を参照し、入力したパケットの転送を行う機能である。送信ポート群３２のうちの何れかの送信ポート２２が指定されていた場合、ＦＤＢ処理部３１２は、指定された送信ポート２２からパケットを送信させる。パケットの送信は、送信処理部３１３を介して行われる。
【００７５】
ＦＤＢ３３１に登録されたエントリのなかには、ＣＰＵ２５によるソフトウェア処理を表す処理指定情報が格納されているエントリが存在する可能性がある。そのため、ＦＤＢ制御部２４ｄも、ＣＰＵ２５との間でパケットを含むデータの入出力を行えるようになっている。入出力部３１３は、ＣＰＵ２５との間のデータの入出力を可能にさせる。
【００７６】
図１０は、本実施形態で用いられるＦＤＢ例を説明する図である。
図１０において、アドレスはエントリの識別情報であり、図６と同様に便宜的に表している。ＦＤＢ３３１に登録される各エントリは、ＭＡＣアドレスフィールド、ＶＬＡＮ  ＩＤフィールド、ＳＦフィールド、及びデータフィールドに分割されている。
【００７７】
ＭＡＣアドレスフィールドに格納されるＭＡＣアドレスは、ヘッダに格納される宛先ＭＡＣアドレスと照合されるデータである。ＶＬＡＮ  ＩＤフィールドに格納されるＶＬＡＮ  ＩＤは、ヘッダに格納されるＶＬＡＮ  ＩＤと照合されるデータである。
【００７８】
ＳＦフィールドには、ＣＰＵ２５によるソフトウェア処理を実行させるべきか否かを表すフラグ情報が格納される。データフィールドには、ＦＤＢ制御部２４ｄ、より具体的にはＦＤＢ処理部３１２が実行すべき処理内容を表す処理情報、或いはＣＰＵ２５に通知すべき索引情報が格納される。
【００７９】
ＦＤＢ処理部３１２は、ＦＤＢ３３１を参照し、受信パケットの転送を実現させる。このことから、ＦＤＢ処理部３１２が実行すべき処理内容を表す処理情報は、通常、受信パケットを送信させるべき送信ポート２２を表すポート番号である。以降、便宜的に、処理情報、及び索引情報を「指定情報」と総称する。
【００８０】
ＳＦフィールドに格納されるフラグ情報は、例えば１ビットのデータであり、０の値はＣＰＵ２５によるソフトウェア処理の実行が不要であることを表している。１の値のフラグ情報は、ＣＰＵ２５によるソフトウェア処理の実行が必要であることを表している。
【００８１】
このようなことから、ＦＤＢ処理部３１２は、ＡＣＬ制御部２４ｂからパケットを入力した場合、その入力パケットのヘッダに格納されている宛先ＭＡＣアドレス、及びＶＬＡＮ  ＩＤを用いて、ＦＤＢ３３１から１つのエントリを抽出する。その後、ＦＤＢ処理部３１２は、抽出したエントリに格納されているフラグ情報、及び指定情報を参照し、実行すべき処理を実行する。
【００８２】
ＦＤＢ処理部３１２は、入力パケットから特定したエントリに、値が１のフラグ情報が格納されていた場合、ＡＣＬ制御部２４ｂと同様に、入出力部３１４を介して、索引情報を付加した入力パケットをＣＰＵ２５に出力する。ＣＰＵ２５は、入力したパケットを用いた処理を実行し、その実行により得られたパケットをＦＤＢ制御部２４ｄに出力する。ＦＤＢ制御部２４ｄに出力されたパケットは、入出力部３１４を介してＦＤＢ処理部３１２に入力される。ＦＤＢ処理部３１２は、入力したパケットを送信処理部３１３に出力し、送信ポート群３２から送信させる。
【００８３】
上記パケット処理ルーチン群を含む各種プログラムを実行するＣＰＵ２５上には、スイッチ部２４から入力したパケットに対してソフトウェア処理を実行するソフトウェア処理部３５が実現される。そのソフトウェア処理部３５は、入出力部３５１、エントリ抽出部３５２、パケット処理部３５３、記憶部３５４、及びテーブル更新部３５５を備える。
【００８４】
入出力部３５１は、スイッチ部２４との間でデータの入出力を行う機能である。このデータの入出力には、ＡＣＬ記憶部２４ａへのアクセスのためのものも含まれる。入出力部３５１は、パケットをスイッチ部２４から入力した場合、入力パケットをエントリ抽出部３５２に出力する。
【００８５】
記憶部３５４には、パケットのソフトウェア処理に用いられる各種テーブルが格納されている。各種テーブルには、ソフトテーブル３６１、第１の処理テーブル３６２、及び第２の処理テーブル３６３が含まれる。この記憶部３５４は、実際には例えば図３に表すＲＡＭ２５ｃ、或いはＲＡＭ２５ｃとＲＯＭ２５ｂである。入出力部３５１、エントリ抽出部３５２、パケット処理部３５３、及びテーブル更新部３５５は共に、ＣＰＵ２５のコア２５ａが、ＲＯＭ２５ｂに格納されている各種プログラムを実行することで実現される。
【００８６】
ここで、図１１〜図１３を参照し、各テーブル３６１〜３６３について具体的に説明する。
【００８７】
図１１は、ソフトテーブル例を説明する図である。
このソフトテーブル３６１は、上記のように、索引情報によるエントリの抽出を行う対象となるテーブルである。このソフトテーブル３６１に登録されるエントリには、図１１に表すように、実行すべき処理内容を表す処理内容情報、及び実行すべき処理に必要な付加情報（１つ以上のパラメタ等）が格納される。
【００８８】
本実施形態では、処理内容情報として、実行すべき処理のためのルーチン（サブプログラム）へのポインタを採用している。図１１中に表記の「Routine#1」「routine#2」等は、処理内容情報によって指定されるルーチンの種類を表している。
【００８９】
ゲートウェイ２は、ＶＬＡＮ３とＶＸＬＡＮ４間で必要なパケット変換をサポートする。そのパケット変換のために必要な情報は付加情報として扱うことができる。
【００９０】
例えばＶＬＡＮパケットからＶＸＬＡＮパケットへの変換では、アウターヘッドを生成する必要がある。そのアウターヘッドには、ＶＴＥＰの宛先ＭＡＣアドレス、送信元ＭＡＣアドレス、宛先ＩＰアドレス、及び送信元ＩＰアドレス等を格納しなければならない（図７）。ＶＴＥＰの送信元ＭＡＣアドレス、及び送信元ＩＰアドレスは、自ゲートウェイ２のＭＡＣアドレス、及びＩＰアドレスとすれば良い。しかし、ＶＴＥＰの宛先ＭＡＣアドレス、及び宛先ＩＰアドレスは、受信パケットによって異ならせる必要がある。このことから、ＶＴＥＰの宛先ＭＡＣアドレス、及び宛先ＩＰアドレスは、付加情報とする対象になる。それにより、付加情報は、複数の情報を含む場合がある。図１１中に表記の「Parameter#1」「Parameter#2」等は、エントリによって異なる付加情報の内容の一部を表している。
【００９１】
ソフトテーブル３６１に登録されたエントリには、上記のような処理内容情報、及び付加情報が格納される。そのため、ソフトウェア処理部３５は、ソフトテーブル３６１から抽出すべきエントリが判明している場合、判明しているエントリを参照することにより、スイッチ部２４から入力する受信パケットに対する必要な処理を実行することができる。付加情報の取得のために他のテーブル等を参照する必要はない。そのように、参照すべきエントリの確認が不要である、エントリの参照により付加情報が得られるといったことから、パケット処理はより短時間に終了させることができる。ソフトテーブル３６１のエントリに付加情報を格納することも、パケット処理をより短時間に終了させるうえで有効である。
【００９２】
第１の処理テーブル３６２、及び第２の処理テーブル３６３は、ソフトテーブル３６１に登録されたエントリのなかで付加情報が格納されていないエントリの処理内容情報による受信パケットの処理に用いられる。
【００９３】
図１２は、第１の処理テーブル例を説明する図であり、図１３は、第２の処理テーブル例を説明する図である。図１２、及び図１３には、便宜的に、第１の処理テーブル３６２、及び第２の処理テーブル３６３共に、ＶＬＡＮパケットからＶＸＬＡＮパケットへの変換を可能にする１つのエントリの内容例のみを表している。
【００９４】
第１の処理テーブル３６２のＶＬＡＮパケットからＶＸＬＡＮパケットへの変換のためのエントリには、図１２に表すように、受信パケットの識別情報（ここでは送信元ＭＡＣアドレス、及びＶＬＡＮ  ＩＤのみを想定）、及びＶＮＩが格納される。それにより、第１の処理テーブル３６２は、ＶＬＡＮパケットからＶＸＬＡＮパケットへの変換では、受信パケットからＶＮＩを特定可能にする。
【００９５】
第２の処理テーブル３６３のＶＬＡＮパケットからＶＸＬＡＮパケットへの変換のためのエントリには、図１３に表すように、受信パケットの識別情報（ここでは送信元ＭＡＣアドレスのみを想定）、ＶＮＩ、及び宛先ＶＴＥＰ情報が格納される。宛先ＶＴＥＰ情報とは、具体的には宛先ＶＴＥＰのＭＡＣアドレス（図１３中「VTEP_MAC#1」と表記）、及びＩＰアドレス（図１３中「VTEP_IP#1」）である。それにより、第２の処理テーブル３６２は、ＶＬＡＮパケットからＶＸＬＡＮパケットへの変換では、受信パケット、及びその受信パケットのＶＮＩから、宛先ＶＴＥＰのＭＡＣアドレス、及びＩＰアドレスを特定可能にする。
【００９６】
第１の処理テーブル３６２によって特定されるＶＮＩ、並びに第２の処理テーブル３６３によって特定される宛先ＶＴＥＰのＭＡＣアドレス、及びＩＰアドレスは、付加情報とすることができる。このことから、第１の処理テーブル３６２、及び第２の処理テーブル３６３は、ソフトテーブル３６１へのエントリの追加にも用いられる。
【００９７】
また、付加情報となるデータの特定を通して、第１の処理テーブル３６２、及び第２の処理テーブル３６３から受信パケットの識別情報が判明する。判明した識別情報は、ＡＣＬ３２１のエントリに格納するパケット識別情報とすることができる。このことから、第１の処理テーブル３６２、及び第２の処理テーブル３６３は、ＡＣＬ３２１へのエントリの追加にも用いられる。
【００９８】
第１の処理テーブル３６２、及び第２の処理テーブル３６３の記憶部３５４への格納、及び更新は、例えば管理用ポート２３を介して通信を行う外部装置からの指示によって行われる。その外部装置からの指示に従って第１の処理テーブル３６２、或いは第２の処理テーブル３６３の格納、或いは更新を実際に行うのは、テーブル更新部３５５である。
【００９９】
図４の説明に戻る。
エントリ抽出部３５２は、入出力部３５１から入力したパケット中の索引情報を確認し、確認した索引情報によって特定されるエントリをソフトテーブル３６１から抽出する。抽出されたエントリは、入力パケットと共にパケット処理部３５３に出力される。パケット処理部３５３に出力される入力パケットは、例えば索引情報等を削除した後の受信パケットである。このことから、以降、ソフトウェア処理部３５に入力したパケットは「受信パケット」と表記する。
【０１００】
受信パケットに付加される索引情報は、ソフトテーブル３６１に登録されているエントリのうちの１つを表す情報である。そのため、エントリ抽出部３５２は、ハッシュ値の計算等を行うことなく、ソフトテーブル３６１からのエントリの抽出を行う。
【０１０１】
パケット処理部３５３は、入力した受信パケットに対し、入力したエントリに格納されている処理内容情報によって指定されるルーチンを実行する処理機能であり、ＣＰＵ２５が上記パケット処理ルーチン群を実行することによって実現される。処理の実行により得られたパケットは、入出力部３５１を介してスイッチ部２４に出力される。
【０１０２】
図１４は、受信パケットから作成されるパケット例を説明する図である。図１４では、受信パケットとしてＶＬＡＮパケットを想定し、そのＶＬＡＮパケットから作成されるＶＸＬＡＮパケット例を表している。受信パケットは上側に、作成パケット（ここではＶＸＬＡＮパケット）は下側に表している。
【０１０３】
ＶＸＬＡＮパケットは、受信パケット（オリジナルフレーム）をペイロードに格納するカプセル化によって作成される。そのカプセル化によって付加されるアウターヘッダでは、特に重要なフィールドのデータのみ表している。
【０１０４】
図１４中「VTEP_MAC#1」と表記の宛先ＭＡＣアドレス、「GW_MAC」と表記の送信元ＭＡＣアドレスは、共に、アウターイーサネットヘッダ内に確保されるフィールドに格納されるデータである。GW_MACは、ゲートウェイ２自身のＶＴＥＰとしてのＭＡＣアドレスを表している。また、「UDP」と表記のデータも、アウターイーサネットヘッダ内のEtherTypeフィールドに格納されるデータである。
【０１０５】
図１４中「GE_IP」と表記の送信元ＩＰアドレス、「VTEP_IP#1」と表記の宛先ＩＰアドレスは、共に、アウターＩＰヘッダ内に確保されるフィールドに格納されるデータである。GW_IPは、ゲートウェイ２自身のＶＴＥＰとしてのＩＰアドレスを表している。
【０１０６】
図１４中「８４７２」と表記のデータは、アウターＵＤＰヘッダ内の送信ポートフィールドに格納されるデータ（送信ポート情報）である。「１００００」と表記のＶＮＩは、ＶＸＬＡＮヘッダ内に確保されるVXLAN Network Identifierフィールドに格納される。
【０１０７】
付加されるアウターヘッダに格納される上記データのなかでは、送信元ＭＡＣアドレス、及び送信元ＩＰアドレスを除くデータは全て付加情報の対象となり得る。付加情報の対象となるデータは、第１の処理テーブル３６２、或いは第２の処理テーブル３６３に格納されている。そのため、第１の処理テーブル３６２、及び第２の処理テーブル３６３は、ソフトテーブル３６１にエントリを追加する場合、付加情報の作成に用いられる。
【０１０８】
上記のように、入出力部３５１に入力された受信パケットは、エントリ抽出部３５２、及びパケット処理部３５３によって処理される。これらエントリ抽出部３５２、及びパケット処理部３５３によってパケットへの処理を実行させることにより、処理に要する時間は従来と比較して大幅に短縮される。この処理に要する時間の短縮について、図１５を参照して具体的に説明する。
【０１０９】
図１５は、ソフトウェア処理部によるパケット処理に要する処理時間の変化を説明する図である。ここでは、パケット処理に係わる構成要素として、ソフトウェア処理部の他にスイッチ部を縦軸に表している。横軸には時間を取っている。
【０１１０】
図１５では、ケースとして、図１５（ａ）〜図１５（ｃ）の３ケースを例にとっている。図１５（ａ）は、ソフトテーブルからのエントリの抽出にハッシュ計算を行う従来処理（図１５（ａ）では「ソフトでハッシュ計算を行う従来処理」と表記）である。図１５（ｂ）は、エントリの抽出のためのハッシュ計算をスイッチ部に行わせる従来処理（図１５（ｂ）では「ハッシュ計算をスイッチ部にオフロードする従来処理」と表記）である。図１５（ｃ）は、本実施形態を適用した場合、である。
【０１１１】
本実施形態のスイッチ部２４、ソフトウェア処理部３５（ＣＰＵ２５）、及びソフトテーブル３６１は従来、存在しない。そのため、各従来処理の説明時にスイッチ部、ソフトウェア処理部、及びソフトテーブルに符号を付すのは不適切となる。ここでは、符号の有無による混乱を避けるために、スイッチ部、ソフトウェア処理部、及びソフトテーブルの全てに符号は付さないこととする。
【０１１２】
図１５（ａ）に表す従来処理では、ソフトウェア処理部は、スイッチ部から受信パケットを入力した場合、その受信パケットへのパケット処理を実行する前に、オーバヘッドとなるソフトテーブル検索を行う。ソフトウェア処理部は、パケット処理の実行後、そのパケット処理により得られたパケットをスイッチ部に出力し、そのパケットをスイッチ部に送信させる。このパケット処理の実行後の流れは、図１５（ｂ）に表す従来処理、及び図１５（ｃ）に表す本実施形態でも同じである。
【０１１３】
そのソフトテーブル検索には、受信パケットのデータを用いたハッシュ値の計算（図１５（ａ）では「ハッシュ計算」と表記）、計算したハッシュ値を用いたソフトテーブルからのエントリの抽出（図１５（ａ）では「テーブル参照」と表記）、及び抽出したエントリが適切か否かの確認のためのデータ照合（図１５（ａ）では「データ照合」と表記）が含まれる。データ照合の結果、適切なエントリが抽出されていないことが判明した場合、再度、ソフトテーブル検索が行われる。
【０１１４】
図１５（ｂ）に表す従来処理でも、ソフトウェア処理部がソフトテーブル検索のオーバヘッドとして実行する処理には、ハッシュ計算、テーブル参照、及びデータ照合が含まれる。データ照合の結果、適切なエントリが抽出されていないことが判明した場合、再度、ソフトテーブル検索が行われることも図１５（ａ）に表す従来処理と同じである。しかし、ハッシュ計算をスイッチ部に行わせることにより、ソフトテーブル検索に要する処理時間は、図１５（ａ）に表す従来処理と比較して、より短くなっている。
【０１１５】
図１５（ｃ）に表す本実施形態では、ソフトウェア処理部は、入力した受信パケット中の索引情報によって、ソフトテーブルから適切に１つのエントリを抽出することができる。そのため、ハッシュ計算が不要となり、データ照合も不要とすることができる。つまり、ソフトテーブル検索では、テーブル参照のみ行えば済むようになる。この結果、図１５（ｂ）に表す従来処理と比較しても、スイッチ部から受信パケットを入力してからパケット処理が終了するまでの処理時間は、大幅に短縮される。このことから、オーバヘッドの削減、つまりオーバヘッド分の処理時間の短縮は、パケット処理が終了するまでに要する時間を短縮させるうえで非常に有効である。
【０１１６】
テーブル更新部３５５は、上記のように、外部装置からの指示に従って第１の処理テーブル３６２、或いは第２の処理テーブル３６３の記憶部３５４への格納、或いは更新を行う。また、テーブル更新部３５５は、ソフトテーブル３６１の作成、及び更新を行い、スイッチ部２４に格納されているＡＣＬ３２１の更新を少なくとも行う。
【０１１７】
次に、テーブル更新部３５５によるソフトテーブル３６１の作成、及び更新、並びにＡＣＬ３２１、或いはＦＤＢ３３１の更新のための動作について、図１６〜図１９を参照して具体的に説明する。ここでは便宜的に、ＡＣＬ３２１、及びＦＤＢ３３１のなかで更新対象としてＡＣＬ３２１のみを想定する。ＡＣＬ３２１は、テーブル更新部３５５にとって作成、及び更新の対象となる。ＦＤＢ３３１は、ＦＤＢ処理部３１２の学習によってエントリが追加されるテーブルであることから、テーブル更新部３５５にとって更新のみ対象となる。
【０１１８】
図１６は、作成時のＡＣＬ例を説明する図であり、図１７は、作成時のソフトテーブル例を説明する図である。図１６、及び図１７において、「−」はデータが存在していないことを表している。また、ＡＣＬ３２１、及びソフトテーブル３６１は共に、エントリ数は２０４８としている。これは、ＡＣＬ３２１のエントリとソフトテーブル３６１のエントリとが１対１となる対応関係を想定しているからである。この想定では、索引情報としてエントリのアドレス値を用いることも可能なことから、エントリに索引情報を格納しないようにすることもできる。
【０１１９】
図１６に表記の「受信ポート」「送信元ＭＡＣ」「宛先ＭＡＣ」等は、マッチングデータ、及びマスクデータを用いてデータが照合されるフィールド例を表している。受信パケットとしてはＶＬＡＮパケット、及びＶＸＬＡＮパケットを想定している。
【０１２０】
「受信ポート」は、図８中「Ingress Port」と表記のフィールドを表している。「送信元ＭＡＣ」「宛先ＭＡＣ」「ＶＬＡＮ  ＩＤ」「タイプ」はアウターイーサネットヘッダに確保されるフィールドを表している。「宛先ＩＰ」はアウターＩＰヘッダに確保されるフィールドを表している。「宛先ＵＤＰポート」はアウターＵＤＰヘッダに確保されるフィールドを表している。
【０１２１】
また、フィールドのデータの内容として表記の「ＤＣ」は「Don’t Care」の略記であり、データ照合の対象ではないことを意味している。アクションデータの内容として表記の例えば「Send Soft W/index(2047)」は、２０４７を索引情報として受信パケットに付加してＣＰＵ２５に出力する処理を表している。
【０１２２】
本実施形態では、作成時、図１６に表すように、例えばアドレス値が２０４７と２０４８の２つのエントリにのみ、データを格納するようにしている。これは、ＶＬＡＮパケットからＶＸＬＡＮパケットへの変換、及びＶＸＬＡＮパケットからＶＬＡＮパケットへの変換の２つの処理のみを想定しているからである。ＡＣＬ３２１でデータを格納するエントリの数、つまりＡＣＬ３２１に登録するエントリの数は、想定する処理に応じて決定すれば良い。
【０１２３】
一方、ソフトテーブル３６１にも、作成時、図１７に表すように、アドレス値が２０４７と２０４８の２つのエントリにのみ、データが格納される。それにより、作成時から、ＡＣＬ３２１のエントリとソフトテーブル３６１のエントリとの間の対応関係を１対１とさせている。
【０１２４】
アドレス値が２０４７のエントリに処理内容情報として表記の「Std_ConvertToVXLAN」は、ＶＬＡＮパケットをＶＸＬＡＮパケットに変換するルーチン（以降「標準ＶＸＬＡＮ変換ルーチン」と表記）を表している。「Std_ConvertToVLAN」は、ＶＸＬＡＮパケットをＶＬＡＮパケットに変換するルーチン（以降「標準ＶＬＡＮ変換ルーチン」と表記）を表している。これら２つのルーチンは、上記パケット処理ルーチン群に含まれる。
【０１２５】
アドレス値が２０４７と２０４８の２つのエントリには、付加情報が格納されていない。これは、標準ＶＸＬＡＮ変換ルーチン、及び標準ＶＬＡＮ変換ルーチンは、共に、第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照し、パケット変換のための処理を実行するルーチンだからである。
【０１２６】
第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照する場合、その２つのテーブル３６２、及び３６３を参照しない場合と比較して、処理時間は長くなる。本実施形態では、図１６に表すように、作成時、ＡＣＬ３２１のアドレス値が２０４７と２０４８の２つのエントリに、２つのテーブル３６２、及び３６３を参照させるデータを格納するようにしている。これは、以下のような理由からである。
【０１２７】
ＡＣＬ３２１は、アドレス値の小さいエントリから昇順に参照される。エントリの参照は、対象とすべきエントリを確認することで終了する。それにより、ＡＣＬ３２１のアドレス値が２０４７と２０４８の２つのエントリにデータを格納することは、その２つのエントリによる処理の優先度は最低レベルとしていることを意味する。
【０１２８】
優先度を最低レベルとする結果、パケット処理部３５３が第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照した処理の実行は最小限に抑えられることとなる。従って、パケット処理の完了までに要する時間が不要に長くなることは回避される。そのため、本実施形態では、ＡＣＬ３２１のアドレス値が２０４７と２０４８の２つのエントリにデータを格納するようにしている。
【０１２９】
第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照した処理の実行により、受信パケットの処理に必要な付加情報が得られる。また、ＡＣＬ３２１のエントリに格納すべきパケット識別情報が得られる。このことから、テーブル更新部３５５は、パケット処理部３５３から付加情報、及びパケット識別情報を入力し、ソフトテーブル３６１へのエントリの追加、及びＡＣＬ３２１へのエントリの追加をそれぞれ行う。
【０１３０】
図１８は、作成されたソフトテーブルの更新例を説明する図であり、図１９は、作成されたＡＣＬの更新例を説明する図である。図１８、及び図１９に表す更新例は、パケット処理部３５３がソフトテーブル３６１のアドレス値が２０４７のエントリを参照しての処理を実行した場合を想定している。
【０１３１】
エントリの追加、つまりエントリへのデータの格納は、図１８、及び図１９に表すように、ソフトテーブル３６１、及びＡＣＬ３２１共に、アドレス値が１のエントリに対して行われる。これは、１例であり、データを格納するエントリは、アドレス値が２０４７より小さいエントリのなかから選択すれば良い。
【０１３２】
ソフトテーブル３６１のアドレス値が１のエントリには、パケット処理部３５３から取得された付加情報が格納される。パケット処理部３５３が図１４に表すようなＶＸＬＡＮパケットを生成した場合、宛先ＭＡＣアドレス、宛先ＩＰアドレス、及び送信ポート情報等は付加情報として格納される。図１８に処理内容情報として表記の「ConvertToVXLAN_One」は、付加情報を参照して、ＶＬＡＮパケットをＶＸＬＡＮパケットに変換するルーチンを表している。
【０１３３】
ＡＣＬ３２１のアドレス値が１のエントリには、パケット処理部３５３から取得されたパケット識別情報、及び値が１の索引情報を付加した受信パケットをＣＰＵ２５に出力する処理を表すアクションデータ（図１９中「Send Soft W/index(1)」と表記）が格納される。
【０１３４】
このようにして、テーブル更新部３５５は、第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照しての処理をパケット処理部３５３が実行した場合、ソフトテーブル３６１、及びＡＣＬ３２１のそれぞれにエントリを追加する。ＡＣＬ３２１に追加したエントリのアクションデータには、ソフトテーブル３６１に追加したエントリを表す索引情報を含ませる。それにより、テーブル更新部３５５は、ソフトテーブル３６１のエントリとＡＣＬ３２１のエントリとの間の1対1の対応関係を実現させる。
【０１３５】
このようにソフトテーブル３６１、及びＡＣＬ３２１を更新する結果、パケット処理部３５３による第１の処理テーブル３６２、及び第２の処理テーブル３６３を参照した処理の実行は最小限に抑えられる。そのため、受信パケットの処理にＣＰＵ２５が要する時間も最小、或いは最小に近いレベルに抑えられることとなる。
【０１３６】
ＡＣＬ３２１に登録可能なエントリは有限である。そのため、テーブル更新部３５５は、ＡＣＬ３２１の全てのエントリにデータを格納させている状況でエントリを追加しなければならない場合、アドレス値が２０４７と２０４８のエントリを除くエントリのなかから選択したエントリにデータを上書きする。テーブル更新部３５５は、ＡＣＬ３２１でデータを上書きするエントリと同じアドレス値のソフトテーブル３６１のエントリでもデータを上書きする。そのようにして、テーブル更新部３５５は、エントリの全てにデータを格納させている状況でも、ＡＣＬ３２１、及びソフトテーブル３６１の更新を行う。ＡＣＬ３２１でデータを上書きするエントリの選択方法は、従来と同じ方法で良い。
【０１３７】
本実施形態では、上記のような機能構成のソフトウェア処理部３５が実現されるＣＰＵ２５をゲートウェイ２内に搭載させている。しかし、ソフトウェア処理部３５は、図５に表すように、ゲートウェイ２と通信可能な外部装置４０上に配置させても良い。図５では、ゲートウェイ２の送信ポート２２−１を外部装置４０とのデータ送信専用とし、その送信ポート２２−１を外部装置４０の受信ポート４１と接続させている。外部装置４０のゲートウェイ２へのデータ送信用の送信ポートは図示していないが、その送信ポートは、例えば外部装置４０からのデータ受信専用とする受信ポート２１と接続される。
【０１３８】
図２０は、本実施形態によるパケット処理装置であるゲートウェイのパケット受信時の動作を表すフローチャートである。次に、パケットを受信した場合のゲートウェイ２の動作について、図２０を参照して詳細に説明する。ここでは、便宜的に、スイッチ部２４でＣＰＵ２５にパケット処理を要求するのはＡＣＬ制御部２４ｂのみと想定する。ＣＰＵ２５の動作は、ソフトウェア処理部３５の構成要素に着目して説明する。
【０１３９】
パケットは、受信ポート２１のうちの何れかによって受信され（Ｓ１）、スイッチ部２４に出力される。スイッチ部２４のＡＣＬ制御部２４ｂは、受信処理部３０１が受信パケットを入力し、例えば入力した受信パケットにポート番号を付加する。ＡＣＬ制御部２４ｂのＡＣＬ処理部３０２は、ポート番号が付加された受信パケットを用いてＡＣＬ３２１の検索を行い、その受信パケットに対応するエントリをＡＣＬ３２１から抽出する（以上Ｓ２）。
【０１４０】
ＡＣＬ処理部３０２は、抽出したエントリのアクションデータを確認し、そのアクションデータがソフトウェア処理部３５（ＣＰＵ２５）への受信パケットの出力を表していた場合（Ｓ３：ＹＥＳ）、アクションデータ中の索引情報を付加した受信パケットをＣＰＵ２５に出力する。そのアクションデータがソフトウェア処理部３５への受信パケットの出力を表していない場合（Ｓ３：ＮＯ）、ＡＣＬ処理部３０２は、受信パケットをアクションデータに従って処理する。図２０では、受信パケットが送信ポート２２から送信する場合を想定している。受信パケットの処理としては、廃棄等もある。
【０１４１】
スイッチ部２４から出力された受信パケットは、ソフトウェア処理部３５の入出力部３５１によって入力され、エントリ抽出部３５２に渡される。エントリ抽出部３５２は、入力した受信パケットから索引情報を読み出し、抽出した索引情報が表すエントリをソフトテーブル３６１から抽出する（Ｓ４）。
【０１４２】
エントリ抽出部３５２は、エントリを抽出した後、抽出したエントリに格納されている処理内容情報、及び付加情報を読み出し、読み出した処理内容情報、及び付加情報を受信パケットと共にパケット処理部３５３に渡す（Ｓ５）。抽出されたエントリに付加情報が格納されていない場合、例えば処理内容情報のみパケット処理部３５３に渡される。
【０１４３】
パケット処理部３５３は、処理内容情報が表すルーチンを実行し、受信パケットに対するパケット処理を実行する（Ｓ６）。パケット処理の実行により得られたパケットは、入出力部３５１を介してスイッチ部２４のＡＣＬ制御部２４ｂに出力され、ＦＤＢ制御部２４ｄを介して送信ポート２２から送信される（Ｓ７）。
【０１４４】
図２１は、上記Ｓ６として実行されるパケット処理のフローチャートである。ここでは、便宜的に、ＶＬＡＮパケットからＶＸＬＡＮパケットに変換する２つのルーチンに着目し、処理の流れを表している。その２つのルーチンは、標準ＶＸＬＡＮ変換ルーチンとConvertToVXLAN_Oneである。図２１中、標準ＶＸＬＡＮ変換ルーチンは「標準ルーチン」とも表記している。ConvertToVXLAN_Oneは、「特定変換ルーチン」とも表記している。次に図２１を参照し、パケット処理部３５３の動作について詳細に説明する。
【０１４５】
パケット処理部３５３は、上記のように、パケット処理ルーチン群のなかの処理内容情報が表すルーチンを実行する。このことから、パケット処理部３５３は、エントリ抽出部３５２から入力した処理内容情報が表すルーチンの種類を判定する（Ｓ１１）。処理内容情報が表すルーチンが標準ＶＸＬＡＮルーチンであった場合、Ｓ１１で標準ＶＸＬＡＮルーチンと判定され、Ｓ１２で標準ＶＸＬＡＮルーチンが起動される。
【０１４６】
標準ＶＸＬＡＮルーチンを起動させたパケット処理部３５３は、受信パケット中の送信元ＭＡＣアドレス、及びＶＬＡＮ  ＩＤ等を用いて、第１の処理テーブル３６２からエントリを抽出するためのハッシュ値の計算を行う（Ｓ１３）。次に、パケット処理部３５３は、計算したハッシュ値が表すエントリを第１の処理テーブル３６２から読み出し、読み出したエントリに格納されている識別情報を用いたデータ照合を行う（Ｓ１４）。そのデータ照合により、ハッシュ値が表すエントリが受信パケットに対応するエントリであると確認できた場合、Ｓ１５に移行する。
【０１４７】
Ｓ１５では、パケット処理部３５３は、第１の処理テーブル３６２から抽出したデータ（例えばＶＮＩ、及び宛先ＭＡＣアドレス、等）を用いて、第２の処理テーブル３６３からエントリを抽出するためのハッシュ値の計算を行う。次に、パケット処理部３５３は、計算したハッシュ値が表すエントリを第２の処理テーブル３６３から読み出し、読み出したエントリに格納されている識別情報を用いたデータ照合を行う（Ｓ１６）。そのデータ照合により、ハッシュ値が表すエントリが受信パケットに対応するエントリであると確認できた場合、Ｓ１７に移行する。
【０１４８】
Ｓ１４、及びＳ１６でのデータ照合は、対象とすべきエントリが複数、存在する場合、受信パケットに対応するエントリを特定するか、或いは対応するエントリが存在しないことを確認するまで行われる。そのため、Ｓ１７への移行時には、ＡＣＬ（図２１中「ハードテーブル」と表記）３２１に追加するエントリに格納すべきパケット識別情報、及びソフトテーブル３６１に追加するエントリに格納すべき付加情報が確定する。このことから、Ｓ１７では、パケット処理部３５３は、付加情報、及びパケット識別情報を用いて、ソフトテーブル３６１、及びＡＣＬ３２１にそれぞれ追加のエントリの登録を行う。その後、パケット処理部３５３は、標準ＶＸＬＡＮ変換ルーチンを終了させ、ConvertToVXLAN_Oneを起動させる（Ｓ１８）。
【０１４９】
ConvertToVXLAN_Oneを起動させたパケット処理部３５３は、付加情報を用いて図１４に表すようなＶＸＬＡＮパケットを生成し、生成したＶＸＬＡＮパケットをスイッチ部２４のＡＣＬ制御部２４ｂに出力する。生成したＶＸＬＡＮパケットをＡＣＬ制御部２４ｂに出力した後、パケット処理が終了する。
【０１５０】
付加情報を取得した後のＶＸＬＡＮパケットの生成方法自体は、従来と基本的に同じである。このことから、図２１では、ＶＸＬＡＮパケットの生成のための処理は省略している。また、標準ＶＸＬＡＮ変換ルーチンは、次にConvertToVXLAN_Oneの実行を想定することで、実行に必要な情報（付加情報）の取得、及びパケット識別情報の取得のための機能に制限させている。
【０１５１】
なお、上記説明では、ソフトウェア処理部３５にパケット処理を実行させるテーブルとしてＡＣＬ３２１を想定しているが、テーブルはＡＣＬ３２１、及びＦＤＢ３３１以外のテーブルであっても良い。また、ソフトウェア処理部３５（ＣＰＵ２５）とスイッチ部２４は、それぞれ１つとしているが、図２２に表すように、それぞれＡＣＬ３２１（３２１−１、３２１−２）を記憶する複数のスイッチ部２４（２４−１、２４−２）を１つのソフトウェア処理部３５に対応させても良い。また、図２３に表すように、スイッチ部２４は、複数のＡＣＬ３２１（３２１−１１〜１３）を記憶するものであっても良い。複数のＡＣＬ３２１の参照は、受信パケットに対応するエントリが存在しないことの確認により、参照対象とするＡＣＬ３２１を順次、変更させても良いが、複数のＡＣＬ３２１の参照を並行して行わせるようにしても良い。
【０１５２】
本実施形態では、ＡＣＬ３２１のエントリとソフトテーブル３６１のエントリの対応関係は1対1とし、ＡＣＬ３２１のエントリには、ソフトテーブル３６１のエントリを直接、表す索引情報を格納させている。その索引情報は、ソフトテーブル３６１のエントリを間接的に表す情報であっても良い。また、索引情報は、ＡＣＬ３２１のエントリに格納させなくとも良い。つまり、ソフトテーブル３６１のエントリを表す索引情報は、ＡＣＬ３２１でヒットしたエントリのアドレス値、受信パケットのデータ、及びそのデータを用いて計算された値（例えばハッシュ値。以降、便宜的にハッシュ値を想定する）等のうちの少なくとも１つを用いて生成しても良い。図２３、及び図２４に表すように、複数のＡＣＬ３２１が存在する場合、ＡＣＬ３２１に割り当てる識別情報（ここでは「テーブルＩＤ」と表記）も索引情報の生成に用いることができる。以降、索引情報をそのまま用いる方法を「直接マッピング方法」と表記し、結果として、索引情報を生成する形となる方法を「間接マッピング方法」と表記する。
【０１５３】
間接マッピング方法を採用しても、索引情報の生成をスイッチ部２４に行わせることにより、ソフトウェア処理部３５にとっては、パケット処理は直接マッピング方法と同じように実行することができる。そのため、ソフトウェア処理部３５は、直接マッピング方法に近い処理時間でパケット処理を実行することができる。
【０１５４】
図２４は、間接マッピング方法の第１の適用例を説明する図である。図２４に表す例は、「索引情報＝Ｆ（ｘ）」の計算式を用いて索引情報を生成する例であり、ケースとしては、例えば図２２に表す変形例、つまり２つのＡＣＬ３２１−１、３２１−２を対象にする場合を想定している。図２４において、「Ｓａ」は索引情報、「Ｔ」はテーブルＩＤ、「Ｈａ」はＡＣＬ３２１でヒットしたエントリのアドレス値、をそれぞれ表している。
【０１５５】
図２４に表す例では、ＡＣＬ３２１−１のエントリ数はｎ、ＡＣＬ３２１−２のエントリ数はｍとし、ｍ＞ｎの関係となっているのを想定している。また、各ＡＣＬ３２１のアドレス値が１〜ｎのエントリは、ソフトテーブル３６１のアドレス値が１〜ｎのエントリに1対1に対応させている。ＡＣＬ３２１−２のアドレス値がｎ＋１〜ｍのエントリは、ソフトテーブル３６１のアドレス値がｎ＋１〜ｍのエントリに１対１に対応させている。それにより、関数Ｆ（Ｔ，Ｈａ）の値域、つまり算出される索引情報Ｓａの範囲は、１≦Ｓａ≦ｍ、となっている。ｉは、１＜ｉ＜ｎ、の関係となっている。
【０１５６】
索引情報Ｓａの計算に用いる変数は、ＡＣＬ３２１の各エントリに格納しても良い。図２４中に表記の「index(1,1)」「index(1,i)」等は、索引情報Ｓａの計算に変数として用いる情報を表している。この情報は、ヒットしたエントリのアドレス値等の代わりに用いても良く、或いは追加する変数の１つとして用いても良い。
【０１５７】
図２５は、間接マッピング方法の第２の適用例を説明する図である。図２５に表す例も、「索引情報＝Ｆ（ｘ）」の計算式を用いて索引情報を生成する例であり、ケースとしては、例えば図２３に表すような変形例を想定している。ここでは、便宜的に、ＡＣＬ３２１はＡＣＬ３２１−１１、３２１−１２の２つのみを想定している。
【０１５８】
図２５に表す例では、ＡＣＬ３２１−１１のエントリ数はｎ。ＡＣＬ３２１−１２のエントリ数はｍとしている。各ＡＣＬ３２１のエントリは、全て、ソフトテーブル３６１の異なるエントリに1対1に対応させている。それにより、関数Ｆ（Ｔ，Ｈａ）の値域、つまり算出される索引情報Ｓａの範囲は、１≦Ｓａ≦ｎ＋ｍ、となっている。この図２５に表す適用例でも、索引情報Ｓａの計算に用いる変数を各ＡＣＬ３２１のエントリに格納しても良い。
【０１５９】
本実施形態、並びに図２４、及び図２５に表す各適用例でも、１つのＡＣＬ３２１の各エントリとソフトテーブル３６１の各エントリとの間の対応関係は1対1としている。その対応関係は、図２６に表すように、多対１を可能としても良い。多対１の対応関係を可能にする場合、ＡＣＬ３２１へのエントリの追加により、ソフトテーブル３６１にエントリを追加するとは限らなくなる。
【０１６０】
図２６に表す例では、索引情報Ｓａの計算は、ヒットしたエントリのアドレス値Ｈａのみを用いることを想定している。索引情報Ｓａは、アドレス値Ｈａに対応する索引情報Ｓａを定義した変換テーブル２５０１を用いて取得しても良い。変換テーブル２５０１のような変換テーブルを用いた索引情報Ｓａの取得は、図２４、及び図２５に表すような適用例に採用しても良い。図２６に表す適用例でも、アドレス値Ｈａの代わりに、或いはアドレス値と組み合わせて用いる情報をＡＣＬ３２１の各エントリに格納しても良い。
【０１６１】
また、本実施形態では、パケット処理装置としてゲートウェイ２を想定しているが、適用するパケット処理装置はゲートウェイ２とは異なる種類であっても良い。ソフトウェア処理により機能を実現させるタイプのパケット処理装置であれば、本実施形態は幅広く適用させることができる。
【０１６２】
上記以外にも、様々な変形を行うことができる。
【０１６３】
以上の変形例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を含む第１の処理実行情報を記憶した第１の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を含む第２の処理実行情報を記憶した第２の記憶部と、
受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第１の処理実行情報中のパケット情報の参照により、前記第１の処理実行情報のなかで参照すべき第１の処理実行情報を特定し、特定した第１の処理実行情報に含まれる処理指定情報が、前記第２の処理実行情報による処理を指定している場合に、前記第２の処理実行情報のなかで参照すべき第２の処理実行情報を表す指定情報を前記受信パケットと共に出力する第１の処理部と、
前記第１の処理部が出力する指定情報が表す第２の処理実行情報中の処理情報に従って、前記第１の処理部が出力する前記受信パケットを用いた処理を実行する第２の処理部と、
を有することを特徴とするパケット処理装置。
（付記２）
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を格納する第１のエントリが複数保持される第１のテーブルを記憶した第１の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を格納する第２のエントリが複数保持される第２のテーブルを記憶した第２の記憶部と、
受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第１のテーブルの参照により、前記第１のテーブルで対象とする第１のエントリを特定し、特定した第１のエントリに格納されている処理指定情報に前記第２のテーブル中の前記第２のエントリを表すエントリ情報が含まれている場合に、前記エントリ情報を前記受信パケットと共に出力するスイッチ部と、
前記スイッチ部が出力するエントリ情報が表す第２のエントリに格納されている処理情報に従って、前記スイッチ部が出力する前記受信パケットを用いた処理を実行する処理部と、
を有することを特徴とするパケット処理装置。
（付記３）
前記処理部が前記処理の実行に必要な実行情報を記憶した第３の記憶部と、
前記処理部が前記第３の記憶部を参照して前記処理を実行した場合に、前記第３の記憶部の参照により得られる実行情報を用いて、前記第１のテーブル、及び前記第２のテーブルにそれぞれ前記エントリ情報を含む前記処理指定情報を格納させた前記第１のエントリ、及び前記第３の記憶部を参照しない処理を表す処理情報を格納させた前記第２のエントリの追加を行い、追加する前記第２のエントリには、前記実行情報のうちの一部を前記処理部が前記処理に用いるべき参照情報として格納する更新部と、
を更に有することを特徴とする付記２記載のパケット処理装置。
（付記４）
前記更新部は、前記第２のテーブルに、前記第３の記憶部を参照する処理を表す処理情報を格納した第２のエントリを予め登録すると共に、前記第１のテーブルに、前記第２のテーブルに予め登録させる第２のエントリを表すエントリ情報を含む処理指定情報を格納した第１のエントリを予め登録する初期化を行う、
ことを特徴とする付記２、または３記載のパケット処理装置。
（付記５）
前記処理指定情報に含まれる前記エントリ情報は、対応する前記第２のエントリを直接的に表す直接情報、及び前記直接情報の特定に用いる間接情報のうちの一方である、
ことを特徴とする付記２、３、または４記載のパケット処理装置。
（付記６）
パケット処理装置として用いられる情報処理装置の制御プログラムにおいて、
記憶部に記憶されている、パケットに対して実行すべき処理を表す処理情報を格納する第２のエントリが複数保持される第２のテーブルから、スイッチ部が出力するエントリ情報が表す第２のエントリを抽出し、
抽出した前記第２のエントリに格納されている前記処理情報に従って、前記スイッチ部が出力するパケットを用いた処理を実行することを特徴とするパケット処理装置の制御プログラム。
（付記７）
パケット処理装置に、
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を格納する第１のエントリが複数保持される第１のテーブルを記憶した第１の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を格納する第２のエントリが複数保持される第２のテーブルを記憶した第２の記憶部と、を搭載させ、
前記パケット処理装置が有するスイッチ部が、受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第１のテーブルの参照により、前記第１のテーブルで対象とする第１のエントリを特定し、特定した第１のエントリに格納されている処理指定情報に前記第２のテーブル中の前記第２のエントリを表すエントリ情報が含まれている場合に、前記エントリ情報を前記受信パケットと共に出力し、
前記パケット処理装置が有する処理部が、前記スイッチ部が出力するエントリ情報が表す第２のエントリに格納されている処理情報に従って、前記スイッチ部が出力する前記受信パケットを用いた処理を実行することを特徴とするパケット処理装置の制御方法。
【符号の説明】
【０１６４】
１、１ａ、１ｂ    サーバ
２    ゲートウェイ
３    ＶＬＡＮ
４    ＶＸＬＡＮ
２１、２１−１〜２１−Ｎ    受信ポート
２２、２２−１〜２２−Ｎ    送信ポート
２４、２４−１、２４−２    スイッチ部
２４ａ    ＡＣＬ記憶部
２４ｂ    ＡＣＬ制御部
２４ｃ    ＦＤＢ記憶部
２４ｄ    ＦＤＢ制御部
２５    ＣＰＵ
２５ａ    コア
２５ｂ    ＲＯＭ
２５ｃ    ＲＡＭ
３１    受信ポート群
３２    送信ポート群
３５    ソフトウェア処理部
３０１    受信処理部
３０２    ＡＣＬ処理部
３０３    出力部
３０４、３１４、３５１    入出力部
３１２    ＦＤＢ処理部
３１３    送信制御部
３２１、３２１−１、３２１−２、３２１−１１〜１３    ＡＣＬ
３３１    ＦＤＢ
３５２    エントリ抽出部
３５３    パケット処理部
３５４    記憶部
３５５    テーブル更新部
３６１    ソフトテーブル
３６２    第１の処理テーブル
２６３    第２の処理テーブル
【図１】
0006369175.tif 000002
【図２】
0006369175.tif 000003
【図３】
0006369175.tif 000004
【図４】
0006369175.tif 000005
【図５】
0006369175.tif 000006
【図６】
0006369175.tif 000007
【図７】
0006369175.tif 000008
【図８】
0006369175.tif 000009
【図９】
0006369175.tif 000010
【図１０】
0006369175.tif 000011
【図１１】
0006369175.tif 000012
【図１２】
0006369175.tif 000013
【図１３】
0006369175.tif 000014
【図１４】
0006369175.tif 000015
【図１５】
0006369175.tif 000016
【図１６】
0006369175.tif 000017
【図１７】
0006369175.tif 000018
【図１８】
0006369175.tif 000019
【図１９】
0006369175.tif 000020
【図２０】
0006369175.tif 000021
【図２１】
0006369175.tif 000022
【図２２】
0006369175.tif 000023
【図２３】
0006369175.tif 000024
【図２４】
0006369175.tif 000025
【図２５】
0006369175.tif 000026
【図２６】
0006369175.tif 000027