一种资源表构建方法和装置制造方法

文档序号:7820463阅读:129来源:国知局
一种资源表构建方法和装置制造方法
【专利摘要】本发明实施例提供一种资源表构建方法和装置,涉及数据通信领域,提供一种用于ID资源管理的资源表的构建方式,能够高效执行对ID值的分配和释放。其方法为:通过在根据ID节点总数及每一个ID节点的字节数预分配连续的内存块后,对各ID节点对应的ID值进行设置,并对各ID节点中的第一存储值及第二存储值进行初始化。本发明实施例用于实现资源表的构建。
【专利说明】一种资源表构建方法和装置

【技术领域】
[0001]本发明涉及数据通信领域,尤其涉及一种资源表构建方法和装置。

【背景技术】
[0002]L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)是 VPDN(VirtualPrivate Dial-up Network,虚拟专用拨号网络)技术的一种,用于在远程用户提供通过ISP(Internet Service Provider,因特网服务供应商)并主要连接到公司网络或其他专用网络时,提供安全可靠的虚拟私有网络连接通道。
[0003]随着数据通信网络应用的日益发展,网络对L2TP隧道的连接数、连接建立性能等要求也越来越高,而L2TP每个隧道在建立都需要一个本地唯一的ID (Identity,标识符)值来标识。同时,由于L2TP隧道会跟随用户的上下线情况而反复进行创建和删除,即需要保证对分配的本地各ID值的释放(即回收)以及再分配。
[0004]目前,在对ID值进行管理时,通常采用链表管理ID节点的方式来执行ID值分配或释放,分配时从链表中获取一个节点的ID值,释放时将被释放的ID添加到链表中。然而,使用此方式在分配指定ID值时,需要对当前链表进行遍历,以确定该指定ID值可分配;在释放目标ID值时,需要遍历当前整个链表中的所有节点以确定该目标ID值已被分配。路由器设备支持的ID值总数越多,相应管理ID节点的链表也会越长,对该链表进行遍历需要花费较长的时间,导致执行ID值分配或释放时的效率降低。


【发明内容】

[0005]本发明的实施例提供一种资源表构建方法和装置,用以解决分配指定ID值或释放目标ID值时,因遍历操作导致执行效率较低的问题。
[0006]为达到上述目的,本发明的实施例采用如下技术方案:
[0007]第一方面,提供一种资源表构建方法,包括:
[0008]分配一段连续的内存块存储ID节点,所述内存块的大小为一个ID节点的字节数与ID节点总数的乘积;其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值;
[0009]设置每个ID节点对应的偏移量作为本节点对应的ID值,所述偏移量用于指示本节点的内存地址与所述内存块的起始地址之间的差值;
[0010]将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
[0011]第二方面,提供一种资源表构建装置,其特征在于,包括:
[0012]预分配单元,用于分配一段连续的内存块存储ID节点,所述内存块的大小为一个ID节点的字节数与ID节点总数的乘积;其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值;
[0013]设置单元,用于设置每个ID节点对应的偏移量作为本节点对应的ID值,所述偏移量用于指示本节点的内存地址与所述内存块的起始地址之间的差值;
[0014]初始化单元,用于将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
[0015]可见,本发明实施例提供一种资源表构建方法和装置,通过在根据ID节点总数及每一个ID节点的字节数预分配连续的内存块后,对各ID节点对应的ID值进行设置,并对各ID节点中的第一存储值及第二存储值进行初始化。这样,通过使用构建的资源表管理ID资源,能够根据ID值与起始地址直接确定对应ID节点的内存地址进而查询判断,避免了现有技术花费较长时间对管理ID节点的链表进行遍历的操作。因此,本发明相对于现有技术,能够高效执行对ID资源的管理操作,解决了分配指定ID值或释放目标ID值时因遍历操作导致执行效率较低的问题,提高了 L2TP隧道建立操作的处理性能,优化了网络表现。

【专利附图】

【附图说明】
[0016]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0017]图1为本发明实施例提供的一种基于L2TP隧道的组网结构示意图;
[0018]图2为本发明实施例提供的一种资源表构建方法的流程示意图一;
[0019]图3为本发明实施例提供的一种资源表构建方法的流程示意图二 ;
[0020]图4为本发明实施例提供的一种ID节点的结构示意图;
[0021]图5为本发明实施例提供的一种资源表的状态示意图一;
[0022]图6为本发明实施例提供的一种资源表构建方法的流程示意图三;
[0023]图7为本发明实施例提供的一种资源表的状态示意图二 ;
[0024]图8为本发明实施例提供的一种资源表的状态示意图三;
[0025]图9为本发明实施例提供的一种资源表构建方法的流程示意图四;
[0026]图10为本发明实施例提供的一种资源表的状态示意图四;
[0027]图11为本发明实施例提供的一种资源表构建方法的流程示意图五;
[0028]图12为本发明实施例提供的一种资源表的状态示意图五;
[0029]图13为本发明实施例提供的一种资源表构建装置的结构示意图一;
[0030]图14为本发明实施例提供的一种资源表构建装置的结构示意图二。

【具体实施方式】
[0031]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0032]图1为本发明实施例提供的一种基于L2TP隧道的组网结构示意图,用于使用本发明实施例提供的一种资源表构建方法所构建的资源表进行ID资源管理。参见图1,该组网结构由远端路由器设备001、服务器端路由器设备002、多种不同类型的远程用户设备003以及内部服务器004组成。
[0033]其中,远端路由器设备001可以为由远端当地ISP提供的作为LAC(L2TP AccessConcentrator, L2TP 访问集中器)的 NAS(Network Access Server,网络接入服务器),分别与服务器端路由器设备002、远端用户设备003存在通信连接,用于通过与服务器端路由器设备002之间的多个L2TP隧道分别为相应的远端用户提供接入服务,且各L2TP隧道都具有该组网结构中唯一的隧道ID ;服务器端路由器设备002可以为LNS(L2TP NetworkServer, L2TP网络服务器),还与内部服务器004存在通信连接,用于作为服务器端网络(如企业内部网)的边缘设备,实现远端用户对服务器端网络的访问;
[0034]本发明的实施例提供一种资源表构建方法,该方法可以应用于图1所示组网结构中的远端路由器设备,如图2所示,该方法包括:
[0035]S101、分配一段连续的内存块存储ID节点,内存块的大小为一个ID节点的字节数与ID节点总数的乘积。
[0036]其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值。
[0037]S102、设置每个ID节点对应的偏移量作为本节点对应的ID值。
[0038]其中,偏移量用于指示本节点的内存地址与内存块的起始地址之间的差值。
[0039]在一种实现方式下,每个ID节点对应的偏移量可以为本ID节点的内存地址与起始地址之间的差值与字节数的商。
[0040]S103、将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
[0041]在一种实现方式下,将无效标识值存入内存块中第一个ID节点的第一存储值中以及最后一个ID节点的第二存储值中。
[0042]其中,无效标识值用于作为一个ID节点的第一存储值以指示本ID节点没有前驱节点,或,作为一个ID节点的第二存储值以指示本ID节点没有后继节点。
[0043]在另一种实现方式下,在分配制定ID值时,还包括:
[0044]接收待分配的指定ID值;
[0045]获取指定ID值对应的指定ID节点的内存地址;其中,该内存地址为指定ID值与字节数的乘积与起始地址的和;
[0046]查询上述内存地址,当确定指定ID节点的第一存储值及第二存储值都不为分配标识值时,根据指定ID节点的第一存储值、第二存储值分别访问本ID节点的前驱节点以及后继节点;其中,分配标识值为用于指示本ID节点已分配的预设值;
[0047]将指定ID节点的第二存储值赋值给前驱节点的第二存储值,将指定ID节点的第一存储值赋值给后继节点的第一存储值,将指定ID节点的第一存储值及第二存储值都设置为分配标识值。
[0048]在另一种实现方式下,在释放目标ID值时,还包括:
[0049]接收待释放的目标ID值;
[0050]获取目标ID值对应的目标ID节点的内存地址;其中,该内存地址为目标ID值与字节数的乘积与起始地址的和;
[0051]查询上述内存地址,当确定目标ID节点的第一存储值及第二存储值都为分配标识值时,根据尾偏移量访问资源表中的尾节点;其中,分配标识值为用于指示本ID节点已分配的预设值,尾偏移量为预设用于存储尾节点ID值的变量;
[0052]将目标ID值存入尾节点的第二存储值,将尾节点ID值存入目标ID节点的第一存储值,将目标ID节点的第二存储值设置为无效标识值,将尾偏移量更新为目标ID值。
[0053]在另一种实现方式下,在分配非指定ID值时,还包括:
[0054]根据首偏移量访问资源表中的首节点;其中,首偏移量为预设用于存储首节点ID值的变量;
[0055]根据首节点的第二存储值,访问首节点的后继节点,将后继节点的第一存储值设置为无效标识值;
[0056]将首偏移量更新为后继节点对应的ID值,将首节点的第一存储值及第二存储值都设置为分配标识值;其中,分配标识值为用于指示本ID节点已分配的预设值。
[0057]本发明实施例提供一种资源表构建方法,通过在根据ID节点总数及每一个ID节点的字节数预分配连续的内存块后,对各ID节点对应的ID值进行设置,并对各ID节点中的第一存储值及第二存储值进行初始化。这样,通过使用构建的资源表管理ID资源,能够根据ID值与起始地址直接确定对应ID节点的内存地址进而查询判断,从而高效执行对ID资源的管理操作,解决了分配指定ID值或释放目标ID值时因遍历操作导致执行效率较低的问题,提高了 L2TP隧道建立操作的处理性能,优化了网络表现。
[0058]为了使本领域技术人员能够更清楚地理解本发明实施例提供的技术方案,下面通过具体的实施例,对本发明实施例提供的另一种资源表构建方法进行详细说明,如图3所示,该方法包括:
[0059]S201、为资源表预分配内存。
[0060]具体的,远端路由器设备根据支持的L2TP隧道总数以及各ID节点占用的字节数,在设备存储器的内存空间中预分配一段大小为上述L2TP隧道总数(即需要资源表提供的ID总数)与上述各ID节点占用字节数乘积的连续内存块,以便使用该内存块建立资源表,从而提供满足如图1所示组网结构中建立L2TP隧道所需求的ID值。
[0061]其中,分配的连续的内存块可以为以预先设定的内存地址为起始地址选择的内存地址段,也可以为远端路由器设备在内存空间中随机确定的满足上述连续内存块大小需求的内存地址段,此处不做限定。
[0062]需要说明的,IS0C(InternetSociety,互联网协会)发行的 RFC (Request ForComments,请求评议)2611中定义了 L2TP隧道ID值在报文中使用两个字节进行表示,因此ID值的取值范围可以为I到216 (65535),即远端路由器设备所支持的L2TP隧道总数可以为该范围内的任意整数,具体根据设备的不同或应用需求的不同而存在一定的差异,此处不做限定。
[0063]示例性的,远端路由器设备支持的L2TP隧道总数(即ID总数)为N(N可以为大于等于I小于等于65535的整数),各ID节点占用的字节数为S,则预分配的连续内存块大小为N*S字节,且确定该连续内存块的起始地址为pBuffer。
[0064]S202、对已分配内存块中各ID节点的ID值进行设置。
[0065]具体的,在为资源表预分配了满足使用需求的连续的内存块后,设置该连续内存块中各ID节点对应的偏移量作为本节点对应的ID值。
[0066]其中,该连续内存块中的各ID节点都为ID_N0DE类型的链表节点,该ID_N0DE类型链表节点结构如图4所示,包括一个用于存储前驱节点ID值的第一存储值prev1us变量以及一个用于存储后继节点ID值的第二存储值next变量,且各变量占用S/2字节;上述偏移量用于指示本节点的内存地址与内存块的起始地址之间的差值,可以为各节点内存地址与起始地址之间的差值与字节数的商。
[0067]示例性的,根据上述ID总数N,将上述连续内存块划分为N个大小为S的ID节点,并根据各ID节点内存地址在连续内存块上的排列顺序,确定各ID节点的内存地址相对于起始地址pBuffer的偏移量依次为O至N-1。
[0068]进一步的,依次设置各ID节点对应的偏移量作为本节点对应的ID值(即节点名称)。即划分后,各ID节点对应的ID值依次为O至N-1。
[0069]S203、对资源表中各ID节点的第一存储值与第二存储值进行初始化。
[0070]具体的,在对连续内存块中各ID节点的ID值设置完成后,对各ID节点的第一存储值与第二存储值进行初始化,以建立各ID节点间的链接关系。
[0071]示例性的,从起始地址pBuffer开始,依次将各ID节点对应的ID值存入本ID节点前驱节点的第二存储值next变量中以及本ID节点后继节点的第一存储值prev1us变量中。
[0072]将该资源表中第一个ID节点的第一存储值prev1us变量值设置为无效标识值,以表示该节点之前没有其他可用节点,将最后一个ID节点的第二存储值next变量值设置为无效标识值,以表示该节点之后没有其他可用节点。
[0073]进一步的,远端路由器设备使用首偏移量head变量存储该资源表中首节点对应的ID值,使用尾偏移量tail变量存储该资源表中尾节点对应的ID值。
[0074]值得一提的,在本实施例中,上述ID节点占用的字节数S可以为4字节,第一存储值prev1us变量与第二存储值next变量各占用2字节,可表示的数值范围为I到216,即可满足L2TP隧道总数(1-65535)的分配需求。相对于现有技术中采用普通链表存储时,各节点中的指针需要存储相邻节点的完整内存地址(32位系统中每个节点需要用4字节来表示,64位系统中每个节点需要8字节),内存占用更小,且上述对ID节点占用字节数的选择仅为示例性的,包括但不限于此,采用更多字节数以便在资源表中存储更多ID节点的实现方式,从而适用于ID值需求更大的应用场景,可理解为本领域技术人员可在没有做出创造性劳动前提下轻易想到的,因此也在本发明的实施例保护范围内。
[0075]上述无效标识值用于作为一个ID节点的第一存储值以指示本ID节点没有前驱节点,或,作为一个ID节点的第二存储值以指示本ID节点没有后继节点,可以为S/2字节能够表示且不在O至N-1范围内的任意数值,在本实施例中,可以取值为-1,且对该无效标识值的选择仅为示例性的,此处不做限定。
[0076]进而,完成初始化后的资源表结构可以如图5所示。
[0077]S204、使用资源表进行ID资源的管理。
[0078]具体的,远端路由器设备通过维护上述步骤S201至S203构建得到的资源表,实现对ID值资源的高效管理。
[0079]在一种实现方式下,示例性的,如图6所示,远端路由器设备在建立L2TP隧道时,使用资源表分配一个指定ID值的操作,具体可以包括:
[0080]S301、确定指定ID值所对应的指定ID节点的内存地址。
[0081]具体的,远端路由器设备根据指定ID值以及内存块的起始地址pBuffer,计算确定该指定ID值对应指定ID节点的内存地址。该内存地址即为指定ID值与字节数S的乘积与起始地址pBuffer的和。
[0082]以图7所示状态的资源表为例,若指定ID值为I,可计算确定对应指定ID节点的内存地址为pBuffer+lX4 = pBuffer+4 ;或,若指定ID值为3,可计算确定对应指定ID节点的内存地址为 pBuffer+3X4 = pBuffer+12。
[0083]S302、判断指定ID节点是否可用。
[0084]具体的,在获取该指定ID节点的内存地址后,根据该指定ID节点的第一存储值与第二存储值,判断该指定ID节点是否链接在资源表中:若是则表明该指定ID节点可用,SP该指定ID值未被分配;或,若否则表明该指定ID节点不可用,即该指定ID值已被分配。
[0085]示例性的,远端路由器设备在获取该指定ID节点的内存地址后,访问该指定ID节点,查询该指定ID节点的第一存储值prev1us与第二存储值next,并进行判断:
[0086]若第一存储值prev1us变量值与第二存储值next变量值都为分配标识值,则认定该指定ID节点未链接在资源表中,该指定ID节点不可用,该指定ID值已被分配。
[0087]或者,若第一存储值prev1us变量值与第二存储值next变量值都不为分配标识值,则认定该指定ID节点链接在资源表中,该指定ID节点可用,该指定ID值未被分配。
[0088]其中,该分配标识值为用于指示本ID节点已分配的预设值,可以为当前要分配的节点所对应的ID值,也可以为S/2字节能够表示且不在O至N-1范围内、与无效标识值不同的任意数值,此处不做限定。
[0089]在本实施例中,分配标识值可以选择使用当前要分配的节点所对应的ID值,即在判断指定ID节点是否链接在资源表中时,具体为判断第一存储值prev1us变量值与第二存储值next变量值是否与指定ID值相同。
[0090]进一步的,若确定该指定ID值已被分配,则分配失败,结束为L2TP隧道分配一个指定ID值的操作;或者,若确定该指定ID值未被分配,则执行步骤S303,在使用该指定ID值进行分配前,调整资源表中相关节点中的链接关系。
[0091]以图7所示状态的资源表为例,若指定ID值为I,则在根据对应指定ID节点的内存地址查询后可知,该指定ID节点的第一存储值prev1us变量值为0,第二存储值next变量值为3,都与分配标识值(跟随指定ID值为I)不同,即该指定ID节点链接在资源表中,该指定ID值可分配,进而执行步骤S303。
[0092]或者,若指定ID值为2,则在根据对应指定ID节点的内存地址查询后可知,该指定ID节点的第一存储值prev1us变量值为2,第二存储值next变量值也为2,都与分配标识值(跟随指定ID值为2)相同,即该指定ID节点未链接在资源表中,该指定ID值不可分配,则分配失败,结束分配指定ID值的操作。
[0093]S303、调整资源表中相关节点中的链接关系,以便使用指定ID值完成ID值分配。
[0094]示例性的,根据该指定ID节点的第一存储值prev1us访问本节点在资源表中的前驱节点,并将该指定ID节点的第二存储值next变量值赋值给该前驱节点的第二存储值next ο
[0095]进一步的,根据该指定ID节点的第二存储值next访问本节点在资源表中的后继节点,并将该指定ID节点的第一存储值prev1us变量值赋值给该后继节点的第一存储值prev1us。
[0096]进一步的,将该指定ID节点的第一存储值prev1us与第二存储值next都设置为分配标识值,以表示该指定ID节点已被分配。
[0097]需要注意的,若该指定ID节点为资源表中的首节点,则在执行上述链接关系调整操作前,还需要将该资源表的首偏移量head更新为该指定ID节点的后继节点的ID值(即指定ID节点的第二存储值next变量值);或者,若该指定ID节点为资源表中的尾节点,则在执行上述链接关系调整操作前,还需要将该资源表的尾偏移量tail更新为该指定ID节点的前驱节点的ID值(即指定ID节点的第一存储值prev1us变量值)。
[0098]以图7所示状态的资源表为例,若指定ID值为1,在确定该指定ID值可分配后,将资源表中前驱节点的第二存储值next变量值设置为3 (指定ID节点的第二存储值next变量值),将资源表中后继节点的第一存储值prev1us变量值设置为O (指定ID节点的第一存储值prev1us变量值),并将指定ID节点的第一存储值prev1us变量值、第二存储值next变量值都设置为I (分配标识值跟随指定ID值为I),完成对资源表中相关节点链接关系的调整,调整后资源表状态可如图8所示。
[0099]在另一种实现方式下,示例性的,如图9所示,远端路由器设备在删除L2TP隧道时,使用资源表释放一个目标ID值的操作,具体可以包括:
[0100]S401、确定目标ID值所对应的目标ID节点的内存地址。
[0101]具体的,远端路由器设备根据目标ID值以及内存块的起始地址pBuffer,计算确定该目标ID值对应目标ID节点的内存地址。该内存地址即为目标ID值与字节数S的乘积与起始地址pBuffer的和。
[0102]以图7所示状态的资源表为例,若目标ID值为0,可计算确定对应目标ID节点的内存地址为pBuffer+0X4 = pBuffer ;或,若目标ID值为3,可计算确定对应目标ID节点的内存地址为 pBuffer+3X4 = pBuffer+12。
[0103]S402、判断目标ID值是否已被分配。
[0104]具体的,在获取该目标ID节点的内存地址后,根据该目标ID节点的第一存储值与第二存储值,判断该目标ID节点是否链接在资源表中:若是则表明该目标ID值未被分配;或,若否则表明该目标ID值已被分配。
[0105]示例性的,远端路由器设备在获取该目标ID节点的内存地址后,访问该目标ID节点,查询该目标ID节点的第一存储值prev1us与第二存储值next,并进行判断:
[0106]若第一存储值prev1us变量值与第二存储值next变量值都为分配标识值,则认定该目标ID节点未链接在资源表中,该目标ID值已被分配,即可对该目标ID值进行释放。
[0107]或者,若第一存储值prev1us变量值与第二存储值next变量值都不为分配标识值,则认定该目标ID节点链接在资源表中,该目标ID值未被分配,即无法对该目标ID值进行释放。
[0108]进一步的,若确定该目标ID值未被分配,则释放失败,结束释放目标ID值的操作;或者,若确定该目标ID值已被分配,则执行步骤S403,调整资源表中相关节点中的链接关系,完成释放。
[0109]以图7所示状态的资源表为例,若目标ID值为0,则在根据对应目标ID节点的内存地址查询后可知,该目标ID节点的第一存储值prev1us变量值为-1,第二存储值next变量值为1,都与分配标识值(跟随目标ID值为O)不同,即该目标ID节点链接在资源表中,该目标ID值未被分配,则释放失败,结束释放目标ID值的操作。
[0110]或者,若目标ID值为2,则在根据对应目标ID节点的内存地址查询后可知,该目标ID节点的第一存储值prev1us变量值为2,第二存储值next变量值也为2,都与分配标识值(跟随目标ID值为2)相同,即该目标ID节点未链接在资源表中,该目标ID值已被分配,进而执行步骤S403。
[0111]S403、调整资源表中相关节点中的链接关系,对目标ID值进行释放。
[0112]示例性的,根据资源表的尾偏移量tail,确定资源表中尾节点的内存地址,访问该尾节点,并将目标ID值存入该尾节点的第二存储值next。
[0113]进一步的,将该尾节点对应的ID值存入该目标ID节点的第一存储值prev1us,并将该目标ID节点的第二存储值next设置为无效标识值。
[0114]进一步的,将资源表的尾偏移量tail更新为该目标ID值,以表明释放后,即将该目标ID节点添加至资源表中之后,该目标ID节点为资源表中的尾节点。
[0115]以图7所示状态的资源表为例,若目标ID值为2,在确定该指定ID值已被分配后,根据尾偏移量tail计算确定资源表中尾节点的内存地址,进而将该尾节点的第二存储值next变量值设置为2 (目标ID值);将目标ID节点的第一存储值prev1us变量值设置为η-1 (尾节点对应的ID值,即当前尾偏移量tail变量值);将目标ID节点的第二存储值next变量值设置为无效标识值-1 ;将资源表的尾偏移量tail变量值设置为2 (目标ID值),完成对资源表中相关节点链接关系的调整,调整后资源表状态可如图10所示。
[0116]在另一种实现方式下,示例性的,如图11所示,远端路由器设备在建立L2TP隧道时,使用资源表分配一个非指定ID值的操作,具体可以包括:
[0117]S501、确定资源表中首节点的内存地址。
[0118]具体的,远端路由器设备根据记录的首偏移量head以及内存块的起始地址PBuffer,计算确定资源表中当前首节点的内存地址。该内存地址即为首偏移量head变量值与字节数S的乘积与起始地址pBuffer的和。
[0119]以图7所示状态的资源表为例,首偏移量head变量值为0,可计算确定对应的首节点的内存地址为pBuffer+0X4 = pBuffer。
[0120]S502、调整资源表中相关节点中的链接关系,以便使用首节点对应的ID值完成ID值分配。
[0121]示例性的,根据当前首节点的第二存储值next,确定当前首节点在资源表中的后继节点的内存地址,访问该后继节点,将该后继节点的第一存储值prev1us设置为无效标识值,以表示分配执行后该后继节点没有前驱节点。
[0122]将资源表的首偏移量head更新为该后继节点对应的ID值(即当前首节点的第二存储值next变量值),以表明分配执行后资源表中的首节点为分配前当前首节点的后继节点。
[0123]进一步的,将当前首节点的第一存储值prev1us与第二存储值next都设置为分配标识值,以表示该节点已被分配。
[0124]以图7所示状态的资源表为例,首偏移量head变量值为0,将首偏移量head的变量值设置为I (当前首节点的第二存储值next变量值),将资源表中后继节点的第一存储值prev1us变量值设置为无效标识值-1,并将当前首节点的第一存储值prev1us变量值、第二存储值next变量值都设置为O (分配标识值跟随当前首节点对应的ID值为O),完成对资源表中相关节点链接关系的调整,调整后资源表状态可如图12所示。
[0125]综上,本发明实施例在执行步骤S201至S203构建资源表后,即可一次或多次执行步骤S301至S303、步骤S401至S403、步骤S501至S502中的一种或多种,从而实现基于资源表的ID资源管理。
[0126]值得一提的,本发明实施例是以建立或删除L2TP隧道时分配或释放ID的应用场景为例进行说明的,可以想到的,在L2TP会话ID的分配或释放,以及其他需要进行ID资源管理的同类型应用场景下,采用上述实施例提供的方法,执行步骤S201至S203构建满足需求的资源表,进而使用构建的资源表进行ID资源,是本领域技术人员可在没有做出创造性劳动前提下轻易想到的,因此也在本发明的实施例保护范围内。
[0127]本发明实施例提供一种资源表构建方法,通过在根据ID节点总数及每一个ID节点的字节数预分配连续的内存块后,对各ID节点对应的ID值进行设置,并对各ID节点中的第一存储值及第二存储值进行初始化。这样,通过使用构建的资源表管理ID资源,能够根据ID值与起始地址直接确定对应ID节点的内存地址进而查询判断,避免了现有技术花费较长时间对管理ID节点的链表进行遍历的操作。因此,本发明相对于现有技术,能够高效执行对ID资源的管理操作,解决了分配指定ID值或释放目标ID值时遍历操作导致执行效率较低的问题,提高了 L2TP隧道建立操作的处理性能,优化了网络表现。
[0128]本发明实施例提供一种资源表构建装置01,该装置01用于实施本发明实施例提供的一种资源表构建方法,可以为如图1所示组网结构中的远端路由器设备,也可以为该设备中的一个功能模块,如图13所示,该装置01包括:
[0129]预分配单元011,用于分配一段连续的内存块存储ID节点,内存块的大小为一个ID节点的字节数与ID节点总数的乘积。
[0130]其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值。
[0131]设置单元012,用于设置每个ID节点对应的偏移量作为本节点对应的ID值。
[0132]其中,该偏移量用于指示本节点的内存地址与内存块的起始地址之间的差值;
[0133]初始化单元013,用于将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
[0134]可选的,每个ID节点对应的偏移量可以为本ID节点的内存地址与起始地址之间的差值与字节数的商;
[0135]初始化单元013还可以用于:
[0136]将无效标识值存入内存块中第一个ID节点的第一存储值中以及最后一个ID节点的第二存储值中。
[0137]其中,无效标识值用于作为一个ID节点的第一存储值以指示本ID节点没有前驱节点,或,作为一个ID节点的第二存储值以指示本ID节点没有后继节点。
[0138]可选的,如图14所示,该装置01还可以包括:指定分配单元014、释放单元015以及非指定分配单元016中的一种或多种。
[0139]其中,优选的,指定分配单元014可以用于:
[0140]接收待分配的指定ID值;
[0141]获取指定ID值对应的指定ID节点的内存地址;其中,内存地址为指定ID值与字节数的乘积与起始地址的和;
[0142]查询内存地址,当确定指定ID节点的第一存储值及第二存储值都不为分配标识值时,根据指定ID节点的第一存储值、第二存储值分别访问本ID节点的前驱节点以及后继节点;其中,分配标识值为用于指示本ID节点已分配的预设值;
[0143]将指定ID节点的第二存储值赋值给前驱节点的第二存储值,将指定ID节点的第一存储值赋值给后继节点的第一存储值,将指定ID节点的第一存储值及第二存储值都设置为分配标识值。
[0144]优选的,释放单元015可以用于:
[0145]接收待释放的目标ID值;
[0146]获取目标ID值对应的目标ID节点的内存地址;其中,内存地址为目标ID值与字节数的乘积与起始地址的和;
[0147]查询内存地址,当确定目标ID节点的第一存储值及第二存储值都为分配标识值时,根据尾偏移量访问资源表中的尾节点;其中,分配标识值为用于指示本ID节点已分配的预设值,尾偏移量为预设用于存储尾节点ID值的变量;
[0148]将目标ID值存入尾节点的第二存储值,将尾节点ID值存入目标ID节点的第一存储值,将目标ID节点的第二存储值设置为无效标识值,将尾偏移量更新为目标ID值。
[0149]优选的,非指定分配单元016可以用于:
[0150]根据首偏移量访问资源表中的首节点;其中,首偏移量为预设用于存储首节点ID值的变量;
[0151]根据首节点的第二存储值,访问首节点的后继节点,将后继节点的第一存储值设置为无效标识值;
[0152]将首偏移量更新为后继节点对应的ID值,将首节点的第一存储值及第二存储值都设置为分配标识值;其中,分配标识值为用于指示本ID节点已分配的预设值。
[0153]本发明实施例提供一种资源表构建装置通过在根据ID节点总数及每一个ID节点的字节数预分配连续的内存块后,对各ID节点对应的ID值进行设置,并对各ID节点中的第一存储值及第二存储值进行初始化。这样,通过使用构建的资源表管理ID资源,能够根据ID值与起始地址直接确定对应ID节点的内存地址进而查询判断,从而高效执行对ID资源的管理操作,解决了分配指定ID值或释放目标ID值时遍历操作导致执行效率较低的问题,提高了 L2TP隧道建立操作的处理性能,优化了网络表现。
[0154]在本申请所提供的几个实施例中,应该理解到,所揭露的系统,设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0155]另外,在本发明各个实施例中的设备和系统中,各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。且上述的各单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0156]实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、ROM (Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
[0157]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【权利要求】
1.一种资源表构建方法,其特征在于,包括: 分配一段连续的内存块存储ID节点,所述内存块的大小为一个ID节点的字节数与ID节点总数的乘积;其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值; 设置每个ID节点对应的偏移量作为本节点对应的ID值,所述偏移量用于指示本节点的内存地址与所述内存块的起始地址之间的差值; 将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
2.根据权利要求1所述的方法,其特征在于, 每个ID节点对应的偏移量为本ID节点的内存地址与所述起始地址之间的差值与所述字节数的商; 所述方法还包括: 将无效标识值存入所述内存块中第一个ID节点的第一存储值中以及最后一个ID节点的第二存储值中;所述无效标识值用于作为一个ID节点的第一存储值以指示本ID节点没有前驱节点,或,作为一个ID节点的第二存储值以指示本ID节点没有后继节点。
3.根据权利要求1或2所述的方法,其特征在于,还包括: 接收待分配的指定ID值; 获取所述指定ID值对应的指定ID节点的内存地址,所述内存地址为所述指定ID值与所述字节数的乘积与所述起始地址的和; 查询所述内存地址,当确定所述指定ID节点的第一存储值及第二存储值都不为分配标识值时,根据所述指定ID节点的第一存储值、第二存储值分别访问本ID节点的前驱节点以及后继节点;所述分配标识值为用于指示本ID节点已分配的预设值; 将所述指定ID节点的第二存储值赋值给所述前驱节点的第二存储值,将所述指定ID节点的第一存储值赋值给所述后继节点的第一存储值,将所述指定ID节点的第一存储值及第二存储值都设置为所述分配标识值。
4.根据权利要求1或2所述的方法,其特征在于,还包括: 接收待释放的目标ID值; 获取所述目标ID值对应的目标ID节点的内存地址,所述内存地址为所述目标ID值与所述字节数的乘积与所述起始地址的和; 查询所述内存地址,当确定所述目标ID节点的第一存储值及第二存储值都为分配标识值时,根据尾偏移量访问资源表中的尾节点;所述分配标识值为用于指示本ID节点已分配的预设值,所述尾偏移量为预设用于存储尾节点ID值的变量; 将所述目标ID值存入所述尾节点的第二存储值,将所述尾节点ID值存入所述目标ID节点的第一存储值,将所述目标ID节点的第二存储值设置为无效标识值,将所述尾偏移量更新为所述目标ID值。
5.根据权利要求1或2所述的方法,其特征在于,还包括: 根据首偏移量访问资源表中的首节点,所述首偏移量为预设用于存储首节点ID值的变量; 根据所述首节点的第二存储值,访问所述首节点的后继节点,将所述后继节点的第一存储值设置为无效标识值; 将所述首偏移量更新为所述后继节点对应的ID值,将所述首节点的第一存储值及第二存储值都设置为分配标识值,所述分配标识值为用于指示本ID节点已分配的预设值。
6.一种资源表构建装置,其特征在于,包括: 预分配单元,用于分配一段连续的内存块存储ID节点,所述内存块的大小为一个ID节点的字节数与ID节点总数的乘积;其中,每个ID节点包括用于存储前驱节点ID值的第一存储值,和用于存储后继节点ID值的第二存储值; 设置单元,用于设置每个ID节点对应的偏移量作为本节点对应的ID值,所述偏移量用于指示本节点的内存地址与所述内存块的起始地址之间的差值; 初始化单元,用于将每个ID节点对应的ID值存入本ID节点前驱节点的第二存储值中,将每个ID节点对应的ID值存入本ID节点后继节点的第一存储值中。
7.根据权利要求6所述的装置,其特征在于, 每个ID节点对应的偏移量为本ID节点的内存地址与所述起始地址之间的差值与所述字节数的商; 所述初始化单元还用于: 将无效标识值存入所述内存块中第一个ID节点的第一存储值中以及最后一个ID节点的第二存储值中;所述无效标识值用于作为一个ID节点的第一存储值以指示本ID节点没有前驱节点,或,作为一个ID节点的第二存储值以指示本ID节点没有后继节点。
8.根据权利要求6或7所述的装置,其特征在于,还包括指定分配单元,用于: 接收待分配的指定ID值; 获取所述指定ID值对应的指定ID节点的内存地址,所述内存地址为所述指定ID值与所述字节数的乘积与所述起始地址的和; 查询所述内存地址,当确定所述指定ID节点的第一存储值及第二存储值都不为分配标识值时,根据所述指定ID节点的第一存储值、第二存储值分别访问本ID节点的前驱节点以及后继节点;所述分配标识值为用于指示本ID节点已分配的预设值; 将所述指定ID节点的第二存储值赋值给所述前驱节点的第二存储值,将所述指定ID节点的第一存储值赋值给所述后继节点的第一存储值,将所述指定ID节点的第一存储值及第二存储值都设置为所述分配标识值。
9.根据权利要求6或7所述的装置,其特征在于,还包括释放单元,用于: 接收待释放的目标ID值; 获取所述目标ID值对应的目标ID节点的内存地址,所述内存地址为所述目标ID值与所述字节数的乘积与所述起始地址的和; 查询所述内存地址,当确定所述目标ID节点的第一存储值及第二存储值都为分配标识值时,根据尾偏移量访问资源表中的尾节点;所述分配标识值为用于指示本ID节点已分配的预设值,所述尾偏移量为预设用于存储尾节点ID值的变量; 将所述目标ID值存入所述尾节点的第二存储值,将所述尾节点ID值存入所述目标ID节点的第一存储值,将所述目标ID节点的第二存储值设置为无效标识值,将所述尾偏移量更新为所述目标ID值。
10.根据权利要求6或7所述的装置,其特征在于,还包括非指定分配单元,用于: 根据首偏移量访问资源表中的首节点,所述首偏移量为预设用于存储首节点ID值的变量; 根据所述首节点的第二存储值,访问所述首节点的后继节点,将所述后继节点的第一存储值设置为无效标识值; 将所述首偏移量更新为所述后继节点对应的ID值,将所述首节点的第一存储值及第二存储值都设置为分配标识值,所述分配标识值为用于指示本ID节点已分配的预设值。
【文档编号】H04L12/741GK104363175SQ201410675214
【公开日】2015年2月18日 申请日期:2014年11月21日 优先权日:2014年11月21日
【发明者】汤宇浩, 范恒英 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1