CN106027427B - 基于fpga实现的hash平均分流方法及装置 - Google Patents
基于fpga实现的hash平均分流方法及装置 Download PDFInfo
- Publication number
- CN106027427B CN106027427B CN201610362307.5A CN201610362307A CN106027427B CN 106027427 B CN106027427 B CN 106027427B CN 201610362307 A CN201610362307 A CN 201610362307A CN 106027427 B CN106027427 B CN 106027427B
- Authority
- CN
- China
- Prior art keywords
- message
- address
- hash
- source
- fpga
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
- H04L49/3063—Pipelined operation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2441—Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
- H04L49/3009—Header conversion, routing tables or routing tags
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了基于FPGA实现的HASH平均分流方法及装置,其包括根据以太网报文的格式提取报文的源IP地址和目的IP地址;采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取出该报文所对应的CPU线程号;将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
Description
技术领域
本发明涉及报文处理技术,具体涉及一种基于FPGA实现的HASH平均分流方法及装置。
背景技术
在进行报文处理时,一般都是将报文分流后,送到相应的地方进行处理。目前,在进行报文分流时会根据五元组进行分流,如果报文没有五元组,那么报文就会送到特定线程,使得无法达到真正意义上的平均分流,分流后的报文在CPU中实现时,会消耗CPU的有效进程,大大降低CPU的工作效率。
发明内容
针对现有技术中的上述不足,本发明提供的基于FPGA实现的HASH平均分流方法及装置解决了现有报文分流时会消耗CPU有效进程,降低CPU工作效率的问题。
为了达到上述发明目的,本发明采用的技术方案为:
第一方面,提供一种基于FPGA实现的HASH平均分流方法,其包括以下步骤:
根据以太网报文的格式提取报文的源IP地址和目的IP地址;
采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;
对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;
将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;以及
CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
另一方面,提供一种基于FPGA实现的HASH平均分流装置,包括FPGA处理模块和CPU;所述FPGA处理模块包括:
报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址;
HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及
报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;
CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
本发明的有益效果为:该HASH平均分流方法及装置在进行报文分流时,通过计算报文的源IP地址和目的IP地址的处理的Hash值来获取整条报文的Hash值,根据Hash值查询其对应的CPU线程号,并将CPU线程号标记在报文的报文头上,CPU在进行报文处理时,只需要读取报文头上的CPU线程号将报文送到指定的线程进行处理。
通过该种方式处理后,CPU收到报文后,直接解析报文头部信息,就可将报文送到指定线程进行处理,不需要消耗CPU的有效进程,大幅度地提高了CPU的工作效率。
同时,由于根据以太网报文的格式提取报文的源IP地址和目的IP地址步骤至将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU步骤是在FPGA控制模块中实现的,进一步提高了CPU的工作效率。
另外,由于本方案只需要对报文的源IP地址和目的IP地址进行处理,采用该种方法后,可以解决部分报文五元组信息不完整时,报文被送到特定线程中,无法达到真正意义上报文平均分流的问题。
由于本方案是采用并行处理的方式,提高HASH计算的吞吐量。
附图说明
图1为基于FPGA实现的HASH平均分流方法一个实施例的流程图。
图2为基于FPGA实现的HASH平均分流装置的原理框图。
图3为RAM表。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
参考图1,图1示出了基于FPGA实现的HASH平均分流方法一个实施例的流程图。该方法100包括步骤101至步骤106:
在步骤101中,根据以太网报文的格式提取报文的源IP地址和目的IP地址。此处的报文可以是IPV4报文,也可以是IPV6报文,IPV4报文的地址位宽为32bits,IPV6报文的地址位宽为128bits。
在本发明的一个实施例中,当报文为PV6报文时,本方案还还包括将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段;之后在进入步骤102中进行后续处理工作。
在步骤102中,采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;此处HASH计算方法的计算公式为:
hash^=((hash<<5)+(*str)+(hash>>2))
其中,Str为一个四字节的数,为源IP地址和目的IP地址中的值,其位宽为32bits。
hash值的位宽为32bits,初值为0x4E67C6A7,源IP地址的源IP地址Hash值的计算方法为:源IP地址Hash值=0x4E67C6A7^((0x4E67C6A7<<5)+0xC0A8090A+(0x4E67C6A7>>2))=0x3B5D0901。
目的IP地址的目的IP地址Hash值的计算方法为:目的IP地址Hash值=0x4E67C6A7^((0x4E67C6A7<<5)+0xC0A80000+(0x4E67C6A7>>2))=0x3B5D003B。
在步骤103中,对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;具体地为,整条报文Hash值=源IP地址Hash值^目的IP地址Hash值=0x3B5D0901^0x3B5D003B=0x93A,该值供后续的查表单元进行使用。
如果源IP地址Hash值和目的IP地址Hash值地址互换时,即源IP地址Hash值=0xC0A80000(192.168.0.0)、目的IP地址Hash值=0xC0A8090A(192.168.9.10)。最终的HASH计算结果,整条报文Hash值=源IP地址Hash值^目的IP地址Hash值=0x3B5D003B^0x3B5D0901=0x93A。
为此,采用本方案的方法进行整条报文Hash值计算时,即使源IP地址Hash值和目的IP地址Hash值地址发生互换,整条报文Hash值仍一致,仍能保证整条报文被分流到同一个CPU线程中进行处理。
在步骤104中,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;
在RAM表中读取该报文所对应的CPU线程号的部分细节进行说明:
整条报文Hash值为32bits,在进行RAM表中查找报文所对应的CPU线程号时,只需要截取其中几个bits(可根据具体需求,决定采用多少的位来作为查表地址),进行查表。本方案中暂定提取低3bits,RAM表里的内容为CPU线程号。
RAM表在开始时可被初始化,写入固定的CPU线程值,本方案RAM的深度为8、位宽为8。目前在RAM表中,所支持的CPU线程号为:5、8、8、0、1、A、2、D。报文最终只会被分流到这些线程号中。
由整条报文Hash值,截取低3bits作为RAM表的查表地址,如H=0x93A(1001_0011_1010),取低3bits的值为010,根据图3示出来的RAM表进行查询,地址为010的项中,得到的结果为9,为此CPU的线程号即为9。同样,如果H=0x0,取低3bits值为000,查表得到的结果为5,CPU的线程号为5。
在步骤105中,将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;目前暂时考虑用8bits来指示CPU线程号(已可以指示256个不同的CPU线程),为此,只需在原始报文头部增添1Byte的线程号信息字段。在FPGA处理时,将原始报文延时一个时钟周期后,在头部添加上线程号,便可完成报文头的拼接。
在步骤106中,CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
其中,步骤101至步骤105均在FPGA控制模块中实现,步骤106在CPU中实现,采用这种方式进一步提高了CPU的工作效率。
由于IPv6报文的IP地址位宽为128bits,如果按照32bits进行一次迭代运算,那么就需要4次迭代,消耗的时间较长,为了缩短计算时间,为此考虑将128bits的IP地址,切割成4个32bits的数据,这4个str字段独立进行HASH计算,再将4个HASH值进行异或,得到最终的结果。下面结合本方法对IPV6报文求取其整条报文Hash值的具体过程进行详细地阐述:
例如:IPv6报文的源IP地址和目的IP地址分别为源IP地址=0xC0A8090A_C0A80000_C0A8090A_C0A8090A,目的IP地址=0xC0A80000_C0A80000_C0A80000_C0A8090A时,在此,分别将源IP地址和目的IP地址,截断成4个32bits数据,独立进行HASH计算。即源IP地址1=0xC0A8090A,源IP地址2=0xC0A80000,源IP地址3=0xC0A8090A,源IP地址4=0xC0A8090A;目的IP地址1=0xC0A80000,目的IP地址IP2=0xC0A80000,目的IP地址3=0xC0A80000,目的IP地址4=0xC0A8090A。
详细计算流程如下:
独立计算4个切分的源IP地址Hash值:源IP地址1Hash值=H(C0A8090A)=0x3B5D0901,源IP地址2Hash值=0x3B5D003B,源IP地址3Hash值=0x3B5D0901,源IP地址4Hash值=0x3B5D0901。
计算源IP地址的Hash值:源IP地址Hash值=源IP地址1Hash值^源IP地址2Hash值^源IP地址3Hash值^源IP地址4Hash值=0x93A。
独立计算4个目的IP地址的Hash值:目的IP地址1Hash值=0x3B5D003B,目的IP地址2Hash值=0x3B5D003B,目的IP地址3Hash值=0x3B5D003B,目的IP地址4Hash值=0x3B5D0901。
计算目的IP地址的Hash值:目的IP地址Hash值=目的IP地址1Hash值^目的IP地址21Hash值^目的IP地址31Hash值^目的IP地址4Hash值=0x93A
计算整条最终的HASH值:整条报文Hash值=源IP地址Hash值^目的IP地址Hash值=0。
至此,已完成对基于FPGA实现的HASH平均分流方法的描述,下面结合附图2,对基于FPGA实现的HASH平均分流装置进行详细地描述:
参考图2,图2示出了基于FPGA实现的HASH平均分流装置的流程图,如图2所示,该装置包括FPGA处理模块和CPU;所述FPGA处理模块包括:
报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址;
HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址的目的IP地址Hash值进行异或得到整条报文Hash值;
查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及
报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;
CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
在本发明的一个实施例中,本方案的报文可以为IPV4报文,也可以为IPV6报文;当报文为IPV6报文时,该FPGA处理模块还包括:报文拆分单元,用于将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段。
实施时,本方案的FPGA处理模块还包括报文缓存单元,用于缓存报文,当报文的CPU线程号出来时,将报文发送至报文头添加单元。
本方案的基于FPGA实现的HASH平均分流装置内部的HASH计算装置一次仅处理32bits数据,为了实现报文的快速处理,源IP地址和目的IP地址的处理分别位于不同的HASH计算装置内,也即对于地址位宽为32bits的IPV4报文需要两个HASH计算装置,对于地址位宽为128bits的IPV6报文则需要八个HASH计算装置,4个HASH计算装置用于处理源IP地址,另外4个用于处理目的IP地址。
综上所述,采用本方法对报文进行分流时,CPU直接解析报文头部信息,就可将报文送到指定线程进行处理,不需要消耗CPU的有效进程,大幅度地提高了CPU的工作效率。
Claims (10)
1.基于FPGA实现的HASH平均分流方法,其特征在于,包括以下步骤:
根据以太网报文的格式提取报文的源IP地址和目的IP地址;
采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;
对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;
将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;以及
CPU接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
2.根据权利要求1所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述报文为IPV4报文或IPV6报文;
当所述报文为IPV6报文时,还包括将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段;
之后,根据以太网报文的格式提取IPV6报文的多个数据片段的源IP地址和目的IP地址。
3.根据权利要求2所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述IPV4报文地址位宽为32bits,IPV6报文的地址位宽为128bits。
4.根据权利要求1所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述HASH计算方法的计算公式为:
hash^=((hash<<5)+(*str)+(hash>>2))
其中,Str为一个四字节的数,为源IP地址和目的IP地址中的值,其位宽为32bits。
5.根据权利要求1-4任一所述的基于FPGA实现的HASH平均分流方法,其特征在于,所述RAM的深度为8、位宽为8。
6.一种根据权利要求1-5任一所述方法的基于FPGA实现的HASH平均分流装置,其特征在于,包括FPGA处理模块和CPU;所述FPGA处理模块包括:
报文解析单元,用于根据以太网报文的格式提取报文的源IP地址和目的IP地址;
HASH计算装置,用于采用HASH计算方法获取源IP地址的源IP地址Hash值和目的IP地址的目的IP地址Hash值;并对源IP地址Hash值和目的IP地址Hash值进行异或得到整条报文Hash值;
查表单元,截取整条报文Hash值中的至少3个bits,采用至少3bits作为RAM表地址,读取RAM表中与该报文所对应的CPU线程号;以及
报文头添加单元,用于将报文所对应的CPU线程号标记在该报文的报文头上,并将标记后的报文发送至CPU;
CPU,用于接收并处理报文的报文头,根据报文头上的CPU线程号将该报文发送至指定的线程进行处理。
7.根据权利要求6所述的基于FPGA实现的HASH平均分流装置,其特征在于,所述报文为IPV4报文或IPV6报文;当所述报文为IPV6报文时,所述FPGA处理模块还包括:
报文拆分单元,用于将IPV6报文切割成多个与IPV4报文地址位宽相等的数据片段。
8.根据权利要求7所述的基于FPGA实现的HASH平均分流装置,其特征在于,所述IPV4报文地址位宽为32bits,IPV6报文的地址位宽为128bits。
9.根据权利要求8所述的基于FPGA实现的HASH平均分流装置,其特征在于:所述HASH计算装置一次仅处理32bits数据,所述源IP地址和目的IP地址的处理分别位于不同的HASH计算装置内。
10.根据权利要求6-9任一所述的基于FPGA实现的HASH平均分流装置,其特征在于:所述FPGA处理模块还包括报文缓存单元,用于缓存报文,当报文的CPU线程号出来时,将所述报文发送至报文头添加单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610362307.5A CN106027427B (zh) | 2016-05-27 | 2016-05-27 | 基于fpga实现的hash平均分流方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610362307.5A CN106027427B (zh) | 2016-05-27 | 2016-05-27 | 基于fpga实现的hash平均分流方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106027427A CN106027427A (zh) | 2016-10-12 |
CN106027427B true CN106027427B (zh) | 2019-06-04 |
Family
ID=57094347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610362307.5A Active CN106027427B (zh) | 2016-05-27 | 2016-05-27 | 基于fpga实现的hash平均分流方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106027427B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107248939B (zh) * | 2017-05-26 | 2020-07-31 | 中国人民解放军理工大学 | 基于hash存储器的网络流高速关联方法 |
CN107317761A (zh) * | 2017-06-29 | 2017-11-03 | 济南浪潮高新科技投资发展有限公司 | 基于fpga的100g以太分流方法及系统 |
CN109688069A (zh) * | 2018-12-29 | 2019-04-26 | 杭州迪普科技股份有限公司 | 一种处理网络流量的方法、装置、设备及存储介质 |
CN111181974A (zh) * | 2019-12-31 | 2020-05-19 | 国家计算机网络与信息安全管理中心 | 一种基于网络处理器实现流量预处理的装置和方法 |
CN114006863A (zh) * | 2021-11-02 | 2022-02-01 | 北京科东电力控制系统有限责任公司 | 一种多核负载均衡协同处理方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102916896A (zh) * | 2011-08-01 | 2013-02-06 | 赛尔网络有限公司 | 多路端口镜像混合数据流分流方法及设备 |
CN105337991A (zh) * | 2015-11-23 | 2016-02-17 | 湖南戎腾网络科技有限公司 | 一种一体化的报文流查找与更新方法 |
CN105450473A (zh) * | 2015-12-07 | 2016-03-30 | 湖南戎腾网络科技有限公司 | 一种面向lte网络的用户溯源关联方法及前端采集器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020161846A1 (en) * | 2001-01-29 | 2002-10-31 | Ulrich Thomas R. | Data path controller architecture |
-
2016
- 2016-05-27 CN CN201610362307.5A patent/CN106027427B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102916896A (zh) * | 2011-08-01 | 2013-02-06 | 赛尔网络有限公司 | 多路端口镜像混合数据流分流方法及设备 |
CN105337991A (zh) * | 2015-11-23 | 2016-02-17 | 湖南戎腾网络科技有限公司 | 一种一体化的报文流查找与更新方法 |
CN105450473A (zh) * | 2015-12-07 | 2016-03-30 | 湖南戎腾网络科技有限公司 | 一种面向lte网络的用户溯源关联方法及前端采集器 |
Also Published As
Publication number | Publication date |
---|---|
CN106027427A (zh) | 2016-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106027427B (zh) | 基于fpga实现的hash平均分流方法及装置 | |
WO2017016254A1 (zh) | Ipv6报文封装的处理方法和装置 | |
US10333845B2 (en) | Forwarding data packets | |
CN104380667A (zh) | 一种数据报文的路由方法和设备 | |
CN104184664B (zh) | 路由转发表项生成方法及装置 | |
CN105634942B (zh) | 转发报文的方法和交换机 | |
CN105024985A (zh) | 一种报文处理方法及装置 | |
BRPI0520404A2 (pt) | método de localizar geograficamente um nó de extremidade em uma rede de comunicação de dados de pacote, produto de programa de computador, e, nó de rede | |
CN108881033B (zh) | 基于fpga+npu的面向lte网络的高速用户溯源方法 | |
CN105991433B (zh) | 三层虚拟专用网接入二层虚拟专用网的方法和装置 | |
CN104079478B (zh) | 报文转发方法和装置 | |
WO2016177149A1 (zh) | 隧道的优先级设置方法及装置 | |
CN104135548B (zh) | 基于fpga的静态nat实现方法及装置 | |
CN103685058B (zh) | 控制流数据的服务质量的方法和OpenFlow控制器 | |
RU2019116128A (ru) | Система для подготовки сетевого трафика для быстрого анализа | |
DE602004007948D1 (de) | Verfahren und vorrichtung zum übersetzen von datenpaketen aus einem netzwerkprotokoll in ein anderes | |
EP2958284A2 (en) | A method of forming a hash input from packet contents and an apparatus thereof | |
CN102184234B (zh) | 用于查询、增加、更新或删除信息处理规则的方法和设备 | |
CN101699796B (zh) | 一种基于流信任的数据报文高速转发的方法、系统及路由器 | |
CN105471742B (zh) | 一种报文处理方法及设备 | |
EP3379781A1 (en) | Method for counting bgp community attribute or extended community attribute flow value, and device | |
CN105515995B (zh) | 报文处理方法及装置 | |
US9967178B1 (en) | Flow record size reduction | |
CN110519173A (zh) | 一种ip五元组表项的查找方法及查找系统 | |
CN104869062B (zh) | 一种数据包转发方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |