PMC光纤通讯卡PPC软件实施方案13wp.docx
- 文档编号:25265990
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:48
- 大小:1.07MB
PMC光纤通讯卡PPC软件实施方案13wp.docx
《PMC光纤通讯卡PPC软件实施方案13wp.docx》由会员分享,可在线阅读,更多相关《PMC光纤通讯卡PPC软件实施方案13wp.docx(48页珍藏版)》请在冰豆网上搜索。
PMC光纤通讯卡PPC软件实施方案13wp
PMC光纤通讯卡软件实施方案
1、目的与目标
制定本方案,目的是根据FC-AE-FCLP协议的需求,设计详细的软件功能函数和软件工作流程,以备软件技术人员编写与调试代码参照。
2、参考文件
a、FIBRECHANNELFRAMINGANDSIGNALING(FC-FS)
b、FIBRECHANNELAVIONICSENVIRONMENT(FC-AE)
c、FX400LightweightProtocol(FXLP)Version4.00APIGuide
d、InformationSystems-dpANSFibreChannelProtocolforSCSI
3、主要内容
3.1软件协议分层分析
本通讯卡所采用的光纤通道协议是FC-AE-FCLP(FiberChannelLightWeightProtocol)协议。
FC-AE-FCLP一般应用在任务关键型的航空系统中,特点是低传输延迟、高数据吞吐量及低CPU占用率,能够保证大块数据的可靠传输。
FC-AE-FCLP协议是在FC-2层的FC-FS标准和FC-4层的FCP标准(FiberChannelProtocolforSCSI)等光纤通道协议标准的基础之上,依赖于上述协议标准支持的各种服务定义,在满足通信服务质量的前提下,进行必要的裁减与扩充,从而使得在航空电子网络环境下,能更好地支持各种通信紧急命令能进行高效率的低延迟和低开销数据通信服务。
本通讯卡实现FC-AE-FCLP协议,其关键点就是在FC-4层实现的FCLP协议,在FC-2层实现FC-FS标准。
下面对这两个协议标准做简要概述。
3.1.1FCLP协议概述
FCLP协议是以FCP协议为基础,根据通信服务的要求进行相应裁减形成的标准。
FCP协议是光纤通道高层映射协议FC-4层的一部分,它工作于低一级的FC协议之上,主要是对高层SCSI的映射机制。
SCSI协议是通过基本的I/O读写操作来实现命令、响应、数据传输等协议功能的。
FCP协议中定义支持了四种主要的功能管理机制。
它们是设备管理、任务管理、进程登录/登出管理和连接管理,其中在设备和任务管理中规定了SCSI协议的命令、响应、数据到光纤网络上的传输单位帧、序列等的转换。
FCP协议是从FCIU和交换的角度来定义功能的,一对支持FC-4层协议映射功能的FCP端口可以生成IU和FCP交换。
对于SCSI协议中的一个I/O操作被映射为一个光纤通道的交换,一个专门携带了上层SCSII/O功能的交换称之为FCP交换。
典型的SCSII/O操作的请求和响应序列被映射为光纤通道信息单元(IU),FCP协议包含的几种信息单元主要是:
命令服务请求FCP_CMNDIU、数据传送准备FCP_XFER_RDYIU、数据传送动作FCP_DATAIU和命令服务响应FCP_RSPIU。
它们和对应SCSI功能的关系如下图3-1所示:
图3-1FCP和标准SCSI功能的对应
3.1.2FC-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的功能包含类型服务,帧格式定义,序列打包和解包,交换管理,地址分配,虚地址定义,多点传送管理和堆栈连接请求。
FC-3提供了同一节点上(node)不同Nx端口的公共服务机制。
其还包括连接服务协议等。
其中连接服务是FC-2层要求必需完成。
图3-2FC协议层次关系
在利用上层协议(ULP)进行数据传输之前,光纤通道必需建立好传输环境(握手协议)。
光纤通道的传输环境的建立是通过F端口登录和N端口登录完成的。
一旦两类登录都已完成,一个FC-4层就可以利用光纤通道进行数据传输,除非其中的一个或者两个登录变成无效。
F端口登录和N端口登录主要完成两个任务:
a)确定什么种类的端口连接到链路的另一端
b)确定该N端口可能希望通信的网络上的其它N端口的操作特性。
N端口注册应该发生在希望相互通信的每一对N端口上。
F端口登录和N端口登录是由一个端口通过发送一个含有操作特性或“服务参数”的测试集序列,以及接收一个返回的含有类似的或修改过的服务参数集的序列来进行的。
两个序列的组合构成一个协商,即在传送的序列中含有发送方想要用的服务参数,而返回的序列中则包括两个端口一致同意的服务参数,后续的通信就只用一致同意的参数。
其中,端口间交换的服务参数集即是按照FC-FS标准定义的。
3.1.3小结
本节将光纤通道功能层次与FC协议簇相结合,以分层分析的方法概要分析了本光纤通讯卡所采用的协议。
FC-AE-FCLP协议是在FC-2层的FC-FS标准和FC-4层的FCP标准等光纤通道协议标准的基础之上,依赖于上述协议标准支持的各种服务定义。
本光纤卡的关键是在FC-4层上实现FCLP协议到底层FC协议的映射,并根据需求在FC-3、FC-2层上实现FC-FS标准的功能。
3.2软件协议分层实现
3.2.1FCLP协议的实现
3.2.1.1FCLP协议功能架构描述
本光纤通讯卡在FC-4层上实现的是FCLP协议,FCLP协议属于端到端协议,FCLP协议系统为用户提供了简单的应用程序接口来实现数据的高速传输,用户可以通过建立虚拟通道的最终实现形式进行高速数据传输。
FCLP协议系统从功能上可以分为4大功能管理模块,分别是设备管理功能模块、任务管理功能模块、通信连接管理功能模块和错误处理功能模块。
各功能模块的结构层次如图3-3所示。
图3-3PMC光纤通讯卡软件功能模块划分
(1)设备管理功能模块
主要完成对通信过程中设备、网络、协议的各种状况进行控制管理,对设备进行的各种操作进行记录监控,是其它模块工作的基础,包含初始化工作,对创建删除APID和Channel的信息记录,以及其它一些设备、网络信息的记录。
设备管理模块是其它模块工作的前提,其余模块的运行都是在此模块上运行的。
(2)任务管理功能模块
任务管理主要负责通信数据包的处理和加工,包含对包的分析并分配,它是通信连接模块的基础。
任务管理主要负责各个通道的状态控制和数据传输。
所有的上层数据传输任务都将分配到这些任务开启的通道操作中。
各个通道的操作是并行的,每个光纤通道接口卡可以最多开设128路通道,由任务管理来管理这些通道间的协调工作和通道本身的执行流程。
(3)通信连接管理功能模块
通信连接管理模块是光纤卡软件的主体部分,它处理用户最关心的通信数据包,分为通信部分和连接部分。
其中连接部分包括建立通道命令、确认通道建立、发送数据命令、关闭通道命令、获取APID命令,这是发送与接收数据前的准备工作,在此工作过程中,调用设备管理模块对建立通道信息进行记录。
通信部分包括主、从模式下注册服务、注册服务响应、服务参数、服务参数响应、FCP_CNTL、FCPDataIU、FCPResponseIU等通信单元的封装、组织发送、接收、解封等通信处理功能,是整个协议通信的核心,只有在设备管理模块和任务管理模块良好的工作时,通信连接模块才能正常工作。
通信和连接管理负责协议底层操作封装为光纤卡固件可以执行的命令块操作以完成通信与连接过程。
同时监控这些通信过程,并向上层提供可靠通信服务。
FCLP协议通信系统以FCP提供的5个标准SCSI命令实现所有的通信。
(4)错误处理模块
错误处理模块穿插于前三个模块之中,其它所有模块产生的错误都要交给错误处理模块进行相关的处理,包括提示错误并进行恢复,从而保证其它模块正常工作。
错误处理在整个系统得各个环节都进行错误监控,针对发生的各种错误进行分类处理,并最终反馈调用者。
错误被分为参数错误、资源分配错误、超时错误、设备状态错误、网络连接错误五类向上层汇报。
3.2.1.2FCLP协议软件框架设计
PMC光纤通讯卡软件框架设计根据功能划分,主要包括如下四个方面的设计,如图3-4。
图3-4PMC光纤通讯卡软件框架设计
(1)设备管理设计
负责在打开和关闭驱动过程中,为应用分配和销毁系统资源,创建整个软件系统的基础lp_device_t结构体。
在lp_open_driver函数中打开光卡设备,取得设备指针;对结构体进行初始化工作,为lp_device_t结构体分配地址空间,初始化成员变量;创建任务管理所需的三个队列。
在lp_close_driver函数中关闭光卡设备;释放lp_device_t结构体的地址空间;销毁任务管理的三个队列。
设备管理是整个光卡软件的基础,完成对系统资源整体调度的功能。
(2)任务管理设计
通过对三个handle队列的管理实现对应用中所有任务的管理。
应用中的每个任务都由一个handle结构体唯一标识,handle结构体中包含本地的访问节点号、通道号以及任务类型码等。
在设备管理模块为空闲分配32个handle资源,并将处理队列和结果队列初始化为空队列。
进行一次通信任务时,用户递交命令(调用对应的接口函数)。
接口函数从空闲队列中申请一个空的handle结构体,将命令类型、访问号以及通道号等信息填充到handle结构体中,任务管理负责将创建好的handle结构体递交下层发送,并强其加入到处理队列中,表示此次任务在处理过程中;当光卡固件返回中断时,中断服务程序将中断信息转移到中断处理队列中,并调用FCLP处理例程,通过handle结构体区分任务是否完成,并将已完成的handle结构体加入到结果队列中(未完成的继续进行处理);任务管理从结果队列中取出处理结果并将处理结果递交给接口函数,同时将handle结构体清除,释放到空闲队列中已备继续使用。
接口函数处理任务管理返回的结果信息并提交给用户。
至此,一次通信任务完成。
任务管理是通信系统的神经中枢,协调、管理并监控整个通信过程。
(3)通信与连接管理设计
负责在用户使用初期创建用户指定的APID,在通信结束时删除用户指定的APID,发送获取APID请求、建立通道请求、发送数据请求以及关闭通道请求。
通信与连接管理构建了FCLP协议通信的框架。
(4)错误管理设计
负责对参数的合法性进行检查,对通信中的超时错误、连接错误进行相应的处理。
3.2.1.4.1通道连接的建立
根据FCLP协议通信原理,建立Channel需要发送两个命令来完成,第一个命令为FCLP_SETUP_CHAN_CMD,该命令是一个写命令,用于主端向从方发送自己的设备Channel信息;第二个命令为FCLP_SETUP_CHAN_ACK_CMD,该命令是一个读命令,用于主端获取从端的相关设备Channel信息。
每个命令的处理过程都是要主从双方通过底层光纤通道网卡和FCLP光纤网络实现的。
而对于命令的内部处理过程,可以划分更具体的步骤来完成。
对于第一个FCP写命令,主端FCLP协议处理层首先根据FCP写命令和FCLP协议需要的APID和Channel等信息组织构造CommandEntryIOCB结构,然后把组织好的IOCB通过底层接口,交付给光卡,光卡内部通过请求队列进行本次命令处理,剩下的过程,一直到命令成功返回或者命令失败都是由光卡内部完成的;光卡处理完本次命令结果后,通过中断的方式告知FCLP协议层当前命令的完成状态和结果,FCLP协议层根据通信逻辑进行后续操作。
而在命令处理的过程中,从端的FCLP需要做更多的工作,当从端光卡固件收到FCP_CMD后,会把FCP_CMD命令分析组装成AcceptTargetI/O(ATIO)Type2IOCB并放入响应队列,中断通知FCLP协议处理层来处理;FCLP协议层会解析ATIO内容,根据解析结果组成CTIOIOCB交给固件请求队列继续后续操作,固件处理CTIOIOCB后,光卡底层发送FCP_XFER_RDYIU;从端FCLP协议实体会处理下次中断,来查看刚才CTIOIOCB的完成状态,根据完成状态要底层固件发送不同的FCP_RSPIU给主端。
对于第二个命令的处理与此类似。
具体流程如下图3-5所示。
图3-5通道建立详细步骤
根据上述对通道建立内部过程的分析,进行了具体上层接口函数和内部功能调用函数的设计。
(1)主端的主要函数设计如下:
lp_setup_chan():
此函数为应用接口函数。
供主端应用与从端应用建立channel时使用,是一个阻塞调用函数,它将等待以下事件发生:
1.得到建立ChannelACK;2.发生超时。
每个APID最多有8个Channel,如果要再建立channel,必须新建APID。
若此函数成功完成,则返回创建成功的本地通道号(channum)。
lp_SendSetupChanCmd():
此函数为内部功能函数。
该函数用于发送建立通道过程中第一个命令,即建立通道命令(FCLP_SETUP_CHAN_CMD)的功能,命令码为Hex’E0’;
lp_RecvSetupChanRsp():
此函数为内部功能函数。
建立通道过程中的第一个命令即建立通道命令(FCLP_SETUP_CHAN_CMD)被从端处理完后,从端返回RSP信息,该命令用于处理命令完成的中断,并分析RSP信息。
lp_SendSetupChanAckCmd():
此函数为内部功能函数。
在建立通道过程中需要发送两个命令,该函数用于发送第二个命令,即确认建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令码为Hex’E1’;
lp_RecvSetupChanAckRsp():
此函数为内部功能函数。
建立通道过程中的第二个命令即确认建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)被从端处理完后,从端返回RSP信息,该命令用于处理命令完成的中断,并分析RSP信息。
(2)从端的主要函数设计如下:
lp_waitfor_chan():
此函数为上层应用接口函数。
它用于从端(target)建立与主端的虚拟通道(对应于initiator的lp_setup_chan())。
Receiver通过此函数来告知发送者自身的接收数据能力。
函数最终会返回一个ACK给发送端,以指示channel建立可以使用;或者超时退出。
若此函数成功完成,则返回创建成功的本地通道号(channum)。
lp_RecvSetupChanCmd():
此函数为内部功能函数。
在建立通道过程中需要发送两个命令,该函数用于从端接收并处理主端发送过来的第一个命令,即建立通道的命令,命令码为Hex’E0’,命令类型是FCLP_SETUP_CHAN_CMD;
lp_RecvSetupChanData():
此函数为内部功能函数。
用于在建立通道过程中接收主端发送给从端的各种APID和地址连接信息,并调用其它内部函数回送本地APID和通道连接信息。
lp_RecvSetupChanAckCmd():
此函数为内部功能函数。
在建立通道过程中需要发送两个命令,该函数用于接收并处理第二个命令,即确认建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令码为Hex’E1’;
在底层光纤通道网卡接口的基础上,依赖于中断服务例程,主从双方按FCLP协议的通信规则建立虚拟通道。
设计的各个功能函数的调用顺序是按channel建立的流程依次调用的,具体调用过程按图3-6所示。
图3-6通道建立过程的函数调用
3.2.1.4.2通道连接的拆除
通道连接关闭的实现过程是通过API函数lp_close_chan()来实现的,对于关闭通道的命令,它发送的FCP命令为FCLP_CLOSE_CHAN_CMD类型,该命令为FCP控制命令。
对于一个已经建立成功的通道连接,通道两端均可以发起关闭通道的命令,也可以两端同时发起关闭通道的命令,按时间最先被处理的命令来完成关闭通道的任务。
发起关闭通道命令的一方为主端,从端接收到该命令的光卡硬件向FCLP协议层进行中断通知,中断服务例程调用FCLP协议处理功能例程,FCLP协议处理功能进行分析处理,判断能否完成关闭Channel的操作,如果现在channel正处在数据收发的过程中,则返回设备忙的消息通知主端暂时不能关闭channel;如果channel处在空闲中状态,则从端调用内部函数lp_ClearChan()先清理本地channel资源,然后应答成功关闭的消息给主端,主端在收到成功的应答消息后也清理本地资源,然后返回给API函数lp_close_chan()报告channel关闭成功。
具体函数调用流程如图3-7所示。
图3-7通道拆除过程的函数调用
3.2.1.5数据收发管理设计
3.2.1.5.1数据收发的过程管理
依据FCLP协议数据传输模型,在FCLP网络中两终端节点进行数据的收发依赖于先前建立好的APID和Channel,数据传输所需要的地址信息是上述两者的信息组合。
数据通信的发送端为主端,接收端为从端。
在FCLP数据通信中,主从双方最基础的通信方式是同步式通信,即首先从端进入阻塞等待状态,从端可以在某一固定时间内等待主端发送数据;主端调用底层光卡的硬件接口发送数据,根据光纤通道网卡的队列I/O机制,主端构造一个与发送数据的命令对应的CommandEntryIOCB控制块,把该命令控制块提交给光卡固件的请求队列,由光卡固件发送命令和数据,这是写数据的FCP操作。
FCLP协议处理层构造CommandEntryIOCB控制块时,会把主从端要求APID和Channel的地址信息、上层用户交给FCLP协议层要发送给从端的数据缓冲和数据长度填入CommandEntryIOCB控制块中,封装了完整信息的CommandEntryIOCB控制块被交给光卡固件的请求队列。
在底层光卡固件和中断服务例程的支持下,主从两端对等的FCLP协议实体按照FCPI/O操作的写流程,进行数据包的传输管理。
根据FCLP协议数据传输的流程进行了具体的功能函数的设计,其中关键的主端和从端函数设计如下:
(1)主端的主要函数设计
lp_send():
为上层应用接口函数。
函数通过Channel调用FCLP_SEND_DATA_CMD命令发送数据并监控发送的数据量(不能超过接收者的接收限制)。
函数内部通过中断服务和光卡固件完成一个完整的FCP写操作。
数据发送成功该函数会返回成功信息。
lp_recvSendDataRsp():
此函数为内部功能函数。
主端向从端发送写操作FCP命令,从端按FCP写操作处理完毕后,从端返回RSP信息,主端FCLP协议层会调用此函数接收处理RSP信息。
(2)从端的主要函数设计
lp_receive():
此函数为上层应用接口函数。
本函数用于同步接收(blocking)。
仅供从端将接收到的数据通过FCLP协议层交给上层用户。
接收数据结束、buffer已满或者channel被发送者关闭的情况下函数将退出。
lp_RecvSendDataCmd():
此函数为内部功能函数。
用于接收命令FCLP_SEND_DATA_CMD,分析命令完成下一步操作。
lp_SendSendDataXfer():
此函数为内部功能函数。
在FCP写交换流程中,从端根据写命令(FCLP_SEND_DATA_CMD)需要向主端发送FCP_XFER_RDYIU,该函数即完成发送此IU信息。
lp_SendSendDataRsp():
此函数为内部功能函数。
用于向主端反馈本次本次写操作完成的状态信息,向主端发送FCP_RSPIU信息。
主从端关键功能函数的执行流程如图3-8所示。
图3-8数据收发函数调用流程
3.2.1.5.2数据收发的模型
根据本光纤卡的硬件结构设计,为了提高数据收发的效率,本系统采用的是非阻塞式数据收发模式,因为在数据发送端,主机先向PPC发出发送数据命令,然后向QDR中写入数据,则主机对QDR的数据写入和FC-2固件从QDR读数据并成数据帧可以并行操作,提高了主机发送数据时系统带宽利用率。
同样,在数据接收端,PPC首先通知主机接收数据,然后FC-2固件向QDR写入数据和主机从QDR读取数据可以并行执行,提高了主机接收数据时的通信带宽利用率。
数据收发是建立在主从两端已经在各自的APID上建立好虚拟通道的前提下进行的,由apnum和chnum标识该虚拟通道。
主端主机调用lp_send()函数,向PPC发出发数命令,然后启动DMA向QDR里写入数据,FC-2固件接收到发数命令后,检测到QDR中有数据到来,则开始成读取QDR中数据,并成数据帧向从端光卡发送数据,在发完第一帧数据后,通知从端光卡PPC已有数据写入QDR中,PPC将此信息上报给主机,则主机开始读取QDR中数据,FC-2固件继续成数据帧向从端光卡写入数据,实现主机读取QDR和FC-2固件写入QDR的并行化执行。
3.2.2FC-FS协议的实现
FC-FS协议包含了对FC-1,FC-2,FC-3功能的定义,光纤端口在利用上层协议(ULP)进行通信之前,端口间必须协商好FC协议传输所采用的参数,建立传输环境。
光纤通道的传输环境的建立是通过F端口登录和N端口登录完成的。
3.2.2.1端口注册描述
3.2.2.1.1F端口注册实现
1、F端口注册
(1)简介
对所有N端口来说,不管它支持哪种服务类型,F端口注册是要求完成的。
只有当F端口注册完成以后,N端口才会尝试与其它N端口进行通信。
F端口注册完成如下几项功能:
(a)判别是否存在交换机
(b)如果交换机存在,它(F端口注册)将向N端口提供与整个交换机相关的详尽的操作特性参数,F端口名字和交换机名字
(c)如果交换机存在,它(F端口注册)将向交换机提供详尽的操作特性参数,N端口名字和N端口节点名字
(d)如果交换机存在,交换机可以选择分配N_Port_ID或者对发起注册的N_Port_ID进行确认(对净荷内容确认)
(e)如果交换机存在,它(F端口注册)将要初始化buffer-to-bufferCredit。
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_Name,一个64-bit节点名字。
服务参数在15.6节介绍。
用于交换机注册的服务参数应用在表216和221中给出。
N端口要分配一个OX_ID并且要设置D_ID为F端口公共地址(hex’FFFFFE’).
如果N端口是为确定的,那么N端口需要将FLOGI中的S_ID设置为hex’000000’或者是hex’0000YY’.如果N端口将S_ID设置为hex’000000’那么N端口请求交换机完全分配24位N_Port_ID。
如果N端口将S_ID设置为hex’0000YY’,那么N端口请求交换机分配高16位的值,第23位到第8位,保留N_Port_ID低8位的值。
(3)显式F端口注册的响应
当N端口发出FLOGI后,可能接收到如下几种响应:
a)LS_ACC回复序列,其OX_ID等于FLOGI的OX_ID,公共服务参数N_Port/F_Port位被设置为1(证明是Fx_Port)——这是对F端口注册请求的正常响应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PMC 光纤 通讯 PPC 软件 实施方案 13 wp