具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
首先,下面先对本发明提供的方法进行描述:
参见图2,图2为本发明实施例提供的方法流程图。该方法流程应用于FC网络中的交换机,比如图1中的交换机1、交换机2或交换机3,如图2所示,该交换机主要执行以下步骤:
步骤201,交换机接收锁定触发,依据所述锁定触发从针对本地名字服务数据库的所有服务操作中确定出需要锁定的服务操作,并向FC网络中相邻交换机继续发送所述锁定触发。
本步骤201中,交换机接收的锁定触发由FC网络中的其他交换机发送,或者,由作为FC网络的N端口发送,或者由用户基于所述交换机本地配置发起。
这里,锁定触发中携带了需要锁定的服务操作的标识,如此,本步骤201中,当交换机接收到锁定触发时,直接从该锁定触发中找到需要锁定的服务操作的标识,将该找到的标识对应的服务操作确定为需要锁定的服务操作。
另外,本步骤201中,交换机之所以在接收到锁定触发时,还向FC网络中其他交换机发送锁定触发,目的就是实现整个FC网络锁定服务操作。但是,这会导致同一交换机会连续接收到同一锁定触发,针对这种情况,则本发明中,当一交换机在已锁定服务操作的情况下,又接收到要求该服务操作锁定的锁定触发,则该交换机直接返回成功的回应报文,不进行其他任何操作。
步骤202,交换机锁定所述需要锁定的服务操作,在锁定期间内正常处理其他未被锁定的服务操作,并缓存锁定期间内接收的该被锁定的服务操作,以使得在锁定的服务操作解锁后处理该缓存的服务操作。
如此,即可实现了完全或部分锁定交换机本地名字服务数据库的操作。
至此,完成图2所示的流程。
本发明中,新增一种名为表项状态通知(NES:Notify Entries State)的报文实现锁定触发。其中,该NES报文主要包含表1所示的字段:
Item |
Size(Bytes) |
FC-CT Header |
16 |
Entries Sate |
2 |
Entries Function
|
2 |
Time Last(ms) |
4 |
在表1中,FC头(FC-CT Header)字段:若NES报文在N端口和交换机之间传输,则该NES报文使用FC ELS封装(封装后的报文称为ELS-NES报文),此时,该FC头字段中源地址为N端口所分配的FC标识(ID),目的地址为访问交换机本地名字服务数据库的知名地址0xFFFFFC;而在 NES报文在交换机之间传输时,该NES报文使用FC ILS封装(封装后的报文称为SW-NES报文),此时,FC头字段中源地址和目的地址为形如0xfffcxx的域控制器地址,xx为交换机被分配的域ID。
表项状态(Entries State)字段,其表示是否锁定名字服务数据库的服务操作,比如,本发明中,当Entries State字段取值为0x0001时,表示锁定名字服务数据库的服务操作;基于此,则当交换机接收到NES报文时,先识别该Entries字段State是否为用于表示锁定的值比如0x0001,如果是,则意味着该交换机需要锁定名字服务数据库的服务操作。当然,Entries State字段还可通过不同取值表示其他不同的意义,下文进行描述。
表项功能(Entries Funtion)字段,其表示在Entries State字段为表示锁定名字服务数据库的服务操作的值比如0x0001时,需要锁定的具体服务操作。通常,名字服务数据库的服务操作有很多,但是,有时应用需求并非锁定名字服务数据库的所有服务操作,而是有选择性地锁定其中的若干个服务操作,基于此,就需要根据应用需求确定需要锁定的服务操作,并通过Entries Funtion字段指示。基于此,则当交换机接收到NES报文时,先识别该Entries State字段取值为用于表示锁定的值比如0x0001时,进一步识别Entries Funtion字段所指示的具体哪些服务操作。
优选地,本发明中,本地名字服务数据库的服务操作至少包括以下五种操作:
操作1,称为名字服务表项添加操作(Basic Add Func),用于在FC网络的N端口注册(Flogin)至FC网络后在名字服务数据库添加针对该N端口的名字服务表项;
操作2,称为名字服务表项删除操作(Basic Del Func),用于在FC网络的N端口取消注册(Flogout)至FC网络后在名字服务数据库删除针对该N端口的名字服务表项;
操作3,称为注册操作(Register Func),其为任一数据项的注册操作,用于在名字服务数据库的相应名字服务表项(即该注册的数据项所属的名字服务表项)中添加该注册的数据项,
操作4,称为去注册操作(Deregister Func),其为任一数据项的去注册操作,用于在名字服务数据库的相应名字服务表项(即该去注册的数据项所属的名字服务表项)中去除该去注册的数据项;
操作5,称为查询操作(Quest Fun),其用于查询名字服务数据库。
基于上述五种操作,则Entries Function字段可同时指示其中的任一操作、或者该五种操作的任意组合需要锁定。
其中,Entries Function字段如何指示锁定的服务操作,可通过各个服务操作的比特位取值来实现,比如,当一服务操作的比特位(Bit)置0,则表示该服务操作不需要锁定,反之,当一服务操作的比特位置1,则表示该服务操作需要锁定。这里,各个服务操作的比特位具体如表2所示:
Entries Function
|
Bit |
Basic Add Func
|
0 |
Basic Del Func
|
1 |
Register Func |
2 |
Deregister Func
|
3 |
Quest Func |
4 |
Reserved |
Others |
时长(Time Last)字段,其单位为毫秒,在Entries State为表示锁定名字服务数据库的服务操作的值比如0x0001时为服务操作的锁定时长。本发明通过该字段设置锁定时长,可以方便于指定时间后自动使已锁定的服务操作自动解锁。
基于NES报文中的上述各个字段,则通过以下实施例对图2所示流程进行描述:
实施例1:
该实施例1应用于锁定Basic Add/Del Func的场景,如此,基于上述图2所示流程,则交换机需要缓存在锁定期间发生的N端口的Flogin或Flogout事件(相当于Basic Add/Del Func),并在锁定期间正常处理对于名字服务表项中数据 项的注册、去注册和查询操作,并同步到其他交换机,而当锁定被解除后,正常处理缓存的Flogin或Flogout事件,以进行相应的添加或删除名字服务表项的操作。
实施例2:
该实施例2应用于锁定Register Func、Deregister Func的场景。在该实施例2下,基于图2所示流程,则交换机需要缓存在锁定期间发生的名字服务表项中数据项的注册或去注册请求(相当于Register Func、Deregister Func);并且,在锁定期间如果发生N端口的Basic Add/Del Func、以及Quest Fun,则正常进行处理,并同步到其他交换机。当锁定被解除后,正常处理缓存的注册或去注册请求。
需要说明的时,本实施例中,当在锁定器件处理Basic Add/Del Func时涉及到缓存的注册请求或者去注册请求时,则删除缓存的注册请求或者去注册请求。
实施例3:
该实施例3应用于锁定Basic Add/Del Func、Register Func、Deregister Func的场景。在该实施例3下,基于图2所示流程,而交换机需要缓存在锁定期间发生的Basic Add/Del Func、Register Func、Deregister Func,并在解锁后严格按照缓存的顺序依次执行缓存的操作。
需要说明的是,在上述三个实施例中,假如解除锁定后缓存的操作尚未处理完毕时,如果接收到实时的名字服务请求,则可以保证时序,等待缓存请求执行完后再执行。
另外,还需要说明的是,在上述三个实施例中,在解除锁定后执行缓存的操作时,可以先在缓存操作中过滤掉重复或冲突的操作,然后再执行剩下的操作,这样能够提高操作执行效率。
实施例4:
该实施例4应用于锁定Quest Func的场景。在该实施例4下,基于图2所示流程,则当交换机在锁定期间接收到用于执行Quest Func的报文时,直接回应拒绝报文。
至此,完成上述四个实施例的描述。
需要说明的是,本发明中,还可对上述NES报文进行扩展,使其除了实现锁定触发之外,还表示其他应用,下面一一描述:
对NES报文中的Entries State字段进行扩展,当取值为第一值时,表示对已锁定的服务操作解除锁定(也称为解锁),而当取值为第二值时,表示既不进行锁定,也不进行解锁,仅统计Time Last字段内针对名字服务数据库执行的服务操作;其中,该第一值、第二值均与上述的用于表示锁定的值不同。
比如,Entries State字段取值为0x0000时,表示不进行锁定或解锁名字服务数据库的服务操作,仅统计Time Last内针对名字服务数据库进行的相关服务操作操作;取值为0x0001时,表示锁定名字服务数据库的服务操作,取值为0x0002时,表示解锁。需要说明的是,本发明中,在交换机未锁定一服务操作时,如果接收到针对该服务操作的解除锁定的NES报文时,则该交换机直接发送成功的回应报文,不进行其他操作。
优选地,本发明中,在Entries State字段为表示锁定的值比如0x0001时,还可进一步执行统计Time Last内针对名字服务数据库进行的服务操作。如此,即可得到上述的Time Last字段仅在Entries State字段取值为上述的第二值比如0x0000或这上述的表示锁定的值比如0x0001时需要解析,而在Entries State字段取值为第一值时,可不解析该Time Last字段,节省资源。并且,也可以得到,当Entries State字段不等于0x0002时,将进一步统计Time Last内针对名字服务数据库进行的相关服务操作。
下面对如何统计服务操作进行描述:
本发明中,交换机之间通过现有SW_RSCN报文进行统计信息的同步,最后通过表项状态统计通知(NESS:Notify Entries State Statistic))报文通知NES报文的最初发起端统计结果。
其中,在通过现有SW_RSCN报文进行统计信息的同步时,需要在与现有协议兼容下,扩展SW_RSCN报文中的Affected N_Port字段,使其携带针对名字服务数据库的具体服务操作。具体的扩展方法如下: 在目前协议规定中,Affected N_Port字段中第一个字节的高四位代表含义如下(x代表16进制的低四位取值):
取值0xh时,表示名字服务表项无变化,用来代表将接收的ELS_RSCN报文转换为SW_RSCN报文的变化;
取值1xh时,表示名字服务表项新增或注册数据改变(即发生了注册请求或去注册请求),用于接收SW_RSCN报文后发送GE_ID报文来获取改变的表项;
取值为2xh时,表示删除名字服务表项,接收SW_RSCN报文后从本地删除需要删除的名字服务表项。
但是,针对目前协议规定,SW_RSCN报文中Affected N_Port字段的第一字节还有剩余两个bit位,也即第一字节的最高位和次高位均未被使用,基于此,本发明对该字段进行了扩展,使用该剩余两个未被使用的bit位,其中,次高位表示当前SW_RSCN报文用于通知名字服务表项中发生变化的数据项,而最高位表示当前的SW_RSCN设置了统计标志,用于通知接收到该SW_RSCN报文的交换机统计服务操作。
对应于表2所示的服务操作,本发明示出了扩展后Affected N_Port字段的取值,具体如表3所示:
表3
在表3中,b代表2进制下Affected N_Port字段中第一字节的低四位取值,而Old表示已被目前协议使用,New表示未被目前协议使用。
同样,基于扩展后Affected N_Port字段中第一字节的最高位取值,本发明还示出了Affected N_Port字段的取值,具体如表4所示:
表4:
在表4中,&Statistic为统计标志,b代表2进制下Affected N_Port字段中第一字节的低四位取值,而Old表示已被目前协议使用,New表示未被目前协议使用。
优选地,本发明中,交换机之间通过现有SW_RSCN报文进行统计信息的同步具体为:交换机在统计结束(也即NES报文的Time Last结束)时发送SW_RSCN报文,以使得接收该SW-RSCN报文的交换机基于该SW_RSCN报文中Affected N_Port字段的取值来获知需要进行统计的服务操作,并将统计结果附带在NESS报文中发送给最先发起NES报文的设备,完成统计结果通知。其中,一交换机可能离最先发起NES报文的设备比较远,两者没有直连,基于此,该交换机基于最短路径通过其他设备转发,而其他设备在接收到NESS报文时,转发该接收的NESS报文,直至到达最先发起NES报文的设备。
本发明中,NESS报文格式如下表5所示:
Item |
Size(Bytes) |
FC-CT Header |
16 |
[0081]
Entries Sate |
2 |
Entries Total Count
|
2 |
Entries Function Entry
|
32 |
........ |
|
Entries Function Entry
|
32 |
在表5中,Entries State字段与NES报文中的Entries State字段相同。而EntriesTotal Count字段表示NESS报文当前携带了多少条Entries Function Entry,该字段必须携带,后续无Entries Function Entry时填0。
至于Entries Funtion Entry字段,其格式如表6所示:
Item |
Size(Bytes) |
Port State |
1 |
N Port ID
|
3 |
N PortName |
8 |
Basic Add Func Count
|
4 |
Basic Del Func Count
|
4 |
Register Func Count
|
4 |
Deregister Func Count
|
4 |
Quest Func Count
|
4 |
在表6中,Port State、N Port ID、N Port Name字段与SW_RSCN中的PortState、N Port ID、N Port Name字段依次一致,这在最先发起NES报文的设备为N端口的前提下需要填写。而Count字段比如Basic Add Func Count字段、Basic Del Func Count字段等,其表示对应的服务操作数量。
至此,完成了本发明的方法描述。
以上对本发明提供的方法进行了描述,下面对本发明提供的交换机进行描述:
参见图3,图3为本发明实施例提供的交换机结构图。该交换机应用于光纤通道FC网络,如图3所示,该交换机包括:
接收单元,用于接收锁定触发;
第一处理单元,用于依据所述锁定触发从针对本地名字服务数据库执行的所有服务操作中确定出需要锁定的服务操作,并向FC网络中相邻交换机继续发送所述锁定触发;
第二处理单元,用于锁定所述需要锁定的服务操作,在所述锁定期间内正常处理其他未被锁定的服务操作,并缓存锁定期间内接收的该被锁定的服务操作,以使得在锁定的服务操作解锁后处理该缓存的服务操作。
优选地,本发明中,所述第二处理单元在锁定期间内正常处理其他未被锁定的服务操作包括:
确定在锁定期间内接收的未被锁定的服务操作所针对的数据是否与已缓存的一服务操作所针对的数据相同,如果是,则删除该缓存的服务操作,并处理该接收的未被锁定的服务操作,如果否,则直接处理该未被锁定的服务操作。
优选地,如图3所示,所述交换机进一步包括:
统计单元,用于接收统计触发,依据所述统计触发统计设定时长内针对本地名字服务数据库执行的至少一个服务操作,并向FC网络中相邻交换机继续发送统计触发,并在完成统计后,向最先发起所述统计触发的设备发送统计结果;
或者,
所述统计单元,用于统计所述锁定期间内针对本地名字服务数据库执行的至少一个服务操作,在完成统计后,向最先发起锁定触发的设备发送统计结果。
本发明中,所述针对本地名字服务数据库的服务操作至少包括:
名字服务表项添加操作,用于在FC网络的N端口注册至FC网络后在名字服务数据库添加针对该N端口的名字服务表项;
名字服务表项删除操作,用于在FC网络的N端口取消注册至FC网络后在名字服务数据库删除针对该N端口的名字服务表项;
注册操作,其为任一数据项的注册操作,用于在名字服务数据库的相应名字服务表项中添加该注册的数据项;
去注册操作,其为任一数据项的去注册操作,用于在名字服务数据库的相应 名字服务表项中去除该去注册的数据项;
查询操作,其用于查询名字服务数据库。
基于此,所述第二处理单元缓存锁定期间内接收的该被锁定的服务操作包括:
识别所述锁定的服务操作是否为查询操作,如果是,则在锁定期间内接收到查询操作时,直接回应拒绝报文,否则,缓存锁定期间内接收的该被锁定的服务操作。
至此,完成本发明提供的交换机结构描述。
由以上技术方案可以看出,本发明中,交换机接收锁定触发,依据所述锁定触发从针对本地名字服务数据库的所有服务操作中确定出需要锁定的服务操作,锁定所述需要锁定的服务操作,这显然实现了根据应用需求完全或部分锁定FC网络中交换机本地的名字服务数据库;
另外,本发明中,交换机接收锁定触发后,继续向FC网络中相邻交换机继续发送所述锁定触发,以由相邻交换机按照上述方法执行,这实现了锁定全网中名字服务数据库;
还有,本发明中,在锁定期间缓存锁定的服务操作,并在锁定解除后,重新恢复执行已缓存的服务操作,这扩展了本发明的应用;
最后,本发明中,还可统计一段时间的针对名字服务数据库执行的服务操作,以便进行网络管理。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。