专利名称:一种实现快速重路由的方法
技术领域:
本发明涉及一种在驱动层面实现快速重路由的方法。
背景技术:
FRR (Fast Reroote)快速重路由,就是一条LSP出现问题,不能正常传输 信令和数据,这时候就将信令与数据转移到事先已经建立好的另外一条路径上 去,以保证业务不会中断。可以这样理解FRR是一种保护措施。
在FRR中有两种不同类型的保护方案
一、 路径保护,也称为端到端保护,这种方式是通过和现在的LSP并行建 立额外一条LSP,这条LSP只会在发生失效时使用
二、 局部保护,或称为本地保护,即备份LSP只对原LSP的一部分进行保 护。其中,由于保护的对象不同,对LSP中的结点进行保护的方式称为结点保 护,而对LSP中某链路进行保护的方式称为链路保护。
目前普遍使用的FRR切换普遍需要快速的进行切换, 一般需要在50毫秒完 成,在拥有网络处理器的机器上, 一般使用NP来进行处理,但是在ASIC芯片 上, 一般没有对应的FRR的硬件表项,因此以往在驱动层面实现FRR功能主要 是通过上层在进行切换的时候,删除以前的老的失效的路由,再添加一个新的路 由进行转发。这样的缺点是导致FRR切换的时候,如果对应某个实效的LSP的 路由非常的多,就会出现非常多次的要求驱动删除路由,从而导致切换时间不能 达到要求。
目前中国专利CN200710166107.3、 CN200710175346.5、 CN200710105840,
都是从协议层面上实现的FRR的一些方法,其缺点是没有考虑到芯片层面的切 换速度的提高的问题。而在无法对芯片功能进行修改的ASIC芯片上,必须利用 芯片已有的表项功能实现FRR功能,而不能像网络处理器芯片那样编码来实现。并且现在市场上的大部分交换芯片都没有提供单独的FRR切换的表项,而大部 分的交换芯片又都提供了关于ECMP路由的表项管理功能。
发明内容
本发明所要解决的技术问题是提供一种FRR的方法,克服了在FRR切换的 时候,驱动非常多次地删除路由,从而导致切换时间不能达到要求。
本发明的发明内容是提供一种快速重路由的方法,它包括如下步骤:a、系统启 动上层协议管理和配置FRR路由;b、上层下发FRR的一条有效下一跳地址, 为FRR分配一个与ECMP组的序号不相同的序号,驱动将该FRR的有效下一跳 地址写入芯片的ECMP表中,建立一个软件表,存储FRR组和对应芯片中的 ECMP组之间的关系;c、将子网路由的前缀地址和FRR组号通知驱动,驱动在 所述软件表中根据FRR组号査找到对应的ECMP组号,将子网路由信息和ECMP 组号一起写入硬件中;d、 FRR组的有效下一跳地址出现故障,上层软件通知驱 动FRR的index和新的备份下一跳的IP地址,驱动在所述软件表中根据FRR的 index査找到对应的ECMP的index,把新的备份下一跳的IP地址更新到ECMP 的下一跳中,完成FRR的切换。
在所述的步骤b中,驱动通过调用芯片的SDK函数,将ECMP组写入芯片中。
在所述的步骤b中,芯片的ECMP组支持写入一个下一跳,则写入一个下 一跳;芯片的ECMP组必须支持两个或者两个以上下一跳,则写两个或两个以 上相同的下一跳。
在所述的步骤c中,子网路由的下一跳不使用IP地址,关联到所述FRR组 的index。
在所述的步骤d中,驱动通过调用芯片的SDK函数,将FRR新的有效下一 跳IP地址写入芯片的ECMP表中。
在所述的步骤d中,更新完ECMP表的地址后,更新所述步骤b中的软件表。
由以上的技术方案可见,与现有实现方法相比较,本发明提出的方案可以在 大部分支持ECMP的ASIC芯片上实现快速的支持FRR切换的操作方法,并且 不管有多少子网路由在使用这个FRR组都不会导致切换速度的增加,提高了使用ASIC芯片设计的系统对于FRR切换的响应速度,大大的提高了系统的效率, 并且使得FRR切换速度更加稳定,不会受到子网路由数量的影响。另外使用该 方案使得ASIC芯片一样可以支持FRR的处理,不需要为了实现该功能而不得 不使用NP芯片,使用ASIC芯片开发的设备也比使用NP开发设备成本降低很 多。
-
图1为本发明方法的子网路由利用FRR与ECMP组的关系建立切换的示意图。
图2为本发明方法的处理流程总图。
图3为本发明方法的FRR组下发处理流程图。
图4为本发明方法的使用FRR保护的子网路由下发处理流程图。
图5为本发明方法的FRR切换下一跳上层下发处理流程图。
具体实施例方式
本发明提出了一种使用ASIC芯片提供的ECMP表的来实现FRR功能的方 法,本文中使用Broadcom公司提供的BCM56624芯片来进行举例,该方案不仅 仅限于这一款交换芯片,只要芯片厂商提供了 ECMP的表和针对ECMP表的管 理接口 ,就可以在驱动层面上借助ECMP表的管理接口来实现FRR的快速切换 的功能。
该方案实现的基本思路就是把FRR作为一个ECMP组写入芯片的ECMP表 中,并且无论有多少条子网路由使用了这个FRR的切换,所需要做的动作仅仅 只有一个把这个FRR对应的ECMP组的下一跳内容进行一次修改,把这个 ECMP组的下一跳从一个无效的下一跳切换到一个有效下一跳即可,而无需像以 前的实现方式那样进行多次子网路由的删除和添加。
如图1所示,尽管有多条子网路由指向需要切换的FRR组,但是如果使用 ECMP组来实现,在切换的时候仅仅需要将ECMP组的下一跳进行切换即可, 不需要对所有子网路由进行操作。例如此时有n条子网路由,这些子网路由的 下一跳有A、 B两个,A是有效的下一跳,B是备份下一跳,而此时仅需要创建一个ECMP组,该组的下一跳是A,那么此时一旦开始切换,仅仅需要在这个 ECMP组中把下一跳切换为B,而所有的子网路由都不需要删除和添加就可以完 成这个FRR的动作,对应图1仅仅需要将实线的下一跳切换到虚线的下一跳,即 可实现FRR。
如图2,本发明的技术方案包括如下步骤
a、 系统启动上层协议管理和配置FRR路由;
b、 上层协议下发驱动层FRR的一条有效的下一跳IP地址,协议层的下发 以及驱动的处理动作是按以下三个歩骤进行的
bl 、分配一个FRR的序号index,该index与上层分配的ECMP组的序号index 不能相同;
b2、将下发的IP地址作为FRR的index的有效下一跳,并将该FRR的index 和有效下一跳IP地址通知驱动;
b3、驱动将FRR的index和有效下一跳IP当作是一个ECMP组的index和 这个ECMP组的下一跳IP地址写入芯片的ECMP表中,并保存这个ECMP组写 入芯片的ECMP组的index;此处驱动方面写芯片的操作与操作上层下发ECMP 路由的方法是一样的,仅仅需要在驱动的软件表中区分这个组到底是真正的 ECMP组下发的还是一个FRR的有效下一跳下发的,由于在芯片中处理的时候, FRR和真正的ECMP下一跳组是共用的,因此在步骤bl中,分配的FRR的index 和真正的ECMP的index不能相同;
c、 此时如果有子网路由需要进行FRR组的链路备份,将这些子网路由的前 缀地址和FRR组号通知驱动,驱动根据上层提供的FRR组号,就可以在所述软 件表中査找到FRR组号和ECMP组号之间的对应关系,将子网路由信息和ECMP 组号一起写入硬件中,这些子网路由就指向了硬件中的ECMP组,通过这样的 操作也就将需要FRR组保护的子网路由的下一跳都指向了硬件中事实上起作用 的ECMP组的下一跳;
d、 当完成步骤c之后,这些指向FRR组的路由就可以进行保护的FRR切 换了,此时,如果该FRR组的有效的下一跳出现故障需要切换到备份下一跳, 动作如下
dl、上层软件不需要再告诉驱动此时引用了该FRR的所有的子网路由,仅仅需要告诉驱动该FRR的index,和新的备份下一跳的IP地址;
d2、驱动在软件表中找到该FRR的index对应的ECMP的index,把新的备
份下一跳的IP地址更新到这个ECMP的下一跳中,完成FRR的切换;
步骤a、 b是上层写入驱动FRR组和下一跳的操作,对应图3;歩骤c是上
层写入需要被保护的子网路由的操作,对应图4;步骤d是子网路由进行切换的
时候,上层对于驱动的操作,对应图5。
为了更清楚地理解本发明所述技术方案,现举例如下如有一个子网路由
123丄1.0,它有两个下一跳,正在使用的下一跳是123丄1.1,备份下一跳是 123.1.1.2。
步骤a、 b的处理,是上层创建一个FRR组A,组A的成员是123丄1.1,然 后上层把组A写入驱动,驱动对应的创建一个ECMP组a,将123丄1.1写入ECMP 组a中;
步骤c的处理,是上层下发子网路由123丄1.0,并且告诉驱动这个子网路由 的下一跳是FRR组A,驱动就通过这个FRR组A找到了 ECMP组a,然后把"子 网路由123丄1.0 + ECMP组a"的信息一起写入硬件,则硬件可以通过ECMP 组a知道,123丄1.0的下一跳是ECMP组a对应的下一跳123丄1.1;
步骤d的处理,是如果123丄1.1出现故障了,现在要切换到123丄1.2,这 时,上层下发FRR组A的切换信息,告诉驱动FRR组A现在的下一跳己经不 是123丄1.1而是切换成新的123丄L2了,于是,驱动收到之后,直接通过FRR 组A找到ECMP组a,并且修改ECMP组a的下一跳变成123丄1.2,通过这样 的修改,刚才指向ECMP组a的子网路由123丄1.0就自动的切换了下一跳。
本方法的好处就是,如果指向这个FRR组A的路由很多,除了 123丄1.0, 还有很多其他的子网路由都指向这个FRR组,那么通过这种方法的步骤d可以 看出,不需要再下发每个子网路由的详细信息,而是直接告诉驱动,FRR组A 的变化,就可以间接的修改所有子网路由的下一跳。
下面就图2的步骤作具体的描述,图3对应图2中的a、 b步骤,是FRR组 下发处理函数流程图
步骤IOI,当上层协议使能了FRR功能的时候,需要下发FRR组和目前处在使能状态的下一跳地址;
步骤102,分配一个与真正的上层下发的ECMP组的组号不一样的FRR的 组号,防止出现FRR组号占用了真正的ECMP组组号的情况;
步骤103,驱动将该FRR组分配的组号index作为芯片的ECMP表的index 调用芯片的SDK函数,将ECMP组写入芯片中;
步骤104,驱动根据FRR组号分配创建了 ECMP组,将所述FRR组的有效 下一跳写入该ECMP组;这里需要根据各个不同芯片的具体情况写入,如果芯 片的ECMP组支持写入一个下一跳则可以写入一个下一跳,如果必须支持两个 或两个以上下一跳,则可以写两个或两个以上相同的下一跳;
步骤105,在驱动中建立一个软件表,存储这个FRR组和对应的芯片中的 ECMP组之间的关系,以便子网路由添加的时候,查找子网路由关联的FRR的 组号在硬件中应该对应的是哪个ECMP组号;
步骤106,如果驱动写硬件芯片表全部成功,返回成功,如果写芯片失败, 返回失败。
图4对应图2中的c步骤,是使用FRR保护的子网路由下发处理流程图 步骤201,当有需要FRR保护的子网路由出现的时候,上层需要下发这种 子网路由给驱动;
步骤202,子网路由的下一跳不再使用IP地址,而是关联到保护这个子网 路由的FRR组的index;
步骤203,驱动在所述FRR组与ECMP组建立的软件表中,通过上层协议 下发的FRR的index,查找该FRR对应的ECMP组的index,进而得到ECMP
的下一跳信息;
步骤204,将ECMP表的index信息和子网路由的相关信息写入芯片的硬件 的子网路由表中,硬件中的这条子网路由的下一跳就指向该找到的ECMP组, 这样就把需要FRR保护的这个子网路由和我们替代FRR组写入硬件的ECMP组 的index联系起来了;
子网路由的前缀就是要写入硬件的子网路由表的内容,例如123.0.0.0就是 一个子网路由前缀;子网路由表指的是硬件的子网路由表。子网路由写入的时候, 如果是FRR的类型,需要找到一个对应的ECMP表的index作为该子网路由的下一跳写入硬件,硬件会知道这个子网路由对应的下一跳是一个ECMP组,然 后就会在ECMP表中找该ECMP组,该ECMP组又记录了 1个或者多个下一跳, 这1个或者多个下一跳就是该子网路由的真实的下一跳。
歩骤205,如果驱动写硬件芯片表全部成功,返回成功,如果写芯片失败, 返回失败。
图5对应图2中的d步骤,是FRR切换下一跳上层下发处理流程图
歩骤301,当FRR发生切换的时候,上层下发FRR组以及新的下一跳地址, 这个下一跳是用于这个FRR组切换时候的备份下一跳,由于以前的下一跳已经 失效,因此这个备份下一跳现在生效;
步骤302,在软件表中找到这个ECMP组,得到ECMP组的组号,并且将 新的需要生效的下一跳准备写入硬件中;
步骤303,更新芯片的ECMP组内容,通过调用芯片的SDK函数,把新的 生效的下一跳地址写入这个ECMP组中,替代以前的失效的下一跳,以前的下 一跳不再产生作用,这样就完成了在硬件中切换下一跳的动作;
步骤304,更新驱动的软件表中的FRR与ECMP组的关系表,将新的下一 跳写入ECMP组的下一跳中,并且删除原来的下一跳,完成软件表与芯片硬件 表的同步;
步骤305,如果驱动写硬件芯片表全部成功,返回成功,如果写芯片失败, 返回失败。
权利要求
1、一种实现快速重路由的方法,其特征在于它包括如下步骤a、系统启动上层协议管理和配置FRR路由;b、上层下发FRR的一条有效下一跳地址,为FRR分配一个与ECMP组的序号不相同的序号,驱动将该FRR的有效下一跳地址写入芯片的ECMP表中,建立一个软件表,存储FRR组和对应芯片中的ECMP组之间的关系;c、将子网路由的前缀地址和FRR组号通知驱动,驱动在所述软件表中根据FRR组号查找到对应的ECMP组号,将子网路由信息和ECMP组号一起写入硬件中;d、FRR组的有效下一跳地址出现故障,上层软件通知驱动FRR的index和新的备份下一跳的IP地址,驱动在所述软件表中根据FRR的index查找到对应的ECMP的index,把新的备份下一跳的IP地址更新到ECMP的下一跳中,完成FRR的切换。
2、 按照权利要求1所述的实现快速重路由的方法,其特征在于在所述的 步骤b中,驱动通过调用芯片的SDK函数,将ECMP组写入芯片中。
3、 按照权利要求1所述的实现快速重路由的方法,其特征在于在所述的 步骤b中,芯片的ECMP组支持写入一个下一跳,则写入一个下一跳;芯片的 ECMP组必须支持两个或者两个以上下一跳,则写两个或两个以上相同的下一 跳。
4、 按照权利要求l所述的实现快速重路由的方法,其特征在于在所述的 步骤c中,子网路由的下一跳不使用IP地址,关联到所述FRR组的index。
5、 按照权利要求1所述的实现快速重路由的方法,其特征在于在所述的 步骤d中,驱动通过调用芯片的SDK函数,将FRR新的有效下一跳IP地址写 入芯片的ECMP表中。
6、按照权利要求1所述的实现快速重路由的方法,其特征在于在所述的 步骤d中,更新完ECMP表的地址后,更新所述步骤b中的软件表。
全文摘要
本发明公开了一种实现快速重路由的方法,它包括如下步骤,系统启动上层协议管理和配置FRR路由;上层下发FRR的一条有效下一跳IP,驱动将FRR的IP写入ECMP表中,建立一个软件表存储FRR组和ECMP组之间的关系;将子网路由的前缀地址和FRR组号通知驱动,驱动在软件表中查找到ECMP组号,将子网路由信息和ECMP组号一起写入硬件中;FRR组的有效下一跳IP出现故障,上层通知驱动FRR的index和新的备份下一跳的IP,驱动在软件表中查找到ECMP的index,把新的IP更新到ECMP的下一跳中。本发明提高了使用芯片设计的系统对于FRR切换的响应速度。
文档编号H04L29/08GK101442494SQ20081024125
公开日2009年5月27日 申请日期2008年12月16日 优先权日2008年12月16日
发明者宁 林, 钱霄鸿 申请人:中兴通讯股份有限公司