一种设备配置信息解析方法

文档序号:7959896阅读:147来源:国知局
专利名称:一种设备配置信息解析方法
技术领域
本发明涉及网络管理领域,尤其涉及一种网络管理过程中的设备配置信息解析方法。
背景技术
当前,在网络上运行的设备大多已经进行过客户化。在客户化过程中,用户通过配置命令实现对网络上设备的配置,以实现这些设备的客户化。在网络管理过程中,需要将这些配置命令以及配置命令中的配置信息在前台进行显示,并且在一些情况下,还需要对显示的配置命令中的配置信息进行修改,以实现对网络设备的维护。当前,实现此种维护的方法主要有两种,分别是1)如果被用户配置的设备自带数据库,可以利用该数据库提供的功能,将用户的配置信息导出成文件,再利用文件传输协议将该各个设备所导出的文件传送到某一地点集中存储,在该地点集中实现对文件修改,从而修改配置信息;2)不论被用户配置的设备是否自带数据库,网管站通过telnet协议下发并运行一条显示设备当前配置信息的命令,并通过telnet协议接收返回的配置信息;可以把这些配置信息存储到文件中保存,在该文件中可以修改这些信息,并通过终端文件传输协议发送到设备,更新设备配置,从而实现对设备的全新配置。
由于方式2)通过运行显示设备当前配置信息的命令,得到的信息的可读性和可解析性较方式1)好,所以应用较广。如果要通过方式2)修改设备配置,就必须解决配置信息的解析问题,配置信息可以简单认为是字符流,但解析的规则必须是依据设备配置命令的语法,因此,如何提供这个规则并利用该规则实现解析成为实现网络设备管理的一个关键问题。
现有技术一在该现有技术中,在被配置的设备上编写程序代码,在用户将配置命令及其参数信息一条一条输入到被配置的设备上后,该程序根据输入的命令找到相应的处理函数,该函数知道该命令的参数信息,可以完成配置信息的解析。这种方案与操作系统的指令集类似,特点是没有任何例如配置文件和数据库的媒介提供相关语法,而是采用编写代码提供语法。
该现有技术具有如下缺点1)由于采用被配置设备上的代码进行解析,因此,该现有技术对被配置设备依赖严重,由于被配置设备的不稳定,会造成存有所编写代码的解析配置信息模块的稳定性无法保障;2)无扩展性由于采用被配置的设备上的代码进行解析,因此,各个被配置设备需要分别对命令集进行注册和维护,工作量较大,且随着设备命令变化,需要不停修改代码,其修改过程也是一个工作量很大的过程。
现有技术二在该现有技术中,考虑到解析灵活性的需要,网管站提供了语法的配置文件,所有命令的定义信息,按照一定格式一条一条的记录到配置文件中;解析时,网管站根据被解析的命令名称到配置文件中找出该命令的语法定义的记录,根据这个记录信息,完成解析工作。该现有技术用扩展标记语言(XML)来保存命令的语法定义,解析配置信息时从XML文件读取相关规则;读取命令集时,采用XML组织所提供的文档对象模型(DOM)并使用这种模型的相关库。在该现有技术中的语法定义中,存在一种迭代的命令关系,表现为每一条命令都有一个父亲和儿子,如果父亲为空,则表示该命令处于迭代的开始位置,如果儿子为空,则表示迭代中止。这种迭代关系实际是为了表现一颗树,命令的组织通常按照树进行的。
该现有技术具有如下缺点1)使用树的形式组织命令会在实际解析过程中占用大量的内存;2)必须使用DOM和相关库,对该DOM和相关库的解析会造成工作量大幅增加;3)语法文件中的记录较多为了包含所有的分支情况,需要为每种组合定义一条语法纪录,因此造成纪录较多。

发明内容
有鉴于此,本发明的主要目的在于提供一种设备配置信息的解析方法,该方法采用基于网管站上数据库的语法定义表对配置信息进行解析,以克服解析过程对被配置设备的依赖,并且通过采用语法定义表,达到减小解析工作量的目的。
本发明为一种设备配置信息解析方法,其特征在于该方法包括以下步骤A、网管站将包含有设备配置信息的语法定义表保存在网管站中;B、网管站获取设备的配置信息,按照网管站数据库中语法定义表的语法定义,解析该设备的配置信息。
其中,所述语法定义表至少包括用于定义命令模式的命令模式表;用于定义各个命令的命令名称、命令类型、主要参数个数、和可选参数个数的命令名和标识对应表;用于定义命令的主要参数名称和位置的主要参数表;用于定义命令可选参数名称、可选参数是否带值的可选参数表;和用于定义接口命令标识和该接口命令下的组内命令标识的接口命令组表;其中,在命令模式表、命令名和标识对应表、主要参数表和可选参数表中还包括配置信息中命令的命令标识。
其中,步骤A中,所述语法定义表保存在网管站的数据库中。
其中,步骤A为
网管站通过数据库脚本将所有配置信息的语法定义插入到数据库中的语法定义表中。
其中,步骤A中,所述语法定义表或者通过扩展标记语言保存在网管站中。
其中,步骤B中所述网管站获取配置信息包括网管站通过用于远程连接服务的标准协议(telnet),向设备下发显示配置信息的命令;设备收到该命令,显示配置信息,并通过telnet协议向网管站返回配置信息,网管站将配置信息保存在缓冲区。
其中,步骤B中所述解析包括B1、网管站逐行读入配置信息字符流,根据所述语法定义表中的内容判断该行配置信息中的命令是否已经注册,如果是,则执行步骤B2;否则,结束当前行的解析,返回步骤B1;B2、网管站结束对配置信息字符流的命令名称的处理,根据所述语法定义表中的内容,处理配置信息中的命令模式;B3、根据所述语法定义表中的内容,获得并提取出配置信息中的参数;返回执行步骤B1,直至处理完配置信息的所有行。
其中,步骤B1中,所述判断命令是否已经注册包括B11、获得字符流当前行的字符串中命令的第一个单元;B12、在命令名与标识对应表中用作记录命令名称的数组中,查找包含上述第一单元的所有命令名称;如果找到的命令名称的个数为0,表示在命令名与标识对应表中没有注册该命名,查找过程结束,并且结束对当前行字符串的解析过程;如果找到的命令名称个数为1,则执行步骤B13,如果找到的命令名称个数大于1,则执行步骤B14;B13、判断找到的命令名称中的组成单元的个数,如果组成单元个数为1,表明当前行字符串中的命令名称与找到的命令名称命令完全相符,则判断得到当前行字符串中的命令名称在语法定义表中已经注册,同时得到该命令名称;如果找到的命令名称的组成单元个数大于1,则取出该命令名称的所有单元,与当前行字符串中命令名称的所有单元逐一进行比较,如果都相同,则判断得到当前行字符串中的命令名称已经注册,并得到该命令名称,否则,判断得到当前行字符串中的命令名称没有注册;B14、逐个取出找到的命令名称,按照步骤B13所述的方法判断当前行字符串的命令名称是否已经注册,如果当前行字符串的命令名称与找到的所有命令名称都没有完全相符,则判断得到该当前行字符串命令名称没有注册;否则,判断得到当前行字符串中的命令名称已经注册。
其中,步骤B2中,所述结束对配置信息字符流的命令名称的处理为网管站将字符流指针移动到配置信息字符流的命令名称结束处,具体包括B21、计算命令名称中单元个数;B22、判断命令名称的个数是否等于1,如果是,不移动指针;否则,逐个取出命令名称中的每个单元,并依次分别将字符串缓冲区的指针位置修改到当前取出单元的下一个单元。
其中,步骤B2中,所述处理命令模式包括B23、判断接口命令是否标记为假,如果是,则直接执行步骤B24;如果不是,执行步骤B25,其中,接口命令在进行所述处理命令模式之前被标记为假;B24、取出当前命令对应的模式,判断命令模式是否为接口模式,如果是,则将接口命令标记为真,并记录此接口命令名称,将该名称作为该接口命令组内命令的父亲名称特性,然后,开始对下一条命令进行处理,执行步骤B25;B25、判断当前命令是否是接口模式,如果是,则执行步骤B26;否则,执行步骤B27;B26、用当前命令覆盖接口命令名称,开始下一组接口命令的处理;B27、从所述接口命令组表中遍历当前接口命令的组成命令,看有无命令标识与当前命令标识相同,如果没有,则修改接口命令标记为假,当前接口命令的处理结束;如果有,则把当前接口命令名称作为该命令的父亲名称特性。
其中,步骤B3中,所述获得并提取参数包括B31、保存指到字符流参数位置处的字符流当前位置;B32、根据得到的命令名称,在所述主要参数表中判断该命令的主要参数的个数是否大于0,如果是,则执行步骤B33及后续步骤,否则,执行步骤B39及后续步骤;B33、在主要参数表中顺序取出一个主要参数;自字符流的当前位置开始,顺序取出该命令中属于参数的一个单元;B34、判断取出的主要参数的位置是否被定义为-1,如果不是,则执行步骤B35,否则,取出字符流中属于参数的下一个单元,判断该单元是否是已经在可选参数表中注册了的可选参数的关键词,如果是,则提取该可能出现的主要参数,然后返回步骤B33,直至对该命令的所有主要参数处理完毕,执行步骤B38;否则,该字符流的命令为异常命令,结束对该行字符流的解析过程;B35、将取出的主要参数的位置与取出当前字符流单元的位置进行比较,如果位置一致,则执行步骤B36;如果主要参数定义的位置大于当前字符流的位置,则执行步骤B37;如果主要参数定义的位置已经小于了当前字符流的位置,则字符流的命令为异常命令,结束对该行字符流的解析过程;B36、将当前字符流单元的内容作为参数值提取出来并保存,然后返回步骤B33,直至对该命令的所有主要参数处理完毕,执行步骤B38;B37、顺序取出当前字符流单元的下一个单元,返回执行步骤B35,直到两个位置的值相同时为止;如果到字符流一行结束时,这两个单元的位置仍然没有达到一致,则字符流的命令为异常命令,结束对该行字符流的解析过程;B38、将字符流的位置恢复为步骤B31所保存的位置;
B39、判断可选参数的个数是否大于0,如果是,则执行步骤B40;否则,判断该命令定义的主要参数和可选参数的个数是否都为-1,如果是,则结束参数提取过程;B40、在可选参数表中顺序取出第一个可选参数,自字符流的当前位置开始,顺序查找可选参数中的关键词;如果找到关键词,则执行步骤B41;否则,如果在字符流中没有找到关键词,则字符流的命令为异常命令,结束对该行字符流的解析过程;B41、判断关键词在字符流中的位置是否是字符流的起始位置,如果是,则执行步骤B42;否则,则检查字符流中关键词的前一个字符和后一个字符是否都是空格,如果是,说明命令中配置了此参数,执行步骤B43;否则,返回执行步骤B40;B42、如果关键词在字符流中的位置是字符流的起始位置,则检查字符流中关键词后一个字符是否为空格,如果是,则执行步骤B43;否则,返回执行步骤B40;B43、根据可选参数表中的内容,判断所取出参数的参数是否带值一项的值是否为0,如果是,则把参数名称提取出来;如果为1,则从参数名称字段取出关键词后面的参数个数信息,从字符流中取出相应个数的单元,作为此关键词后跟的参数值;B44处理完当前可选参数后,恢复字符流的位置为步骤B31所保存的位置,返回步骤B40,直至处理完所有可选参数。
可见,本发明具有如下优点1)由于对被配置设备信息的解析过程是在网管站上进行的,因此,本发明将设备配置信息的解析和被配置设备本身分割开来,从而减小了解析过程对设备的依赖,增加了解析的稳定性;2)提供扩展性在设备命令的语法发生变化或者命令增加删除时,可以不修改设备的代码,而只对数据库中的语法定义表进行更新即可;
3)由于采用语法定义表的形式保存语法定义,因此,可以不使用DOM模型以及相关库实现解析过程,减少了解析的工作量;4)语法定义表的定义方式使得定义结构相对简单,并减小了在解析过程中对网管站的内存要求。


图1为本发明实施例中利用五张语法定义表实现用户配置信息解析的流程图。
图2为图1所示步骤102的具体实现的流程图。
图3为图1所示步骤103的具体实现的流程图。
图4为图1所示步骤105中实现对配置信息中主要参数处理的流程图。
图5为图1所示步骤105中实现对配置信息中可选参数处理的流程图。
具体实施例方式
本发明为一种设备配置信息的解析方法,在该方法中,网管站使用在数据库中预先设定的语法定义,对例如Cmd a b c的用户的配置信息进行解析处理,从而解析得到用户配置信息中的命令名称Cmd,以及各个参数a、b和c。
下面结合附图对本发明进行详细描述。
在对本发明进行详细描述之前,首先对本发明中所涉及的一些概念加以解释1、命令模式该命令模式用于组织有共性的一组命令,一条命令可以属于多个模式,如接口模式、特权用户模式等;2、虽然解析过程中所涉及的命令参数众多,但可以将这些参数分为主要参数(PrimaryPara)和可选参数(OptionalPara),主要参数是必须的参数,通过该参数定义的位置可以提取,而无法通过关键词提取;可选参数一般都有关键词,后面紧跟参数值;可选参数也可以不带参数值,以参数名作为参数值;作为扩展,本发明还支持关键词前面带参数值的特例;3、合法性考虑到配置信息中的命令行都是合法的,因此,在本发明中,无需再分析配置命令中的参数是否合法。
在本发明实施例中,采用网管站上的数据库实现对配置命令集信息的存储,在该数据库中定义了五张语法定义表来存储配置命令及其参数信息,这五张语法定义表分别是(1)命令模式表(CmdModeTab)用于记录命令的模式,其定义内容包括命令模式(CmdMode),整型;该命令模式为0或任意自然数,用以描述命令的模式;命令标识(CmdID),整型;该命令标识作为描述命令的标识(ID),一条配置命令只具有一个ID;(2)命令名和标识对应表(CmdNameIDTab)用于记录一条命令,其定义内容包括CmdID,整型;命令名称(CmdName),字符串;该命令名称为命令的名字;命令类型(CmdType),整型;该命令类型用于帮助输入命令的类型定义;命令主要参数(CmdPrimary),整型;表示命令的主要参数个数;命令可选参数(CmdOptional),整型;表示命令的可选参数个数;(3)主要参数表(PrimaryParaTab)用于记录命令的主要参数,其定义内容包括CmdID,整型;参数名称(ParaName),字符串;表示参数名字;参数位置(ParaIdx),整型;表示该主要参数定义的位置;(4)可选参数表(OptionalParaTab)用于定义命令的可选参数,其定义内容包括CmdID,整型;ParaName,字符串;表示参数的名称;参数是否带值(ParaSelf),整型,该ParaSelf非0即1,表示参数后面是否有值;如果为0,表示只有关键词;如果为1,表示关键词后面跟参数值,可以是多个;在参数值是多个的情况下,可以用某种符号如X,跟踪在参数名称后面,以X的个数标识出参数值个数;(5)接口命令组表(IFCmdGrpTab)用于记录接口命令和该接口命令下的组内命令,以实现命令之间的层次关系;接口命令是为了表示不同命令之间的层次关系而设定的一种命令,在实际应用中,一些命令会属于同一个命令,此时,这同一个命令为接口命令,属于这同一个命令的那些命令则可以被归纳为一个组,该组内的所有命令属于接口命令的儿子命令,该接口命令为该组内的所有命令的父亲命令;利用不同的接口命令对应不同的组内命令,以此方式,实现对不同命令之间层次关系的定义;接口命令组表的定义内容包括接口命令标识(IFCmdID),整型;表示接口命令的CmdID;组内命令标识(InGrpCmdID),整型;用于表示属于上述接口命令标识所代表的命令的一些组内命令的ID。
上述五张语法定义表在数据库中除了以表的形式保存之外,还可以利用XML文件的形式进行保存,该XML文件与上述的语法定义表中所记录的内容可以相互转换。
在本发明实施例中,假定存在如下的命令定义snmp-server community community-name[view view-name][ro|rw]其中,snmp-server community为命令标识,community-name为主要参数名称,view为可选参数名称,view-name为作为关键词的view后面所跟的参数值,ro和rw为后面不跟参数值的可选参数名称;为了实现在数据库中存储该命令定义,参照上述关于对存储命令及其参数信息的五张语法定义表的定义,在表1~表4所示的四张语法定义表中插入该命令的定义

表1 CmdModeTab

表2 CmdNameIDTab

表3 PrimaryParaTab

表4 OptionalParaTab由于在本发明实施例中,命令定义snmp-server communitycommunity-name[view view-name][ro|rw]没有涉及到接口命令组表的相关内容,因此,参见表5所示,在接口命令组表中不包括该命令定义的内容。

表5 IFCmdGrpTab本发明实施例中,采用数据库脚本,将上述命令及其参数插入所述的四张表中,对于其它的命令定义,也可以依照该方法,将各自的命令和参数信息分别存储到数据库的五张语法定义表中;参见图1所示,本发明实施例中,利用上述表1~表5所存储的语法定义,实现对如下用户配置信息的解析snmp-server community public ro具体包括以下步骤步骤100网管站获取设备的配置信息,设备显示配置信息,具体包括网管站通过用于远程连接服务的标准协议(telnet)向被用户配置过的设备发送显示配置信息的命令,被配置设备收到该命令后,显示用户配置信息,并通过telnet协议向网管站返回用户配置信息,网管站将该用户配置信息存入缓冲区以等待解析;在该步骤中,如果网管站在预先设定的时间内没有收到被配置设备返回的用户配置信息,或者程序出错,则网管站结束本次解析过程;在网管站获得被配置设备的所有用户配置信息后,执行步骤101;步骤101网管站从缓冲区中按照顺序读出配置信息中的一行字符串,判断该行字符串是否为空行,如果是,则自缓冲区中按照顺序读出下一行字符串,否则,去掉该字符串的前导空格,然后执行步骤102;步骤102依照上述的五张语法定义表,判断读出的该行字符串中的命令是否已经在语法定义表中注册,如果是,则获得命令名称,执行步骤103;否则,返回步骤101;当然,在配置信息中,还可能包括注释行,由于注释行不是真正意义上的配置信息,因此,在本步骤中,进一步包括判断该行是否以注释行的特殊标识,如“!”或“//”,开头,如果是,则返回步骤101;步骤103将字符流指针移动到配置信息字符流中的命令名称结束处;步骤104依照上述的五张语法定义表,处理配置信息中的命令模式;由于在本发明实施例中,被处理的配置信息中不包括有关命令模式的内容,因此,在本发明实施例中,本步骤并不执行;步骤105依照上述的五张语法定义表,获取配置信息中的参数信息,并从其中提取得到参数;步骤106判断对配置信息中的所有行是否解析完毕,如果是,则结束本次解析过程,否则返回步骤101,继续对配置信息中下一行进行解析,直至对配置信息中的所有内容解析完毕,结束本次解析过程。
下面逐一对上述相关步骤的具体实现加以详细描述。
(1)步骤102的具体实现上述步骤102需要实现判断读出的字符串中的命令是否已经在语法定义表中注册,在确定了命令名称的情况下,使得后续步骤可以根据得到的命令名称从语法定义表中找到该命令对应的参数和命令格式,以实现解析;由于命令名称可以是一个对应一个单词的单元,也可以是多个对应一个单词的单元,因此,在处理配置信息时,首先在语法定义表中找出所有具有配置信息中命令的第一个单元的命令定义,然后在这些命令定义中再找出具有配置信息中命令的前两个单元的命令定义,接下来再在其中找出具有配置信息中命令的前三个单元的命令定义,一旦找到唯一一个与具有配置信息中命令完全相符的命令定义,则判断得到配置信息中命令在语法定义表中已经注册,并得到该命令的命令名称,然后执行后续步骤,继续对配置信息进行处理;如果最终没有找到任何一个完全相符的命令,则结束对当前行字符串的解析过程;参见图2所示,具体处理步骤包括步骤201获得当前行的字符串中命令的第一个单元;步骤202在命令名与标识对应表中用作记录命令名称的数组中,查找包含上述第一单元的所有命令名称;如果找到的命令名称的个数为0,表示在命令名与标识对应表中没有注册该命名,执行步骤207,查找过程结束,并且结束对当前行字符串的解析过程;如果找到的命令名称个数为1,则执行步骤203,如果找到的命令名称个数大于1,则执行步骤204;步骤203判断找到的命令名称中的组成单元的个数,如果组成单元个数为1,表明当前行字符串中的命令名称与找到的命令名称命令完全相符,则执行步骤208,判断得到当前行字符串中的命令名称在语法定义表中已经注册,同时得到该命令名称;如果找到的命令名称的组成单元个数大于1,则执行步骤205~206取出该命令名称的所有单元,与当前行字符串中命令名称的所有单元逐一进行比较,如果都相同,则执行步骤208,判断得到当前行字符串中的命令名称已经注册,并得到该命令名称,否则,执行步骤207,判断得到当前行字符串中的命令名称没有注册;步骤204逐个取出找到的命令名称,按照步骤203和步骤205~206所述的方法判断当前行字符串的命令名称是否已经注册;在本步骤中,如果当前行字符串的命令名称与找到的所有命令名称都没有完全相符,则执行步骤207,判断得到该当前行字符串命令名称没有注册,结束对当前行字符串的解析过程。
(2)步骤103的具体实现步骤103用以根据命令名称处理字符流,让字符流移动到命令名称结束处,从而使得字符流处于参数位置;其具体实现步骤为a.计算命令名称中单元个数;b.判断命令名称中单元个数是否等于1,如果是,由于字符串缓冲区的当前指针已经指到命令名称的结束处,因此,不需要进一步移动指针;否则,逐个取出命令名称中的每个单元,并依次分别将字符串缓冲区的指针位置修改到当前取出单元的下一个单元。
(3)步骤104的具体实现步骤104用于处理与命令模式有关的内容,在步骤104处理之前,将接口命令标记为假,参见图3所示,具体处理步骤包括步骤300判断接口命令标记是否为假,如果是,表明在对当前接口命令处理之前没有进行过接口命令的处理,则直接执行步骤301;如果不是,表明在对当前接口命令处理之前已经进行过接口命令的处理,执行步骤302;步骤301取出当前命令对应的模式,如命令模式为接口模式,则将接口命令标记为真,并记录此接口命令名称,将该名称作为该接口命令组内命令的父亲名称特性,对本接口命令处理完毕,开始对下一条命令进行处理,执行步骤302;步骤302判断当前命令是否是接口模式,如果是,则执行步骤303;否则,执行步骤304;步骤303由于当前命令的模式是也为接口模式,表明对上一条接口命令的组内命令已经处理完毕,因此,在本步骤中,用当前命令覆盖接口命令名称,开始下一组接口命令的处理;步骤304~步骤307从表IFCmdGrpTab中遍历当前接口命令的组成命令,看有无命令标识与当前命令标识相同如果没有命令属于当前接口命令,则修改接口命令标记为假,当前接口命令的处理结束;如果有命令属于当前接口命令,则把当前接口命令名称填入到该命令的父亲名称特性。
例如有如下的命令interface interface-namenat reset其中,nat reset是接口命令interface的组内命令,则A3在处理nat reset时,从IFCmdGrpTab中与interface命令对应的所有记录,在其中查找是否包含与nat reset相对应的标识,结果是,则把命令nat reset的父亲特性填写为interface。
(4)步骤105的具体实现步骤105用作参数的提取,本发明所采用的命令语法定义将大大减小解析的复杂度;在对步骤105的实现步骤进行详细描述之前,首先对命令中有可能出现的参数情况加以描述第一种情况存在如下的命令命令A[B][KEY1 C D][KEY2 E]
其中,参数A是主要参数,在该命令中必须出现;参数B是一种特殊的主要参数,该参数由于不带关键词,因此不能归为可选参数一类,但该参数在命令中可能不出现,因此,将该类参数归为特殊的主要参数,例如参数B这类的主要参数在一个命令中不会出现两个相连的情况;参数C、D都是可选参数,在关键词KEY1出现时才会出现,由于参数C和D都属于同一关键词KEY1,因此,在命令中可以将它们集合到一起,以相应减少一半的语法记录;参数E是可选参数,在关键词KEY2出现时才出现;为了提取以上命令中的参数,可以按照如下方式进行主要参数A可以由位置指出,如可以指定参数A的位置为0,则从命令后取第一个单元,作为参数A的值即可;参数B是主要参数,但由于它可以不出现,因此,不能从位置信息获得它是否出现,为了减小解析此类参数所需要的语法记录,特别地将参数B的位置定义为-1;B是否出现可以通过检查B后是否有关键词KEY1或KEY2来决定如果B后紧跟KEY1或KEY2,则可以提取参数B的参数值;提取参数C、D时先定位关键词KEY1,找出其后的两个单元作为其参数值保存即可;提取参数E,可以按照对于参数C和D的处理类似进行。
第二种情况命令A[B]参数A是主要参数,在命令中肯定出现;参数B是主要参数,在命令中有可能不出现;对于参数A的提取可以按照上述第一种情况中的处理方法进行,关键是对于参数B的提取处理,在处理时,在语法记录中将B也定义成主要参数,实际过程中,如果参数A后面还有一个单元,则表明在该命令中B出现,提取参数B;否则表明在该命令中B没有出现。
为了实现在上述两种情况下,均可正确提取参数,参见图4和图5所示,步骤105采用如下步骤来具体实现参见图4所示,步骤105中实现对配置信息中主要参数处理的步骤包括步骤401保存字符流的当前位置,该当前位置为通过步骤103将字符流指针指到的参数位置处;步骤402根据由步骤102得到的命令名称,在主要参数表中判断该命令的主要参数的个数是否大于0,如果是,则执行步骤403及后续步骤,开始提取主要参数,否则,根据该命令名称对应的可选参数表开始提取可选参数,该过程参见图5所示;步骤403在主要参数表中顺序取出一个主要参数自字符流的当前位置开始,顺序取出该命令中属于参数的一个单元;步骤404判断取出的主要参数的位置是否被定义为-1,如果不是,则执行步骤405,否则,执行步骤409~410取出字符流中属于参数的下一个单元,判断该单元是否是已经在可选参数表中注册了的可选参数的关键词,如果是,则表明此可能出现的主要参数在字符流中出现,提取该可能出现的主要参数,然后返回步骤403,直至对该命令的所有主要参数处理完毕,开始按照图5所示流程进行可选参数的提取过程;否则,执行步骤407判断得到该字符流的命令为异常命令,结束对该行字符流的解析过程;步骤405将取出的主要参数的位置与取出当前字符流单元的位置进行比较,如果位置一致,则执行步骤406;如果主要参数定义的位置大于当前字符流的位置,则执行步骤408;如果主要参数定义的位置已经小于了当前字符流的位置,则执行步骤407判断得到字符流的命令为异常命令,结束对该行字符流的解析过程;步骤406将当前字符流单元的内容作为参数值提取出来并保存,然后返回步骤403,直至对该命令的所有主要参数处理完毕,开始按照图5所示流程进行可选参数的提取;
408顺序取出当前字符流单元的下一个单元,返回执行步骤405,直到两个位置的值相同时为止;如果到字符流一行结束时,这两个单元的位置仍然没有达到一致,则字符流的命令为异常命令,结束对该行字符流的解析过程;参见图5所示,步骤105中实现对配置信息中可选参数处理的步骤包括步骤501将字符流的位置恢复为步骤401所保存的位置,也就是将字符流位置恢复到字符流的参数位置处;步骤502判断可选参数的个数是否大于0,如果是,则执行步骤503;否则,判断该命令定义的主要参数和可选参数的个数是否都为-1,如果是,表示此命令不跟任何参数,则结束参数提取过程;步骤503~步骤504在可选参数表中顺序取出可选参数,自字符流的当前位置开始,顺序查找可选参数中的关键词;如果找到关键词,则执行步骤505;否则,则字符流的命令为异常命令,结束对该行字符流的解析过程;步骤505判断关键词在字符流中的位置是否是字符流的起始位置,如果是,则执行步骤506;否则,执行步骤507检查字符流中关键词的前一个字符和后一个字符是否都是空格,如果是,说明命令中配置了此参数,执行步骤508;否则,说明找到的关键词只是一个单元的部分字符,命令中并没有配置此参数,返回执行步骤503;步骤506检查字符流中关键词后一个字符是否为空格,如果是,则说明命令中配置了此参数,执行步骤508;否则,说明找到的关键词只是一个单元的部分字符,命令中并没有配置此参数,返回执行步骤503;步骤508~步骤510判断取出参数的ParaSelf值是否为0,如果是,则说明此可选参数无需跟参数值,仅把参数名称提取出来;如果参数的ParaSelf值的为1,则说明此可选参数后面有参数,从参数名称字段取出关键词后面的参数个数信息,从字符流中取出相应个数的单元,作为此关键词后跟的参数值;
步骤511处理当前可选参数后,恢复字符流的位置为步骤401所保存的位置,返回步骤503,直至处理完所有可选参数。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种设备配置信息解析方法,其特征在于该方法包括以下步骤A、网管站将包含有设备配置信息的语法定义表保存在网管站中;B、网管站获取设备的配置信息,按照网管站数据库中语法定义表的语法定义,解析该设备的配置信息。
2.根据权利要求1所述的方法,其特征在于所述语法定义表至少包括用于定义命令模式的命令模式表;用于定义各个命令的命令名称、命令类型、主要参数个数、和可选参数个数的命令名和标识对应表;用于定义命令的主要参数名称和位置的主要参数表;用于定义命令可选参数名称、可选参数是否带值的可选参数表;和用于定义接口命令标识和该接口命令下的组内命令标识的接口命令组表;其中,在命令模式表、命令名和标识对应表、主要参数表和可选参数表中还包括配置信息中命令的命令标识。
3.根据权利要求1所述的方法,其特征在于,步骤A中,所述语法定义表保存在网管站的数据库中。
4.根据权利要求3所述的方法,其特征在于步骤A为网管站通过数据库脚本将所有配置信息的语法定义插入到数据库中的语法定义表中。
5.根据权利要求1所述的方法,其特征在于,步骤A中,所述语法定义表通过扩展标记语言保存在网管站中。
6.根据权利要求1所述的方法,其特征在于步骤B中所述网管站获取配置信息包括网管站通过用于远程连接服务的标准协议(telnet),向设备下发显示配置信息的命令;设备收到该命令,显示配置信息,并通过telnet协议向网管站返回配置信息,网管站将配置信息保存在缓冲区。
7.根据权利要求2所述的方法,其特征在于步骤B中所述解析包括B1、网管站逐行读入配置信息字符流,根据所述语法定义表中的内容判断该行配置信息中的命令是否已经注册,如果是,则执行步骤B2;否则,结束当前行的解析,返回步骤B1;B2、网管站结束对配置信息字符流的命令名称的处理,根据所述语法定义表中的内容,处理配置信息中的命令模式;B3、根据所述语法定义表中的内容,获得并提取出配置信息中的参数;返回执行步骤B1,直至处理完配置信息的所有行。
8.根据权利要求7所述的方法,其特征在于,步骤B1中,所述判断命令是否已经注册包括B11、获得字符流当前行的字符串中命令的第一个单元;B12、在命令名与标识对应表中用作记录命令名称的数组中,查找包含上述第一单元的所有命令名称;如果找到的命令名称的个数为0,表示在命令名与标识对应表中没有注册该命名,查找过程结束,并且结束对当前行字符串的解析过程;如果找到的命令名称个数为1,则执行步骤B13,如果找到的命令名称个数大于1,则执行步骤B14;B13、判断找到的命令名称中的组成单元的个数,如果组成单元个数为1,表明当前行字符串中的命令名称与找到的命令名称命令完全相符,则判断得到当前行字符串中的命令名称在语法定义表中已经注册,同时得到该命令名称;如果找到的命令名称的组成单元个数大于1,则取出该命令名称的所有单元,与当前行字符串中命令名称的所有单元逐一进行比较,如果都相同,则判断得到当前行字符串中的命令名称已经注册,并得到该命令名称,否则,判断得到当前行字符串中的命令名称没有注册;B14、逐个取出找到的命令名称,按照步骤B13所述的方法判断当前行字符串的命令名称是否已经注册,如果当前行字符串的命令名称与找到的所有命令名称都没有完全相符,则判断得到该当前行字符串命令名称没有注册;否则,判断得到当前行字符串中的命令名称已经注册。
9.根据权利要求7所述的方法,其特征在于,步骤B2中,所述结束对配置信息字符流的命令名称的处理为网管站将字符流指针移动到配置信息字符流的命令名称结束处,具体包括B21、计算命令名称中单元个数;B22、判断命令名称的个数是否等于1,如果是,不移动指针;否则,逐个取出命令名称中的每个单元,并依次分别将字符串缓冲区的指针位置修改到当前取出单元的下一个单元。
10.根据权利要求7所述的方法,其特征在于,步骤B2中,所述处理命令模式包括B23、判断接口命令是否标记为假,如果是,则直接执行步骤B24;如果不是,执行步骤B25,其中,接口命令在进行所述处理命令模式之前被标记为假;B24、取出当前命令对应的模式,判断命令模式是否为接口模式,如果是,则将接口命令标记为真,并记录此接口命令名称,将该名称作为该接口命令组内命令的父亲名称特性,然后,开始对下一条命令进行处理,执行步骤B25;B25、判断当前命令是否是接口模式,如果是,则执行步骤B26;否则,执行步骤B27;B26、用当前命令覆盖接口命令名称,开始下一组接口命令的处理;B27、从所述接口命令组表中遍历当前接口命令的组成命令,看有无命令标识与当前命令标识相同,如果没有,则修改接口命令标记为假,当前接口命令的处理结束;如果有,则把当前接口命令名称作为该命令的父亲名称特性。
11.根据权利要求7所述的方法,其特征在于,步骤B3中,所述获得并提取参数包括B31、保存指到字符流参数位置处的字符流当前位置;B32、根据得到的命令名称,在所述主要参数表中判断该命令的主要参数的个数是否大于0,如果是,则执行步骤B33及后续步骤,否则,执行步骤B39及后续步骤;B33、在主要参数表中顺序取出一个主要参数;自字符流的当前位置开始,顺序取出该命令中属于参数的一个单元;B34、判断取出的主要参数的位置是否被定义为-1,如果不是,则执行步骤B35,否则,取出字符流中属于参数的下一个单元,判断该单元是否是已经在可选参数表中注册了的可选参数的关键词,如果是,则提取该可能出现的主要参数,然后返回步骤B33,直至对该命令的所有主要参数处理完毕,执行步骤B38;否则,该字符流的命令为异常命令,结束对该行字符流的解析过程;B35、将取出的主要参数的位置与取出当前字符流单元的位置进行比较,如果位置一致,则执行步骤B36;如果主要参数定义的位置大于当前字符流的位置,则执行步骤B37;如果主要参数定义的位置已经小于了当前字符流的位置,则字符流的命令为异常命令,结束对该行字符流的解析过程;B36、将当前字符流单元的内容作为参数值提取出来并保存,然后返回步骤B33,直至对该命令的所有主要参数处理完毕,执行步骤B38;B37、顺序取出当前字符流单元的下一个单元,返回执行步骤B35,直到两个位置的值相同时为止;如果到字符流一行结束时,这两个单元的位置仍然没有达到一致,则字符流的命令为异常命令,结束对该行字符流的解析过程;B38、将字符流的位置恢复为步骤B31所保存的位置;B39、判断可选参数的个数是否大于0,如果是,则执行步骤B40;否则,判断该命令定义的主要参数和可选参数的个数是否都为-1,如果是,则结束参数提取过程;B40、在可选参数表中顺序取出第一个可选参数,自字符流的当前位置开始,顺序查找可选参数中的关键词;如果找到关键词,则执行步骤B41;否则,如果在字符流中没有找到关键词,则字符流的命令为异常命令,结束对该行字符流的解析过程;B41、判断关键词在字符流中的位置是否是字符流的起始位置,如果是,则执行步骤B42;否则,则检查字符流中关键词的前一个字符和后一个字符是否都是空格,如果是,说明命令中配置了此参数,执行步骤B43;否则,返回执行步骤B40;B42、如果关键词在字符流中的位置是字符流的起始位置,则检查字符流中关键词后一个字符是否为空格,如果是,则执行步骤B43;否则,返回执行步骤B40;B43、根据可选参数表中的内容,判断所取出参数的参数是否带值一项的值是否为0,如果是,则把参数名称提取出来;如果为1,则从参数名称字段取出关键词后面的参数个数信息,从字符流中取出相应个数的单元,作为此关键词后跟的参数值;B44处理完当前可选参数后,恢复字符流的位置为步骤B31所保存的位置,返回步骤B40,直至处理完所有可选参数。
全文摘要
本发明公开了一种设备配置信息解析方法,其特征在于该方法包括以下步骤A.网管站将包含有设备配置信息的语法定义表保存在网管站中;B.网管站获取设备的配置信息,按照网管站数据库中语法定义表的语法定义,解析该设备的配置信息。该方法采用基于网管站上数据库的语法定义表对配置信息进行解析,以克服解析过程对被配置设备的依赖,并且通过采用语法定义表,达到减小解析工作量的目的。
文档编号H04L12/24GK1601969SQ0315756
公开日2005年3月30日 申请日期2003年9月24日 优先权日2003年9月24日
发明者雷海波 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1