专利名称:L3交换机海量配置的快速恢复方法
技术领域:
本发明属于计算机网络通信领域,具体涉及分布式结构通信设备中,整机启动和单板(模块)插拔时的配置保存和恢复。
背景技术:
在通信设备中,特别是处在复杂网络环境中的通信设备,当设备掉电重启之后,管理人员需要重新进行配置,这是一项十分繁重的工作,在设备较多的情况下,使人难以忍受。如果在用户进行配置完成之后,能够把配置保存下来,在下一次设备重新启动的时候把这些配置自动恢复。这样可以减轻用户的配置工作。
另外,如果设备是基于分布式构架而设计的,那么当其中一块单板(模块)拔出的时候,需保存这块板相关的配置信息,当板再次插入的时候,恢复其相关配置,应恢复到拔出时的状态,即“热插拔”。
目前比较普遍的实现这两个功能的方案,在对内存进行操作的时候使用了分配固定大小的内存或者使用realloc进行动态增长的方法,这些方法存在如下问题1、支持的配置量的问题因为在配置保存的时候要先把配置保存到内存,在恢复时要进行文本分析,所以一般在处理配置信息的时候,都要分配相应的内存。在操作过程中可能会遇到下述的两种情况一是不能知道需要分配的内存的具体大小,比如用来保存配置信息的存储设备不支持,或者软件算法导致的内存大小未知;二是软件运行的系统平台有最大分配内存块的限制。对于前者只能大概估算一下最大的配置量,分配相应内存,如果估算过小,功能将会有问题,如果估算过大,势必造成较大的内存浪费。如果使用realloc的方法,效率会比较低,因为会有大量的内存拷贝的动作。对于后者,如果不采取其他的内存使用方法,那就直接限制了交换机所能支持的最大配置量。而realloc方法也不能解决这个问题。
2、热插拔实现效率不高热插拔的实现一般有两种方案,一是当单板插入的时候,执行所有的命令,这样会有一些无关的命令也被执行,功能上有冗余,并且效率不高;二就是只执行插入板相关的命令,这要求配置命令跟板有一个对应的关系,需要进行文本分析,分割配置信息。这就出现了前面提到的问题每一块板相关的配置信息在分析之前是未知的,如何分配和使用内存?而且当配置量很大的时候,文本分析的效率会变得比较低,因为需要针对不同的板号进行循环多次的遍历分析。
发明内容
本发明克服上述整机启动和单板插拔时配置保存和恢复的不足,提供一种提高存储和执行性能的L3交换机海量配置的快速恢复方法。
本发明的技术内容一种L3交换机海量配置的快速恢复方法,包括(1)用户保存配置的时候,每个模块分别以命令的形式输出自己的配置信息,配置信息保存在一个buffer link中;(2)当所有的配置信息获取完成后,将配置信息一次性的写入存储设备中;(3)当设备重新启动之后,从存储设备中读取配置信息到buffer link中。
所述buffer link由多个buffer link node组成,buffer link node中存放配置信息,使用指针把多个buffer link node连接成一个link。
所述步骤(3)进一步包括为每一块板分配一个buffer link,从存放了所有配置信息的buffer link中把跟每块板相关的命令分别提取到自己的buffer link中。
将所述板对应的命令行注释掉,行的第一个字符用一个特殊的字符进行代替。
本发明的技术效果与现有技术相比,有以下优点1、保证配置的保存,内存消耗随着配置的增加逐步增加,不用预先申请估算的内存。如果系统有内存块大小的限制,使用该方法也可以得到完善的解决。
2、提高效率,与realloc动态分配内存方法进行比较,realloc重新分配内存需要做内存的拷贝,把原来内存块中的内容拷贝到更大的一块内存中,这在配置信息比较大的时候是很费时的,为了减少内存拷贝的次数,realloc一般是以2倍于原来的容量的速度增加,这样内存的使用率又会降低。本发明不需要内存拷贝,以一个用户指定的粒度增加内存,具有效率更高、增长粒度更小且可控的优点。
3、基于单板的热插拔配置恢复,功能没有冗余,效率高。在单板插入的时候只执行该板相关的配置而不是执行所有的配置,这在功能上避免了冗余的命令执行可能带来的副作用,也使得性能得到提高。在板相关的配置信息提取的过程中使用buffer link,在内存使用上没有冗余也没有限制。
图1是本发明配置信息保存流程图;图2是本发明从存储设备读取配置信息流程图;图3是本发明基于单板的热插拔配置提取流程图;图4是本发明buffer link的数据结构示意图;图5是本发明的具体实施例中所有配置信息存储在buffer link中的示意图;图6是本发明的具体实施例中所有配置信息存储在存储设备中的示意图;图7是本发明的具体实施例中配置存储在对应板的buffer link中的示意图。
具体实施例方式
参考图1、图2,本发明配置恢复和基于单板的热插拔的实现步骤如下在用户保存配置的时候,每个模块分别以命令的形式输出自己的配置信息,这些配置信息不是保存在一块完整的内存中,而是放到一个buffer link中,当所有的配置信息都获取完成后,把所有的配置信息一次性的写入存储设备中,buffer link由多个buffer link node组成,参考图4,buffer link node中存放配置信息,使用指针把多个buffer link node连接起来成为一个link。
当buffer link容量不够的时候,就再申请一个buffer link node,增加buffer link的容量,占用的内存就随着配置信息的多少以一个很小的粒度进行增长。
为了给用户提供一个清晰、简单的界面,buffer link被以下接口函数封装起来,●buffer_head buffer_link_new(int size),创建一个buffer link。可以指定每个buffer_node的容量●buffer_link_destroy(buffer_head b),销毁一个buffer link●buffer_link_put(buffer_head b,char*data,int size),向一个buffer link中存放数据●char*buffer_link_get_next(buffer_head b,char*addr),根据buffer link中保存的一个字符的地址得到下一个字符的地址●int buffer_link_strcmp(char*strl,buffer_head b,char*strinbuffer),bufferlink中保存的一个字符串跟一个正常的字符串进行比较是否相等●int buffer_link_bufstrcmp(buffer_head a,char*strinbuffera,buffer_head b,char*strinbufferb),buffer link中的两个字符串进行比较是否相等●buffer_link_bufstrcpy(buffer_head d,char*deststring,buffer_head s,char*sourcestring),一个buffer link的内容拷贝到另外一个buffr link中●buffer_link_strcpy2buf(buffe_head d,char*deststring,char*sourcestring),正常的字符串拷贝到buffer link●buffer_link_strbufcpy2(char*deststring,buffer_head s,char*sourcestring),buffer link拷贝到正常的字符串●buffer_link_bufstrlen(char*string,buffer_head s),得到buffer_link中的字符串的长度这些接口函数跟正常内存下的字符串操作函数的对应关系如下
按照正常内存处理的代码逻辑,只进行对应函数的替换,就可以在代码中实现buffer link的使用,当设备重新启动之后,从存储设备中读取配置信息到buffer link中。通过使用buffer link完成了配置信息的保存和恢复。
参考图3,本发明基于单板热插拔进行配置的提取,为每块板分配bufferlink,将与该板相关的配置信息存放到对应的buffer link中实现针对单板的配置提取。当单板拔出的时候,更新该板对应的配置信息;当板插入的时候,执行新板的配置信息,而不是执行所有的配置。在提取过程中,由于第一块板相关的命令,在提取第二快板的信息的时候被再次分析。如果在第一块板的信息被拷贝到其他地方的时候,需从原始的配置信息中删除的话(也就是move而不是copy),由于把配置信息后面的内容往前移才覆盖被删除内容,其效率不高。而且考虑到要在buffer link中实现这种移动的话,难度更大。因此,本发明把对应的行注释掉,把这一行的第一个字符用一个特殊的字符进行代替,后续的分析如果发现行的开始是这种字符的话,就忽略这一行,这样就简单高效的实现了提取。
按照本发明的技术方案,选一具体案例说明本发明的实施方式在用户保存配置的时候,每个模块分别以命令的形式输出自己的配置信息,这些配置信息放到一个buffer link中,我们给这个buffer link取一个名字叫做save_info。假设一共得到了7条命令,其中有3条是关于板1的,即命令a,命令d,和命令g;有两条关于板2的,即命令c和命令f;最后两条b和f是关于板3的;并且每条命令的长度不尽相同,命令a,c,d,f,g大小是1单位,命令b的大小是2单位,命令e的大小是3单位。如果save_info中buffer link node的大小是1单位,图5就是这些命令在save_info中存放的情形。
然后这些命令被存放到存储设备中,如图6所示。
当设备重新启动的时候,创建一个buffer link叫做config_info,用来存放所有的配置信息,config_info开始是空的,指向first和last的指针都为空。假设config_info中buffer link node的大小也是1单位,依次从存储设备中读取信息存放到config_info中,如果config_info的容量不够了,就再申请新的buffer linknode。
所有的配置信息都读取后,开始针对每个单板进行提取。参考图7,为每个板分配一个buffer link,分别叫card_1,card_2和card_3,开始提取第一块板相关的内容,命令被提取之后就在config_info中被注释掉。跟第一块板相关命令放在card_1中,card_1的容量是随着提取的过程逐渐的增加的,不用预先知道跟第一块板相关的配置信息有多少。如此,依次提取第二块板和第三块板的信息。最后释放config_info,提取完成。每块板对应的buffer link处于ready状态,随时等待板插入的时候进行执行。
权利要求
1.一种L3交换机海量配置的快速恢复方法,包括(1)用户保存配置的时候,每个模块分别以命令的形式输出自己的配置信息,配置信息保存在一个buffer link中;(2)当所有的配置信息获取完成后,将配置信息一次性的写入存储设备中;(3)当设备重新启动之后,从存储设备中读取配置信息到buffer link中。
2.如权利要求1所述的L3交换机快速配置恢复方法,其特征在于所述bufferlink由多个buffer link node组成,buffer link node中存放配置信息,使用指针把多个buffer link node连接成一个link。
3.如权利要求1或2所述的L3交换机快速配置恢复方法,其特征在于步骤(3)进一步包括为每一块板分配一个buffer link,从存放了所有配置信息的buffer link中把跟每块板相关的命令分别提取到自己的buffer link中。
4.如权利要求3所述的L3交换机快速配置恢复方法,其特征在于进一步包括将所述板对应的命令行注释掉,行的第一个字符用一个特殊的字符进行代替。
全文摘要
本发明提供了一种L3交换机海量配置的快速恢复方法,属于计算机网络通信领域。当用户保存配置的时候,每个模块分别以命令的形式输出自己的配置信息,该配置信息保存在一个buffer link中,当所有的配置信息获取完成后,所有的配置信息一次性的写入存储设备中,当设备重新启动之后,从存储设备中读取配置信息到buffer link中。配置的保存和恢复中使用由多个buffer link node组成的buffer link,使用指针把多个buffer link node连接起来成为一个link,当buffer link容量不够的时候,可再申请一个buffer link node,使占用的内存随着配置信息的多少以一个很小的粒度进行增长。当为每一块板分别配置一个bufferlink时,单板的配置信息可拷贝到对应的buffer link中,使基于单板的热插拔配置恢复的功能没有冗余,效率高。
文档编号H04L12/24GK1540927SQ20031010342
公开日2004年10月27日 申请日期2003年10月31日 优先权日2003年10月31日
发明者袁锋峰 申请人:港湾网络有限公司