背景技术
目前,为了使网络设备在接收到报文时,能够按照用户的要求执行各种业务处理,比如,能够对接收到的报文进行重定向或丢弃所接收到的报文等,通常需要在网络设备的端口下发对应的ACL规则,在ACL规则中,记录了各种报文的业务处理要求。当网络设备在一个端口上接收到报文时,首先将报文与对应于该端口的ACL规则进行匹配,根据匹配到的ACL规则对报文进行对应的业务处理。
在网络设备中,为了记录向每个端口下发的所有ACL规则,针对每个端口设置了硬件表项,包括:规则(RULE)表、掩码(MASK)表、计数器(COUNTER)表和限流(METER)表。其中,MASK表、RULE表、COUNTER表和METER表的具体描述可参见如下表1所示。
表名称 |
作用 |
表项组成结构 |
功能说明 |
MASK表 |
指示用户需要匹配报文的位置。用户可以对报文前80个字节中的32个字节进行匹配 |
掩码的位置RULE表的起始序号RULE表的结束序号 |
匹配的32个字节被分为了8个4字节。字节位置不是任意的,必须满足4字节连续的要求。MASK表项和RULE表项是一对多的关系。在MASK表项中,记录了这个RULE表项块的起始位置和结束位置 |
RULE表 |
说明用户需要匹配的报文的内容 |
MASK表序号IN-PROFILE动作OUT-PROFILE动作COUNTER表项序号 |
RULE表项记录了对应的MASK表项序号、METER表项序号和COUNTER表项序号。如果没有限流和计数功能,METER表项序号和COUNTER表项序号的数值被设置为0。 |
|
|
METER表项序号其他杂项 |
RULE表项的主要动作有:丢弃/转发/重定向/重新标记/统计 |
COUNTER表 |
对匹配的报文进行统计 |
计数器值 |
用于traffic-statistic功能 |
METER表 |
指示限流器资源,用于对报文进行带宽控制 |
令牌桶大小令牌注入速度令牌桶剩余令牌数目 |
用于traffic-limit功能 |
表1
参见表1,当向网络设备的一个端口下发ACL规则时,网络设备将该ACL规则的内容进行分解后,分配到对应于该端口的MASK表和RULE表中,如果用户下发的动作是traffic-statistic或者traffic-limit,则与动作相关的参数会保存到对应该端口的COUNTER表和METER表中。
目前,很多网络设备,比如利用Broadcom芯片进行报文处理的网络设备,根据下发的ACL规则设置硬件表项的原则是:如果不同ACL规则对应同一掩码,则该不同ACL规则使用同一个MASK表项,并且在RULE表中将该不同ACL规则对应的各个RULE表项放在一起,形成一个“块”,而不考虑该不同ACL规则的下发次序;如果不同ACL规则对应不同掩码,则根据该不同ACL规则的下发次序,依次在MASK表项中建立对应的各个MASK表项,并依次在RULE表中建立对应的各个RULE表项。比如,用户向网络设备的端口1依次下发如下三条ACL规则:
rule 1 permit ip source 2.2.11.2 0
rule 2 deny ip source 2.2.11.0 0.0.0.255
rule 3 permit ip source 2.2.11.3 0
其中,首先下发的rule 1要求转发源IP地址满足2.2.11.2/32的报文,其次下发的rule 2要求丢弃源IP地址满足2.2.11.0/24的报文,最后下发的rule 3要求转发源IP地址满足2.2.11.3/32的报文。
参见图1,根据上述设置硬件表项的原则,当网络设备首先接收到rule 1时,则针对该rule 1在端口1的MASK表中建立对应的MASK表项1,并针对该rule 1在端口1的RULE表中建立对应的RULE表项1;当网络设备随后接收到rule 2时,由于rule 2对应的掩码与rule 1对应的掩码不同,网络设备则针对该rule 2在端口1的MASK表中建立对应的MASK表项2,并针对该rule 2在端口1的RULE表中建立对应的RULE表项2;当网络设备最后接收到rule 3时,由于rule 3对应的掩码与rule 1对应的掩码相同,网络设备则将rule 3对应的MASK表项设置为rule 1所对应的MASK表项1,并将针对该rule3建立的RULE表项3与RULE表项1放在一起,形成一个“块”。
在设置好硬件表项后,当网络设备接收到报文时,则遍历所有MASK表项和对应的RULE表项,为报文匹配到一系列的动作,如果该一系列的动作没有冲突,网络设备则分别执行各个动作对应的处理,如果动作有冲突,则对于有冲突的动作,只执行根据先建立的MASK表项所匹配到的RULE表项中的动作。
目前,用户所要求的、对ACL规则的执行原则为:先下发的规则先生效。对于依次下发的rule 1、rule 2和rule 3,由于rule 2中的掩码长度较短,只要求满足一个IP地址段即可,rule 3中的掩码长度较长,要求满足一个具体的主机IP地址,并且,rule 3与rule 2相交,即存在报文可同时匹配到rule2和rule 3,而rule 2和rule 3的动作又存在冲突,rule 2要求丢弃,rule 3要求转发,按照ACL规则的执行原则,rule 2先下发应该先生效,所以即使可以匹配到rule 3的报文应该首先执行rule 2后被执行丢弃,而不会再根据rule 3执行转发处理。
然而,参见图1,由于rule 3对应的掩码与最先下发的rule 1相同,因此,该rule 3对应的MASK表项和RULE表项均在rule 2对应的MASK表项和RULE表项之前,这样,当网络设备在端口1上接收到可以同时匹配到rule 3和rule 2的报文后,由于rule 3和rule 2中的动作有冲突,所以只会执行根据先建立的MASK表项1匹配到的rule 3中的动作,即转发报文,而不会执行根据后建立的MASK表项2匹配到的rule 2中的动作,即丢弃报文,这样,则出现了对ACL规则执行顺序颠倒的问题,也就是说,在实际的业务实现中,网络设备没有按照对ACL规则的执行要求,依次执行rule 1、rule2和rule 3对应的业务处理。
当出现了对ACL规则执行顺序颠倒的问题时,如果执行顺序颠倒的两个ACL规则之间相交且动作存在冲突,比如对于rule 2和rule 3,rule 2和rule 3相交且动作存在冲突,rule 2要求丢弃IP地址满足2.2.11.3/32规则的报文,但rule 3却要求转发IP地址满足2.2.11.3/32规则的报文,那么,按照颠倒的顺序执行该两个ACL规则后,则不能对报文进行正确的业务处理,无法满足客户需求。
发明内容
有鉴于此,本发明的第一目的在于提供一种保证执行正确的方法,本发明的第二目的在于提供一种保证执行正确的装置,本发明的第三目的在于提供一种保证执行正确的系统,从而保证网络设备能够正确地执行ACL规则,保证对报文进行正确的业务处理。
为了达到上述目的,本发明的技术方案是这样实现的:
一种保证执行正确的方法,该方法包括:
将下发到网络设备任意一个端口上的所有访问控制列表ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,如果是,则按照先下发规则先生效的原则对该两个ACL规则进行调整;所述网络设备根据调整后的所有ACL规则设置对应于所述端口的硬件表项。
该方法进一步包括:在用户针对所述端口依次下发ACL规则时,根据下发的先后顺序设置各个ACL规则从高到低的优先级,将各个ACL规则重新进行排序;
所述比较为:将重新排序后的所有ACL规则进行比较;
所述判断是否存在执行顺序颠倒的任意两个ACL规则包括:在进行比较时,判断对于任意两个ACL规则,排在前面的ACL规则的优先级是否低于排在后面的ACL规则的优先级,如果是,则确定存在执行顺序颠倒的两个ACL规则。
所述将各个ACL规则重新进行排序的步骤包括:按照ACL规则掩码长度从大到小的顺序,对需要下发到网络设备任意一个端口上的所有ACL规则进行从前到后的排序。
在判断出存在执行顺序颠倒的两个ACL规则后,并在进行调整前,进一步包括:判断所述两个ACL规则是否相交且是否存在动作冲突,如果均是,则继续执行所述的按照先下发规则先生效的原则对该两个ACL规则进行调整的步骤。
所述对两个ACL规则进行调整的步骤包括:生成一个新的ACL规则,该新规则的动作包括所述两个ACL规则中,需要先生效的ACL规则中与需要后生效的ACL规则相冲突的动作,并将新规则排在所述两个ACL规则的前面。
所生成新规则的动作中包括所述两个ACL规则中,需要先生效的ACL规则中与需要后生效的ACL规则不冲突的动作。
在进行比较时,进一步包括:对于任意两个ACL规则,判断其中当前需要后生效的ACL规则是否被当前需要先生效的ACL规则所覆盖,如果是,则删除该当前需要后生效的ACL规则。
该方法进一步包括:在用户针对所述端口依次下发ACL规则时,根据下发的先后顺序设置各个ACL规则从高到低的优先级;
所述当前需要后生效的ACL规则为所述两个ACL规则中优先级较低的ACL规则;
所述当前需要先生效的ACL规则为所述两个ACL规则中优先级较高的ACL规则。
该方法进一步包括:按照ACL规则掩码长度从大到小的顺序,对需要下发到网络设备任意一个端口上的所有ACL规则进行从前到后的排序;
所述进行比较为:在重新排序后的所有ACL规则中,将每一个ACL规则与排在其后的所有ACL规则分别进行比较。
在所述网络设备设置硬件表项之后,进一步包括:当需要向所述网络设备的所述端口下发一个新增ACL规则时,将该新增ACL规则与之前下发的ACL规则进行比较,判断新增ACL规则和与其比较的ACL规则是否会执行顺序颠倒,如果是,则按照先下发规则先生效的原则对新增ACL规则和与其比较的ACL规则进行调整;所述网络设备根据所进行的调整,更新对应于所述端口的硬件表项。
在判断出新增ACL规则和与其比较的ACL规则执行顺序颠倒之后,并在执行所述按照先下发规则先生效的原则对新增ACL规则和与其比较的ACL规则进行调整之前,进一步包括:判断新增ACL规则和与其比较的ACL规则是否相交且是否存在动作冲突,如果均是,则继续执行所述按照先下发规则先生效的原则对新增ACL规则和与其比较的ACL规则进行调整的步骤。
所述按照先下发规则先生效的原则对新增ACL规则和与其比较的ACL规则进行调整包括:生成一个新的ACL规则,该新规则的动作包括新增ACL规则和与其比较的ACL规则两者中,需要先生效的ACL规则中与需要后生效的ACL规则相冲突的动作;
所述更新对应于所述端口的硬件表项的步骤包括:网络设备根据所生成的新规则与所述新增ACL规则,更新对应于所述端口的硬件表项。
由所述网络设备在所述端口上依次接收到各个ACL规则后,执行所述的比较和调整的步骤。
在将所有ACL规则下发到网络设备的所述端口上之前,由预先设置的独立于所述网络设备的一个保证执行正确的设备执行所述的比较和调整的步骤;
在执行所述调整之后,并在由所述网络设备设置硬件表项之前,进一步包括:所述保证执行正确的设备将调整后的所有ACL规则依次下发到网络设备的所述端口上。
一种保证执行正确的装置,该装置包括:交互单元和调整单元,其中,
交互单元,用于依次接收下发到网络设备任意一个端口上的所有ACL规则;
调整单元,用于在交互单元接收到需要下发到网络设备任意一个端口上的所有ACL规则时,将所有ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,在确定存在后,按照先下发规则先生效的原则对该任意两个ACL规则进行调整。
所述调整单元进一步在确定任意两个ACL规则相交且存在动作冲突后,执行按照先下发规则先生效的原则对该任意两个ACL规则进行调整。
一种保证执行顺序正确的系统,该系统包括:保证执行顺序正确的装置和网络设备,其中,
保证执行顺序正确的装置,将下发到网络设备任意一个端口上的所有ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,如果是,则按照先下发规则先生效的原则对该任意两个ACL规则进行调整;
网络设备,用于根据调整后的所有ACL规则设置硬件表项,并在接收到报文时,根据所设置的硬件表项对报文进行对应的业务处理。
所述保证执行顺序正确的装置集成在所述网络设备中;
或者,所述保证执行顺序正确的装置设置在独立于所述网络设备的一个设备中,该保证执行顺序正确的装置在进行调整之后,进一步将调整后的所有ACL规则下发到所述网络设备的所述端口上。
由此可见,在本发明中,在将针对网络设备一个端口的所有ACL规则下发之前,首先对这些ACL规则进行一系列的比较,当比较出任意两个ACL规则的执行顺序颠倒,并进一步确定该两个ACL规则相交且存在动作冲突后,按照先下发规则先生效的原则,对该任意两个ACL规则进行调整;将调整后的所有ACL规则依次下发到网络设备的所述端口上,网络设备根据所接收到的调整后的ACL规则执行对应的业务。因此,本发明可以保证网络设备能够正确地执行ACL规则,保证对报文进行正确的业务处理。
具体实施方式
本发明提出了一种保证对ACL规则执行正确的方法,其核心思想是:将下发到网络设备任意一个端口上的所有ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,如果是,则按照先下发规则先生效的原则对该两个ACL规则进行调整;所述网络设备根据调整后的所有ACL规则设置对应于所述端口的硬件表项。
相应的,本发明还提出了一种保证对ACL规则执行正确的装置。图2A是在本发明中保证执行正确的装置的结构示意图。参见图2A,在本发明中,保证对ACL规则执行正确的装置包括:交互单元和调整单元,其中,
交互单元,用于依次接收下发到网络设备任意一个端口上的所有ACL规则;
调整单元,用于在交互单元接收到需要下发到网络设备任意一个端口上的所有ACL规则时,将所有ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,在确定存在后,按照先下发规则先生效的原则对该任意两个ACL规则进行调整。
相应的,本发明还提出了一种保证对ACL规则执行正确的系统。图2B是在本发明中保证执行正确的系统的结构示意图。参见图2B,该系统包括:图2A所示的保证执行正确的装置以及网络设备,其中,
保证执行正确的装置,将下发到网络设备任意一个端口上的所有ACL规则进行比较,判断是否存在执行顺序颠倒的任意两个ACL规则,如果是,则按照先下发规则先生效的原则对该任意两个ACL规则进行调整;
网络设备,用于根据保证执行正确的装置所调整后的所有ACL规则,设置硬件表项,并在接收到报文时,根据所设置的硬件表项对报文进行对应的业务处理。
在本发明中,所述保证执行正确的装置可以集成在所述网络设备中;或者,所述保证执行正确的装置也可以设置在独立于所述网络设备的一个设备中,此时,该保证执行正确的装置在进行调整之后,进一步将调整后的所有ACL规则下发到所述网络设备的所述端口上。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
图3是在本发明实施例中保证对ACL规则执行正确的流程图。参见图2A、图2B和图3,在本实施例中,保证ACL规则执行正确的过程包括以下步骤:
步骤301:接收用户下发的、需要分配到网络设备任意一个端口上的所有ACL规则。
为便于描述,在以下过程中,以所针对的任意一个端口为网络设备中的端口1为例进行说明。
步骤302:根据用户下发ACL规则的顺序,为接收到的每个ACL规则设置优先级。
在本步骤中,为每个ACL规则设置优先级是为了在后续过程中能够通过该优先级表示用户所要求的ACL规则的生效顺序。并且,所述的优先级可以为能够表示生效先后顺序的数值。比如,对于用户下发的第1条ACL规则,设置其对应的优先级为最高优先级1,对于用户下发的第2条ACL规则,设置其对应的优先级为次高优先级2,对于用户下发的第n条ACL规则,设置其对应的优先级为n等。
步骤303:按照ACL规则掩码长度从大到小的顺序,对所接收到的所有ACL规则进行从前到后的排序。
这里,对于掩码长度大的ACL规则,报文在匹配该ACL规则时的匹配长度也大,即必须满足较为严格的匹配条件时,才会执行该ACL规则;而对于掩码长度小的ACL规则,报文在匹配该ACL规则时的匹配长度也小,即只需满足较为宽泛的匹配条件,就可执行该ACL规则。比如,对于上述的ACL规则rule 3和rule 2,由于rule 3的掩码长度较大,必须满足一个具体的IP地址匹配条件后才会执行rule 3,而rule 2的掩码长度较小,只需满足在一个IP地址段内就会执行rule 2。因此可见,掩码长度大的ACL规则存在被掩码长度小的ACL规则所覆盖的可能,这样,在本步骤中,将掩码长度大的ACL规则排在前面,掩码长度小的ACL规则排在后面,使得可能被其他ACL规则所覆盖的ACL规则能够尽可能的先下发先得到执行。
需要说明的是,在本步骤中,如果存在两个ACL规则的掩码长度相同,那么,则比较该两个ACL规则的优先级,由于优先级高的ACL规则是用户先下发的,所以将优先级高的ACL规则排在优先级低的ACL规则之前。
步骤304:在排序后的所有ACL规则中,选择一个未被选择过的ACL规则。
在本步骤中,较佳地,可以按照从前到后的顺序来选择一个未被选择过的ACL规则。也就是说,通过本步骤的处理过程,首先选择的可以是排在第一个的ACL规则,依此类推,直至选择排在最后的ACL规则。
步骤305:判断在当前所选的ACL规则之后的各ACL规则中,是否存在还未与当前所选的ACL规则进行比较的ACL规则,如果是,则执行步骤306,否则,返回执行步骤304。
步骤306:选择在当前所选的ACL规则之后且未与当前所选的ACL规则进行比较的一个ACL规则(称为当前所比较的ACL规则),判断当前所选的ACL规则的优先级是否大于或等于当前所比较的ACL规则的优先级,如果是,则直接结束与该当前所比较的ACL规则的比较,返回执行步骤305,否则,执行步骤307。
这里,由于掩码长度大的ACL规则排在掩码长度小的ACL规则之前,且在本步骤中,当前所选的ACL规则是与排在其后的ACL规则进行比较,因此,当前所选的ACL规则存在被当前所比较的ACL规则所覆盖的可能性。在此种情况下,
如果当前所选的ACL规则的优先级大于或等于当前所比较的ACL规则,则说明当前所选的ACL规则下发到网络设备的次序先于或等于当前所比较的ACL规则,即使后续过程可确定两者存在动作冲突,其执行也满足用户要求,不会错误,此时,当前所选的ACL规则可以举例为上述的rule 1,当前所比较的ACL规则可以举例为rule 2,因此,直接结束与当前所比较的ACL规则的比较;
相反,如果当前所选的ACL规则的优先级小于当前所比较的ACL规则,则说明,不但存在被覆盖的可能性,而且当前所选的ACL规则的下发到网络设备的次序应后于当前所比较的ACL规则,此时,当前所选的ACL规则可以举例为上述的rule 3,当前所比较的ACL规则可以举例为rule 2,这样,如果后续过程可确定该两者的动作存在冲突,则会存在ACL规则执行错误的问题,因此,应继续通过步骤307及其后续过程进一步确定。
步骤307:判断当前所选的ACL规则是否被当前所比较的ACL规则所覆盖,如果是,则直接删除当前所选的ACL规则,返回步骤304,否则,执行步骤308。
这里,当前所选的ACL规则被当前所比较的ACL规则所覆盖的情况可以是:当前所比较的ACL规则包含了当前所选的ACL规则的全部内容,即任何满足当前所选ACL规则的报文一定满足当前所比较的ACL规则;或者,当前所比较的ACL规则与当前所选的ACL规则相同。
执行到本步骤,由于当前所选的ACL规则的优先级小于当前所比较的ACL规则的优先级,即按照要求,当前所比较的ACL规则应先于当前所选的ACL规则而生效,在此种情况下,
如果当前所选的ACL规则被当前所比较的ACL规则所覆盖,那么,当前所选的ACL规则即使下发到网络设备,也永远不会被执行,所以较佳地,可以直接删除当前所选的ACL规则,当然,直接删除当前所选的ACL规则只是一种较佳地处理方式,在实际的业务实现中也可以不删除,而直接下发;
如果当前所选的ACL规则不被当前所比较的ACL规则所覆盖,则说明仍有可能会存在ACL规则执行错误的问题,应继续通过步骤308及其后续过程进一步确定。
步骤308:判断当前所选的ACL规则与当前所比较的ACL规则是否相交,如果是,则执行步骤309,否则,直接结束与当前所比较的ACL规则的比较,返回执行步骤305。
这里,所述的当前所选的ACL规则与当前所比较的ACL规则相交的情况可以是:当前所选的ACL规则与当前所比较的ACL规则具有一部分相同的内容和一部分不同的内容,即存在报文可同时匹配到当前所选的ACL规则与当前所比较的ACL规则,同时也存在报文只满足其中一个规则。比如,上述rule 2和rule 3,由于rule 3中的IP地址为rule 2IP地址段中的一个,所以rule 2和rule 3相交。
在本步骤中,如果当前所选的ACL规则与当前所比较的ACL规则不相交,则说明无论先执行当前所选的ACL规则还是当前所比较的ACL规则,均不会导致ACL规则执行错误的问题,因此,可以结束当前的比较,相反,如果相交,则说明该两个规则很可能会导致ACL规则执行错误的问题,应通过步骤309及其后续过程进一步确定。
步骤309:判断当前所选的ACL规则与当前所比较的ACL规则的动作是否存在冲突,如果是,则执行步骤310,否则,直接结束与当前所比较的ACL规则的比较,返回执行步骤305。
执行到本步骤时,由于当前所选的ACL规则的优先级小于当前所比较的ACL规则的优先级,即用户要求当前所比较的ACL规则先生效,但是,当前所选的ACL规则排在当前所比较的ACL规则的前面,会先被下发而执行生效,这样,则出现了执行顺序颠倒的问题。在此种情况下,如果当前所选的ACL规则与当前所比较的ACL规则相交且动作存在冲突,则一定会出现ACL规则执行错误的问题,此时,当前所选的ACL规则可以举例为上述的rule 3,当前所比较的ACL规则可以举例为上述的rule 2,因此一定要采取后续步骤310的调整措施,保证存在冲突的动作中,用户所要求的当前所比较ACL规则中的相应动作先生效。
在上述步骤306至步骤309的比较过程中,对于当前所选的ACL规则和当前所比较的ACL规则,是先比较其优先级,再比较是否相交,然后比较是否存在动作冲突,从而确定该两个ACL是否会导致执行错误,是否应该进行调整。需要说明的是,上述步骤306至步骤309的比较过程只是本实施例所列举的将两个ACL规则进行比较的一种可行的实施方式,在实际的业务实现中,也可以采用其他的比较方式,比如,先判断当前所选的ACL规则与当前所比较ACL规则是否相交且存在动作冲突,再判断该两个ACL规则的优先级等。无论采用何种方式,只要能确定当前所选的ACL规则先下发到硬件表项,且当前所选的ACL规则与当前所比较ACL规则相交且存在动作冲突,且用户要求当前所比较ACL规则先生效,即当前所选的ACL规则的优先级小于当前所比较ACL规则的优先级,那么,就可执行后续步骤310的调整处理。
步骤310:生成一个新规则,将所生成的新规则排在当前所选的ACL规则的前面,并在后续过程中,不再执行将所生成的新规则与当前所选ACL规则及当前所比较ACL规则进行比较和调整的处理。
执行到本步骤时,由于当前所选ACL规则中的动作记为动作1,与当前所比较ACL规则的动作记为动作2,存在冲突,但由于用户要求当前所比较的ACL规则中的动作2先生效,因此,在本步骤中,所生成的新规则的动作一定包括:当前所比较ACL规则与当前所选ACL规则相冲突的动作,即动作2。进一步地,由于执行到本步骤时,由于用户要求当前所比较的ACL规则中的动作先生效,因此,所生成新规则的动作还可以进一步包括当前所比较ACL规则中除动作2之外的其他动作,也就是说,所生成的新规则的动作可以与当前所比较ACL规则的动作完全相同。
并且,所生成的新规则对应的优先级为当前所比较ACL规则的优先级。
按照上述步骤306至步骤310的过程,则完成了对当前所选的ACL规则与排在其后的一个ACL规则的比较和调整。
步骤311:判断当前是否还存在未被选择过的ACL规则,如果是,则返回步骤304,否则,直接执行步骤312。
通过上述步骤304至步骤311的过程,则实现了将需要下发到网络设备任意一个端口上的所有ACL规则两两进行比较,并根据每一次的比较结果执行对应调整的处理。
另外,为了更加清楚地体现本发明采用的主要关键技术手段,以排序后的所有ACL规则作为结点依次排在链表List的从头到尾的位置为例,上述步骤304至步骤311的过程可通过下述的程序语言和描述语言来直观地体现:
对List执行如下操作:
第一步:为List中的结点建立一个关系矩阵Matrix
该矩阵的取值表明两个节点是否作过比较了,如rule1.ID=ID1,rule2.ID=ID2,
则Matrix(ID1,ID2)=Matrix(ID2,ID1)=1时,就表示这两个rule已经做过比较了。
初始时,Matrix的值都为0。
第二步:假设现在List中规则从前往后的次序为
R1,R2,R3,......,Rn
第三步:将R1依次与R2,R3,......,Rn作比较
for(i=2;i<=n;i++)
{
(A)若Matrix(R1.ID,Ri.ID)=1,则原来做过比较了,不用再比较。Continue;
设置Matrix(R1.ID,Ri.ID)=Matrix(Ri.ID,R1.ID)=1
(B)若R1.Pri>=Ri.Pri,则不做比较,continue;
(C)若Ri包含R1,或Ri=R1,则删除结点R1;R1.ID被释放,以后可以被其他新节点使用,并将Matrix中与R1.ID相关的各项清零,退出循环;
若R1,Ri不相交,则直接continue;
若R1,Ri相交,且R1.Act与Ri.Act没有冲突,则直接continue;
(D)否则,此时R1,Ri相交,且R1.Act与Ri.Act有冲突,这时就产生了优先级的跳跃,
需要生成一个辅助规则来解决,所以我们生成一个新的结点Rn+1,作为R1,Ri的交集,它满足
Rn+1.Pri=Ri.Pri,Rn+1.Act=Ri.Act,Rn+1.ID于其他节点不同;
同时纪录Matrix(R1.ID,Rn+1.ID)=Matrix(Rn+1.ID,R1.ID)=1;
Matrix(Ri.ID,Rn+1.ID)=Matrix(Rn+1.ID,Ri.ID)=1;
并将新节点加入List中,退出循环
}
如果是由于删除或添加节点退出循环(此时i!=n+1),转到第二步;
否则,继续下一步。
第四步:将R2依次与R3,R4,......,Rn作比较
按第三步相同的操作处理
......
第n+1步:将Rn-1与Rn作比较
按第三步相同的操作处理
步骤312:按照当前ACL规则的排列顺序,从前往后依次将各个ACL规则下发到网络设备的端口1。
参见图2A,本步骤的过程可以由本发明装置中的调整单元和交互单元共同执行,即,调整单元按照当前ACL规则的排列顺序将所有ACL规则依次发送至交互单元,交互单元根据调整单元发来ACL规则的顺序,依次将各个ACL规则下发到网络设备的端口1。
步骤313:网络设备根据在端口1上接收到的各个ACL规则,设置对应于端口1的硬件表项。
步骤314:网络设备在端口1上接收到报文时,在对应于端口1的硬件表项中进行匹配,根据匹配结果执行对应的业务处理。
这里,网络设备在对应于端口1的硬件表项中遍历所有MASK表项和对应的RULE表项,为报文匹配到一系列的动作,如果该一系列的动作没有冲突,则分别执行各个动作,如果动作有冲突,则对于有冲突的动作,只执行根据先建立的MASK表项所匹配到的RULE表项中的动作。
上述步骤313至步骤314的过程与现有技术的相应过程完全相同。
在上述图3所示过程中,是在确定了两个ACL规则执行顺序颠倒且该两个ACL规则相交且存在动作冲突后,才执行调整处理,即生成新规则。在实际的业务实现中,为了保证网络设备能够正确地执行ACL规则,保证对报文进行正确的业务处理,无论两个ACL规则是否相交且存在动作冲突,只要确定了两个ACL规则执行顺序颠倒,就可以执行上述的调整处理即生成新规则。
需要说明的是,利用上述图3所示过程将需要下发到端口1的所有ACL规则进行比较和调整,且网络设备根据该调整后的ACL规则设置了硬件表项之后,如果用户又有新增ACL规则需要下发到端口1,那么,本发明的处理过程包括:接收新增ACL规则,将该新增ACL规则与之前下发的ACL规则进行比较,判断新增ACL规则和与其比较的ACL规则是否会执行顺序颠倒,如果是,还可以进一步判断新增ACL规则和与其比较的ACL规则是否相交且是否存在动作冲突,如果是,则按照先下发规则先生效的原则对新增ACL规则和与其比较的ACL规则进行调整,该调整与图3所述相应内容相同,也是生成一个新的ACL规则,该新规则的动作包括新增ACL规则和与其比较的ACL规则两者中,需要先生效的ACL规则中、与需要后生效的ACL规则相冲突的动作;然后,网络设备根据所生成的新规则与所述新增ACL规则,更新对应于所述端口的硬件表项。
还需要说明的是,参见图2A的本发明装置,图3中的步骤301以及在接收新增ACL规则的过程可以由本发明装置中的交互单元来执行;图3中的步骤302至步骤311的过程以及对于新增ACL规则时的比较和调整的过程,可以由本发明装置中的调整单元来执行。
并且,参见图2B的本发明系统,在本发明中,保护执行正确的装置可以设置在所述的网络设备中,此时,保护执行正确的装置是在网络设备的所述端口接收到所述ACL规则后,执行所述的比较和调整的步骤。
并且,保护执行正确的装置也可以设置在独立于所述网络设备的一个设备中,此时,在将所有ACL规则下发到网络设备的所述端口上之前,由保护执行正确的装置执行所述的比较和调整的步骤,在调整后,保护执行正确的装置再将调整后的所述ACL规则下发到网络设备的所述端口上。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。