CN102986177B - 一种tcam表项的设置方法及装置 - Google Patents
一种tcam表项的设置方法及装置 Download PDFInfo
- Publication number
- CN102986177B CN102986177B CN201180001048.9A CN201180001048A CN102986177B CN 102986177 B CN102986177 B CN 102986177B CN 201180001048 A CN201180001048 A CN 201180001048A CN 102986177 B CN102986177 B CN 102986177B
- Authority
- CN
- China
- Prior art keywords
- mask
- manifold
- longest
- longest continuous
- remainder
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000015654 memory Effects 0.000 title claims abstract description 21
- 230000001351 cycling effect Effects 0.000 claims description 72
- 239000000203 mixture Substances 0.000 claims description 6
- 239000012141 concentrate Substances 0.000 claims description 3
- 238000005267 amalgamation Methods 0.000 description 12
- 125000004122 cyclic group Chemical group 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C15/00—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
- G11C15/04—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores using semiconductor elements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C15/00—Digital stores in which information comprising one or more characteristic parts is written into the store and in which information is read-out by searching for one or more of these characteristic parts, i.e. associative or content-addressed stores
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Mobile Radio Communication Systems (AREA)
- Read Only Memory (AREA)
Abstract
本发明公开了一种TCAM表项的设置方法及装置,涉及通信领域,用以达到提高TCAM的利用率的目的。所述TCAM表项的设置方法,包括:获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数;获取所述数集的最长连续掩码;根据所述数集的最长连续掩码得到获取结果;将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。本发明公开的方案适用于设置TCAM表项的场景。
Description
技术领域
本发明涉及通信领域,尤其涉及一种TCAM表项的设置方法及装置。
背景技术
TCAM(Ternary Content Addressable Memory,三态内容寻址存储器),是一种基于二进制内容查询的存储器,主要用于对报文进行分类。TCAM设置有若干表项,且在RAM(Random Access Memory,静态随机存储器)中存储有与TCAM表项相对应的动作。在进行报文分类的过程中,将一报文中的关键字和TCAM中的表项进行匹配,若有一表项与该报文中的关键字匹配成功,则对该报文执行该表项对应的动作。
虽然利用TCAM进行内容查询具有效率高的优点,但TCAM通常成本高、功耗大,利用TCAM对报文进行分类应用地比较广泛,这就造成了网络设备上TCAM的资源紧缺。
现有技术中TCAM表项的比特位可使用三种状态——“0”、“1”、“*”(不关注,Don't Care)状态,其中“0”、“1”可用于精确匹配,“*”可用于模糊匹配。为了节省TCAM的资源,可以利用“*”设置TCAM表项。例如,对于IP报文中端口号为0~7的报文需要执行动作1,则可以设置动作1对应的TCAM表项1为“0***”;由于利用一个TCAM表项就可以表示多个匹配条件,故可以提高TCAM的利用率。但是,这种设置TCAM表项的方法,只对表项为后缀掩码,即表项中只包括连续的不关注状态且该表项的最低比特位为不关注状态,这种情况适用。
发明内容
本发明的实施例提供一种TCAM表项的设置方法及装置,用以提高TCAM的利用率。
为达到上述目的,本发明的实施例采用如下技术方案:
一种TCAM表项的设置方法,包括:
获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数;
获取所述数集的最长连续掩码;其中,获取最长连续掩码的方法包括:将所述数集按位循环操作,获取按位循环操作后的所有数集;获取按位循环操作后的所有数集的最长后缀掩码;将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码;
根据所述数集的最长连续掩码得到获取结果;
将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
一种TCAM表项的设置装置,包括:
第一获取单元,用于获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数;
第二获取单元,用于获取所述数集的最长连续掩码;其中,该第二获取单元具体用于将所述数集按位循环操作,获取按位循环操作后的所有数集;获取按位循环操作后的所有数集的最长后缀掩码;将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码;
得到单元,用于根据所述数集的最长连续掩码得到获取结果;
存储单元,用于将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
本发明实施例提供的一种TCAM表项的设置方法及装置,通过上述获取最长连续掩码的方法可以得到预先设定的报文同一字段的值所构成的数集的最长连续掩码,并根据该最长连续掩码设置TCAM表项,从而可以进一步提高TCAM的利用率,进而节省TCAM资源。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种TCAM表项的设置方法流程图;
图2为本发明实施例提供的利用二叉树获取最长后缀掩码的方法示意图之一;
图3为本发明实施例提供的利用二叉树获取最长后缀掩码的方法示意图之二;
图4为本发明实施例提供的利用二叉树获取最长后缀掩码的方法示意图之三;
图5为本发明实施例提供的利用二叉树获取最长后缀掩码的方法示意图之四;
图6为本发明实施例提供的一种TCAM表项的设置装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为提高TCAM的利用率,如图1所示,本发明实施例提供了一种TCAM表项的设置方法,包括:
101、获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数。
以ACL(Access Control List,访问控制列表)应用为例,所述报文包括以下一个或多个字段:源IP地址、目的IP地址、协议号、源端口号和目的端口号。所述动作包括:转发、丢弃、重定向、修改、限流等。例如,预先设定源端口号的值为4,5,6,7,12,13,14,15的报文需要执行同一动作,例如丢弃,则所述预先设定的报文的同一字段,即源端口号字段,的值所构成的数集为{4,5,6,7,12,13,14,15}。通常机器可以识别的是二进制数,为了方便叙述,本实施例中数集中的数以十进制表示。
102、获取所述数集的最长连续掩码;
TCAM表项的比特位可使用三种状态——“0”、“1”、“*”(不关注)状态,其中“0”、“1”可用于精确匹配,“*”可用于模糊匹配。利用这三种状态表示的表项为掩码。一个数集的掩码是该数集的掩码集中的任意一个元素。一个数集的掩码集,是指可以和该数集中所有元素匹配,并且不与除该数集中元素之外的任何数匹配的一组掩码。一个数集可以有多个掩码集,例如,数集{4,5,6}的掩码集可以是{100,101,110},{1*0,101}或{10*,110}。因此,数集{4,5,6}的掩码可以是100,101,110,1*0或10*。
若一掩码的不关注比特位是连续的,或该掩码的不关注比特位在按位循环(bitwise rotation)操作之后是连续的,则称该掩码为连续掩码;否则称该掩码为不连续掩码。若一掩码只有一个不关注比特位,则该掩码也可以称为连续掩码。当有多个掩码时,其中不关注比特位最多的连续掩码为最长连续掩码。
所述按位循环操作包括按位左循环操作和按位右循环操作。按位左循环i(i≥0)位是指将一个二进制数或者掩码的除最高的i比特位之外的各比特位依次左移i位,而最高的i个比特位相应移到最低i个比特位。类似的,按位右循环j(j≥0)位是指将一个二进制数或者掩码的除最低的j比特位之外的各比特位依次右移j位,而最低的j个比特位相应移到最高j个比特位。
可以用以下方式获取最长连续掩码。
将上述数集按位循环操作,获取按位循环操作后的所有数集。将一个数集按位循环操作是指将该数集中的各个元素做相同的按位循环操作,例如将数集中的各个元素都按位左循环i位。按位循环操作后的数集可以包括按位循环零位后的数集,即与原数集各个元素的值相同的数集。按位循环操作后的所有数集是指对原数集做所有可能的按位循环操作后得到的各个数集。所有可能的按位循环操作可以是不包括等价操作的所有按位循环操作。等价操作是指对于任何数或数集分别执行两个按位循环操作得到的数或数集相同,则这两个按位循环操作为等价操作。例如,对于四位的二进制数,按位左循环2位和按位右循环2位是等价操作。
获取按位循环操作后的所有数集的最长后缀掩码。若一掩码中的不关注比特位是连续的且该掩码的最低比特位是不关注状态,则称该掩码为后缀掩码,例如00**。当多个掩码比较时,其中不关注比特位最多的后缀掩码为最长后缀掩码。上述获取按位循环操作后的所有数集的最长后缀掩码,可以分别得到按位循环操作后的各个数集的各个最长后缀掩码,根据各个数集的最长后缀掩码得到按位循环操作后的所有数集的最长后缀掩码。也可以获取按位循环操作后的所有数集的所有后缀掩码,从中获得所有数集的最长后缀掩码。可以用通常的方法获取数集的后缀掩码。当不关注比特位最多的后缀掩码不止一个时,可以任选一个作为按位循环操作后的所有数集的最长后缀掩码。
将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码。如果对任何数或数集连续执行两个按位循环操作得到的数或数集与原数或原数集相同,则这两个按位循环操作互为逆操作,即其中一个为另一个的按位循环逆操作。例如,按位左循环1位的按位循环逆操作为按位右循环1位。上述对应的按位循环逆操作,是指从数集得到上述最长后缀掩码对应的按位循环操作后的数集的按位循环操作的逆操作。
以下举例说明一个获取最长连续掩码的本发明实施例的具体应用场景。
首先,将步骤101得到的数集按位循环操作,得到最大比特位个中间数集。所述最大比特位个可以是指,用二进制表示所述数集中的最大的数所使用的比特位的个数;或者,还可以指根据实际需要预先设定的比特位的个数。例如,对于数集{4,5,6,7,12,13,14,15}而言,由于数集中最大的数为15,故最大比特位个可以是4个;或者,可以预先设定为大于4个的任一值,例如8位或16位。为方便阐述,在本实施例中使用4个比特位的二进制数表示该数集中的每个数,则该数集中的每个数表示为{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b}。其中,b是二进制数(binary)的标识。将该数集中的每个数按位循环操作,例如按位左循环0位,则得到第一个中间数集仍是所述数集本身{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b};按位左循环1位,则得到第二个中间数集{1000b,1010b,1100b,1110b,1001b,1011b,1101b,1111b};按位左循环2位,则得到第三个中间数集{0001b,0101b,1001b,1101b,0011b,0111b,1011b,1111b};按位左循环3位,则得到第四个中间数集{0010b,1010b,0011b,1011b,0110b,1110b,0111b,1111b}。
然后,获取所有中间数集的最长后缀掩码。
一个数集的最长后缀掩码可以用通常的方法获得。
例如,从各位都为不关注比特位的后缀掩码开始,按照不关注比特位的位数从大到小的顺序遍历各个后缀掩码,检查该后缀掩码是否为该数集的掩码,直到找到一个是该数集的掩码的后缀掩码为止,该后缀掩码为数集的最长后缀掩码。例如,对三比特位的数组成的数集,按照“***”,“0**”,“1**”,“00*”,“01*”,“10*”,“11*”,“000”,“001”,“010”,“011”,“100”,“101”,“110”,“111”的顺序依次检查上述后缀掩码是否为该数集的掩码,直到找到一个是该数集的掩码的后缀掩码,例如“01*”,为止,“01*”即为该数集的最长后缀掩码。可选的,当所有包括不关注比特位的后缀掩码都不是该数集的掩码时,也可以停止查找,任选该数集的一个元素的值作为最长后缀掩码。
后缀掩码也可以用二叉树原理得到。
此步骤以获取第一个中间数集{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b}即{4,5,6,7,12,13,14,15}为例介绍获取最长后缀掩码的方法。
获取中间数集的最长后缀掩码的方法可以采用二叉树的原理来实现:
(1)可以采用软件或硬件的方式构造二叉树的结构。二叉树的每一结点对应存储器中的一个地址,且每一结点与两个子结点相连接,则称该结点为所述两个子结点的父结点。父结点与子结点之间的连接关系可以通过存储器中的地址间的指向关系来实现,如在父结点中保存其两个子结点的地址,并在子结点中保存其父结点的地址。二进制数的每个比特位的值,可以用该比特位所对应的二叉树中的位置表示;例如,在本实施例中父结点的左子结点对应二进制数“0”,右子结点对应二进制数“1”。二叉树中初始的父结点不对应任何二进制数,称该初始的父结点为二叉树的根结点。二叉树根结点下面的每一层依次对应二进制数的一个比特位,且该二叉树自上而下的每一层依次与二进制数从高到低的每一比特位相对应。例如,图2中构造的二叉树的四层可以与四个比特位的二进制数,如A3A2A1A0,相对应,其中第一层对应该二进制数的最高位A3,第四层对应该二进制数的最低位A0。
(2)查询二叉树的最下层中与中间数集中的各个数对应的结点,并将该结点置为“1”。
例如,在图2中对于数集{4,5,6,7,12,13,14,15}的数4(即0100b)而言,从二叉树的根结点开始查询,依次可以得到0100b在第一层对应左结点,第二层对应右结点,第三层对应左结点,第四层对应左结点,由此得到二叉树的最下层中与0100b对应的结点,可以将该结点置为“1”,即将该结点在存储器中对应的地址所存储的数值置为“1”,以表示该结点与中间数集中的一个数相对应。需要说明的是,各个结点的初始值为“0”。在本发明所有实施例中的二叉树,空白背景的圆圈表示值为0的结点,斜纹背景的圆圈表示值为1的结点。
(3)遍历二叉树的最下层,将每两个有共同父结点的子结点的值求与;若有两个子结点的值求与的结果为1,则将这两个子结点共同的父结点的值置为1,否则,仍为0。
例如,图2中得到二叉树的第三层中结点的值。
(4)依次向上遍历二叉树的每一层,得到二叉树每一层中结点的值。
例如,图2中得到第二层及第一层中结点的值。
(5)若在某一层中的一结点的值为1,则该层以下的各层(不包括该层)所对应的比特位用不关注(“*”)状态表示,该层及该层以上所对应的比特位用“0”或“1”表示,得到表示用于表示所述中间数集的一个后缀掩码。若某一层的多个结点的值为1,则可以得到用于该中间数集的多个后缀掩码。
例如,图2中的第二层中有两个结点的值为1,则对于第二层中4,5,6,7对应的结点而言,其所在层以下的各层即第三层和第四层所对应的比特位用“*”表示,其所在层及该层以上所对应的比特位用“0”或“1”表示,得到用于表示4,5,6,7的后缀掩码01**;同理,对于第二层中12,13,14,15对应的结点而言,可以得到用于表示这四个数的后缀掩码11**。
(6)选择所述至少一个后缀掩码中不关注比特位最多的一个作为所述中间数集的最长后缀掩码。
需要说明的是,若所述至少一个后缀掩码的个数为一个,则该一个后缀掩码为所述最长后缀掩码;若所述至少一个后缀掩码的个数为至少两个,且所述至少两个后缀掩码中不关注比特位最多的不止一个,则可从所述不止一个后缀掩码中任选一个作为最长后缀掩码。
例如,图2得到两个后缀掩码01**和11**,显然这两个后缀掩码的不关注比特位都为两个,故任选一个例如01**,作为第一个中间数集的最长后缀掩码,且该最长后缀掩码的不关注比特位的个数为2。
同理,如图3所示得到第四个中间数集的最长后缀掩码:001*,不关注比特位的个数为1。
如图4所示得到第三个中间数集的最长后缀掩码:0001;不关注比特位的个数为0。
如图5所示得到第二个中间数集的最长后缀掩码:1***;不关注比特位的个数为3。
最后,选取所述所有中间数集的最长后缀掩码中不关注比特位最多的一个作为最终最长后缀掩码,并按照得到该最终最长后缀掩码对应的中间数集的按位循环操作的逆操作,得到所述数集的最长连续掩码。
例如,对于数集为{4,5,6,7,12,13,14,15}而言,由于其第二个中间数集的最长后缀掩码1***的不关注比特位的个数为3,显然,该最长后缀掩码的不关注比特位最多,故将1***作为最终最长后缀掩码。另外,得到所述第二个中间数集的过程是将所述数集中的每个数按位左循环1位,在此时1***需要按照其按位循环逆操作即按位右循环1位,得到所述数集的最长连续掩码*1**。
103、根据所述数集的最长连续掩码得到获取结果。
步骤103具体可以为:将所述数集的最长连续掩码以及该数集对该最长连续掩码的余数集中的元素所组成的掩码集作为获取结果。
数集对一个掩码的余数集是指该数集中除去该掩码所代表的数之后剩下的数组成的数集。
例如,对于数集为{4,5,6,7,12,13,14,15}而言,该数集的最长连续掩码为*1**,该数集对该最长连续掩码的余数集为空集,故得到的获取结果为{*1**}。
或者,步骤103具体也可以为,若所述数集的最长连续掩码的长度不为0,则循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码,即所述数集的最长连续掩码以及循环结束之前得到的各个余数集的最长连续掩码,以及最后一个余数集中的元素所组成的掩码集作为获取结果。最后一个余数集是指上述循环过程中最后得到的余数集。
此步骤具体可以为,获取所述数集对该最长连续掩码的余数集,并获取该余数集的最长连续掩码;若该余数集的最长连续掩码的长度为0,则继续获取该余数集对该余数集的最长连续掩码的余数集,依此循环,直至得到的余数集为空集或者该余数集的最长连续掩码的长度为0为止。将上述过程中得到的所有最长连续掩码,以及得到的最后一个余数集中的元素所组成的掩码集作为获取结果。
一个掩码的长度是指该掩码中不关注比特位的个数。例如,所述最长连续掩码的长度是指该最长连续掩码中不关注比特位的个数。
例如,对于数集{0,1,4,5,6,7,12,13}而言,该数集的最长连续掩码为01**,该数集对该数集的最长连续掩码的余数集为{0,1,12,13},可以将{0,1,12,13}称为第一余数集,该第一余数集的最长后缀掩码为000*;该第一余数集对该第一余数集的最长连续掩码的余数集为{12,13},可以将{12,13}称为第二余数集,该第二余数集的最长连续掩码为110*;该第二余数集对该第二余数集的最长连续掩码的余数集为空集,此时循环结束,得到的最后一个余数集为空集。所有最长连续掩码包括:01**、000*和110*,且最后一个余数集为空集,故可以将{01**,000*,110*}作为获取结果。
或者,步骤103具体还可以为,若所述数集的最长连续掩码的长度不为0,则循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码,即所述数集的最长连续掩码以及循环结束之前得到的各个余数集的最长连续掩码,组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并后的掩码集,将最后一个余数集中的元素与合并后的掩码集的元素组成的掩码集作为获取结果。最后一个余数集是指上述循环过程中最后得到的余数集。上述合并可以知进行一次,也可以重复进行直至不能合并为止。
获取所有最长连续掩码的过程可以同上所述,在此不加赘述。
所述具有完全相同不关注比特位的至少两个连续掩码是指,至少两个连续掩码中的所有不关注比特位的位置完全一致。例如,*11**,*10**和*01**的所有不关注比特位都在从左至右的第1、4、5位,则*11**,*10**和*01**具有完全相同不关注比特位。
将得到的所有最长连续掩码组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并结果这一过程可以包括以下步骤:
首先,将掩码集中具有完全相同不关注比特位的至少两个最长连续掩码中的完全相同的不关注比特位用相同的“0”“1”状态组合取代,得到至少两个二进制数。
例如,具有完全相同不关注比特位的至少两个最长连续掩码为011**和001**,则将完全相同不关注比特位用相同的“0”“1”状态取代该完全相同不关注比特位,例如两位连续不关注比特位可以用00取代,得到两个二进制数01100和00100。这两位也可以用01、10或11取代。
其次,将所述至少两个二进制数组成数集,并获取该数集的最长连续掩码作为备用最长连续掩码。
例如,将二进制数01100和00100组成数集{01100b,00100b},获取该数集的最长连续掩码作为备用最长连续掩码。可以按照步骤102中所介绍的获取最长连续掩码的方法,得到该数集的最长连续掩码0*100作为备用最长连续掩码。如果该步骤得到的最长连续掩码的长度为0,则上述具有完全相同不关注比特位的至少两个连续掩码合并后的结果与原先需要合并的至少两个连续掩码相同,可选的,此时可以终止合并。
最后,用与所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个,对该备用最长连续掩码进行掩码取代得到取代结果。将该取代结果与掩码集中没有不能被该取代结果所代表的元素组成合并后的掩码集,合并后的掩码集即为合并结果。其中,所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个为取代方,该备用最长连续掩码为被取代方。
在实际应用中,由于机器只能识别0或1的二进制数,故每个掩码在实际机器中的表示也都是采用二进制来表示或运算的;掩码可以用二进制数和正掩码,或二进制数和反掩码表示。其中,正掩码是用1表示关注,用0表示不关注;相反,反掩码是用0表示关注,用1表示不关注。
如果上述做取代操作的最长连续掩码和该备用最长连续掩码相关,即该备用最长连续掩码可以代表该做取代操作的最长连续掩码的二进制数,则该备用最长连续掩码也可以为取代方。
在用二进制数和正掩码表示掩码时,上述掩码取代为正掩码取代。在用二进制数和反掩码表示掩码时,上述掩码取代为反掩码取代。所述反掩码取代包括:将取代方和被取代方分别用二进制数和反掩码表示,并将取代方和被取代方的两个反掩码按位取或,将按位取或的结果与被取代方的二进制数组成掩码。所述正掩码取代包括:将取代方和被取代方分别用二进制数和正掩码表示,并将取代方和被取代方的两个正掩码按位取与,按位取与的结果与被取代方的二进制数组成掩码。
下面以进行反掩码取代得到合并结果为例进行阐述。
其中,备用最长连续掩码例如为0*100,所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个例如为:011**。011**为取代方,0*100为被取代方。将0*100用二进制数和反掩码可以表示为:二进制数00100、反掩码01000;将011**用二进制数和反掩码可以表示为:二进制数01100、反掩码00011;将两个反掩码01000和00011按位取或,得到反掩码01011;将该反掩码01011和被取代方的二进制数00100组成不连续掩码0*1**。经过上述操作,掩码011**,001**合并为0*1**。掩码集{011**,001**}中没有不能被0*1**所代表的掩码,因此掩码集{011**,001**}合并为{0*1**}。
进一步的,合并结果中包括不连续掩码,且至少两个不连续掩码具有完全相同的不关注比特位,则可以将所述至少两个不连续掩码进行合并,得到合并结果。
例如,若得到的不连续掩码为000*0**和010*0**,参考上述合并的方法,可以得到合并后的掩码为0*0*0**,将{0*0*0**}作为合并结果。
104、将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
在本实施例中,上述各步骤的主体可以是TCAM表项的设置装置。由于上述步骤中的每一步均可以由硬件逻辑实现,该装置可以由网络设备中的软件或硬件实现。例如,如果该装置由硬件实现,则具体可以由特殊应用集成电路(Application-specific integrated circuit,ASIC)、复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)或现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)实现。如果该装置由软件实现,在该路由器的操作***的控制下,由该软件经过上述步骤获取得到掩码,并由该软件中的驱动程序将得到的掩码下发到TCAM表项中。
本发明实施例提供的一种TCAM表项的设置方法,通过上述获取最长连续掩码的方法可以得到预先设定的报文同一字段的值所构成的数集的最长连续掩码,并根据该最长连续掩码设置TCAM表项,从而可以进一步提高TCAM的利用率,进而节省TCAM资源。
如图6所示,本发明实施例提供的对应于上述TCAM表项的设置方法的设置装置,所述设置装置包括:第一获取单元61、第二获取单元62、得到单元63和存储单元64。
其中,第一获取单元61,用于获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数。
以ACL(Access Control List,访问控制列表)应用为例,所述报文包括以下一个或多个字段:源IP地址、目的IP地址、协议号、源端口号和目的端口号。所述动作包括:转发、丢弃、重定向、修改、限流等。例如,预先设定源端口号的值为4,5,6,7,12,13,14,15的报文需要执行同一动作,例如丢弃,则所述预先设定的报文的同一字段,即源端口号字段,的值所构成的数集为{4,5,6,7,12,13,14,15}。通常机器可以识别的是二进制数,为了方便叙述,本实施例中数集中的数以十进制表示。
第二获取单元62,用于获取所述数集的最长连续掩码;其中,该第二获取单元62具体用于将所述数集按位循环操作,获取按位循环操作后的所有数集;获取按位循环操作后的所有数集的最长后缀掩码;将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码。
TCAM表项的比特位可使用三种状态——“0”、“1”、“*”(不关注)状态,其中“0”、“1”可用于精确匹配,“*”可用于模糊匹配。利用这三种状态表示的表项为掩码。一个数集的掩码是该数集的掩码集中的任意一个元素。一个数集的掩码集,是指可以和该数集中所有元素匹配,并且不与除该数集中元素之外的任何数匹配的一组掩码。一个数集可以有多个掩码集,例如,数集{4,5,6}的掩码集可以是{100,101,110},{1*0,101}或{10*,110}。因此,数集{4,5,6}的掩码可以是100,101,110,1*0或10*。
若一掩码的不关注比特位是连续的,或该掩码的不关注比特位在按位循环操作(bitwise rotation)之后是连续的,则称该掩码为连续掩码;否则称该掩码为不连续掩码。若一掩码只有一个不关注比特位,则该掩码也可以称为连续掩码。当有多个掩码时,其中不关注比特位最多的连续掩码为最长连续掩码。
所述按位循环操作包括按位左循环操作和按位右循环操作。按位左循环i(i≥0)位是指将一个二进制数或者掩码的除最高的i比特位之外的各比特位依次左移i位,而最高的i个比特位相应移到最低i个比特位。类似的,按位右循环j(j≥0)位是指将一个二进制数或者掩码的除最低的j比特位之外的各比特位依次右移j位,而最低的j个比特位相应移到最高j个比特位。
可以用以下方式获取最长连续掩码。
将上述数集按位循环操作,获取按位循环操作后的所有数集。将一个数集按位循环操作是指将该数集中的各个元素做相同的按位循环操作,例如将数集中的各个元素都按位左循环i位。按位循环操作后的数集可以包括按位循环零位后的数集,即与原数集各个元素的值相同的数集。按位循环操作后的所有数集是指对原数集做所有可能的按位循环操作后得到的各个数集。所有可能的按位循环操作可以是不包括等价操作的所有按位循环操作。等价操作是指对于任何数或数集分别执行两个按位循环操作得到的数或数集相同,则这两个按位循环操作为等价操作。例如,对于四位的二进制数,按位左循环2位和按位右循环2位是等价操作。
获取按位循环操作后的所有数集的最长后缀掩码。若一掩码中的不关注比特位是连续的且该掩码的最低比特位是不关注状态,则称该掩码为后缀掩码,例如00**。当多个掩码比较时,其中不关注比特位最多的后缀掩码为最长后缀掩码。上述获取按位循环操作后的所有数集的最长后缀掩码,可以分别得到按位循环操作后的各个数集的各个最长后缀掩码,根据各个数集的最长后缀掩码得到按位循环操作后的所有数集的最长后缀掩码。也可以获取按位循环操作后的所有数集的所有后缀掩码,从中获得所有数集的最长后缀掩码。可以用通常的方法获取数集的后缀掩码。当不关注比特位最多的后缀掩码不止一个时,可以任选一个作为按位循环操作后的所有数集的最长后缀掩码。
将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码。如果对任何数或数集连续执行两个按位循环操作得到的数或数集与原数或原数集相同,则这两个按位循环操作互为逆操作,即其中一个为另一个的按位循环逆操作。例如,按位左循环1位的按位循环逆操作为按位右循环1位。上述对应的按位循环逆操作,是指从数集得到上述最长后缀掩码对应的按位循环操作后的数集的按位循环操作的逆操作。
以下举例说明一个获取最长连续掩码的本发明实施例的具体应用场景。
首先,将第一获取单元61得到的数集按位循环操作,得到最大比特位个中间数集。所述最大比特位个可以是指,用二进制表示所述数集中的最大的数所使用的比特位的个数;或者,还可以指根据实际需要预先设定的比特位的个数。例如,对于数集{4,5,6,7,12,13,14,15}而言,由于数集中最大的数为15,故最大比特位个可以是4个;或者,可以预先设定为大于4个的任一值,例如8位或16位。为方便阐述,在本实施例中使用4个比特位的二进制数表示该数集中的每个数,则该数集中的每个数表示为{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b}。其中,b是二进制数(binary)的标识。将该数集中的每个数按位循环操作,例如按位左循环0位,则得到第一个中间数集仍是所述数集本身{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b};按位左循环1位,则得到第二个中间数集{1000b,1010b,1100b,1110b,1001b,1011b,1101b,1111b};按位左循环2位,则得到第三个中间数集{0001b,0101b,1001b,1101b,0011b,0111b,1011b,1111b};按位左循环3位,则得到第四个中间数集{0010b,1010b,0011b,1011b,0110b,1110b,0111b,1111b}。
然后,获取所有中间数集的最长后缀掩码。
一个数集的最长后缀掩码可以用通常的方法获得。
例如,从各位都为不关注比特位的后缀掩码开始,按照不关注比特位的位数从大到小的顺序遍历各个后缀掩码,检查该后缀掩码是否为该数集的掩码,直到找到一个是该数集的掩码的后缀掩码为止,该后缀掩码为数集的最长后缀掩码。例如,对三比特位的数组成的数集,按照“***”,“0**”,“1**”,“00*”,“01*”,“10*”,“11*”,“000”,“001”,“010”,“011”,“100”,“101”,“110”,“111”的顺序依次检查上述后缀掩码是否为该数集的掩码,直到找到一个是该数集的掩码的后缀掩码,例如“01*”,为止,“01*”即为该数集的最长后缀掩码。可选的,当所有包括不关注比特位的后缀掩码都不是该数集的掩码时,也可以停止查找,任选该数集的一个元素的值作为最长后缀掩码。
后缀掩码也可以用二叉树原理得到。
此步骤以获取第一个中间数集{0100b,0101b,0110b,0111b,1100b,1101b,1110b,1111b}即{4,5,6,7,12,13,14,15}为例介绍获取最长后缀掩码的方法。
获取中间数集的最长后缀掩码的方法可以采用二叉树的原理来实现:
(1)可以采用软件或硬件的方式构造二叉树的结构。二叉树的每一结点对应存储器中的一个地址,且每一结点与两个子结点相连接,则称该结点为所述两个子结点的父结点。父结点与子结点之间的连接关系可以通过存储器中的地址间的指向关系来实现,如在父结点中保存其两个子结点的地址,并在子结点中保存其父结点的地址。二进制数的每个比特位的值,可以用该比特位所对应的二叉树中的位置表示;例如,在本实施例中父结点的左子结点对应二进制数“0”,右子结点对应二进制数“1”。二叉树中初始的父结点不对应任何二进制数,称该初始的父结点为二叉树的根结点。二叉树根结点下面的每一层依次对应二进制数的一个比特位,且该二叉树自上而下的每一层依次与二进制数从高到低的每一比特位相对应。例如,图2中构造的二叉树的四层可以与四个比特位的二进制数,如A3A2A1A0,相对应,其中第一层对应该二进制数的最高位A3,第四层对应该二进制数的最低位A0。
(2)查询二叉树的最下层中与中间数集中的各个数对应的结点,并将该结点置为“1”。
例如,在图2中对于数集{4,5,6,7,12,13,14,15}的数4(即0100b)而言,从二叉树的根结点开始查询,依次可以得到0100b在第一层对应左结点,第二层对应右结点,第三层对应左结点,第四层对应左结点,由此得到二叉树的最下层中与0100b对应的结点,可以将该结点置为“1”,即将该结点在存储器中对应的地址所存储的数值置为“1”,以表示该结点与中间数集中的一个数相对应。需要说明的是,各个结点的初始值为“0”。在本发明所有实施例中的二叉树,空白背景的圆圈表示值为0的结点,斜纹背景的圆圈表示值为1的结点。
(3)遍历二叉树的最下层,将每两个有共同父结点的子结点的值求与;若有两个子结点的值求与的结果为1,则将这两个子结点共同的父结点的值置为1,否则,仍为0。
例如,图2中得到二叉树的第三层中结点的值。
(4)依次向上遍历二叉树的每一层,得到二叉树每一层中结点的值。
例如,图2中得到第二层及第一层中结点的值。
(5)若在某一层中的一结点的值为1,则该层以下的各层(不包括该层)所对应的比特位用不关注(“*”)状态表示,该层及该层以上所对应的比特位用“0”或“1”表示,得到表示用于表示所述中间数集的一个后缀掩码。若某一层的多个结点的值为1,则可以得到用于该中间数集的多个后缀掩码。
例如,图2中的第二层中有两个结点的值为1,则对于第二层中4,5,6,7对应的结点而言,其所在层以下的各层即第三层和第四层所对应的比特位用“*”表示,其所在层及该层以上所对应的比特位用“0”或“1”表示,得到用于表示4,5,6,7的后缀掩码01**;同理,对于第二层中12,13,14,15对应的结点而言,可以得到用于表示这四个数的后缀掩码11**。
(6)选择所述至少一个后缀掩码中不关注比特位最多的一个作为所述中间数集的最长后缀掩码。
需要说明的是,若所述至少一个后缀掩码的个数为一个,则该一个后缀掩码为所述最长后缀掩码;若所述至少一个后缀掩码的个数为至少两个,且所述至少两个后缀掩码中不关注比特位最多的不止一个,则可从所述不止一个后缀掩码中任选一个作为最长后缀掩码。
例如,图2得到两个后缀掩码01**和11**,显然这两个后缀掩码的不关注比特位都为两个,故任选一个例如01**,作为第一个中间数集的最长后缀掩码,且该最长后缀掩码的不关注比特位的个数为2。
同理,如图3所示得到第四个中间数集的最长后缀掩码:001*,不关注比特位的个数为1。
如图4所示得到第三个中间数集的最长后缀掩码:0001;不关注比特位的个数为0。
如图5所示得到第二个中间数集的最长后缀掩码:1***;不关注比特位的个数为3。
最后,选取所述所有中间数集的最长后缀掩码中不关注比特位最多的一个作为最终最长后缀掩码,并按照得到该最终最长后缀掩码对应的中间数集的按位循环操作的逆操作,得到所述数集的最长连续掩码。
例如,对于数集为{4,5,6,7,12,13,14,15}而言,由于其第二个中间数集的最长后缀掩码1***的不关注比特位的个数为3,显然,该最长后缀掩码的不关注比特位最多,故将1***作为最终最长后缀掩码。另外,得到所述第二个中间数集的过程是将所述数集中的每个数按位左循环1位,在此时1***需要按照其按位循环逆操作即按位右循环1位,得到所述数集的最长连续掩码*1**。
得到单元63,用于根据所述数集的最长连续掩码得到获取结果。
所述得到单元63,具体用于将所述数集的最长连续掩码以及该数集对该最长连续掩码的余数集中的元素所组成的掩码集作为获取结果。
数集对一个掩码的余数集是指该数集中除去该掩码所代表的数之后剩下的数组成的数集。
例如,对于数集为{4,5,6,7,12,13,14,15}而言,该数集的最长连续掩码为*1**,该数集对该最长连续掩码的余数集为空集,故得到的获取结果为{*1**}。
或者,所述得到单元63,具体用于循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码以及最后一个余数集中的元素所组成的掩码集作为获取结果。
所述所有最长连续掩码为所述数集的最长连续掩码以及循环结束之前得到的各个余数集的最长连续掩码。所述最后一个余数集是指上述循环过程中最后得到的余数集。
该得到单元具体可以用于,获取所述数集对该最长连续掩码的余数集,并获取该余数集的最长连续掩码;若该余数集的最长连续掩码的长度为0,则继续获取该余数集对该余数集的最长连续掩码的余数集,依此循环,直至得到的余数集为空集或者该余数集的最长连续掩码的长度为0为止。将上述过程中得到的所有最长连续掩码,以及得到的最后一个余数集中的元素所组成的掩码集作为获取结果。
一个掩码的长度是指该掩码中不关注比特位的个数。例如,所述最长连续掩码的长度是指该最长连续掩码中不关注比特位的个数。
例如,对于数集{0,1,4,5,6,7,12,13}而言,该数集的最长连续掩码为01**,该数集对该数集的最长连续掩码的余数集为{0,1,12,13},可以将{0,1,12,13}称为第一余数集,该第一余数集的最长后缀掩码为000*;该第一余数集对该第一余数集的最长连续掩码的余数集为{12,13},可以将{12,13}称为第二余数集,该第二余数集的最长连续掩码为110*;该第二余数集对该第二余数集的最长连续掩码的余数集为集,此时循环结束,得到的最后一个余数集为空集。所有最长连续掩码包括:01**、000*和110*,且最后一个余数集为空集,故可以将{01**,000*,110*}作为获取结果。
或者,所述得到单元63,具体用于循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码,即所述数集的最长连续掩码以及循环结束之前得到的各个余数集的最长连续掩码,组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并后的掩码集;将最后一个余数集中的元素与所述合并后的掩码集的元素组成的掩码集作为获取结果。最后一个余数集是指上述循环过程中最后得到的余数集。上述合并可以知进行一次,也可以重复进行直至不能合并为止。
获取所有最长连续掩码的过程可以同上所述,在此不加赘述。
所述具有完全相同不关注比特位的至少两个连续掩码是指,至少两个连续掩码中的所有不关注比特位的位置完全一致。例如,*11**,*10**和*01**的所有不关注比特位都在从左至右的第1、4、5位,则*11**,*10**和*01**具有完全相同不关注比特位。
将得到的所有最长连续掩码组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并结果这一过程可以包括以下步骤:
首先,将掩码集中具有完全相同不关注比特位的至少两个最长连续掩码中的完全相同的不关注比特位用相同的“0”“1”状态组合取代,得到至少两个二进制数。
例如,具有完全相同不关注比特位的至少两个最长连续掩码为011**和001**,则将完全相同不关注比特位用相同的“0”“1”状态取代该完全相同不关注比特位,例如两位连续不关注比特位可以用00取代,得到两个二进制数01100和00100。这两位也可以用01、10或11取代。
其次,将所述至少两个二进制数组成数集,并获取该数集的最长连续掩码作为备用最长连续掩码。
例如,将二进制数01100和00100组成数集{01100b,00100b},获取该数集的最长连续掩码作为备用最长连续掩码。可以按照步骤102中所介绍的获取最长连续掩码的方法,得到该数集的最长连续掩码0*100作为备用最长连续掩码。如果该步骤得到的最长连续掩码的长度为0,则上述具有完全相同不关注比特位的至少两个连续掩码合并后的结果与原先需要合并的至少两个连续掩码相同,可选的,此时可以终止合并。
最后,用与所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个,对该备用最长连续掩码进行掩码取代得到取代结果。将该取代结果与掩码集中没有不能被该取代结果所代表的元素组成合并后的掩码集,合并后的掩码集即为合并结果。其中,所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个为取代方,该备用最长连续掩码为被取代方。
在实际应用中,由于机器只能识别0或1的二进制数,故每个掩码在实际机器中的表示也都是采用二进制来表示或运算的;掩码可以用二进制数和正掩码,或二进制数和反掩码表示。其中,正掩码是用1表示关注,用0表示不关注;相反,反掩码是用0表示关注,用1表示不关注。
如果上述做取代操作的最长连续掩码和该备用最长连续掩码相关,即该备用最长连续掩码可以代表该做取代操作的最长连续掩码的二进制数,则该备用最长连续掩码也可以为取代方。
在用二进制数和正掩码表示掩码时,上述掩码取代为正掩码取代。在用二进制数和反掩码表示掩码时,上述掩码取代为反掩码取代。所述反掩码取代包括:将取代方和被取代方分别用二进制数和反掩码表示,并将取代方和被取代方的两个反掩码按位取或,将按位取或的结果与被取代方的二进制数组成掩码。所述正掩码取代包括:将取代方和被取代方分别用二进制数和正掩码表示,并将取代方和被取代方的两个正掩码按位取与,按位取与的结果与被取代方的二进制数组成掩码。
下面以进行反掩码取代得到合并结果为例进行阐述。
其中,备用最长连续掩码例如为0*100,所述具有完全相同不关注比特位的至少两个最长连续掩码中的任一个例如为:011**。011**为取代方,0*100为被取代方。将0*100用二进制数和反掩码可以表示为:二进制数00100、反掩码01000;将011**用二进制数和反掩码可以表示为:二进制数01100、反掩码00011;将两个反掩码01000和00011按位取或,得到反掩码01011;将该反掩码01011和被取代方的二进制数00100组成不连续掩码0*1**。经过上述操作,掩码011**,001**合并为0*1**。掩码集{011**,001**}中没有不能被0*1**所代表的掩码,因此掩码集{011**,001**}合并为{0*1**}。
进一步的,合并结果中包括不连续掩码,且至少两个不连续掩码具有完全相同的不关注比特位,则可以将所述至少两个不连续掩码进行合并,得到合并结果。
例如,若得到的不连续掩码为000*0**和010*0**,参考上述合并的方法,可以得到合并后的掩码为0*0*0**,将{0*0*0**}作为合并结果。
存储单元64,用于将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
本发明实施例提供的一种TCAM表项的设置装置,通过上述获取最长连续掩码的方法可以得到预先设定的报文同一字段的值所构成的数集的最长连续掩码,并根据该最长连续掩码设置TCAM表项,从而可以进一步提高TCAM的利用率,进而节省TCAM资源。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种TCAM表项的设置方法,其特征在于,包括:
获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数;
获取所述数集的最长连续掩码;其中,获取最长连续掩码的方法包括:将所述数集按位循环操作,获取按位循环操作后的所有数集;获取按位循环操作后的所有数集的最长后缀掩码;将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码;其中,将一个数集按位循环操作是指将该数集中的各个元素做相同的按位循环操作;
根据所述数集的最长连续掩码得到获取结果;
将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
2.根据权利要求1所述的TCAM表项的设置方法,其特征在于,所述根据所述数集的最长连续掩码得到获取结果包括:
将所述数集的最长连续掩码以及该数集对该最长连续掩码的余数集中的元素所组成的掩码集作为获取结果。
3.根据权利要求1所述的TCAM表项的设置方法,其特征在于,所述根据所述数集的最长连续掩码得到获取结果包括:
循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;
将得到的所有最长连续掩码以及最后一个余数集中的元素所组成的掩码集作为获取结果。
4.根据权利要求1所述的TCAM表项的设置方法,其特征在于,所述根据所述数集的最长连续掩码得到获取结果包括:
循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;
将得到的所有最长连续掩码组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并后的掩码集;
将最后一个余数集中的元素与所述合并后的掩码集的元素组成的掩码集作为获取结果。
5.一种TCAM表项的设置装置,其特征在于,包括:
第一获取单元,用于获取预先设定的报文同一字段的值所构成的数集;所述报文为需要执行同一动作的报文,且所述数集包括至少两个数;
第二获取单元,用于获取所述数集的最长连续掩码;其中,该第二获取单元具体用于将所述数集按位循环操作,获取按位循环操作后的所有数集;获取按位循环操作后的所有数集的最长后缀掩码;将上述所有数集的最长后缀掩码中不关注比特位最多的最长后缀掩码做对应的按位循环逆操作,获取最长连续掩码;其中,将一个数集按位循环操作是指将该数集中的各个元素做相同的按位循环操作;
得到单元,用于根据所述数集的最长连续掩码得到获取结果;
存储单元,用于将所述获取结果存储在与所述动作对应的三态内容寻址存储器TCAM表项中。
6.根据权利要求5所述的TCAM表项的设置装置,其特征在于,所述得到单元,具体用于将所述数集的最长连续掩码以及该数集对该最长连续掩码的余数集中的元素所组成的掩码集作为获取结果。
7.根据权利要求5所述的TCAM表项的设置装置,其特征在于,所述得到单元,具体用于循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码以及最后一个余数集中的元素所组成的掩码集作为获取结果。
8.根据权利要求5所述的TCAM表项的设置装置,其特征在于,所述得到单元,具体用于循环获取一数集对这一数集的最长连续掩码的余数集以及该余数集的最长连续掩码,直至该余数集为空或者该余数集的最长连续掩码的长度为0为止;将得到的所有最长连续掩码组成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行合并,得到合并后的掩码集;将最后一个余数集中的元素与所述合并后的掩码集的元素组成的掩码集作为获取结果。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/076593 WO2012159311A1 (zh) | 2011-06-29 | 2011-06-29 | 一种tcam表项的设置方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102986177A CN102986177A (zh) | 2013-03-20 |
CN102986177B true CN102986177B (zh) | 2015-03-11 |
Family
ID=47216554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180001048.9A Expired - Fee Related CN102986177B (zh) | 2011-06-29 | 2011-06-29 | 一种tcam表项的设置方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9330760B2 (zh) |
CN (1) | CN102986177B (zh) |
IL (1) | IL230083A (zh) |
WO (1) | WO2012159311A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10797941B2 (en) | 2016-07-13 | 2020-10-06 | Cisco Technology, Inc. | Determining network element analytics and networking recommendations based thereon |
CN113366465A (zh) * | 2019-01-31 | 2021-09-07 | 奥普塔姆软件股份有限公司 | 近似匹配 |
CN113992579B (zh) * | 2021-09-23 | 2023-03-31 | 新华三信息安全技术有限公司 | 一种路由表项存储方法、查找方法及装置 |
CN115883455A (zh) * | 2022-12-09 | 2023-03-31 | 苏州盛科通信股份有限公司 | 一种压缩路由信息的方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7440304B1 (en) * | 2003-11-03 | 2008-10-21 | Netlogic Microsystems, Inc. | Multiple string searching using ternary content addressable memory |
CN101510855A (zh) * | 2009-04-10 | 2009-08-19 | 华为技术有限公司 | 一种QinQ报文的处理方法和装置 |
US7624226B1 (en) * | 2005-12-20 | 2009-11-24 | Netlogic Microsystems, Inc. | Network search engine (NSE) and method for performing interval location using prefix matching |
CN101866357A (zh) * | 2010-06-11 | 2010-10-20 | 福建星网锐捷网络有限公司 | 一种三态内容寻址存储器的表项更新方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3023310B2 (ja) * | 1996-05-31 | 2000-03-21 | 松下電器産業株式会社 | 光学的情報記録媒体の記録再生方法および記録再生装置 |
US8195873B2 (en) * | 2009-02-06 | 2012-06-05 | Hillel Gazit | Ternary content-addressable memory |
-
2011
- 2011-06-29 WO PCT/CN2011/076593 patent/WO2012159311A1/zh active Application Filing
- 2011-06-29 CN CN201180001048.9A patent/CN102986177B/zh not_active Expired - Fee Related
-
2013
- 2013-12-18 US US14/133,188 patent/US9330760B2/en not_active Expired - Fee Related
- 2013-12-22 IL IL230083A patent/IL230083A/en active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7440304B1 (en) * | 2003-11-03 | 2008-10-21 | Netlogic Microsystems, Inc. | Multiple string searching using ternary content addressable memory |
US7624226B1 (en) * | 2005-12-20 | 2009-11-24 | Netlogic Microsystems, Inc. | Network search engine (NSE) and method for performing interval location using prefix matching |
CN101510855A (zh) * | 2009-04-10 | 2009-08-19 | 华为技术有限公司 | 一种QinQ报文的处理方法和装置 |
CN101866357A (zh) * | 2010-06-11 | 2010-10-20 | 福建星网锐捷网络有限公司 | 一种三态内容寻址存储器的表项更新方法及装置 |
Non-Patent Citations (1)
Title |
---|
卫晓娜.NISG防火墙包分类算法设计与实现.《中国优秀硕士学位论文全文数据库 信息科技辑(2010年)》.2010,(第08期),1-66. * |
Also Published As
Publication number | Publication date |
---|---|
CN102986177A (zh) | 2013-03-20 |
US20140108718A1 (en) | 2014-04-17 |
US9330760B2 (en) | 2016-05-03 |
WO2012159311A1 (zh) | 2012-11-29 |
IL230083A (en) | 2017-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102142009B (zh) | 一种正则表达式匹配的方法及装置 | |
CN102377664B (zh) | 一种基于tcam的区域匹配装置和方法 | |
US9627063B2 (en) | Ternary content addressable memory utilizing common masks and hash lookups | |
Dong et al. | Packet classifiers in ternary CAMs can be smaller | |
CN103117931B (zh) | 基于哈希表和tcam表的mac地址硬件学习方法及*** | |
CN102986177B (zh) | 一种tcam表项的设置方法及装置 | |
CN101345707B (zh) | 一种实现IPv6报文分类的方法及设备 | |
CN104866502A (zh) | 数据匹配的方法及装置 | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
CN102148746A (zh) | 一种报文分类方法和*** | |
CN105376159A (zh) | 报文处理转发装置及方法 | |
CN104268295A (zh) | 一种数据查询方法及装置 | |
CN112667860A (zh) | 一种子图匹配方法、装置、设备及存储介质 | |
CN103404092A (zh) | 路由前缀存储方法、装置及路由地址查找方法、装置 | |
CN104025520A (zh) | 查找表的创建方法、查询方法、控制器、转发设备和*** | |
CN103812860A (zh) | 一种基于fpga的高速网络策略匹配方法 | |
WO2017215102A1 (en) | Method of forwarding data packets, method of creating merged fib key entry and method of creating a search key | |
CN102014065A (zh) | 报文包头的解析方法、包头解析预处理装置和网络处理器 | |
US11140078B1 (en) | Multi-stage prefix matching enhancements | |
CN102164080B (zh) | 路由地址查询方法和装置 | |
TWI413910B (zh) | 數值資料範圍區間查詢方法及系統 | |
CN102904812B (zh) | 路由表项的存储方法、查找方法、装置及*** | |
CN112787938A (zh) | 一种路由表项配置方法及装置 | |
CN112087389B (zh) | 一种报文匹配查表方法、***、存储介质和终端 | |
CN115687560A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150311 |