(57)【要約】【課題】コントローラ及びスイッチの処理輻輳を抑制する。【解決手段】フレームを受信する受信部と、共通の識別情報を有する複数のフレームを含むフローであって、処理の対象となるフローの条件と、制御装置により設定される処理内容とが対応付けられて記憶されている記憶部と、受信されたフレームの識別情報が合致する条件に対応付けられて記憶されている処理内容を、受信されたフレームに対して実行する制御部と、を有するフレーム転送装置である。制御部は、受信されたフレームについて制御装置に処理内容の設定を要求する場合に、受信されたフレームのフロー種別に応じて、受信されたフレームに関する設定要求メッセージを制御装置に送信するか否かを判定する。【選択図】図５
2017163383.tif 000002
【特許請求の範囲】
【請求項１】
フレームを受信する受信部と、
共通の識別情報を有する複数のフレームを含むフローであって、処理の対象となるフローの条件と、制御装置により設定される処理内容とが対応付けられて記憶されている記憶部と、
前記受信されたフレームの識別情報が合致する条件に対応付けられて記憶されている処理内容を、前記受信されたフレームに対して実行する制御部と、
を有し、
前記制御部は、前記受信されたフレームについて前記制御装置に処理内容の設定を要求する場合に、前記受信されたフレームのフロー種別に応じて、前記受信されたフレームに関する設定要求メッセージを前記制御装置に送信するか否かを判定する、
フレーム転送装置。
【請求項２】
前記制御部は、前記受信されたフレームが含まれるフローが第１のフロー種別のフローである場合、又は、前記受信されたフレームが含まれるフローが第２のフロー種別のフローであり、且つ、前記受信されたフレームが含まれるフローのいずれのフレームについても設定要求メッセージが前記制御装置に送信されていない場合に、前記受信されたフレームに関する設定要求メッセージの送信を判定し、前記受信されたフレームが含まれるフローが前記第２のフロー種別のフローであり、且つ、前記受信されたフレームが含まれるフローの他のフレームについて設定要求メッセージがすでに前記制御装置に送信されている場合には、前記受信されたフレームに関する設定要求メッセージを送信しないことを判定する、
請求項１に記載のフレーム転送装置。
【請求項３】
前記制御部は、前記受信されたフレームが含まれるフローが前記第１のフロー種別のフローである場合には、送信レートの調整のための廃棄の対象となる第１の設定要求メッセージを生成し、前記受信されたフレームが含まれるフローが前記第２のフロー種別のフローである場合には、送信レートの調整のための廃棄の対象から除外される第２の設定要求メッセージを生成する、
請求項１又は２に記載のフレーム転送装置。
【請求項４】
送信待ちの第１及び第２の設定要求メッセージを格納する送信待ちキューをさらに備え、
前記制御部は、前記送信レートが所定値よりも大きい場合には、前記送信待ちキュー内の所定数の第１の設定要求メッセージを廃棄して、前記送信レートの調整を行う、
請求項３に記載のフレーム転送装置。
【請求項５】
前記制御部は、前記受信されたフレームが含まれるフローが前記第２のフロー種別のフローであり、前記受信されたフレームが含まれるフローについての第２の設定要求メッセージがすでに前記送信待ちキューに格納されている場合には、前記送信待ちキュー内の前記第２の設定要求メッセージを、前記受信されたフレームについての第２の設定要求メッセージで書き換える、
請求項４に記載のフレーム転送装置。
【請求項６】
前記制御部は、前記受信されたフレームが含まれるフローが前記第２のフロー種別のフローであり、前記受信されたフレームが含まれるフローについての第２の設定要求メッセージが前記送信待ちキューに格納されてからの経過時間が第１の時間長以下である場合には、前記受信されたフレームに関する第２の設定要求メッセージを廃棄し、前記経過時間が前記第１の時間長より長い場合には、前記送信待ちキューに格納されている前記第２の
設定要求メッセージを、前記受信されたフレームに関する第２の設定要求メッセージに書き換え、前記経過時間をリセットする、
請求項４に記載のフレーム転送装置。
【請求項７】
第１及び第２の設定要求メッセージに対応するフレームを保持するフレームバッファをさらに備え、
前記制御部は、第２の設定要求メッセージの送信からの経過時間が、前記制御装置から前記第２の設定要求メッセージに対応する所定のメッセージを受信せずに、第２の時間長に達した場合に、前記フレームバッファから前記第２の設定要求メッセージに対応するフレームを廃棄する、
請求項３から６のいずれか一項に記載のフレーム転送装置。
【請求項８】
前記制御部は、前記受信されたフレームが含まれるフローが前記第２のフロー種別のフローであり、前記受信されたフレームが含まれるフローに対して前記第２の時間長が０に設定されている場合に、前記受信されたフレームを前記フレームバッファに保持させない、
請求項７に記載のフレーム転送装置。
【請求項９】
前記設定要求メッセージは、ＰａｃｋｅｔＩｎメッセージであり、
前記記憶部は、前記処理の対象となるフローの条件として前記第２のフロー種別を含み、前記処理内容として、少なくとも、前記制御装置へのＰａｃｋｅｔＩｎメッセージの送信指示とＭａｘ＿ｌｅｎとを含むフローエントリを記憶し、
前記Ｍａｘ＿ｌｅｎは、ＰａｃｋｅｔＩｎメッセージが前記第２の設定要求メッセージであることを示す値を含む、
請求項３から７のいずれか一項に記載のフレーム転送装置。
【請求項１０】
前記Ｍａｘ＿ｌｅｎは、ＰａｃｋｅｔＩｎメッセージを前記第２の設定要求メッセージとする場合には、上位２ビットを１０とする、
請求項９に記載のフレーム転送装置。
【請求項１１】
前記制御部は、前記第２の設定要求メッセージに、前記フレーム転送装置における、前記第２の設定要求メッセージに対応するフレームが含まれるフローの輻輳状態に関する情報を付加する、
請求項３から１０のいずれか一項に記載のフレーム転送装置。
【請求項１２】
前記第１のフロー種別は、ベストエフォート型のプロトコルのフローであり、
前記第２のフロー種別は、再送機能を備えるプロトコルのフローであることとする、
請求項２から１１のいずれか一項に記載のフレーム転送装置。
【請求項１３】
フレーム転送装置が
フレームを受信し、
共通の識別情報を有する複数のフレームを含むフローであって、処理の対象となるフローの条件と、制御装置により設定される処理内容とを対応付けて記憶部に記憶し、
前記受信したフレームの識別情報が合致する条件に対応付けられて記憶されている処理内容を、前記受信したフレームに対して実行し、
前記受信したフレームについて前記制御装置に処理内容の設定を要求する場合に、前記受信したフレームのフロー種別に応じて、前記受信したフレームに関する設定要求メッセージを前記制御装置に送信するか否かを判定する、
フローに関する処理の設定要求方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フレーム転送装置、及び、フローに関する処理の設定要求方法に関する。
【背景技術】
【０００２】
ＳＤＮ（Software Defined Network）においては、コントローラと呼ばれる装置によって、スイッチと呼ばれる装置の挙動を設定することができる。ＳＤＮにおいて、コントローラとスイッチとの間の通信に用いられるプロトコルの一つに、ＯｐｅｎＦｌｏｗがある。
【０００３】
ＯｐｅｎＦｌｏｗでは、スイッチは、フローテーブルに従ってパケットの処理を行う。フローテーブルのエントリは、フローエントリと呼ばれる。フローエントリには、対象となるフローの条件と、対象となるフローのパケットに対して行われる処理の情報とが含まれる。フローとは、フロー識別情報によって識別されるパケットの集まりである。フロー識別情報は、例えば、宛先ＩＰアドレス、宛先ＭＡＣアドレス、宛先ポート番号、送信元ポート番号、ＶＬＡＮ  ＩＤ等うちの一つ又は、複数を含む。いずれの情報を用いてフロー識別するかは、例えば、Ｏｐｅｎｆｌｏｗの仕様として規定されている。
【０００４】
ＯｐｅｎＦｌｏｗには、フローエントリの制御方式として、プロアクティブ方式とリアクティブ方式とがある。プロアクティブ方式は、事前にコントローラがスイッチにフローエントリを設定しておく制御方式である。リアクティブ方式は、スイッチが未知のフレームを受信した場合に、スイッチがコントローラに対して未知のフレームについてのフローエントリを要求し、コントローラが未知のフレームに対するフローエントリを決定し、スイッチに設定する制御方式である。未知のフレームとは、該当のフローについてのフローエントリが設定されていないフレームを示す。スイッチからコントローラへの未知のフレームについてのフローエントリの設定の要求には、ＰａｃｋｅｔＩｎメッセージが用いられる。以降、ＰａｃｋｅｔＩｎメッセージを、単に、ＰａｃｋｅｔＩｎ、と称する。また、本明細書では、フレームとパケットとを特に区別せずに用いることとする。
【０００５】
図１６は、リアクティブ方式の処理の一例を示す図である。Ｓ１では、スイッチＰ１は、ＰａｃｋｅｔＩｎ送信の対象となるフレームを受信する。例えば、転送処理等が設定されているいずれのフローエントリの条件に合致しない未知のフレームは、ＰａｃｋｅｔＩｎ送信の対象のフレームとなる。ＰａｃｋｅｔＩｎの対象となるフレームについては、処理が保留される。
【０００６】
Ｓ２では、スイッチＰ１は、コントローラＰ２にＰａｃｋｅｔＩｎを送信する。Ｓ３では、コントローラＰ２は、ＰａｃｋｅｔＩｎで通知されたフレームの内容から、該当のフローに対してスイッチＰ１に行わせる処理を決定し、スイッチＰ１にＦｌｏｗＭｏｄメッセージを送信する。ＦｌｏｗＭｏｄメッセージは、フローエントリを含み、フローエントリの登録、削除、変更をスイッチＰ１に指示するメッセージである。以降、ＦｌｏｗＭｏｄメッセージを、単に、ＦｌｏｗＭｏｄ、と称する。
【０００７】
Ｓ４では、スイッチＰ１は、ＦｌｏｗＭｏｄを受信し、ＦｌｏｗＭｏｄに含まれるフローエントリをフローテーブルに登録して、フローテーブルを書き換える。
【０００８】
Ｓ５では、コントローラＰ２は、スイッチＰ１に対して、ＰａｃｋｅｔＩｎに対応する、Ｓ１においてスイッチＰ２が受信したフレームの出力を指示するＰａｃｋｅｔＯｕｔメッセージを送信する。ＰａｃｋｅｔＯｕｔメッセージは、スイッチＰ２に対するパケット
出力指示に用いられるメッセージである。以降、ＰａｃｋｅｔＯｕｔメッセージを、単に、ＰａｃｋｅｔＯｕｔ、と称する。
【０００９】
Ｓ６では、スイッチＰ１は、更新されたフローテーブルに従って、Ｓ１で受信し、処理を保留していたフレームを転送又は廃棄する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特表２０１４−５０２７９４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、リアクティブ方式の制御では、ＰａｃｋｅｔＩｎの送信からＦｌｏｗＭｏｄの受信までの間に、スイッチＰ１に連続してＰａｃｋｅｔＩｎ送信の対象であるフレームが届く場合に、以下のような問題が発生する可能性がある。
【００１２】
図１７は、リアクティブ方式の制御における処理の一例を示す図である。例えば、図１７では、スイッチＰ１に、ＰａｃｋｅｔＩｎ送信の対象となるフローＡ、フローＢのそれぞれのフレーム＃１〜＃４が連続して届く。フローＡ、フローＢのいずれかのフレームのＰａｃｋｅｔＩｎに対するＦｌｏｗＭｏｄが受信されるまでの間は、スイッチＰ１は、フローＡ、フローＢの全てのフレームについて、ＰａｃｋｅｔＩｎを送信する。
【００１３】
例えば、図１７に示される例のスイッチＰ１では、フローＡのフレーム＃１についてのＰａｃｋｅｔＩｎが送信された後でも、ＦｌｏｗＭｏｄが受信されるまでは、フローＡのフレーム＃２〜＃４についてＰａｃｋｅｔＩｎが送信される。同様に、フローＢについても、フレーム＃１〜＃４それぞれについてＰａｃｋｅｔＩｎが送信される。
【００１４】
コントローラＰ２には、フローＡ、フローＢのそれぞれのフレームについてのＰａｃｋｅｔＩｎが集中する。例えば、フローＡが、ＴＣＰ（Transmission Control Protocol）
のフローであり、大きなウィンドウサイズでデータを連続転送するフローである場合には、フローＡのフレームが大量に連続してスイッチＰ１に入力される。スイッチＰ１は、フローＡのフローエントリが登録されるまで、フローＡの全ての入力フレームについてＰａｃｋｅｔＩｎを送信し、コントローラＰ２に送信する。コントローラＰ２に、フローＡのフレームについてのＰａｃｋｅｔＩｎが集中することで、コントローラＰ２において処理輻輳が発生する可能性がある。コントローラＰ２にフローＡのＰａｃｋｅｔＩｎが大量に入力されることによって、コントローラＰ２による、フローＡ以外のフローのＰａｃｋｅｔＩｎに対するＦｌｏｗＭｏｄの送信が遅れる。これによって、さらに、スイッチＰ１によるＰａｃｋｅｔＩｎの生成及び送信、コントローラＰ２へのＰａｃｋｅｔＩｎの入力が増えることを招くおそれがある。
【００１５】
また、コントローラＰ２の種類によっては、同一フローについての複数のフレームのＰａｃｋｅｔＩｎの全てに対してＦｌｏｗＭｏｄメッセージを送信する、ＦｌｏｗＭｏｄの多重投入を行うものがある。この場合、同じ内容のフローエントリを含むＦｌｏｗＭｏｄがスイッチＰ１に重複して届く。スイッチＰ１は、ＦｌｏｗＭｏｄを受信した場合には、ＦｌｏｗＭｏｄで通知されるフローエントリとフローテーブルに登録されているフローエントリとの間の精査を行う。フローテーブルの精査は、スイッチＰ１にとって負荷の高い処理である。したがって、同一フローについて、ＰａｃｋｅｔＩｎが大量に発生する場合には、スイッチＰ１が受信するＦｌｏｗＭｏｄの数も多くなり、コントローラＰ２に加えて、スイッチＰ１の処理負荷も高くなる可能性がある。
【００１６】
ＰａｃｋｅｔＩｎによるコントローラＰ２の処理輻輳を抑制する方法として、ＯｐｅｎＦｌｏｗでは、ＰａｃｋｅｔＩｎの送信レートの制限が用意されている。しかしながら、スイッチＰ１において、ＰａｃｋｅｔＩｎの送信レートが制限される場合には、ＰａｃｋｅｔＩｎの送信レートが上限値を超えると、送信レートの調整処理の一つとして、ＰａｃｋｅｔＩｎが廃棄されることがある。そのため、特定のフローでのＰａｃｋｅｔＩｎの想定を超える数の発生によって送信レートが占領され、他のフローのＰａｃｋｅｔＩｎの廃棄を招く可能性がある。コントローラＰ２は、ＰａｃｋｅｔＩｎが廃棄されているフローについて、ＰａｃｋｅｔＩｎの存在を検知することができない。そのため、再度、該当のフローのフレームがスイッチＰ１に届いた場合には、再度ＰａｃｋｅｔＩｎの送信が行われる。これによって、ＰａｃｋｅｔＩｎの発生が加速され、廃棄されたＰａｃｋｅｔＩｎのフローに対する制御が遅れる。
【００１７】
また、ＰａｃｋｅｔＩｎの送信レートの制限が行われる場合には、スイッチＰ１の内部にＰａｃｋｅｔＩｎが大量に滞留する。そのため、スイッチＰ１における、ＰａｃｋｅｔＩｎの発生からＰａｃｋｅｔＩｎのコントローラＰ２への送信までの時間が長くなる。スイッチＰ１においてＰａｃｋｅｔＩｎ送信の対象となるパケットがバッファで保持されるバッファ保持時間は、予め管理者によって決められている。スイッチＰ１が、コントローラＰ２から、ＰａｃｋｅｔＩｎに対するＦｌｏｗＭｏｄとＰａｃｋｅｔＯｕｔとを受信したときには、バッファ保持時間がタイムアップしてしまい、ＰａｃｋｅｔＯｕｔ対象のパケットが存在しない場合がある。
【００１８】
ＰａｃｋｅｔＯｕｔ対象のパケットが存在しない場合には、スイッチＰ１は、コントローラＰ２に「バッファが存在しない」というエラーを返すことになる。このエラー処理のため、スイッチＰ１とコントローラＰ２との処理負荷が上昇するおそれがある。
【００１９】
本発明の一態様は、コントローラ及びスイッチの処理輻輳を抑制可能なフレーム転送装置、及び、フローに関する処理の設定要求方法を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明の態様の一つは、フレームを受信する受信部と、共通の識別情報を有する複数のフレームを含むフローであって、処理の対象となるフローの条件と、制御装置により設定される処理内容とが対応付けられて記憶されている記憶部と、受信されたフレームの識別情報が合致する条件に対応付けられて記憶されている処理内容を、受信されたフレームに対して実行する制御部と、を有するフレーム転送装置である。制御部は、受信されたフレームについて制御装置に処理内容の設定を要求する場合に、受信されたフレームのフロー種別に応じて、受信されたフレームに関する設定要求メッセージを制御装置に送信するか否かを判定する。
【発明の効果】
【００２１】
開示のフレーム転送装置、及び、フローに関する処理の設定要求方法によれば、コントローラ及びスイッチの処理輻輳を抑制することができる。
【図面の簡単な説明】
【００２２】
【図１】第１実施形態に係るネットワークシステムの構成例を示す図である。
【図２】第１実施形態に係る保証型ＰａｃｋｅｔＩｎの対象のフローに対する処理の一例を示す図である。
【図３】第１実施形態に係るＰａｃｋｅｔＩｎの送信レート制限の処理の一例を示す図である。
【図４】スイッチのハードウェア構成の一例を示す図である。
【図５】スイッチの機能構成の一例を示す図である。
【図６】フローテーブルの一例である。
【図７】第１実施形態に係るＭａｘ＿ｌｅｎ情報の使用方法の一例を示す図である。
【図８】保証型ＰａｃｋｅｔＩｎに付加される輻輳情報の一例を示す図である。
【図９】ＰａｃｋｅｔＩｎ制御テーブルのエントリに含まれる項目の一例を示す図である。
【図１０】送信待ちキューの送信待ちエントリの項目の一例を示す図である。
【図１１】ＰａｃｋｅｔＩｎ制御テーブルのエントリと送信待ちキューの送信待ちエントリとの相互参照の一例を示す図である。
【図１２Ａ】ＰａｃｋｅｔＩｎ制御部の、ＰａｃｋｅｔＩｎ入力時の処理のフローチャートの一例である。
【図１２Ｂ】ＰａｃｋｅｔＩｎ制御部の、ＰａｃｋｅｔＩｎ入力時の処理のフローチャートの一例である。
【図１２Ｃ】ＰａｃｋｅｔＩｎ制御部の、ＰａｃｋｅｔＩｎ入力時の処理のフローチャートの一例である。
【図１３】送信レート制御部のＰａｃｋｅｔＩｎ送信の処理のフローチャートの一例である。
【図１４】ＰａｃｋｅｔＩｎ制御部のＰａｃｋｅｔＯｕｔ入力時の処理のフローチャートの一例である。
【図１５】ＰａｃｋｅｔＩｎ制御部の動作ガードタイマがタイムアウトした場合の処理のフローチャートの一例である。
【図１６】リアクティブ方式の処理の一例を示す図である。
【図１７】リアクティブ方式の制御における処理の一例を示す図である。
【発明を実施するための形態】
【００２３】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００２４】
＜第１実施形態＞
図１は、第１実施形態に係るネットワークシステム１００の構成例を示す図である。第１実施形態では、ネットワークシステム１００は、ＳＤＮのネットワークを想定する。ネットワークシステム１００は、複数のスイッチ１と、コントローラ２とを含む。スイッチ１は、例えば、ＳＤＮスイッチである。コントローラ２は、例えば、ＳＤＮコントローラである。ＳＤＮスイッチは、ＯｐｅｎＦｌｏｗスイッチとも呼ばれる。ＳＤＮコントローラは、ＯｐｅｎＦｌｏｗコントローラとも呼ばれる。
【００２５】
ネットワークシステム１００では、スイッチ１とコントローラ２とを接続するネットワークと、ユーザデータが通過するネットワークとが分離されている。スイッチ１とコントローラ２との間では制御情報を伝送する制御信号がやり取りされる。スイッチ１とコントローラ２との間の制御信号を扱うプロトコルを制御プレーンという。第１実施形態では、制御プレーンでは、ＯｐｅｎＦｌｏｗが用いられることを想定する。スイッチ１間を中継されるユーザデータを伝送するユーザ信号を扱うプロトコルをデータプレーンという。
【００２６】
第１実施形態では、スイッチ１は、同一フローのフレームのうち、１つのフレームについてＰａｃｋｅｔＩｎをコントローラ２に送信し、それ以外のフレームについてはＰａｃｋｅｔＩｎを送信しない。一方で、送信された１つのＰａｃｋｅｔＩｎについては、コントローラ２へ送信されることを保証するため、ＰａｃｋｅｔＩｎの送信レートの調整のための廃棄の対象から除外する。これによって、スイッチ１は、コントローラ２及びスイッチ１自身の処理負荷が増大することを抑制する。同一フローに含まれるフレームのうちＰａｃｋｅｔＩｎが送信されるフレームは、最新のフレーム、又は、所定時間内のうち最古のフレームである。
【００２７】
第１実施形態では、すべてのフローではなく、一部のフローについて、上記処理を行う。上記処理の対象であるフローのＰａｃｋｅｔＩｎを、以降、保証型ＰａｃｋｅｔＩｎ、と称する。上記処理の対象でないフローのＰａｃｋｅｔＩｎ、すなわち、従来の処理がなされるＰａｃｋｅｔＩｎを、以降、非保証型ＰａｃｋｅｔＩｎ、と称する。ＰａｃｋｅｔＩｎは、「設定要求メッセージ」の一例である。非保証型ＰａｃｋｅｔＩｎは、「第１の設定要求メッセージ」の一例である。保証型ＰａｃｋｅｔＩｎは、「第２の設定要求メッセージ」の一例である。
【００２８】
保証型ＰａｃｋｅｔＩｎの対象となるのは、例えば、ユーザデータのフレームである。ユーザデータのフレームには、例えば、ＴＣＰ（Transmission Control Protocol）、Ｕ
ＤＰ（User Datagram Protocol）のフレームがある。ユーザデータのフレームは、ＰａｃｋｅｔＩｎを廃棄しても上位層のプロトコルの機能によって通信の正常性が保たれることが多いためである。非保証型ＰａｃｋｅｔＩｎの対象となるのは、例えば、輻輳時に廃棄されてもかまわないが、ベストエフォートでＰａｃｋｅｔＩｎを全てコントローラ２に送信されることが望まれるフローである。保証型ＰａｃｋｅｔＩｎの対象となる他の例としては、例えばＡＲＰ（Address Resolution Protocol）、ＬＬＤＰ（Link Layer Discovery Protocol）等のフレームがある。これらのフレームは確実にＰａｃｋｅｔＩｎがコントローラ２に送信されることが望ましいからである。保証型ＰａｃｋｅｔＩｎが生成されるフレームは、フローエントリによって設定される。
【００２９】
図２は、第１実施形態に係る保証型ＰａｃｋｅｔＩｎの対象のフローに対する処理の一例を示す図である。図２では、スイッチ１は、フローＡ、フローＢについて、それぞれ、フレーム＃１、＃２を連続して受信している。フローＡ、フローＢは、保証型ＰａｃｋｅｔＩｎの対象のフローである。
【００３０】
スイッチ１は、フローＡ、フローＢそれぞれについて、一つのフレームについてのＰａｃｋｅｔＩｎをコントローラ２に送信する。図２では、フローＡ、フローＢともに、最新のフレーム＃２についてのＰａｃｋｅｔＩｎが送信されている。フローＡ、フローＢともに、フレーム＃１についてのＰａｃｋｅｔＩｎは、フレーム＃２についてのＰａｃｋｅｔＩｎが発生した時点で廃棄され、送信されない。
【００３１】
スイッチ１は、フローＡのＰａｃｋｅｔＩｎを送信すると、フローＡについて、ガードタイマを開始する。ガードタイマが満了するまでの間は、フローＡのフレームを受信した場合でも、スイッチ１はＰａｃｋｅｔＩｎを、コントローラ２には送信せずに、積極的に廃棄する。フローＢについても同様である。図２では、ガードタイマ開始後にスイッチ１に到着するフローＡ、フローＢそれぞれのフレーム＃３、＃４についてのＰａｃｋｅｔＩｎは廃棄される。
【００３２】
コントローラ２から、フローＡのフレーム＃２についてのＰａｃｋｅｔＩｎに対するＦｌｏｗＭｏｄの受信によって、スイッチ１のフローテーブルにフローＡに対する処理が含まれるフローエントリが登録される。コントローラ２から、フローＡのフレーム＃２についてのＰａｃｋｅｔＩｎに対するＰａｃｋｅｔＯｕｔの受信によって、フローＡのフレーム＃２が、更新されたフローテーブルに従って、処理されて出力される。ＰａｃｋｅｔＯｕｔを受信することによって、フローＡのガードタイマが解除される。フローＢについても同様に、コントローラ２からＦｌｏｗＭｏｄとＰａｃｋｅｔＯｕｔとを受信し、ガードタイマが解除される。ＦｌｏｗＭｏｄ又はＰａｃｋｅｔＯｕｔを受信することは、「フローに対する処理内容の設定を受ける」ことの一例である。
【００３３】
ガードタイマが解除された後に、スイッチ１にフローＡのフレームが届いた場合には、
フローＡのフローエントリがフローテーブルに存在しているので、フローＡのフレームは該フローエントリに従ってスイッチ１から出力される。なお、図２に示される例では、ＰａｃｋｅｔＩｎが廃棄されるフローＡのフレーム＃１、＃３、＃４については、フレーム本体も廃棄される。廃棄されたフレームは、上位レイヤの再送機能等によって、救済される。
【００３４】
図３は、第１実施形態に係るＰａｃｋｅｔＩｎの送信レート制限の処理の一例を示す図である。図３には、ＰａｃｋｅｔＩｎの送信待ちキューが示される。ＰａｃｋｅｔＩｎの送信待ちキューには、保証型、非保証型の双方の送信待ちのＰａｃｋｅｔＩｎが格納される。
【００３５】
第１実施形態では、保証型ＰａｃｋｅｔＩｎがコントローラ２に送信されることを保証するために、スイッチ１では、以下の処理が行われる。ＰａｃｋｅｔＩｎの送信時に、送信レートが送信可能レートを超えている場合には、スイッチ１は、ＰａｃｋｅｔＩｎ送信待ちキュー内の非保証型ＰａｃｋｅｔＩｎを廃棄する。このとき、ＰａｃｋｅｔＩｎ送信待ちキュー内の保証型ＰａｃｋｅｔＩｎは廃棄の対象から除外される。なお、第１実施形態では、ＰａｃｋｅｔＩｎの送信とは、ＰａｃｋｅｔＩｎ送信待ちキューからＰａｃｋｅｔＩｎを取り出して送信することを示す。
【００３６】
したがって、保証型ＰａｃｋｅｔＩｎは、送信レートが送信可能レートを超えている場合でも、送信待ちキューから廃棄されることがない。したがって、保証型ＰａｃｋｅｔＩｎは、コントローラ２への送信が保証されることとなる。
【００３７】
＜装置構成＞
図４は、スイッチ１のハードウェア構成の一例を示す図である。スイッチ１は、例えば、ＯｐｅｎＦｌｏｗスイッチ、レイヤ３スイッチである。スイッチ１は、ＣＰＵ（Central Processing Unit）１０１、記憶部１０２、回線インタフェース１０３を備える。ＣＰ
Ｕ  １０１、記憶部１０２、回線インタフェース１０３はバスによって電気的に接続される。スイッチ１は、「フレーム転送装置」の一例である。
【００３８】
記憶部１０２は、ＲＡＭ（Random Access Memory）１０２Ａ、ＲＯＭ（Read Only Memory）１０２Ｂ、不揮発性メモリ１０２Ｃを含む。ＲＡＭ  １０２Ａは、例えば、ＤＲＡＭ（Dynamic RAM）、ＳＲＡＭ（Static RAM）、ＳＤＲＡＭ（Synchronous  DRAM）、のような半導体メモリである。ＲＡＭ  １０２Ａは、ＣＰＵ  １０１に、ＲＯＭ  １０２Ｂや不揮発性メモリ１０２Ｃに格納されているプログラムをロードする作業領域を提供したり、バッファとして用いられたりする。ＲＯＭ  １０２Ｂには、ＢＩＯＳ（Basic Input/Output System）等が格納されている。ＲＡＭ  １０２ＡとＲＯＭ  １０２Ｂとは、主記憶装
置として用いられる。
【００３９】
不揮発性メモリ１０２Ｃは、例えば、ＯＳ（Operating System）、ＯｐｅｎＦｌｏｗプログラム、保証型ＰａｃｋｅｔＩｎ実行プログラム、その他アプリケーションプログラム、ＣＰＵ  １０１が使用するデータを格納する。不揮発性メモリ１０２Ｃは、例えば、ＥＰＲＯＭ（Erasable Programmable ROM）、又はハードディスクドライブ（Hard Disk Drive）等である。ＯｐｅｎＦｌｏｗプログラムは、ＯｐｅｎＦｌｏｗに規定された処理をスイッチ１に行わせるためのプログラムである。保証型ＰａｃｋｅｔＩｎ実行プログラムは、スイッチ１に保証型ＰａｃｋｅｔＩｎに対する処理を行わせるためのプログラムである。保証型ＰａｃｋｅｔＩｎ実行プログラムは、例えば、ＯｐｅｎＦｌｏｗプログラムのモジュールの一つであってもよい。不揮発性メモリ１０２Ｃは、補助記憶装置として用いられる。
【００４０】
ＣＰＵ  １０１は、不揮発性メモリ１０２Ｃに保持されたＯＳやプログラムをＲＡＭ  １０２Ａにロードして実行することによって、様々な処理を実行する。ＣＰＵ  １０１は、複数であってもよい。ＣＰＵ  １０１は、「制御部」の一例である。
【００４１】
回線インタフェース１０３は、例えば、例えば、光ケーブル、ＬＡＮ（Local Area Network）ケーブル等の有線のネットワーク回線のケーブルを接続する回路及びポートである。回線インタフェース１０３は、「受信部」の一例である。
【００４２】
なお、図４に示されるスイッチ１のハードウェア構成は、一例であり、上記に限られず、実施の形態に応じて、適宜、構成要素の省略や置換、追加が可能である。例えば、スイッチ１は、ＣＰＵ  １０１の他に、ＤＳＰ（Digital Signal Processor）、ネットワークプロセッサ等のプロセッサを備えてもよい。
【００４３】
コントローラ２は、例えば、専用又は汎用のコンピュータである。コントローラ２は、ＣＰＵ、ＲＡＭ、ＲＯＭ、不揮発性メモリ、回線インタフェース、キーボード等の入力装置、ディスプレイ等の出力装置を備える。各ハードウェア構成要素については、概要はスイッチ１と同様であり、説明を省略する。コントローラ２は、「制御装置」の一例である。
【００４４】
図５は、スイッチ１の機能構成の一例を示す図である。スイッチ１は、機能構成として、Ｄプレーン回線インタフェース１１Ａ、Ｃプレーン回線インタフェース１１Ｂ、フレーム受信制御部１２Ａ、フレーム送信制御部１２Ｂ、フレーム分析部１３、フレーム処理部１４、ＰａｃｋｅｔＩｎ制御部１５、ＰａｃｋｅｔＩｎ送信待ちキュー１６、送信レート制御部１７、ＯｐｅｎＦｌｏｗプロトコル制御部１８、ＰａｃｋｅｔＩｎ制御テーブル１９を備える。ＰａｃｋｅｔＩｎ送信待ちキュー１６は、以降、単に、送信待ちキュー１６と称される。
【００４５】
Ｄプレーン回線インタフェース１１Ａは、他のスイッチ１が接続するネットワークに接続する回線インタフェース１０３に相当する。Ｃプレーン回線インタフェース１１Ｂは、コントローラ２が接続するネットワークに接続する回線インタフェース１０３に相当する。Ｄプレーン回線インタフェース１１Ａ、Ｃプレーン回線インタフェース１１Ｂは、物理インタフェースであってもよいし、論理インタフェースであってもよい。
【００４６】
フレーム受信制御部１２Ａ、フレーム送信制御部１２Ｂ、フレーム分析部１３、フレーム処理部１４、ＯｐｎｅＦｌｏｗプロトコル制御部１８は、それぞれ、ＣＰＵ  １０１がＯｐｅｎＦｌｏｗプログラムを実行することによって達成される機能構成である。フレーム受信制御部１２Ａは、Ｄプレーン回線インタフェース１１Ａから入力されるフレームをフレーム分析部１３に出力する。フレーム送信制御部１２Ｂは、フレーム処理部１４から入力されるフレームをＤプレーン回線インタフェース１１Ａに出力する。
【００４７】
フレーム分析部１３は、フレームヘッダを分析して、フローを特定する。フレーム分析部１３は、フロー識別情報によってフローを識別する。フロー識別情報は、例えば、宛先ＩＰアドレス、送信元ＩＰアドレス、宛先ＭＡＣアドレス、送信元ＩＰアドレス、ＴＣＰ又はＵＤＰの宛先ポート番号、プロトコルＩＤ等のうちの１つ又は複数の組合せである。フロー識別情報として用いられる情報は、例えば、ＯｐｅｎＦｌｏｗの仕様として規定されている。フレーム分析部１３は、フレームのフロー識別情報とフレームを出力する。フロー識別情報は、「識別情報」の一例である。
【００４８】
フレーム処理部１４は、フローテーブル１４１、フレーム加工制御部１４２、フレームバッファ１４３を含む。フローテーブル１４１は、例えば、ＲＡＭ  １０２Ａに格納され
る。フローテーブル１４１の詳細については、後述される。
【００４９】
フレーム加工制御部１４２は、フレームのフロー識別情報をキーとして、フローテーブル１４１を検索し、フロー識別情報に合致したフローエントリに従ってフレームの処理を行う。なお、フローテーブル１４１に従って処理されるのはＤプレーンのフレームである。
【００５０】
例えば、フレームのフロー識別情報がＰａｃｋｅｔＩｎの送信を指示するフローエントリに合致した場合には、フレーム加工制御部１４２は、ＰａｃｋｅｔＩｎを生成する。フレーム加工制御部１４２は、生成したＰａｃｋｅｔＩｎと、ＰａｃｋｅｔＩｎに関するパラメータと、をＰａｃｋｅｔＩｎ制御部１５に出力する。ＰａｃｋｅｔＩｎに関するパラメータには、ＰａｃｋｅｔＩｎのフローのフロー識別情報、保証型又は非保証型であることを示す情報等が含まれており、詳細については後述される。また、フレーム加工制御部１４２は、フレームバッファ１４３にフレーム本体を格納する。
【００５１】
フレームバッファ１４３は、処理が保留されているフレーム、すなわち、ＰａｃｋｅｔＩｎが生成されたフレーム本体を保持する。フレームバッファ１４３は、ＲＡＭ  １０２Ａに作成される。フレームバッファ１４３は、複数備えられ、バッファＩＤによって識別される。フレームバッファ１４３に格納されたフレーム本体は、コントローラ２からのＰａｃｋｅｔＯｕｔが入力されると、フレーム加工制御部１４２によって、フレームバッファ１４３から読み出され、ＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎに従い処理される。フレームバッファ１４３は、「フレームバッファ」の一例である。
【００５２】
また、フレームバッファ１４３に格納される、ＰａｃｋｅｔＩｎが生成されたフレーム本体は、対応するＰａｃｋｅｔＩｎが廃棄されることに伴って、廃棄される。フレームバッファ１４３からのフレームの廃棄は、ＰａｃｋｅｔＩｎを廃棄するＰａｃｋｅｔＩｎ制御部１５又は送信レート制御部１７によって行われてもよい。又は、フレームバッファ１４３からのフレームの廃棄は、ＰａｃｋｅｔＩｎを廃棄するＰａｃｋｅｔＩｎ制御部１５又は送信レート制御部１７からの指示によって、フレーム加工制御部１４２が行ってもよい。
【００５３】
フレーム加工制御部１４２には、ＯｐｅｎＦｌｏｗプロトコル制御部１８から、コントローラ２からのＯｐｅｎＦｌｏｗメッセージが入力される。第１実施形態において着目されるコントローラ２からのＯｐｅｎＦｌｏｗメッセージは、ＦｌｏｗＭｏｄとＰａｃｋｅｔＯｕｔである。フレーム加工制御部１４２は、ＦｌｏｗＭｏｄが入力された場合には、フローテーブル１４１にＦｌｏｗＭｏｄに含まれるフローエントリが存在するか否かの確認を行い、該フローエントリをフローテーブル１４１に登録する。
【００５４】
ＰａｃｋｅｔＯｕｔが入力された場合には、フレーム加工制御部１４２は、ＰａｃｋｅｔＯｕｔによって指定されたフレームをＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎに従い処理を実行する。ＰａｃｋｅｔＯｕｔには、バッファＩＤが含まれており、フレーム加工制御部１４２はＰａｃｋｅｔＯｕｔに含まれるバッファＩＤに該当するフレームバッファ１４３からフレームを読み出す。また、ＰａｃｋｅｔＯｕｔは、スイッチ１に出力させるフレームを含むこともできる。ＰａｃｋｅｔＯｕｔにフレームが含まれている場合には、フレーム加工制御部１４２は、ＰａｃｋｅｔＯｕｔに含まれるフレームをＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎに従い処理する。
【００５５】
なお、フレーム処理部１４は、ＣＰＵ  １０１がＯｐｅｎＦｌｏｗプログラムを実行することによって達成されることに限定されず、ＦＰＧＡ（Field-Programmable Gate Array）等のハードウェア回路によって達成されてもよい。また、フレーム処理部１４の処理
の一部をハードウェアで達成するようにしてもよい。例えば、フローテーブル１４１をＴＣＡＭ（Ternary Content Addressable Memory）で実現することで、フローテーブル１４１の検索処理をハードウェアで達成してもよい。この場合には、フローテーブル１４１の検索処理が高速化される。
【００５６】
ＰａｃｋｅｔＩｎ制御部１５、送信待ちキュー１６、送信レート制御部１７は、ＣＰＵ
１０１が保証型ＰａｃｋｅｔＩｎ実行プログラムを実行することによって達成される機能構成の一つである。ＰａｃｋｅｔＩｎ制御部１５には、フレーム処理部１４からＰａｃｋｅｔＩｎとＰａｃｋｅｔＩｎに関するパラメータとが入力される。ＰａｃｋｅｔＩｎ制御部１５は、入力されたＰａｃｋｅｔＩｎが保証型であるか非保証型であるかをパラメータに基づいて判定する。入力されたＰａｃｋｅｔＩｎが非保証型である場合には、ＰａｃｋｅｔＩｎ制御部１５は、入力された非保証型ＰａｃｋｅｔＩｎを送信待ちキュー１６に格納する。
【００５７】
入力されたＰａｃｋｅｔＩｎが保証型で、且つ、新たなフローについてのものである場合には、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを送信待ちキュー１６に格納する。また、この場合には、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９に新たにエントリを追加する。ＰａｃｋｅｔＩｎ制御テーブル１９の詳細は後述される。
【００５８】
入力されたＰａｃｋｅｔＩｎが保証型で、且つ、既に同一フローのＰａｃｋｅｔＩｎが送信待ちキュー１６に格納されている場合には、ＰａｃｋｅｔＩｎ制御部１５は、入力されたＰａｃｋｅｔＩｎ又は送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎの廃棄の判定を行う。この廃棄判定は、リフレッシュタイムと送信待ちキュー１６内の既存の保証型ＰａｃｋｅｔＩｎの送信待ちキュー１６内の滞留時間とに基づいて、行われる。
【００５９】
リフレッシュタイムは、保証型ＰａｃｋｅｔＩｎの送信待ちキュー１６における更新判定の閾値となる時間である。保証型ＰａｃｋｅｔＩｎの送信待ちキュー１６内の滞留時間がリフレッシュタイムより長くなると、ＰａｃｋｅｔＩｎ制御部１５は、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎを、新たに入力された同一フローの保証型ＰａｃｋｅｔＩｎに書き換える。
【００６０】
したがって、ＰａｃｋｅｔＩｎ制御部１５は、送信待ちキュー１６内のフローの保証型ＰａｃｋｅｔＩｎの滞留時間がリフレッシュタイム以下である場合には、同一フローの新たに到着した保証型ＰａｃｋｅｔＩｎを廃棄する。ＰａｃｋｅｔＩｎ制御部１５は、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎの滞留時間がリフレッシュタイムより長い場合には、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎを同一フローの新たに到着した保証型ＰａｃｋｅｔＩｎに書き換える。
【００６１】
リフレッシュタイムが０に設定されている場合には、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは、同一フローの新たな保証型ＰａｃｋｅｔＩｎが入力される度に、新たな保証型ＰａｃｋｅｔＩｎに書き換えられる。したがって、リフレッシュタイムが０の場合には、最新のフレームについての保証型ＰａｃｋｅｔＩｎが送信される。リフレッシュタイムが０でない場合には、現在時刻から所定時間さかのぼった範囲内での最古のフレームについての保証型ＰａｃｋｅｔＩｎが送信される。リフレッシュタイムは、「第１の時間長」の一例である。
【００６２】
また、ＰａｃｋｅｔＩｎ制御部１５は、新たなＰａｃｋｅｔＩｎの入力時に、動作ガードタイマが開始されている場合には、新たなＰａｃｋｅｔＩｎを廃棄する。動作ガードタイマは、保証型ＰａｃｋｅｔＩｎが送信されると開始され、ＰａｃｋｅｔＯｕｔが入力さ
れると解除されるタイマである。動作ガードタイマの詳細については、後述される。なお、ＰａｃｋｅｔＩｎが廃棄される場合には、対応するフレーム本体もフレームバッファ１４３から廃棄される。ＰａｃｋｅｔＩｎ制御部１５は、「制御部」の一例である。
【００６３】
ＰａｃｋｅｔＩｎ送信待ちキュー１６は、ソフトウェアキューである。送信待ちキュー１６は、ＦＩＦＯ（First In First Out）キューである。送信待ちキュー１６には、ＰａｃｋｅｔＩｎ制御部１５によって、保証型及び非保証型のＰａｃｋｅｔＩｎが格納され、送信レート制御部１７によってＰａｃｋｅｔＩｎが読み出される。ＰａｃｋｅｔＩｎ送信待ちキュー１６は、「送信待ちキュー」の一例である。
【００６４】
送信レート制御部１７は、設定された送信可能レート内で送信待ちキュー１６からＰａｃｋｅｔＩｎを読み出してＯｐｅｎＦｌｏｗプロトコル制御部１８に出力する。例えば、送信待ちキュー１６からのＰａｃｋｅｔＩｎの読み出しは、トークンバケットを用いて行われており、トークンバケットにトークンがない場合には、送信レートが送信可能レートを超えていると判定される。
【００６５】
ＰａｃｋｅｔＩｎの送信レートが送信可能レートを超えている場合には、送信レート制御部１７は、送信待ちキュー１６内の非保証型ＰａｃｋｅｔＩｎを廃棄することで、送信レートを調整する。このとき、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは廃棄の対象とされない。これによって、ＰａｃｋｅｔＩｎの送信レートが制限されている場合でも、保証型ＰａｃｋｅｔＩｎは廃棄されずにコントローラ２に送信されることが保証される。なお、送信レートの調整のために非保証型ＰａｃｋｅｔＩｎが廃棄された場合には、対応するフレーム本体もフレームバッファ１４３から廃棄される。送信レート制御部１７は、「制御部」の一例である。
【００６６】
ＯｐｅｎＦｌｏｗプロトコル制御部１８は、Ｃプレーンのデータの入出力を制御する。ＯｐｅｎＦｌｏｗプロトコル制御部１８は、送信レート制御部１７からＰａｃｋｅｔＩｎの入力を受け、Ｃプレーン回線インタフェース１１Ｂに出力する。また、Ｃプレーン回線インタフェース１１ＢからＰａｃｋｅｔＯｕｔが入力された場合には、ＯｐｅｎＦｌｏｗプロトコル制御部１８は、ＰａｃｋｅｔＯｕｔを、フレーム処理部１４とＰａｃｋｅｔＩｎ制御部１５とに出力する。Ｃプレーン回線インタフェース１１ＢからＦｌｏｗＭｏｄが入力された場合には、ＯｐｅｎＦｌｏｗプロトコル制御部１８は、ＦｌｏｗＭｏｄを、フレーム処理部１４に出力する。
【００６７】
図６は、フローテーブル１４１の一例である。図６では、ＰａｃｋｅｔＩｎを指示するフローエントリの例が示されている。図６に示されるフローエントリには、テーブル、Ｐｒｉｏｒｉｔｙ、Ｍａｔｃｈ、Ｉｎｓｔｒｕｃｔｉｏｎ、Ａｃｔｉｏｎの項目が含まれている。ただし、図６に示されるフローエントリの項目は、一部であって、フローエントリの項目はこれらに限定されない。フローテーブル、又は、フローテーブルを格納するＲＡＭ  １０２Ａは、「記憶部」の一例である。
【００６８】
「テーブル」の項目の値は、フローテーブルの識別番号を示す。スイッチ１は、複数のフローテーブルを保持することが可能である。「Ｐｒｉｏｒｉｔｙ」の項目の値は、該当のフローエントリの優先度を示す。「Ｐｒｉｏｒｉｔｙ」の値がより大きいものが適用される。
【００６９】
「Ｍａｔｃｈ」の項目の値は、該当のフローエントリの対象となるフローの条件を示す。「Ｍａｔｃｈ」の項目には、パケットタイプ、入力ポート、ＶＬＡＮ番号、宛先ＩＰアドレス、送信元ＩＰアドレス、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス等を指定することができる。
【００７０】
「Ｉｎｓｔｒｕｃｔｉｏｎ」の項目の値は、該当のフローエントリの「Ａｃｔｉｏｎ」の項目に対する実行タイミング、他のフローテーブルへの移動、等を示す。「Ｉｎｓｔｒｕｃｔｉｏｎ」の項目内の「ＡＰＰＬＹ＿Ａｃｔｉｏｎ」は、該当のフローエントリの「Ａｃｔｉｏｎ」の項目に指定された処理の実行を示す。
【００７１】
「Ａｃｔｉｏｎ」の項目の値は、該当のフローエントリの「Ｍａｔｃｈ」の項目の値に該当するフローのフレームに対して実行される処理を示す。「Ｏｕｔｐｕｔ＝Ｃｏｎｔｒｏｌｌｅｒ」は、ＰａｃｋｅｔＩｎをコントローラ２に送信する処理を示す。「Ｍａｘ＿ｌｅｎ＝ＸＸＸＸ」（ＸＸＸＸは１６ビットのパラメータ）は、フレームの先頭から指定された位置までのデータをＰａｃｋｅｔＩｎに含めることを示す。「Ｏｕｔｐｕｔ＝Ｃｏｎｔｒｏｌｌｅｒ」は、「制御装置へのＰａｃｋｅｔＩｎメッセージの送信指示」の一例である。
【００７２】
第１実施形態では、「Ａｃｔｉｏｎ」内の「Ｍａｘ＿ｌｅｎ」を用いて、保証型ＰａｃｋｅｔＩｎとするか、非保証型ＰａｃｋｅｔＩｎとするかが、指定される。第１実施形態における「Ｍａｘ＿ｌｅｎ」のパラメータの使用方法については後述される。
【００７３】
図６に示されるフローエントリでは、「Ｐｒｉｏｒｉｔｙ」が「２０」のフローエントリと、「Ｐｒｉｏｒｉｔｙ」が「３０」のフローエントリと、が保証型ＰａｃｋｅｔＩｎのフローエントリである。「Ｐｒｉｏｒｉｔｙ」が「１０」のフローエントリは、非保証型ＰａｃｋｅｔＩｎのフローエントリである。フローエントリのＭａｃｔｈの項目の値は、「条件」の一例である。フローエントリのＡｃｔｉｏｎの項目の値は、「処理内容」の一例である。
【００７４】
図７は、第１実施形態に係るＭａｘ＿ｌｅｎのパラメータの使用方法の一例を示す図である。「Ｍａｘ＿ｌｅｎ」で指定可能なパラメータのサイズは、１６ビットである。第１実施形態では、１５〜１２ビットの４ビット分はＰａｃｋｅｔＩｎ保証オペレーションコード、１１〜６ビットの６ビット分はＲｅａｃｔｉｖｅ動作ガードタイマ、５〜０ビットの６ビット分はＰａｃｋｅｔＩｎリフレッシュタイム、の指定に用いられる。
【００７５】
ＰａｃｋｅｔＩｎ保証オペレーションコードは、ＰａｃｋｅｔＩｎが保証型ＰａｃｋｅｔＩｎであることを示すコードである。保証型ＰａｃｋｅｔＩｎの場合には、１５ビットは１、１４ビットは０に設定される。ＰａｃｋｅｔＩｎ保証オペレーションコードが０ｘ９（０ｂ１００１）である場合には、所定時間内で最古のフレームについてのＰａｃｋｅｔＩｎが送信されることが示される。ＰａｃｋｅｔＩｎ保証オペレーションコードが０ｘＡ（０ｂ１０１０）である場合には、最新のフレームについてのＰａｃｋｅｔＩｎが送信されることが示される。ＰａｃｋｅｔＩｎ保証オペレーションコードの、０ｘＢ（０ｂ１０１１）、又は、０ｘ８（０ｂ１０００）は、将来の拡張利用のために予約されている。ＰａｃｋｅｔＩｎ保証オペレーションコードは、「ＰａｃｋｅｔＩｎメッセージが前記第２の設定要求メッセージであることを示す値」の一例である。
【００７６】
Ｍａｘ＿ｌｅｎの最上位ビットである１５ビットが１の場合、Ｍａｘ＿ｌｅｎの１６ビット分が示すフレーム長は、３２０００バイト以上となる。ＩＰパケットの最大長は１５００バイトである。ジャンボフレームの場合でも、フレーム長は、１００００バイト未満である。したがって、従来は、Ｍａｘ＿ｌｅｎの最上位ビットである１５ビットを１に設定して用いることはない。既存のスイッチにおいて、最上位の１５ビットが１に設定されたＭａｘ＿ｌｅｎを含むフローエントリが設定された場合には、該スイッチはフレーム全体（最大長）をＰａｃｋｅｔＩｎに含めて送信する。
【００７７】
また、Ｍａｘ＿ｌｅｎの１４ビットを０に設定することで、ＯｐｅｎＦｌｏｗで規定されるＯＦＰＣＭＬ＿ＮＯ＿ＢＵＦＦＥＲを示す予約番号０ｘＦＦＦＦとの重複を回避することができる。
【００７８】
Ｍａｘ＿ｌｅｎの１５ビットが１、１４ビットが０である場合には、Ｍａｘ＿ｌｅｎは、０ｘ８０００〜０ｘＢＦＦＦの値をとる。Ｍａｘ＿ｌｅｎの１５ビットが１、１４ビットが０である場合の値は、ＯｐｅｎＦｌｏｗで規定されるＯＦＰＣＭＬ＿ＭＡＸの予約番号０ｘＦＦＥ５よりも小さい値であり、重複しない。
【００７９】
したがって、既存のスイッチに保証型ＰａｃｋｅｔＩｎのフローエントリが設定された場合でも、既存のスイッチは従来通りの処理を行うので、既存のスイッチの処理に影響を及ぼさない。
【００８０】
Ｒｅａｃｔｉｖｅ動作ガードタイマに設定される値は、コントローラ２に送信された保証型ＰａｃｋｅｔＩｎに対応するフレーム本体が、保証型ＰａｃｋｅｔＩｎの送信完了後フレームバッファ１４３に保持される最大時間長を示す。Ｒｅａｃｔｉｖｅ動作ガードタイマの単位は、例えば、秒である。
【００８１】
Ｒｅａｃｔｉｖｅ動作ガードタイマは、保証型ＰａｃｋｅｔＩｎの送信を契機に開始される。Ｒｅａｃｔｉｖｅ動作ガードタイマは、送信されたＰａｃｋｅｔＩｎに対応するＰａｃｋｅｔＯｕｔが受信されると解除される。Ｒｅａｃｔｉｖｅ動作ガードタイマが満了すると、フレームバッファ１４３内の該当フローのフレームは、ＰａｃｋｅｔＩｎ制御部１５によって廃棄される。すなわち、Ｒｅａｃｔｉｖｅ動作ガードタイマに設定される値は、該当のフローについて、ＰａｃｋｅｔＩｎが保証される最大時間長を示す。
【００８２】
Ｒｅａｃｔｉｖｅ動作ガードタイマの設定値が０である場合には、該当のフローのフレームはフレームバッファ１４３に格納されないことが示される。
【００８３】
また、Ｒｅａｃｔｉｖｅ動作ガードタイマの設定値が０である場合には、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは、最新のものが格納されるように、リフレッシュタイマも０に設定される。Ｒｅａｃｔｉｖｅ動作ガードタイマの設定値が０である場合には、フレームがフレームバッファ１４３に格納されないので、フレーム本体が保証型ＰａｃｋｅｔＩｎに含められる。フレーム本体が保証型ＰａｃｋｅｔＩｎに含められる場合には、保証型ＰａｃｋｅｔＩｎを確実に送信待ちキュー１６に格納することが求められる。また、保証型ＰａｃｋｅｔＩｎは１フローにつき１つ以上は送信されないためからである。
【００８４】
Ｒｅａｃｔｉｖｅ動作ガードタイマの設定値０は、例えば、コントローラ２からのＰａｃｋｅｔＯｕｔの受信は不要であるが、ＡＲＰやＬＬＤＰ等のコントローラ２に確実にＰａｃｋｅｔＩｎを送信させたいプロトコルのフローに対して設定すると有効である。ＰａｃｋｅｔＩｎとＰａｃｋｅｔＯｕｔとは、例えば、フレーム本体が格納されるフレームバッファ１４３を示すバッファＩＤによって対応付けられる。以降、Ｒｅａｃｔｉｖｅ動作ガードタイマを、単に、動作ガードタイマと称する場合もある。Ｒｅａｃｔｉｖｅ動作ガードタイマの設定値は、「第２の時間長」の一例である。
【００８５】
ＰａｃｋｅｔＩｎリフレッシュタイムは、送信待ちキュー１６内における保証型ＰａｃｋｅｔＩｎの更新判定の閾値となる時間長である。ＰａｃｋｅｔＩｎリフレッシュタイムの単位は、例えば、０．１秒である。
【００８６】
リフレッシュタイムが０の場合には、送信待ちキュー１６内における保証型ＰａｃｋｅｔＩｎは、該当フローの最新の保証型ＰａｃｋｅｔＩｎが入力されると、該当フローの最
新のＰａｃｋｅｔＩｎに書き換えられる。したがって、ＰａｃｋｅｔＩｎ保証コードが０ｘＡの場合には、リフレッシュタイムは、０に設定される。なお、動作ガードタイマの設定値が０である場合には、リフレッシュタイムは０に設定される。リフレッシュタイムは、「第１の時間長」の一例である。
【００８７】
図６に戻って、Ｐｒｉｏｒｉｔｙが２０のフローエントリは、Ｍａｘ＿ｌｅｎ＝０ｘ９０８１である。ＰａｃｋｅｔＩｎ保証オペレーションコードが０ｘ９（０ｂ１００１）であるので、所定時間内で最古のフレームについての保証型ＰａｃｋｅｔＩｎが送信されることが示される。また、動作ガードタイマの値は、２秒（０ｂ００００１０）である。リフレッシュタイムの値は、０．１秒（０ｂ０００００１）である。
【００８８】
図６のＰｒｉｏｒｉｔｙが２０のフローエントリのようなＡｃｔｉｏｎは、例えば、ＴＣＰ、ＵＤＰ等のユーザデータに設定されると、より有効である。ＴＣＰ、ＵＤＰ等のユーザデータを転送するフローに含まれるフレームは数が多く連続している場合が多い。そのため、ＴＣＰ、ＵＤＰ等のユーザデータを転送するフローを保証型ＰａｃｋｅｔＩｎの対象とすることによって、コントローラ２に送信されるＰａｃｋｅｔＩｎを大幅に減らすことができる。
【００８９】
一方で、コントローラ２に送信される保証型ＰａｃｋｅｔＩｎ以外の同一フローの保証型ＰａｃｋｅｔＩｎは廃棄される。ＰａｃｋｅｔＩｎの廃棄に伴い、対応するフレーム本体も廃棄され、パケットロスとなる。しかしながら、ＴＣＰやＵＤＰのユーザデータでは、上位のプロトコルに再送機能が備えられていることが多いため、パケットロスとなった場合でも、上位のプロトコルの機能によって、影響が小さく抑えられるからである。
【００９０】
図６のＰｒｉｏｒｉｔｙが３０のフローエントリは、Ｍａｘ＿ｌｅｎ＝０ｘＡ０００である。ＰａｃｋｅｔＩｎ保証オペレーションコードが０ｘＡ（０ｂ１０１１）であるので、最新のフレームについての保証型ＰａｃｋｅｔＩｎが送信されることが示される。また、動作ガードタイマの値は、０秒であるので、フレーム本体はフレームバッファ１４３には格納されないことが示される。
【００９１】
図６のＰｒｉｏｒｉｔｙが３０のフローエントリのようなＡｃｔｉｏｎは、例えば、ＬＬＤＰやＡＲＰ等のフローに対して設定されると、より有効である。ＬＬＤＰやＡＲＰ等は、確実にＰａｃｋｅｔＩｎをコントローラ２に送信されることが求められ、且つ、ＰａｃｋｅｔＩｎに対応するＰａｃｋｅｔＯｕｔが送信されなくてもよい、という使い方ができるからである。動作ガードタイマが０であることから、ＰａｃｋｅｔＩｎに対応するフレームをフレームバッファ１４３に保持しないため、余計なリソースを消費しなくてよいからである。
【００９２】
図６のＰｒｉｏｒｉｔｙが１０のフローエントリは、Ｍａｘ＿ｌｅｎ＝０ｄ１５１８である。ＰａｃｋｅｔＩｎ保証オペレーションコードが０ｘ０（０ｂ００００）であるので、図６のＰｒｉｏｒｉｔｙが１０のフローエントリに合致するフローについては、通常のリアクティブ動作が行われ、非保証型ＰａｃｋｅｔＩｎが送信される。図６のＰｒｉｏｒｉｔｙが１０のフローエントリのようなＡｃｔｉｏｎは、例えば、輻輳時に廃棄されてもかまわないが、ベストエフォートでＰａｃｋｅｔＩｎを全てコントローラ２に送信されることが望まれるフローに対して設定されると、より有効である。
【００９３】
したがって、第１実施形態において、Ｍａｘ＿ｌｅｎのパラメータは、フレーム加工制御部１４２から、ＰａｃｋｅｔＩｎとともにＰａｃｋｅｔＩｎ制御部１５に出力されるＰａｃｋｅｔＩｎに関するパラメータの一つである。
【００９４】
図８は、保証型ＰａｃｋｅｔＩｎに付加される輻輳情報の一例を示す図である。第１実施形態では、スイッチ１は、スイッチ１内のフローの輻輳状態をコントローラ２に通知するために、保証型ＰａｃｋｅｔＩｎに輻輳情報を付与する。
【００９５】
輻輳情報は、第１実施形態では、ＰａｃｋｅｔＩｎのフィールドのうち、マッチ情報内のＭｅｔａｄａｔａを用いて送信される。ＰａｃｋｅｔＩｎのマッチ情報のフィールドは、フローが合致したフローエントリのＭａｔｃｈの項目の値が格納されるフィールドである。マッチ情報内のＭｅｔａｄａｔａのサイズは、６４ビットである。
【００９６】
保証型ＰａｃｋｅｔＩｎ内のＭｅｔａｄａｔａには、例えば、ハッシュ値、廃棄カウンタ、ＰａｃｋｅｔＩｎ動作開始時間からの経過時間、ＰａｃｋｅｔＩｎのスイッチ内の滞留時間が含まれる。それぞれ１６ビットが割り当てられる。
【００９７】
ハッシュ値のフィールドには、ＰａｃｋｅｔＩｎが保証型であることを示す所定の値が格納される。コントローラ２は、ハッシュ値のフィールドの値に基づいて、ＰａｃｋｅｔＩｎが保証型であることを判定できる。ハッシュ値のフィールドに格納される値は、例えば、フレームの内容とフローエントリのＣｏｏｋｉｅの値（図６には図示されず）に基づいて所定のハッシュ関数によって算出される値である。フローエントリのＣｏｏｋｉｅの値は、コントローラ２によって指定される値である。ただし、ハッシュ値のフィールドに格納される値は、これに限られず、固定値であってもよい。
【００９８】
廃棄カウンタのフィールドには、該当する保証型ＰａｃｋｅｔＩｎのフローにおいて、廃棄されたＰａｃｋｅｔＩｎの個数が格納される。コントローラ２に送信される保証型ＰａｃｋｅｔＩｎは通常一つであるため、廃棄カウンタの値によって、コントローラ２に該当のフローのＰａｃｋｅｔＩｎが複数廃棄されていることを通知することができる。廃棄カウンタの値が０ｘＦＦＦＦである場合には、オーバーフローしていることが示される。廃棄カウンタに格納される値は、後述のＰａｃｋｅｔＩｎ制御テーブル１９のエントリから取得される。
【００９９】
ＰａｃｋｅｔＩｎ動作開始からの経過時間は、該当フローのＰａｃｋｅｔＩｎに対する処理が開始されてから、該当のフローのＰａｃｋｅｔＩｎが送信されるまでの経過時間である。第１実施形態では、ＰａｃｋｅｔＩｎに対する処理が開始を、該当フローの保証型ＰａｃｋｅｔＩｎが最初に送信待ちキュー１６に格納されることとする。したがって、ＰａｃｋｅｔＩｎ動作開始からの経過時間は、該当フローのＰａｃｋｅｔＩｎの送信待ちキュー１６における滞留時間を示す。ＰａｃｋｅｔＩｎ動作開始からの経過時間が長い場合には、スイッチ１が輻輳していることをコントローラ２が判定することができる。
【０１００】
ＰａｃｋｅｔＩｎのスイッチ内の滞留時間は、該当のＰａｃｋｅｔＩｎのスイッチ１内の滞留時間を示す。送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎはリフレッシュタイムが経過すると書き換えられる。したがって、ＰａｃｋｅｔＩｎ動作開始からの経過時間は、該当のフロー全体についての情報であるが、ＰａｃｋｅｔＩｎスイッチ内の滞留時間は、該当のＰａｃｋｅｔＩｎについての情報である。スイッチ１に処理輻輳が発生している場合には、送信待ちキュー１６内の滞留時間が長くなり、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎの書き換えが発生する。そのため、ＰａｃｋｅｔＩｎのスイッチ内の滞留時間は、ＰａｃｋｅｔＩｎ動作開始からの経過時間と異なる時間となる。
【０１０１】
ＰａｃｋｅｔＩｎに付加される輻輳情報は、送信時、すなわち、送信待ちキュー１６から読み出される時の情報であるので、送信レート制御部１７によって保証型ＰａｃｋｅｔＩｎに付加される。なお、ＰａｃｋｅｔＩｎに付加される情報は、図８に示されるものに限定されない。図８に示されるＰａｃｋｅｔＩｎに付加される輻輳情報は、「輻輳状態に
関する情報」の一例である。
【０１０２】
ＰａｃｋｅｔＩｎの廃棄数、ＰａｃｋｅｔＩｎ動作開始からの経過時間、ＰａｃｋｅｔＩｎのスイッチ内の滞留時間等がコントローラ２に通知されることによって、コントローラ２は、スイッチ１における輻輳状態等を分析することができる。分析情報によって、コントローラ２は、スイッチ１に設定されているフローテーブルの欠点等を知ることができる。分析情報から取得されるスイッチ１に設定されているフローテーブルの欠点には、例えば、ＰａｃｋｅｔＩｎの多発がある。コントローラ２は、フローテーブルの欠点を知ることによって、該欠点を修正したフローエントリを含むＦｌｏｗＭｏｄをスイッチ１に送信してもよい。
【０１０３】
図９は、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリに含まれる項目の一例を示す図である。ＰａｃｋｅｔＩｎ制御テーブル１９は、処理保留中のフレームに対応する保証型ＰａｃｋｅｔＩｎに関する情報を保持するテーブルである。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリは、保証型ＰａｃｋｅｔＩｎのフロー１つにつき１つ生成される。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリは、ＰａｃｋｅｔＩｎ制御部１５によって、生成、更新、削除される。
【０１０４】
ＰａｃｋｅｔＩｎ制御テーブル１９のエントリには、例えば、フロー識別情報、バッファＩＤ、ＰａｃｋｅｔＩｎ動作開始タイムスタンプ、ＰａｃｋｅｔＩｎタイムスタンプ、Ｒｅａｃｔｉｖｅ動作ガードタイマ、送信待ちキュー内のＰａｃｋｅｔＩｎへのポインタ、廃棄カウンタが含まれる。
【０１０５】
フロー識別情報は、宛先ＩＰアドレス、送信元ＩＰアドレス、宛先ＭＡＣアドレス、送信元ＭＡＣアドレス、宛先ポート番号、送信元ポート番号、プロトコルＩＤ、入力ポート等の組合せである。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリのフロー識別情報には、ＰａｃｋｅｔＩｎに関するパラメータの一つとしてＰａｃｋｅｔＩｎ制御部１５に通知されるフロー識別情報が格納される。ＰａｃｋｅｔＩｎ制御部１５に通知されるフロー識別情報は、フレーム分析部１３によって取得されたものである。
【０１０６】
バッファＩＤは、該当するフローのフレームが格納されているフレームバッファ１４３のバッファＩＤである。バッファＩＤの項目には、ＰａｃｋｅｔＩｎ制御部１５に入力されるＰａｃｋｅｔＩｎのヘッダに含まれているものが取得される。
【０１０７】
ＰａｃｋｅｔＩｎ動作開始タイムスタンプは、該当のフローのＰａｃｋｅｔＩｎの動作が開示された時刻である。ＰａｃｋｅｔＩｎ動作開始タイムスタンプは、第１実施形態では、該当のフローの保証型ＰａｃｋｅｔＩｎが送信待ちキュー１６に最初に格納された際に取得される時刻である。
【０１０８】
ＰａｃｋｅｔＩｎタイムスタンプは、該当するフローのＰａｃｋｅｔＩｎが送信待ちキュー１６に格納された時刻である。ＰａｃｋｅｔＩｎタイムスタンプは、送信待ちキュー１６内の該当フローの保証型ＰａｃｋｅｔＩｎが書き換えられると、更新される。
【０１０９】
Ｒｅａｃｔｉｖｅ動作ガードタイマ及びリフレッシュタイムの項目には、それぞれ、フローエントリのＭａｘ＿ｌｅｎにおいて指定された値が格納される。動作ガードタイマが満了すると、送信待ちキュー１６内のＰａｃｋｅｔＩｎ及びＰａｃｋｅｔＩｎ制御テーブル１９の該当のエントリが削除される。ＰａｃｋｅｔＩｎタイムスタンプの時刻からの経過時間がリフレッシュタイムの値を超えると、送信待ちキュー１６内の該当フローのＰａｃｋｅｔＩｎが新たなものに書き換えらえる。
【０１１０】
送信待ちＰａｃｋｅｔＩｎメッセージへのポインタの項目には、該当のフローのＰａｃｋｅｔＩｎの送信待ちキュー１６内の格納位置を示す情報が格納される。ＰａｃｋｅｔＩｎの送信待ちキュー１６内の格納位置を示す情報は、例えば、メモリアドレスである。
【０１１１】
廃棄カウンタには、該当するフローの廃棄されたＰａｃｋｅｔＩｎのメッセージの個数が格納される。廃棄カウンタは、該当するフローのＰａｃｋｅｔＩｎが廃棄される度に１加算されて更新される。
【０１１２】
Ｍａｘ＿ｌｅｎにおいて動作ガードタイマが０に設定されている場合には、フレームバッファ１４３にフレームが格納されない。また、ＰａｃｋｅｔＯｕｔには、バッファＩＤは含まれているものの、フレームがフレームバッファ１４３に格納されない場合には、ＰａｃｋｅｔＯｕｔには、バッファＩＤ＝ＮＯ＿ＢＵＦＦＥＲが含まれて送信される。また、ＰａｃｋｅｔＯｕｔには、フロー識別情報等のフローを識別する情報は含まれていない。そのため、ＰａｃｋｅｔＯｕｔの受信によってＰａｃｋｅｔＩｎ制御テーブル１９のエントリを削除することができない。したがって、第１実施形態では、動作ガードタイマが０に設定されている場合には、該当フローのＰａｃｋｅｔＩｎ制御テーブル１９にエントリは作成されない。
【０１１３】
ＰａｃｋｅｔＩｎ制御テーブル１９は、フロー識別情報、又は、バッファＩＤをキーとして検索が行われる。ＰａｃｋｅｔＩｎ制御テーブル１９は、検索処理の高速化のため、フローエントリの項目としてハッシュ値を有してもよい。ハッシュ値は、フロー識別情報とバッファＩＤとから算出される。なお、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリの項目は、図９に示されるものに限定されない。
【０１１４】
図１０は、送信待ちキュー１６の送信待ちエントリの項目の一例を示す図である。送信待ちキュー１６の送信待ちエントリには、ＰａｃｋｅｔＩｎメッセージ、保証型ＰａｃｋｅｔＩｎフラグ、フロー識別情報、ＰａｃｋｅｔＩｎ制御テーブル１９へのポインタの項目が含まれる。
【０１１５】
ＰａｃｋｅｔＩｎメッセージの項目には、ＰａｃｋｅｔＩｎメッセージ本体が格納される。保証型ＰａｃｋｅｔＩｎフラグの項目には、該当のＰａｃｋｅｔＩｎが保証型である非保証型であるかを示す値が格納される。例えば、保証型ＰａｃｋｅｔＩｎフラグがＴｒｕｅである場合には、該当のＰａｃｋｅｔＩｎは保証型であることが示される。保証型ＰａｃｋｅｔＩｎフラグがＦａｌｓｅである場合には、該当のＰａｃｋｅｔＩｎが非保証型であることが示される。
【０１１６】
フロー識別情報は、該当ＰａｃｋｅｔＩｎに関するパラメータの一つとして、該当ＰａｃｋｅｔＩｎとともにＰａｃｋｅｔＩｎ制御部１５に入力されたものが格納される。
【０１１７】
ＰａｃｋｅｔＩｎ制御テーブルへのポインタの項目には、該当するＰａｃｋｅｔＩｎのフローに対応するＰａｃｋｅｔＩｎ制御テーブル１９のエントリの格納位置を示す情報が格納される。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリの格納位置を示す情報は、例えば、メモリアドレスである。
【０１１８】
送信待ちエントリは、送信待ちキュー１６にＰａｃｋｅｔＩｎが格納される場合に、ＰａｃｋｅｔＩｎ制御部１５によって生成される。また、送信待ちエントリは、送信待ちキュー１６から該当のＰａｃｋｅｔＩｎが読み出された場合、または、削除された場合に、送信レート制御部１７によって削除される。なお、送信待ちキュー１６の送信待ちエントリの項目は、図１０に示されるものに限定されない。
【０１１９】
図１１は、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリと送信待ちキュー１６の送信待ちエントリとの相互参照の一例を示す図である。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリのポインタを参照することで、該当するＰａｃｋｅｔＩｎの送信待ちキュー１６内の格納位置を取得することができる。送信待ちキュー１６の送信待ちエントリのポインタによって、該当ＰａｃｋｅｔＩｎのフローに対応するＰａｃｋｅｔＩｎ制御テーブル１９のエントリを取得することができる。このようにして、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリと送信待ちキュー１６の送信待ちエントリとは、相互に参照可能となっている。
【０１２０】
＜処理の流れ＞
図１２Ａ、図１２Ｂ、及び、図１２Ｃは、ＰａｃｋｅｔＩｎ制御部１５の、ＰａｃｋｅｔＩｎ入力時の処理のフローチャートの一例である。図１２Ａに示される処理は、フレーム処理部１４からＰａｃｋｅｔＩｎが入力されると開始される。図１２Ａ〜図１２Ｃでは、処理主体をＰａｃｋｅｔＩｎ制御部１５として説明されるが、実際の処理主体は、保証型ＰａｃｋｅｔＩｎ実行プログラムを実行するＣＰＵ  １０１である。
【０１２１】
ＯＰ１では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎとともに入力されるＭａｘ＿ｌｅｎの上位４ビットが０ｘ９又は０ｘＡであるか否かを判定する。すなわち、ＯＰ１では、入力されたＰａｃｋｅｔＩｎが保証型であるか非保証型であるかが判定される。Ｍａｘ＿ｌｅｎの上位４ビットが０ｘ９又は０ｘＡである場合、すなわち、入力されたＰａｃｋｅｔＩｎが保証型である場合には（ＯＰ１：ＹＥＳ）、処理がＯＰ３に進む。Ｍａｘ＿ｌｅｎの上位４ビットが０ｘ９又は０ｘＡでない場合、すなわち、入力されたＰａｃｋｅｔＩｎが非保証型である場合には（ＯＰ１：ＮＯ）、処理がＯＰ２に進む。
【０１２２】
ＯＰ２では、入力されたＰａｃｋｅｔＩｎが非保証型であるので、通常のＰａｃｋｅｔＩｎ処理が行われる。具体的には、ＰａｃｋｅｔＩｎ制御部１５は、入力された非保証型ＰａｃｋｅｔＩｎを送信待ちキュー１６に格納する。このとき、保証型ＰａｃｋｅｔＩｎではないので、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリの、作成、更新等は行われない。その後、図１２Ａに示される処理は終了する。
【０１２３】
ＯＰ３以降の処理は、入力されたＰａｃｋｅｔＩｎが保証型である場合の処理である。ＯＰ３では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎの動作ガードタイマの設定値が０であるか否かを判定する。動作ガードタイマの設定値は、ＰａｃｋｅｔＩｎとともに入力されるＭａｘ＿ｌｅｎから取得される。入力された保証型ＰａｃｋｅｔＩｎの動作ガードタイマの設定値が０である場合には（ＯＰ３：ＹＥＳ）、処理が図１２ＣのＯＰ１５に進む。入力された保証型ＰａｃｋｅｔＩｎの動作ガードタイマの設定値が０でない場合には（ＯＰ３：ＮＯ）、処理がＯＰ４に進む。
【０１２４】
ＯＰ４では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎのフロー識別情報をキーとして、ＰａｃｋｅｔＩｎ制御テーブル１９を検索する。保証型ＰａｃｋｅｔＩｎのフロー識別情報は、ＰａｃｋｅｔＩｎに関するパラメータの一つとしてフレーム処理部１４からＰａｃｋｅｔＩｎ制御部１５に入力される。
【０１２５】
ＯＰ５では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎに対応するエントリが既にＰａｃｋｅｔＩｎ制御テーブル１９に存在するか否かを判定する。入力された保証型ＰａｃｋｅｔＩｎに対応するエントリが既にＰａｃｋｅｔＩｎ制御テーブル１９に存在する場合には（ＯＰ５：ＹＥＳ）、処理が図１２ＢのＯＰ１１に進む。入力された保証型ＰａｃｋｅｔＩｎに対応するエントリがＰａｃｋｅｔＩｎ制御テーブル１９に存在しない場合には（ＯＰ５：ＮＯ）、処理がＯＰ６に進む。
【０１２６】
ＯＰ６では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリ数が最大数に達しているか否かを判定する。ＰａｃｋｅｔＩｎ制御テーブル１９の最大エントリ数は、ネットワークシステム１００の管理者によって予め設定されている。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリ数が最大数に達している場合には（ＯＰ６：ＹＥＳ）、処理がＯＰ２に進み、通常のＰａｃｋｅｔＩｎの処理が行われる。ＰａｃｋｅｔＩｎ制御テーブル１９のエントリ数が最大数に達していない場合には（ＯＰ６：ＮＯ）、処理がＯＰ７に進む。
【０１２７】
ＯＰ７では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９に新たなエントリを作成する。ＯＰ７では、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリの、フロー識別情報、バッファＩＤ、Ｒｅａｃｔｉｖｅ動作ガードタイマ、リフレッシュタイムの項目に値が格納される。
【０１２８】
ＯＰ８では、ＰａｃｋｅｔＩｎ制御部１５は、現在時刻をＰａｃｋｅｔＩｎ動作開始タイムスタンプとして取得し、ＰａｃｋｅｔＩｎ制御テーブル１９の該当エントリに格納する。
【０１２９】
ＯＰ９では、ＰａｃｋｅｔＩｎ制御部１５は、現在時刻をＰａｃｋｅｔＩｎタイムスタンプとして取得し、ＰａｃｋｅｔＩｎ制御テーブル１９の該当エントリに格納する。リフレッシュタイムが０に設定されている場合には、ＯＰ９の処理は行われなくてもよい。
【０１３０】
ＯＰ１０では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを送信待ちキュー１６に格納する。ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９の該当エントリの送信待ちＰａｃｋｅｔＩｎメッセージへのポインタの項目に、送信待ちキュー１６内の該当ＰａｃｋｅｔＩｎの格納位置情報を格納する。その後、図１２Ａに示される処理が終了する。
【０１３１】
図１２ＢのＯＰ１１からＯＰ１４の処理は、入力された保証型ＰａｃｋｅｔＩｎのフローのエントリが、既にＰａｃｋｅｔＩｎ制御テーブル１９に存在する場合の処理である。
【０１３２】
ＯＰ１１では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリを参照し、動作ガードタイマが開始されているか否かを判定する。動作ガードタイマが開始されていることは、該当のフローの保証型ＰａｃｋｅｔＩｎがコントローラ２に送信済みであり、コントローラ２からのＰａｃｋｅｔＯｕｔの受信待機中であることが示される。
【０１３３】
入力された保証型ＰａｃｋｅｔＩｎのフローの動作ガードタイマが開始されている場合には（ＯＰ１１：ＹＥＳ）、処理がＯＰ１４に進み、ＯＰ１４では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを廃棄する。入力された保証型ＰａｃｋｅｔＩｎのフローの動作ガードタイマが開始されていない場合には（ＯＰ１１：ＮＯ）、処理がＯＰ１２に進む。
【０１３４】
ＯＰ１２では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎタイムスタンプからの経過時間がリフレッシュタイムより長いか否かを判定する。この判定は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリを参照して行われる。ＰａｃｋｅｔＩｎタイムスタンプからの経過時間がリフレッシュタイム以下である場合には（ＯＰ１２：ＮＯ）、処理がＯＰ１４に進み、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを廃棄する。ＰａｃｋｅｔＩｎタイムスタンプからの経過時間がリフレッシュタイムより長い場合には（ＯＰ１２：ＹＥＳ）、処理がＯＰ１３に進む。リフレッシュタイムが０である場合には、処理がＯＰ１３に進む
。
【０１３５】
ＯＰ１３では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎと同じフローの、送信待ちキュー１６内のＰａｃｋｅｔＩｎを、入力され保証型ＰａｃｋｅｔＩｎで書き換える。送信待ちキュー１６内の既存の同一フローの保証型ＰａｃｋｅｔＩｎの格納位置は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリの送信待ちＰａｃｋｅｔＩｎへのポインタによって示される。このとき、書き換えによって廃棄された送信待ちキュー１６内の既存の保証型ＰａｃｋｅｔＩｎに対応するフレーム本体は、フレームバッファ１４３から廃棄される。また、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリのバッファＩＤを入力された保証型ＰａｃｋｅｔＩｎに含まれるバッファＩＤに更新する。なお、ＰａｃｋｅｔＩｎに対応するフレームが格納されているフレームバッファ１４３のバッファＩＤは、ＯｐｎｅＦｌｏｗの仕様によって、ＰａｃｋｅｔＩｎに含められている。
【０１３６】
また、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリのＰａｃｋｅｔＩｎタイムスタンプを現在時刻に更新する。また、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリの廃棄カウンタの値を１増加させた値に更新する。その後、図１２Ｂに示される処理が終了する。
【０１３７】
ＯＰ１４では、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを廃棄する。このとき、入力された保証型ＰａｃｋｅｔＩｎに対応するフレーム本体は、フレームバッファ１４３から廃棄される。また、ＰａｃｋｅｔＩｎ制御部１５は、廃棄されたＰａｃｋｅｔＩｎのフローに該当するＰａｃｋｅｔＩｎ制御テーブル１９のエントリの廃棄カウンタの値を１増加させた値に更新する。その後、図１２Ｂに示される処理が終了する。
【０１３８】
図１２ＣのＯＰ１５からＯＰ１８の処理は、入力された保証型ＰａｃｋｅｔＩｎの動作ガードタイマの設定値が０である場合の処理である。ＯＰ１５では、フレームバッファ１４３から保証型ＰａｃｋｅｔＩｎが削除される。第１実施形態では、フレーム加工制御部１４２によってＰａｃｋｅｔＩｎが生成された場合に、動作ガードタイマの設定値にかかわらず、フレームがフレームバッファ１４３に格納されるためである。ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎ内のバッファＩＤを格納するフィールドを、ＮＯ＿ＢＵＦＦＥＲに書き換える。
【０１３９】
ＯＰ１６では、ＰａｃｋｅｔＩｎ制御部１５は、送信待ちキュー１６内に、入力された保証型ＰａｃｋｅｔＩｎと同一フローのＰａｃｋｅｔＩｎがすでに格納されているか否かを判定する。この判定は、例えば、入力された保証型ＰａｃｋｅｔＩｎのフロー識別情報と一致するフロー識別情報を有する送信待ちエントリが存在するか否かを判定することによって行われる。
【０１４０】
送信待ちキュー１６内に、入力された保証型ＰａｃｋｅｔＩｎと同一フローのＰａｃｋｅｔＩｎがすでに格納されている場合には（ＯＰ１６：ＹＥＳ）、処理がＯＰ１７に進む。送信待ちキュー１６内に、入力された保証型ＰａｃｋｅｔＩｎと同一フローのＰａｃｋｅｔＩｎが格納されていない場合には（ＯＰ１６：ＮＯ）、処理がＯＰ１８に進む。
【０１４１】
ＯＰ１７では、送信待ちキュー１６内に、同一フローのＰａｃｋｅｔＩｎがすでにあるので、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎで、送信待ちキュー１６内の同一フロー、且つ、保証型、且つ、ｂｕｆｆｅｒ＿ｉｄがＮＯ＿ＢＵＦＦ
ＥＲであるエントリのＰａｃｋｅｔＩｎを書き換える。送信待ちキュー１６内の既存の同一フローの保証型ＰａｃｋｅｔＩｎに対応するフレームが格納されているフレームバッファ１４３のバッファＩＤは、廃棄されるＰａｃｋｅｔＩｎに含まれている。なお、動作ガードタイマの設定値が０である場合には、該当フローのＰａｃｋｅｔＩｎ制御テーブル１９のエントリは作成されないので、ＯＰ１７では、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリの更新は行われない。その後、図１２Ｃに示される処理が終了する。
【０１４２】
ＯＰ１８では、送信待ちキュー１６内に、同一フローのＰａｃｋｅｔＩｎが存在していないので、ＰａｃｋｅｔＩｎ制御部１５は、入力された保証型ＰａｃｋｅｔＩｎを送信待ちキュー１６に格納する。その後、図１２Ｃに示される処理が終了する。
【０１４３】
図１３は、送信レート制御部１７のＰａｃｋｅｔＩｎ送信の処理のフローチャートの一例である。図１３に示される処理は、送信レート制御部１７が送信待ちキュー１６からＰａｃｋｅｔＩｎを読み出す所定のレートで、繰り返し実行される。ＰａｃｋｅｔＩｎの送信制御レートは、通常コントローラ２から設定される。図１３では、処理主体を送信レート制御部１７として説明されるが、実際の処理主体は、保証型ＰａｃｋｅｔＩｎ実行プログラムを実行するＣＰＵ  １０１である。
【０１４４】
ＯＰ２１では、送信レート制御部１７は、現在の送信レートが送信可能レート以下であるか否かを判定する。送信可能レートは、コントローラから設定されており、送信レートの上限値である。例えば、トークンバケットにトークンが格納されている場合には、送信レートが送信可能レート以下であることが判定される。送信レートが送信可能レート以下である場合には（ＯＰ２１：ＹＥＳ）、処理がＯＰ２３に進む。送信レートが送信可能レートを超えている場合には（ＯＰ２１：ＮＯ）、処理がＯＰ２２に進む。
【０１４５】
ＯＰ２２では、送信レート制御部１７は、送信レートが送信可能レートを超えているので、送信待ちキュー１６内の非保証型ＰａｃｋｅｔＩｎを廃棄する。送信レート制御部１７は、非保証型ＰａｃｋｅｔＩｎを、予め決められている個数廃棄してもよいし、送信レートが送信可能レート未満になるまで廃棄してもよい。ＯＰ２２において、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは廃棄の対象にはならない。なお、送信待ちキュー１６から廃棄された非保証型ＰａｃｋｅｔＩｎに対応するフレーム本体は、フレームバッファ１４３から廃棄される。その後、図１３に示される処理が終了する。
【０１４６】
ＯＰ２３からＯＰ２６の処理は、送信レートが送信可能レート以下である場合の処理である。ＯＰ２３では、送信レート制御部１７は、送信待ちキュー１６から先頭のＰａｃｋｅｔＩｎを読み出し、読み出したＰａｃｋｅｔＩｎが保証型であるか否かを判定する。読み出されたＰａｃｋｅｔＩｎが保証型であるか否かは、該当ＰａｃｋｅｔＩｎの送信待ちエントリの保証型ＰａｃｋｅｔＩｎフラグによって判定される。
【０１４７】
読み出されたＰａｃｋｅｔＩｎが保証型である場合には（ＯＰ２３：ＹＥＳ）、処理がＯＰ２４に進む。読み出されたＰａｃｋｅｔＩｎが非保証型である場合には（ＯＰ２３：ＮＯ）、処理がＯＰ２６に進む。
【０１４８】
ＯＰ２４では、送信レート制御部１７は、送信待ちキュー１６から読み出した保証型ＰａｃｋｅｔＩｎを編集し、ＯｐｅｎＦｌｏｗプロトコル制御部１８に出力する。送信レート制御部１７による保証型ＰａｃｋｅｔＩｎの編集では、例えば、ＰａｃｋｅｔＩｎのＭｅｔａｄａｔａに図８に示される輻輳情報が付加される。
【０１４９】
ＯＰ２５では、送信レート制御部１７は、送信した保証型ＰａｃｋｅｔＩｎのフローの動作ガードタイマを開始させる。以降、該当フローのＰａｃｋｅｔＩｎがＰａｃｋｅｔＩ
ｎ制御部１５に入力された場合には、該ＰａｃｋｅｔＩｎは送信待ちキュー１６に格納されずに廃棄される。送信待ちキュー１６から読み出された保証型ＰａｃｋｅｔＩｎの動作ガードタイマの設定値が０である場合には、ＰａｃｋｅｔＩｎ制御テーブル１９にエントリが存在しないので、ＯＰ２４の編集と、ＯＰ２５の処理は実行されない。その後、図１３に示される処理が終了する。
【０１５０】
ＯＰ２６は、送信待ちキュー１６から読み出されたＰａｃｋｅｔＩｎが非保証型である場合の処理である。ＯＰ２６では、送信レート制御部１７は、読み出した非保証型ＰａｃｋｅｔＩｎをＯｐｅｎＦｌｏｗプロトコル制御部１８に出力する。その後、図１３に示される処理が終了する。
【０１５１】
図１４は、ＰａｃｋｅｔＩｎ制御部１５のＰａｃｋｅｔＯｕｔ入力時の処理のフローチャートの一例である。図１４に示される処理は、ＯｐｅｎＦｌｏｗプロトコル制御部１８から、ＰａｃｋｅｔＯｕｔが入力された場合に開始される。図１４では、処理主体をＰａｃｋｅｔＩｎ制御部１５として説明されるが、実際の処理主体は、保証型ＰａｃｋｅｔＩｎ実行プログラムを実行するＣＰＵ  １０１である。
【０１５２】
ＯＰ３１では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＯｕｔ内にバッファＩＤの指定があるか否かを判定する。ＰａｃｋｅｔＯｕｔ内にバッファＩＤの指定がない場合には（ＯＰ３１：ＮＯ）、図１４に示される処理が終了する。ＰａｃｋｅｔＯｕｔ内にバッファＩＤの指定がある場合には（ＯＰ３１：ＹＥＳ）、処理がＯＰ３２に進む。
【０１５３】
ＯＰ３２では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤをキーとして、ＰａｃｋｅｔＩｎ制御テーブル１９を検索する。
【０１５４】
ＯＰ３３では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９に、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤに合致するエントリがあるか否かを判定する。ＰａｃｋｅｔＩｎ制御テーブル１９に、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤに合致するエントリがある場合には（ＯＰ３３：ＹＥＳ）、処理がＯＰ３４に進む。
【０１５５】
ＰａｃｋｅｔＩｎ制御テーブル１９に、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤに合致するエントリが存在しない場合には（ＯＰ３３：ＮＯ）、ＰａｃｋｅｔＯｕｔに対応するＰａｃｋｅｔＩｎが非保証型であることが示され、図１４に示される処理が終了する。
【０１５６】
ＯＰ３４では、ＰａｃｋｅｔＩｎ制御部１５は、ＯＰ３３において検出されたＰａｃｋｅｔＩｎ制御テーブル１９の該当のエントリの動作ガードタイマを解除する。
【０１５７】
ＯＰ３５では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤのフレームバッファ１４３からフレームを読み出し、フレーム加工制御部１４２に転送する。フレーム加工制御部は、ＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎを実行し、フローテーブルにしたがって、保留していたフレームを処理する。
【０１５８】
ＯＰ３６では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９の該当のエントリを削除する。その後、図１４に示される処理が終了する。
【０１５９】
ＰａｃｋｅｔＯｕｔ内にバッファＩＤの指定がない場合には（ＯＰ３１：ＮＯ）、フレーム加工制御部１４２によって、通常のＯｐｅｎＦｌｏｗ処理と同じように、ＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎが実行される。一例として、ＰａｃｋｅｔＯｕｔに含
まれるフレームをスイッチ１から出力させるものがある。
【０１６０】
例えば、ＰａｃｋｅｔＩｎ制御テーブル１９に、ＰａｃｋｅｔＯｕｔによって指定されたバッファＩＤに合致するエントリが存在しない場合には（ＯＰ３３：ＮＯ）、ＰａｃｋｅｔＯｕｔに対応するＰａｃｋｅｔＩｎが非保証型であることが示される。この場合には通常のＯｐｅｎＦｌｏｗのＰａｃｋｅｔＯｕｔ処理として、フレーム加工制御部１４２によって、ＰａｃｋｅｔＯｕｔによって指定されるバッファＩＤのフレームバッファ１４３からフレームが読み出されてＰａｃｋｅｔＯｕｔに指定されたＡｃｔｉｏｎが実行される。
【０１６１】
図１５は、ＰａｃｋｅｔＩｎ制御部１５の動作ガードタイマがタイムアウトした場合の処理のフローチャートの一例である。図１５に示される処理は、ＰａｃｋｅｔＩｎ制御テーブル１９に含まれるいずれかのエントリにおいて、動作ガードタイマのタイムアウトが発生した場合に開始される。
【０１６２】
ＯＰ４１では、ＰａｃｋｅｔＩｎ制御部１５は、動作ガードタイマがタイムアウトしたＰａｃｋｅｔＩｎ制御テーブル１９のエントリのバッファＩＤの項目の値に該当するフレームバッファ１４３に格納されているフレームを廃棄する。
【０１６３】
ＯＰ４２では、ＰａｃｋｅｔＩｎ制御部１５は、ＰａｃｋｅｔＩｎ制御テーブル１９の該当エントリを削除する。その後、図１５に示される処理が終了する。
【０１６４】
図１２Ａ〜図１５に示されるフローチャートは一例であって、各フローチャートの処理は、各図に示される処理に限定されず、適宜、処理の実行順の変更、処理の追加等が可能である。
【０１６５】
＜第１実施形態の作用効果＞
第１実施形態では、保証型ＰａｃｋｅｔＩｎは、同一フローにつき１つコントローラ２に送信される。また、保証型ＰａｃｋｅｔＩｎは、送信待ちキュー１６に格納されていても、送信レートの調整のための廃棄の対象から除外される。したがって、第１実施形態によれば、コントローラ２に送信されるＰａｃｋｅｔＩｎの数を抑えつつ、保証型ＰａｃｋｅｔＩｎは確実にスイッチ１から送信されることを保証することができる。これによって、コントローラ２とスイッチ１との処理輻輳を抑制することができる。
【０１６６】
また、コントローラ２に送信される保証型ＰａｃｋｅｔＩｎ以外の同一フローのＰａｃｋｅｔＩｎは廃棄され、コントローラ２に送信されない。これによって、コントローラ２へ入力されるＰａｃｋｅｔＩｎの数を少なく抑えることができ、コントローラ２の処理輻輳を抑制することができる。
【０１６７】
また、ＰａｃｋｅｔＩｎの送信レートが送信可能レートよりも大きい場合には、送信レートの調整のために、送信待ちキュー１６内の非保証型ＰａｃｋｅｔＩｎが廃棄される。送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは廃棄の対象ではない。これによって、保証型ＰａｃｋｅｔＩｎが送信待ちキュー１６に格納されると、確実にコントローラ２に送信されることを保証することができる。
【０１６８】
リフレッシュタイムを０に設定することで、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎは新たに到着した保証型ＰａｃｋｅｔＩｎに書き換えられる。これによって、最新のフレームについてのＰａｃｋｅｔＩｎをコントローラ２に送信することができる。
【０１６９】
また、リフレッシュタイムを所定の値に設定することで、送信待ちキュー１６内の保証
型ＰａｃｋｅｔＩｎはリフレッシュタイム経過後に新たに到着した保証型ＰａｃｋｅｔＩｎに書き換えられる。これによって、リフレッシュタイム内の最古のフレームについてのＰａｃｋｅｔＩｎをコントローラ２に送信することができる。すなわち、第１実施形態では、最新フレーム又は最古のフレームについてのＰａｃｋｅｔＩｎを送信することを選択することができる。
【０１７０】
コントローラ２に保証型ＰａｃｋｅｔＩｎが送信されると動作ガードタイマが開始され、それ以降に到着する同一フローのＰａｃｋｅｔＩｎは廃棄される。これによって、コントローラ２に送信されるＰａｃｋｅｔＩｎの数を抑制することができる。
【０１７１】
また、ＰａｃｋｅｔＯｕｔが受信されずに動作ガードタイマが満了すると、フレームバッファ１４３内の該当フローのフレームが廃棄され、ＰａｃｋｅｔＩｎ制御テーブル１９の該当のエントリも削除される。これによって、例えば、コントローラ２に送信された保証型ＰａｃｋｅｔＩｎに対するＰａｃｋｅｔＯｕｔが返信されない場合でも、フレームバッファ１４３から対応するフレーム本体を削除することができ、リソースを有効に使用することができる。
【０１７２】
また、動作ガードタイマが０に設定されている場合には、該当フローのフレームはフレームバッファ１４３に格納されず、ＰａｃｋｅｔＩｎは最新のものが送信待ちキュー１６に格納される。また、動作ガードタイマが０に設定されている場合には、ＰａｃｋｅｔＩｎ制御テーブル１９のエントリも作成されない。これによって、例えば、ＬＬＤＰのような、ＰａｃｋｅｔＯｕｔが返信されないプロトコルのフレームについての保証型ＰａｃｋｅｔＩｎが送信される場合に、余計なリソースを消費することなく、リソースを有効に使用することができる。
【０１７３】
また、第１実施形態では、フローエントリ内のＭａｘ＿ｌｅｎのパラメータによって、保証型ＰａｃｋｅｔＩｎ、非保証型ＰａｃｋｅｔＩｎを設定することができる。また、フローエントリ内のＭａｘ＿ｌｅｎのパラメータによって、動作ガードタイマ、リフレッシュタイムを設定することができる。これによって、既存のＯｐｅｎＦｌｏｗへの影響を小さく抑えつつ、第１実施形態の処理を実現することができる。
【０１７４】
また、保証型ＰａｃｋｅｔＩｎの場合には、Ｍａｘ＿ｌｅｎの上位２ビットは０ｂ１０に設定される。上位２ビットは０ｂ１０のＭａｘ＿ｌｅｎを含むフローエントリが保証型ＰａｃｋｅｔＩｎに対応していないスイッチに設定された場合でも、該スイッチは従来のＰａｃｋｅｔＩｎの処理を行い、該スイッチの動作を阻害することがない。したがって、ネットワークシステム１００では、保証型ＰａｃｋｅｔＩｎに対応するスイッチ１と、対応していない従来のスイッチとを混在させることが可能である。
【０１７５】
また、第１実施形態では、保証型ＰａｃｋｅｔＩｎのＭｅｔａｄａｔａに輻輳情報を含めることで、輻輳情報をコントローラ２に通知することができる。コントローラ２は、保証型ＰａｃｋｅｔＩｎに付加された輻輳情報に基づいて、スイッチ１の輻輳状態を知ることができ、輻輳状態に応じて処理を行うことができる。
【０１７６】
また、ＴＣＰやＵＤＰのユーザデータのフローのフレームに対するＰａｃｋｅｔＩｎを保証型に設定すると、ユーザデータのフローに対する影響を抑えつつ、コントローラ２及びスイッチ１の処理輻輳を抑制することができ、より有効である。ＴＣＰやＵＤＰのユーザデータでは、上位のプロトコルに再送機能が備えられていることが多いため、パケットロスとなった場合でも、上位のプロトコルの機能によって、影響が小さく抑えられるからである。
【０１７７】
＜その他＞
第１実施形態では、ＰａｃｋｅｔＩｎを指示するフローエントリに合致するフレームすべてについて、フレーム加工制御部１４２がＰａｃｋｅｔＩｎを生成し、ＰａｃｋｅｔＩｎ制御部１５に出力する。ただし、これに限定されず、ＰａｃｋｅｔＩｎを生成するのは、ＰａｃｋｅｔＩｎ制御部１５であり、ＰａｃｋｅｔＩｎが生成されるのは、フローエントリに合致するフレームのうちの一部であってもよい。
【０１７８】
例えば、フレーム加工制御部１４２は、ＰａｃｋｅｔＩｎを指示するフローエントリに合致するフレームについて、ＰａｃｋｅｔＩｎを生成せずに、ＰａｃｋｅｔＩｎに関するパラメータをＰａｃｋｅｔＩｎ制御部１５に出力する。ＰａｃｋｅｔＩｎに関するパラメータは、例えば、フロー識別情報、Ｍａｘ＿ｌｅｎの値、フレームを格納しているフレームバッファ１４３のバッファＩＤ等である。ＰａｃｋｅｔＩｎ制御部１５は、入力されたパラメータが非保証型を示す場合には、ＰａｃｋｅｔＩｎを生成して送信待ちキュー１６に格納する。
【０１７９】
ＰａｃｋｅｔＩｎ制御部１５は、入力されたパラメータが保証型を示す場合には、ＰａｃｋｅｔＩｎ制御部１５は、例えば、以下の場合に、保証型ＰａｃｋｅｔＩｎを生成し、送信待ちキュー１６に格納する。例えば、ＰａｃｋｅｔＩｎ制御テーブル１９に入力されたパラメータに合致するエントリがない場合である。例えば、すでに同一フローの保証型ＰａｃｋｅｔＩｎが送信待ちキュー１６に格納されており、動作ガードタイマの設定値が０、リフレッシュタイムが０、又は、リフレッシュタイムより滞留時間が長い場合である。この場合には、送信待ちキュー１６内の保証型ＰａｃｋｅｔＩｎが生成されたＰａｃｋｅｔＩｎで書き換えられる。
【０１８０】
また、例えば、以下の場合には、ＰａｃｋｅｔＩｎ制御部１５は、保証型ＰａｃｋｅｔＩｎを生成しない。例えば、該当するフローの動作ガードタイマが開始されている場合である。また、例えば、同一フローの保証型ＰａｃｋｅｔＩｎがすでに送信待ちキュー１６内に存在しており、該保証型ＰａｃｋｅｔＩｎの滞留時間がリフレッシュタイマ以下である場合である。
【０１８１】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１８２】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる非一時的な記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コ
ンピュータ等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１８３】
１        スイッチ
２        コントローラ
１３      フレーム分析部
１４      フレーム処理部
１５      ＰａｃｋｅｔＩｎ制御部
１６      ＰａｃｋｅｔＩｎ送信待ちキュー
１７      送信レート制御部
１８      ＯｐｅｎＦｌｏｗプロトコル制御部
１９      ＰａｃｋｅｔＩｎ制御テーブル
１０１    ＣＰＵ
１０２    記憶部
１０２Ａ  ＲＡＭ
１０２Ｂ  ＲＯＭ
１０２Ｃ  不揮発性メモリ
１０３    回線インタフェース
１４１    フローテーブル
１４２    フレーム加工制御部
１４３    フレームバッファ
【図１】
2017163383.tif 000003
【図２】
2017163383.tif 000004
【図３】
2017163383.tif 000005
【図４】
2017163383.tif 000006
【図５】
2017163383.tif 000007
【図６】
2017163383.tif 000008
【図７】
2017163383.tif 000009
【図８】
2017163383.tif 000010
【図９】
2017163383.tif 000011
【図１０】
2017163383.tif 000012
【図１１】
2017163383.tif 000013
【図１２Ａ】
2017163383.tif 000014
【図１２Ｂ】
2017163383.tif 000015
【図１２Ｃ】
2017163383.tif 000016
【図１３】
2017163383.tif 000017
【図１４】
2017163383.tif 000018
【図１５】
2017163383.tif 000019
【図１６】
2017163383.tif 000020
【図１７】
2017163383.tif 000021