显示动态表项的方法和装置的制作方法

文档序号:7972506阅读:133来源:国知局

专利名称::显示动态表项的方法和装置的制作方法
技术领域
:本发明涉及数据通讯领域,特别涉及一种显示动态表项的方法和装置。技术背景分布式网络设备的目的是为了能够转发报文,报文如何转发则由网络设备的表项来决定。网络设备中负责生成表项的部分称为控制平面,负责转发的部分称之为数据平面(又称为转发平面)。控制平面根据用户的配置或协议计算生成表项,转发平面则根据生成的表项进行报文的转发。表项分为静态表项和动态表项,动态表项是指消耗的内存资源随用户配置的变化而变化的表项,用户配置越多,消耗的内存资源越多。如何管理好动态表项,是分布式系统稳定的关键。为了便于诊断网络问题,通常需要显示数据平面的表项。目前有两种技术可以显示数据平面的表项。第一种技术是通过显示控制平面的表项来代替数据平面的表项,对于分布式系统来说,一个表项一般来说都有两份,一份存在控制平面,一份存在数据平面。两份表项的内容应该是一样的,但山于系统中各种各样的原因,有可能不一样。如图1所示,control是控制平面,Dl,D2,D3是三个数据平面。当出现消息丢失、内存被改写或内存异常等情况时,数据平面的表项内容和control中的表项内容就会不一致。因此这种现有技术的缺点是显示的表项有可能是错误的表项,不能真实反映实际表项的内容。第二种技术是通过建立链表的形式来直接显示数据平面的表项,如图2所示为采用静态表加二叉树表形式来管理数据平面的动态表项。二叉树是一种常见的树结构,树中每个节点最多有两个子节点,其左、右子节点分别称为"左孩子"和"右孩子",以根节点的左孩子和右孩子为根的子树被分别称为"左子树"和"右子树"。图中的叶子leafl,leaf2,leaf3,leaf4,leaf5,leaf6,leaf6,leaf7,leaf8对应8个表项内容。动态表项在内存的存放位置并不是连续的,如图3所示为动态表项占用内存资源的示意图。在一段连续的内存资源中,动态表项所占用的内存是分散的,其中灰色部分代表表项,空白部分代表空闲内存。为了显示这些动态表项,需要在它们之间建立一定的关系,即leafl指向leaf2,leaf2指向leaO,依次类推,leaf7指向leaf8,从而形成一个叶子链,如图4所示。然后再建立一张信息表,如表1所示,其中头指针Head指向leafl,尾指针Tail指向leaf8,Count为叶子的个数即表项的个数。当需要显示数据平面的表项时,首先査找信息表,取出头指针Head,依次显示表项内容。表l<table>tableseeoriginaldocumentpage5</column></row><table>这种技术的缺点是1、采用叶子指针使系统的稳定性较差;2、当添加和删除表项时,需要维护叶子链表的指向关系,影响表项的维护性能;3、当叶子指针发生错误时,容易出现叶子链断链,叶子链成环等问题,不仅给表项维护带来很大的麻烦,而且可能无法正确显示表项。
发明内容为了解决现有技术不能很好地显示数据平面动态表项以及表项维护复杂的问题,本发明提供了一种显示动态表项的方法,具体包括以下步骤步骤A:给存放动态表项的内存资源中的每个地址都设置用于区分动态表项和空闲内存的表项标志位;步骤B:收到显示所述内存资源中动态表项的请求消息后,遍历所述内存资源,并根据每个地址的表项标志位判断当前地址是否存有表项,如果是,则读出当前地址中的表项内容;步骤C:遍历结束后,显示所有读出的表项内容。所述请求消息中包括一次显示所有表项内容的标识,所述歩骤C具体为当遍历到内存资源的末尾时结束遍历,显示所有读出的表项内容。所述请求消息中包括系统一次能显示表项的数目,所述步骤C具体为当遍历到内存资源的末尾时或读出的表项数目等于系统一次能显示表项的数目时结束遍历,显示所有读出的表项内容。所述步骤A还包括给所述内存资源中的所有动态表项都设置用于区分不同类型表项的表项类型标识;相应地所述步骤C中在显示所有读出的表项内容时根据所述表项类型标识按类型分别显示表项内容。所述步骤A还包括在所述内存资源中的所有动态表项内容中都预留扩展位。本发明还提供了一种显示动态表项的装置,包括(1)初始化模块,用于给内存资源中的每个地址都设置用于区分动态表项和空闲内存的表项标志位;(2)遍历模块,用于在接收到显示动态表项的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容;(3)显示模块,用于显示所述遍历模块读出的所有表项内容。所述遍历模块具体为全部显示遍历模块,用于在接收到包含一次显示所有表项的标识的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容,还用于遍历到所述内存资源的末尾处时结束遍历。所述遍历模块具体为分次显示遍历模块,用于在接收到包含系统一次显示表项数目的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容,还用于遍历到所述内存资源的末尾处或处理的表项个数等于系统一次显示表项的数目时结束遍历。所述初始化模块还包括类型标识子模块,用于给所述内存资源中的所有动态表项都设置表项类型标识;所述显示模块还包括分类显示子模块,用于根据所述类型标识子模块设置的表项类型标识按类型分别显示所述遍历模块读出的所有表项内容。所述初始化模块还包括扩展子模块,用于在所述内存资源的所有动态表项内容中都预留扩展位。本发明的有益效果是1、用软件实现代码简单,由于没有采用指针,极大地提高了系统的稳定性;2、只需维护资源信息表和处理信息表两个静态表,对动态表项的维护影响很小;3、通过在表项内容中预留扩展位,使动态表项的可扩展性很好。图1是现有技术之一显示数据平面动态表项的示意图;图2是数据平面动态表项的一种组织结构图3是数据平面动态表项在内存资源中存放的示意图;图4是现有技术之二显示数据平面动态表项的叶子链结构图;图5是本发明显示动态表项的方法一实施例流程图;图6是本发明显示动态表项的装置一实施例结构图。具体实施方式下面结合附图和具体实施例对本发明作进一步说明,但不作为对本发明的限定。本发明给存放动态表项的内存资源中的每个地址都设置表项标志位,用于区分动态表项和空闲内存,在收到显示内存资源中动态表项的请求消息后,遍历内存资源,并根据每个地址的表项标志位判断当前地址是否存有表项,如果是,则读出当前表项内容,否则不做处理,遍历结束后,显示所有读出的表项内容。参见图5,本发明提供了一种显示动态表项的方法,首先执行初始化的+步骤步骤101:首先创建一个资源信息表,用来存放系统分配的资源信息;在分布式系统中,系统在初始化时会分配一些动态资源用于存放表项,动态资源又称为freelist,系统分配fredist时会指定当前freelist的资源信息表项基址、表项高度及地址总个数等信息;表项基址就是当前freelist在内存中的起始地址;表项高度是指每个表项在当前freelist中存放时所占用的地址个数,对于一个freelist来说,其中的每个表项都是按照相同的高度来存放的;地址总个数是指当前freelist中总共有多少个地址;资源信息表中就保存了上述资源信息,长度为10个字节,如表2所示;表2<table>tableseeoriginaldocumentpage7</column></row><table>步骤102:将系统分配的freelist中的每个地址都置上标志位,即设置最高字节的最高位为表项标志位,置为1时表示当前地址的内存中存有表项,置为O时表示当前地址的内存为空闲内存;为了能够区分存放于同一段freelist资源中的不同类型的表项,还可以设置表项的最高字节的后7位为表项类型标识,例如假设当前freelist中既存放有MAC(MediaAccessControl,介质访问控制)表,又存放有路由表,则对于MAC表项申请的资源,把表项中的表项类型标识置l,对于路由表申请的资源,把表项中的表项类型标识置2;为了增强动态表项的可扩展性,在表项内容中还预留了3个字节以备扩展用,例如用1个字节作为表项老化标识,在生成表项时将其置l;老化定时器到时将其置O,表明该表项己老化,可以将该表项删除了;经过上述设置后表项内容的前四个字节已被占用,如表3所示,这四个字节对表项中的数据内容不会造成影响;表3<table>tableseeoriginaldocumentpage8</column></row><table>步骤103:考虑到控制平面向数据平面发送显示动态表项的请求消息时,系统分配的内存有限,有可能一次无法显示一个fredist内的所有表项,所以这种情况下就会根据请求消息中的参数进行多次显示;例如在请求消息中指定当前系统一次只能显示10个表项,而fredist中实际存有50个表项,则需要显示5次,才能将所有表项都显示完;创建一个处理信息表,在系统需要多次显示时用来记录分次显示表项的相关信息,如表4所示表4<table>tableseeoriginaldocumentpage8</column></row><table>表中包含上一次查看到的表项地址、处理过的地址个数、地址总个数和表项高度,其中地址总个数和表项高度的含义与资源信息表中的地址总个数和表项高度的含义相同;在分次显示时,如果当前显示是首次显示,则表项起始地址从资源信息表中读取,如果当前显示是后续显示,则表项起始地址从处理信息表中读取;然后执行以下步骤-步骤104:控制平面向数据平面发送显示动态表项的请求消息,请求消息中携带三个参数分次显示标识、表项类型标识和系统一次能显示的表项个数;步骤105:检查分次显示标识是否合法,如果合法则执行步骤106,否则退出;本实施例中定义分次显示标识的合法值为0、l和OxF,O代表首次显示,1代表后续显示,OxF代表本次显示所有表项;这三个值可以根据需要设为其它的值步骤106:判断分次显示标识的值是否为O或OxF,如果是,表明本次显示为首次显示或一次显示所有表项,则执行步骤107,否则表明本次显示为后续显示,则执行步骤108;步骤107:从资源信息表中读取表项基址、表项高度和地址总个数,将表项基址作为遍历的起始地址,设置参数当前处理过的地址个数并初始化为0,然后执行步骤109;步骤108:从处理信息表中读取上一次查看到的表项地址、处理过的地址个数、地址总个数和表项高度,将上一次查看到的表项地址加上表项高度计算得到遍历的起始地址;步骤109:从得到的遍历起始地址开始遍历fredist,读出一个地址内容,将参数处理过的地址个数加1;步骤110:判断当前地址内容的最高字节的最高位是否为1,如果为l,表明当前地址为表项内容,则执行步骤lll;如果为O,表明当前地址为空闲内存,则执行歩骤112;歩骤lll:将表项内容拷贝出来,放入一块应请求消息所分配的新内存中;步骤112:将遍历起始地址加表项的高度计算出下一个地址,并从得到的下一个地址开始继续遍历freelist;由于fredist中的空闲内存会在某些时刻用来存放新的表项内容,所以空闲内存占用的地址个数是按照表项的高度来定义的,因此无论当前地址是表项内容还是空闲内存,计算下一个地址时都加表项的高度步骤113:判断请求消息中的分次显示标识是否为OxF,如果是,表明本次需要显示所有表项,则执行步骤114;否则表明本次显示为首次显示或后续显示,执行歩骤115;步骤114:继续遍历fredist,每处理一个地址就将当前处理过的地址个数加1,遇到表项内容就将其拷贝出来以备显示,直到当前处理过的地址个数等于内存资源的地址总个数为止,即一直遍历到内存资源的末尾,然后显示所有拷贝出来的表项内容并退出;步骤U5:继续遍历freelist,每处理一个地址就将当前处理过的地址个数加1,遇到表项内容就将其拷贝出来以备显示,并记录处理过的表项个数,当符合下面两个条件中的任意-一个时就停止遍历a)处理过的表项个数达到请求消息中指定的系统一次能显示的表项个数;b)当前处理过的地址个数等于内存资源的地址总个数;然后更新处理信息表中的参数,即将本次最后一个处理的表项地址赋给参数上一次査看到的表项地址并存入处理信息表中,还有处理过的地址个数也存入处理信息表中;最后显示本次处理过程中拷贝出来的所有表项内容并退出。参见图6,本发明还提供了一种显示动态表项的装置,具体包括(1)初始化模块,用于给内存资源中的每个地址都设置用于区分动态表项和空闲内存的表项标志位;(2)遍历模块,用于在接收到显示动态表项的请求消息后遍历内存资源,还用于根据初始化模块设置的表项标志位读出表项内容;(3)显示模块,用于显示遍历模块读出的所有表项内容。在需要一次显示内存资源中的所有表项时,遍历模块具体为全部显示遍历模块,用于在接收到包含一次显示所有表项的标识的请求消息后遍历内存资源,还用于根据初始化模块设置的表项标志位读出表项内容,还用于遍历到内存资源的末尾处时结束遍历。在系统资源有限需要分多次显示所有表项时,遍历模块具体为分次显示遍历模块,用于在接收到包含系统一次显示表项数目的请求消息后遍历内存资源,还用于根据初始化模块设置的表项标志位读出表项内容,还用于遍历到内存资源的木尾处或处理的表项个数等于系统一次显示表项的数目时结束遍历。为了能够分别显示存放于同一段内存资源中的不同类型的动态表项,初始化模块还包括类型标识子模块,用于给内存资源中的所有动态表项都设置表项类型标识;相应地,显示模块还包括分类显示子模块,用于根据类型标识子模块设置的表项类型标识按类型分别显示遍历模块读出的所有表项内容。为了使动态表项具有良好的扩展性,初始化模块还可以包括扩展子模块,用于在内存资源中的所有动态表项内容中都预留扩展位。以上所述的实施例,只是本发明较优选的具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。权利要求1.一种显示动态表项的方法,其特征在于,所述方法具体包括以下步骤步骤A给存放动态表项的内存资源中的每个地址都设置用于区分动态表项和空闲内存的表项标志位;步骤B收到显示所述内存资源中动态表项的请求消息后,遍历所述内存资源,并根据每个地址的表项标志位判断当前地址是否存有表项,如果是,则读出当前地址中的表项内容;步骤C遍历结束后,显示所有读出的表项内容。2.根据权利要求1所述的显示动态表项的方法,其特征在于,所述请求消息中包括一次显示所有表项内容的标识,所述步骤C具体为当遍历到内存资源的末尾时结束遍历,显示所有读出的表项内容。3.根据权利要求1所述的显示动态表项的方法,其特征在于,所述请求消息中包括系统一次能显示表项的数目,所述步骤C具体为当遍历到内存资源的末尾时或读出的表项数目等于系统一次能显示表项的数目时结束遍历,显示所有读出的表项内容。4.根据权利要求1、2或3所述的显示动态表项的方法,其特征在于,所述歩骤A还包括给所述内存资源中的所有动态表项都设置用于区分不同类型表项的表项类型标识;相应地所述歩骤C中在显示所有读出的表项内容时根据所述表项类型标识按类型分别显示表项内容。5.根据权利要求1、2或3所述的显示动态表项的方法,其特征在于,所述歩骤A还包括在所述内存资源的所有动态表项内容中都预留扩展位。6.—种显示动态表项的装置,其特征在于,所述装置包括(1)初始化模块,用于给内存资源中的每个地址都设置用于区分动态表项和空闲内存的表项标志位;(2)遍历模块,用于在接收到显示动态表项的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容;(3)显示模块,用于显示所述遍历模块读出的所有表项内容。7.根据权利要求6所述的显示动态表项的装置,其特征在于,所述遍历模块具体为-全部显示遍历模块,用于在接收到包含一次显示所有表项的标识的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容,还用于遍历到所述内存资源的末尾处时结束遍历。8.根据权利要求6所述的显示动态表项的装置,其特征在于,所述遍历模块具体为-分次显示遍历模块,用于在接收到包含系统一次显示表项数目的请求消息后遍历所述内存资源,还用于根据所述初始化模块设置的表项标志位读出表项内容,还用于遍历到所述内存资源的末尾处或处理的表项个数等于系统一次显示表项的数目时结束遍历。9.根据权利要求6、7或8所述的显示动态表项的装置,其特征在于,所述初始化模块还包括类型标识子模块,用于给所述内存资源中的所有动态表项都设置表项类型标识;所述显示模块还包括分类显示子模块,用于根据所述类型标识子模块设置的表项类型标识按类型分别显示所述遍历模块读出的所有表项内容。10.根据权利要求6、7或8所述的显示动态表项的装置,其特征在于,所述初始化模块还包括扩展子模块,用于在所述内存资源的所有动态表项内容中都预留扩展位。全文摘要本发明提供了一种显示动态表项的方法和装置,属于数据通讯领域。为了解决现有技术不能很好地显示数据平面动态表项以及表项维护复杂的问题,本发明提供了一种显示动态表项的方法,包括设置表项标志位。遍历内存资源以及显示表项内容的步骤;本发明还提供了一种显示动态表项的装置,包括初始化模块、遍历模块和显示模块。采用本发明所述的技术方案,不仅极大地提高了系统的稳定性,而且对动态表项的维护影响很小,还使动态表项的可扩展性很好。文档编号H04L12/56GK101150495SQ20061015292公开日2008年3月26日申请日期2006年9月20日优先权日2006年9月20日发明者任广涛申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1