一种实现用户业务远程验证拨号协议的编码和解码方法

文档序号:7923227阅读:223来源:国知局
专利名称:一种实现用户业务远程验证拨号协议的编码和解码方法
技术领域
本发明涉及一种网络通信协议的编解码方法,具体而言,本发明涉及一种实现用户业务远程验证拨号(Remote Authentication Dial In User Service,以下简称为RADIUS)协议的编码和解码方法。
背景技术
当一个网络允许外部用户通过公用网对其进行访问时,用户在地理上可以极为分散,大量分散用户从不同的地方可以对这个网络进行随机的访问。由于存在内外的双向数据流动,网络安全成为很重要的问题。安全管理的内容包括哪些用户是否可以获得访问权(即验证)?获得访问权的用户可以允许使用哪些服务(即授权)?如何对使用网络资源的用户进行记费(即记账)?验证、授权和记账统称为AAA(Authentication,Authorization and Accounting),其实现可采用RADIUS协议。
RADIUS业务符合图1所示典型的客户机/服务器(client/server)模型。如图1所示,网络接入服务器(NAS)或路由器上运行的AAA模块对用户来讲为服务器端,而对实现RADIUS协议的RADIUS服务器来讲是客户端。RADIUS服务器通过建立一个唯一的用户数据库存储用户名、用户密码来进行验证;存储传递给用户的服务类型以及相应的配置信息来完成授权。
以下简要描述RADIUS协议。图2示出了RADIUS报文格式,其中,码(Code)域为1个八位字节,表示RADIUS报文类型,即服务类型;标识符(Identifier)域亦为一个八位字节,用于匹配请求和应答;长度(Length)域为2个八位字节,表示整个报文的长度;验证符(Authenticator)域为16个八位字节,用于验证来自RADIUS服务器的应答和密码隐藏算法;而属性(Attributes)域的长度是可变的并且包含该RADIUS报文对应的服务类型所需以及任何需要的可选属性的属性列表。
在图1所示RADIUS业务的客户机/服务器模型中,客户机和服务器上的AAA模块都必须具有处理RADIUS报文的功能,其中包括生成和读取RADIUS报文的功能。在计算机系统上实现RADIUS协议实际上就是由处理器执行一系列完成RADIUS协议功能的指令代码,而构造完成生成和读取RADIUS报文功能的指令代码的过程在这里分别被称为RADIUS协议的编码和解码。由上可见,每种类型RADIUS报文中的代码域、标识符域、长度域和验证符域都具有固定的长度,占据的存储空间是不变的,但是属性域却因每种RADIUS报文中属性个数、种类等的不同而各异。因此,在现有技术中,由于属性域差异的存在,不得不为每种类型RADIUS报文的生成和读取都专门进行编码和解码,即生成相应的指令代码段(或函数)。由于每个这样的函数都针对特定RADIUS报文的生成或读取功能,代码内容与所处理报文、属性种类、属性个数以及属性长度等密切相关,因此报文结构上的任何一点修改都将牵涉到代码的修改。
RADIUS协议实际上是一个包含多个RADIUS协议栈的协议栈类,其中的每个RADIUS协议栈除了具备基本的协议配置以外还可以在实际应用中作各种扩展。由上可见,在现有技术中,编解码过程与RADIUS协议结构内容没有分离,报文或者属性在结构上的任何修改都需要更新编解码部分的代码,因此RADIUS协议栈的实现很不灵活,而且不同RADIUS协议栈之间兼容困难,经常为了支持一个不同扩展的协议而必须重新编码和解码。另外,当同时实现服务器端和客户机端(此时AAA服务器作为代理服务器)时,需要采用两套不相关的代码来实现一套协议的编解码。最后,实现具体协议栈的代码长度与报文个数正相关,随着报文个数的增多,实现协议栈的代码量也将线性增加。

发明内容
本发明的目的是提供一种实现用户业务远程验证拨号(RADIUS)协议的编解码方法,它可以灵活地实现各种RADIUS协议栈的编码和解码。
按照本发明的实现用户业务远程验证拨号(RADIUS)协议的编码和解码方法,RADIUS协议栈类包含多个RADIUS协议栈,其特征在于,当对任一RADIUS协议栈进行编码和解码处理时,执行以下步骤(1)将该RADIUS协议栈下定义的结构信息写入存储器内,所述结构信息包括每一属性的各种特征信息和每种类型RADIUS报文中所使用属性的各种使用状态信息,并且不同RADIUS协议栈下定义的所述结构信息都具有预先确定的统一格式;以及(2)从存储器内读取具有所述预先确定的统一格式的结构信息;以及(3)对于每一种具有所述预先确定的统一格式的结构信息,都以不同RADIUS协议栈之间都相同的编码和解码方式进行处理以获得实现该RADIUS协议栈的指令代码。
由上可见,由于每种结构信息,包括属性使用状态信息和特征信息都以统一格式表示和存储,由此可以针对每一种格式的结构信息定义相应的统一编码和解码处理方式,因此当RADIUS协议栈有改动时,只要改动后的结构信息仍然以原先的统一格式表示,就无需修改编码和解码方式。这样,开发RADIUS协议栈代码的周期将大大缩短并且减少了维护的工作量和成本。


通过以下结合附图对本发明较佳实施例的描述,可以进一步理解本发明的目的、特征和优点图1为RADIUS协议下典型的客户机/服务器模型示意图;图2示出了RADIUS报文格式;图3为按照本发明方法的解码主流程示意图;图4为按照本发明方法的主属性解码流程示意图;图5为按照本发明方法的基本属性解码流程示意图;图6为按照本发明方法的编码主流程示意图;图7为按照本发明方法的主属性编码流程示意图;以及图8为按照本发明方法的基本属性编码流程示意图。
具体实施例方式
在本文中,RADIUS报文中的代码域、标识符域、长度域和验证符域被统称为报文头部。如上所述,不同RADIUS协议栈下每种类型RADIUS报文中的代码域、标识符域、长度域和验证符域都具有固定的长度和排列顺序,因此报文头部的编码和解码在不同RADIUS协议栈和报文之间以统一方式处理是显而易见的。但是属性域比较复杂,其结构信息因属性个数、种类等的不同而变化,在本文中,结构信息包含但不局限于RADIUS报文头部结构、每一属性的各种特征信息和每种类型RADIUS报文中所使用属性的各种使用状态信息。本发明方法的着眼点即在于以统一的编码和解码方式处理随RADIUS协议栈以及报文类型不同而变化的属性域。为此,必须以统一格式表示属性域的各种结构信息,在此基础上才可对每种统一格式的结构信息定义相应的统一的编码和解码方式。
值得指出的是,按照本发明方法的以统一格式表示结构信息并以统一方式进行编码和解码的过程最终都可归结为由硬件装置实现,这些硬件装置包括但不局限于用于存储结构信息的各种存储设备和以统一方式编码和解码结构信息的处理器,这里的处理器可以是物理上实际对应的一个专用中央处理器(CPU),也可以是具有信息或数据处理能力的多个逻辑处理单元的组合。在本发明中,上述硬件装置被统称为RADIUS协议处理器并且用于实现按照本发明的RADIUS协议编码和解码方法。
以下首先描述按照本发明方法的以统一格式表示属性域各种结构信息的较佳方式。为方便起见,这些统一格式表示的信息结构可以写入一个协议栈配置文件中,不同的协议栈具有不同的协议栈配置文件,但是每个配置文件表示结构信息的格式都是相同的。
附录A和B分别示出了符合标准RADIUS协议和RADIUS+1.0协议的配置文件,如附录A和B所示,两个配置文件都由头部、消息、属性三部分组成。其中,头部中的字段MINMSGLENGTH和MAXMSGLENGTH描述本RADIUS协议栈下报文的最小和最大长度,FILETERUNKNOWATT描述编解码时是否过滤未知属性,MINPRIMITIVELEN描述基本属性的最小长度,MINCONSTRUCTORLEN描述结构型属性的最小长度;报文部分以RADIUS报文为单位,描述了每种RADIUS报文中所使用属性的使用状态信息,其中,字段MSGTYPE表示报文类型,用于标识当前描述的使用状态信息的属性所属的RADIUS报文,MATTRIBUTE表示报文部分内每个属性的首部,用于标识每个属性使用状态信息描述的开始,随后的参数字段type描述属性的编号,mtag描述属性的性质是可选属性、必备属性还是出现次数为0或更多的属性,times描述在目标报文结构中出现的次数;属性部分分为LEVEL1和LEVEL2两层,分别描述主属性和子属性的特征信息,在每一层的属性特征信息描述中,字段ATTRIBUTE表示属性部分内每个属性的首部,用于标识每个属性特征信息描述的开始,随后的参数字段name描述属性的名称,type描述属性的编号,这与报文部分内的type字段是一致的,kind描述属性的数据类型,min描述属性的最小长度或最小值,max描述属性的最大长度或最大值,len描述属性在报文结构中的长度,form描述属性是否为结构型属性。
由上可见,在不同的RADIUS协议栈配置文件中,每个属性在任一RADIUS报文中的使用状态信息以及自身特征信息在每个配置文件中都以相应的统一格式表示,例如,每个属性的使用状态信息以MSGTYPE标识其所处的报文,并以MATTRIBUTE标识使用状态信息描述的开始,随后依次出现属性编号、属性性质、属性在目标报文结构中出现次数等参数字段。又如,每个属性的特征信息以ATTRIBUTE标识每个属性特征信息描述的开始,随后依次出现属性名称、属性编号、属性数据类型、属性最小长度或最小值、属性最大长度或最大值、属性在报文结构中的长度和结构型属性标志等参数字段。这种将不同RADIUS协议栈下定义的每个属性的使用状态信息和特征信息都以统一格式表示在不同的配置文件中的方式使得以统一的编码和解码规则或方式处理每一种格式的结构信息成为可能。具体而言,在编码和解码过程中,可以将上述配置文件的结构定义视为是对RADIUS协议栈类的定义,而将这种配置文件结构下具体的配置文件视为是对每个RADIUS协议栈的定义。如果借助面向对象方法的程序设计思想描述,这里的RADIUS协议栈类相当于“类”,而每个RADIUS协议栈是该类的一个“实例”,因此本发明的方法很容易用面向对象的编程语言来实现。例如可以编写一个协议栈类程序,当启动时初始化部分可以根据需要动态生成协议栈实例,对不同的协议接口调用不同的实例进行编码和解码。
值得指出的是,配置文件是一个逻辑概念,代表了信息或数据的存储结构,在物理上实际对应的是存储器的一个存储区域。而且更为重要的是,上述附录A和B示出的结构信息表示方式只是示意性质的,不应理解为是对本发明范围的限定。实际上,诸如每一属性的各种特征信息和每种类型RADIUS报文中所使用属性的各种使用状态信息之类的结构信息可以有无数种具体的统一格式表示方式,本发明的着眼点是通过利用统一格式表示或存储结构信息使得RADIUS协议的编码和解码方式或规则与协议栈内容能够分离开来,其中编码和解码规则由代码体现,而协议栈内容由配置文件体现。
以下借助图3~8描述本发明编码和解码RADIUS协议栈的方式。在本发明的方法中,借用面向对象的程序设计思想,将RADIUS报文和属性视为不同的对象,不同类型的RADIUS报文或属性只是各自所属对象内的不同实例,因此可以对所有RADIUS报文和属性实行统一的处理方式。
图3为按照本发明方法的解码主流程示意图。如图3所示,首先对RADIUS报文头部进行解码处理,如上所述,由于报文头部的结构是固定不变的,因此可以统一的解码规则进行处理。报文头部解码完成后,读取配置文件以确定是否有需要解码的属性。如果通过读取配置文件确定有需要解码的属性,则读取属性类型,并随后对主属性按照统一的解码规则进行处理。接着,判断属性处理是否成功,如果属性处理不成功,则返回解码出错指示并结束解码主流程,如果属性处理成功,则返回读取配置文件以确定是否有需要解码的属性的步骤。相反,如果通过读取配置文件确定没有需要解码的属性,则确定已解码的属性个数是否合法,即判断解码过程中记录下来的解码属性个数与配置文件中mtag的取值是否一致。如果确定属性个数合法,即,报文中属性个数与配置文件规定的相等时,则将参数字段内容解码到结果报文中,即,将配置文件中参数字段的内容复制至缓冲区的特定位置上,特定位置根据配置文件中解码后参数长度定义和参数出现顺序计算确定,随后返回解码成功指示。
图4为图3中主属性解码步骤的流程示意图。如图4所示,首先根据配置文件中参数字段form确定属性是否为包含子属性的结构属性。如果判断不是结构属性,则进行基本属性解码处理。然后根据配置文件中属性的结构信息判断该基本属性是否合法,如果不合法,则返回属性不合法指示并结束主属性解码流程,否则增加对应类型已解码属性个数以用于图3中确定已解码属性个数是否合法的步骤。最后,返回属性合法指示并结束主属性解码流程。相反,如果判断是结构属性,则判断该结构属性中是否还包含未解码的子属性。如果不包含未解码的子属性,则增加对应类型已解码属性个数,返回属性合法指示并结束主属性解码流程,否则对子属性按照基本属性解码规则处理。对子属性按照基本属性解码规则处理后,判断解码后的该子属性是否合法。如果合法,则增加对应类型已解码子属性的个数并返回至判断是否还有子属性的步骤,否则返回属性不合法指示并结束主属性解码流程。
图5为图4中判断基本属性是否合法步骤的流程示意图。如图5所示,首先读取解码后属性的长度。然后判断读取的属性长度是否合法,即,将读取的长度与配置文件中的参数字段king进行比较以确定是否匹配。如果不合法或不一致,则返回属性错误指示并结束基本属性解码流程。如果合法或一致,则读取属性的内容并进一步判断属性的内容是否合法,即,将读取的内容与配置文件中的min和max等参数字段进行比较以确定是否匹配。如果合法或一致,则返回属性正确指示并结束基本属性解码流程,否则,返回属性错误指示并结束基本属性是否合法步骤的流程。
图6为按照本发明方法的编码主流程示意图。如图6所示,首先对RADIUS报文头部进行编码处理,如上所述,由于报文头部的结构是固定不变的,因此可以统一的编码规则进行处理。报文头部编码完成后,读取配置文件以确定是否有需要编码的属性。如果通过读取配置文件确定有需要编码的属性,则读取属性类型,并随后对主属性按照统一的编码规则进行处理。接着,判断属性处理是否成功,如果属性处理不成功,则返回编码出错指示并结束解码主流程,如果属性处理成功,则返回读取配置文件以确定是否有需要编码的属性的步骤。相反,如果通过读取配置文件确定没有需要编码的属性,则返回编码成功指示。
图7为图6中主属性编码步骤的流程示意图。如图6所示,首先根据配置文件中参数字段form确定属性是否为包含子属性的结构属性。如果判断不是结构属性,则进行基本属性编码处理。然后返回编码成功指示并结束主属性编码流程。相反,如果判断是结构属性,则进一步判断该结构属性中是否还包含未编码的子属性。如果不包含未编码的子属性,则计算出主属性编码后的长度,然后对该结构属性进行打包处理,即,将参数对应的属性类型、长度和内容依次写入编码结果的缓冲区内,接着返回编码成功指示并结束主属性编码流程。如果包含未编码的子属性,则对子属性按照基本属性编码规则处理。对子属性按照基本属性编码规则处理后,判断编码是否成功,如果成功,则返回至判断是否还有子属性的步骤,否则返回编码失败指示并结束主属性编码流程。
图8为图7中基本属性编码步骤的流程示意图。如图8所示,首先判断读取编码后属性的参数是否合法,即参数的取值范围是否与配置文件中的一致。如果不合法或不一致,则返回编码失败指示并结束基本属性编码流程。如果合法或一致,则计算属性编码后的长度并将该参数打包,即,将参数对应的属性类型、长度和内容依次写入编码结果的缓冲区内,然后返回编码成功指示并结束基本属性编码流程。
附录A 标准RADIUS协议编码和解码配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN3MINCONSTRUCTORLEN3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag 0=a optinal attribute# 1=a mandatory attribute# 2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor# others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flagflag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# head type mtagtimes conf_fiag conf_value#USER-NAME 0MATTRIBUTE 1010#USER-PASSWDMATTRIBUTE 2010#CHAP-PASSWDMATTRIBUTE 3010#FRAMED-PROTOCOLMATTRIBUTE 7010 8#VENDOR-SPECIFYMATTRIBUTE 26 011 2#ISP-IDMATTRIBUTE 17 010 163#CONNECT-ID,optional for v10MATTRIBUTE 26 010#NAS-PORT-IDMATTRIBUTE 87 010 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 010#CHAP-CHALLENGEMATTRIBUTE 60 010#FRAME-IP-ADDRESSMATTRIBUTE 8010#CLASSMATTRIBUTE 25 210#SeviceTypeMATTRIBUTE 6011#NAS-PortMATTRIBUTE 5010#StateMATTRIBUTE 24 010ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 1 0 10#FRAMED-PROTOCOLMATTRIBUTE 7 0 10#FRAMED-IP-ADDRESSMATTRIBUTE 8 0 10#FRAMED-IP-NETMASKMATTRIBUTE 9 0 10#FILTER-IDMATTRIBUTE 11 2 30#CLASSMATTRIBUTE 25 2 30&lt;dp n="d9"/&gt;#IDLE-TIMEOUTMATTRIBUTE 28 010#FRAMED-IP-POOL-IDMATTRIBUTE 88 010#ACCT-INTERIM-INTERVALMATTRIBUTE 85 010#Session-TimeoutMATTRIBUTE 27 010ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 010ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 1010#ACCT-STATUS-TYPEMATTRIBUTE 40 110#ACCT-DELAY-TIMEMATTRIBUTE 41 010#ACCT-SESSION-IDMATTRIBUTE 44 110#TERMINATE-CAUSEMATTRIBUTE 49 010#CLASSMATTRIBUTE 25 230#FRAMED-IP-ADDRESSMATTRIBUTE 8010#Event_TimestampMATTRIBUTE 55 010#AcctInputGigawordsMATTRIBUTE 52 010#AcctOutputGigawordsMATTRIBUTE 53 010#AcctInputOctetsMATTRIBUTE 42 010#AcctOutputOctetsMATTRIBUTE 43 010#AcctInputPacketsMATTRIBUTE 47 010#AcctOutputPacketsMATTRIBUTE 48 010ENDMSG#Accounting-ResponseMSGTYPE 5#SESSION-TIMEOUTMATTRIBUTE 27 010ENDMSG################################################################ headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min maxwidth formATTRIBUTERad_UserName1 2 1 63 32 0ATTRIBUTERad_UserPassword 22 16128 16 0ATTRIBUTERad_CHAPPassword3 2 1717 20 0ATTRIBUTERad_NASIPAddress 4 3 0 4294967295 4 0ATTRIBUTERad_NASPort 53 065535 40ATTRIBUTERad_ServiceType6 3111 40ATTRIBUTERad FramedProtocol 7 3 110040&lt;dp n="d10"/&gt;ATTRIBUTE Rad_FramedIPAddress 8 4 0 4294967295 40ATTRIBUTE Rad_FramedIPNetmask 9 4 0 4294967295 4 0ATTRIBUTE Rad_FramedRouting 10 3 034 0ATTRIBUTE Rad_FilterId 11 2 08 12 0ATTRIBUTE Rad_FramedMTU 12 3 01 4294967295 4 0ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 4 0ATTRIBUTE Rad_LoginIPHost 14 3 0 4294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 0 000 0ATTRIBUTE Rad_ReplyMessage 18 2 120048 0ATTRIBUTE Rad_CallbackNumber 19 0 0 0 00ATTRIBUTE Rad_CallbackId 200 0 00 0ATTRIBUTE e 2100 0 0 0ATTRIBUTE Rad_FramedRoute 220 0 0 00ATTRIBUTE Rad_FramedIPXNetwork23 0 00 00ATTRIBUTE Rad_State 24 2 1429496 32 0ATTRIBUTE Rad_Class 25 2 1200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad_SessionTimeout 27 3 0 4294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 0 4294967295 4 0ATTRIBUTE Rad_TerminationAction 29 3 0 4294967295 4 0ATTRIBUTE Rad_CalledStationId 30 2 120024 0ATTRIBUTE Rad_CallingStationId 31 2 1 200 240ATTRIBUTE Rad_NASIdentifier 32 00 0 0 0ATTRIBUTE Rad_ProxyState 33 0 00 00ATTRIBUTE Rad_LoginLATService 34 0 0 000ATTRIBUTE Rad_LoginLATNode 35 0 0 000ATTRIBUTE Rad_LoginLATGroup 36 0 0 000ATTRIBUTE Rad_FramedAppleTalkLink37 0 0000ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 0 0ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 40 3 0 4294967295 40ATTRIBUTE Rad_AcctDelayTime 41 3 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets 42 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputOctets 43 3 0 4294967295 4 0ATTRIBUTE Rad_AcctSessionId 44 21 200 56 0ATTRIBUTE Rad_AcctAuthentic 45 000 00ATTRIBUTE Rad_AcctSessionTime 46 000 00ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 40ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId 50 0 0 0 0 0ATTRIBUTE Rad_AcctLinkCount51 0 0 0 0 0ATTRIBUTE Rad_AcctInputGigawords 52 3 0 4000 4 0ATTRIBUTE Rad_AcctInputGigawords 53 3 0 4000 4 0ATTRIBUTE Rad_EventTimestamp 55 3 0 4294967295 40ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType61 3 0 4294967295 4 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 0 0ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4 0ATTRIBUTE Rad_NASPortId8721 200 32 0ATTRIBUTE Rad_FramedPool 8830 4294967295 40ENDLEVELLEVEL 1# headnametype kind minmax width formATTRIBUTE Rad_InputPeakRate13 0 4294967295 4 0ATTRIBUTE Rad_InputAverageRate2 3 0 4294967295 4 0ATTRIBUTE Rad_InputBasicRate3 3 0 4294967295 40ATTRIBUTE Rad_OutputPeakRate 4 304294967295 4 0ATTRIBUTE Rad_OutputAverageRate5 3 0 4294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 4 0ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 304294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch 9 3 0 4294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 0 4294967295 4 0&lt;dp n="d11"/&gt;ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch133 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfterTariffSwitch 143 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 04294967295 4 0ATTRIBUTE Rad_TariffSwitchInterval 163 04294967295 4 0ATTRIBUTE Rad_ISPID17 2 064 320ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 3 0 42949672954 0ATTRIBUTE Rad_Priority 22 30 4294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 04294967295 4 0ATTRIBUTE Rad_ResultCode 25 3 0 4294967295 40ATTRIBUTE Rad_ConnectId 26304294967295 4 0ENDLEVEL</pre>
附录B RADIUS协议+1.1编码和解码配置文件<pre listing-type="program-listing">MINMSGLENGTH 20MAXMSGLENGTH 1024FILETERUNKNOWATT 1MINPRIMITIVELEN 3MINCONSTRUCTORLEN 3# Access-RequestMSGTYPE 1# head show the head of attribute# type attribute type(0..255)# mtag0=a optinal attribute#1=a mandatory attribute#2=0 or more times appearing# times 0=attribute not decode for message struct,or constructor#others,times appearing in message struct.   mandatory attribute must be only once.   optional attribute must be less then once(0 or 1).# conf_flag flag for configured,if true,configured value is to be used always.# conf_valueconfigured value for encoding primitive attribute,less then 64 bytes;#for constructor attribute,it′s the number of all child attributes.# headtypemtag times conf_flag conf_value#USER-NAME 0MATTRIBUTE 10 1 0 555555555551#USER-PASSWDMATTRIBUTE 20 1 0#CHAP-PASSWDMATTRIBUTE 30 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0 8#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1 2#ISP-IDMATTRIBUTE 17 0 1 0 163#CONNECT-ID,optional for v10MATTRIBUTE 26 0 1 0 3#NAS-PORT-IDMATTRIBUTE 87 0 1 0 abcdefg#NAS-PORT-TYPEMATTRIBUTE 61 0 1 0#CHAP-CHALLENGEMATTRIBUTE 60 0 1 0#FRAME-IP-ADDRESSMATTRIBUTE 80 1 0#CLASSMATTRIBUTE 25 2 3 0ENDMSG#Access-AcceptMSGTYPE 2#USER-NAMEMATTRIBUTE 10 1 0#FRAMED-PROTOCOLMATTRIBUTE 70 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0#FRAMED-IP-NETMASKMATTRIBUTE 90 1 0#FILTER-IDMATTRIBUTE 11 2 3 0#CLASSMATTRIBUTE 25 2 3 0#IDLE-TIMEOUTMATTRIBUTE 28 0 1 0#FRAMED-IP-POOL-IDMATTRIBUTE 88 0 1 0#ACCT-INTERIM-INTERVAL&lt;dp n="d13"/&gt;MATTRIBUTE 85 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#RATE 6MATTRIBUTE 10 1 0MATTRIBUTE 20 1 0MATTRIBUTE 30 1 0MATTRIBUTE 40 1 0MATTRIBUTE 50 1 0MATTRIBUTE 60 1 0#MAX-USERS-PER-LOGICPORTMATTRIBUTE 19 0 1 011#ISP-IDMATTRIBUTE 17 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#PRIORTYMATTRIBUTE 22 0 1 0ENDMSG#Access-RejectMSGTYPE 3#REPLY-MESSAGEMATTRIBUTE 18 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 1#CONNECT-IDMATTRIBUTE 26 1 1 0ENDMSG#Accounting-RequestMSGTYPE 4#USER-NAMEMATTRIBUTE 10 1 0#ACCT-STATUS-TYPEMATTRIBUTE 40 1 1 0#ACCT-DELAY-TIMEMATTRIBUTE 41 0 1 0#ACCT-SESSION-IDMATTRIBUTE 44 1 1 0#TERMINATE-CAUSEMATTRIBUTE 49 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 110#VOLUME-infoMATTRIBUTE 70 1 0MATTRIBUTE 80 1 0MATTRIBUTE 90 1 0MATTRIBUTE 10 0 1 0MATTRIBUTE l1 0 1 0MATTRIBUTE 12 0 1 0MATTRIBUTE 13 0 1 0MATTRIBUTE 14 0 1 0#CONNECT-IDMATTRIBUTE 26 1 1 0#CONTROL-IDENTIFIERMATTRIBUTE 24 0 1 0#CLASSMATTRIBUTE 25 2 1 0#FRAMED-IP-ADDRESSMATTRIBUTE 80 1 0ENDMSG#Accounting-ResponseMSGTYPE5#USER-NAMEMATTRIBUTE 10 1 0#SESSION-TIMEOUTMATTRIBUTE 27 0 1 0#VENDOR-SPECIFYMATTRIBUTE 26 0 0 13&lt;dp n="d14"/&gt;#REMANENT-VOLUMEMATTRIB UTE 15 010#TARIFF-SWITCH-INTERVALMATTRIBUTE 16 010#CONNECT-IDMATTRIBUTE 26 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 010ENDMSG#Trigger-RequestMSGTYPE 201#USER-NAMEMATTRIBUTE 1 110#FRAMED-IP-ADDRESSMATTRIBUTE 8 110#FILTER-IDMATTRIBUTE 11 230#NAS-PORT-IDMATTRIBUTE 87 010#VENDOR-SPECIFYMATTRIBUTE 26 001#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110ENDMSG#Terminate-RequestMSGTYPE 202#USER-NAMEMATTRIBUTE 1 110#CLASSMATTRIBUTE 25 230#ACCT-SESSION-IDMATTRIBUTE 44 110#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10ENDMSG#SetpolicyMSGTYPE 203#USER-NAMEMATTRIBUTE 1 1 10#ACCT-SESSION-IDMATTRIBUTE 44 1 10#FILTER-IDMATTRIBUTE 11 2 30#VENDOR-SPECIFYMATTRIBUTE 26 0 01 11#RATE6MATTRIBUTE 1 0 10MATTRIBUTE 2 0 10MATTRIBUTE 3 0 10MATTRIBUTE 4 0 10MATTRIBUTE 5 0 10MATTRIBUTE 6 0 10#CONNECT-IDMATTRIBUTE 26 1 10#COMMANDMATTRIBUTE 20 1 10#CONTROL-IDENTIFIERMATTRIBUTE 24 1 10#ISP-ID&lt;dp n="d15"/&gt;MATTRIBUTE 17 010#PRIORTYMATTRIBUTE 22 010ENDMSG#Control-ResultMSGTYPE 20#FRAMED-IP-ADDRESSMATTRIBUTE 8 010#VENDOR-SPECIFYMATTRIBUTE 26 001#CONNECT-IDMATTRIBUTE 26 010#COMMANDMATTRIBUTE 20 110#CONTROL-IDENTIFIERMATTRIBUTE 24 110#RESULT-CODEMATTRIBUTE 25 010ENDMSG######################################################################## headshow the head of attribute# namethe name of attribute# kind2=the attribute is octet type# 3=the attribute is integer# 4=the attribute is address type# minthe attribute′s min length or min value# maxthe attribute′s max length or max value# lenthe attribute′s length in message struct,INTEGER/ADDRESS is 4# form0=primitive,1=constructorLEVEL 0#head name type kind min max width formATTRIBUTE Rad_UserName 12 1 63 32 0ATTRIBUTE Rad_UserPassword 22 16 128 16 0ATTRIBUTE Rad_CHAPPassword 3 2 1717 20 0ATTRIBUTE Rad NASIPAddress4 3 0 4294967295 40ATTRIBUTE Rad NASPort 5 3 0 65535 4 0ATTRIBUTE Rad_ServiceType 6 31 11 4 0ATTRIBUTE Rad FramedProtocol 73 1 100 4 0ATTRIBUTE Rad_FramedIPAddress8 4 0 4294967295 40ATTRIBUTE Rad FramedIPNetmask9 4 0 4294967295 40ATTRIBUTE Rad_FramedRouting 10 3 0 3 40ATTRIBUTE Rad_FilterId112 0812 0ATTRIBUTE Rad FramedMTU 123 01 4294967295 40ATTRIBUTE Rad_FramedCompression 13 3 01 4294967295 40ATTRIBUTE Rad_LoginIPHost 14 3 04294967295 40ATTRIBUTE Rad_LoginService 15 3 1255 40ATTRIBUTE Rad_LoginTCPPort 16 3 0100 40ATTRIBUTE e 17 000 0 0ATTRIBUTE Rad_ReplyMessage 18 2 1 200 480ATTRIBUTE Rad CallbackNumber19 000 00ATTRIBUTE Rad CallbackId 20 0 0 0 00ATTRIBUTE e21 0 0000ATTRIBUTE Rad_FramedRoute22 0 00 00ATTRIBUTE Rad FramedIPXNetwork23 0 00 00ATTRIBUTE Rad State24 0 0000ATTRIBUTE Rad_Class 25 21 200 360ATTRIBUTE Rad_VendorSpecific 26 0 00 01ATTRIBUTE Rad SessionTimeout 27 3 04294967295 40ATTRIBUTE Rad_IdleTimeout 28 3 04294967295 40ATTRIBUTE Rad_TerminationAction29 3 0 4294967295 40ATTRIBUTE Rad CalledStationId 30 2 1200 24 0ATTRIBUTE Rad_CallingStationId 31 21200 240ATTRIBUTE Rad NASIdentifier32 000 00ATTRIBUTE Rad_ProxyState33 00000ATTRIBUTE Rad_LoginLATService34 000 0 0ATTRIBUTE Rad_LoginLATNode 35 000 0 0ATTRIBUTE Rad_LoginLATGroup 36 000 0 0ATTRIBUTE Rad_FramedAppleTalkLink 37 0 0 0 00&lt;dp n="d16"/&gt;ATTRIBUTE Rad_FramedAppleTalkNetwork 38 00 0 00ATTRIBUTE Rad_FramedAppleTalkZone 39 0 0 0 00ATTRIBUTE Rad_AcctStatusType 403 0 4294967295 40ATTRIBUTE Rad_AectDelayTime413 0 4294967295 40ATTRIBUTE Rad_AcctInputOctets42 0 0 0 00ATTRIBUTE Rad_AcctOutputOctets 43 0 0 0 00ATTRIBUTE Rad_AcctSessionId 44 2 1 20056 0ATTRIBUTE Rad_AectAuthentie 45 00 0 0 0ATTRIBUTE Rad_AcctSessionTime 46 0 0 0 0 0ATTRIBUTE Rad_AcctInputPackets 47 3 0 4294967295 4 0ATTRIBUTE Rad_AcctOutputPackets 48 3 0 4294967295 4 0ATTRIBUTE Rad_AcctTerminateCause49 3 0 4294967295 4 0ATTRIBUTE Rad_AcctMultiSessionId50 0 00 0 0ATTRIBUTE Rad_AcctLinkCount51 00 0 0 0ATTRIBUTE Rad_CHAPChallenge 60 2 5 32 24 0ATTRIBUTE Rad_NASPortType 6130 42949672954 0ATTRIBUTE Rad_PortLimit 62000 0 0ATTRIBUTE Rad_LoginLATPort 63000 00ATTRIBUTE Rad_AcctInterimInterval 85 3 0 4294967295 4ATTRIBUTE Rad_NASPortId 8721 200 320ATTRIBUTE Rad FramedPool88 30 4294967295 4 0ENDLEVELLEVEL 1# headname type kindminmax width formATTRIBUTE Rad_InputPeakRate1 3 04294967295 4 0ATTRIBUTE Rad_InputAverageRate 2 3 04294967295 4 0ATTRIBUTE Rad_InputBasicRate 3 3 04294967295 4 0ATTRIBUTE Rad_OutputPeakRate43 04294967295 4 0ATTRIBUTE Rad_OutputAverageRate 5 3 04294967295 4 0ATTRIBUTE Rad_OutputBasicRate 6 3 0 4294967295 4 0ATTRIBUTE Rad_InputKilobytesBeforeTariffSwitch 7 3 0 4294967295 40ATTRIBUTE Rad_OutputKilobytesBeforeTariffSwitch 8 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsBeforeTariffSwitch9 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsBeforeTariffSwitch 10 3 04294967295 4 0ATTRIBUTE Rad_InputKilobytesAfterTariffSwitch 11 3 04294967295 4 0ATTRIBUTE Rad_OutputKilobytesAfterTariffSwitch 12 3 04294967295 4 0ATTRIBUTE Rad_InputPacketsAfterTariffSwitch 13 3 04294967295 4 0ATTRIBUTE Rad_OutputPacketsAfierTariffSwitch14 3 04294967295 4 0ATTRIBUTE Rad_RemanentVolume 153 0 4294967295 4 0ATTRIBUTE Rad_TariffSwitchInterva116 3 0 4294967295 4 0ATTRIBUTE Rad_ISPID 17 2 0 64 32 0ATTRIBUTE Rad_MaxUsersPerLogicPort 19 3 0 4294967295 4 0ATTRIBUTE Rad_Command 20 304294967295 4 0ATTRIBUTE Rad_Priority 22 304294967295 4 0ATTRIBUTE Rad_ControlIdentifier 24 3 0 4294967295 4 0ATTRIBUTE Rad_ResultCode 25 30 4294967295 40ATTRIBUTE Rad_ConnectId 26 30 4294967295 4 0ENDLEVEL</pre>
权利要求
1.一种实现用户业务远程验证拨号(RADIUS)协议的编码和解码方法,RADIUS协议栈类包含多个RADIUS协议栈,其特征在于,当RADIUS协议处理器对任一RADIUS协议栈进行编码和解码处理时,执行以下步骤(1)将该RADIUS协议栈下定义的结构信息写入存储器内,所述结构信息包括每一属性的各种特征信息和每种类型RADIUS报文中所使用属性的各种使用状态信息,并且不同RADIUS协议栈下定义的所述结构信息都具有预先确定的统一格式;以及(2)从存储器内读取具有所述预先确定的统一格式的结构信息;以及(3)对于每一种具有所述预先确定的统一格式的结构信息,都以不同RADIUS协议栈之间都相同的编码和解码方式进行处理以获得实现该RADIUS协议栈的指令代码。
2.如权利要求1所述的实现RADIUS协议的编码和解码方法,其特征在于,每个RADIUS协议栈下定义的结构信息按照以下统一格式写入一个可存储在存储器内的配置文件中所述配置文件由头部、报文和属性三部分组成,每一部分由字段组成,其中,头部部分包含分别描述每个RADIUS协议栈内最大和最小报文长度、是否过滤未知属性、基本属性的最小长度、结构型属性的最小长度的字段;报文部分用于描述每个RADIUS协议栈下每个RADIUS报文所使用属性的使用状态信息,包含分别描述每种RADIUS报文内所使用属性的属性编号、属性性质、属性在目标报文结构中出现次数的字段;属性部分用于描述每个RADIUS协议栈下每一属性的特征信息,包含分别描述每个属性的属性名称、属性编号、属性数据类型、属性最小长度或最小值、属性最大长度或最大值、属性在报文结构中的长度和结构型属性标志的字段。
3.如权利要求2所述的实现RADIUS协议的编码和解码方法,其特征在于,属性部分由基本属性和子属性两部分组成,其中基本属性部分包含分别描述每个基本属性的属性名称、属性编号、属性数据类型、属性最小长度或最小值、属性最大长度或最大值、属性在报文结构中的长度和结构型属性标志的字段,子属性部分包含分别描述每个子属性的属性名称、属性编号、属性数据类型、属性最小长度或最小值、属性最大长度或最大值、属性在报文结构中的长度和结构型属性标志的字段。
4.如权利要求2或3所述的实现RADIUS协议的编码和解码方法,其特征在于,在对属性的结构信息进行编码和解码时,对编码和解码后RADIUS报文中的属性长度和属性取值范围与配置文件进行比较以确定编码和解码处理是否正确。
5.如权利要求2或3所述的实现RADIUS协议的编码和解码方法,其特征在于,在对属性的结构信息进行编码和解码时,对编码和解码后RADIUS报文中属性可能出现个数与配置文件进行比较以确定编码和解码处理是否正确。
全文摘要
本发明提供一种实现用户业务远程验证拨号(RADIUS)协议的编解码方法,它将RADIUS协议栈下定义的结构信息写入一个配置文件中,不同RADIUS协议栈下定义的所述结构信息在配置文件中都具有预先确定的统一格式。因此对于每一种具有预先确定的统一格式的结构信息,可以都以不同RADIUS协议栈之间都相同的编码和解码方式进行处理以获得实现该RADIUS协议栈的指令代码。因此当RADIUS协议栈有改动时,只要改动后的结构信息仍然以原先的统一格式表示,就无需修改编码和解码方式。这样,开发RADIUS协议栈代码的周期将大大缩短并且减少了维护的工作量和成本。
文档编号H04L12/00GK1471260SQ02136148
公开日2004年1月28日 申请日期2002年7月22日 优先权日2002年7月22日
发明者郑志鹏 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1