一种维护内容可地址映射存储器中路由表的方法

文档序号:7562709阅读:236来源:国知局
专利名称:一种维护内容可地址映射存储器中路由表的方法
技术领域
本发明一般涉及网络通信技术,特别涉及一种用于在网络通信中维护CAM(内容可地址映射存储器)中路由表的方法。
背景技术
在具有路由功能的IP网络设备中,路由表存储了当前的路由信息。系统中的各个模块分别对路由表进行添加、删除、搜索等操作。通常搜索路由表有以下几个步骤1)搜索匹配的主机地址;2)搜索匹配的网络地址;3)搜索默认表项(默认表项一般在路由表中被指定为一个网络表项,其网络号为0)。
匹配主机地址步骤始终发生在匹配网络地址步骤之前,而匹配网络地址始终发生在搜索默认表项之前。
路由表可以存储在主机的内存中,在采用网络处理器架构的网络设备中,路由表还可以存储在CAM(内容可地址映射存储器)中,由网络处理器中的微代码进行路由的查找。在CAM中的路由表,其最长匹配搜索由器件完成,而路由表项的插入、删除必须由软件来维护。对于不同的CAM器件,这些维护的算法不一样。
在表项具有优先级的CAM中,写入的路由表项携带优先级。即主机地址的路由表项携带的优先级最高,网络地址的路由表项次之,默认表项最低。这样,器件在进行匹配搜索时,总是先匹配优先级最高的路由表项。
而现在通用的CAM一般的表项都没有优先级,这就需要软件在下发表项的时候,根据表项的优先级重新对CAM中的表项进行排序。
存储在主机的内存中的路由表一般采用二叉树的数据结构,并采用二叉树排序算法,对路由表进行维护和利用(参见机械工业出版社出版的《TCP/IP详解卷二实现》)。由于存储在通用CAM中路由表规模大,表项本身又不带有优先级,而表项的移动需要删除、添加操作,在使用这种算法对路由表项进行维护时,开销很大。因此,二叉树排序算法在维护通用CAM中的路由表项时,并不适用。

发明内容
本发明的一个目的是提供一种在通用的无优先级的CAM中维护路由表的方法,以较小的开销进行大规模路由表的维护和使用。
为实现上述目的,本发明提供了一种维护路由表的方法,包括以下步骤将CAM中路由表映射成多个具有不同优先级的逻辑块;以及利用所述逻辑块进行路由表项的插入和/或删除。
所述路由表的插入包括以下的步骤找出带有空闲表项的逻辑块的步骤;插入待插入路由表项的步骤。
优选地,当找出的带有空闲表项的逻辑块的优先级小于待插入路由表项的优先级时,所找出的逻辑块是所有优先级比待插入路由表项的优先级小的空闲逻辑块中优先级最大的逻辑块;当找出的带有空闲表项的逻辑块的优先级大于待插入路由表项的优先级时,所找出的逻辑块是所有优先级比待插入路由表项的优先级大的空闲逻辑块中的优先级最小的逻辑块。
所述插入待插入路由表项的步骤可选地带有上移路由表项或下移路由表项的步骤。
所述上移路由表项的步骤包括(a)按照优先级从高到底的顺序,将找出的带有空闲表项的逻辑块的下一优先级的逻辑块和具有待插入表项优先级的逻辑块之间的逻辑块的最后一个路由表项依次移动到优先级高一级的逻辑块的空闲尾位置的步骤;(b)在每次移动时,改变相应逻辑块的信息的步骤。
所述下移路由表项的步骤包括(a)按照优先级从低到高的顺序,依次将找出的带有空闲表项的逻辑块和具有待插入表项优先级的逻辑块之间的逻辑块的第一个表项向下移动的步骤;(b)在每次移动时,改变相应逻辑块的信息的步骤。
所述路由表项删除的步骤包括,删除路由表项的步骤,更新逻辑块信息的步骤。可选地,还包括将逻辑块的最后一个路由表项移动到该删除的路由表项原来占用的位置的步骤。
所述的逻辑块由带有头指针、占用的头指针、占用的尾指针、空闲头指针、空闲尾指针的数据结构来储存和管理。
所述的数据结构大小不等。
本发明的维护路由表的方法,做到了开销和路由表的规模无关,开销较小,易于代码实现。


图1是依据本发明的一个实施例的存储和管理逻辑块的数据结构;图2是依据本发明的一个实施例的路由表项插入的流程图;图3是依据本发明的一个实施例的路由表项移动的示意图;图4是图3所示的路由表项移动后的逻辑块示意图。
具体实施例方式
下面结合附图,对本发明的具体实施例进行详细的说明。
路由表中主机路由表项、网络路由表项、默认路由表项的优先级可以通过掩码来标识,主机路由掩码有效位通常有32位,网络路由表项的掩码有效位处于1~31之间,而默认路由表项的掩码有效位个数为0。掩码中的有效位数越长,则路由表项(以下简称表项)的优先级最高,这样总共有33个优先级。
在本发明中将CAM中的路由表映射成33个逻辑块,所谓的逻辑块就是按照路由掩码优先级的大小,逻辑上将路由表划分成33块,每块中路由掩码的优先级相同,每个逻辑块由一个数据结构来存储和管理。在本发明的一个实施例中,如图1所示,这个数据结构为typedef struct tagCAM_QUE_S{ULONGulHead;/*头指针 */
ULONGulUsedHead; /*占用的头指针 */ULONGulUsedTail;/*占用的尾指针 */ULONGulFreeHead; /*空闲头指针 */ULONGulFreeCount; /*空闲表项总数 */ULONGulFreeTail; /*空闲尾指针 */}CAM_QUE_S;其中,头指针指明逻辑块的起始位置,占用的头指针指明逻辑快中第一个路由表项的位置,占用的尾指针指明逻辑块中最后一个路由表项的位置,空闲的头指针表明逻辑快中第一个空闲的位置,空闲尾指针,表明逻辑块中最后一个空闲的位置,空闲表项总数说明空闲位置的总数。在没有空闲表项时,空闲头指针和空闲尾指针的位置重叠,设置为NULL。
以下详细描述本发明的一个实施例的维护路由器的方法的实现。
1.初始化使用大小为33、类型为CAM_QUE_S的结构体数组全局变量来管理逻辑块。并设置各逻辑块中空闲表项数的初始值。可以按照通常情况下各种路由表项的多少,来设定初始值,以最大程度避免表项的移动。例如对5K大小的路由表,可以将各逻辑块初始值如下表设置

路由表的维护包括路由表项的插入与删除。
2.路由表项插入a.首先查找带有空闲表项的逻辑块。
在本说明书中,带有空闲表项的逻辑块,也可称为空闲逻辑块。表项在插入时,根据表项的掩码得到表项的优先级(设为D)。如图2所示,首先寻找与优先级为D的逻辑块距离最近,并且优先级小于等于D的空闲逻辑块,如果找到了,则返回找到的逻辑块的优先级。如果没有找到,则寻找与优先级为D的逻辑块距离最近,而且优先级大于D的逻辑块,如果找到了,则返回找到的逻辑块的优先级;如没有找到,说明路由表中所有的逻辑块都已占用,返回错误。
寻找逻辑块的方法非常简单,可以在一个循环中实现按优先级从高到低遍历逻辑块,利用逻辑块中的空闲表项总数来判断所在逻辑块是否有空闲,利用一个变量保存最后找到的带有空闲表项的逻辑块的优先级。当有空闲表项的逻辑块优先级小于等于待插入表项的优先级时,跳出遍历循环,因为是由高到低的遍历,所以能够保证找到的带有空闲表项的逻辑块是所有优先级小于等于优先级D的带空闲表项的逻辑块中优先级最大的逻辑块。也就是说,找到的空闲逻辑块是最靠近优先级为D逻辑块的优先级小于等于D的空闲逻辑块。否则,直至循环结束。因为变量保存了最后找到的带有空闲表项的逻辑块的优先级,因而能够判断是否找到了优先级大于D的空闲逻辑块,并且可以保证找到的逻辑块是所有优先级大于D的空闲逻辑块中优先级最小的逻辑块,即是最靠近优先级为D的逻辑块的优先级大于D的空闲逻辑块。如果没有找到空闲的逻辑块,返回错误。
b.确定放置待插入表项的位置,并放置该表项。
如果返回的优先级和待插入表项的优先级相同,则直接将表项放到该逻辑块的空闲头位置,同时修改逻辑块的信息,即改变逻辑块的空闲个数,调整指针位置。此处将该逻辑块的空闲个数减一,空闲头指针和尾指针下移,。
如图3的表项上移算法所示,如果返回的优先级大于待插入表项的优先级,则将返回优先级的下一优先级的逻辑块的最后一个表项移动到返回的优先级的逻辑块的空闲尾指针位置,并更改返回的优先级的逻辑块的信息占用的尾指针上移、空闲表项总数减一,如果空闲表项总数减一后为零,即该逻辑块加入表项后已满,则将空闲尾指针置为NULL。这样,就为下一次移动空出了位置。然后,将刚刚移动的逻辑块的下一优先级的逻辑块的最后一个表项移动到上次移动所空出的位置上,并修改上次移动的逻辑块的信息头指针、占用的头指针、占用的尾指针上移,空闲头指针、空闲尾指针仍置为NULL,空闲表项总数不变。重复上述步骤,直至与待插入表项的优先级相同的逻辑块的最后一个表项已移动到空出位置上,其上一优先级逻辑块信息已相应修改。此时将待插入的表项插入到空出的位置上,并修改与之优先级相同的逻辑块信息。
如图3的表项下移算法所示,如果返回的优先级小于待插入表项的优先级,则将返回优先级的逻辑块的第一个表项移动到该逻辑块的空闲头位置,同时更改逻辑块信息将头指针、占用的头指针下移,空闲表项总数减一,空闲头指针下移,如果空闲表项总数减一后为零,即该逻辑块加入表项后已满,则将空闲头指针置为NULL。这样,就为上一优先级的逻辑块空出了位置。然后,将上一优先级的逻辑块的第一个表项移动到上次空出的位置上,并相应修改逻辑块的信息,将头指针、占用的头指针、占用的尾指针下移,空闲头指针依旧设为NULL。重复以上步骤,直到与待插入表项的优先级相同的逻辑块的第一个表项已移动到空出位置上。再将待插入的表项插入到优先级相同的逻辑块的空闲头位置,修改逻辑块的信息将该逻辑块的尾指针下移,其余信息不变。图3示出了只有找到的低优先级的逻辑块与待插入表项的优先级系统的逻辑块之间具有两个需要移动的逻辑块的情况,也可能是一个或多个,甚至没有。在中间没有需要移动的逻辑块时,只需移动两次表项就可以了;在中间具有一个需要移动的逻辑块时,需要移动3次。依此类推。
图4示出了路由表项移动后,相关逻辑块的变化的情况,最终插入表项的逻辑块变大,原空闲逻辑块变小。
在CAM路由表的维护中,修改逻辑块的信息花费的代价是次要的,如何减少表项移动的次数才是重要的。因为逻辑块的信息保存在主机的内存中,但是提供转发的路由表保存在CAM中,主机需要调用驱动函数对CAM中路由表的添加、删除操作,这些操作的代价是相对较大的。本发明的方法能够保证在极端情况下,如优先级最低的表项需要添加时,只有最高优先级的逻辑块中有空闲位置时,路由表项最多移动次数等于表项的优先级总数,而和路由表的大小无关,从而确保了维护路由表的开销很小。
3.表项删除如果待删除的表项处于占用的尾指针处,则直接删除表项,同时更新逻辑块信息。否则进行下一步。
删除表项,将所删除表项所在的逻辑块的占用尾指针处的表项移动到该位置,同时更新逻辑块的信息。
在本发明的精神和范围内,具体的实施方式是可以变化的,例如可以优先寻找与待插入表项最靠近的优先级比待插入表项的优先级大的逻辑块,在找不到的情况下,再寻找与待插入表项最靠近的优先级比待插入表项的优先级小的逻辑块。此时,在遍历的循环中,可按优先级从低到高的顺序遍历。在寻找空闲路由表项时,也可不采用循环的方式,而采用逐一判断的方法等。这些变化的实施方式,都在本发明的保护范围内。
使用本发明的维护路由表的方法,解决了CAM中路由表项无序管理的问题。表项最多移动次数等于表项优先级的总数,和路由表的大小无关。路由表规模非常大的网络设备中,做到的开销和路由表的规模无关,具有较小的开销。本发明的维护路由表的方法简单,易于代码实现。
权利要求
1.一种维护内容可地址映射存储器中路由表的方法,包括以下步骤将内容可地址映射存储器中路由表映射成多个具有不同优先级的逻辑块;以及利用所述逻辑块进行路由表项的插入和/或删除。
2.根据权利要求1所述的方法,其特征在于,所述路由表的插入包括以下的步骤找出带有空闲表项的逻辑块;以及插入路由表项。
3.根据权利要求2所述的方法,其特征在于,当找出的带有空闲表项的逻辑块的优先级小于待插入路由表项的优先级时,所找出的逻辑块是所有优先级比待插入路由表项的优先级小的空闲逻辑块中优先级最大的逻辑块;当找出的带有空闲表项的逻辑块的优先级大于待插入路由表项的优先级时,所找出的逻辑块是所有优先级比待插入路由表项的优先级大的空闲逻辑块中的优先级最小的逻辑块。
4.根据权利要求2或3所述的方法,其特征在于,当找出的带有空闲表项的逻辑块的优先级小于待插入路由表项的优先级时,所述方法进一步包括路由表项下移的步骤;当找出的带有空闲表项的逻辑块的优先级大于待插入路由表项的优先级时,所述方法进一步包括路由表项上移的步骤。
5.根据权利要求4所述的方法,其特征在于,所述上移路由表项的步骤包括(a)按照优先级从高到底的顺序,将找出的带有空闲表项的逻辑块的下一优先级的逻辑块和具有待插入表项优先级的逻辑块之间的逻辑块的最后一个路由表项依次移动到优先级高一级的逻辑块的空闲尾位置;及(b)在每次移动时,改变相应逻辑块的信息。
6.根据权利要求4所述的方法,其特征在于,所述下移路由表项的步骤包括(a)按照优先级从低到高的顺序,依次将找出的带有空闲表项的逻辑块和具有待插入表项优先级的逻辑块之间的逻辑块的第一个表项向下移动;(b)在每次移动时,改变相应逻辑块的信息。
7.根据权利要求1所述的方法,其特征在于,所述路由表项删除的步骤包括,删除路由表项的步骤,更新逻辑块信息的步骤。
8.根据权利要求7所述的方法,其特征在于,进一步包括将所删除路由表项所在的逻辑块的最后一个路由表项移动到该删除的路由表项原来占用的位置的步骤。
9.根据权利要求1到8任一项所述的方法,其特征在于,所述的逻辑块由带有头指针、占用的头指针、占用的尾指针、空闲头指针、空闲尾指针的数据结构来储存和管理。
10.根据权利要求9所述的方法,其特征在于,所述的数据结构大小不等。
全文摘要
本发明公开了一种维护CAM中路由表的方法,将CAM中的路由表在主机上映射成33个具有不同优先级的逻辑块,利用这些逻辑块进行路由表项的插入、删除。所述的逻辑块由带有头指针、占用的头指针、占用的尾指针、空闲头指针、空闲尾指针的数据结构来储存和管理。本发明的维护CAM中路由表的方法,做到了开销和路由表的规模无关,具有较小的开销,并且易于代码实现。
文档编号H04L29/00GK1630247SQ20031012148
公开日2005年6月22日 申请日期2003年12月18日 优先权日2003年12月18日
发明者樊宏伟 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1