防止网络更新振荡的方法 本发明与桥接的串行总线有关。具体地说,本发明与在诸如IEEE1394之类的串行总线网桥内的网络更新振荡问题有关。
网络(net)是指一个由网桥(bridge)互连的一些总线所构成的集体。按照IEEE的定义,一个网桥实现两个网口(portal)和转发异步子操作(subaction),而且也可以按照所存储的路由信息转发同步子操作。作为网络的一部分的每个总线具有一个专用的标识符,这个标识符在网络是稳定和配置适当的情况下是唯一地。具体地说,在一个IEEE 1394网络内,可以有多到1,023个逻辑总线(logical buse),而每个总线上可以有多到63个节点(node)。在一个网络内的总线之间物理上允许环型互连。然而,按照IEEE1394网桥暂行标准,环(如果有的话)应该通过使每个环至少有一个网桥不工作来予以切断。在连接两个或更多个桥接的网络时,需要有一个网络更新过程。
按照IEEE1394.1网桥暂行标准版本1.00,主网口(primeportal)定义为在一个有着一些互连的总线的网络内的一个奇异网口,而一个网口族(clan)定义为一组呈现为服从同一主网口的隶属网桥网口。在连接两个网络时,可能同一个总线上的一些网桥网口属于不同的网口族。然而,这是一个暂时性状况,将由网络更新过程解决。
在一个总线上的协调器(coordinator)发现一些网口属于不同的网口族时,协调器就选择一个主网口后按照IEEE1394.1网桥暂行标准更新分组路由选择信息。协调器于是向它的本地总线上的每个网口发送一个UPDATE_ROUTE(路由更新)消息,以便更新每个网口的分组路由选择信息和网口族亲缘关系(clan affinity)。
如果一个新的更新过程在其他网络更新正在处理时启动,这些网络更新过程就应该融合成一个过程。否则,一个网络就不能得到适当配置。按照IEEE1394.1网桥暂行标准版本1.00,只有一个协调器可以检测网络更新冲突,在选择了一个留存的主网口和更新分组路由选择信息后启动新的更新过程。
然而,问题是,如果一个网桥在处理在一个网口上接收到的一个网络更新的同时在另一个网口上发现另一个网络更新过程,这两个与两个不同的网络更新有关的不同的UPDATE_ROUTE消息可以在这个网桥处交叉通过而不会融合成一个UPDATE_ROUTE消息。于是,两个网桥网口分别用交换了的UPDATE_ROUTE消息更新,然后启动对它们的本地总线的总线重新设置。
结果,每个总线上的每个协调器发现一个新的不同的网络更新冲突。两个协调器于是由于不同的网络更新冲突可以向在它们各自的本地总线上的每个网口发送不同的UPDATE_ROUTE消息。如果发生这些情况,同一个网桥在处理一个网口接收到的网络更新的同时将在另一个网口又观察到一个网络更新过程。这会导致无限的网络更新振荡问题。
例如,图1例示了一个网桥在它的两个本地总线上接收到两个UPDATE RQUTE消息而这两个UPDATE ROUTE消息将分别由这两个本地总线交叉转发给对方的一个例子的时间流程图。
在一个网桥从一个网口接收到一个网络更新消息时就启动一个网络更新过程。通常,在一个协调器(即负责网络更新的网桥网口)接收到一个网络更新消息后,更新网桥的网口族信息,过程以启动对另一个网口的总线的总线重新设置为结束。
第一总线A(未示出)上的协调器(未示出)发送一个网络更新消息,在点120被总线A接收。几乎同时,在时间130,总线B上的协调器(未示出)向总线B发送一个网络更新消息。因此在从一个总线开始到对另一个总线的总线重新设置之间的称为网络更新周期(从130到140这段时间)的时帧内有一个更新消息的“交叉(crossing)”。
在总线A从总线B接收到包括重新设置信息的网口族信息时,它更新它的网口族信息和启动重新设置。
因此,A和B各自的协调器仍将检测到有关网桥网口族信息的“竞争”,从而双方又将执行网络更新。
接着,这两个协调器又将启动不同的更新过程。网桥于是又可能在两个网口上接收到在150交叉的两个不同的网络更新消息。这可能导致一个无限的网络更新循环。也就是说,网桥不断地在两个网口上接收到两个网络更新消息,不断地将它们转发给这两个总线。在这种情况下,网络配置一直不会结束。这种循环称为网络更新振荡。
按照本发明的一个方面,所提出的防止网络更新振荡的方法包括网桥只选择两个UPDATE_ROUTE消息中的一个UPDATE_ROUTE消息,这两个UPDATE_ROUTE消息在网口各是它的本地总线上的协调器的情况下是分别由各自的网口产生的,否则是分别由一个网口的本地协调器发送而由网口接收的。然后,网桥删除另一个UPDATE_ROUTE消息,从而不会发生无限的网络更新振荡。所选的UPDATE_ROUTE消息称为留存UPDATE_ROUTE消息,将由网桥按照IEEE1394.1网桥暂行标准进行处理,因此接收到留存UPDATE_ROUTE消息的网口象启动网络事件那样启动总线重新设置,而另一个网口就不会启动总线重新设置。于是,一个协调器(可以就是网口)在总线重新设置后将发现网络更新过程冲突,从而按照IEEE1394.1网桥暂行标准解决这个问题。
由于网桥发现的网络更新事件中的一个网络更新事件已经删除,因此只有一个网络更新事件将得到处理,而网络更新事件不能在一个网桥处交叉通过。这就防止了上面所说明的网络振荡问题。
在本发明的第一方面,所提出的防止一个总线网桥由于一些竞争的网络更新消息而引起网络更新振荡的方法包括下列步骤:
(a)确定一个具体网口是否为一个它的本地总线上的协调器;如果所述具体网口是一个协调器就进至步骤(b)(i),否则进至步骤(b)(ii);
(b)(i)确定所述具体网口在它的本地总线上是否发现网络更新冲突;如果发现网络更新冲突就进至步骤(c);
(b)(ii)确定这个具体网口是否接收到来自另一个是这个本地总线上的一个协调器的网口的一个UPDATE_ROUTE消息;如果接收到UPDATE_ROUTE消息就进至步骤(c);
(c)用一个锁定过程将一个全局网络更新比特设置为1;
(d)通过确定网络更新比特是否已设置为1验证步骤(c)的锁定过程是否已成功执行;
(e)执行以下步骤中的一个步骤:
(i)如果在步骤(d)确定步骤(c)的锁定过程没有成功执行就删除这个网络更新;以及
(ii)如果在步骤(d)确定步骤(c)的锁定过程已经成功执行,就按照IEEE1394.1网桥标准处理网络更新后,将网络更新比特设置为0。
在本发明的另一个方面,所提出的防止网络更新振荡的方法包括下列步骤:
(a)在所述总线网桥的一个第一网口上接收到来自一个第一总线上的一个第一协调器的一个第一网络更新消息;
(b)在所述总线网桥的一个第二网口上在所述第一网络更新消息已由所述总线网桥的所述第一网口处理前接收到来自一个第二总线上的一个第二协调器的一个第二网络更新消息;
(c)由网桥选择所述第一和第二网络更新消息中的一个网络更新消息作为留存网络更新消息进行处理,而删除所述第一和第二网络更新消息中的另一个网络更新消息;以及
(d)更新网口族信息,使得所述第一和第二网口都含有所述留存网络更新消息的网口族信息。
在本说明的附图中:
图1为示出在现有技术中怎么会发生无限的网络更新振荡的时间流程图;以及
图2为本发明的防止网络更新振荡的方法的流程图。
对于网桥怎样选择一个网口所接收的UPDATE_ROUTE消息留存而删除另一个网口所接收的UPDATE_ROUTE消息,以下例子只是说明性的,并不是说本发明就局限于这些选择一个留存的消息和删除一个牺牲的消息的准则。
(1)时间优先 网桥保留首先在一个总线上接收到的网络更新消息,而删除然后接收到的第二消息;
(2)CPU优先,一个CPU情况 保留CPU首先发现的消息而删除另一个消息;或者
(3)CPU优先,多个CPU情况 第一个向其他CPU报告检测到网络更新事件的CPU处理这个网络更新事件,而在第一网络更新事件结束前随后检测到网络更新事件的其他CPU将忽略这些网络更新事件;或者
(4)网口配置 可以将一个网桥内的一个网口指定为留存网口(survivor)而将另一个网口指定为牺牲网口(victim)。如果网桥的每个网口都接收到一个UPDATE_ROUTE消息,或者作为一个协调器发现一个网络更新事件而生成一个UPDATE_ROUTE消息,就删除来自牺牲网口的UPDATE_ROUTE消息而处理来自留存网口的UPDATE_ROUTE消息;或者
(5)采用与IEEE1394.1暂行标准所规定的相同的原始选择准则但是在这种情况下网桥可以不编辑任何更新消息。网桥应保留和处理与按照IEEE1394.1网桥暂行标准所选的留存的主消息相应的UPDATE_ROUTE消息而删除其他UDPATE_ROUTE消息。
图2示出了对于一个包括至少两个网口的网桥的情况的作为本发明的实现方式的一个例子的流程图。实现以下流程图所揭示的过程的网桥将设置一个由这些网口共享的全局比特。这全局比特可以用软件或硬件设置,称为网络更新比特。可以用一个众所周知的锁定过程来将全局网络更新比特设置为1。全局网络更新比特可以由一个将它设置为1的网口清零。网络更新比特的初始值应该为0。
在步骤200,如果一个网口是它的本地总线上的协调器,接着将处理步骤210,如果这个网口不是它的本地总线上的协调器,就执行步骤220。
在步骤210,如果按照IEEE1394.1网桥暂行标准网口在本地总线上发现一个网络更新冲突,就执行步骤230。否则,就返回步骤200。
在步骤220,如果网口在本地总线上接收到一个来自它的协调器的UPDATE_ROUTE消息,就执行步骤230。否则,就返回步骤200。
在步骤230,用一个众所周知的锁定过程将全局网络更新比特设置为1。例如,在步骤231,如果网络更新比特为1,从而锁定失败。否则,如果网络更新比特为0,就在步骤232将全局网络更新比特设置为1,从而锁定成功。如果步骤230的锁定失败,就进至步骤260。否则,如果步骤230的锁定成功,就进至步骤240。
在步骤240,网络更新由网口按照IEEE139 4.1网桥暂行标准处理。然后,进至步骤250。
在步骤250,网口将网络更新比特清零。
在步骤260,网口删除这个网络更新事件。对于这种情况,说明另一个网口已在处理在它的本地总线上发现的另一个网络更新。
作为步骤260的结果,网桥所发现的同时发生的网络更新事件中除一个外全都被删除,从而可以防止可能发生的网络更新振荡问题。
以上是以IEEE1394总线或与之等效的1394为例进行说明的,但显然本发明并不局限于IEEE1394,而是能用于任何串行总线的网桥。