CN111222017A - 一种利用tcam实现浮动字符串匹配的系统 - Google Patents
一种利用tcam实现浮动字符串匹配的系统 Download PDFInfo
- Publication number
- CN111222017A CN111222017A CN201811407825.XA CN201811407825A CN111222017A CN 111222017 A CN111222017 A CN 111222017A CN 201811407825 A CN201811407825 A CN 201811407825A CN 111222017 A CN111222017 A CN 111222017A
- Authority
- CN
- China
- Prior art keywords
- frame
- data
- tcam
- module
- rule
- 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.)
- Pending
Links
- 238000007667 floating Methods 0.000 title claims abstract description 31
- 239000000284 extract Substances 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 6
- 230000006399 behavior Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000000034 method Methods 0.000 description 1
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种利用TCAM实现浮动字符串匹配的系统,其中,包括:帧管理模块,用于将缓存输入数据帧,同时为每一数据帧分配一个帧ID,用于标记查询所属数据帧;帧转发模块,用于通过帧ID提取数据帧转发或丢弃;帧解析模块,用于对帧管理模块缓存后的数据帧进行解析,获得有效载荷数据首字节的偏移位置;帧字符串查询控制模块,用于根据帧解析模块提供的有效载荷偏移提取有效载荷数据,并将载荷数据送到TCAM管理模块;TCAM管理模块,用于查询字符串规则并返回结果数据;帧转发模块,用于通过帧ID提取帧管理模块缓存的输入帧,并根据帧ID标记的字符串查询结果,转发命中规则数据帧至特定端口和丢弃未命中规则数据帧。
Description
技术领域
本发明涉及TCAM浮动字符串处理技术,字符串匹配是基于 TCAM实现浮动字符串匹配的系统。
背景技术
浮动字符串匹配广泛用于文本文件字符搜索,计算机病毒查找,网络传输报文关键字匹配等领域。
现有技术中,通常使用输入字符串流和预定义的字符数组(字符串规则)进行逐字节扫描匹配。而逐字节扫描匹配降低了匹配效率。以FPGA实现为例,处理模块的时钟频率通常为200MHz,逐字节扫描匹配模块每秒最大处理性能也就是200M*8bit/s=1.6Gbps。即使通过模块复制10份也不过16Gbps,而当今网络通信技术高速发展,百G以上的处理板卡以成为市场主流。使用基于逐字节扫描的匹配技术已经无法满足日益增长的网络处理需求。
发明内容
本发明的目的在于提供一种利用TCAM实现浮动字符串匹配的系统,用于解决上述现有技术的问题。
本发明一种利用TCAM实现浮动字符串匹配的系统,其中,包括:TCAM芯片、配置模块、TCAM管理模块、帧管理模块、帧解析模块、帧字符串查询控制模块以及帧转发模块;帧管理模块,用于将缓存输入数据帧,同时为每一数据帧分配一个帧ID,用于标记查询所属数据帧;帧转发模块,用于通过帧ID提取数据帧转发或丢弃;帧解析模块,用于对帧管理模块缓存后的数据帧进行解析,获得有效载荷数据首字节的偏移位置;帧字符串查询控制模块,用于根据帧解析模块提供的有效载荷偏移提取有效载荷数据,并将载荷数据送到 TCAM管理模块;TCAM管理模块,用于查询字符串规则并返回结果数据;帧转发模块,用于通过帧ID提取帧管理模块缓存的输入帧,并根据帧ID标记的字符串查询结果,转发命中规则数据帧至特定端口和丢弃未命中规则数据帧;配置模块,用于管理TCAM的初始化、规则加载和管理监测其它模块寄存器操作。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,载荷数据以64字节分段组KEY送到TCAM管理模块。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,该结果数据包括查询命中结果、规则ID以及规则长度信息。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,配置模块,用于进行TCAM芯片的初始化配置、浮动字符串规则加载和删除操作以及管理其他模块的寄存器配置。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,帧解析模块用于接收以太网帧结构的输入数据帧,解析以太网数据帧MAC域、IP头部、TCP以及UDP头部,获取载荷域首字节偏移值,并将输入数据帧、帧ID和载荷域字节偏移转发至帧字符串查询控制模块。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,帧字符串查询控制模块,用于根据帧解析模块提供的载荷域字节偏移,提取载荷域数据,将载荷数据以64字节为单位进行分割,每分割一个64字节数据分配一个KEY_ID,每个帧单独分配,从0开始赋值,分割后的数据帧连续送往TCAM管理模块。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,TCAM管理模块用于将64字节载荷查询数据帧偏移至80字节字符串查询数据,将80字节字符串查询数据送往TCAM芯片查询匹配,TCAM芯片返回查询结果。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,帧转发模块根据判断浮动字符串规则是否命中,判断命中字符串规则载荷数据的偏移位置,根据帧ID从帧管理模块读取帧首地址和帧长度,提取原始帧,将帧字符串查询规则控制模块返回的字符串规则索引以及字符串规则长度信息标记在原始帧的MAC中。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,TCAM芯片为三态内容寻址存储器。
根据本发明的利用TCAM实现浮动字符串匹配的系统的一实施例,其中,帧管理模块用于为每个输入数据帧分配一个帧ID,将每个输入数据帧缓存,同时将帧的首地址和帧长度存入以帧ID为地址的帧信息RAM,便于帧转发模块以帧ID为地址读取帧地址和帧长度,提取数据帧,将输入数据帧和帧ID转发至帧解析模块。
本发明提供的一种利用TCAM实现浮动字符串匹配的系统,能够添加字符串匹配规则时将字符串在报文中可能出现的位置全部枚举并预存至CAM中,实现单周期扫描较长的字符流。
附图说明
图1所示为利用TCAM实现浮动字符串匹配的系统的模块图;
图2所示为规则配置与查询流程图;
图3所示为帧结构图;
图4所示为字符串KEY生成示意图;
图5所示为字符串规则配置示意图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
图1所示为利用TCAM实现浮动字符串匹配的系统的模块图,如
图1所示,利用TCAM实现浮动字符串匹配的系统包括:TCAM芯片1、配置模块2、TCAM管理模块3、帧管理模块4、帧解析模块5、帧字符串查询控制模块6以及帧转发模块7。
如图1所示,利用TCAM实现浮动字符串匹配的系统,从输入数据帧中提取有效载荷数据,将载荷数据以64字节分段组KEY,送到 TCAM中查询预配置的字符串规则获取转发行为,并可将规则ID、规则长度、偏移位置标记于转发帧的MAC中。
具体来看,首先输入数据帧全部缓存至帧管理模块4的内部RAM 中,同时为每一帧数据分配一个帧ID,用于标记查询所属帧,以及帧转发模块7通过帧ID提取帧数据转发或丢弃。缓存后的数据帧通过帧解析模块5解析其帧结构获得有效载荷数据首字节的偏移位置,方便后续模块提取载荷数据。帧字符串查询控制模块6主要是通过帧解析模块5提供的有效载荷偏移提取有效载荷数据,并将载荷数据以64字节分段组KEY送到TCAM管理模块3,TCAM管理模块3查询字符串规则并返回查询命中结果、规则ID、规则长度等信息。帧转发模块7通过帧ID提取帧管理模块4缓存的输入帧,并根据帧ID标记的字符串查询结果,可转发命中规则数据帧至特定端口和丢弃未命中规则数据帧。配置模块2管理TCAM的初始化、规则加载和管理监测其它模块寄存器操作。
图2所示为规则配置与查询流程图,图3所示为帧结构图,图4所示为字符串KEY生成示意图,图5所示为字符串规则配置示意图,如图1至图5所示,配置模块2的功能包括:a.TCAM初始化配置(通过 MDIO端口配置TCAM初始化);b.TCAM浮动字符串规则加载和删除操作;c.管理其他模块的寄存器配置。
如图1至图5所示,帧管理模块4的功能包括:a.为每个输入帧分配一个帧ID(FKT_ID),从0开始赋值;b.将每个输入帧存入帧缓存 RAM中。同时将帧的首地址和帧长度存入以帧ID为地址的帧信息 RAM;便于以帧ID为地址读取帧地址和帧长度,提取帧数据;c.将输入帧和帧ID转发至帧解析模块5。
如图1至图5所示,帧解析模块5的功能包括,a.接收以太网帧结构的输入帧;b.解析以太网帧MAC域/IP头部/TCP、UDP头部部,获取载荷域首字节偏移值;c.将输入帧、帧ID和载荷域字节偏移转发至帧字符串查询控制模块。
如图1至图5所示,帧字符串查询控制模块6的功能包括:a.根据帧解析模块提供的载荷域字节偏移,提取载荷域数据。b.将载荷数据以64字节(512位宽)为单位进行分割,每分割一个64字节数据分配一个KEY_ID,每个帧单独分配,从0开始赋值。分割后的数据连续送往TCAM管理模块3。若当前帧载荷末周期数据未满64字节,结尾补0。c.载荷查询数据的ID(SCH_ID)由{PKT_ID,KEY_ID}组合而成。 d.将载荷查询数据及其SCH_ID送往TCAM管理模块3。e.接收 TCAM管理模块3返回TCAM查询结果(SCH_HIT_FLAG、 SCH_HIT_INDEX、SCH_HIT_LEN、SCH_HIT_RULE_ID、 SCH_HIT_ACT和SCH_ID)并转发至帧转发模块7。
如图1至图5所示,TCAM管理模块3的功能包括:a.将64字节载荷查询数据偏移至80字节字符串查询数据(参见附图说明-字符串 KEY生成图);b.将80字节字符串查询数据送往TCAM芯片1查询匹配,TCAM芯片返回查询结果(SCH_HIT_FLAG、SCH_HIT_INDEX、 SCH_HIT_LEN、SCH_HIT_RULE_ID、SCH_HIT_ACT);c.将TCAM 芯片1返回查询结果和SCH_ID送往帧字符串查询控制模块6。
如图1至图5所示,帧转发模块7的功能包括:a.根据 SCH_HIT_FLAG判断字符串规则是否命中,SCH_HIT_FLAG=1表示命中,SCH_HIT_FLAG=0表示未命中。b.SCH_HIT_INDEX提供TCAM 中命中字符串规则索引。根据SCH_ID中的KEY_ID和 SCH_HIT_INDEX的低6位判断命中字符串规则载荷数据的偏移位置。KEY_ID提供64字节偏移位置,SCH_HIT_INDEX的低6位提供64 字节内偏移位置。c.SCH_HIT_LEN、SCH_HIT_RULE_ID和 SCH_HIT_ACT为TCAM表提供的附加信息。SCH_HIT_LEN为命中字符串长度,SCH_HIT_RULE_ID为命中的规则号,SCH_HIT_ACT为命中的规则转发行为(未命中字符串规则帧可定义为丢弃或转发至特定端口)。d.根据SCH_ID中的帧ID从帧管理模块4读取帧首地址和帧长度,提取帧缓存RAM中的原始帧。e.将帧字符串查询规则模块6返回的字符串规则索引、字符串规则长度等信息标记在原始帧的MAC 中,供后续设备快速定位。
如图1至图5所示,配置模块2通过本地串行或并行总线与CPU互连。CPU管理所有内部模块和TCAM芯片1的配置。TCAM芯片1配置由CPU发起,通过MDIO接口完成TCAM的初始化配置。TCAM规则配置由CPU发起,通过TCAM管理模块3的interlaken接口完成规则加载与删除。CPU管理其它模块的寄存器配置。
如图1至图5所示,帧解析模块5输入有效的以太网帧,解析MAC 层/IP头部/TCP头部或UDP头部,获取载荷数据偏移位置。提取有效载荷数据,并对数据进行偏移。
如图1至图5所示,帧字符串查询控制模块6,对偏移后的载荷数据进行字符扩展(512bits->640bits)。而TCAM芯片1支持640bits匹配查询。字符扩展用于跨边界字符匹配。扩展后字符串查询TCAM,TCAM 并行查询所有已加载的规则并返回查询结果。
如图1至图5所示,帧转发模块7,TCAM规则匹配查询返回规则 ID、字符偏移、字符串长度、转发行为等信息。帧转发模块7的转发行为控制数据帧转发或丢弃、转发端口、MAC信息标记的功能。
如图1至图5所示,TCAM芯片1为三态内容寻址存储器,每个bit 有三个状态:"0"、"1"和"don't care","don't care"通过掩码实现。以 NLA12000为例,TCAM支持单条最大640位数据和掩码规则表项。表项总数12.8万个。查询速率为100M/s。单条掩码规则占用64个表项空间。每条规则可配置最大256位宽的扩展信息域,用于存放规则信息 (命中字符串长度SCH_HIT_LEN、命中字符串的规则号 SCH_HIT_RULE_ID、命中字符串的转发行为SCH_HIT_ACT)。
本发明提供的一种利用TCAM实现浮动字符串匹配的系统,能够添加字符串匹配规则时将字符串在报文中可能出现的位置全部枚举并预存至CAM中,实现单周期扫描较长的字符流。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种利用TCAM实现浮动字符串匹配的系统,其特征在于,包括:TCAM芯片、配置模块、TCAM管理模块、帧管理模块、帧解析模块、帧字符串查询控制模块以及帧转发模块;
帧管理模块,用于将缓存输入数据帧,同时为每一数据帧分配一个帧ID,用于标记查询所属数据帧;
帧转发模块,用于通过帧ID提取数据帧转发或丢弃;
帧解析模块,用于对帧管理模块缓存后的数据帧进行解析,获得有效载荷数据首字节的偏移位置;
帧字符串查询控制模块,用于根据帧解析模块提供的有效载荷偏移提取有效载荷数据,并将载荷数据送到TCAM管理模块;
TCAM管理模块,用于查询字符串规则并返回结果数据;
帧转发模块,用于通过帧ID提取帧管理模块缓存的输入帧,并根据帧ID标记的字符串查询结果,转发命中规则数据帧至特定端口和丢弃未命中规则数据帧;
配置模块,用于管理TCAM的初始化、规则加载和管理监测其它模块寄存器操作。
2.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,载荷数据以64字节分段组KEY送到TCAM管理模块。
3.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,该结果数据包括查询命中结果、规则ID以及规则长度信息。
4.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,配置模块,用于进行TCAM芯片的初始化配置、浮动字符串规则加载和删除操作以及管理其他模块的寄存器配置。
5.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,帧解析模块用于接收以太网帧结构的输入数据帧,解析以太网数据帧MAC域、IP头部、TCP以及UDP头部,获取载荷域首字节偏移值,并将输入数据帧、帧ID和载荷域字节偏移转发至帧字符串查询控制模块。
6.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,帧字符串查询控制模块,用于根据帧解析模块提供的载荷域字节偏移,提取载荷域数据,将载荷数据以64字节为单位进行分割,每分割一个64字节数据分配一个KEY_ID,每个帧单独分配,从0开始赋值,分割后的数据帧连续送往TCAM管理模块。
7.如权利要求6所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,TCAM管理模块用于将64字节载荷查询数据帧偏移至80字节字符串查询数据,将80字节字符串查询数据送往TCAM芯片查询匹配,TCAM芯片返回查询结果。
8.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,帧转发模块根据判断浮动字符串规则是否命中,判断命中字符串规则载荷数据的偏移位置,根据帧ID从帧管理模块读取帧首地址和帧长度,提取原始帧,将帧字符串查询规则控制模块返回的字符串规则索引以及字符串规则长度信息标记在原始帧的MAC中。
9.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,TCAM芯片为三态内容寻址存储器。
10.如权利要求1所述的利用TCAM实现浮动字符串匹配的系统,其特征在于,帧管理模块用于为每个输入数据帧分配一个帧ID,将每个输入数据帧缓存,同时将帧的首地址和帧长度存入以帧ID为地址的帧信息RAM,便于帧转发模块以帧ID为地址读取帧地址和帧长度,提取数据帧,将输入数据帧和帧ID转发至帧解析模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811407825.XA CN111222017A (zh) | 2018-11-23 | 2018-11-23 | 一种利用tcam实现浮动字符串匹配的系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811407825.XA CN111222017A (zh) | 2018-11-23 | 2018-11-23 | 一种利用tcam实现浮动字符串匹配的系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111222017A true CN111222017A (zh) | 2020-06-02 |
Family
ID=70828637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811407825.XA Pending CN111222017A (zh) | 2018-11-23 | 2018-11-23 | 一种利用tcam实现浮动字符串匹配的系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111222017A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131356A (zh) * | 2020-08-03 | 2020-12-25 | 国家计算机网络与信息安全管理中心 | 一种基于tcam的报文关键字匹配方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350771A (zh) * | 2008-07-07 | 2009-01-21 | 中国人民解放军国防科学技术大学 | 三态内容可寻址存储器条目免排序存储方法及其系统 |
CN102253957A (zh) * | 2011-04-13 | 2011-11-23 | 北京恒光创新科技股份有限公司 | 一种tcam多模式字符串匹配方法及装置 |
WO2012093390A2 (en) * | 2011-01-05 | 2012-07-12 | Aeronautics Ltd. | Data transmission framing system & method |
CN103248573A (zh) * | 2013-04-08 | 2013-08-14 | 北京天地互连信息技术有限公司 | 面向OpenFlow的集中管理交换机及其数据处理方法 |
CN104486097A (zh) * | 2014-11-24 | 2015-04-01 | 大连梯耐德网络技术有限公司 | 基于广电网络的综合数据采集系统和方法 |
CN105515995A (zh) * | 2015-12-01 | 2016-04-20 | 华为技术有限公司 | 报文处理方法、流表生成方法及装置 |
-
2018
- 2018-11-23 CN CN201811407825.XA patent/CN111222017A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101350771A (zh) * | 2008-07-07 | 2009-01-21 | 中国人民解放军国防科学技术大学 | 三态内容可寻址存储器条目免排序存储方法及其系统 |
WO2012093390A2 (en) * | 2011-01-05 | 2012-07-12 | Aeronautics Ltd. | Data transmission framing system & method |
CN102253957A (zh) * | 2011-04-13 | 2011-11-23 | 北京恒光创新科技股份有限公司 | 一种tcam多模式字符串匹配方法及装置 |
CN103248573A (zh) * | 2013-04-08 | 2013-08-14 | 北京天地互连信息技术有限公司 | 面向OpenFlow的集中管理交换机及其数据处理方法 |
CN104486097A (zh) * | 2014-11-24 | 2015-04-01 | 大连梯耐德网络技术有限公司 | 基于广电网络的综合数据采集系统和方法 |
CN105515995A (zh) * | 2015-12-01 | 2016-04-20 | 华为技术有限公司 | 报文处理方法、流表生成方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131356A (zh) * | 2020-08-03 | 2020-12-25 | 国家计算机网络与信息安全管理中心 | 一种基于tcam的报文关键字匹配方法和装置 |
CN112131356B (zh) * | 2020-08-03 | 2022-06-07 | 国家计算机网络与信息安全管理中心 | 一种基于tcam的报文关键字匹配方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1486040B1 (en) | Vlan table management system for memory efficient lookups and inserts in hardware-based packet switches | |
JP4156112B2 (ja) | 高速検索方法及び高速検索装置 | |
CN1655533B (zh) | 基于最长前缀匹配算法的过滤器 | |
CN110808910B (zh) | 一种支持QoS的OpenFlow流表节能存储架构及其方法 | |
US8767757B1 (en) | Packet forwarding system and method using patricia trie configured hardware | |
US20080192754A1 (en) | Routing system and method for managing rule entries of ternary content addressable memory in the same | |
US20080071781A1 (en) | Inexact pattern searching using bitmap contained in a bitcheck command | |
US20070171911A1 (en) | Routing system and method for managing rule entry thereof | |
CN107528783B (zh) | 利用对前缀长度进行两个搜索阶段的ip路由缓存 | |
JP2004517519A (ja) | 高速インターネットプロトコルルートルックアップ遂行及びルーティング/フォワーディングテーブル管理のための装置及び方法 | |
CN111937360B (zh) | 最长前缀匹配 | |
JP2001251351A (ja) | パケット交換機における入力パケット処理方式 | |
JP2000232479A (ja) | キャッシュを有するルータの方路決定装置及びプログラムを記録した機械読み取り可能な記録媒体 | |
Pao et al. | Efficient hardware architecture for fast IP address lookup | |
US7403526B1 (en) | Partitioning and filtering a search space of particular use for determining a longest prefix match thereon | |
US11652744B1 (en) | Multi-stage prefix matching enhancements | |
CN110035074A (zh) | 一种acl匹配udf报文的芯片实现方法及装置 | |
CN111988231A (zh) | 一种掩码五元组规则匹配的方法及装置 | |
CN107248939B (zh) | 基于hash存储器的网络流高速关联方法 | |
US20190294549A1 (en) | Hash Table-Based Mask Length Computation for Longest Prefix Match Caching | |
CN112667526A (zh) | 一种访问控制列表电路实现方法及其电路 | |
Yu et al. | Forwarding engine for fast routing lookups and updates | |
US6925503B2 (en) | Method and system for performing a longest prefix match search | |
US11502957B2 (en) | Avoiding markers for longest prefix match based on binary search tree algorithm | |
CN111222017A (zh) | 一种利用tcam实现浮动字符串匹配的系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |