JP6594672B2 - 汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置 - Google Patents

汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置 Download PDF

Info

Publication number
JP6594672B2
JP6594672B2 JP2015122561A JP2015122561A JP6594672B2 JP 6594672 B2 JP6594672 B2 JP 6594672B2 JP 2015122561 A JP2015122561 A JP 2015122561A JP 2015122561 A JP2015122561 A JP 2015122561A JP 6594672 B2 JP6594672 B2 JP 6594672B2
Authority
JP
Japan
Prior art keywords
protocol
header
packet
bit
network switch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015122561A
Other languages
English (en)
Other versions
JP2016005283A (ja
Inventor
キリンジーフ・シン
ツァヒ・ダニエル
ジェラルド・シュミット
サウリン・パテール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cavium LLC
Original Assignee
Cavium Networks LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Cavium Networks LLC filed Critical Cavium Networks LLC
Publication of JP2016005283A publication Critical patent/JP2016005283A/ja
Application granted granted Critical
Publication of JP6594672B2 publication Critical patent/JP6594672B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/30Peripheral units, e.g. input or output ports
    • H04L49/3009Header conversion, routing tables or routing tags
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/18Multiprotocol handlers, e.g. single devices capable of handling multiple protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明は、パケットのヘッダの変更(modification)技術に関する。詳細には、本発明は、汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置に関する。
ネットワークパケット(ネットワーク上のパケット)は、伝送制御プロトコル/インターネットプロトコル/イーサネットプロトコル(TCP/IP/Ethernet(イーサネット))等のインターネットが用いるプロトコルを用いてデータを伝達する。典型的なスイッチは、受信したパケットに対し、そのパケットにおける様々なフィールドに変更を施してから、当該パケットをその宛先や別のスイッチに送出する。受信したパケットに変更を施す理由としては、当該パケットの転送先、宛先がサポートするプロトコル、パケットの優先度、受信時のプロトコルヘッダのフォーマット等がある。ネットワークプロトコルの進化にともない、プロトコルヘッダにおける1つ以上のフィールドが、任意のフィールド(オプションフィールド)とされる場合がある。したがって、プロトコルヘッダ内のフィールドのオフセットが常に一定であるとは限らないため、スイッチのハードウェアの複雑化につながる。
また、従来のスイッチは、パケットの変更時に、そのパケット内の各プロトコルレイヤを順次に処理する。しかし、このような処理構成では、レイテンシも含め、ネットワーク関連の様々なパフォーマンス問題が生じる可能性がある。その場合、大量の処理リソースの消費に繋がりかねない。
各実施形態において、パケットのヘッダを変更する装置は、汎用化後のプロトコルヘッダに命令を適用することにより、パケットのプログラマブルな変更を可能にする技術に関する。具体的に述べると、受信パケットにおける各プロトコルヘッダを、そのプロトコルに特有である汎用フォーマットで表現することにより、当該パケットのヘッダを変更可能にする。詳細には、プロトコルヘッダから、欠けているフィールドを検出し、この欠けているフィールドも含め、想定されるフィールド全て(存在し得るフィールド全て)を備える最大サイズに、そのプロトコルヘッダを拡張する。この各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一である。変更は、拡張後のプロトコルヘッダに適用され得る命令のセットを用いる。このように、これらの命令は受信時のヘッダ(例えば、サイズ、プロトコルなど)に影響されないことから、いずれも汎用的な命令であると言える。
一態様では、ネットワークスイッチのリライトエンジンの動作方法が提供される。この方法は、パケットの各プロトコルヘッダを、当該プロトコルヘッダ用の汎用フォーマットに従って汎用化する過程を含む。この汎用フォーマットは、前記プロトコルについて想定されるフィールド全て(前記プロトコルにおいて存在し得るフィールド全て)を備える。よって、それら各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一であり得る。汎用化後の各プロトコルヘッダは、ビットベクトルを備える。このビットベクトルは、汎用化後のプロトコルヘッダの各バイトに対して1ビットを有し得る。このビットベクトルは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされる。ここで、無効フィールドとは、受信時のパケットの前記プロトコルヘッダ内に存在しないフィールドであり、有効フィールドとは、受信時のパケットの前記プロトコルヘッダ内に存在するフィールドである。
前記方法は、さらに、前記ネットワークスイッチのメモリに記憶された汎用的な命令のセットから、少なくとも1つの命令を用いて、汎用化後の少なくとも1つのプロトコルヘッダを変更する過程を含む。汎用化後の前記少なくとも1つのプロトコルヘッダを、前記ネットワークスイッチの送信ポートの出口側ポートタイプ(egress portType)に基づいて変更し得る。汎用化後の前記少なくとも1つのプロトコルヘッダを変更すると、前記ビットベクトルが更新され得る。一部の実施形態において、前記方法は、さらに、前記ビットベクトルと更新後の当該ビットベクトルとにXOR演算を実行することにより、変更のあったビット数を求める過程を含む。
汎用的な命令の前記セットは、受信時のパケットのヘッダにかかわらずヘッダを変更することができる。したがって、汎用的な命令の前記セットは、あるプロトコルの第1の変種のパケットヘッダを変更するために、かつ、当該プロトコルの第2の変種のパケットヘッダを変更するために使用可能である。同様に、汎用的な命令の前記セットは、第1のプロトコルのパケットヘッダを変更するために、かつ、第2のプロトコルのパケットヘッダを変更するために使用可能である。
他の態様では、ネットワークスイッチの動作方法が提供される。この方法は、前記ネットワークスイッチのメモリ内に、汎用的な命令のセットを保持する過程を含む。一部の実施形態では、汎用的な命令の前記セットにおける各命令が、ソフトウェアによりプログラム可能なマイクロコードとして実現される(マイクロコードとして機能する)。
一部の実施形態では、汎用的な命令の前記セットが、開始(Start)およびサイズ(Size)をパラメータとして有するデリート(Delete)命令を含む。前記デリート(Delete)命令は、汎用化後のプロトコルヘッダ内において開始(Start)位置からサイズ(Size)分のバイトを、前記ビットベクトルにおける当該サイズ(Size)分のバイトに対応するビットを0にマークすることによりデリート(無効化)し得る。
一部の実施形態では、汎用的な命令の前記セットが、ソース(Source)、ソースオフセット(SourceOffset)、サイズ(Size)、宛先オフセット(DestinationOffset)、ビットマスク(Bitmask)、コピー一定ビットマスク(copyConstantBitMask)およびコピー一定データ(copyConstantData)をパラメータとして有するコピー(Copy)命令を含む。前記コピー(Copy)命令は、ソース(Source)のソースオフセット(SourceOffset)から、サイズ(Size)分のバイトのデータを、汎用化後のプロトコルヘッダの宛先オフセット(DestinationOffset)にコピーし得る。一部の実施形態では、前記コピー(Copy)命令が、ビットマスク(Bitmask)を用いてビットマスク演算を実行する。一部の実施形態では、コピー一定ビットマスク(copyConstantBitMask)が所与のビット位置に「1」を有するとき、コピー一定データ(copyConstantData)における対応する位置のバイトを、汎用化後のプロトコルヘッダにおける対応する位置にコピーする。一部の実施形態では、コピー一定データ(copyConstantData)が、前記メモリに記憶され、かつ、ソフトウェアで定義される。対応するコピー先のバイトの有効性がソース(Source)のデータの有効性に依存し得る。前記ビットベクトルにおいて無効なバイトを表すビットは0にマークされ得て有効なバイトを表すビットは1にマークされ得る。
一部の実施形態では、汎用的な命令の前記セットが、開始オフセット(StartOffset)、宛先オフセット(DestinationOffset)およびサイズ(Size)をパラメータとして有する移動(Move)命令を含む。前記移動(Move)命令は、汎用化後のプロトコルヘッダ内において開始オフセット(StartOffset)からサイズ(Size)分のバイトを、宛先オフセット(DestinationOffset)に移動し得る。対応する移動先のバイトの有効性がソース(Source)のデータの有効性に依存し得る。前記ビットベクトルにおいて無効なバイトを表すビットは0にマークされ得て有効なバイトを表すビットは1にマークされ得る。
前記方法は、さらに、前記ネットワークスイッチの受信ポートでパケットを受信する過程と、前記パケットの各プロトコルヘッダを、当該プロトコルヘッダ用の汎用フォーマットに従って汎用化する過程とを含む。この各プロトコルヘッダを汎用化する過程は、前記パケットの前記プロトコルヘッダから、欠けているフィールドを検出すること、およびそのプロトコルヘッダを、前記検出の結果に基づいて、前記欠けているフィールドを含めることにより、前記汎用フォーマットに拡張することを含み得る。汎用化後の各プロトコルヘッダは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされたビットベクトルを備え得る。
前記方法は、さらに、汎用的な命令の前記セットから、少なくとも1つの命令を、汎用化後のプロトコルヘッダに適用することにより、汎用化後の少なくとも1つのプロトコルヘッダを変更する過程であって、これにより、前記ビットベクトルが更新される過程を含む。
前記方法は、さらに、更新後のビットベクトルに基づいて、新しいプロトコルヘッダを形成する過程と、前記パケットを、前記新しいプロトコルヘッダ付きで、前記ネットワークスイッチの送信ポートから送信する過程とを含む。一部の実施形態では、前記パケットを前記新しいプロトコルヘッダ付きで送信する過程に先立って、実行された全てのオペレーション(演算)について、追加された又はデリートされたバイト数を計数する。
さらなる他の態様では、ネットワークスイッチが提供される。このネットワークスイッチは、パケットを送受信する入力ポートおよび出力ポートを備える。
前記ネットワークスイッチは、さらに、汎用的な命令のセットを記憶するメモリを備える。この汎用的な命令のセットは、受信時のヘッダにかかわらずヘッダの変更を行うために用いられる。一部の実施形態では、汎用的な命令の前記セットが、デリート(Delete)命令、コピー(Copy)命令および移動(Move)命令を含む。
前記ネットワークスイッチは、さらに、前記パケットを処理するリライトエンジンであって、汎用的な命令の前記セットから、少なくとも1つの命令を用いることにより、当該パケットのそれぞれにおける各プロトコルヘッダを変更用に汎用化するリライトエンジンを備える。
一部の実施形態では、各プロトコルヘッダが、ソフトウェア定義のマッピングのうち、そのプロトコルに特有であるマッピングに従って汎用化される。一部の実施形態では、汎用化後の各プロトコルヘッダが、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされたビットベクトルを備える。
前述の内容は、添付の図面に示す本発明の例示的な実施形態についての以下の詳細な説明から明らかになる。図面において同一の符号は、異なる図をとおして同一の構成要素を指す。図面は必ずしも縮尺どおりではなく、本発明の実施形態を示すことに重点を置いている。
パケット内のプロトコルレイヤ組合せの複数例を示す図である。 本発明の一部の実施形態での、ローカルなプロトコルテーブルの構造の一例を示す図である。 本発明の一部の実施形態での、ネットワークスイッチの動作方法の一例を示すフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチの動作方法の他の例を示すフローチャートである。 本発明の一部の実施形態において、受信パケットにおける様々なレイヤのヘッダを汎用フォーマットに拡張する様子を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化の一例を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化の一例を示す他の図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化の他の例を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化の他の例を示す他の図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化の他の例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化のさらなる他の例を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化のさらなる他の例を示す他の図である。 本発明の一部の実施形態での、プロトコルヘッダの汎用化のさらなる他の例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示す他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の一例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の他の例を示す図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の他の例を示す他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の他の例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の他の例を示すさらなる他の図である。 本発明の一部の実施形態での、プロトコルヘッダの変更の他の例を示すさらなる他の図である。 本発明の一部の実施形態での、リライトエンジンの動作方法のフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、リライトエンジンの他の動作方法のフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、リライトエンジンのさらなる他の動作方法のフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、レイヤ構造の一例を示す図である。 本発明の一部の実施形態での、リライトエンジンのさらなる他の動作方法を示すフローチャートである。 本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法を示すフローチャートである。
以降では、説明目的の具体例を幾つか述べる。当業者であれば、それらの具体例以外でも本発明を実施できることを理解するであろう。すなわち、本発明は図示の実施形態に必ずしも限定されず、本明細書で述べる原理及び特徴に沿った最大限の範囲を包含する。
[序論]
ネットワークスイッチ等のネットワークデバイスは、ネットワーク上のトラフィックのスイッチングつまりルーティングを行うことができる。ネットワークスイッチは、パケットを受信する少なくとも1つの入力ポートつまり受信ポート、およびパケットを送信する少なくとも1つの出力ポートつまり送信ポートを備える。一部の実施形態において、ネットワークスイッチは、さらに、パーサ(パース処理手段)およびリライタ(書き換え手段)を備える。パーサ(解析手段)は、ネットワーク上のパケット(ネットワークパケット)のコンテンツを特定する少なくとも1つのパーサエンジンを含み得る。リライタ(再書込手段)は、パケットを、ネットワークスイッチから送出する前に変更する少なくとも1つのリライトエンジンを含み得る。これら少なくとも1つのパーサエンジンおよび少なくとも1つのリライトエンジンは、自由に変更可能であり、プログラマブル(設定可能)に動作し得る。
上記ネットワークスイッチは、さらに、当該ネットワークスイッチが使用するデータを記憶するメモリを備える。一例において、このメモリは、汎用的な命令のセットを記憶する。簡単に述べると、これら汎用的な命令は、プロトコルヘッダを変更するために典型的に使用される。他の例において、そのメモリは、さらに、プロトコルの汎用フォーマットについてのソフトウェア定義のマッピングのセットを記憶する。簡単に述べると、各プロトコルヘッダは、そのソフトウェア定義のマッピングのうち、そのプロトコルに特有であるマッピングに従った表現に変換され得る。後で詳述するように、これらのマッピングは、あるプロトコルの、互いに異なる変種にも、互いに異なるプロトコルにも適用可能であると共に、将来の新しいプロトコルにも適用(対応)可能である。さらなる他の例において、上記メモリは、さらに、プロトコルテーブルを記憶する。簡単に述べると、このプロトコルテーブルは、各プロトコルレイヤ組合せにおける各プロトコルレイヤのレイヤ情報を含む。各プロトコルレイヤ組合せは、そのプロトコルテーブル内にプログラム(書き込まれる)される。さらなる他の例において、上記メモリは、さらに、計数値(counter)および統計量(statistic)を記憶する。
イーサネット(登録商標)では、パケットが複数のプロトコルレイヤを含む。各プロトコルレイヤは、互いに異なる情報を伝達する。そのようなレイヤとして、例えば:イーサネット;PBBイーサネット;ARP;IPv4;IPv6;MPLS;FCoE;TCP;UDP;ICMP;IGMP;GRE;ICMPv6;VxLAN;TRILL;CNM;等が周知である。
理論的に言えば、プロトコルレイヤは任意の順番であってもよい。しかし実際には周知のレイヤ組合せとなる。有効なレイヤ組合せとして、例えば:イーサネット;イーサネット,ARP;イーサネット,CNM;イーサネット,FCoE;イーサネット,IPv4;イーサネット,IPv4,ICMP;イーサネット,IPv4,IGMP;等がある。
[パケットの固有の識別子(固有のパケット識別子)]
一部の実施形態において、上記ネットワークスイッチは、17種類のプロトコルおよび8層のプロトコルレイヤをサポートする。すなわち、817通りのプロトコルレイヤ組合せが想定され得る。図1に、パケット内のプロトコルレイヤ組合せの複数例を示す。一例として、パケットは、イーサネット,IPv4,ICMPのような3層プロトコルレイヤ組合せを有し得る。他の例として、パケットは、イーサネット,IPv4,UDP,VxLAN,イーサネット,ARPのような7層プロトコルレイヤ組合せを有し得る。
17通りのプロトコルレイヤ組合せが想定されるものの、周知のレイヤ組合せはごく一部である。既知の全てのプロトコルレイヤ組合せが、一意的に特定され、パケット識別子(PktID)と称される固有の番号に翻訳(変換)され得る。上記ネットワークスイッチのメモリに記憶されたプロトコルテーブルは、既知の各プロトコルレイヤ組合せにおける各レイヤのレイヤ情報を含むようにプログラムされ得る。実際的には、ローカルなプロトコルテーブルに含まれるプロトコルレイヤ組合せの数は、256未満になり得る。一部の実施形態において、このローカルなプロトコルテーブルに含まれる既知のプロトコルレイヤ組合せの数は、212である。しかしながら、このローカルなテーブルは、これを上回る数の又はこれを下回る数のプロトコルレイヤ組合せを含むようにプログラムされてもよい。
図2に、本発明の一部の実施形態での、ローカルなプロトコルテーブル200の構造の一例を示す。ローカルなテーブル200内のプロトコルレイヤ組合せのそれぞれは、PktIDによって索引付けられ、そのプロトコルレイヤ組合せにおける各プロトコルレイヤのレイヤ情報を含み得る。図2では、これらの情報は、レイヤ0情報、レイヤ1情報およびレイヤN情報と称されている。このようにPktIDで索引付けすることにより、パケット内のN個の全てのレイヤの、どのレイヤについてのレイヤ情報にもアクセス又は取り出すことが可能である。
各プロトコルレイヤのレイヤ情報は、少なくとも:レイヤタイプ(LayerType);レイヤデータオフセット(LayerDataOffset);および付帯情報(MiscellaneousInformation);を含む。しかしながら、ローカルなテーブル200には、より多くの種類の情報が記憶されてもよい。簡単に述べると、レイヤタイプ(LayerType)は、そのプロトコルレイヤのプロトコル(例えば、IP、TCP、UDPまたはイーサネット)を指す。レイヤデータオフセット(LayerDataOffset)は、そのプロトコルレイヤ内においてレイヤデータが開始する位置(開始位置)を供与する。付帯情報(MiscellaneousInformation)は、チェックサム、長さデータ等のデータを含む。
典型的に、上記パーサエンジンは、ネットワークスイッチが受信した受信パケットのPktIDを特定することができる。上記リライトエンジンが、そのPktIDを上記プロトコルテーブルのキーとして用いることにより、そのパケットにおける各プロトコルレイヤを変更用に汎用化するのに必要な全ての情報を、このプロトコルテーブルが当該リライトエンジンに供給し得る。すなわち、上記リライトエンジンは、上記パーサエンジンがパース処理した結果を受け取るのではなく、PktIDを用いることにより、上記プロトコルテーブル内に存在する、そのパケットの各プロトコルレイヤのレイヤ情報にアクセスし得るか又はそのような情報を上記プロトコルテーブルから取り出し得る。
<レイヤタイプ>
レイヤタイプ(LayerType)と、パケットの1つ以上のフィールドについてのハッシュとの固有の組合せにより、上記リライトエンジンに、各プロトコルレイヤの汎用フォーマットが供与され得る。一部の実施形態において、この固有の組合せにより、上記メモリに記憶された、プロトコルの汎用フォーマットについてのソフトウェア定義のマッピングのうちの1つが指定され得る。上記リライトエンジンは、この汎用フォーマットを使用して、プロトコルレイヤの拡張、さらには、ソフトウェア命令を用いてのプロトコルレイヤの変更を行い得る。このレイヤタイプ(LayerType)が、さらに、パケット内においてそのプロトコルレイヤが開始する位置(開始位置)を、上記リライトエンジンに教示し得る。
<レイヤデータオフセット>
上記リライトエンジンは、パケット内の所与のデータを用いて、受信ヘッダにおけるレイヤを変更するが、そのパケット内における当該データの位置はどこであってもよい。レイヤのサイズは様々に変化し得るため、上記リライトエンジンによる変更時に必要な、データのオフセット自体も、様々に変化し得る。このことは、リライトエンジンがどのデータをどこから選択できるのかに関してのハードウェア面での柔軟性を低下させる原因となり得る。
受信パケットのヘッダから抽出されるデータは、レイヤ単位で配置される。具体的に述べると、抽出されるデータ構造内において各レイヤデータ構造が開始するオフセット(開始位置)は、PktID毎に固有である。各レイヤのレイヤデータオフセット(LayerDataOffset)は、抽出されるデータについて、その変更時に用いる位置を特定するのに使用され得る。パケット内のレイヤ構造も、レイヤから抽出するデータの位置も、そのパケットのPktIDで特定され得る。このように、ソフトウェアもハードウェアも、抽出されるデータを同じ固有の識別子を用いて管理するので、リライトエンジンの命令を簡略化することが可能になる。
<付帯情報>
チェックサム、長さデータ等の付帯情報(MiscellaneousInformation)は、チェックサムの再計算およびヘッダの長さの更新などといった、そのプロトコルレイヤの特殊な取扱い要件を、上記リライトエンジンに教示し得る。
パケット汎用化手法は、少数のセットの汎用的な命令を定義することを可能にする。この汎用的な命令のセットは、所与のプロトコルに単に基づくものであり、そのプロトコルレイヤの前後のプロトコルレイヤの影響を受けない。このパケット汎用化手法は、さらに、将来起こり得るプロトコルの改変や追加の影響を受け難い、ハードウェア面での柔軟性をもたらすことができる。
図3に、本発明の一部の実施形態での、ネットワークスイッチの動作方法の一例300を示す。典型的に、このネットワークスイッチは、前記パーサエンジンおよび前記リライトエンジンを備える。
過程305で、前記パーサエンジンが、受信パケットを調べて当該受信パケットのPktIDを特定する。一部の実施形態では、前記パーサエンジンが、そのパケットをパース処理したデータではなく前記PktIDを前記リライトエンジンに入力する。
過程310で、前記リライトエンジンが、前記ネットワークスイッチが受け取る複数のパケットの互いに異なるパケット構造を定義するプロトコルテーブルを参照する。前記リライトエンジンが、前記PktIDを前記プロトコルテーブルのキーとして用いて、変更に必要な、パケットの各プロトコルレイヤのレイヤ情報を取り出し得る。
過程315で、前記リライトエンジンが、前記プロトコルテーブルに記憶されたデータに基づいてパケットを変更する。典型的には、パケットを変更するのに先立って、前記リライトエンジンが、そのパケットの各プロトコルレイヤを拡張する。プロトコルレイヤの拡張および変更の詳細については、後で説明する。
図4に、本発明の一部の実施形態での、ネットワークスイッチの動作方法の他の例400を示す。典型的に、このネットワークスイッチは、メモリおよび少なくとも1つの受信ポートを備える。
過程405で、前記メモリに、プロトコルテーブルを記憶する。このプロトコルテーブルは、複数のパケットの互いに異なるパケット構造を定義する。これらパケット構造のそれぞれは、PktIDによって索引付けられる。また、これらパケット構造は、プロトコルレイヤ組合せを表し、かつ、そのプロトコルレイヤ組合せにおける各プロトコルレイヤのレイヤ情報を含む。前記プロトコルテーブルは、新しいプロトコルを表した新しいパケット構造を追加するために更新され得る。また、前記プロトコルテーブルは、プロトコルの改変に応答して、パケット構造を変更するために更新され得る。
過程410で、前記受信ポートにおいてパケットを受信する。
過程415で、そのパケットのPktIDを特定する。一部の実施形態では、前記パーサエンジンが、そのパケットのPktIDを特定する。
過程420で、そのパケットの各プロトコルレイヤのレイヤ情報にアクセスする。典型的に、このレイヤ情報は、前記プロトコルテーブル内に存在する。一部の実施形態では、このレイヤ情報を用いることにより、そのパケットのプロトコルヘッダを、そのプロトコルの汎用フォーマットに従って汎用化する。この汎用フォーマットは、前記メモリ内にソフトウェアで定義され得る。
既述したように、少なくとも1つの命令を汎用化後のプロトコルヘッダに適用することにより、その汎用化後のプロトコルヘッダを変更することができる。一部の実施形態では、その汎用化後のプロトコルヘッダを変更するのに使用する、データの位置を、前記レイヤ情報を用いて決定する。典型的には、前記ネットワークスイッチの前記リライトエンジンにより、プロトコルヘッダの汎用化、さらには、汎用化後のプロトコルヘッダの変更を行う。
[汎用フォーマット]
略述したように、前記リライトエンジンが、パケットの各プロトコルヘッダを、そのプロトコルに特有である汎用フォーマットで表現することにより、パケットにプログラマブルな変更を可能にする。これにより、パケットのヘッダを変更する際のハードウェア面およびソフトウェア面での柔軟性が向上する。
図5は、本発明の一部の実施形態において、受信パケットにおける様々なレイヤのヘッダを汎用フォーマットに拡張する様子を示す概略構成500である。図5の受信パケットは、8層のプロトコルレイヤを含む。そして、各プロトコルレイヤは、そのプロトコルに対応したヘッダ(プロトコルヘッダ)を有する。なお、プロトコルレイヤの層数は、8層を超える場合も8層未満の場合もあり得る。リライトエンジンは、どのプロトコルヘッダからも、欠けているフィールドを検出することができると共に、各プロトコルヘッダを図5に示すような汎用フォーマットに拡張することができる。「正準レイヤ」つまり「正準化されたレイヤ」とは、汎用フォーマットに拡張されたプロトコルレイヤのことを指す。手短に言って、正準レイヤのそれぞれは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされたビットベクトルを備える。
図6A〜図8Cに、本発明の一部の実施形態において、リライトエンジンがイーサネットプロトコルを扱う各種例を示す。図6A〜図8Cに示された各種例は、本発明にかかるリライトエンジンにより、あるプロトコル(これらの例では、イーサネットプロトコル)の、互いに異なる変種を扱うことができることを証明している。各例には、イーサネットプロトコルの受信時のヘッダと、その汎用フォーマットとが描かれている。他種のプロトコルの場合の説明は省略するが、本発明にかかるリライトエンジンは、他種のプロトコル合も同様に扱うことができる。
図6Aに、受信パケット内のイーサネットパケットヘッダのフォーマットの一例600を示す。このイーサネットパケットヘッダ600は、22バイトであり、送信元アドレス(SA)フィールド、宛先アドレス(DA)フィールド、サービスVLANタグフィールド、カスタマVLANタグフィールドおよびイーサタイプフィールドの、5つのフィールドを有する。SAフィールドおよびDAフィールドは、いずれも6バイトである。サービスVLANタグフィールドおよびカスタマVLANタグフィールドは、いずれも4バイトである。イーサタイプフィールドは、2バイトである。このイーサネットパケットヘッダ600を含むパケットは、イーサネットパケットの変種のなかでも最も大きい変種であり、そのサイズは最大22バイトであり得る。
リライトエンジンは、イーサネットパケットヘッダ600を処理して、当該イーサネットパケットヘッダ600には欠けているフィールドがないと判断する。このように、イーサネットパケットヘッダ600は想定されるフィールド全てを備えていることから、このイーサネットパケットヘッダ600の汎用フォーマットは、イーサネットパケットヘッダ600と全く同一になる。図6Bに、図6Aのイーサネットパケットヘッダ600を表したビットベクトル605を示す。ビットベクトル605の各ビットは、イーサネットパケットヘッダ600の22バイトのうちの1バイトにそれぞれ対応する。イーサネットパケットヘッダ600には、フィールド全てが存在していることから、当該イーサネットパケットヘッダ600のフィールド全てが有効フィールドとなる(すなわち、数値を有する)。したがって、ビットベクトル605のビットは全て「1」である。つまり、イーサネットパケットヘッダ600は、{22’b111111_111111_1111_1111_11}という汎用フォーマットで表現することができる。
図7Aに、受信パケットのイーサネットパケットヘッダのフォーマットの他の例700を示す。このイーサネットパケットヘッダ700は、18バイトであり、SAフィールド、DAフィールド、カスタマVLANタグフィールドおよびイーサタイプフィールドの、4つのフィールドしか有していない。すなわち、イーサネットパケットヘッダ700には、サービスVLANタグフィールドが欠けている。このイーサネットパケットヘッダ700を含むパケットも、イーサネットパケットの変種である。
リライトエンジンは、イーサネットパケットヘッダ700を処理して、当該イーサネットパケットヘッダ700にはサービスVLANタグフィールドが欠けていると判断し、当該イーサネットパケットヘッダ700の汎用フォーマットにおける適切な位置に、欠けているサービスVLANタグフィールドを含めることにより、そのイーサネットパケットヘッダ700を最大サイズである22バイトに拡張する。図7Bに、拡張後のイーサネットパケットヘッダの汎用フォーマット700’を示す。拡張後のイーサネットパケットヘッダ700’は、欠けていたサービスVLANタグフィールドも含め、イーサネットプロトコルについて想定されるフィールド全てを備えている。拡張後のイーサネットパケットヘッダ700’内の有効フィールドは、拡張前のイーサネットパケットヘッダ700から存在していたSAフィールド、DAフィールド、カスタマVLANタグフィールドおよびイーサタイプフィールドである。拡張後のイーサネットパケットヘッダ700’内の無効フィールドは、拡張前のイーサネットパケットヘッダ700内には存在せずに拡張後のイーサネットパケットヘッダ700’で追加された、サービスVLANタグフィールドである。
図7Cに、図7Bの拡張後のイーサネットパケットヘッダ700’を表したビットベクトル705を示す。ビットベクトル705の各ビットは、拡張後のイーサネットパケットヘッダ700’の22バイトのうちの1バイトにそれぞれ対応する。ビットベクトル705は、SAフィールド、DAフィールド、カスタマVLANタグフィールドおよびイーサタイプフィールドからなる有効フィールド全てについて「1」である。また、ビットベクトル705は、サービスVLANタグフィールドのみからなる無効フィールド全てについて「0」である。つまり、イーサネットパケットヘッダ700は、{22’b111111_111111_0000_1111_11}という汎用フォーマットで表現することができる。
図8Aに、受信パケットのイーサネットパケットヘッダのフォーマットのさらなる他の例800を示す。このイーサネットパケットヘッダ800は、14バイトであり、SAフィールド、DAフィールドおよびイーサタイプフィールドの、3つのフィールドしか有していない。すなわち、イーサネットパケットヘッダ800には、サービスVLANタグフィールドとカスタマVLANタグフィールドとが欠けている。このイーサネットパケットヘッダ800を含むパケットは、イーサネットパケットの変種のなかでも最も小さい変種である。
リライトエンジンは、イーサネットパケットヘッダ800を処理して、当該イーサネットパケットヘッダ800にはサービスVLANタグフィールドとカスタマVLANタグフィールドとが欠けていると判断し、当該イーサネットパケットヘッダ800の汎用フォーマットにおける適切な位置に、欠けているサービスVLANタグフィールドとカスタマVLANタグフィールドとを含めることにより、そのイーサネットパケットヘッダ800を最大サイズである22バイトに拡張する。図8Bに、拡張後のイーサネットパケットヘッダの汎用フォーマット800’を示す。拡張後のイーサネットパケットヘッダ800’は、欠けていたサービスVLANタグフィールドおよびカスタマVLANタグフィールドも含め、イーサネットプロトコルについて想定される全てのフィールドを備えている。拡張後のイーサネットパケットヘッダ800’内の有効フィールドは、拡張前のイーサネットパケットヘッダ800から存在していたSAフィールド、DAフィールドおよびイーサタイプフィールドである。拡張後のイーサネットパケットヘッダ800’内の無効フィールドは、拡張前のイーサネットパケットヘッダ800内に存在せずに拡張後のイーサネットパケットヘッダ800’で追加された、サービスVLANタグフィールドおよびカスタマVLANタグフィールドである。
図8Cに、図8Bの拡張後のイーサネットパケットヘッダ800’を表したビットベクトル805を示す。ビットベクトル805の各ビットは、拡張後のイーサネットパケットヘッダ800’の22バイトのうちの1バイトにそれぞれ対応する。ビットベクトル805は、SAフィールド、DAフィールドおよびイーサタイプフィールドからなる有効フィールド全てについて「1」である。また、ビットベクトル805は、サービスVLANタグフィールドおよびカスタマVLANタグフィールドからなる無効フィールド全てについて「0」である。つまり、イーサネットパケットヘッダ800は、{22’b111111_111111_0000_0000_11}という汎用フォーマットで表現することができる。
図6A〜図8Cから分かるように、イーサネットヘッダを汎用フォーマットに拡張することにより、フィールドのオフセットは、受信時のイーサネットヘッダの変種にかかわらず、最大サイズを有するイーサネットヘッダ(これらの例では、図6Aのイーサネットパケットヘッダ600)のオフセットと同一になる。このようにイーサネットヘッダを、最大サイズを有するイーサネットヘッダに拡張することにより、受信時のイーサネットヘッダにかかわらず、同一のセットのソフトウェア命令での処理が可能になるので有利である。よって、例えばイーサタイプフィールドを変更する命令は、どのようなイーサネットヘッダを受信したのかにかかわらず常に同一のオフセットを指すことができる。
パケットヘッダの汎用フォーマットを用いることにより、そのパケットヘッダを変更する際のハードウェア面およびソフトウェア面での柔軟性が向上する。ハードウェアは、そのパケットヘッダの変更を、当該パケットヘッダ内におけるフィールドの位置に関係なく実施することができる。ソフトウェアにより、新しいプロトコルを支援するようにハードウェアをプログラムすることができる。また、ソフトウェアにより、ハードウェアのテーブル内に、ヘッダの各種プロトコルに用いる汎用フォーマットをプログラムすることができる。
[仮定1](受信パケットは単一タグ付きイーサネットパケットであり、送信パケットはタグなしイーサネットパケットであると仮定)
ネットワークスイッチの入力イーサネットポートで受信した、カスタマVLANタグ付きのパケットを、タグがない状態で、出力イーサネットポートに送信する場合を考える。図9Aに、その受信イーサネットポートで受信するパケット内の、イーサネットパケットヘッダのフォーマットの一例900を示す。その受信イーサネットポートで受信するパケットに対して、ソフトウェアにより、イーサネットヘッダの汎用フォーマットが、{22’b111111_111111_0000_1111_11}であるとプログラムされる。リライトエンジンは、そのヘッダ内のプロトコルレイヤを受け取って前記メモリを参照し、このメモリは、当該ヘッダのプロトコルの汎用フォーマットが{22’b111111_111111_0000_1111_11}であることをハードウェアに認識させる。この場合、ハードウェアでは、先頭から連続する12個の(いずれも「1」にマークされた)バイトと、4バイト分シフトして後に続く6個の(いずれも「1」にマークされた)バイトとの内容について待ち受ける。前記4バイト分は、ビットベクトルにおいて「0」にマークされた4個のビットに対応する、無効なバイトである。
リライトエンジンは、上記の{22’b111111_111111_0000_1111_11}という汎用フォーマットに基づき、受信されたヘッダにおける前記プロトコルレイヤを、図9Bに示す拡張後のヘッダ905に拡張し、拡張後のレイヤ905の各バイトに対して1ビットを管理する。図9Cに、この拡張後のヘッダ905に対応するビットベクトル910を示す。ビットベクトル910は、どのバイトが有効でどのバイトが無効であるかを、前記ハードウェアに認識させる。
本仮定1の送信方針(中継決定)によると、パケットは、タグがない状態で送信することが求められる。前記ハードウェアは、前記送信イーサネットポートの出口側ポートタイプ(egress portType)に基づいて命令テーブルを参照し、当該命令テーブルが、そのハードウェアに、カスタマVLANタグをデリート(消去)するように認識させる。カスタマVLANタグは、常に決まったオフセット(すなわち、16)で開始する。命令は汎用フォーマットに適用されるため、カスタマVLANタグをデリートする命令は、「位置16から開始する(カスタマVLANタグの)4バイト分をデリートする」という命令になる。前記ハードウェアは、単にその4バイト分を無効であるとマークして、これらをデリートする。図9Dに、汎用フォーマットで、タグがない状態のイーサネットヘッダ915を示す。図9Eに、このタグがない状態のイーサネットヘッダ915に対するビットベクトル920を示す。前記ハードウェアは、無効なバイトを全て除外することにより、図9Fに示すような新しいヘッダ925を形成する。そして、パケットが、その新しいヘッダ925付きで、前記送信イーサネットポートから送出される。
[仮定2](受信パケットは二重タグ付きイーサネットパケットであり、送信パケットはタグなしイーサネットパケットであると仮定)
ネットワークスイッチの入力イーサネットポートで受信した、サービスVLANタグおよびカスタマVLANタグ付きのパケットを、タグがない状態で、出力イーサネットポートに送信する場合を考える。図10Aに、その受信イーサネットポートで受信するパケット内の、イーサネットパケットヘッダのフォーマットの一例1000を示す。その受信イーサネットポートで受信するパケットに対して、ソフトウェアにより、イーサネットヘッダの汎用フォーマットが、{22’b111111_111111_1111_1111_11}であるとプログラムされる。リライトエンジンは、そのヘッダ内のプロトコルレイヤを受け取って前記メモリを参照し、このメモリは、当該ヘッダのプロトコルの汎用フォーマットが{22’b111111_111111_1111_1111_11}であることをハードウェアに認識させる。この場合、ハードウェアは、連続する22個の(いずれも「1」にマークされた)バイトの内容について待ち受ける。
リライトエンジンは、上記の{22’b111111_111111_1111_1111_11}という汎用フォーマットからみて、このプロトコルヘッダが既に最大サイズを有していることから、受信されたヘッダにおける前記プロトコルレイヤを拡張する必要がない。図10Bに、このヘッダ1000に対応するビットベクトル1005を示す。ビットベクトル1005は、どのバイトが有効でどのバイトが無効であるかを、前記ハードウェアに認識させる。
本仮定2の送信方針によると、パケットは、タグがない状態で送信することが求められる。前記ハードウェアは、前記送信イーサネットポートの出口側ポートタイプに基づいて命令テーブルを参照し、当該命令テーブルが、そのハードウェアに、カスタマVLANタグおよびサービスVLANタグをデリートするように認識させる。カスタマVLANタグは、常に決まったオフセット(具体的には、16)で開始する。同様に、サービスVLANタグは、常に決まったオフセット(具体的には、12)で開始する。命令は汎用フォーマットに適用されるため、カスタマVLANタグおよびサービスVLANタグをデリートする命令は、それぞれ、「位置16から開始する(カスタマVLANタグの)4バイト分をデリートする」という命令と、「位置12から開始する(サービスVLANタグの)4バイト分をデリートする」という命令になる。前記ハードウェアは、単にこれら8バイト分を無効であるとマークして、これらをデリートする。図10Cに、汎用フォーマットで、タグがない状態のイーサネットヘッダ1010を示す。図10Dに、このタグがない状態のイーサネットヘッダ1010に対するビットベクトル1015を示す。前記ハードウェアは、無効なバイトを全て除外することにより、図10Eに示すような新しいヘッダ1020を形成する。そして、、パケットが、その新しいヘッダ1020付きで、前記送信イーサネットポートから送出される。
[仮定3](受信パケットはタグなしイーサネットパケット、単一タグ付きイーサネットパケットまたは二重タグ付きイーサネットパケットであり、送信パケットは二重タグ付きイーサネットパケットであると仮定)
ネットワークスイッチの入力イーサネットポートで受信した、タグが付いていないパケット、またはサービスVLANタグ、カスタマVLANタグもしくは両方のタグが付いたパケットを、(別の)二重タグ付きの状態で、出力イーサネットポートに送信する場合を考える。前記受信パケットが二重タグ付きのパケットである場合、ソフトウェアにより、イーサネットヘッダの汎用フォーマットが、、{22’b111111_111111_1111_1111_11}であるとプログラムされる。前記受信パケットがタグの付いていないパケットである場合、ソフトウェアにより、イーサネットヘッダの汎用フォーマットが、{22’b111111_111111_0000_0000_11}であるとプログラムされる。前記受信パケットが単一タグ付きのパケットである場合、ソフトウェアにより、イーサネットヘッダの汎用フォーマットが、{22’b111111_111111_0000_1111_11}又は{22’b111111_111111_1111_0000_11}であるとプログラムされる。
本仮定3の送信方針によると、パケットは、二重タグ付きで送信することが求められる。前記ハードウェアは、前記送信イーサネットポートの出口側ポートタイプに基づいて命令テーブルを参照し、当該命令テーブルは、そのハードウェアに、カスタマVLANタグおよびサービスVLANタグをそれぞれ別のものに置き換えるように認識させる。カスタマVLANタグは、常に決まったオフセット(具体的には、16)で開始する。同様に、サービスVLANタグは、常に決まったオフセット(具体的には、12)で開始する。どちらのタグについても、同様の命令が使用される。汎用フォーマットに適用される命令を用いることから、それぞれの命令は「レイヤデータ位置X(layerData.locationX)から(サービスVLANタグの)4バイト分を開始位置(startLocation)=12にコピーする」という命令と「レイヤデータ位置Y(layerData.locationY)から(サービスVLANタグの)4バイト分を開始位置(startLocation)=16にコピーする」という命令になる。このとき、レイヤデータ位置X(layerData.locationX)およびレイヤデータ位置Y(layerData.locationY)によって指定される位置から、それぞれのコンテンツがコピーされる。
以上の仮定1〜3によって示されたとおり、ハードウェア内のリライトエンジンを簡略化することができると共に、メモリ内に設定されるソフトウェア命令を小規模に抑えることができる。これにより、命令を保持するために必要なハードウェアメモリを浅く(小容量)にすることができる。
図11に、本発明の一部の実施形態での、リライトエンジンの動作方法1100を示す。過程1105で、リライトエンジンにより、受信パケットのプロトコルヘッダから、欠けているフィールドを検出する。
過程1110で、リライトエンジンにより、前記プロトコルヘッダを、前記検出の結果に基づいて、そのプロトコルの汎用フォーマットに拡張する。前記汎用フォーマットは、前記プロトコルについて想定されるフィールドを全て備えている。それら各フィールドのオフセットは、前記プロトコルヘッダのプロトコルの変種にかかわらず同一である。リライトエンジンは、拡張後のプロトコルヘッダに対するビットベクトルを保持し、当該ビットベクトルは、その拡張後のプロトコルヘッダの各バイトに対して1ビットを有する。リライトエンジンにより、有効フィールドにおける全てのバイトに対する各ビットを、有効であるとマークする。有効フィールドは、前記受信パケットの前記プロトコルヘッダ内に存在するフィールドである。リライトエンジンにより、無効フィールドにおける全てのバイトに対する各ビットを、無効であるとマークする。無効フィールドは、前記受信パケットの前記プロトコルヘッダ内に存在しないフィールドである。
一部の実施形態では、過程1105および過程1110を、前記受信パケットの各プロトコルレイヤに対して実行する。
図12に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1200を示す。一部の実施形態において、このネットワークスイッチは、プロトコルの汎用フォーマットについての、ソフトウェア定義のマッピングを可能にし、そのソフトウェア定義のマッピングを、当該ネットワークスイッチのメモリに記憶する。このネットワークスイッチは、プロトコルヘッダを汎用化するリライトエンジンを備える。過程1205で、そのネットワークスイッチの受信ポートでパケットを受信する。
過程1210で、パケットのプロトコルヘッダを、そのプロトコルの汎用フォーマットに従って汎用化する。具体的に説明すると、既述したように、そのプロトコルヘッダが、前記ネットワークスイッチの前記メモリに記憶された前記マッピングのうちの1つに従ってハードウェアにより拡張される。拡張後のプロトコルヘッダに対するビットベクトルが、どのバイトが有効でどのバイトが無効であるかを、そのハードウェアに認識させる。
過程1215で、少なくとも1つの命令を、汎用化後のプロトコルヘッダに適用することにより、当該汎用化後のプロトコルヘッダを変更する。具体的に説明すると、既述したように、ハードウェアが、送信イーサネットポートの出口側ポートタイプに基づいて命令テーブルを参照することにより、そのプロトコルヘッダに適用すべき前記少なくとも1つの命令を決定する。
過程1220で、変更後のプロトコルヘッダにおける無効なバイトを全て除外することにより、新しいヘッダを形成する。
過程1225で、前記パケットを、前記新しいヘッダ付きで、前記ネットワークスイッチの送信ポートから送出する。
図13に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1300を示す。過程1305で、プロトコルの汎用フォーマットについてのソフトウェア定義のマッピングを有するように、このネットワークスイッチを構成する。具体的に述べると、前記ソフトウェア定義のマッピングを、そのネットワークスイッチのメモリに記憶する。
過程1310で、前記ネットワークスイッチの受信ポートでパケットを受信する。
過程1315で、前記パケットのプロトコルヘッダを、前記ソフトウェア定義のマッピングのうちの1つに基づいて汎用化する。
過程1320で、汎用化後のプロトコルヘッダに対するビットベクトルを保持する。このビットベクトルは、その汎用化後のプロトコルヘッダの各バイトに対して1ビットを有する。
[汎用化後のプロトコルヘッダの最適な表現様式]
受信時の各レイヤに含まれるバイト数は、例えば64バイトであったり、128バイトであったり、あるいは、それ以上にもなり得る。なお、これまでの例における拡張後のイーサネットヘッダのバイト数は、22バイトであった。プロトコルレイヤ内の全てのバイトをビットベクトルで表そうとすると、プロトコルによっては最悪の場合、メモリを大量に消費することになり、効率が良いとは言えないことがある。現代のシステムオンチップ(SOC)設計では、通常、組み込まれるメモリの面積および電力予算がチップ全体の予算を大きく占める。そのため、限られたメモリリソースを効率的に利用することが重要となる。
「ホール」すなわち無効なバイトが少ないプロトコルが大半を占める場合、ヘッダの汎用フォーマットを、連続するバイトの計数値と、それ以降の連続しないバイトを表した小規模のビットベクトルと、で表現するほうが低コストになる。一部の実施形態において、この小規模のビットベクトルのサイズは、プログラマブルであるが、典型的には一定とされる。このサイズは、1つのプロトコルのこのような表現において記憶する必要がある非連続バイトの個数の最大値を、複数のプロトコルの統計から求めて調節可能であり得る。
一部の実施形態において、パケットの汎用フォーマットは、連続バイト(continuous_byte)フィールドとビットベクトル(bitvector)フィールドとの2つのフィールドを有するデータ構造を用いた表現により、最適に表現することができる。連続バイト(continuous_byte)フィールドは、そのプロトコルレイヤ内において先頭から連続する有効なバイトの個数を表す。ビットベクトル(bitvector)フィールドは、そのプロトコルレイヤの各バイトをビットで表したものである。詳細には、このビットベクトル(bitvector)フィールドは、「ホール」すなわち無効なバイトを示す。ビットベクトル(bitvector)フィールドは、全てのプロトコルとは言わないが、ほぼ全てのプロトコルに対処することができる。このように、最適な表現とは、{連続バイト(continuous_byte),ビットベクトル(bitvector)}による表現である。このデータ構造は、プロトコルヘッダのサイズにに影響されない。
一例として、図6Bのビットベクトル605は{22,0000_0000_0000_0000}とコンパクトに表現することができる。これは、図6Aのイーサネットパケットヘッダ600の先頭から連続するバイト数が22であることを表している。そのビットベクトル(bitvector)フィールドは、無効なバイトがないので全て「0」である。
他の例として、図7Cのビットベクトル705は{12,0000_1111_1100_0000}とコンパクトに表現することができる。これは、図7Bの拡張後のイーサネットパケットヘッダ700’の先頭から連続するバイト数が12であり、その次に無効なバイトが4個続いてから、有効なバイトが6個続くことを表している。
さらなる他の例として、図8Cのビットベクトル805は{12,0000_0000_1100_0000}とコンパクトに表現することができる。これは、図8Bの拡張後のイーサネットパケットヘッダ800’の先頭から連続するバイト数が12であり、その次に無効なバイトが8個続いてから、有効なバイトが2個続くことを表している。
図14に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1400を示す。過程1405で、拡張後のプロトコルヘッダを得る。既述したように、拡張後のプロトコルヘッダとは、受信パケットのプロトコルヘッダを、そのプロトコルの汎用フォーマットに従って汎用化したものである。典型的に、プロトコルヘッダの汎用化は、リライトエンジンが、そのプロトコルヘッダから欠けているフィールドを検出し、さらに、そのプロトコルヘッダを、当該検出の結果に基づいて汎用フォーマットに従って拡張することで実行される。汎用フォーマットは、そのプロトコルについて想定される全てのフィールドを備えている。それら各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一である。
過程1410で、拡張後のプロトコルヘッダの表現を保持する。この表現は、連続バイト(continuous_byte)フィールドとビットベクトル(bitvector)フィールドとを有するデータ構造である。
過程1415で、連続バイト(continuous_byte)フィールドを、拡張後のプロトコルヘッダの先頭から連続する有効なバイト数に設定する。
過程1420で、ビットベクトル(bitvector)フィールドについて、前記連続する有効なバイトの後の、無効フィールドにおける全てのバイトに対する各ビットを、無効であるとマークする。無効フィールドのそれぞれは、前記受信パケットのプロトコルヘッダ内に存在しないフィールドである。
過程1425で、ビットベクトル(bitvector)フィールドについて、前記連続する有効なバイトの後の、有効フィールドにおける全てのバイトに対する各ビットを、有効であるとマークする。有効フィールドのそれぞれは、前記受信パケットのプロトコルヘッダ内に存在するフィールドである。
図15に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1500を示す。過程1505で、このネットワークスイッチの受信ポートでパケットを受信する。
過程1510で、そのパケットのプロトコルヘッダを、そのプロトコルの汎用フォーマットに従って汎用化する。典型的に、プロトコルの汎用化は、リライトエンジンにより実行される。
過程1515で、汎用化後のプロトコルヘッダを、そのプロトコルヘッダのサイズに影響されないデータ構造で表現する。一部の実施形態において、このデータ構造は、プロトコルレイヤの先頭から連続する有効なバイト数を表した連続バイト(continuous_byte)フィールドと、そのプロトコルヘッダの各バイトをビットで表したビットベクトル(bitvector)フィールドとを有する。
このようなデータ構造を用いることにより、各種プロトコルレイヤを表す汎用的な表現を、プロトコルレイヤヘッダのサイズに影響されない表現とすることができる。また、ビットベクトルをコンパクトに表現するので、ハードウェアコストを削減することができて有利である。
[ヘッダの変更に用いる汎用的な命令]
変更は、拡張後のプロトコルヘッダに適用され得る汎用的な命令のセットを用いる。これら命令は、受信時のヘッダ(例えば、サイズ、プロトコルなど)に影響されないので、いずれも汎用的な命令であると言える。
以下の表1に、リライトエンジンがプロトコルヘッダの変更のために使用する、汎用的な命令の一覧を示す。このように、少数セットの汎用的な命令を、受信時のパケットのヘッダ(例えば、サイズ、プロトコルなど)にかかわらずヘッダの変更に用いることができるのは、その変更対象のパケットのヘッダが変更に先立って汎用化されているからである。典型的に、これら汎用的な命令は、ソフトウェアによりプログラム可能なマイクロコードのように機能する。
Figure 0006594672
デリート(DELETE)命令は、汎用化後のプロトコルレイヤ内において開始(Start)位置からサイズ(Size)分のバイトを、無効なバイトとすることによりデリートし得る。具体的に述べると、ビットベクトルのうち、これらのバイトに対応するビットが0にマークされ得る。
コピー(COPY)命令は、ソース(Source)のソースオフセット(SourceOffset)から、サイズ(Size)分のバイトのデータを、汎用化後のプロトコルレイヤの宛先オフセット(DestinationOffset)にコピーし得る。また、コピー(COPY)命令は、ソース(Source)のデータの有効性に応じて、対応するコピー先のバイトを有効なバイト又は無効なバイトにし得る。具体的に述べると、ビットベクトルにおいて無効なバイトを表すビットが0にマークされ得る。ビットベクトルにおいて有効なバイトを表すビットが1にマークされ得る。また、コピー(COPY)命令は、ビットマスク(Bitmask)を用いてビットマスク演算を実行可能であり得る。また、コピー(COPY)命令は、コピー一定ビットマスク(copyConstantBitMask)およびコピー一定データ(copyConstantData)を使用可能であり得る。具体的に述べると、コピー一定ビットマスク(copyConstantBitMask)が所与のビット位置に「1」を有するとき、コピー一定データ(copyConstantData)における対応する位置のバイトを、汎用化後のヘッダレイヤにおける対応する位置にコピーし得る。一部の実施形態では、一定データはテーブルに記憶されている。一部の実施形態では、一定データが、ソフトウェアで定義される。
移動(MOVE)命令は、汎用化後のプロトコルレイヤ内において開始オフセット(StartOffset)からサイズ(Size)分のバイトを、宛先オフセット(DestinationOffset)に移動し得る。また、移動(MOVE)命令は、ソース(Source)のデータの有効性に応じて、対応する移動先のバイトを有効なバイト又は無効なバイトにし得る。具体的に述べると、ビットベクトルにおいて無効なバイトを表すビットが0にマークされ得る。ビットベクトルにおいて有効なバイトを表すビットが1にマークされ得る。
少なくとも1つのカウンタ(計数手段)を用いることにより、実行された全ての演算についての追加された又はデリートされたバイト数が計数され得る。この少なくとも1つのカウンタは、ハードウェアカウンタであり得る。あるいは、この少なくとも1つのカウンタは、ソフトウェアカウンタであり得る。この少なくとも1つのカウンタは、統計目的およびその他の目的で、その計数値を監視し得る。一部の実施形態では、リライトエンジンが、変更前のビットベクトルと変更後のビットベクトルとの2つのビットベクトルにXOR演算を実行することにより、変更のあったビット数をハードウェアに認識させる。この情報は、デリートされた又は追加されたバイトの数の計算に利用され得る。
図16に、本発明の一部の実施形態での、リライトエンジンの他の動作方法1600を示す。このリライトエンジンは、ネットワークスイッチの一部であり、パケットをネットワークスイッチから送出される前に変更する。過程1605で、パケットの各プロトコルヘッダを、当該プロトコルヘッダの汎用フォーマットに従って汎用化する。この汎用フォーマットは、そのプロトコルについて想定されるフィールド全てを備える。よって、それら各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一であり得る。汎用化後の各プロトコルヘッダは、ビットベクトルを備え得る。このビットベクトルは、汎用化後のプロトコルヘッダの各バイトに対して1ビットを有し得る。このビットベクトルは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされる。ここで、無効フィールドとは、受信時のパケットのプロトコルヘッダ内に存在しないフィールドであり、有効フィールドとは、受信時のパケットのプロトコルヘッダ内に存在するフィールドである。
過程1610で、前記ネットワークスイッチのメモリに記憶された汎用的な命令のセットから、少なくとも1つの命令を用いることにより、汎用化後の少なくとも1つのプロトコルヘッダを変更する。汎用化後の少なくとも1つのプロトコルヘッダを、前記ネットワークスイッチの送信ポートの出口側ポートタイプに基づいて変更し得る。汎用化後の少なくとも1つのプロトコルヘッダを変更すると、ビットベクトルが更新され得る。
汎用的な命令の前記セットは、受信時のパケットのヘッダにかかわらず、ヘッダを変更することができる。したがって、汎用的な命令の前記セットは、あるプロトコルの、第1の変種のパケットヘッダを変更するのにも第2の変種のパケットヘッダを変更するのにも使用され得る。同様に、汎用的な命令の前記セットは、第1のプロトコルのパケットヘッダを変更するのにも第2のプロトコルのパケットヘッダを変更するのにも使用され得る。
図17に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1700を示す。過程1705で、ネットワークスイッチのメモリ内に、汎用的な命令のセットを保持する。
過程1710で、前記ネットワークスイッチの受信ポートでパケットを受信する。
過程1715で、前記パケットの各プロトコルヘッダを、当該プロトコルヘッダの汎用フォーマットに従って汎用化する。前記パケットの前記プロトコルヘッダから、欠けているフィールドを検出し得る。そのプロトコルヘッダを、前記検出の結果に基づいて、前記欠けているフィールドを含めることにより、前記汎用フォーマットに拡張し得る。汎用化後の各プロトコルヘッダは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされたビットベクトルを備える。ここで、無効フィールドとは、受信時のパケットのプロトコルヘッダ内に存在しないフィールドであり、有効フィールドとは、受信時のパケットのプロトコルヘッダ内に存在するフィールドである。
過程1720で、汎用的な命令の前記セットから、少なくとも1つの命令を、汎用化後のプロトコルヘッダに適用することにより、汎用化後の少なくとも1つのプロトコルヘッダを変更する。これにより、前記ビットベクトルが更新される。
過程1725で、更新後のビットベクトルに基づいて、新しいプロトコルヘッダを形成する。
過程1730で、前記パケットを、前記新しいプロトコルヘッダ付きで、前記ネットワークスイッチの送信ポートから送信する。一部の実施形態では、前記パケットを前記新しいプロトコルヘッダ付きで送信するのに先立って、実行された全てのオペレーション(演算)について、追加された又はデリートされたバイト数を計数する。
[変更後のプロトコルヘッダの、ビットベクトルを用いての減縮(縮小)]
リライトエンジンは、プロトコルヘッダを変更用の汎用フォーマットに基づいて拡張するためだけに限らず、そのプロトコルヘッダを当該汎用フォーマットから「通常の」フォーマットに減縮するためにも、各プロトコルヘッダに対するビットベクトルを用い得る。典型的に、ビットベクトルの各ビットは、汎用化後のプロトコルヘッダ内の1バイトを表している。ビットベクトルにおいて0にマークされたビットは無効なバイトに対応し、1にマークされたビットは有効なバイトに対応する。汎用化後のプロトコルヘッダに対して全ての命令が実行された後、リライトエンジンが、ビットベクトルを用いて無効なバイトを全て除外することにより、新しいプロトコルヘッダを形成し得る。このように、リライトエンジンは、ビットベクトルを用いて、パケット内のプロトコルヘッダを拡張することも減縮することも可能であり得る。つまり、汎用的な命令のセットを用いることにより、パケットの柔軟な変更が実施可能になり得る。
一例として仮定1を参照すると、図9Eのビットベクトル920は、図9Bの汎用化後のプロトコルヘッダ905にデリート(Delete)命令を適用してなる、図9Dの変更後のプロトコルヘッダ915を表している。この仮定1では、カスタマVLANタグがデリートされることで、そのカスタマVLANタグの4バイト分が無効にされる。すなわち、ビットベクトル920において、カスタマVLANタグに対応するビットが0にマークされる。全ての命令(仮定1ではデリート(Delete)命令)が実行された後、リライトエンジンが、ビットベクトル920を用いて無効なバイトを全て除外する。これにより、ビットベクトル920が減縮される。減縮後のビットベクトルに基づいて、新しいプロトコルヘッダが形成される。図9Fには、無効なバイトが全て除外されてなる新しいプロトコルヘッダ925が示されている。仮定1のパケットは、この新しいヘッダ925付きで送信イーサネットポートから送出される。
他の例として仮定2を参照すると、図10Dのビットベクトル1015は、図10Aのプロトコルヘッダ1000にデリート(Delete)命令を適用してなる、図10Cの変更後のプロトコルヘッダ915を表している。この仮定2では、サービスVLANタグおよびカスタマVLANタグがデリートされることで、それらサービスVLANタグの4バイト分およびカスタマVLANタグの4バイト分が無効にされる。すなわち、ビットベクトル1015において、サービスVLANタグに対応するビットおよびカスタマVLANタグに対応するビットが0にマークされる。全ての命令(仮定2では2回のデリート(Delete)命令)が実行された後、リライトエンジンが、ビットベクトル1015を用いて無効なバイトを全て除外する。これにより、ビットベクトル1015が減縮される。減縮後のビットベクトルに基づいて、新しいプロトコルヘッダが形成される。図10Eには、無効なバイトが全て除外されてなる新しいプロトコルヘッダ1020が示されている。仮定2のパケットは、この新しいヘッダ1020付きで送信イーサネットポートから送出される。
図18に、本発明の一部の実施形態での、リライトエンジンのさらなる他の動作方法1800を示す。このリライトエンジンは、ネットワークスイッチの一部であり、パケットをネットワークスイッチから送出される前に変更する。過程1805で、汎用化後の各プロトコルヘッダに対するビットベクトルを保持する。汎用化後のプロトコルヘッダとは、パケットのうち、汎用フォーマットに拡張されたプロトコルヘッダのことである。この汎用フォーマットは、そのプロトコルについて想定される全てのフィールドを備えている。それら各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一であり得る。前記ビットベクトルは、汎用化後のプロトコルヘッダの各バイトに対して1ビットを有し得る。
過程1810で、汎用化後の少なくとも1つのプロトコルヘッダの前記変更に基づいて、前記ビットベクトルを更新する。その変更過程は、ネットワークスイッチのメモリに記憶された汎用的な命令のセットから、少なくとも1つの命令を用いることにより、汎用化後の少なくとも1つのプロトコルヘッダを変更することを含み得る。
過程1815で、更新後のビットベクトルを用いて、汎用化後の少なくとも1つのプロトコルヘッダを圧縮する。一部の実施形態では、過程1815に先立って、前記ビットベクトルと更新後の当該ビットベクトルとにXOR演算を実行することにより、変更のあったビット数を求める。これにより、リライトエンジンは、デリートされたバイトおよび追加されたバイトの数を計算することができる。
図19に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法1900を示す。過程1905で、このネットワークスイッチの受信ポートでパケットを受信する。
過程1910で、前記パケットにおける各プロトコルヘッダを、そのプロトコルヘッダの汎用フォーマットに従って汎用化する。前記パケットにおけるそのプロトコルヘッダから、欠けているフィールドを検出し得る。具体的に述べると、そのプロトコルヘッダを、前記検出の結果に基づいて、欠けているフィールドを含めることにより、汎用フォーマットに拡張し得る。
過程1915で、汎用化後の各プロトコルヘッダに対するビットベクトルを保持する。このビットベクトルは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされる。
過程1920で、汎用化後の少なくとも1つのプロトコルヘッダを変更することにより、前記ビットベクトルが更新される。その変更過程は、ネットワークスイッチのメモリに記憶された汎用的な命令のセットから、少なくとも1つの命令を用いて、汎用化後の少なくとも1つのプロトコルヘッダを変更することを含み得る。具体的に述べると、汎用化後の少なくとも1つのプロトコルヘッダを、ネットワークスイッチの送信ポートの出口側ポートタイプに基づいて変更し得る。
過程1925で、更新後のビットベクトルについて、そのビットベクトルにおいて0にマークされたビットを全て除外するようにシフトすることにより、当該更新後のビットベクトルを減縮する。
過程1930で、減縮後のビットベクトルに基づいて、コンパクトなプロトコルヘッダを形成する。前記パケットは、少なくともこのコンパクトなプロトコルヘッダ付きで、前記ネットワークスイッチの送信ポートから送出され得る。一部の実施形態では、パケットを送出する過程に先立って、実行された全てのオペレーション(演算)について、追加された又はデリートされたバイト数を計数する。
[ポインタ構造]
受信パケットから、複数の互いに異なるプロトコルレイヤを汎用化のためにそれぞれ抽出したり、これらのプロトコルレイヤの変更後にパケットを再構築したりするのに、ポインタ構造(ポインタ構造体)が使用され得る。このポインタ構造は、N+1個のレイヤポインタおよびそのパケット内の全てのヘッダの合計サイズを含み得る。典型的に、このポインタ構造は、パーサエンジンにより供給されるデータを用いて予め更新(初期化)され、リライトエンジンが、そのポインタ構造を用いてパケットを個々のレイヤに分割し、さらに、そのポインタ構造を用いてこれら個々のレイヤを情報処理で(知的に(intelligently))継合する。具体的に述べると、リライトエンジンは、パケットを個々のレイヤに分割した後、プロトコルヘッダを汎用化し、汎用化後のプロトコルヘッダを変更し、さらに、無効なバイトを全て除外することによって汎用化後のプロトコルヘッダを圧縮し得る。リライトエンジンは、レイヤを変更すると、前記レイヤポインタを更新し得る。パケットをネットワークスイッチから送信するのに先立って、更新後のレイヤポインタを用いて、互いに異なるプロトコルレイヤを互いに継合し得る。このようにプロトコルレイヤを互いに継合するため、複数のプロトコルレイヤを実体的には連続させずとも、レイヤポインタによってあたかもプロコルレイヤが連続するかのように扱う(仮想的に連続させる)ことが可能となる。
図20に、本発明の一部の実施形態での、レイヤ構造の一例2000を示す。ここでは、受信パケットが、独自ヘッダ(独自プロトコルのヘッダ)、イーサネット、IPv4、UDP、VxLANおよびイーサネットの各プロトコルレイヤを有していると仮定する。さらに、ネットワークスイッチのパーサエンジンが最大で8層のレイヤをパース処理可能な一方で、それと並行してリライトエンジンにより変更可能なプロトコルレイヤの層数が、(ソフトウェア要求および/またはハードウェア能力のために)先頭からN層(ここでは、N=4とする)のプロトコルレイヤに限られるものと仮定する。一部の実施形態において、パーサエンジンは、パケット内における各プロトコルヘッダの開始位置等のデータをリライトエンジンに供給する。
この例におけるリライトエンジンは、パケットの先頭から4層のプロトコルレイヤしか変更できないので、パーサエンジンからの関連データのみを、すなわち、パーサエンジンから独自ヘッダ、イーサネット、IPv4およびUDPからなる先頭から4層のプロトコルレイヤに関するデータのみを用い得る。このデータを用いて、そのパケットに対するポインタ構造が初期化され得る。具体的に述べると、レイヤポインタ0(LayerPointer0)が、そのパケット内における独自ヘッダ(すなわち、レイヤ0)の開始位置である0に設定され、レイヤポインタ1(LayerPointer1)が、そのパケット内におけるイーサネットヘッダ(すなわち、レイヤ1)の開始位置である16に設定され、レイヤポインタ2(LayerPointer2)が、そのパケット内におけるIPv4ヘッダ(すなわち、レイヤ2)の開始位置である36に設定され、レイヤポインタ3(LayerPointer3)が、そのパケット内におけるUDPヘッダ(すなわち、レイヤ3)の開始位置である48に設定され、レイヤポインタ4(LayerPointer4)が、リライトエンジンにより変更されない、ヘッダの残りの部分の開始位置である56に設定され得る。一部の実施形態において、リライトエンジンは、ヘッダのサイズを算出してヘッダサイズ(HeaderSize)(すなわち、全てのヘッダの合計サイズ)を223に設定する。
リライトエンジンは、これらのレイヤポインタを用いて、先頭から4層のプロトコルレイヤ(すなわち、独自ヘッダ、イーサネット、IPv4およびUDP)を変更用に汎用化し得る。そして、リライトエンジンは、変更を実施した後、無効なバイトを全て除外することにより、変更後のプロトコルヘッダを圧縮し得る。典型的に、プロトコルヘッダが変更されると、前記レイヤポインタが更新される。
また、これらのレイヤポインタは終点ポインタを形成し得る。前記ヘッダサイズ(HeaderSize)を伴ったこの終点ポインタは、ヘッダのボディに関連付けられる。ヘッダのボディとは、そのヘッダにおいて変更されない部分であって、後で継合するために伝達される部分のことである。全ての変更が実行されて、変更されたヘッダが圧縮されると、同じく変更された前記レイヤポインタを用いて、これら変更後のヘッダ同士がそれらのボディと一緒に継合され得る。
リライトエンジンが変更できるレイヤの層数は限られ得る。一部の実施形態では、リライトエンジンが任意のプロトコルレイヤを拡張できる程度(大きさ)も限られ得る。この実施形態では、リライトエンジンが、2つの隣り合うレイヤポインタ同士を減算することにより、プロトコルレイヤのサイズを抽出する。そのレイヤのサイズがリライトエンジンのハードウェア能力を超えている場合、当該リライトエンジンは、1つ前のレイヤポインタを用いて情報処理でボディを形成し得る。
1つのプロトコルレイヤを拡張できる大きさが最大40バイトであるにもかかわらず、そのプロトコルのなかで最も大きい変種が64バイトであると仮定する。一部の実施形態において、リライトエンジンは、変更のためにプロトコルヘッダを最大40バイトまで拡張する。リライトエンジンは、変更を実施した後、レイヤポインタを用いて、未変更のバイトを変更されたバイトに継合し得る。
レイヤポインタを使用することにより、プロトコルレイヤを1つずつ取り扱うことになるので、ハードウェアのロジックや複雑性を大幅に軽減することができる。具体的に述べると、ハードウェアの命令の範囲を、所与のプロトコルレイヤに絞ることができる。すなわち、命令エンジンが前後のレイヤに影響されないので、各層に必要な命令を増やしたい場合には、命令ハードウェア(命令を含むハードウェア)をマルチパスで利用すればよい。換言すれば、命令の内部状態に命令間で相関性がないことから、複数の命令を並行して利用することができる。同様に、複数層のレイヤを並行して変更することも可能である。
図21に、本発明の一部の実施形態での、リライトエンジンのさらなる他の動作方法2100を示す。このリライトエンジンは、ネットワークスイッチの一部であり、パケットをネットワークスイッチから送出される前に変更する。過程2105で、各パケットに対するポインタ構造を保持する。このポインタ構造は、レイヤポインタおよびそのパケット内の全てのヘッダの合計サイズを含む。これらレイヤポインタのそれぞれは、パケット内の関連レイヤの開始位置に対応する。
前記ポインタ構造はN+1個のレイヤポインタを含み得る。リライトエンジンにより、パケット内のN層のレイヤを変更し得る。前記レイヤポインタは終点を形成し得る。この終点は、前記合計サイズを伴って、ヘッダのボディを示し得る。ヘッダのボディとは、リライトエンジンにより変更されないヘッダ部分である。
過程2110で、パケットを、レイヤの変更のために、前記レイヤポインタに基づいてレイヤに分割する。そのパケットのプロトコルヘッダから、欠けているフィールドを検出し得る。このプロトコルヘッダを、前記検出の結果に基づいて、そのプロトコルの汎用フォーマットに拡張し得る。この汎用フォーマットは、そのプロトコルについて想定されるフィールド全てを備えている。それら各フィールドのオフセットは、そのプロトコルヘッダのプロトコルの変種にかかわらず同一であり得る。汎用化後の各プロトコルヘッダは、無効フィールドについてはビットが0にマークされて有効フィールドについてはビットが1にマークされたビットベクトルを備え得る。汎用的な命令のセットから、少なくとも1つの命令を用いることにより、汎用化後のプロトコルヘッダを変更し得る。典型的に変更後に前記ビットベクトルを更新する。
過程2115で、レイヤポインタを、レイヤの変更の結果に基づいて更新する。
過程2120で、複数のレイヤを、更新後のレイヤポインタに基づいて互いに継合する。
図22に、本発明の一部の実施形態での、ネットワークスイッチのさらなる他の動作方法2200を示す。過程2205で、このネットワークスイッチの受信ポートでパケットを受信する。
過程2210で、ポインタ構造を用いることにより、そのパケットのプロトコルレイヤを互いに分離する。このポインタ構造は、そのパケット内のN+1個の位置へのN+1個のレイヤポインタ、および当該パケット内の全てのヘッダの合計サイズを含み得る。前記位置は、プロトコルレイヤの開始位置であり得る。そのパケットをパース処理したデータに基づいて、前記ポインタ構造を初期化し得る。
過程2215で、分離後のプロトコルレイヤを、変更用に汎用化する。各レイヤについて、当該レイヤのサイズを抽出することにより、そのサイズが当該レイヤを変更するためのハードウェア能力を超えているか否かを判断し得る。前記ポインタ構造における2つの隣り合うレイヤポインタ同士を減算することにより、前記サイズを抽出し得る。前記判断の結果に基づいて、前記2つの隣り合うレイヤポインタのうちの先のレイヤポインタを用いてボディを形成し得る。
過程2220で、前記ポインタ構造を、変更に基づいて更新する。
過程2225で、更新後のポインタ構造を用いることにより、変更後のプロトコルレイヤを情報処理で継合する。これにより、新しいプロトコルヘッダスタックを形成する。
過程2230で、前記パケットを、その新しいプロトコルヘッダスタック付きで、ネットワークスイッチの送信ポートから送出する。
当業者であれば、上記以外にも用途や利点が存在することが理解できるであろう。これまでの本発明の説明は幾つかの具体例に基づいたものであったが、当業者であれば、本発明の精神を逸脱することなく本発明をその他の具体的な形態でも実施可能であることを理解できるであろう。すなわち、当業者であれば、本発明が前述の具体例に限定されるものではなく、添付の特許請求の範囲により規定されるものであることを理解するであろう。

Claims (25)

  1. ネットワークスイッチのリライトエンジンの動作方法であって、
    パケットの各プロトコルヘッダを、当該プロトコルヘッダ用の汎用フォーマットに従って汎用化する過程であって、汎用化後の各プロトコルヘッダは、無効フィールドについてはビットが第1の値にマークされて有効フィールドについてはビットが第2の値にマークされたビットベクトルに対応し、前記汎用フォーマットは、前記プロトコルヘッダのプロトコルによってサポートされる全てのフィールドを含むフォーマットである、過程と、
    当該ネットワークスイッチのメモリに記憶された汎用的な命令のセットから、少なくとも1つの命令を用いて、汎用化後の少なくとも1つのプロトコルヘッダを変更する過程と、
    を含む、方法。
  2. 請求項1に記載の方法において、前記フィールドの各々は、前記プロトコルヘッダのプロトコルの変種にかかわらず同一のオフセットを有する、方法。
  3. 請求項1に記載の方法において、前記ビットベクトルが、汎用化後のプロトコルヘッダの各バイトに対して1ビットを有する、方法。
  4. 請求項1に記載の方法において、汎用化後の前記少なくとも1つのプロトコルヘッダを、当該ネットワークスイッチの送信ポートの出口側ポートタイプ(egress portType)に基づいて変更する、方法。
  5. 請求項1に記載の方法において、汎用化後の前記少なくとも1つのプロトコルヘッダを変更すると、前記ビットベクトルが更新される、方法。
  6. 請求項1に記載の方法において、汎用的な命令の前記セットが、あるプロトコルの第1の変種のパケットヘッダを変更するために、かつ、当該プロトコルの第2の変種のパケットヘッダを変更するために使用される、方法。
  7. 請求項1に記載の方法において、汎用的な命令の前記セットが、第1のプロトコルのパケットヘッダを変更するために、かつ、第2のプロトコルのパケットヘッダを変更するために使用される、方法。
  8. ネットワークスイッチの動作方法であって、
    前記ネットワークスイッチのメモリ内に、汎用的な命令のセットを保持する過程と、
    前記ネットワークスイッチの受信ポートでパケットを受信する過程と、
    前記パケットの各プロトコルヘッダを、当該プロトコルヘッダ用の汎用フォーマットに従って汎用化する過程であって、汎用化後の各プロトコルヘッダが、無効フィールドについてはビットが第1の値にマークされて有効フィールドについてはビットが第2の値にマークされたビットベクトルに対応し、前記汎用フォーマットは、前記プロトコルヘッダのプロトコルによってサポートされる全てのフィールドを含むフォーマットである、過程と、
    汎用的な命令の前記セットから、少なくとも1つの命令を、汎用化後のプロトコルヘッダに適用することにより、汎用化後の少なくとも1つのプロトコルヘッダを変更する過程であって、これにより、前記ビットベクトルが更新される過程と、
    更新後のビットベクトルに基づいて、新しいプロトコルヘッダを形成する過程と、
    前記パケットを、前記新しいプロトコルヘッダ付きで、前記ネットワークスイッチの送信ポートから送信する過程と、
    を含む、方法。
  9. 請求項に記載の方法において、汎用的な命令の前記セットにおける各命令が、ソフトウェアによりプログラム可能なマイクロコードとして実現される、方法。
  10. 請求項に記載の方法において、汎用的な命令の前記セットが、開始(Start)およびサイズ(Size)をパラメータとして有するデリート(Delete)命令を含む、方法。
  11. 請求項に記載の方法において、汎用的な命令の前記セットが、ソース(Source)、ソースオフセット(SourceOffset)、サイズ(Size)、宛先オフセット(DestinationOffset)、ビットマスク(Bitmask)、コピー一定ビットマスク(copyConstantBitMask)およびコピー一定データ(copyConstantData)をパラメータとして有するコピー(Copy)命令を含む、方法。
  12. 請求項11に記載の方法において、前記コピー(Copy)命令が、ソース(Source)のソースオフセット(SourceOffset)から、サイズ(Size)分のバイトのデータを、汎用化後のプロトコルヘッダの宛先オフセット(DestinationOffset)にコピーする、方法。
  13. 請求項11に記載の方法において、前記コピー(Copy)命令が、ビットマスク(Bitmask)を用いてビットマスク演算を実行する、方法。
  14. 請求項11に記載の方法において、コピー一定ビットマスク(copyConstantBitMask)が所与のビット位置に第3の値を有するとき、コピー一定データ(copyConstantData)における対応する位置のバイトを、汎用化後のプロトコルヘッダにおける対応する位置にコピーする、方法。
  15. 請求項11に記載の方法において、コピー一定データ(copyConstantData)が、前記メモリに記憶され、かつ、ソフトウェアで定義される、方法。
  16. 請求項11に記載の方法において、対応する宛先のバイトの有効性がソース(Source)のデータの有効性に依存し、前記ビットベクトルにおいて無効なバイトを表すビットは前記第1の値にマークされて有効なバイトを表すビットは前記第2の値にマークされる、方法。
  17. 請求項に記載の方法において、汎用的な命令の前記セットが、開始オフセット(StartOffset)、宛先オフセット(DestinationOffset)およびサイズ(Size)をパラメータとして有する移動(Move)命令を含む、方法。
  18. 請求項17に記載の方法において、前記移動(Move)命令が、汎用化後のプロトコルヘッダ内において開始オフセット(StartOffset)からサイズ(Size)分のバイトを、宛先オフセット(DestinationOffset)に移動する、方法。
  19. 請求項17に記載の方法において、対応する宛先のバイトの有効性がソース(Source)のデータの有効性に依存し、前記ビットベクトルにおいて無効なバイトを表すビットは前記第1の値にマークされて有効なバイトを表すビットは前記第2の値にマークされる、方法。
  20. 請求項に記載の方法において、各プロトコルヘッダを汎用化する過程が、
    前記パケットのプロトコルヘッダから、欠けているフィールドを検出すること、および
    そのプロトコルヘッダを、前記検出の結果に基づいて、前記欠けているフィールドを含めることにより、前記汎用フォーマットに拡張すること、
    を含む、方法。
  21. 請求項20に記載の方法において、さらに、前記パケットを前記新しいプロトコルヘッダ付きで送信する過程に先立って、
    実行された全てのオペレーションについて、追加された又はデリートされたバイト数を計数する過程、
    を含む、方法。
  22. 複数のプロトコルの異なる1つにそれぞれ対応する1つ以上のプロトコルレイヤと共にヘッダをそれぞれ有するパケットを送受信する入力ポートおよび出力ポートであって、前記プロトコルの各々は、フィールドの異なる組合せを有する複数のプロトコルレイヤ変種をサポートし、さらに、前記パケットの前記プロトコルレイヤの各々は、前記プロトコルレイヤが対応する前記プロトコルによってサポートされた前記プロトコルレイヤ変種のうちの1つである、入力ポートおよび出力ポートと、
    前記プロトコルのうちの1つにそれぞれ関連付けられ、ヘッダの変更を行うために用いられる汎用的な命令のセットを記憶するメモリと、
    前記プロトコルレイヤがどの前記プロトコルレイヤ変種を含むかに関わらず、前記プロトコルレイヤの前記プロトコルに関連する前記汎用的な命令の少なくとも1つを適用することによって、前記プロトコルレイヤの各々を変更するリライトエンジンと、
    を備える、ネットワークスイッチ。
  23. 請求項22に記載のネットワークスイッチにおいて、ソフトウェア定義のマッピングのうち、前記プロトコルレイヤを前記プロトコルレイヤの前記プロトコルによってサポートされた全てのフィールドを含む汎用フォーマットに変換することで前記プロトコルレイヤに対応する前記プロトコルのうちの1つに特有であるマッピングに従って、前記ヘッダの各プロトコルレイヤが、前記リライトエンジンによって汎用後のプロトコルレイヤに汎用化される、ネットワークスイッチ。
  24. 請求項22に記載のネットワークスイッチにおいて、汎用化後の各プロトコルレイヤが、無効フィールドについてはビットが第1の値にマークされて有効フィールドについてはビットが第2の値にマークされたビットベクトルを備える、ネットワークスイッチ。
  25. 請求項22に記載のネットワークスイッチにおいて、前記汎用的な命令セットが、デリート(Delete)命令、コピー(Copy)命令および移動(Move)命令を含む、ネットワークスイッチ。
JP2015122561A 2014-06-19 2015-06-18 汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置 Active JP6594672B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/309,650 US9531848B2 (en) 2014-06-19 2014-06-19 Method of using generic modification instructions to enable flexible modifications of packets and an apparatus thereof
US14/309,650 2014-06-19

Publications (2)

Publication Number Publication Date
JP2016005283A JP2016005283A (ja) 2016-01-12
JP6594672B2 true JP6594672B2 (ja) 2019-10-23

Family

ID=53541502

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015122561A Active JP6594672B2 (ja) 2014-06-19 2015-06-18 汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置

Country Status (7)

Country Link
US (1) US9531848B2 (ja)
EP (1) EP2958286B1 (ja)
JP (1) JP6594672B2 (ja)
KR (1) KR102368166B1 (ja)
CN (1) CN105282136B (ja)
HK (1) HK1220835A1 (ja)
TW (1) TW201605207A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110471776B (zh) * 2019-06-27 2022-02-08 浙江口碑网络技术有限公司 应用数据通信方法、装置及系统

Family Cites Families (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5805808A (en) 1991-12-27 1998-09-08 Digital Equipment Corporation Real time parser for data packets in a communications network
US5793954A (en) * 1995-12-20 1998-08-11 Nb Networks System and method for general purpose network analysis
US6088356A (en) 1997-06-30 2000-07-11 Sun Microsystems, Inc. System and method for a multi-layer network element
US6341129B1 (en) 1998-04-03 2002-01-22 Alteon Networks, Inc. TCP resegmentation
US7333484B2 (en) 1998-08-07 2008-02-19 Intel Corporation Services processor having a packet editing unit
FI106504B (fi) 1998-10-06 2001-02-15 Nokia Networks Oy Datan segmentointimenetelmä tietoliikennejärjestelmässä
US6356951B1 (en) * 1999-03-01 2002-03-12 Sun Microsystems, Inc. System for parsing a packet for conformity with a predetermined protocol using mask and comparison values included in a parsing instruction
US6789116B1 (en) 1999-06-30 2004-09-07 Hi/Fn, Inc. State processor for pattern matching in a network monitor device
JP4708650B2 (ja) 1999-12-02 2011-06-22 パナソニック株式会社 光ディスク媒体およびその記録方法、記録装置
JP3613102B2 (ja) 1999-12-14 2005-01-26 日本電気株式会社 フレーム構成方法、フレーム構成装置およびフレーム構成転送システム
JP4099930B2 (ja) 2000-06-02 2008-06-11 株式会社日立製作所 ルータ装置及びvpn識別情報の設定方法
GB0023169D0 (en) 2000-09-20 2000-11-01 Ibm Message parsing in message processing systems
US7451235B2 (en) * 2000-10-11 2008-11-11 Broadcom Corporation Dynamic delta encoding for cable modem header suppression
US6944168B2 (en) * 2001-05-04 2005-09-13 Slt Logic Llc System and method for providing transformation of multi-protocol packets in a data stream
US6904057B2 (en) 2001-05-04 2005-06-07 Slt Logic Llc Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification
JP4460195B2 (ja) * 2001-08-06 2010-05-12 株式会社日立製作所 パケット転送装置およびルーティング制御装置
US20030037154A1 (en) * 2001-08-16 2003-02-20 Poggio Andrew A. Protocol processor
US7580408B2 (en) 2001-11-21 2009-08-25 Alcatel Lucent Configurable packet processor
US7236501B1 (en) 2002-03-22 2007-06-26 Juniper Networks, Inc. Systems and methods for handling packet fragmentation
US7187694B1 (en) 2002-03-29 2007-03-06 Pmc-Sierra, Inc. Generic packet parser
JP2003308206A (ja) 2002-04-15 2003-10-31 Fujitsu Ltd プロセッサ装置
US20050232303A1 (en) 2002-04-26 2005-10-20 Koen Deforche Efficient packet processing pipeline device and method
US7408957B2 (en) 2002-06-13 2008-08-05 International Business Machines Corporation Selective header field dispatch in a network processing system
US20050281281A1 (en) 2003-01-24 2005-12-22 Rajesh Nair Port input buffer architecture
US7415596B2 (en) 2003-01-24 2008-08-19 Gigafin Networks, Inc. Parser table/production rule table configuration using CAM and SRAM
US7706363B1 (en) 2003-06-11 2010-04-27 Radlan Computer Communications, Ltd Method and apparatus for managing packets in a packet switched network
GB0320957D0 (en) * 2003-09-08 2003-10-08 Qinetiq Ltd Document authentication
US7411957B2 (en) 2004-03-26 2008-08-12 Cisco Technology, Inc. Hardware filtering support for denial-of-service attacks
US7580350B1 (en) 2004-03-30 2009-08-25 Extreme Networks, Inc. System for deriving packet quality of service indicator
US7385984B2 (en) * 2004-03-30 2008-06-10 Extreme Networks, Inc. Packet processing system architecture and method
US7822032B1 (en) * 2004-03-30 2010-10-26 Extreme Networks, Inc. Data structures for supporting packet data modification operations
US8200839B1 (en) 2004-04-30 2012-06-12 Rockstar Bidco Lp Method and apparatus for restoring service label information
JP4392294B2 (ja) 2004-06-15 2009-12-24 株式会社日立製作所 通信統計収集装置
JP4156568B2 (ja) 2004-06-21 2008-09-24 富士通株式会社 通信システムの制御方法、通信制御装置、プログラム
US7474619B2 (en) 2004-07-22 2009-01-06 International Business Machines Corporation Method and apparatus for providing fragmentation at a transport level along a transmission path
US7570661B2 (en) 2005-06-14 2009-08-04 Microsoft Corporation Script-based parser
US7603474B2 (en) 2005-10-05 2009-10-13 Microsoft Corporation Efficient endpoint matching using a header-to-bit conversion table
US9143585B2 (en) 2006-07-07 2015-09-22 Wi-Lan Inc. Method and system for generic multiprotocol convergence over wireless air interface
US7710959B2 (en) * 2006-08-29 2010-05-04 Cisco Technology, Inc. Private VLAN edge across multiple switch modules
CA2669932A1 (en) 2006-12-19 2008-06-26 International Business Machines Corporation Apparatus and method for analysing a network flow
US7822875B1 (en) 2006-12-22 2010-10-26 Marvell International Ltd. Method for flexible modifications to a packet
IL220238A (en) 2007-03-12 2014-03-31 Marvell Israel Misl Ltd A method and system for determining the location of fields in information units
US8825592B2 (en) 2008-03-12 2014-09-02 Web Access, Inc. Systems and methods for extracting data from a document in an electronic format
US7843919B2 (en) 2008-03-20 2010-11-30 International Business Machines Corporation Ethernet virtualization using a network packet alteration
KR101456563B1 (ko) 2008-05-14 2014-10-31 삼성전자주식회사 멀티 홉 릴레이 환경에서 대역폭 할당 요청과 할당 방법 및시스템
US8234369B2 (en) 2008-12-23 2012-07-31 Verizon Patent And Licensing Inc. Web page response monitoring
CN102273149A (zh) * 2008-12-23 2011-12-07 莫维克网络公司 一种利用多层协议的透明代理设备
US8902886B2 (en) 2009-04-23 2014-12-02 International Business Machines Corporation Canonicalization of network protocol headers
US8111704B2 (en) 2009-06-26 2012-02-07 Intel Corporation Multiple compression techniques for packetized information
US9008082B2 (en) 2009-12-07 2015-04-14 Telefonaktiebolaget L M Ericsson (Publ) Handling data packets received at a routing node
CN101777791B (zh) * 2009-12-18 2012-05-23 深圳市科陆电子科技股份有限公司 一种同时兼容多种电力负控系统通信协议的方法及其系统
US8472438B2 (en) 2010-04-23 2013-06-25 Telefonaktiebolaget L M Ericsson (Publ) Efficient encapsulation of packets transmitted on a packet-pseudowire over a packet switched network
EP2567524B1 (en) 2010-05-03 2019-06-26 Nokia Technologies Oy Protocol overhead reduction
US8537815B2 (en) 2010-06-17 2013-09-17 Apple Inc. Accelerating data routing
US8705533B1 (en) 2010-12-10 2014-04-22 Juniper Networks, Inc. Fast packet encapsulation using templates
TW201246867A (en) 2011-05-06 2012-11-16 Ralink Technology Corp Packet processing accelerator and method thereof
US8711860B2 (en) 2011-12-22 2014-04-29 Telefonaktiebolaget L M Ericsson (Publ) Controller for flexible and extensible flow processing in software-defined networks
US8521905B2 (en) 2011-12-22 2013-08-27 Telefonaktiebolaget L M Ericsson (Publ) System for flexible and extensible flow processing in software-defined networks
US9282173B2 (en) 2012-02-17 2016-03-08 Viavi Solutions Inc. Reconfigurable packet header parsing
EP3276977B1 (en) 2012-10-17 2020-04-29 Sony Corporation Data processing device, data processing method, and program
US9438517B2 (en) 2012-10-30 2016-09-06 Viavi Solutions Inc. Method and system for identifying matching packets
US9219694B2 (en) 2013-03-15 2015-12-22 Wisconsin Alumni Research Foundation Content addressable memory with reduced power consumption
US9769701B2 (en) 2013-06-14 2017-09-19 Texas Instruments Incorporated Header compression for wireless backhaul systems
US9444914B2 (en) 2013-09-16 2016-09-13 Annapurna Labs Ltd. Configurable parser and a method for parsing information units
US9628382B2 (en) 2014-02-05 2017-04-18 Intel Corporation Reliable transport of ethernet packet data with wire-speed and packet data rate match

Also Published As

Publication number Publication date
HK1220835A1 (zh) 2017-05-12
EP2958286A1 (en) 2015-12-23
TW201605207A (zh) 2016-02-01
US20150373159A1 (en) 2015-12-24
CN105282136B (zh) 2020-05-05
KR102368166B1 (ko) 2022-02-25
CN105282136A (zh) 2016-01-27
US9531848B2 (en) 2016-12-27
JP2016005283A (ja) 2016-01-12
EP2958286B1 (en) 2019-05-01
KR20150146406A (ko) 2015-12-31

Similar Documents

Publication Publication Date Title
JP6608628B2 (ja) パケットの固有の識別子を用いて、パケットの構造を特定する方法およびその装置
US20240022652A1 (en) A method of using bit vectors to allow expansion and collapse of header layers within packets for enabling flexible modifications and an apparatus thereof
JP6678401B2 (ja) 変更のためにパケットを個々のレイヤに分割し、変更後のレイヤを情報処理で継合する方法およびその装置
US9473601B2 (en) Method of representing a generic format header using continuous bytes and an apparatus thereof
JP6594671B2 (ja) パケットを汎用フォーマットに変更して、プログラマブルな変更を可能にする方法およびその装置
JP6594672B2 (ja) 汎用的な変更の指示を用いて、パケットの柔軟な変更を可能にする方法およびその装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180601

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20180601

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180601

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190308

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190318

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190826

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190925

R150 Certificate of patent or registration of utility model

Ref document number: 6594672

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250