CN102986177A - 一种tcam表项的设置方法及装置 - Google Patents

一种tcam表项的设置方法及装置 Download PDF

Info

Publication number
CN102986177A
CN102986177A CN2011800010489A CN201180001048A CN102986177A CN 102986177 A CN102986177 A CN 102986177A CN 2011800010489 A CN2011800010489 A CN 2011800010489A CN 201180001048 A CN201180001048 A CN 201180001048A CN 102986177 A CN102986177 A CN 102986177A
Authority
CN
China
Prior art keywords
mask
manifold
long continuous
long
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.)
Granted
Application number
CN2011800010489A
Other languages
English (en)
Other versions
CN102986177B (zh
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN102986177A publication Critical patent/CN102986177A/zh
Application granted granted Critical
Publication of CN102986177B publication Critical patent/CN102986177B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital 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/04Digital 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
    • 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/74591Address table lookup; Address filtering using content-addressable memories [CAM]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C15/00Digital 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表项的设置方法及 装置。
背景技术
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 中构造的二叉树的四层可以与四个比特位的二进制数, 如 A3A2A!A0, 相对应, 其中第一层对应该二进制数的最高位 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, I5}而言, 由于 其第四个中间数集的最长后缀掩码 1***的不关注比特位的个数为 3, 显然, 该最长后缀掩码的不关注比特位最多, 故将 1***作为最 终最长后缀掩码。 另外, 得到所述第四个中间数集的过程是将所述 数集中的每个数按位左循环 3位, 在此时 1***需要按照其按位循环 逆操作即按位右循环 3位, 得到所述数集的最长连续掩码 *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 为止; 将得到的所有最长连续掩码, 即 所述数集的最长连续掩码以及循环结束之前得到的各个余数集的最 长连续掩码, 组成的掩码集中具有完全相同不关注比特位的至少两 个连续掩码进行合并, 得到合并后的掩码集, 将最后一个余数集中 的元素与合并后的掩码集的元素组成的掩码集作为获取结果。 最后 一个余数集是指上述循环过程中最后得到的余数集。 上述合并可以 知进行一次, 也可以重复进行直至不能合并为止。
获取所有最长连续掩码的过程可以同上所述, 在此不加赘述。 所述具有完全相同不关注比特位的至少两个连续掩码是指, 至 少两个连续掩码中的所有不关注比特位的位置完全一致。 例如,
*10**和 *01**的所有不关注比特位都在从左至右的第 1、 4、 5位, 则 *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"**。 掩码集 {011**, 001*"中没 有不能被 0*1**所代表的掩码, 因此掩码集 {011**, 001**}合并为 进一步的, 合并结果中包括不连续掩码, 且至少两个不连续掩 码具有完全相同的不关注比特位, 则可以将所述至少两个不连续掩 码进行合并, 得到合并结果。
例如, 若得到的不连续掩码为 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, 访问控制歹l表) 应用为例, 所述 才艮文包括以下一个或多个字段: 源 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 中构造的二叉树的四层可以与四个比特位的二进制数, 如 A3A2A!A0, 相对应, 其中第一层对应该二进制数的最高位 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, I5}而言, 由于 其第四个中间数集的最长后缀掩码 1***的不关注比特位的个数为 3, 显然, 该最长后缀掩码的不关注比特位最多, 故将 1***作为最 终最长后缀掩码。 另外, 得到所述第四个中间数集的过程是将所述 数集中的每个数按位左循环 3位, 在此时 1***需要按照其按位循环 逆操作即按位右循环 3位, 得到所述数集的最长连续掩码 *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 为止; 将得到的 所有最长连续掩码, 即所述数集的最长连续掩码以及循环结束之前 得到的各个余数集的最长连续掩码, 组成的掩码集中具有完全相同 不关注比特位的至少两个连续掩码进行合并, 得到合并后的掩码集; 将最后一个余数集中的元素与所述合并后的掩码集的元素组成的掩 码集作为获取结果。 最后一个余数集是指上述循环过程中最后得到 的余数集。 上述合并可以知进行一次, 也可以重复进行直至不能合 并为止。
获取所有最长连续掩码的过程可以同上所述, 在此不加赘述。 所述具有完全相同不关注比特位的至少两个连续掩码是指, 至 少两个连续掩码中的所有不关注比特位的位置完全一致。 例如,
*10**和 *01**的所有不关注比特位都在从左至右的第 1、 4、 5位, 则 *10**和 *01**具有完全相同不关注比特位。
将得到的所有最长连续掩码组成的掩码集中具有完全相同不关 注比特位的至少两个连续掩码进行合并, 得到合并结果这一过程可 以包括以下步骤:
首先, 将掩码集中具有完全相同不关注比特位的至少两个最长 连续掩码中的完全相同的不关注比特位用相同的 "0" "1" 状态组合 取代, 得到至少两个二进制数。
例如, 具有完全相同不关注比特位的至少两个最长连续掩码为 011**和 001**, 则将完全相同不关注比特位用相同的 "0" "1" 状态 取代该完全相同不关注比特位, 例如两位连续不关注比特位可以用
00取代, 得到两个二进制数 01 100和 00100。 这两位也可以用 01、 10或 1 1取代。
其次, 将所述至少两个二进制数组成数集, 并获取该数集的最 长连续掩码作为备用最长连续掩码。
例如, 将二进制数 01 100和 00100组成数集 {01 100b , 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"**。 掩码集 {011**, 001*"中没 有不能被 0*1**所代表的掩码, 因此掩码集 {011**, 001**}合并为 进一步的, 合并结果中包括不连续掩码, 且至少两个不连续掩 码具有完全相同的不关注比特位, 则可以将所述至少两个不连续掩 码进行合并, 得到合并结果。
例如, 若得到的不连续掩码为 000*0**和 010*0**, 参考上述合 并的方法, 可以得到合并后的掩码为 0*0*0**, 将 { 0*0*0**} 作为 合并结果。
存储单元 64, 用于将所述获取结果存储在与所述动作对应的三 态内容寻址存储器 TCAM表项中。
本发明实施例提供的一种 TCAM表项的设置装置, 通过上述获取 最长连续掩码的方法可以得到预先设定的报文同一字段的值所构成 的数集的最长连续掩码, 并根据该最长连续掩码设置 TCAM表项, 从而可以进一步提高 TCAM的利用率, 进而节省 TCAM资源。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到 本发明可借助软件加必需的通用硬件的方式来实现, 当然也可以通过硬 件, 但很多情况下前者是更佳的实施方式。 基于这样的理解, 本发明的技 术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式 体现出来, 该计算机软件产品存储在可读取的存储介质中, 如计算机的软 盘, 硬盘或光盘等, 包括若干指令用以使得一台计算机设备(可以是个人 计算机, 服务器, 或者网络设备等) 执行本发明各个实施例所述的方法。
以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不局 限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内, 可 轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本发 明的保护范围应以所述权利要求的保护范围为准。

Claims (1)

  1. 权 利 要 求 书
    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为止; 将得到的所有最长连续掩码组 成的掩码集中具有完全相同不关注比特位的至少两个连续掩码进行 合并, 得到合并后的掩码集; 将最后一个余数集中的元素与所述合并 后的掩码集的元素组成的掩码集作为获取结果。
CN201180001048.9A 2011-06-29 2011-06-29 一种tcam表项的设置方法及装置 Expired - Fee Related CN102986177B (zh)

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 true CN102986177A (zh) 2013-03-20
CN102986177B 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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113992579A (zh) * 2021-09-23 2022-01-28 新华三信息安全技术有限公司 一种路由表项存储方法、查找方法及装置
CN115883455A (zh) * 2022-12-09 2023-03-31 苏州盛科通信股份有限公司 一种压缩路由信息的方法、装置、电子设备及存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
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 奥普塔姆软件股份有限公司 近似匹配

Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
卫晓娜: "NISG防火墙包分类算法设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑(2010年)》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113992579A (zh) * 2021-09-23 2022-01-28 新华三信息安全技术有限公司 一种路由表项存储方法、查找方法及装置
CN113992579B (zh) * 2021-09-23 2023-03-31 新华三信息安全技术有限公司 一种路由表项存储方法、查找方法及装置
CN115883455A (zh) * 2022-12-09 2023-03-31 苏州盛科通信股份有限公司 一种压缩路由信息的方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
US20140108718A1 (en) 2014-04-17
CN102986177B (zh) 2015-03-11
WO2012159311A1 (zh) 2012-11-29
US9330760B2 (en) 2016-05-03
IL230083A (en) 2017-07-31

Similar Documents

Publication Publication Date Title
CN102142009B (zh) 一种正则表达式匹配的方法及装置
US7535906B2 (en) Packet classification
Qi et al. Multi-dimensional packet classification on FPGA: 100 Gbps and beyond
CN102945249B (zh) 一种策略规则匹配查询树生成方法、匹配方法及装置
CN105515997B (zh) 基于bf_tcam实现零范围扩张的高效范围匹配方法
CN101345707A (zh) 一种实现IPv6报文分类的方法及设备
CN102291301A (zh) 一种报文特征的匹配方法及装置
CN101834788B (zh) 媒体访问控制地址表项的存储操作方法、装置及设备
US11652744B1 (en) Multi-stage prefix matching enhancements
CN104866502A (zh) 数据匹配的方法及装置
CN102970150A (zh) 用于数据中心的可扩展组播转发方法和设备
CN102986177A (zh) 一种tcam表项的设置方法及装置
CN104268295A (zh) 一种数据查询方法及装置
CN107948060A (zh) 一种新型的路由表建立、以及ip路由查找方法和装置
CN103404092A (zh) 路由前缀存储方法、装置及路由地址查找方法、装置
CN104025520A (zh) 查找表的创建方法、查询方法、控制器、转发设备和***
CN103812860A (zh) 一种基于fpga的高速网络策略匹配方法
CN106416152A (zh) 一种查找装置、查找配置方法和查找方法
CN109921995A (zh) 一种配置地址表的方法、fpga和应用该fpga的网络设备
CN107276916A (zh) 基于协议无感知转发技术的交换机流表管理方法
CN104780101A (zh) 内容中心网络转发平面fib表结构及其检索方法
CN102014065A (zh) 报文包头的解析方法、包头解析预处理装置和网络处理器
CN112787938B (zh) 一种路由表项配置方法及装置
Kekely et al. Packet classification with limited memory resources
TWI413910B (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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150311