




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PMC光纤通讯卡软件实施方案1、目的与目标制定本方案,目的是根据FC-AE-FCLP协议的需求,设计详细的软件功能函数和软件工作流程,以备软件技术人员编写与调试代码参照。2、参考文件a、FIBRE CHANNEL FRAMING AND SIGNALING (FC-FS)b、FIBRE CHANNEL AVIONICS ENVIRONMENT (FC-AE)c、FX400 Lightweight Protocol (FXLP) Version 4.00 API Guided、Information Systems-dpANS Fibre Channel Protocol for SCSI3、主
2、要内容3.1 软件协议分层分析本通讯卡所采用的光纤通道协议是FC-AE-FCLP(Fiber Channel Light Weight Protocol)协议。FC-AE-FCLP一般应用在任务关键型的航空系统中,特点是低传输延迟、高数据吞吐量及低CPU占用率,能够保证大块数据的可靠传输。 FC-AE-FCLP协议是在FC-2层的FC-FS标准和FC-4层的FCP标准(Fiber Channel Protocol for SCSI)等光纤通道协议标准的基础之上,依赖于上述协议标准支持的各种服务定义,在满足通信服务质量的前提下,进行必要的裁减与扩充,从而使得在航空电子网络环境下,能更好地支持各种
3、通信紧急命令能进行高效率的低延迟和低开销数据通信服务。本通讯卡实现FC-AE-FCLP协议,其关键点就是在FC-4层实现的FCLP协议,在FC-2层实现FC-FS标准。下面对这两个协议标准做简要概述。3.1.1 FCLP协议概述FCLP协议是以FCP协议为基础,根据通信服务的要求进行相应裁减形成的标准。FCP协议是光纤通道高层映射协议FC-4层的一部分,它工作于低一级的FC协议之上,主要是对高层SCSI的映射机制。SCSI协议是通过基本的I/O读写操作来实现命令、响应、数据传输等协议功能的。FCP协议中定义支持了四种主要的功能管理机制。它们是设备管理、任务管理、进程登录/登出管理和连接管理,其
4、中在设备和任务管理中规定了SCSI协议的命令、响应、数据到光纤网络上的传输单位帧、序列等的转换。FCP协议是从FC IU和交换的角度来定义功能的,一对支持FC-4层协议映射功能的FCP端口可以生成IU和FCP交换。对于SCSI协议中的一个I/O操作被映射为一个光纤通道的交换,一个专门携带了上层SCSI I/O功能的交换称之为FCP交换。典型的SCSI I/O操作的请求和响应序列被映射为光纤通道信息单元(IU),FCP协议包含的几种信息单元主要是:命令服务请求FCP_CMND IU、数据传送准备FCP_XFER_RDY IU、数据传送动作FCP_DATA IU和命令服务响应FCP_RSP IU。
5、它们和对应SCSI功能的关系如下图3-1所示:图3-1 FCP和标准SCSI功能的对应3.1.2 FC-FS标准概述FC-FS协议为上层协议(ULPs)提供了通用数据传输层。整个FC协议如图3-2所示为层级结构。FC-FS协议包含了FC-1,FC-2,FC-3的功能定义。从FC协议的层级关系图可以看到,尽管FC-4层以上可以变换多种协议,但在FC-3层以下都是用相同协议实现的。在FC-FS协议里,FC-1层定义传输协议,包括串行编译码和差错控制等。在FC-2信号协议层定义了传输端到端数据块的规则。FC-2的功能包含类型服务,帧格式定义,序列打包和解包,交换管理,地址分配,虚地址定义,多点传送管
6、理和堆栈连接请求。FC-3提供了同一节点上(node)不同Nx端口的公共服务机制。其还包括连接服务协议等。其中连接服务是FC-2层要求必需完成。图3-2 FC协议层次关系在利用上层协议(ULP)进行数据传输之前,光纤通道必需建立好传输环境(握手协议)。光纤通道的传输环境的建立是通过F端口登录和N端口登录完成的。一旦两类登录都已完成,一个FC-4层就可以利用光纤通道进行数据传输,除非其中的一个或者两个登录变成无效。F端口登录和N端口登录主要完成两个任务:a) 确定什么种类的端口连接到链路的另一端b) 确定该N端口可能希望通信的网络上的其它N端口的操作特性。N端口注册应该发生在希望相互通信的每一对
7、N端口上。F端口登录和N端口登录是由一个端口通过发送一个含有操作特性或“服务参数”的测试集序列,以及接收一个返回的含有类似的或修改过的服务参数集的序列来进行的。两个序列的组合构成一个协商,即在传送的序列中含有发送方想要用的服务参数,而返回的序列中则包括两个端口一致同意的服务参数,后续的通信就只用一致同意的参数。其中,端口间交换的服务参数集即是按照FC-FS标准定义的。3.1.3 小结本节将光纤通道功能层次与FC协议簇相结合,以分层分析的方法概要分析了本光纤通讯卡所采用的协议。FC-AE-FCLP协议是在FC-2层的FC-FS标准和FC-4层的FCP标准等光纤通道协议标准的基础之上,依赖于上述协
8、议标准支持的各种服务定义。本光纤卡的关键是在FC-4层上实现FCLP协议到底层FC协议的映射,并根据需求在FC-3、FC-2层上实现FC-FS标准的功能。3.2 软件协议分层实现3.2.1 FCLP协议的实现3.2.1.1 FCLP协议功能架构描述本光纤通讯卡在FC-4层上实现的是FCLP协议,FCLP协议属于端到端协议,FCLP协议系统为用户提供了简单的应用程序接口来实现数据的高速传输,用户可以通过建立虚拟通道的最终实现形式进行高速数据传输。FCLP协议系统从功能上可以分为4大功能管理模块,分别是设备管理功能模块、任务管理功能模块、通信连接管理功能模块和错误处理功能模块。各功能模块的结构层次
9、如图3-3所示。图3-3 PMC光纤通讯卡软件功能模块划分(1) 设备管理功能模块主要完成对通信过程中设备、网络、协议的各种状况进行控制管理,对设备进行的各种操作进行记录监控,是其它模块工作的基础,包含初始化工作,对创建删除APID和Channel的信息记录,以及其它一些设备、网络信息的记录。设备管理模块是其它模块工作的前提,其余模块的运行都是在此模块上运行的。(2) 任务管理功能模块任务管理主要负责通信数据包的处理和加工,包含对包的分析并分配,它是通信连接模块的基础。任务管理主要负责各个通道的状态控制和数据传输。所有的上层数据传输任务都将分配到这些任务开启的通道操作中。各个通道的操作是并行的
10、,每个光纤通道接口卡可以最多开设128路通道,由任务管理来管理这些通道间的协调工作和通道本身的执行流程。(3) 通信连接管理功能模块通信连接管理模块是光纤卡软件的主体部分,它处理用户最关心的通信数据包,分为通信部分和连接部分。其中连接部分包括建立通道命令、确认通道建立、发送数据命令、关闭通道命令、获取APID命令,这是发送与接收数据前的准备工作,在此工作过程中,调用设备管理模块对建立通道信息进行记录。通信部分包括主、从模式下注册服务、注册服务响应、服务参数、服务参数响应、FCP_CNTL、FCP Data IU、FCP Response IU等通信单元的封装、组织发送、接收、解封等通信处理功能
11、,是整个协议通信的核心,只有在设备管理模块和任务管理模块良好的工作时,通信连接模块才能正常工作。通信和连接管理负责协议底层操作封装为光纤卡固件可以执行的命令块操作以完成通信与连接过程。同时监控这些通信过程,并向上层提供可靠通信服务。FCLP协议通信系统以FCP提供的5个标准SCSI命令实现所有的通信。(4) 错误处理模块错误处理模块穿插于前三个模块之中,其它所有模块产生的错误都要交给错误处理模块进行相关的处理,包括提示错误并进行恢复,从而保证其它模块正常工作。错误处理在整个系统得各个环节都进行错误监控,针对发生的各种错误进行分类处理,并最终反馈调用者。错误被分为参数错误、资源分配错误、超时错误
12、、设备状态错误、网络连接错误五类向上层汇报。3.2.1.2 FCLP协议软件框架设计PMC光纤通讯卡软件框架设计根据功能划分,主要包括如下四个方面的设计,如图3-4。图3-4 PMC光纤通讯卡软件框架设计(1) 设备管理设计负责在打开和关闭驱动过程中,为应用分配和销毁系统资源,创建整个软件系统的基础lp_device_t结构体。在lp_open_driver函数中打开光卡 设备,取得设备指针;对结构体进行初始化工作,为lp_device_t结构体分配地址空间,初始化成员变量;创建任务管理所需的三个队列。在lp_close_driver函数中关闭光卡设备;释放lp_device_t结构体的地址空
13、间;销毁任务管理的三个队列。设备管理是整个光卡软件的基础,完成对系统资源整体调度的功能。(2) 任务管理设计通过对三个handle队列的管理实现对应用中所有任务的管理。应用中的每个任务都由一个handle结构体唯一标识,handle结构体中包含本地的访问节点号、通道号以及任务类型码等。在设备管理模块为空闲分配32个handle资源,并将处理队列和结果队列初始化为空队列。进行一次通信任务时,用户递交命令(调用对应的接口函数)。接口函数从空闲队列中申请一个空的handle结构体,将命令类型、访问号以及通道号等信息填充到handle结构体中,任务管理负责将创建好的handle结构体递交下层发送,并强
14、其加入到处理队列中,表示此次任务在处理过程中;当光卡固件返回中断时,中断服务程序将中断信息转移到中断处理队列中,并调用FCLP处理例程,通过handle结构体区分任务是否完成,并将已完成的handle结构体加入到结果队列中(未完成的继续进行处理);任务管理从结果队列中取出处理结果并将处理结果递交给接口函数,同时将handle结构体清除,释放到空闲队列中已备继续使用。接口函数处理任务管理返回的结果信息并提交给用户。至此,一次通信任务完成。任务管理是通信系统的神经中枢,协调、管理并监控整个通信过程。(3) 通信与连接管理设计负责在用户使用初期创建用户指定的APID,在通信结束时删除用户指定的API
15、D,发送获取APID请求、建立通道请求、发送数据请求以及关闭通道请求。通信与连接管理构建了FCLP协议通信的框架。(4) 错误管理设计负责对参数的合法性进行检查,对通信中的超时错误、连接错误进行相应的处理。3.2.1.4.1 通道连接的建立根据FCLP协议通信原理,建立Channel需要发送两个命令来完成,第一个命令为FCLP_SETUP_CHAN_CMD,该命令是一个写命令,用于主端向从方发送自己的设备Channel信息;第二个命令为FCLP_SETUP_CHAN_ACK_CMD,该命令是一个读命令,用于主端获取从端的相关设备Channel信息。每个命令的处理过程都是要主从双方通过底层光纤通
16、道网卡和FCLP光纤网络实现的。而对于命令的内部处理过程,可以划分更具体的步骤来完成。对于第一个FCP写命令,主端FCLP协议处理层首先根据FCP写命令和FCLP协议需要的APID和Channel等信息组织构造Command Entry IOCB结构,然后把组织好的IOCB通过底层接口,交付给光卡,光卡内部通过请求队列进行本次命令处理,剩下的过程,一直到命令成功返回或者命令失败都是由光卡内部完成的;光卡处理完本次命令结果后,通过中断的方式告知FCLP协议层当前命令的完成状态和结果,FCLP协议层根据通信逻辑进行后续操作。而在命令处理的过程中,从端的FCLP需要做更多的工作,当从端光卡固件收到F
17、CP_CMD后,会把FCP_CMD命令分析组装成Accept Target I/O(ATIO) Type2 IOCB并放入响应队列,中断通知FCLP协议处理层来处理;FCLP协议层会解析ATIO内容,根据解析结果组成CTIO IOCB交给固件请求队列继续后续操作,固件处理CTIO IOCB后,光卡底层发送FCP_XFER_RDY IU;从端FCLP协议实体会处理下次中断,来查看刚才CTIO IOCB的完成状态,根据完成状态要底层固件发送不同的FCP_RSP IU给主端。对于第二个命令的处理与此类似。具体流程如下图3-5所示。图3-5 通道建立详细步骤根据上述对通道建立内部过程的分析,进行了具体
18、上层接口函数和内部功能调用函数的设计。(1) 主端的主要函数设计如下:lp_setup_chan():此函数为应用接口函数。供主端应用与从端应用建立channel时使用,是一个阻塞调用函数,它将等待以下事件发生:1.得到建立Channel ACK;2.发生超时。每个APID最多有8个Channel,如果要再建立channel,必须新建APID。若此函数成功完成,则返回创建成功的本地通道号(channum)。lp_SendSetupChanCmd():此函数为内部功能函数。该函数用于发送建立通道过程中第一个命令,即建立通道命令(FCLP_SETUP_CHAN_CMD)的功能,命令码为HexE0;
19、lp_RecvSetupChanRsp():此函数为内部功能函数。建立通道过程中的第一个命令即建立通道命令(FCLP_SETUP_CHAN_CMD)被从端处理完后,从端返回RSP信息,该命令用于处理命令完成的中断,并分析RSP信息。lp_SendSetupChanAckCmd():此函数为内部功能函数。在建立通道过程中需要发送两个命令,该函数用于发送第二个命令,即确认建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令码为HexE1;lp_RecvSetupChanAckRsp():此函数为内部功能函数。建立通道过程中的第二个命令即确认建立通道命令(FCLP_SETUP_
20、CHAN_ACK_CMD)被从端处理完后,从端返回RSP信息,该命令用于处理命令完成的中断,并分析RSP信息。(2) 从端的主要函数设计如下:lp_waitfor_chan():此函数为上层应用接口函数。它用于从端(target)建立与主端的虚拟通道(对应于initiator的lp_setup_chan()。Receiver通过此函数来告知发送者自身的接收数据能力。函数最终会返回一个ACK给发送端,以指示channel建立可以使用;或者超时退出。若此函数成功完成,则返回创建成功的本地通道号(channum)。lp_RecvSetupChanCmd():此函数为内部功能函数。在建立通道过程中需要
21、发送两个命令,该函数用于从端接收并处理主端发送过来的第一个命令,即建立通道的命令,命令码为HexE0,命令类型是FCLP_SETUP_CHAN_CMD;lp_RecvSetupChanData():此函数为内部功能函数。用于在建立通道过程中接收主端发送给从端的各种APID和地址连接信息,并调用其它内部函数回送本地APID和通道连接信息。lp_RecvSetupChanAckCmd():此函数为内部功能函数。在建立通道过程中需要发送两个命令,该函数用于接收并处理第二个命令,即确认建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令码为HexE1;在底层光纤通道网卡接口的基础
22、上,依赖于中断服务例程,主从双方按FCLP协议的通信规则建立虚拟通道。设计的各个功能函数的调用顺序是按channel建立的流程依次调用的,具体调用过程按图3-6所示。图3-6 通道建立过程的函数调用3.2.1.4.2 通道连接的拆除通道连接关闭的实现过程是通过API函数lp_close_chan()来实现的,对于关闭通道的命令,它发送的FCP命令为FCLP_CLOSE_CHAN_CMD类型,该命令为FCP控制命令。对于一个已经建立成功的通道连接,通道两端均可以发起关闭通道的命令,也可以两端同时发起关闭通道的命令,按时间最先被处理的命令来完成关闭通道的任务。发起关闭通道命令的一方为主端,从端接收
23、到该命令的光卡硬件向FCLP协议层进行中断通知,中断服务例程调用FCLP协议处理功能例程,FCLP协议处理功能进行分析处理,判断能否完成关闭Channel的操作,如果现在channel正处在数据收发的过程中,则返回设备忙的消息通知主端暂时不能关闭channel;如果channel处在空闲中状态,则从端调用内部函数lp_ClearChan()先清理本地channel资源,然后应答成功关闭的消息给主端,主端在收到成功的应答消息后也清理本地资源,然后返回给API函数lp_close_chan()报告channel关闭成功。具体函数调用流程如图3-7所示。图3-7 通道拆除过程的函数调用3.2.1.5
24、 数据收发管理设计3.2.1.5.1 数据收发的过程管理依据FCLP协议数据传输模型,在FCLP网络中两终端节点进行数据的收发依赖于先前建立好的APID和Channel,数据传输所需要的地址信息是上述两者的信息组合。数据通信的发送端为主端,接收端为从端。在FCLP数据通信中,主从双方最基础的通信方式是同步式通信,即首先从端进入阻塞等待状态,从端可以在某一固定时间内等待主端发送数据;主端调用底层光卡的硬件接口发送数据,根据光纤通道网卡的队列I/O机制,主端构造一个与发送数据的命令对应的Command Entry IOCB控制块,把该命令控制块提交给光卡固件的请求队列,由光卡固件发送命令和数据,这
25、是写数据的FCP操作。FCLP协议处理层构造Command Entry IOCB控制块时,会把主从端要求APID和Channel的地址信息、上层用户交给FCLP协议层要发送给从端的数据缓冲和数据长度填入Command Entry IOCB控制块中,封装了完整信息的Command Entry IOCB控制块被交给光卡固件的请求队列。在底层光卡固件和中断服务例程的支持下,主从两端对等的FCLP协议实体按照FCP I/O操作的写流程,进行数据包的传输管理。根据FCLP协议数据传输的流程进行了具体的功能函数的设计,其中关键的主端和从端函数设计如下:(1) 主端的主要函数设计lp_send():为上层应
26、用接口函数。函数通过Channel调用FCLP_SEND_DATA_CMD命令发送数据并监控发送的数据量(不能超过接收者的接收限制)。函数内部通过中断服务和光卡固件完成一个完整的FCP写操作。数据发送成功该函数会返回成功信息。lp_recvSendDataRsp():此函数为内部功能函数。主端向从端发送写操作FCP命令,从端按FCP写操作处理完毕后,从端返回RSP信息,主端FCLP协议层会调用此函数接收处理RSP信息。(2) 从端的主要函数设计lp_receive():此函数为上层应用接口函数。本函数用于同步接收(blocking)。仅供从端将接收到的数据通过FCLP协议层交给上层用户。接收数
27、据结束、buffer已满或者channel被发送者关闭的情况下函数将退出。lp_RecvSendDataCmd():此函数为内部功能函数。用于接收命令FCLP_SEND_DATA_CMD,分析命令完成下一步操作。lp_SendSendDataXfer():此函数为内部功能函数。在FCP写交换流程中,从端根据写命令(FCLP_SEND_DATA_CMD)需要向主端发送FCP_XFER_RDY IU,该函数即完成发送此IU信息。lp_SendSendDataRsp():此函数为内部功能函数。用于向主端反馈本次本次写操作完成的状态信息,向主端发送FCP_RSP IU信息。主从端关键功能函数的执行流程
28、如图3-8所示。图3-8 数据收发函数调用流程3.2.1.5.2 数据收发的模型根据本光纤卡的硬件结构设计,为了提高数据收发的效率,本系统采用的是非阻塞式数据收发模式,因为在数据发送端,主机先向PPC发出发送数据命令,然后向QDR中写入数据,则主机对QDR的数据写入和FC-2固件从QDR读数据并成数据帧可以并行操作,提高了主机发送数据时系统带宽利用率。同样,在数据接收端,PPC首先通知主机接收数据,然后FC-2固件向QDR写入数据和主机从QDR读取数据可以并行执行,提高了主机接收数据时的通信带宽利用率。数据收发是建立在主从两端已经在各自的APID上建立好虚拟通道的前提下进行的,由apnum和c
29、hnum标识该虚拟通道。主端主机调用lp_send()函数,向PPC发出发数命令,然后启动DMA向QDR里写入数据,FC-2固件接收到发数命令后,检测到QDR中有数据到来,则开始成读取QDR中数据,并成数据帧向从端光卡发送数据,在发完第一帧数据后,通知从端光卡PPC已有数据写入QDR中,PPC将此信息上报给主机,则主机开始读取QDR中数据,FC-2固件继续成数据帧向从端光卡写入数据,实现主机读取QDR和FC-2固件写入QDR的并行化执行。3.2.2 FC-FS协议的实现FC-FS协议包含了对FC-1,FC-2,FC-3功能的定义,光纤端口在利用上层协议(ULP)进行通信之前,端口间必须协商好F
30、C协议传输所采用的参数,建立传输环境。光纤通道的传输环境的建立是通过F端口登录和N端口登录完成的。3.2.2.1 端口注册描述3.2.2.1.1 F端口注册实现1、F端口注册(1)简介对所有N端口来说,不管它支持哪种服务类型,F端口注册是要求完成的。只有当F端口注册完成以后,N端口才会尝试与其它N端口进行通信。F端口注册完成如下几项功能:(a) 判别是否存在交换机(b) 如果交换机存在,它(F端口注册)将向N端口提供与整个交换机相关的详尽的操作特性参数,F端口名字和交换机名字(c) 如果交换机存在,它(F端口注册)将向交换机提供详尽的操作特性参数,N端口名字和N端口节点名字(d) 如果交换机存
31、在,交换机可以选择分配N_Port_ID或者对发起注册的N_Port_ID进行确认(对净荷内容确认)(e) 如果交换机存在,它(F端口注册)将要初始化buffer-to-buffer Credit。2、显式F端口注册(1)简介显式F端口注册需要N端口发出一个F端口注册的链路服务ELS。显式F端口注册将会替换以前的服务参数。注册过程将遵循交换和序列管理规则。一个序列中的帧将根据R_RDY原语信号,ACK,还有Link_Response规则进行操作。(2)显式F端口注册请求N端口会在一个新交换中发出FLOGI。FLOGI的载荷包括N端口服务参数,一个64-bit的Nx_port名字N_Port_N
32、ame,一个64-bit节点名字。服务参数在15.6节介绍。用于交换机注册的服务参数应用在表216和221中给出。N端口要分配一个OX_ID并且要设置D_ID为F端口公共地址(hexFF FF FE).如果N端口是为确定的,那么N端口需要将FLOGI中的S_ID设置为hex000000或者是hex0000YY.如果N端口将S_ID设置为hex000000那么N端口请求交换机完全分配24位N_Port_ID。如果N端口将S_ID设置为hex0000YY,那么N端口请求交换机分配高16位的值,第23位到第8位,保留N_Port_ID低8位的值。(3)显式F端口注册的响应当N端口发出FLOGI后,可
33、能接收到如下几种响应:a) LS_ACC回复序列,其OX_ID等于FLOGI的OX_ID,公共服务参数N_Port/F_Port位被设置为1(证明是Fx_Port)这是对F端口注册请求的正常响应。LS_ACC序列的D_ID就是由交换机分配的N_Port_ID。如果FLOGI中的S_ID是hex000000,则分配的D_ID将会是hexXXXXXX,如果FLOGI中的S_ID是hex0000YY, 则分配的D_ID将会是hexXXXXYY. 如果FLOGI中的S_ID是hexXXXXXX,则分配的D_ID将是同样的值hexXXXXXX.载荷将包括完整的交换机服务参数,64-bit的F_Port_
34、Name和64-bit的Fabric_Name。b) LS_ACC回复序列,其OX_ID等于FLOGI的OX_ID,公共服务参数N_Port/F_Port位被设置为0(证明是Nx_Port)指明是与另外一个N端口的点对点的连接。LS_ACC序列的D_ID就是FLOGI的S_ID。LS_ACC的载荷将对FLOGI的各类型服务参数标记无效,载荷中包含被连接N端口64-bit的N_Port_Name和一个64-bit的Node_Name. 如果收到的N_Port_Name小于本地N端口的N_Port_Name,则本地Nx_Port发起N_Port Login。如果收到的N_Port_Name大于本地
35、N端口的N_Port_Name,则本地Nx_Port等待与之连接的N_Port 发出PLOGI。c) F_BSY,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此回复用以指示Fabric忙,则本地Nx_Port可以延迟某时间后重新发出FLOGI。d) P_BSY序列,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。用以指示是本地Nx_Port与另一个Nx_Port的点对点的连接,且另一Nx_Port现在正忙。则本地Nx_Port将会延迟一段时间等待目的端Nx_Port不忙后继续发起N_Port Login。e) F_RJT序列,其OX_ID
36、等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此序列指示Fabric已经拒绝了FLOGI请求。载荷中包含了拒绝的原因码,此原因码决定了Nx_Port的后续的操作。如果原因码是“类型不被支持”,则Nx_Port可按照另一不同的服务类型发起一个FLOGI。如果原因码是“无效的S_ID”, 则Nx_Port可用另一不同的S_ID发起一个FLOGI。(A) 如果被拒绝的FLOGI的S_ID是hex000000或者hex0000YY,则Nx_Port可以选择一个24-bit的值,hexXXXXXX作为它的N_Port_ID并将其作为S_ID发起一个FLOGI。(B) 如果被拒绝的FLOG
37、I的S_ID是hexXXXXXX,则Nx_Port可以选择一个值,hexXXXXXX或者hex0000YY或者一个新的值hexXXXXXX作为它的N_Port_ID,并将其作为S_ID发起一个FLOGI。如果拒绝序列中的原因代码是其它的原因代码,则Nx_Port将根据情况作出相应的响应f) P_RJT 序列,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此序列指示此Nx_Port是与另一个Nx_Port的点到点的连接。包含于载荷中的原因代码决定了此Nx_Port的后续操作。如果原因代码是类型不支持,则此Nx_Port可按照与FLOGI不同的另一种服务类型发起一个N_
38、Port_Login。对于其它原因码,Nx_Port应该根据情况作出相应的响应。g) FLOGI 序列。此序列指示本地N端口是与另一个Nx_Port的点对点的连接。序列载荷包括被连接节点的64-bit的N_Port_Name和64-bit的Node_Name。如果接收到的N_Port_Name小于本地N_Port_Name,则Nx_Port接着要执行N_Port Login。如果接收到的N_Port_Name大于本地N_Port_Name,则Nx_Port等待来自互连接点的PLOGI。h) LS_RJT序列,其OX_ID等于FLOGI的OX_ID。LS_RJT的D_ID是由Fabric分配的N
39、_Port_ID。如果FLOGI中的S_ID是hex000000,则D_ID将是hexXXXXXX,如果FLOGI中的S_ID是hex0000YY,则D_ID将是hexXXXXYY。如果FLOGI中的S_ID是hexXXXXXX,则D_ID将是hexXXXXXX。包含在载荷中的原因代码决定了Nx_Port的处理操作。Nx_Port可以基于原因码选择服务参数并发起一个新的FLOGI。i) 无反应。这指示出是发生了传输错误,也就是物理层上的传输错误。则Nx_Port将执行一个错误恢复,恢复完后,此Nx_Port可再发起一个新的FLOGI。j) 如果接收到的N_Port_Name等于本地N_Port
40、_Name,那么此Nx_Port是与自己连接了,此FLOGI在此不作考虑。3.2.2.1.2 N端口注册实现1、N端口注册(1)简介紧随着Fabric Login之后是N_Port Login。N_Port Login主要完成如下功能:a) 提供每一个Nx_Port与其它Nx_Port的操作特性参数,N_Port_Name和Node_Name。b) 如果Fabric不存在,N端口注册程序将会为两个Nx_Port分配N_Port_ID。c) 也许还有初始化end-to-end Credit。d) 如果在点到点拓扑中的Nx_Port间或者同一个环拓扑中的NL_Port间,需要初始化buffer-t
41、o-buffer Credit。当两个N端口都相互接收到了对方的服务参数后,N_Port Login就完成了。N_Port Login有显式和隐式两种注册方式。N端口需要与其期望通信的每一个N端口进行N_Port Login,包括与保留的和公共的地址识别符的N_Port Login,因为这些地址也被认为是Nx_Port。2、显式N端口注册显式N_Port Login过程需要一个Nx_Port传输一个PLOGI链路请求序列。显式N_Port Login将替代以前的服务参数。(1)Fabric存在时的N端口注册目的端Nx_Port 显式注册程序要求传输一个N_Port Login(PLOGI)链路
42、服务序列。PLOGI在一个交换中被发出,要为此交换分配OX_ID、目的端Nx_Port的D_ID和发起端Nx_Port的S_ID。序列载荷包含PLOGI注册序列发起端Nx_Port的服务参数、N_Port_Name和Node_Name。目的端Nx_Port对PLOGI 链路服务序列的正常响应序列是在同一个交换中回应一个LS_ACC链路响应序列。此序列的OX_ID是注册序列的OX_ID,RX_ID是由响应端分配的,D_ID是发起端的N_Port_ID,S_ID是响应端的N_Port_ID。LS_ACC的载荷包含响应端Nx_Port的服务参数。(2)Fabric存在情况下的N端口注册响应在Fabr
43、ic存在的情况下,Nx_Port发出PLOGI后可能接收到的响应如下:a) LS_ACC回复序列,其OX_ID等于PLOGI的OX_ID,公共服务参数N_Port/F_Port位被设置为0(证明是Nx_Port)这是对N端口注册请求的正常响应。LS_ACC序列的D_ID就是PLOGI的S_ID, LS_ACC序列的S_ID就是PLOGI的D_ID。LS_ACC的载荷将包括目的端N端口的服务参数,64-bit的N_Port_Name和64-bit的Node_Name。此Nx_Port可以与远端N_Port开始正常的通信。b) F_BSY,其OX_ID等于PLOGI的OX_ID,D_ID就是PLO
44、GI的S_ID。说明Fabric正忙,此Nx_Port将会在延迟后重试PLOGI。c) F_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。说明Fabric已经拒绝了PLOGI请求。包含在载荷中的原因代码决定了Nx_Port的操作处理。如果原因代码说是无效的D_ID,则N_Port不能与被寻址的Nx_Port完成N_Port Login,则Nx_Port将尝试登录注册其它目的Nx_Port。对于其它的原因代码,Nx_Port将根据代码进行相应的响应。d) P_BSY序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。说明目的端N
45、x_Port正忙,此Nx_Port延迟一段时间后将重试PLOGI。e) P_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。包含在载荷中的原因代码决定了Nx_Port的操作处理。如果原因代码是说“类型不支持”,则此Nx_Port将以另一不同的服务类型进行PLOGI,对于其它的原因代码,Nx_Port将根据代码进行相应的响应。f) PLOGI序列,其D_ID是正在接收的Nx_Port的N_Port_ID,其S_ID是正在发送的Nx_Port的N_Port_ID,其OX_ID由发起端Nx_Port分配。载荷中要包括PLOGI发起端Nx_Port的64-bit的
46、N_Port_Name和64-bit的Node_Name,这说明存在一个来自于目的端Nx_Port的N端口注册碰撞。如果接收到的N_Port_Name小于正在接收的Nx_Port的N_Port_Name,则Nx_Port通过向发起端Nx_Port发送LS_RJT,序列中包含原因代码,指出登录注册正在进行中。如果接收到的N_Port_Name大于Nx_Port的N_Port_Name,则Nx_Port继续处理接收到的PLOGI。g) LS_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是目的端N端口的N_Port_ID。包含在载荷中的原因代码决定了Nx_Port的操作处理。则此N
47、x_Port将根据原因代码选择服务参数然后发起一个新的PLOGI。h) 无响应。说明发生了传输错误,也就是说发生了物理传输的错误。等错误恢复后,则此Nx_Port可以发起一个新的PLOGI。(3)Fabric不存在时的N端口注册在Nx_Port尝试Fabric Login时,如果Nx_Port发现Fabric不存在,则按照如下步骤进行N_Port Login。目的端N_Port显式登录注册需要在一个新交换中传输一个PLOGI链路服务序列。目的端Nx_Port 显式注册程序要求传输一个N_Port Login(PLOGI)链路服务序列。PLOGI在一个交换中被发出,要为此交换分配OX_ID、目的
48、端Nx_Port的D_ID和发起端Nx_Port的S_ID。序列载荷包含PLOGI注册序列发起端Nx_Port的服务参数、N_Port_Name和Node_Name。在点对点连接中,只需要其中一个Nx_Port发出一个PLOGI。如果N_Port_Name在Fabric注册时已经互换完毕,则具有最高N_Port_Name的Nx_Port将发出PLOGI序列。如果两端N端口都没有获取互连Nx_Port的N_Port_Name,那么它将发出一个PLOGI。两端N端口在发出PLOGI后还要完成对接收到PLOGI的处理要求,这样就解决了两个Nx_Port都发出PLOGI的情况。点对点连接中的一个Nx_
49、Port在一个新的交换中发出一个PLOGI,其S_ID应该与其D_ID不同。序列的载荷包括PLOGI序列发起端Nx_Port的服务参数、N_Port_Name和Node_Name。(4)Fabric不存在情况下的N端口注册响应在点对点连接情况下,Nx_Port发出PLOGI后可能接收到的响应如下:a) LS_ACC回复序列,其OX_ID等于PLOGI的OX_ID,公共服务参数N_Port/F_Port位被设置为0(证明是Nx_Port)这是对N端口注册请求的正常响应。LS_ACC序列的D_ID就是PLOGI的S_ID, LS_ACC序列的S_ID就是目的N端口的N_Port_ID,由PLOGI
50、的D_ID来分配。LS_ACC的载荷将包括目的端N端口的服务参数,64-bit的N_Port_Name和64-bit的Node_Name。这是对N_Port Login请求的正常响应,此Nx_Port可以与远端N_Port开始正常的通信。b) P_BSY序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。说明目的端Nx_Port正忙,此Nx_Port延迟一段时间后将重试PLOGI。c) P_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。包含在载荷中的原因代码决定了Nx_Port的操作处理。如果原因代码是说“类型不支持”,则此N
51、x_Port将尝试以另一不同的服务类型进行N_Port Login,对于其它的原因代码,Nx_Port将根据代码进行相应的响应。d) PLOGI序列,其D_ID是正在接收的Nx_Port的Port_Identifier,其S_ID是序列发起Nx_Port的N_Port_ID,其OX_ID由发起端Nx_Port分配。载荷中要包括PLOGI发起端Nx_Port的64-bit的N_Port_Name和64-bit的Node_Name,这说明本地N端口注册来自于目的端Nx_Port的N端口注册碰撞。如果接收到的N_Port_Name小于正在接收的Nx_Port的N_Port_Name,则Nx_Port
52、通过向发起端Nx_Port发送LS_RJT,序列中包含原因代码,指出登录注册正在进行中。如果接收到的N_Port_Name大于Nx_Port的N_Port_Name,则Nx_Port继续处理接收到的PLOGI。e) 无响应。说明发生了传输错误,也就是说发生了物理传输的错误。等错误恢复后,则此Nx_Port可以发起一个新的PLOGI。f) 如果接收到的N_Port_Name等于本地N_Port_Name,那么此Nx_Port是与自己的点到点连接,对此情况不考虑。3.2.3 小结本节在分析FC-AE-FCLP协议的基础上,详细划分了系统功能架构、设计了协议软件架构并设计了相关API函数,给出了在典
53、型应用情况下的API函数调用流程。本节简要分析了FC-FS协议的内容,FC-FS协议主要是对FC-1,FC-2,FC-3功能的定义,端口间进行通信前需通过注册以获取操作环境参数,此操作参数集即是按照FC-FS协议给出的。最后详细给出了端口注册的流程以及响应处理措施。3.3 基于光卡硬件的PPC软件设计3.3.1 硬件连接架构如图3-9所示为PPC嵌入式系统及其外设连接框图图3-9 PPC嵌入式系统及其外设连接图PPC嵌入式系统通过双口RAM分别与下层FC固件和上层用户端主机的PCI协议处理单元相连,其中FC固件主要实现FC-2层的功能,PCI协议处理单元主要用于用户层操作指令和PPC操作请求的
54、交互。PPC嵌入式系统可以同时与多个FC固件(N端口)相连接。其中,每个FC固件需要两个双口RAM,一个用于将FC固件信息的上传PPC,一个用于FC固件接收PPC下传的信息。另外还需要5根GPIO状态及中断线完成PPC与FC固件间信息状态的传递,PPC初始化完成后,通过对GPIO Reset线置位触发FC固件完成链路初始化,FC固件通过GPIO链路状态线向PPC传递底层链路状态,链路有效时PPC才可以进行相关操作,当底层链路状态变化或FC_PPC_RAM中有数据写入时,FC固件通过GPIO 中断线触发PPC中断处理,PPC通过对FC_PPC_RAM状态线和PPC_FC_RAM状态线的置位和清零
55、告知FC固件当前FC_PPC_RAM和PPC_FC_RAM的满状态和空状态。PPC嵌入式系统与用户端PCI协议处理单元通过两个双口RAM和一根GPIO中断线相连接。其中,一个用于将PPC信息上传给用户端主机,一个用于PPC接收用户端主机下传的信息。当PPC将上传信息写入PPC_PCI_RAM后,通过此GPIO信号线采用中断的方式通知用户端主机读取信息。PPC 嵌入式系统外挂一个Flash存储器和一个DDR2存储器。其中,Flash存储器用于存储FPGA系统的硬件加载文件(.mcs文件,由.bit文件转化)和PPC的软件程序(.srec文件,由.elf文件转化)。DDR2用作PPC的内存。3.3
56、.2 PPC软件设计如图3-10所示为基于队列的FC-4层软件整体控制架构图3-10 FC-4软件整体控制架构3.3.2.1PPC软件工作机制PPC软件基于队列机制实现控制与处理功能。软件系统设计了4个队列,分别是用于存储主机PCI到PPC信息的请求队列(pci_ppc_req_que)、用于存储PPC到主机PCI信息的结果队列(ppc_pci_res_que)、用于存储PPC到FC固件信息的结果队列(ppc_fc_res_que)以及用于存储FC固件到PPC信息的请求队列(fc_ppc_req_que)。PPC软件循环于图1所示粉色和绿色两个环路中。a) 粉色环路工作机制:此环路主要通过查询
57、与响应中断的方式完成PPC与主机PCI接口、PPC与FC固件的信息交互。环路根据中断状态和各个双口RAM的查询结果以决定后续处理。进入软件主循环后,PPC对FC_PPC_RAM的读取操作采用中断与查询的方式。FC固件将数据写入FC_PPC_RAM后会触发中断通知PPC读取,PPC首先将FC_PPC_RAM状态线置位以禁止FC固件写FC_PPC_RAM,然后PPC查询fc_ppc_req_que是否处于满状态,若不满则将FC_PPC_RAM中数据读出并按照规定格式写入对列fc_ppc_req_que,然后将FC_PPC_RAM清空并将FC_PPC_RAM状态线清零允许FC固件的写入;若队列fc_ppc_req_que已满,则软件不作处理继续后续的循环。PPC查询FC_PPC_RAM,若此双口RAM中有数据,则PPC将查询队列fc_ppc_req_que是否已处于满状态,若不满则将FC_PPC_RAM中数据读出并按照规定格式写入队列fc_ppc_req_que,然后清空FC_PPC_RAM并将FC_PPC_RAM状态线清零允许FC固件的写入;若队列fc_ppc_req_que已满,则软件不作处理继续后续的循环。PPC查询PCI_PPC_RAM,若此双口RAM中有数据,则PPC将查询队列pci_ppc_req_que是否已处于满状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位员工2025年工作总结(20篇)
- 房屋互换合同协议书范本
- 采购意向合同协议书范本
- 培训机构合同辅导协议书
- 烧鸭供货合同协议书范本
- 电影赞助合同协议书范本
- 资料员合同协议书范本
- 租房协议书合同范文样本
- 2025年上海市房屋租赁合同示范文本版
- 202520年建筑装修工程合同模板
- 西南交11春学期《模拟电子技术A》离线作业
- 施工单位平安工地考核评价表(标准)
- JJF 1855-2020纯度标准物质定值计量技术规范有机物纯度标准物质
- GB/T 35194-2017土方机械非公路机械传动宽体自卸车技术条件
- GB 6245-2006消防泵
- SMT通用作业指导书
- 工作票培训-课件
- 三氯乙醛 氯醛MSDS危险化学品安全技术说明书
- 合作社贷款申请书范文(优选十三篇)
- 三年级下册口算天天100题(A4打印版)
- 凿井稳车安装安全技术交底-
评论
0/150
提交评论