以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
(第1の実施形態)
図1は、第1の実施形態によるパケット処理装置の機能構成例を表す図である。このパケット処理装置10は、不図示のネットワークと接続され、そのネットワークを介して受信したパケットに対し、予め設定された処理を行うネットワーク機器である。そのパケット処理装置10は、図1に表すように、第1の処理部11、第2の処理部12、及び設定部13を備えている。第1の処理部11と第2の処理部12とは、通信手段14により接続されている。
第1の処理部11と第2の処理部12を接続する通信手段14は、例えばケーブル、専用のバス、或いは専用のネットワーク等である。その通信手段14は、特に限定されない。それにより、第1の処理部11と第2の処理部12は異なる筐体の装置であっても良い。
具体的には、第1の処理部11は、例えばスイッチLSI(Large Scale Integration)、若しくはNIC(Network Interface Card)であり、第2の処理部12は、例えばCPU(Central Processing Unit)を含む情報処理装置である。これは1例であり、この例に限定されない。
第1の処理部11は、受信パケットに対して最初に処理を行う構成要素であり、第1のパケット処理部11a、第1の記憶部11b、及び計算部11cを備えている。第2の処理部12は、第2のパケット処理部12a、及び第2の記憶部12bを備えている。
第1の処理部11の第1の記憶部11bには、パケットを識別する識別情報と、その識別情報によって識別されるパケットに対して実行すべき処理を表す処理指定情報とが対応付けられて記憶される。
第1のパケット処理部11aは、受信パケット上の一部のデータを用いて値(以降「第1の値」と表記)を計算し、計算した第1の値によって特定されるデータ(ここでは、識別情報と処理指定情報)を第1の記憶部11bから読み出して参照する。それにより、第1のパケット処理部11aは、第1の記憶部11bから読み出した処理指定情報に従って、受信パケットに対する処理を行う。
読み出した処理指定情報が第2の処理部12での処理を指定していた場合、第1のパケット処理部11aは、検索結果情報(図1中「生成情報1(検索結果)」と表記)を生成し、生成した検索結果情報を受信パケットと共に第2の処理部12に出力する。第1のパケット処理部11aは、第1の値から処理指定情報を読み出せなかった場合も、検索結果情報を生成して、生成した検索結果情報と受信パケットと共に第2の処理部12に出力する。
計算部11cは、受信パケット上の予め定められたデータを用いて値(以降「第2の値」と表記する。図1中)生成情報2(計算結果)」と表記)を計算する。第1のパケット処理部11aは、計算部11cから入力した第2の値を、受信パケット等と共に第2の処理部12に出力する。なお、異なる第2の値を算出する複数の計算部を持ち、複数の第2の値を第2の処理部に出力しても良い。
第2の処理部12の第2の記憶部12bには、受信パケットに対して実行すべき処理内容を表す処理内容情報、及び実行すべき処理に必要な付加情報(1つ以上のパラメタ等)が格納される(図1では、処理内容情報と付加情報をまとめて「処理情報」と表記)。第2のパケット処理部12aは、第2の記憶部11bに記憶された処理内容情報、及び付加情報を用いて、受信パケットに対する処理を実行する。
本実施形態では、第1の記憶部11bに記憶された処理指定情報のなかで第2の処理部12による処理を指定している処理指定情報と、第2の記憶部12bに記憶された処理内容情報と付加情報は、1対1の対応関係とさせている。本実施形態では、第2の処理部12による処理を指定している処理指定情報の第1の記憶部11b上の記憶位置を表す値は、その処理に対応する処理内容情報と付加情報の第2の記憶部12b上の記憶位置を表す値と同じとなるように管理している。このことから、検索結果情報として、上記第1の値を用いることができる。他には、処理指定情報を第1の記憶部11bから読み出した位置を直接的に表す位置情報(アドレス値、インデックス値、等)を用いることもできる。検索結果情報には、例えばそのような記憶位置を表す情報の他に、処理指定情報を読み出せたか否かを表す情報が含まれる。
第1のパケット処理部11bが処理指定情報を読み出せなかった場合、第2のパケット処理部12aは、第2の記憶部12bから処理情報を読み出すべき位置を検索結果情報から特定することができない。第2の値は、検索結果情報の代わりに、第2の記憶得12bから処理情報を読み出すために用いられる。それにより、第2のパケット処理部12aは、検索結果情報を参照し、処理指定情報が読み出されていた場合、検索結果情報によって特定される処理情報を読み出し、処理指定情報が読み出されていない場合、第2の値によって特定される処理情報を読み出す。
このように、第2のパケット処理部12aは、検索結果情報、或いは第2の値を用いて、参照すべき処理情報を第2の記憶部12bから読み出す。言い換えれば、第1の処理部11に、第2のパケット処理部12aが第2の記憶部12bから参照すべき処理情報を読み出すための情報を提供させる。そのため、第2のパケット処理部12aは、第2の記憶部12bから参照すべき処理情報をより迅速に読み出すことができる。参照すべき処理情報を第2の記憶部12bからより迅速に読み出せることから、第2のパケット処理部12bによる受信パケットへの処理もより高速に行えるようになる。
第1の値の計算に用いられる受信パケット上のデータは、例えば宛先のMACアドレスである。第2の値の計算に用いられる受信パケット上のデータは、例えば宛先IP(Internet Protocol)アドレス、送信元IPアドレス、宛先L4ポート番号、及び送信元L4ポート番号である。これらのデータは、何れも1例であり、特に限定されない。
付加情報は、受信パケットによって異なるのが普通である。第2の値によって特定される処理情報は、例えば不特定のパケットに対する処理を実行するための情報であり、付加情報は存在しない。しかし、付加情報は、第2のパケット処理部12aが受信パケットに対する処理を実行する過程で特定される。このことから、本実施形態では、第2の値によって特定される処理情報に従った処理を第2のパケット処理部12aが実行することを契機に、処理情報の第2の記憶部12bへの登録、及び処理指定情報の第1の記憶部11bへの登録を行うようにしている。設定部13は、そのような登録のための第1の記憶部11b、及び第2の記憶部12bの更新を実現させる構成要素である。
設定部13は、第2のパケット処理部12aから、処理情報、及び処理指定情報の登録に必要な情報を取得し、処理情報を記憶させる第2の記憶部12b上の位置を決定して、決定した位置に処理情報を記憶させる。また、設定部13は、第2の記憶部12b上で決定した位置と同じ第1の記憶部11b上の位置に、処理指定情報を記憶させる。そのようにして、設定部13は、第1の記憶部11b上の処理指定情報と、第2の記憶部12b上の処理情報とを1対1に対応付ける。
また、設定部13は、予め定められた設定に従い、第1の記憶部11b、及び第2の記憶部12bの初期化を行うことができる。その初期化時に第2の記憶部12bに登録させる処理情報は、例えば必要最小限度である。そのような初期化を行った場合、第2のパケット処理部12aによる受信パケットへの処理の実行により、第2の記憶部12bに登録される処理情報が増えていくことになる。設定部13は、第2の記憶部12bに登録させた処理情報数が上限値に達した場合、消去すべき処理情報を選択して消去し、登録すべき処理情報を登録する場所を確保する。
なお、本実施形態では、設定部13は、第1の処理部11、第2の処理部12とは別の構成要素としているが、第1の処理部11、或いは第2の処理部12の一部としても良い。
(第2の実施形態)
図2は、第2の実施形態によるパケット処理装置を用いて構築された情報処理システムの構成例を説明する図である。その情報処理システムは、例えばデータセンターに構築されたシステムであり、複数台のサーバ1(1a、及び1b)がVLAN(Virtual Local Area Network)3、或いはVXLAN(Virtual eXtensible LAN)4に接続されている。
VLAN3、及びVXLAN4は、例えば物理的に同じネットワーク(LAN)である。図2では、サーバ1を、VXLAN4に非対応のサーバ1aと、VXLAN4に対応のサーバ1bとに大別している。本実施形態によるパケット処理装置は、VLAN3とVXLAN4間のパケット通信を可能にするゲートウェイ(図2中「VXLAN GW」と表記)2として実現されている。ゲートウェイ2は、VXLAN4に対応のサーバ1bと同じく、VXLAN4上を転送されるパケット(以降「VXLANパケット」と総称)の送信元、或いは宛先となるVTEP(VXLAN Tunnel End Point)機能を備える。以降、VLAN3上を転送されるパケットは「VLANパケット」と総称し、転送されるネットワークを特に限定する必要のない場合は単に「パケット」と表記する。
図3は、本実施形態によるパケット処理装置であるゲートウェイの構成例を表す図である。図3に表すように、ゲートウェイ2は、N個の受信ポート21(21−1〜21−N)、N個の送信ポート22(22−1〜22−N)、管理用ポート23、スイッチ部(スイッチングモジュール)24、及びCPU25を備えている。
スイッチ部24は、何れかの受信ポート21がパケットを受信した場合に、受信したパケットに対して必要な処理を実行し、送信ポート22からパケットを送信させるハードウェアである。そのスイッチ部24は、ACL(Access Control List)記憶部24a、ACL制御部24b、FDB(Forwarding DataBase)記憶部24c、及びFDB制御部24dを備えている。
ACL記憶部24aは、ACLを記憶させるメモリであり、ACLの記憶に用いられるメモリには、多くの場合、TCAM(Ternary Content Addressable Memory)が採用される。このTCAMは、高速なテーブル・ルックアップ用に設計されたメモリである。
ACLは、受信したパケットのフィルタリング等のためのテーブルである。ACLに登録された各エントリには、パケットを識別するためのパケット識別情報、及びパケット識別情報にマッチするパケットに対して実行すべき処理を表す情報(以降「処理指定情報」と表記)が格納される。処理指定情報が表す処理とは、パケットの転送、パケットの廃棄、或いはパケット内容の変更を伴う転送、等である。
ACL制御部24bは、ACL記憶部24aに記憶されているACLを参照し、受信したパケットに対して実行すべき処理を実行する。処理がパケットの転送であった場合、処理指定情報は、パケットの転送に用いるべき送信ポート22を指定することが可能である。そのため、ACL制御部24bは、処理指定情報が指定する送信ポート22からパケットを送信させることができる。
FDB記憶部24cは、FDBを記憶させるメモリである。そのFDBは、パケットの転送のためのテーブルである。そのFDBでは、エントリ(レコード)毎に、宛先アドレス(MACアドレス、或いはIPアドレス。以降、便宜的にMACアドレスのみを想定する)と、パケットを送信させる送信ポート22の対応関係が定義されている。FDB制御部24dは、FDB記憶部24cに記憶されているFDBを参照し、対象となるパケットの転送を実現させる。
CPU25は、スイッチ部24が対象としない処理が必要なパケットに対し、ソフトウェア処理を実行するソフトウェア処理部として機能する。そのCPU25は、コア25a、ROM(Read Only Memory)25b、及びRAM(Random Access Memory )25cを備えている。
このROM25bには、コア25aが実行する各種プログラムが格納されている。そのプログラムのなかには、パケットに対するソフトウェア処理のためのプログラム群(以降「パケット処理ルーチン群」と表記)が含まれる。
CPU25には、管理用ポート23が接続されている。この管理用ポート23は、外部装置によりゲートウェイ2を制御・管理するためのポートであり、例えば管理用に構築されたネットワークと接続されている。それにより、CPU25は、外部装置からの指示に従って、ゲートウェイ2を制御する。
図4は、本実施形態によるパケット処理装置であるゲートウェイの機能構成例を表す図である。図4では、スイッチ部24のACL制御部24b、及びFDB制御部24d、並びにCPU25に着目し、その機能構成例を表している。
図4において、321、及び331は、それぞれACL、及びFDBである。受信ポート群31は、受信ポート21−1〜21−Nの集合である。送信ポート群32は、送信ポート22−1〜22−Nの集合である。
ACL制御部24bは、受信処理部301、ACL処理部302、出力部303、及び入出力部304を備える。
受信処理部301は、受信ポート群31によって受信されたパケットをスイッチ部24内に入力するための機能である。受信処理部301によって入力された受信パケットは、ACL処理部302に出力される。
ACL処理部302は、ACL321を参照し、受信処理部301から入力した受信パケットに対する処理を実行する機能である。送信ポート群32を用いて受信パケット(ここでは内容を変更した受信パケットを含む)を転送させる場合、ACL処理部302は、出力部303を介して受信パケットをFDB制御部24dに出力する。
ACL321に登録されたエントリのなかには、CPU25によるソフトウェア処理を表す処理指定情報が格納されているエントリが存在する。そのため、ACL制御部24bは、CPU25との間でパケットを含むデータの入出力を行う。入出力部302は、CPU25との間でデータを入出力する機能である。
図6は、本実施形態で用いられるACL例を説明する図である。
図6において、アドレスはエントリの識別情報であり、便宜的に表している。ACL321に登録される各エントリは、マッチングフィールド、マスクフィールド、及びアクションフィールドに分割されている。
マッチングフィールドに格納されるデータ(マッチングデータ)は、対象とするパケットを特定するためのデータである。マスクフィールドに格納されるデータ(マスクデータ)は、パケットのなかでマッチング対象としないフィールド、或いはビットを表すデータである。これらマッチングデータ、及びマスクデータは、パケット識別情報の1例に相当する。
図7は、VXLANパケットの構成を説明する図であり、図8は、受信されたVXLANパケットのなかでマッチングデータ、及びマスクデータを用いてデータが照合されるフィールド例を説明する図である。ここで図7、及び図8を参照し、マッチングデータ、及びマスクデータを用いたデータ照合について具体的に説明する。
VXLANパケットは、図7に表すように、本来のイーサネット(Ethernet)フレームをカプセル化したパケットである。カプセル化のために、本来のイーサネット・フレームにアウターヘッダが付加されている。アウターヘッダは、アウターイーサネットヘッダ、アウターIPヘッダ、アウターUDP(User Datagram Protocol)ヘッダ、及びVXLANヘッダを含む。
図7に表すVXLANパケットを受信した場合、ACL制御部24bの受信処理部301は、そのVXLANパケットに対し、そのVXLANを受信した受信ポート21を表す識別情報(以降「ポート番号」と表記する)を付加する。図8に表記の「Ingress Port」は、VXLANパケットに付加されたフィールド(及びそのフィールドに格納されたポート番号)を表している。
アウターイーサネットヘッダは、宛先MACアドレスフィールド(図7中「Destination VTEP MAC Address(H)」「Destination VTEP MAC Address(L)」が表記されたフィールド)、送信元MACアドレスフィールド(図7中「Source VTEP MAC Address(H)」「Source VTEP MAC Address(L)」が表記されたフィールド)、EtherType(Ethernet Type)フィールド、及びOuter VLAN Tag Informationフィールドを含む。
上記フィールドのなかで、EtherTypeフィールドは、通信プロトコルの種類を表す識別子がデータとして格納されるフィールドである。Optional EtherTypeフィールドに表記の「C-Tag 802.1Q」は、ネットワーク規格としてIEEE(Institute of Electrical and Electronic Engineers)802.1Qが指定されていることを表している。その場合、Outer VLAN Tag Informationフィールドには、PCP(Priority Code Point)、CFI(Canonical Format Indicator)、及びVLAN ID(Identifier)がデータとして格納される。RCPは、VXLANパケットの優先度を指定するデータである。CFIは、MACアドレスが正規フォーマットか否かを表すデータである。
アウターIPヘッダは、ToS(Type of Service)フィールド、Protocolフィールド、送信元IPアドレスフィールド(図7中「Source VTEP IP Address」と表記)、及び宛先IPアドレスフィールド(図7中「Destination VTEP IP Address」と表記)を含む。ToSフィールドには、サービスの種類を表す種別データが格納され、Protocolフィールドには、通信プロトコルの種類を表す識別子が格納される。
アウターUDPヘッダは、受信ポートフィールド(図7中「Source Port」と表記)、及び送信ポートフィールド(図7中「Dest Port」と表記)を含む。図7中に表記の「Source Port=xxxx」は、カプセル化するパケットの対応するデータが格納されることを表している。また、「Dest Port=VXLAN Port」は、VXLANパケットのままの転送を要求するデータが格納されていることを表している。
VXLANヘッダは、VNI(VXLAN Network Identifier)が格納されるVXLAN Network Identifierフィールドを含む。
図8に表記の「MAC src」「MAC dst」「EtherType」「VLAN ID」及び「VLAN pri」は、全てアウターイーサネットヘッダに確保されるフィールドを表している。「MAC src」と表記のフィールドには送信元MACアドレスが格納される。「MAC dst」と表記のフィールドには宛先MACアドレス、「EtherType」と表記のフィールドには通信プロトコルの識別子、「VLAN ID」と表記のフィールドにはVLAN ID、「VLAN pri」と表記のフィールドにはRCPがそれぞれ格納される。
図8に表記の「IP ToS」「IP proto」「IP src」及び「IP dst」は、全てアウターIPヘッダに確保されるフィールドを表している。「IP ToS」と表記のフィールドにはサービスの種別データが格納される。「IP proto」と表記のフィールドには通信プロトコルの識別子、「IP src」と表記のフィールドには送信元IPアドレス、「IP dst」と表記のフィールドには宛先IPアドレスがそれぞれ格納される。
図8に表記の「L4 sport」「L4 dport」は、共にアウターUDPヘッダに確保されるフィールドを表している。「L4 sport」と表記のフィールドにはソフトウェア的な通信端としての送信元を表すデータ、「L4 dport」と表記のフィールドにはソフトウェア的な通信端としての宛先を表すデータが格納される。
ACL321の各エントリに格納されるマッチングデータ、及びマスクデータは、図8に表すような各フィールドのデータを対象にしたマッチング(照合)を可能にさせる。それにより、マッチングデータ、及びマスクデータは、対象とするパケットの適切な特定を可能にさせる。
なお、マスクデータは、何れかのフィールドに格納されるデータのビット単位の照合を可能にさせる。それにより、例えばMACアドレスでは、不必要とするビットを除いた形での照合が可能となっている。図8に表すフィールド(データ)の組み合わせは、VXLANパケットを想定した場合の1例であり、そのフィールドの組み合わせは特に限定されない。
ACL321の各エントリには、マッチングフィールド、及びマスクフィールドの他に、アクションフィールドが存在する。そのアクションフィールドに格納されるデータ(以降「アクションデータ」と表記)は、ACL制御部24bが実行すべき処理を表す処理指定情報の1例である。
図6には、アクションデータの内容として、「Add-info(1234),forward-to-CPU」「Drop」及び「Forward-to-Port(10)」を表記している。それらの表記は、それぞれ以下のような処理の実行をACL制御部24bに要求する。
「Add-info(1234),forward-to-CPU」は、受信パケットに1234を付加してCPU25に出力する処理の実行をACL制御部25bに要求する。それにより、「Add-info(1234),forward-to-CPU」は、CPU25によるソフトウェア処理を実行させる。「Drop」は、受信パケットの廃棄をACL制御部24bに要求する。「Forward-to-Port(10)」は、受信パケットを、ポート番号として10が割り当てられた送信ポート22から送信させることをACL制御部24bに要求する。
受信パケットに付加する1234の数値は、CPU25が処理の実行のために参照するソフトテーブル361から抽出すべきエントリを表す索引情報である。本実施形態では、その索引情報は、例えば図9に表すように、ヘッダ内に格納する形で受信パケットに付加している。
その図9に表す例では、通常のパケット(イーサネットフレーム)に索引情報を付加する場合を想定している。索引情報自体は、図9中に「Index val」と表記しており、索引情報は送信元MACアドレスフィールドとEtherTypeフィールドの間に挿入されている。その索引情報の前には、「Tag」と表記の索引情報の存在を表す情報が付加されている。図9に表すような索引情報の受信パケットへの付加は1例であり、索引情報の付加方法は特に限定されない。
図7に表すように、Optional EtherTypeフィールドに「C-Tag 802.1Q」と表記のデータを格納した場合、送信元MACアドレスフィールドとEtherTypeフィールドの間に4バイトのフィールドが確保される。本実施形態では、このことを利用し、索引情報を受信パケット内に格納している。Optional EtherTypeフィールドに格納されたデータが図9に表記の「Tag」であり、Optional EtherTypeフィールドは2バイトであることから、索引情報の格納用に最大で2バイトを用いることができる。
ACL処理部302は、受信パケットから特定したエントリに、CPU25によるソフトウェア処理の実行を要求するアクションデータが格納されていた場合、入出力部304を介して、索引情報を付加した受信パケットをCPU25に出力する。CPU25は、入力した受信パケットを用いた処理を実行し、その実行により得られたパケットをACL制御部24bに出力する。ACL制御部24bに出力されたパケットは、入出力部304を介してACL処理部302に入力される。ACL処理部302は、入力したパケットを出力部303に出力する。その結果、入力したパケットは、FDB制御部24dを介して、送信ポート群32から送信させる。
FDB制御部24dは、入力部311、FDB処理部312、送信処理部313、及び入出力部314を備える。
ACL制御部24bの出力部303からFDB制御部24dに出力されたパケットは、入力部311を介してFDB処理部312に入力される。FDB処理部312は、FDB331を参照し、入力したパケットの転送を行う機能である。送信ポート群32のうちの何れかの送信ポート22が指定されていた場合、FDB処理部312は、指定された送信ポート22からパケットを送信させる。パケットの送信は、送信処理部313を介して行われる。
FDB331に登録されたエントリのなかには、CPU25によるソフトウェア処理を表す処理指定情報が格納されているエントリが存在する可能性がある。そのため、FDB制御部24dも、CPU25との間でパケットを含むデータの入出力を行えるようになっている。入出力部313は、CPU25との間のデータの入出力を可能にさせる。
図10は、本実施形態で用いられるFDB例を説明する図である。
図10において、アドレスはエントリの識別情報であり、図6と同様に便宜的に表している。FDB331に登録される各エントリは、MACアドレスフィールド、VLAN IDフィールド、SFフィールド、及びデータフィールドに分割されている。
MACアドレスフィールドに格納されるMACアドレスは、ヘッダに格納される宛先MACアドレスと照合されるデータである。VLAN IDフィールドに格納されるVLAN IDは、ヘッダに格納されるVLAN IDと照合されるデータである。
SFフィールドには、CPU25によるソフトウェア処理を実行させるべきか否かを表すフラグ情報が格納される。データフィールドには、FDB制御部24d、より具体的にはFDB処理部312が実行すべき処理内容を表す処理情報、或いはCPU25に通知すべき索引情報が格納される。
FDB処理部312は、FDB331を参照し、受信パケットの転送を実現させる。このことから、FDB処理部312が実行すべき処理内容を表す処理情報は、通常、受信パケットを送信させるべき送信ポート22を表すポート番号である。以降、便宜的に、処理情報、及び索引情報を「指定情報」と総称する。
SFフィールドに格納されるフラグ情報は、例えば1ビットのデータであり、0の値はCPU25によるソフトウェア処理の実行が不要であることを表している。1の値のフラグ情報は、CPU25によるソフトウェア処理の実行が必要であることを表している。
このようなことから、FDB処理部312は、ACL制御部24bからパケットを入力した場合、その入力パケットのヘッダに格納されている宛先MACアドレス、及びVLAN IDを用いて、FDB331から1つのエントリを抽出する。その後、FDB処理部312は、抽出したエントリに格納されているフラグ情報、及び指定情報を参照し、実行すべき処理を実行する。
FDB処理部312は、入力パケットから特定したエントリに、値が1のフラグ情報が格納されていた場合、ACL制御部24bと同様に、入出力部314を介して、索引情報を付加した入力パケットをCPU25に出力する。CPU25は、入力したパケットを用いた処理を実行し、その実行により得られたパケットをFDB制御部24dに出力する。FDB制御部24dに出力されたパケットは、入出力部314を介してFDB処理部312に入力される。FDB処理部312は、入力したパケットを送信処理部313に出力し、送信ポート群32から送信させる。
上記パケット処理ルーチン群を含む各種プログラムを実行するCPU25上には、スイッチ部24から入力したパケットに対してソフトウェア処理を実行するソフトウェア処理部35が実現される。そのソフトウェア処理部35は、入出力部351、エントリ抽出部352、パケット処理部353、記憶部354、及びテーブル更新部355を備える。
入出力部351は、スイッチ部24との間でデータの入出力を行う機能である。このデータの入出力には、ACL記憶部24aへのアクセスのためのものも含まれる。入出力部351は、パケットをスイッチ部24から入力した場合、入力パケットをエントリ抽出部352に出力する。
記憶部354には、パケットのソフトウェア処理に用いられる各種テーブルが格納されている。各種テーブルには、ソフトテーブル361、第1の処理テーブル362、及び第2の処理テーブル363が含まれる。この記憶部354は、実際には例えば図3に表すRAM25c、或いはRAM25cとROM25bである。入出力部351、エントリ抽出部352、パケット処理部353、及びテーブル更新部355は共に、CPU25のコア25aが、ROM25bに格納されている各種プログラムを実行することで実現される。
ここで、図11〜図13を参照し、各テーブル361〜363について具体的に説明する。
図11は、ソフトテーブル例を説明する図である。
このソフトテーブル361は、上記のように、索引情報によるエントリの抽出を行う対象となるテーブルである。このソフトテーブル361に登録されるエントリには、図11に表すように、実行すべき処理内容を表す処理内容情報、及び実行すべき処理に必要な付加情報(1つ以上のパラメタ等)が格納される。
本実施形態では、処理内容情報として、実行すべき処理のためのルーチン(サブプログラム)へのポインタを採用している。図11中に表記の「Routine#1」「routine#2」等は、処理内容情報によって指定されるルーチンの種類を表している。
ゲートウェイ2は、VLAN3とVXLAN4間で必要なパケット変換をサポートする。そのパケット変換のために必要な情報は付加情報として扱うことができる。
例えばVLANパケットからVXLANパケットへの変換では、アウターヘッドを生成する必要がある。そのアウターヘッドには、VTEPの宛先MACアドレス、送信元MACアドレス、宛先IPアドレス、及び送信元IPアドレス等を格納しなければならない(図7)。VTEPの送信元MACアドレス、及び送信元IPアドレスは、自ゲートウェイ2のMACアドレス、及びIPアドレスとすれば良い。しかし、VTEPの宛先MACアドレス、及び宛先IPアドレスは、受信パケットによって異ならせる必要がある。このことから、VTEPの宛先MACアドレス、及び宛先IPアドレスは、付加情報とする対象になる。それにより、付加情報は、複数の情報を含む場合がある。図11中に表記の「Parameter#1」「Parameter#2」等は、エントリによって異なる付加情報の内容の一部を表している。
ソフトテーブル361に登録されたエントリには、上記のような処理内容情報、及び付加情報が格納される。そのため、ソフトウェア処理部35は、ソフトテーブル361から抽出すべきエントリが判明している場合、判明しているエントリを参照することにより、スイッチ部24から入力する受信パケットに対する必要な処理を実行することができる。付加情報の取得のために他のテーブル等を参照する必要はない。そのように、参照すべきエントリの確認が不要である、エントリの参照により付加情報が得られるといったことから、パケット処理はより短時間に終了させることができる。ソフトテーブル361のエントリに付加情報を格納することも、パケット処理をより短時間に終了させるうえで有効である。
第1の処理テーブル362、及び第2の処理テーブル363は、ソフトテーブル361に登録されたエントリのなかで付加情報が格納されていないエントリの処理内容情報による受信パケットの処理に用いられる。
図12は、第1の処理テーブル例を説明する図であり、図13は、第2の処理テーブル例を説明する図である。図12、及び図13には、便宜的に、第1の処理テーブル362、及び第2の処理テーブル363共に、VLANパケットからVXLANパケットへの変換を可能にする1つのエントリの内容例のみを表している。
第1の処理テーブル362のVLANパケットからVXLANパケットへの変換のためのエントリには、図12に表すように、受信パケットの識別情報(ここでは送信元MACアドレス、及びVLAN IDのみを想定)、及びVNIが格納される。それにより、第1の処理テーブル362は、VLANパケットからVXLANパケットへの変換では、受信パケットからVNIを特定可能にする。
第2の処理テーブル363のVLANパケットからVXLANパケットへの変換のためのエントリには、図13に表すように、受信パケットの識別情報(ここでは送信元MACアドレスのみを想定)、VNI、及び宛先VTEP情報が格納される。宛先VTEP情報とは、具体的には宛先VTEPのMACアドレス(図13中「VTEP_MAC#1」と表記)、及びIPアドレス(図13中「VTEP_IP#1」)である。それにより、第2の処理テーブル362は、VLANパケットからVXLANパケットへの変換では、受信パケット、及びその受信パケットのVNIから、宛先VTEPのMACアドレス、及びIPアドレスを特定可能にする。
第1の処理テーブル362によって特定されるVNI、並びに第2の処理テーブル363によって特定される宛先VTEPのMACアドレス、及びIPアドレスは、付加情報とすることができる。このことから、第1の処理テーブル362、及び第2の処理テーブル363は、ソフトテーブル361へのエントリの追加にも用いられる。
また、付加情報となるデータの特定を通して、第1の処理テーブル362、及び第2の処理テーブル363から受信パケットの識別情報が判明する。判明した識別情報は、ACL321のエントリに格納するパケット識別情報とすることができる。このことから、第1の処理テーブル362、及び第2の処理テーブル363は、ACL321へのエントリの追加にも用いられる。
第1の処理テーブル362、及び第2の処理テーブル363の記憶部354への格納、及び更新は、例えば管理用ポート23を介して通信を行う外部装置からの指示によって行われる。その外部装置からの指示に従って第1の処理テーブル362、或いは第2の処理テーブル363の格納、或いは更新を実際に行うのは、テーブル更新部355である。
図4の説明に戻る。
エントリ抽出部352は、入出力部351から入力したパケット中の索引情報を確認し、確認した索引情報によって特定されるエントリをソフトテーブル361から抽出する。抽出されたエントリは、入力パケットと共にパケット処理部353に出力される。パケット処理部353に出力される入力パケットは、例えば索引情報等を削除した後の受信パケットである。このことから、以降、ソフトウェア処理部35に入力したパケットは「受信パケット」と表記する。
受信パケットに付加される索引情報は、ソフトテーブル361に登録されているエントリのうちの1つを表す情報である。そのため、エントリ抽出部352は、ハッシュ値の計算等を行うことなく、ソフトテーブル361からのエントリの抽出を行う。
パケット処理部353は、入力した受信パケットに対し、入力したエントリに格納されている処理内容情報によって指定されるルーチンを実行する処理機能であり、CPU25が上記パケット処理ルーチン群を実行することによって実現される。処理の実行により得られたパケットは、入出力部351を介してスイッチ部24に出力される。
図14は、受信パケットから作成されるパケット例を説明する図である。図14では、受信パケットとしてVLANパケットを想定し、そのVLANパケットから作成されるVXLANパケット例を表している。受信パケットは上側に、作成パケット(ここではVXLANパケット)は下側に表している。
VXLANパケットは、受信パケット(オリジナルフレーム)をペイロードに格納するカプセル化によって作成される。そのカプセル化によって付加されるアウターヘッダでは、特に重要なフィールドのデータのみ表している。
図14中「VTEP_MAC#1」と表記の宛先MACアドレス、「GW_MAC」と表記の送信元MACアドレスは、共に、アウターイーサネットヘッダ内に確保されるフィールドに格納されるデータである。GW_MACは、ゲートウェイ2自身のVTEPとしてのMACアドレスを表している。また、「UDP」と表記のデータも、アウターイーサネットヘッダ内のEtherTypeフィールドに格納されるデータである。
図14中「GE_IP」と表記の送信元IPアドレス、「VTEP_IP#1」と表記の宛先IPアドレスは、共に、アウターIPヘッダ内に確保されるフィールドに格納されるデータである。GW_IPは、ゲートウェイ2自身のVTEPとしてのIPアドレスを表している。
図14中「8472」と表記のデータは、アウターUDPヘッダ内の送信ポートフィールドに格納されるデータ(送信ポート情報)である。「10000」と表記のVNIは、VXLANヘッダ内に確保されるVXLAN Network Identifierフィールドに格納される。
付加されるアウターヘッダに格納される上記データのなかでは、送信元MACアドレス、及び送信元IPアドレスを除くデータは全て付加情報の対象となり得る。付加情報の対象となるデータは、第1の処理テーブル362、或いは第2の処理テーブル363に格納されている。そのため、第1の処理テーブル362、及び第2の処理テーブル363は、ソフトテーブル361にエントリを追加する場合、付加情報の作成に用いられる。
上記のように、入出力部351に入力された受信パケットは、エントリ抽出部352、及びパケット処理部353によって処理される。これらエントリ抽出部352、及びパケット処理部353によってパケットへの処理を実行させることにより、処理に要する時間は従来と比較して大幅に短縮される。この処理に要する時間の短縮について、図15を参照して具体的に説明する。
図15は、ソフトウェア処理部によるパケット処理に要する処理時間の変化を説明する図である。ここでは、パケット処理に係わる構成要素として、ソフトウェア処理部の他にスイッチ部を縦軸に表している。横軸には時間を取っている。
図15では、ケースとして、図15(a)〜図15(c)の3ケースを例にとっている。図15(a)は、ソフトテーブルからのエントリの抽出にハッシュ計算を行う従来処理(図15(a)では「ソフトでハッシュ計算を行う従来処理」と表記)である。図15(b)は、エントリの抽出のためのハッシュ計算をスイッチ部に行わせる従来処理(図15(b)では「ハッシュ計算をスイッチ部にオフロードする従来処理」と表記)である。図15(c)は、本実施形態を適用した場合、である。
本実施形態のスイッチ部24、ソフトウェア処理部35(CPU25)、及びソフトテーブル361は従来、存在しない。そのため、各従来処理の説明時にスイッチ部、ソフトウェア処理部、及びソフトテーブルに符号を付すのは不適切となる。ここでは、符号の有無による混乱を避けるために、スイッチ部、ソフトウェア処理部、及びソフトテーブルの全てに符号は付さないこととする。
図15(a)に表す従来処理では、ソフトウェア処理部は、スイッチ部から受信パケットを入力した場合、その受信パケットへのパケット処理を実行する前に、オーバヘッドとなるソフトテーブル検索を行う。ソフトウェア処理部は、パケット処理の実行後、そのパケット処理により得られたパケットをスイッチ部に出力し、そのパケットをスイッチ部に送信させる。このパケット処理の実行後の流れは、図15(b)に表す従来処理、及び図15(c)に表す本実施形態でも同じである。
そのソフトテーブル検索には、受信パケットのデータを用いたハッシュ値の計算(図15(a)では「ハッシュ計算」と表記)、計算したハッシュ値を用いたソフトテーブルからのエントリの抽出(図15(a)では「テーブル参照」と表記)、及び抽出したエントリが適切か否かの確認のためのデータ照合(図15(a)では「データ照合」と表記)が含まれる。データ照合の結果、適切なエントリが抽出されていないことが判明した場合、再度、ソフトテーブル検索が行われる。
図15(b)に表す従来処理でも、ソフトウェア処理部がソフトテーブル検索のオーバヘッドとして実行する処理には、ハッシュ計算、テーブル参照、及びデータ照合が含まれる。データ照合の結果、適切なエントリが抽出されていないことが判明した場合、再度、ソフトテーブル検索が行われることも図15(a)に表す従来処理と同じである。しかし、ハッシュ計算をスイッチ部に行わせることにより、ソフトテーブル検索に要する処理時間は、図15(a)に表す従来処理と比較して、より短くなっている。
図15(c)に表す本実施形態では、ソフトウェア処理部は、入力した受信パケット中の索引情報によって、ソフトテーブルから適切に1つのエントリを抽出することができる。そのため、ハッシュ計算が不要となり、データ照合も不要とすることができる。つまり、ソフトテーブル検索では、テーブル参照のみ行えば済むようになる。この結果、図15(b)に表す従来処理と比較しても、スイッチ部から受信パケットを入力してからパケット処理が終了するまでの処理時間は、大幅に短縮される。このことから、オーバヘッドの削減、つまりオーバヘッド分の処理時間の短縮は、パケット処理が終了するまでに要する時間を短縮させるうえで非常に有効である。
テーブル更新部355は、上記のように、外部装置からの指示に従って第1の処理テーブル362、或いは第2の処理テーブル363の記憶部354への格納、或いは更新を行う。また、テーブル更新部355は、ソフトテーブル361の作成、及び更新を行い、スイッチ部24に格納されているACL321の更新を少なくとも行う。
次に、テーブル更新部355によるソフトテーブル361の作成、及び更新、並びにACL321、或いはFDB331の更新のための動作について、図16〜図19を参照して具体的に説明する。ここでは便宜的に、ACL321、及びFDB331のなかで更新対象としてACL321のみを想定する。ACL321は、テーブル更新部355にとって作成、及び更新の対象となる。FDB331は、FDB処理部312の学習によってエントリが追加されるテーブルであることから、テーブル更新部355にとって更新のみ対象となる。
図16は、作成時のACL例を説明する図であり、図17は、作成時のソフトテーブル例を説明する図である。図16、及び図17において、「−」はデータが存在していないことを表している。また、ACL321、及びソフトテーブル361は共に、エントリ数は2048としている。これは、ACL321のエントリとソフトテーブル361のエントリとが1対1となる対応関係を想定しているからである。この想定では、索引情報としてエントリのアドレス値を用いることも可能なことから、エントリに索引情報を格納しないようにすることもできる。
図16に表記の「受信ポート」「送信元MAC」「宛先MAC」等は、マッチングデータ、及びマスクデータを用いてデータが照合されるフィールド例を表している。受信パケットとしてはVLANパケット、及びVXLANパケットを想定している。
「受信ポート」は、図8中「Ingress Port」と表記のフィールドを表している。「送信元MAC」「宛先MAC」「VLAN ID」「タイプ」はアウターイーサネットヘッダに確保されるフィールドを表している。「宛先IP」はアウターIPヘッダに確保されるフィールドを表している。「宛先UDPポート」はアウターUDPヘッダに確保されるフィールドを表している。
また、フィールドのデータの内容として表記の「DC」は「Don’t Care」の略記であり、データ照合の対象ではないことを意味している。アクションデータの内容として表記の例えば「Send Soft W/index(2047)」は、2047を索引情報として受信パケットに付加してCPU25に出力する処理を表している。
本実施形態では、作成時、図16に表すように、例えばアドレス値が2047と2048の2つのエントリにのみ、データを格納するようにしている。これは、VLANパケットからVXLANパケットへの変換、及びVXLANパケットからVLANパケットへの変換の2つの処理のみを想定しているからである。ACL321でデータを格納するエントリの数、つまりACL321に登録するエントリの数は、想定する処理に応じて決定すれば良い。
一方、ソフトテーブル361にも、作成時、図17に表すように、アドレス値が2047と2048の2つのエントリにのみ、データが格納される。それにより、作成時から、ACL321のエントリとソフトテーブル361のエントリとの間の対応関係を1対1とさせている。
アドレス値が2047のエントリに処理内容情報として表記の「Std_ConvertToVXLAN」は、VLANパケットをVXLANパケットに変換するルーチン(以降「標準VXLAN変換ルーチン」と表記)を表している。「Std_ConvertToVLAN」は、VXLANパケットをVLANパケットに変換するルーチン(以降「標準VLAN変換ルーチン」と表記)を表している。これら2つのルーチンは、上記パケット処理ルーチン群に含まれる。
アドレス値が2047と2048の2つのエントリには、付加情報が格納されていない。これは、標準VXLAN変換ルーチン、及び標準VLAN変換ルーチンは、共に、第1の処理テーブル362、及び第2の処理テーブル363を参照し、パケット変換のための処理を実行するルーチンだからである。
第1の処理テーブル362、及び第2の処理テーブル363を参照する場合、その2つのテーブル362、及び363を参照しない場合と比較して、処理時間は長くなる。本実施形態では、図16に表すように、作成時、ACL321のアドレス値が2047と2048の2つのエントリに、2つのテーブル362、及び363を参照させるデータを格納するようにしている。これは、以下のような理由からである。
ACL321は、アドレス値の小さいエントリから昇順に参照される。エントリの参照は、対象とすべきエントリを確認することで終了する。それにより、ACL321のアドレス値が2047と2048の2つのエントリにデータを格納することは、その2つのエントリによる処理の優先度は最低レベルとしていることを意味する。
優先度を最低レベルとする結果、パケット処理部353が第1の処理テーブル362、及び第2の処理テーブル363を参照した処理の実行は最小限に抑えられることとなる。従って、パケット処理の完了までに要する時間が不要に長くなることは回避される。そのため、本実施形態では、ACL321のアドレス値が2047と2048の2つのエントリにデータを格納するようにしている。
第1の処理テーブル362、及び第2の処理テーブル363を参照した処理の実行により、受信パケットの処理に必要な付加情報が得られる。また、ACL321のエントリに格納すべきパケット識別情報が得られる。このことから、テーブル更新部355は、パケット処理部353から付加情報、及びパケット識別情報を入力し、ソフトテーブル361へのエントリの追加、及びACL321へのエントリの追加をそれぞれ行う。
図18は、作成されたソフトテーブルの更新例を説明する図であり、図19は、作成されたACLの更新例を説明する図である。図18、及び図19に表す更新例は、パケット処理部353がソフトテーブル361のアドレス値が2047のエントリを参照しての処理を実行した場合を想定している。
エントリの追加、つまりエントリへのデータの格納は、図18、及び図19に表すように、ソフトテーブル361、及びACL321共に、アドレス値が1のエントリに対して行われる。これは、1例であり、データを格納するエントリは、アドレス値が2047より小さいエントリのなかから選択すれば良い。
ソフトテーブル361のアドレス値が1のエントリには、パケット処理部353から取得された付加情報が格納される。パケット処理部353が図14に表すようなVXLANパケットを生成した場合、宛先MACアドレス、宛先IPアドレス、及び送信ポート情報等は付加情報として格納される。図18に処理内容情報として表記の「ConvertToVXLAN_One」は、付加情報を参照して、VLANパケットをVXLANパケットに変換するルーチンを表している。
ACL321のアドレス値が1のエントリには、パケット処理部353から取得されたパケット識別情報、及び値が1の索引情報を付加した受信パケットをCPU25に出力する処理を表すアクションデータ(図19中「Send Soft W/index(1)」と表記)が格納される。
このようにして、テーブル更新部355は、第1の処理テーブル362、及び第2の処理テーブル363を参照しての処理をパケット処理部353が実行した場合、ソフトテーブル361、及びACL321のそれぞれにエントリを追加する。ACL321に追加したエントリのアクションデータには、ソフトテーブル361に追加したエントリを表す索引情報を含ませる。それにより、テーブル更新部355は、ソフトテーブル361のエントリとACL321のエントリとの間の1対1の対応関係を実現させる。
このようにソフトテーブル361、及びACL321を更新する結果、パケット処理部353による第1の処理テーブル362、及び第2の処理テーブル363を参照した処理の実行は最小限に抑えられる。そのため、受信パケットの処理にCPU25が要する時間も最小、或いは最小に近いレベルに抑えられることとなる。
ACL321に登録可能なエントリは有限である。そのため、テーブル更新部355は、ACL321の全てのエントリにデータを格納させている状況でエントリを追加しなければならない場合、アドレス値が2047と2048のエントリを除くエントリのなかから選択したエントリにデータを上書きする。テーブル更新部355は、ACL321でデータを上書きするエントリと同じアドレス値のソフトテーブル361のエントリでもデータを上書きする。そのようにして、テーブル更新部355は、エントリの全てにデータを格納させている状況でも、ACL321、及びソフトテーブル361の更新を行う。ACL321でデータを上書きするエントリの選択方法は、従来と同じ方法で良い。
本実施形態では、上記のような機能構成のソフトウェア処理部35が実現されるCPU25をゲートウェイ2内に搭載させている。しかし、ソフトウェア処理部35は、図5に表すように、ゲートウェイ2と通信可能な外部装置40上に配置させても良い。図5では、ゲートウェイ2の送信ポート22−1を外部装置40とのデータ送信専用とし、その送信ポート22−1を外部装置40の受信ポート41と接続させている。外部装置40のゲートウェイ2へのデータ送信用の送信ポートは図示していないが、その送信ポートは、例えば外部装置40からのデータ受信専用とする受信ポート21と接続される。
図20は、本実施形態によるパケット処理装置であるゲートウェイのパケット受信時の動作を表すフローチャートである。次に、パケットを受信した場合のゲートウェイ2の動作について、図20を参照して詳細に説明する。ここでは、便宜的に、スイッチ部24でCPU25にパケット処理を要求するのはACL制御部24bのみと想定する。CPU25の動作は、ソフトウェア処理部35の構成要素に着目して説明する。
パケットは、受信ポート21のうちの何れかによって受信され(S1)、スイッチ部24に出力される。スイッチ部24のACL制御部24bは、受信処理部301が受信パケットを入力し、例えば入力した受信パケットにポート番号を付加する。ACL制御部24bのACL処理部302は、ポート番号が付加された受信パケットを用いてACL321の検索を行い、その受信パケットに対応するエントリをACL321から抽出する(以上S2)。
ACL処理部302は、抽出したエントリのアクションデータを確認し、そのアクションデータがソフトウェア処理部35(CPU25)への受信パケットの出力を表していた場合(S3:YES)、アクションデータ中の索引情報を付加した受信パケットをCPU25に出力する。そのアクションデータがソフトウェア処理部35への受信パケットの出力を表していない場合(S3:NO)、ACL処理部302は、受信パケットをアクションデータに従って処理する。図20では、受信パケットが送信ポート22から送信する場合を想定している。受信パケットの処理としては、廃棄等もある。
スイッチ部24から出力された受信パケットは、ソフトウェア処理部35の入出力部351によって入力され、エントリ抽出部352に渡される。エントリ抽出部352は、入力した受信パケットから索引情報を読み出し、抽出した索引情報が表すエントリをソフトテーブル361から抽出する(S4)。
エントリ抽出部352は、エントリを抽出した後、抽出したエントリに格納されている処理内容情報、及び付加情報を読み出し、読み出した処理内容情報、及び付加情報を受信パケットと共にパケット処理部353に渡す(S5)。抽出されたエントリに付加情報が格納されていない場合、例えば処理内容情報のみパケット処理部353に渡される。
パケット処理部353は、処理内容情報が表すルーチンを実行し、受信パケットに対するパケット処理を実行する(S6)。パケット処理の実行により得られたパケットは、入出力部351を介してスイッチ部24のACL制御部24bに出力され、FDB制御部24dを介して送信ポート22から送信される(S7)。
図21は、上記S6として実行されるパケット処理のフローチャートである。ここでは、便宜的に、VLANパケットからVXLANパケットに変換する2つのルーチンに着目し、処理の流れを表している。その2つのルーチンは、標準VXLAN変換ルーチンとConvertToVXLAN_Oneである。図21中、標準VXLAN変換ルーチンは「標準ルーチン」とも表記している。ConvertToVXLAN_Oneは、「特定変換ルーチン」とも表記している。次に図21を参照し、パケット処理部353の動作について詳細に説明する。
パケット処理部353は、上記のように、パケット処理ルーチン群のなかの処理内容情報が表すルーチンを実行する。このことから、パケット処理部353は、エントリ抽出部352から入力した処理内容情報が表すルーチンの種類を判定する(S11)。処理内容情報が表すルーチンが標準VXLANルーチンであった場合、S11で標準VXLANルーチンと判定され、S12で標準VXLANルーチンが起動される。
標準VXLANルーチンを起動させたパケット処理部353は、受信パケット中の送信元MACアドレス、及びVLAN ID等を用いて、第1の処理テーブル362からエントリを抽出するためのハッシュ値の計算を行う(S13)。次に、パケット処理部353は、計算したハッシュ値が表すエントリを第1の処理テーブル362から読み出し、読み出したエントリに格納されている識別情報を用いたデータ照合を行う(S14)。そのデータ照合により、ハッシュ値が表すエントリが受信パケットに対応するエントリであると確認できた場合、S15に移行する。
S15では、パケット処理部353は、第1の処理テーブル362から抽出したデータ(例えばVNI、及び宛先MACアドレス、等)を用いて、第2の処理テーブル363からエントリを抽出するためのハッシュ値の計算を行う。次に、パケット処理部353は、計算したハッシュ値が表すエントリを第2の処理テーブル363から読み出し、読み出したエントリに格納されている識別情報を用いたデータ照合を行う(S16)。そのデータ照合により、ハッシュ値が表すエントリが受信パケットに対応するエントリであると確認できた場合、S17に移行する。
S14、及びS16でのデータ照合は、対象とすべきエントリが複数、存在する場合、受信パケットに対応するエントリを特定するか、或いは対応するエントリが存在しないことを確認するまで行われる。そのため、S17への移行時には、ACL(図21中「ハードテーブル」と表記)321に追加するエントリに格納すべきパケット識別情報、及びソフトテーブル361に追加するエントリに格納すべき付加情報が確定する。このことから、S17では、パケット処理部353は、付加情報、及びパケット識別情報を用いて、ソフトテーブル361、及びACL321にそれぞれ追加のエントリの登録を行う。その後、パケット処理部353は、標準VXLAN変換ルーチンを終了させ、ConvertToVXLAN_Oneを起動させる(S18)。
ConvertToVXLAN_Oneを起動させたパケット処理部353は、付加情報を用いて図14に表すようなVXLANパケットを生成し、生成したVXLANパケットをスイッチ部24のACL制御部24bに出力する。生成したVXLANパケットをACL制御部24bに出力した後、パケット処理が終了する。
付加情報を取得した後のVXLANパケットの生成方法自体は、従来と基本的に同じである。このことから、図21では、VXLANパケットの生成のための処理は省略している。また、標準VXLAN変換ルーチンは、次にConvertToVXLAN_Oneの実行を想定することで、実行に必要な情報(付加情報)の取得、及びパケット識別情報の取得のための機能に制限させている。
なお、上記説明では、ソフトウェア処理部35にパケット処理を実行させるテーブルとしてACL321を想定しているが、テーブルはACL321、及びFDB331以外のテーブルであっても良い。また、ソフトウェア処理部35(CPU25)とスイッチ部24は、それぞれ1つとしているが、図22に表すように、それぞれACL321(321−1、321−2)を記憶する複数のスイッチ部24(24−1、24−2)を1つのソフトウェア処理部35に対応させても良い。また、図23に表すように、スイッチ部24は、複数のACL321(321−11〜13)を記憶するものであっても良い。複数のACL321の参照は、受信パケットに対応するエントリが存在しないことの確認により、参照対象とするACL321を順次、変更させても良いが、複数のACL321の参照を並行して行わせるようにしても良い。
本実施形態では、ACL321のエントリとソフトテーブル361のエントリの対応関係は1対1とし、ACL321のエントリには、ソフトテーブル361のエントリを直接、表す索引情報を格納させている。その索引情報は、ソフトテーブル361のエントリを間接的に表す情報であっても良い。また、索引情報は、ACL321のエントリに格納させなくとも良い。つまり、ソフトテーブル361のエントリを表す索引情報は、ACL321でヒットしたエントリのアドレス値、受信パケットのデータ、及びそのデータを用いて計算された値(例えばハッシュ値。以降、便宜的にハッシュ値を想定する)等のうちの少なくとも1つを用いて生成しても良い。図23、及び図24に表すように、複数のACL321が存在する場合、ACL321に割り当てる識別情報(ここでは「テーブルID」と表記)も索引情報の生成に用いることができる。以降、索引情報をそのまま用いる方法を「直接マッピング方法」と表記し、結果として、索引情報を生成する形となる方法を「間接マッピング方法」と表記する。
間接マッピング方法を採用しても、索引情報の生成をスイッチ部24に行わせることにより、ソフトウェア処理部35にとっては、パケット処理は直接マッピング方法と同じように実行することができる。そのため、ソフトウェア処理部35は、直接マッピング方法に近い処理時間でパケット処理を実行することができる。
図24は、間接マッピング方法の第1の適用例を説明する図である。図24に表す例は、「索引情報=F(x)」の計算式を用いて索引情報を生成する例であり、ケースとしては、例えば図22に表す変形例、つまり2つのACL321−1、321−2を対象にする場合を想定している。図24において、「Sa」は索引情報、「T」はテーブルID、「Ha」はACL321でヒットしたエントリのアドレス値、をそれぞれ表している。
図24に表す例では、ACL321−1のエントリ数はn、ACL321−2のエントリ数はmとし、m>nの関係となっているのを想定している。また、各ACL321のアドレス値が1〜nのエントリは、ソフトテーブル361のアドレス値が1〜nのエントリに1対1に対応させている。ACL321−2のアドレス値がn+1〜mのエントリは、ソフトテーブル361のアドレス値がn+1〜mのエントリに1対1に対応させている。それにより、関数F(T,Ha)の値域、つまり算出される索引情報Saの範囲は、1≦Sa≦m、となっている。iは、1<i<n、の関係となっている。
索引情報Saの計算に用いる変数は、ACL321の各エントリに格納しても良い。図24中に表記の「index(1,1)」「index(1,i)」等は、索引情報Saの計算に変数として用いる情報を表している。この情報は、ヒットしたエントリのアドレス値等の代わりに用いても良く、或いは追加する変数の1つとして用いても良い。
図25は、間接マッピング方法の第2の適用例を説明する図である。図25に表す例も、「索引情報=F(x)」の計算式を用いて索引情報を生成する例であり、ケースとしては、例えば図23に表すような変形例を想定している。ここでは、便宜的に、ACL321はACL321−11、321−12の2つのみを想定している。
図25に表す例では、ACL321−11のエントリ数はn。ACL321−12のエントリ数はmとしている。各ACL321のエントリは、全て、ソフトテーブル361の異なるエントリに1対1に対応させている。それにより、関数F(T,Ha)の値域、つまり算出される索引情報Saの範囲は、1≦Sa≦n+m、となっている。この図25に表す適用例でも、索引情報Saの計算に用いる変数を各ACL321のエントリに格納しても良い。
本実施形態、並びに図24、及び図25に表す各適用例でも、1つのACL321の各エントリとソフトテーブル361の各エントリとの間の対応関係は1対1としている。その対応関係は、図26に表すように、多対1を可能としても良い。多対1の対応関係を可能にする場合、ACL321へのエントリの追加により、ソフトテーブル361にエントリを追加するとは限らなくなる。
図26に表す例では、索引情報Saの計算は、ヒットしたエントリのアドレス値Haのみを用いることを想定している。索引情報Saは、アドレス値Haに対応する索引情報Saを定義した変換テーブル2501を用いて取得しても良い。変換テーブル2501のような変換テーブルを用いた索引情報Saの取得は、図24、及び図25に表すような適用例に採用しても良い。図26に表す適用例でも、アドレス値Haの代わりに、或いはアドレス値と組み合わせて用いる情報をACL321の各エントリに格納しても良い。
また、本実施形態では、パケット処理装置としてゲートウェイ2を想定しているが、適用するパケット処理装置はゲートウェイ2とは異なる種類であっても良い。ソフトウェア処理により機能を実現させるタイプのパケット処理装置であれば、本実施形態は幅広く適用させることができる。
上記以外にも、様々な変形を行うことができる。
以上の変形例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を含む第1の処理実行情報を記憶した第1の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を含む第2の処理実行情報を記憶した第2の記憶部と、
受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第1の処理実行情報中のパケット情報の参照により、前記第1の処理実行情報のなかで参照すべき第1の処理実行情報を特定し、特定した第1の処理実行情報に含まれる処理指定情報が、前記第2の処理実行情報による処理を指定している場合に、前記第2の処理実行情報のなかで参照すべき第2の処理実行情報を表す指定情報を前記受信パケットと共に出力する第1の処理部と、
前記第1の処理部が出力する指定情報が表す第2の処理実行情報中の処理情報に従って、前記第1の処理部が出力する前記受信パケットを用いた処理を実行する第2の処理部と、
を有することを特徴とするパケット処理装置。
(付記2)
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を格納する第1のエントリが複数保持される第1のテーブルを記憶した第1の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を格納する第2のエントリが複数保持される第2のテーブルを記憶した第2の記憶部と、
受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第1のテーブルの参照により、前記第1のテーブルで対象とする第1のエントリを特定し、特定した第1のエントリに格納されている処理指定情報に前記第2のテーブル中の前記第2のエントリを表すエントリ情報が含まれている場合に、前記エントリ情報を前記受信パケットと共に出力するスイッチ部と、
前記スイッチ部が出力するエントリ情報が表す第2のエントリに格納されている処理情報に従って、前記スイッチ部が出力する前記受信パケットを用いた処理を実行する処理部と、
を有することを特徴とするパケット処理装置。
(付記3)
前記処理部が前記処理の実行に必要な実行情報を記憶した第3の記憶部と、
前記処理部が前記第3の記憶部を参照して前記処理を実行した場合に、前記第3の記憶部の参照により得られる実行情報を用いて、前記第1のテーブル、及び前記第2のテーブルにそれぞれ前記エントリ情報を含む前記処理指定情報を格納させた前記第1のエントリ、及び前記第3の記憶部を参照しない処理を表す処理情報を格納させた前記第2のエントリの追加を行い、追加する前記第2のエントリには、前記実行情報のうちの一部を前記処理部が前記処理に用いるべき参照情報として格納する更新部と、
を更に有することを特徴とする付記2記載のパケット処理装置。
(付記4)
前記更新部は、前記第2のテーブルに、前記第3の記憶部を参照する処理を表す処理情報を格納した第2のエントリを予め登録すると共に、前記第1のテーブルに、前記第2のテーブルに予め登録させる第2のエントリを表すエントリ情報を含む処理指定情報を格納した第1のエントリを予め登録する初期化を行う、
ことを特徴とする付記2、または3記載のパケット処理装置。
(付記5)
前記処理指定情報に含まれる前記エントリ情報は、対応する前記第2のエントリを直接的に表す直接情報、及び前記直接情報の特定に用いる間接情報のうちの一方である、
ことを特徴とする付記2、3、または4記載のパケット処理装置。
(付記6)
パケット処理装置として用いられる情報処理装置の制御プログラムにおいて、
記憶部に記憶されている、パケットに対して実行すべき処理を表す処理情報を格納する第2のエントリが複数保持される第2のテーブルから、スイッチ部が出力するエントリ情報が表す第2のエントリを抽出し、
抽出した前記第2のエントリに格納されている前記処理情報に従って、前記スイッチ部が出力するパケットを用いた処理を実行することを特徴とするパケット処理装置の制御プログラム。
(付記7)
パケット処理装置に、
パケットを識別するパケット識別情報、及び前記パケット識別情報を含むパケットに対して実行すべき処理を表す処理指定情報を格納する第1のエントリが複数保持される第1のテーブルを記憶した第1の記憶部と、
前記パケットに対して実行すべき処理を表す処理情報を格納する第2のエントリが複数保持される第2のテーブルを記憶した第2の記憶部と、を搭載させ、
前記パケット処理装置が有するスイッチ部が、受信した前記パケットである受信パケットに含まれるパケット識別情報を用いた前記第1のテーブルの参照により、前記第1のテーブルで対象とする第1のエントリを特定し、特定した第1のエントリに格納されている処理指定情報に前記第2のテーブル中の前記第2のエントリを表すエントリ情報が含まれている場合に、前記エントリ情報を前記受信パケットと共に出力し、
前記パケット処理装置が有する処理部が、前記スイッチ部が出力するエントリ情報が表す第2のエントリに格納されている処理情報に従って、前記スイッチ部が出力する前記受信パケットを用いた処理を実行することを特徴とするパケット処理装置の制御方法。