PMC光纖通訊卡PPC軟件實(shí)施方案1.3wp_第1頁
PMC光纖通訊卡PPC軟件實(shí)施方案1.3wp_第2頁
PMC光纖通訊卡PPC軟件實(shí)施方案1.3wp_第3頁
PMC光纖通訊卡PPC軟件實(shí)施方案1.3wp_第4頁
PMC光纖通訊卡PPC軟件實(shí)施方案1.3wp_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、PMC光纖通訊卡軟件實(shí)施方案1、目的與目標(biāo)制定本方案,目的是根據(jù)FC-AE-FCLP協(xié)議的需求,設(shè)計(jì)詳細(xì)的軟件功能函數(shù)和軟件工作流程,以備軟件技術(shù)人員編寫與調(diào)試代碼參照。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、要內(nèi)容3.1 軟件協(xié)議分層分析本通訊卡所采用的光纖通道協(xié)議是FC-AE-FCLP(Fiber Channel Light Weight Protocol)協(xié)議。FC-AE-FCLP一般應(yīng)用在任務(wù)關(guān)鍵型的航空系統(tǒng)中,特點(diǎn)是低傳輸延遲、高數(shù)據(jù)吞吐量及低CPU占用率,能夠保證大塊數(shù)據(jù)的可靠傳輸。 FC-AE-FCLP協(xié)議是在FC-2層的FC-FS標(biāo)準(zhǔn)和FC-4層的FCP標(biāo)準(zhǔn)(Fiber Channel Protocol for SCSI)等光纖通道協(xié)議標(biāo)準(zhǔn)的基礎(chǔ)之上,依賴于上述協(xié)議標(biāo)準(zhǔn)支持的各種服務(wù)定義,在滿足通信服務(wù)質(zhì)量的前提下,進(jìn)行必要的裁減與擴(kuò)充,從而使得在航空電子網(wǎng)絡(luò)環(huán)境下,能更好地支持各種

3、通信緊急命令能進(jìn)行高效率的低延遲和低開銷數(shù)據(jù)通信服務(wù)。本通訊卡實(shí)現(xiàn)FC-AE-FCLP協(xié)議,其關(guān)鍵點(diǎn)就是在FC-4層實(shí)現(xiàn)的FCLP協(xié)議,在FC-2層實(shí)現(xiàn)FC-FS標(biāo)準(zhǔn)。下面對(duì)這兩個(gè)協(xié)議標(biāo)準(zhǔn)做簡要概述。3.1.1 FCLP協(xié)議概述FCLP協(xié)議是以FCP協(xié)議為基礎(chǔ),根據(jù)通信服務(wù)的要求進(jìn)行相應(yīng)裁減形成的標(biāo)準(zhǔn)。FCP協(xié)議是光纖通道高層映射協(xié)議FC-4層的一部分,它工作于低一級(jí)的FC協(xié)議之上,主要是對(duì)高層SCSI的映射機(jī)制。SCSI協(xié)議是通過基本的I/O讀寫操作來實(shí)現(xiàn)命令、響應(yīng)、數(shù)據(jù)傳輸?shù)葏f(xié)議功能的。FCP協(xié)議中定義支持了四種主要的功能管理機(jī)制。它們是設(shè)備管理、任務(wù)管理、進(jìn)程登錄/登出管理和連接管理,其

4、中在設(shè)備和任務(wù)管理中規(guī)定了SCSI協(xié)議的命令、響應(yīng)、數(shù)據(jù)到光纖網(wǎng)絡(luò)上的傳輸單位幀、序列等的轉(zhuǎn)換。FCP協(xié)議是從FC IU和交換的角度來定義功能的,一對(duì)支持FC-4層協(xié)議映射功能的FCP端口可以生成IU和FCP交換。對(duì)于SCSI協(xié)議中的一個(gè)I/O操作被映射為一個(gè)光纖通道的交換,一個(gè)專門攜帶了上層SCSI I/O功能的交換稱之為FCP交換。典型的SCSI I/O操作的請(qǐng)求和響應(yīng)序列被映射為光纖通道信息單元(IU),F(xiàn)CP協(xié)議包含的幾種信息單元主要是:命令服務(wù)請(qǐng)求FCP_CMND IU、數(shù)據(jù)傳送準(zhǔn)備FCP_XFER_RDY IU、數(shù)據(jù)傳送動(dòng)作FCP_DATA IU和命令服務(wù)響應(yīng)FCP_RSP IU。

5、它們和對(duì)應(yīng)SCSI功能的關(guān)系如下圖3-1所示:圖3-1 FCP和標(biāo)準(zhǔn)SCSI功能的對(duì)應(yīng)3.1.2 FC-FS標(biāo)準(zhǔn)概述FC-FS協(xié)議為上層協(xié)議(ULPs)提供了通用數(shù)據(jù)傳輸層。整個(gè)FC協(xié)議如圖3-2所示為層級(jí)結(jié)構(gòu)。FC-FS協(xié)議包含了FC-1,FC-2,F(xiàn)C-3的功能定義。從FC協(xié)議的層級(jí)關(guān)系圖可以看到,盡管FC-4層以上可以變換多種協(xié)議,但在FC-3層以下都是用相同協(xié)議實(shí)現(xiàn)的。在FC-FS協(xié)議里,F(xiàn)C-1層定義傳輸協(xié)議,包括串行編譯碼和差錯(cuò)控制等。在FC-2信號(hào)協(xié)議層定義了傳輸端到端數(shù)據(jù)塊的規(guī)則。FC-2的功能包含類型服務(wù),幀格式定義,序列打包和解包,交換管理,地址分配,虛地址定義,多點(diǎn)傳送管

6、理和堆棧連接請(qǐng)求。FC-3提供了同一節(jié)點(diǎn)上(node)不同Nx端口的公共服務(wù)機(jī)制。其還包括連接服務(wù)協(xié)議等。其中連接服務(wù)是FC-2層要求必需完成。圖3-2 FC協(xié)議層次關(guān)系在利用上層協(xié)議(ULP)進(jìn)行數(shù)據(jù)傳輸之前,光纖通道必需建立好傳輸環(huán)境(握手協(xié)議)。光纖通道的傳輸環(huán)境的建立是通過F端口登錄和N端口登錄完成的。一旦兩類登錄都已完成,一個(gè)FC-4層就可以利用光纖通道進(jìn)行數(shù)據(jù)傳輸,除非其中的一個(gè)或者兩個(gè)登錄變成無效。F端口登錄和N端口登錄主要完成兩個(gè)任務(wù):a) 確定什么種類的端口連接到鏈路的另一端b) 確定該N端口可能希望通信的網(wǎng)絡(luò)上的其它N端口的操作特性。N端口注冊應(yīng)該發(fā)生在希望相互通信的每一對(duì)

7、N端口上。F端口登錄和N端口登錄是由一個(gè)端口通過發(fā)送一個(gè)含有操作特性或“服務(wù)參數(shù)”的測試集序列,以及接收一個(gè)返回的含有類似的或修改過的服務(wù)參數(shù)集的序列來進(jìn)行的。兩個(gè)序列的組合構(gòu)成一個(gè)協(xié)商,即在傳送的序列中含有發(fā)送方想要用的服務(wù)參數(shù),而返回的序列中則包括兩個(gè)端口一致同意的服務(wù)參數(shù),后續(xù)的通信就只用一致同意的參數(shù)。其中,端口間交換的服務(wù)參數(shù)集即是按照FC-FS標(biāo)準(zhǔn)定義的。3.1.3 小結(jié)本節(jié)將光纖通道功能層次與FC協(xié)議簇相結(jié)合,以分層分析的方法概要分析了本光纖通訊卡所采用的協(xié)議。FC-AE-FCLP協(xié)議是在FC-2層的FC-FS標(biāo)準(zhǔn)和FC-4層的FCP標(biāo)準(zhǔn)等光纖通道協(xié)議標(biāo)準(zhǔn)的基礎(chǔ)之上,依賴于上述協(xié)

8、議標(biāo)準(zhǔn)支持的各種服務(wù)定義。本光纖卡的關(guān)鍵是在FC-4層上實(shí)現(xiàn)FCLP協(xié)議到底層FC協(xié)議的映射,并根據(jù)需求在FC-3、FC-2層上實(shí)現(xiàn)FC-FS標(biāo)準(zhǔn)的功能。3.2 軟件協(xié)議分層實(shí)現(xiàn)3.2.1 FCLP協(xié)議的實(shí)現(xiàn)3.2.1.1 FCLP協(xié)議功能架構(gòu)描述本光纖通訊卡在FC-4層上實(shí)現(xiàn)的是FCLP協(xié)議,F(xiàn)CLP協(xié)議屬于端到端協(xié)議,F(xiàn)CLP協(xié)議系統(tǒng)為用戶提供了簡單的應(yīng)用程序接口來實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,用戶可以通過建立虛擬通道的最終實(shí)現(xiàn)形式進(jìn)行高速數(shù)據(jù)傳輸。FCLP協(xié)議系統(tǒng)從功能上可以分為4大功能管理模塊,分別是設(shè)備管理功能模塊、任務(wù)管理功能模塊、通信連接管理功能模塊和錯(cuò)誤處理功能模塊。各功能模塊的結(jié)構(gòu)層次

9、如圖3-3所示。圖3-3 PMC光纖通訊卡軟件功能模塊劃分(1) 設(shè)備管理功能模塊主要完成對(duì)通信過程中設(shè)備、網(wǎng)絡(luò)、協(xié)議的各種狀況進(jìn)行控制管理,對(duì)設(shè)備進(jìn)行的各種操作進(jìn)行記錄監(jiān)控,是其它模塊工作的基礎(chǔ),包含初始化工作,對(duì)創(chuàng)建刪除APID和Channel的信息記錄,以及其它一些設(shè)備、網(wǎng)絡(luò)信息的記錄。設(shè)備管理模塊是其它模塊工作的前提,其余模塊的運(yùn)行都是在此模塊上運(yùn)行的。(2) 任務(wù)管理功能模塊任務(wù)管理主要負(fù)責(zé)通信數(shù)據(jù)包的處理和加工,包含對(duì)包的分析并分配,它是通信連接模塊的基礎(chǔ)。任務(wù)管理主要負(fù)責(zé)各個(gè)通道的狀態(tài)控制和數(shù)據(jù)傳輸。所有的上層數(shù)據(jù)傳輸任務(wù)都將分配到這些任務(wù)開啟的通道操作中。各個(gè)通道的操作是并行的

10、,每個(gè)光纖通道接口卡可以最多開設(shè)128路通道,由任務(wù)管理來管理這些通道間的協(xié)調(diào)工作和通道本身的執(zhí)行流程。(3) 通信連接管理功能模塊通信連接管理模塊是光纖卡軟件的主體部分,它處理用戶最關(guān)心的通信數(shù)據(jù)包,分為通信部分和連接部分。其中連接部分包括建立通道命令、確認(rèn)通道建立、發(fā)送數(shù)據(jù)命令、關(guān)閉通道命令、獲取APID命令,這是發(fā)送與接收數(shù)據(jù)前的準(zhǔn)備工作,在此工作過程中,調(diào)用設(shè)備管理模塊對(duì)建立通道信息進(jìn)行記錄。通信部分包括主、從模式下注冊服務(wù)、注冊服務(wù)響應(yīng)、服務(wù)參數(shù)、服務(wù)參數(shù)響應(yīng)、FCP_CNTL、FCP Data IU、FCP Response IU等通信單元的封裝、組織發(fā)送、接收、解封等通信處理功能

11、,是整個(gè)協(xié)議通信的核心,只有在設(shè)備管理模塊和任務(wù)管理模塊良好的工作時(shí),通信連接模塊才能正常工作。通信和連接管理負(fù)責(zé)協(xié)議底層操作封裝為光纖卡固件可以執(zhí)行的命令塊操作以完成通信與連接過程。同時(shí)監(jiān)控這些通信過程,并向上層提供可靠通信服務(wù)。FCLP協(xié)議通信系統(tǒng)以FCP提供的5個(gè)標(biāo)準(zhǔn)SCSI命令實(shí)現(xiàn)所有的通信。(4) 錯(cuò)誤處理模塊錯(cuò)誤處理模塊穿插于前三個(gè)模塊之中,其它所有模塊產(chǎn)生的錯(cuò)誤都要交給錯(cuò)誤處理模塊進(jìn)行相關(guān)的處理,包括提示錯(cuò)誤并進(jìn)行恢復(fù),從而保證其它模塊正常工作。錯(cuò)誤處理在整個(gè)系統(tǒng)得各個(gè)環(huán)節(jié)都進(jìn)行錯(cuò)誤監(jiān)控,針對(duì)發(fā)生的各種錯(cuò)誤進(jìn)行分類處理,并最終反饋調(diào)用者。錯(cuò)誤被分為參數(shù)錯(cuò)誤、資源分配錯(cuò)誤、超時(shí)錯(cuò)誤

12、、設(shè)備狀態(tài)錯(cuò)誤、網(wǎng)絡(luò)連接錯(cuò)誤五類向上層匯報(bào)。3.2.1.2 FCLP協(xié)議軟件框架設(shè)計(jì)PMC光纖通訊卡軟件框架設(shè)計(jì)根據(jù)功能劃分,主要包括如下四個(gè)方面的設(shè)計(jì),如圖3-4。圖3-4 PMC光纖通訊卡軟件框架設(shè)計(jì)(1) 設(shè)備管理設(shè)計(jì)負(fù)責(zé)在打開和關(guān)閉驅(qū)動(dòng)過程中,為應(yīng)用分配和銷毀系統(tǒng)資源,創(chuàng)建整個(gè)軟件系統(tǒng)的基礎(chǔ)lp_device_t結(jié)構(gòu)體。在lp_open_driver函數(shù)中打開光卡 設(shè)備,取得設(shè)備指針;對(duì)結(jié)構(gòu)體進(jìn)行初始化工作,為lp_device_t結(jié)構(gòu)體分配地址空間,初始化成員變量;創(chuàng)建任務(wù)管理所需的三個(gè)隊(duì)列。在lp_close_driver函數(shù)中關(guān)閉光卡設(shè)備;釋放lp_device_t結(jié)構(gòu)體的地址空

13、間;銷毀任務(wù)管理的三個(gè)隊(duì)列。設(shè)備管理是整個(gè)光卡軟件的基礎(chǔ),完成對(duì)系統(tǒng)資源整體調(diào)度的功能。(2) 任務(wù)管理設(shè)計(jì)通過對(duì)三個(gè)handle隊(duì)列的管理實(shí)現(xiàn)對(duì)應(yīng)用中所有任務(wù)的管理。應(yīng)用中的每個(gè)任務(wù)都由一個(gè)handle結(jié)構(gòu)體唯一標(biāo)識(shí),handle結(jié)構(gòu)體中包含本地的訪問節(jié)點(diǎn)號(hào)、通道號(hào)以及任務(wù)類型碼等。在設(shè)備管理模塊為空閑分配32個(gè)handle資源,并將處理隊(duì)列和結(jié)果隊(duì)列初始化為空隊(duì)列。進(jìn)行一次通信任務(wù)時(shí),用戶遞交命令(調(diào)用對(duì)應(yīng)的接口函數(shù))。接口函數(shù)從空閑隊(duì)列中申請(qǐng)一個(gè)空的handle結(jié)構(gòu)體,將命令類型、訪問號(hào)以及通道號(hào)等信息填充到handle結(jié)構(gòu)體中,任務(wù)管理負(fù)責(zé)將創(chuàng)建好的handle結(jié)構(gòu)體遞交下層發(fā)送,并強(qiáng)

14、其加入到處理隊(duì)列中,表示此次任務(wù)在處理過程中;當(dāng)光卡固件返回中斷時(shí),中斷服務(wù)程序?qū)⒅袛嘈畔⑥D(zhuǎn)移到中斷處理隊(duì)列中,并調(diào)用FCLP處理例程,通過handle結(jié)構(gòu)體區(qū)分任務(wù)是否完成,并將已完成的handle結(jié)構(gòu)體加入到結(jié)果隊(duì)列中(未完成的繼續(xù)進(jìn)行處理);任務(wù)管理從結(jié)果隊(duì)列中取出處理結(jié)果并將處理結(jié)果遞交給接口函數(shù),同時(shí)將handle結(jié)構(gòu)體清除,釋放到空閑隊(duì)列中已備繼續(xù)使用。接口函數(shù)處理任務(wù)管理返回的結(jié)果信息并提交給用戶。至此,一次通信任務(wù)完成。任務(wù)管理是通信系統(tǒng)的神經(jīng)中樞,協(xié)調(diào)、管理并監(jiān)控整個(gè)通信過程。(3) 通信與連接管理設(shè)計(jì)負(fù)責(zé)在用戶使用初期創(chuàng)建用戶指定的APID,在通信結(jié)束時(shí)刪除用戶指定的API

15、D,發(fā)送獲取APID請(qǐng)求、建立通道請(qǐng)求、發(fā)送數(shù)據(jù)請(qǐng)求以及關(guān)閉通道請(qǐng)求。通信與連接管理構(gòu)建了FCLP協(xié)議通信的框架。(4) 錯(cuò)誤管理設(shè)計(jì)負(fù)責(zé)對(duì)參數(shù)的合法性進(jìn)行檢查,對(duì)通信中的超時(shí)錯(cuò)誤、連接錯(cuò)誤進(jìn)行相應(yīng)的處理。3.2.1.4.1 通道連接的建立根據(jù)FCLP協(xié)議通信原理,建立Channel需要發(fā)送兩個(gè)命令來完成,第一個(gè)命令為FCLP_SETUP_CHAN_CMD,該命令是一個(gè)寫命令,用于主端向從方發(fā)送自己的設(shè)備Channel信息;第二個(gè)命令為FCLP_SETUP_CHAN_ACK_CMD,該命令是一個(gè)讀命令,用于主端獲取從端的相關(guān)設(shè)備Channel信息。每個(gè)命令的處理過程都是要主從雙方通過底層光纖通

16、道網(wǎng)卡和FCLP光纖網(wǎng)絡(luò)實(shí)現(xiàn)的。而對(duì)于命令的內(nèi)部處理過程,可以劃分更具體的步驟來完成。對(duì)于第一個(gè)FCP寫命令,主端FCLP協(xié)議處理層首先根據(jù)FCP寫命令和FCLP協(xié)議需要的APID和Channel等信息組織構(gòu)造Command Entry IOCB結(jié)構(gòu),然后把組織好的IOCB通過底層接口,交付給光卡,光卡內(nèi)部通過請(qǐng)求隊(duì)列進(jìn)行本次命令處理,剩下的過程,一直到命令成功返回或者命令失敗都是由光卡內(nèi)部完成的;光卡處理完本次命令結(jié)果后,通過中斷的方式告知FCLP協(xié)議層當(dāng)前命令的完成狀態(tài)和結(jié)果,F(xiàn)CLP協(xié)議層根據(jù)通信邏輯進(jìn)行后續(xù)操作。而在命令處理的過程中,從端的FCLP需要做更多的工作,當(dāng)從端光卡固件收到F

17、CP_CMD后,會(huì)把FCP_CMD命令分析組裝成Accept Target I/O(ATIO) Type2 IOCB并放入響應(yīng)隊(duì)列,中斷通知FCLP協(xié)議處理層來處理;FCLP協(xié)議層會(huì)解析ATIO內(nèi)容,根據(jù)解析結(jié)果組成CTIO IOCB交給固件請(qǐng)求隊(duì)列繼續(xù)后續(xù)操作,固件處理CTIO IOCB后,光卡底層發(fā)送FCP_XFER_RDY IU;從端FCLP協(xié)議實(shí)體會(huì)處理下次中斷,來查看剛才CTIO IOCB的完成狀態(tài),根據(jù)完成狀態(tài)要底層固件發(fā)送不同的FCP_RSP IU給主端。對(duì)于第二個(gè)命令的處理與此類似。具體流程如下圖3-5所示。圖3-5 通道建立詳細(xì)步驟根據(jù)上述對(duì)通道建立內(nèi)部過程的分析,進(jìn)行了具體

18、上層接口函數(shù)和內(nèi)部功能調(diào)用函數(shù)的設(shè)計(jì)。(1) 主端的主要函數(shù)設(shè)計(jì)如下:lp_setup_chan():此函數(shù)為應(yīng)用接口函數(shù)。供主端應(yīng)用與從端應(yīng)用建立channel時(shí)使用,是一個(gè)阻塞調(diào)用函數(shù),它將等待以下事件發(fā)生:1.得到建立Channel ACK;2.發(fā)生超時(shí)。每個(gè)APID最多有8個(gè)Channel,如果要再建立channel,必須新建APID。若此函數(shù)成功完成,則返回創(chuàng)建成功的本地通道號(hào)(channum)。lp_SendSetupChanCmd():此函數(shù)為內(nèi)部功能函數(shù)。該函數(shù)用于發(fā)送建立通道過程中第一個(gè)命令,即建立通道命令(FCLP_SETUP_CHAN_CMD)的功能,命令碼為HexE0;

19、lp_RecvSetupChanRsp():此函數(shù)為內(nèi)部功能函數(shù)。建立通道過程中的第一個(gè)命令即建立通道命令(FCLP_SETUP_CHAN_CMD)被從端處理完后,從端返回RSP信息,該命令用于處理命令完成的中斷,并分析RSP信息。lp_SendSetupChanAckCmd():此函數(shù)為內(nèi)部功能函數(shù)。在建立通道過程中需要發(fā)送兩個(gè)命令,該函數(shù)用于發(fā)送第二個(gè)命令,即確認(rèn)建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令碼為HexE1;lp_RecvSetupChanAckRsp():此函數(shù)為內(nèi)部功能函數(shù)。建立通道過程中的第二個(gè)命令即確認(rèn)建立通道命令(FCLP_SETUP_

20、CHAN_ACK_CMD)被從端處理完后,從端返回RSP信息,該命令用于處理命令完成的中斷,并分析RSP信息。(2) 從端的主要函數(shù)設(shè)計(jì)如下:lp_waitfor_chan():此函數(shù)為上層應(yīng)用接口函數(shù)。它用于從端(target)建立與主端的虛擬通道(對(duì)應(yīng)于initiator的lp_setup_chan()。Receiver通過此函數(shù)來告知發(fā)送者自身的接收數(shù)據(jù)能力。函數(shù)最終會(huì)返回一個(gè)ACK給發(fā)送端,以指示channel建立可以使用;或者超時(shí)退出。若此函數(shù)成功完成,則返回創(chuàng)建成功的本地通道號(hào)(channum)。lp_RecvSetupChanCmd():此函數(shù)為內(nèi)部功能函數(shù)。在建立通道過程中需要

21、發(fā)送兩個(gè)命令,該函數(shù)用于從端接收并處理主端發(fā)送過來的第一個(gè)命令,即建立通道的命令,命令碼為HexE0,命令類型是FCLP_SETUP_CHAN_CMD;lp_RecvSetupChanData():此函數(shù)為內(nèi)部功能函數(shù)。用于在建立通道過程中接收主端發(fā)送給從端的各種APID和地址連接信息,并調(diào)用其它內(nèi)部函數(shù)回送本地APID和通道連接信息。lp_RecvSetupChanAckCmd():此函數(shù)為內(nèi)部功能函數(shù)。在建立通道過程中需要發(fā)送兩個(gè)命令,該函數(shù)用于接收并處理第二個(gè)命令,即確認(rèn)建立通道命令(FCLP_SETUP_CHAN_ACK_CMD)的功能,命令碼為HexE1;在底層光纖通道網(wǎng)卡接口的基礎(chǔ)

22、上,依賴于中斷服務(wù)例程,主從雙方按FCLP協(xié)議的通信規(guī)則建立虛擬通道。設(shè)計(jì)的各個(gè)功能函數(shù)的調(diào)用順序是按channel建立的流程依次調(diào)用的,具體調(diào)用過程按圖3-6所示。圖3-6 通道建立過程的函數(shù)調(diào)用3.2.1.4.2 通道連接的拆除通道連接關(guān)閉的實(shí)現(xiàn)過程是通過API函數(shù)lp_close_chan()來實(shí)現(xiàn)的,對(duì)于關(guān)閉通道的命令,它發(fā)送的FCP命令為FCLP_CLOSE_CHAN_CMD類型,該命令為FCP控制命令。對(duì)于一個(gè)已經(jīng)建立成功的通道連接,通道兩端均可以發(fā)起關(guān)閉通道的命令,也可以兩端同時(shí)發(fā)起關(guān)閉通道的命令,按時(shí)間最先被處理的命令來完成關(guān)閉通道的任務(wù)。發(fā)起關(guān)閉通道命令的一方為主端,從端接收

23、到該命令的光卡硬件向FCLP協(xié)議層進(jìn)行中斷通知,中斷服務(wù)例程調(diào)用FCLP協(xié)議處理功能例程,F(xiàn)CLP協(xié)議處理功能進(jìn)行分析處理,判斷能否完成關(guān)閉Channel的操作,如果現(xiàn)在channel正處在數(shù)據(jù)收發(fā)的過程中,則返回設(shè)備忙的消息通知主端暫時(shí)不能關(guān)閉channel;如果channel處在空閑中狀態(tài),則從端調(diào)用內(nèi)部函數(shù)lp_ClearChan()先清理本地channel資源,然后應(yīng)答成功關(guān)閉的消息給主端,主端在收到成功的應(yīng)答消息后也清理本地資源,然后返回給API函數(shù)lp_close_chan()報(bào)告channel關(guān)閉成功。具體函數(shù)調(diào)用流程如圖3-7所示。圖3-7 通道拆除過程的函數(shù)調(diào)用3.2.1.5

24、 數(shù)據(jù)收發(fā)管理設(shè)計(jì)3.2.1.5.1 數(shù)據(jù)收發(fā)的過程管理依據(jù)FCLP協(xié)議數(shù)據(jù)傳輸模型,在FCLP網(wǎng)絡(luò)中兩終端節(jié)點(diǎn)進(jìn)行數(shù)據(jù)的收發(fā)依賴于先前建立好的APID和Channel,數(shù)據(jù)傳輸所需要的地址信息是上述兩者的信息組合。數(shù)據(jù)通信的發(fā)送端為主端,接收端為從端。在FCLP數(shù)據(jù)通信中,主從雙方最基礎(chǔ)的通信方式是同步式通信,即首先從端進(jìn)入阻塞等待狀態(tài),從端可以在某一固定時(shí)間內(nèi)等待主端發(fā)送數(shù)據(jù);主端調(diào)用底層光卡的硬件接口發(fā)送數(shù)據(jù),根據(jù)光纖通道網(wǎng)卡的隊(duì)列I/O機(jī)制,主端構(gòu)造一個(gè)與發(fā)送數(shù)據(jù)的命令對(duì)應(yīng)的Command Entry IOCB控制塊,把該命令控制塊提交給光卡固件的請(qǐng)求隊(duì)列,由光卡固件發(fā)送命令和數(shù)據(jù),這

25、是寫數(shù)據(jù)的FCP操作。FCLP協(xié)議處理層構(gòu)造Command Entry IOCB控制塊時(shí),會(huì)把主從端要求APID和Channel的地址信息、上層用戶交給FCLP協(xié)議層要發(fā)送給從端的數(shù)據(jù)緩沖和數(shù)據(jù)長度填入Command Entry IOCB控制塊中,封裝了完整信息的Command Entry IOCB控制塊被交給光卡固件的請(qǐng)求隊(duì)列。在底層光卡固件和中斷服務(wù)例程的支持下,主從兩端對(duì)等的FCLP協(xié)議實(shí)體按照FCP I/O操作的寫流程,進(jìn)行數(shù)據(jù)包的傳輸管理。根據(jù)FCLP協(xié)議數(shù)據(jù)傳輸?shù)牧鞒踢M(jìn)行了具體的功能函數(shù)的設(shè)計(jì),其中關(guān)鍵的主端和從端函數(shù)設(shè)計(jì)如下:(1) 主端的主要函數(shù)設(shè)計(jì)lp_send():為上層應(yīng)

26、用接口函數(shù)。函數(shù)通過Channel調(diào)用FCLP_SEND_DATA_CMD命令發(fā)送數(shù)據(jù)并監(jiān)控發(fā)送的數(shù)據(jù)量(不能超過接收者的接收限制)。函數(shù)內(nèi)部通過中斷服務(wù)和光卡固件完成一個(gè)完整的FCP寫操作。數(shù)據(jù)發(fā)送成功該函數(shù)會(huì)返回成功信息。lp_recvSendDataRsp():此函數(shù)為內(nèi)部功能函數(shù)。主端向從端發(fā)送寫操作FCP命令,從端按FCP寫操作處理完畢后,從端返回RSP信息,主端FCLP協(xié)議層會(huì)調(diào)用此函數(shù)接收處理RSP信息。(2) 從端的主要函數(shù)設(shè)計(jì)lp_receive():此函數(shù)為上層應(yīng)用接口函數(shù)。本函數(shù)用于同步接收(blocking)。僅供從端將接收到的數(shù)據(jù)通過FCLP協(xié)議層交給上層用戶。接收數(shù)

27、據(jù)結(jié)束、buffer已滿或者channel被發(fā)送者關(guān)閉的情況下函數(shù)將退出。lp_RecvSendDataCmd():此函數(shù)為內(nèi)部功能函數(shù)。用于接收命令FCLP_SEND_DATA_CMD,分析命令完成下一步操作。lp_SendSendDataXfer():此函數(shù)為內(nèi)部功能函數(shù)。在FCP寫交換流程中,從端根據(jù)寫命令(FCLP_SEND_DATA_CMD)需要向主端發(fā)送FCP_XFER_RDY IU,該函數(shù)即完成發(fā)送此IU信息。lp_SendSendDataRsp():此函數(shù)為內(nèi)部功能函數(shù)。用于向主端反饋本次本次寫操作完成的狀態(tài)信息,向主端發(fā)送FCP_RSP IU信息。主從端關(guān)鍵功能函數(shù)的執(zhí)行流程

28、如圖3-8所示。圖3-8 數(shù)據(jù)收發(fā)函數(shù)調(diào)用流程3.2.1.5.2 數(shù)據(jù)收發(fā)的模型根據(jù)本光纖卡的硬件結(jié)構(gòu)設(shè)計(jì),為了提高數(shù)據(jù)收發(fā)的效率,本系統(tǒng)采用的是非阻塞式數(shù)據(jù)收發(fā)模式,因?yàn)樵跀?shù)據(jù)發(fā)送端,主機(jī)先向PPC發(fā)出發(fā)送數(shù)據(jù)命令,然后向QDR中寫入數(shù)據(jù),則主機(jī)對(duì)QDR的數(shù)據(jù)寫入和FC-2固件從QDR讀數(shù)據(jù)并成數(shù)據(jù)幀可以并行操作,提高了主機(jī)發(fā)送數(shù)據(jù)時(shí)系統(tǒng)帶寬利用率。同樣,在數(shù)據(jù)接收端,PPC首先通知主機(jī)接收數(shù)據(jù),然后FC-2固件向QDR寫入數(shù)據(jù)和主機(jī)從QDR讀取數(shù)據(jù)可以并行執(zhí)行,提高了主機(jī)接收數(shù)據(jù)時(shí)的通信帶寬利用率。數(shù)據(jù)收發(fā)是建立在主從兩端已經(jīng)在各自的APID上建立好虛擬通道的前提下進(jìn)行的,由apnum和c

29、hnum標(biāo)識(shí)該虛擬通道。主端主機(jī)調(diào)用lp_send()函數(shù),向PPC發(fā)出發(fā)數(shù)命令,然后啟動(dòng)DMA向QDR里寫入數(shù)據(jù),F(xiàn)C-2固件接收到發(fā)數(shù)命令后,檢測到QDR中有數(shù)據(jù)到來,則開始成讀取QDR中數(shù)據(jù),并成數(shù)據(jù)幀向從端光卡發(fā)送數(shù)據(jù),在發(fā)完第一幀數(shù)據(jù)后,通知從端光卡PPC已有數(shù)據(jù)寫入QDR中,PPC將此信息上報(bào)給主機(jī),則主機(jī)開始讀取QDR中數(shù)據(jù),F(xiàn)C-2固件繼續(xù)成數(shù)據(jù)幀向從端光卡寫入數(shù)據(jù),實(shí)現(xiàn)主機(jī)讀取QDR和FC-2固件寫入QDR的并行化執(zhí)行。3.2.2 FC-FS協(xié)議的實(shí)現(xiàn)FC-FS協(xié)議包含了對(duì)FC-1,FC-2,F(xiàn)C-3功能的定義,光纖端口在利用上層協(xié)議(ULP)進(jìn)行通信之前,端口間必須協(xié)商好F

30、C協(xié)議傳輸所采用的參數(shù),建立傳輸環(huán)境。光纖通道的傳輸環(huán)境的建立是通過F端口登錄和N端口登錄完成的。3.2.2.1 端口注冊描述3.2.2.1.1 F端口注冊實(shí)現(xiàn)1、F端口注冊(1)簡介對(duì)所有N端口來說,不管它支持哪種服務(wù)類型,F(xiàn)端口注冊是要求完成的。只有當(dāng)F端口注冊完成以后,N端口才會(huì)嘗試與其它N端口進(jìn)行通信。F端口注冊完成如下幾項(xiàng)功能:(a) 判別是否存在交換機(jī)(b) 如果交換機(jī)存在,它(F端口注冊)將向N端口提供與整個(gè)交換機(jī)相關(guān)的詳盡的操作特性參數(shù),F(xiàn)端口名字和交換機(jī)名字(c) 如果交換機(jī)存在,它(F端口注冊)將向交換機(jī)提供詳盡的操作特性參數(shù),N端口名字和N端口節(jié)點(diǎn)名字(d) 如果交換機(jī)存

31、在,交換機(jī)可以選擇分配N_Port_ID或者對(duì)發(fā)起注冊的N_Port_ID進(jìn)行確認(rèn)(對(duì)凈荷內(nèi)容確認(rèn))(e) 如果交換機(jī)存在,它(F端口注冊)將要初始化buffer-to-buffer Credit。2、顯式F端口注冊(1)簡介顯式F端口注冊需要N端口發(fā)出一個(gè)F端口注冊的鏈路服務(wù)ELS。顯式F端口注冊將會(huì)替換以前的服務(wù)參數(shù)。注冊過程將遵循交換和序列管理規(guī)則。一個(gè)序列中的幀將根據(jù)R_RDY原語信號(hào),ACK,還有Link_Response規(guī)則進(jìn)行操作。(2)顯式F端口注冊請(qǐng)求N端口會(huì)在一個(gè)新交換中發(fā)出FLOGI。FLOGI的載荷包括N端口服務(wù)參數(shù),一個(gè)64-bit的Nx_port名字N_Port_N

32、ame,一個(gè)64-bit節(jié)點(diǎn)名字。服務(wù)參數(shù)在15.6節(jié)介紹。用于交換機(jī)注冊的服務(wù)參數(shù)應(yīng)用在表216和221中給出。N端口要分配一個(gè)OX_ID并且要設(shè)置D_ID為F端口公共地址(hexFF FF FE).如果N端口是為確定的,那么N端口需要將FLOGI中的S_ID設(shè)置為hex000000或者是hex0000YY.如果N端口將S_ID設(shè)置為hex000000那么N端口請(qǐng)求交換機(jī)完全分配24位N_Port_ID。如果N端口將S_ID設(shè)置為hex0000YY,那么N端口請(qǐng)求交換機(jī)分配高16位的值,第23位到第8位,保留N_Port_ID低8位的值。(3)顯式F端口注冊的響應(yīng)當(dāng)N端口發(fā)出FLOGI后,可

33、能接收到如下幾種響應(yīng):a) LS_ACC回復(fù)序列,其OX_ID等于FLOGI的OX_ID,公共服務(wù)參數(shù)N_Port/F_Port位被設(shè)置為1(證明是Fx_Port)這是對(duì)F端口注冊請(qǐng)求的正常響應(yīng)。LS_ACC序列的D_ID就是由交換機(jī)分配的N_Port_ID。如果FLOGI中的S_ID是hex000000,則分配的D_ID將會(huì)是hexXXXXXX,如果FLOGI中的S_ID是hex0000YY, 則分配的D_ID將會(huì)是hexXXXXYY. 如果FLOGI中的S_ID是hexXXXXXX,則分配的D_ID將是同樣的值hexXXXXXX.載荷將包括完整的交換機(jī)服務(wù)參數(shù),64-bit的F_Port_

34、Name和64-bit的Fabric_Name。b) LS_ACC回復(fù)序列,其OX_ID等于FLOGI的OX_ID,公共服務(wù)參數(shù)N_Port/F_Port位被設(shè)置為0(證明是Nx_Port)指明是與另外一個(gè)N端口的點(diǎn)對(duì)點(diǎn)的連接。LS_ACC序列的D_ID就是FLOGI的S_ID。LS_ACC的載荷將對(duì)FLOGI的各類型服務(wù)參數(shù)標(biāo)記無效,載荷中包含被連接N端口64-bit的N_Port_Name和一個(gè)64-bit的Node_Name. 如果收到的N_Port_Name小于本地N端口的N_Port_Name,則本地Nx_Port發(fā)起N_Port Login。如果收到的N_Port_Name大于本地

35、N端口的N_Port_Name,則本地Nx_Port等待與之連接的N_Port 發(fā)出PLOGI。c) F_BSY,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此回復(fù)用以指示Fabric忙,則本地Nx_Port可以延遲某時(shí)間后重新發(fā)出FLOGI。d) P_BSY序列,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。用以指示是本地Nx_Port與另一個(gè)Nx_Port的點(diǎn)對(duì)點(diǎn)的連接,且另一Nx_Port現(xiàn)在正忙。則本地Nx_Port將會(huì)延遲一段時(shí)間等待目的端Nx_Port不忙后繼續(xù)發(fā)起N_Port Login。e) F_RJT序列,其OX_ID

36、等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此序列指示Fabric已經(jīng)拒絕了FLOGI請(qǐng)求。載荷中包含了拒絕的原因碼,此原因碼決定了Nx_Port的后續(xù)的操作。如果原因碼是“類型不被支持”,則Nx_Port可按照另一不同的服務(wù)類型發(fā)起一個(gè)FLOGI。如果原因碼是“無效的S_ID”, 則Nx_Port可用另一不同的S_ID發(fā)起一個(gè)FLOGI。(A) 如果被拒絕的FLOGI的S_ID是hex000000或者h(yuǎn)ex0000YY,則Nx_Port可以選擇一個(gè)24-bit的值,hexXXXXXX作為它的N_Port_ID并將其作為S_ID發(fā)起一個(gè)FLOGI。(B) 如果被拒絕的FLOG

37、I的S_ID是hexXXXXXX,則Nx_Port可以選擇一個(gè)值,hexXXXXXX或者h(yuǎn)ex0000YY或者一個(gè)新的值hexXXXXXX作為它的N_Port_ID,并將其作為S_ID發(fā)起一個(gè)FLOGI。如果拒絕序列中的原因代碼是其它的原因代碼,則Nx_Port將根據(jù)情況作出相應(yīng)的響應(yīng)f) P_RJT 序列,其OX_ID等于FLOGI的OX_ID。其D_ID是FLOGI的S_ID。此序列指示此Nx_Port是與另一個(gè)Nx_Port的點(diǎn)到點(diǎn)的連接。包含于載荷中的原因代碼決定了此Nx_Port的后續(xù)操作。如果原因代碼是類型不支持,則此Nx_Port可按照與FLOGI不同的另一種服務(wù)類型發(fā)起一個(gè)N_

38、Port_Login。對(duì)于其它原因碼,Nx_Port應(yīng)該根據(jù)情況作出相應(yīng)的響應(yīng)。g) FLOGI 序列。此序列指示本地N端口是與另一個(gè)Nx_Port的點(diǎn)對(duì)點(diǎn)的連接。序列載荷包括被連接節(jié)點(diǎn)的64-bit的N_Port_Name和64-bit的Node_Name。如果接收到的N_Port_Name小于本地N_Port_Name,則Nx_Port接著要執(zhí)行N_Port Login。如果接收到的N_Port_Name大于本地N_Port_Name,則Nx_Port等待來自互連接點(diǎn)的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可以基于原因碼選擇服務(wù)參數(shù)并發(fā)起一個(gè)新的FLOGI。i) 無反應(yīng)。這指示出是發(fā)生了傳輸錯(cuò)誤,也就是物理層上的傳輸錯(cuò)誤。則Nx_Port將執(zhí)行一個(gè)錯(cuò)誤恢復(fù),恢復(fù)完后,此Nx_Port可再發(fā)起一個(gè)新的FLOGI。j) 如果接收到的N_Port_Name等于本地N_Port

40、_Name,那么此Nx_Port是與自己連接了,此FLOGI在此不作考慮。3.2.2.1.2 N端口注冊實(shí)現(xiàn)1、N端口注冊(1)簡介緊隨著Fabric Login之后是N_Port Login。N_Port Login主要完成如下功能:a) 提供每一個(gè)Nx_Port與其它Nx_Port的操作特性參數(shù),N_Port_Name和Node_Name。b) 如果Fabric不存在,N端口注冊程序?qū)?huì)為兩個(gè)Nx_Port分配N_Port_ID。c) 也許還有初始化end-to-end Credit。d) 如果在點(diǎn)到點(diǎn)拓?fù)渲械腘x_Port間或者同一個(gè)環(huán)拓?fù)渲械腘L_Port間,需要初始化buffer-t

41、o-buffer Credit。當(dāng)兩個(gè)N端口都相互接收到了對(duì)方的服務(wù)參數(shù)后,N_Port Login就完成了。N_Port Login有顯式和隱式兩種注冊方式。N端口需要與其期望通信的每一個(gè)N端口進(jìn)行N_Port Login,包括與保留的和公共的地址識(shí)別符的N_Port Login,因?yàn)檫@些地址也被認(rèn)為是Nx_Port。2、顯式N端口注冊顯式N_Port Login過程需要一個(gè)Nx_Port傳輸一個(gè)PLOGI鏈路請(qǐng)求序列。顯式N_Port Login將替代以前的服務(wù)參數(shù)。(1)Fabric存在時(shí)的N端口注冊目的端Nx_Port 顯式注冊程序要求傳輸一個(gè)N_Port Login(PLOGI)鏈路

42、服務(wù)序列。PLOGI在一個(gè)交換中被發(fā)出,要為此交換分配OX_ID、目的端Nx_Port的D_ID和發(fā)起端Nx_Port的S_ID。序列載荷包含PLOGI注冊序列發(fā)起端Nx_Port的服務(wù)參數(shù)、N_Port_Name和Node_Name。目的端Nx_Port對(duì)PLOGI 鏈路服務(wù)序列的正常響應(yīng)序列是在同一個(gè)交換中回應(yīng)一個(gè)LS_ACC鏈路響應(yīng)序列。此序列的OX_ID是注冊序列的OX_ID,RX_ID是由響應(yīng)端分配的,D_ID是發(fā)起端的N_Port_ID,S_ID是響應(yīng)端的N_Port_ID。LS_ACC的載荷包含響應(yīng)端Nx_Port的服務(wù)參數(shù)。(2)Fabric存在情況下的N端口注冊響應(yīng)在Fabr

43、ic存在的情況下,Nx_Port發(fā)出PLOGI后可能接收到的響應(yīng)如下:a) LS_ACC回復(fù)序列,其OX_ID等于PLOGI的OX_ID,公共服務(wù)參數(shù)N_Port/F_Port位被設(shè)置為0(證明是Nx_Port)這是對(duì)N端口注冊請(qǐng)求的正常響應(yīng)。LS_ACC序列的D_ID就是PLOGI的S_ID, LS_ACC序列的S_ID就是PLOGI的D_ID。LS_ACC的載荷將包括目的端N端口的服務(wù)參數(shù),64-bit的N_Port_Name和64-bit的Node_Name。此Nx_Port可以與遠(yuǎn)端N_Port開始正常的通信。b) F_BSY,其OX_ID等于PLOGI的OX_ID,D_ID就是PLO

44、GI的S_ID。說明Fabric正忙,此Nx_Port將會(huì)在延遲后重試PLOGI。c) F_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。說明Fabric已經(jīng)拒絕了PLOGI請(qǐng)求。包含在載荷中的原因代碼決定了Nx_Port的操作處理。如果原因代碼說是無效的D_ID,則N_Port不能與被尋址的Nx_Port完成N_Port Login,則Nx_Port將嘗試登錄注冊其它目的Nx_Port。對(duì)于其它的原因代碼,Nx_Port將根據(jù)代碼進(jìn)行相應(yīng)的響應(yīng)。d) P_BSY序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。說明目的端N

45、x_Port正忙,此Nx_Port延遲一段時(shí)間后將重試PLOGI。e) P_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。包含在載荷中的原因代碼決定了Nx_Port的操作處理。如果原因代碼是說“類型不支持”,則此Nx_Port將以另一不同的服務(wù)類型進(jìn)行PLOGI,對(duì)于其它的原因代碼,Nx_Port將根據(jù)代碼進(jìn)行相應(yīng)的響應(yīng)。f) PLOGI序列,其D_ID是正在接收的Nx_Port的N_Port_ID,其S_ID是正在發(fā)送的Nx_Port的N_Port_ID,其OX_ID由發(fā)起端Nx_Port分配。載荷中要包括PLOGI發(fā)起端Nx_Port的64-bit的

46、N_Port_Name和64-bit的Node_Name,這說明存在一個(gè)來自于目的端Nx_Port的N端口注冊碰撞。如果接收到的N_Port_Name小于正在接收的Nx_Port的N_Port_Name,則Nx_Port通過向發(fā)起端Nx_Port發(fā)送LS_RJT,序列中包含原因代碼,指出登錄注冊正在進(jìn)行中。如果接收到的N_Port_Name大于Nx_Port的N_Port_Name,則Nx_Port繼續(xù)處理接收到的PLOGI。g) LS_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是目的端N端口的N_Port_ID。包含在載荷中的原因代碼決定了Nx_Port的操作處理。則此N

47、x_Port將根據(jù)原因代碼選擇服務(wù)參數(shù)然后發(fā)起一個(gè)新的PLOGI。h) 無響應(yīng)。說明發(fā)生了傳輸錯(cuò)誤,也就是說發(fā)生了物理傳輸?shù)腻e(cuò)誤。等錯(cuò)誤恢復(fù)后,則此Nx_Port可以發(fā)起一個(gè)新的PLOGI。(3)Fabric不存在時(shí)的N端口注冊在Nx_Port嘗試Fabric Login時(shí),如果Nx_Port發(fā)現(xiàn)Fabric不存在,則按照如下步驟進(jìn)行N_Port Login。目的端N_Port顯式登錄注冊需要在一個(gè)新交換中傳輸一個(gè)PLOGI鏈路服務(wù)序列。目的端Nx_Port 顯式注冊程序要求傳輸一個(gè)N_Port Login(PLOGI)鏈路服務(wù)序列。PLOGI在一個(gè)交換中被發(fā)出,要為此交換分配OX_ID、目的

48、端Nx_Port的D_ID和發(fā)起端Nx_Port的S_ID。序列載荷包含PLOGI注冊序列發(fā)起端Nx_Port的服務(wù)參數(shù)、N_Port_Name和Node_Name。在點(diǎn)對(duì)點(diǎn)連接中,只需要其中一個(gè)Nx_Port發(fā)出一個(gè)PLOGI。如果N_Port_Name在Fabric注冊時(shí)已經(jīng)互換完畢,則具有最高N_Port_Name的Nx_Port將發(fā)出PLOGI序列。如果兩端N端口都沒有獲取互連Nx_Port的N_Port_Name,那么它將發(fā)出一個(gè)PLOGI。兩端N端口在發(fā)出PLOGI后還要完成對(duì)接收到PLOGI的處理要求,這樣就解決了兩個(gè)Nx_Port都發(fā)出PLOGI的情況。點(diǎn)對(duì)點(diǎn)連接中的一個(gè)Nx_

49、Port在一個(gè)新的交換中發(fā)出一個(gè)PLOGI,其S_ID應(yīng)該與其D_ID不同。序列的載荷包括PLOGI序列發(fā)起端Nx_Port的服務(wù)參數(shù)、N_Port_Name和Node_Name。(4)Fabric不存在情況下的N端口注冊響應(yīng)在點(diǎn)對(duì)點(diǎn)連接情況下,Nx_Port發(fā)出PLOGI后可能接收到的響應(yīng)如下:a) LS_ACC回復(fù)序列,其OX_ID等于PLOGI的OX_ID,公共服務(wù)參數(shù)N_Port/F_Port位被設(shè)置為0(證明是Nx_Port)這是對(duì)N端口注冊請(qǐng)求的正常響應(yīng)。LS_ACC序列的D_ID就是PLOGI的S_ID, LS_ACC序列的S_ID就是目的N端口的N_Port_ID,由PLOGI

50、的D_ID來分配。LS_ACC的載荷將包括目的端N端口的服務(wù)參數(shù),64-bit的N_Port_Name和64-bit的Node_Name。這是對(duì)N_Port Login請(qǐng)求的正常響應(yīng),此Nx_Port可以與遠(yuǎn)端N_Port開始正常的通信。b) P_BSY序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。說明目的端Nx_Port正忙,此Nx_Port延遲一段時(shí)間后將重試PLOGI。c) P_RJT序列,其OX_ID等于PLOGI的OX_ID,D_ID就是PLOGI的S_ID。包含在載荷中的原因代碼決定了Nx_Port的操作處理。如果原因代碼是說“類型不支持”,則此N

51、x_Port將嘗試以另一不同的服務(wù)類型進(jìn)行N_Port Login,對(duì)于其它的原因代碼,Nx_Port將根據(jù)代碼進(jìn)行相應(yīng)的響應(yīng)。d) PLOGI序列,其D_ID是正在接收的Nx_Port的Port_Identifier,其S_ID是序列發(fā)起Nx_Port的N_Port_ID,其OX_ID由發(fā)起端Nx_Port分配。載荷中要包括PLOGI發(fā)起端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、通過向發(fā)起端Nx_Port發(fā)送LS_RJT,序列中包含原因代碼,指出登錄注冊正在進(jìn)行中。如果接收到的N_Port_Name大于Nx_Port的N_Port_Name,則Nx_Port繼續(xù)處理接收到的PLOGI。e) 無響應(yīng)。說明發(fā)生了傳輸錯(cuò)誤,也就是說發(fā)生了物理傳輸?shù)腻e(cuò)誤。等錯(cuò)誤恢復(fù)后,則此Nx_Port可以發(fā)起一個(gè)新的PLOGI。f) 如果接收到的N_Port_Name等于本地N_Port_Name,那么此Nx_Port是與自己的點(diǎn)到點(diǎn)連接,對(duì)此情況不考慮。3.2.3 小結(jié)本節(jié)在分析FC-AE-FCLP協(xié)議的基礎(chǔ)上,詳細(xì)劃分了系統(tǒng)功能架構(gòu)、設(shè)計(jì)了協(xié)議軟件架構(gòu)并設(shè)計(jì)了相關(guān)API函數(shù),給出了在典

53、型應(yīng)用情況下的API函數(shù)調(diào)用流程。本節(jié)簡要分析了FC-FS協(xié)議的內(nèi)容,F(xiàn)C-FS協(xié)議主要是對(duì)FC-1,F(xiàn)C-2,F(xiàn)C-3功能的定義,端口間進(jìn)行通信前需通過注冊以獲取操作環(huán)境參數(shù),此操作參數(shù)集即是按照FC-FS協(xié)議給出的。最后詳細(xì)給出了端口注冊的流程以及響應(yīng)處理措施。3.3 基于光卡硬件的PPC軟件設(shè)計(jì)3.3.1 硬件連接架構(gòu)如圖3-9所示為PPC嵌入式系統(tǒng)及其外設(shè)連接框圖圖3-9 PPC嵌入式系統(tǒng)及其外設(shè)連接圖PPC嵌入式系統(tǒng)通過雙口RAM分別與下層FC固件和上層用戶端主機(jī)的PCI協(xié)議處理單元相連,其中FC固件主要實(shí)現(xiàn)FC-2層的功能,PCI協(xié)議處理單元主要用于用戶層操作指令和PPC操作請(qǐng)求的

54、交互。PPC嵌入式系統(tǒng)可以同時(shí)與多個(gè)FC固件(N端口)相連接。其中,每個(gè)FC固件需要兩個(gè)雙口RAM,一個(gè)用于將FC固件信息的上傳PPC,一個(gè)用于FC固件接收PPC下傳的信息。另外還需要5根GPIO狀態(tài)及中斷線完成PPC與FC固件間信息狀態(tài)的傳遞,PPC初始化完成后,通過對(duì)GPIO Reset線置位觸發(fā)FC固件完成鏈路初始化,F(xiàn)C固件通過GPIO鏈路狀態(tài)線向PPC傳遞底層鏈路狀態(tài),鏈路有效時(shí)PPC才可以進(jìn)行相關(guān)操作,當(dāng)?shù)讓渔溌窢顟B(tài)變化或FC_PPC_RAM中有數(shù)據(jù)寫入時(shí),F(xiàn)C固件通過GPIO 中斷線觸發(fā)PPC中斷處理,PPC通過對(duì)FC_PPC_RAM狀態(tài)線和PPC_FC_RAM狀態(tài)線的置位和清零

55、告知FC固件當(dāng)前FC_PPC_RAM和PPC_FC_RAM的滿狀態(tài)和空狀態(tài)。PPC嵌入式系統(tǒng)與用戶端PCI協(xié)議處理單元通過兩個(gè)雙口RAM和一根GPIO中斷線相連接。其中,一個(gè)用于將PPC信息上傳給用戶端主機(jī),一個(gè)用于PPC接收用戶端主機(jī)下傳的信息。當(dāng)PPC將上傳信息寫入PPC_PCI_RAM后,通過此GPIO信號(hào)線采用中斷的方式通知用戶端主機(jī)讀取信息。PPC 嵌入式系統(tǒng)外掛一個(gè)Flash存儲(chǔ)器和一個(gè)DDR2存儲(chǔ)器。其中,F(xiàn)lash存儲(chǔ)器用于存儲(chǔ)FPGA系統(tǒng)的硬件加載文件(.mcs文件,由.bit文件轉(zhuǎn)化)和PPC的軟件程序(.srec文件,由.elf文件轉(zhuǎn)化)。DDR2用作PPC的內(nèi)存。3.3

56、.2 PPC軟件設(shè)計(jì)如圖3-10所示為基于隊(duì)列的FC-4層軟件整體控制架構(gòu)圖3-10 FC-4軟件整體控制架構(gòu)3.3.2.1PPC軟件工作機(jī)制PPC軟件基于隊(duì)列機(jī)制實(shí)現(xiàn)控制與處理功能。軟件系統(tǒng)設(shè)計(jì)了4個(gè)隊(duì)列,分別是用于存儲(chǔ)主機(jī)PCI到PPC信息的請(qǐng)求隊(duì)列(pci_ppc_req_que)、用于存儲(chǔ)PPC到主機(jī)PCI信息的結(jié)果隊(duì)列(ppc_pci_res_que)、用于存儲(chǔ)PPC到FC固件信息的結(jié)果隊(duì)列(ppc_fc_res_que)以及用于存儲(chǔ)FC固件到PPC信息的請(qǐng)求隊(duì)列(fc_ppc_req_que)。PPC軟件循環(huán)于圖1所示粉色和綠色兩個(gè)環(huán)路中。a) 粉色環(huán)路工作機(jī)制:此環(huán)路主要通過查詢

57、與響應(yīng)中斷的方式完成PPC與主機(jī)PCI接口、PPC與FC固件的信息交互。環(huán)路根據(jù)中斷狀態(tài)和各個(gè)雙口RAM的查詢結(jié)果以決定后續(xù)處理。進(jìn)入軟件主循環(huán)后,PPC對(duì)FC_PPC_RAM的讀取操作采用中斷與查詢的方式。FC固件將數(shù)據(jù)寫入FC_PPC_RAM后會(huì)觸發(fā)中斷通知PPC讀取,PPC首先將FC_PPC_RAM狀態(tài)線置位以禁止FC固件寫FC_PPC_RAM,然后PPC查詢fc_ppc_req_que是否處于滿狀態(tài),若不滿則將FC_PPC_RAM中數(shù)據(jù)讀出并按照規(guī)定格式寫入對(duì)列fc_ppc_req_que,然后將FC_PPC_RAM清空并將FC_PPC_RAM狀態(tài)線清零允許FC固件的寫入;若隊(duì)列fc_ppc_req_que已滿,則軟件不作處理繼續(xù)后續(xù)的循環(huán)。PPC查詢FC_PPC_RAM,若此雙口RAM中有數(shù)據(jù),則PPC將查詢隊(duì)列fc_ppc_req_que是否已處于滿狀態(tài),若不滿則將FC_PPC_RAM中數(shù)據(jù)讀出并按照規(guī)定格式寫入隊(duì)列fc_ppc_req_que,然后清空FC_PPC_RAM并將FC_PPC_RAM狀態(tài)線清零允許FC固件的寫入;若隊(duì)列fc_ppc_req_que已滿,則軟件不作處理繼續(xù)后續(xù)的循環(huán)。PPC查詢PCI_PPC_RAM,若此雙口RAM中有數(shù)據(jù),則PPC將查詢隊(duì)列pci_ppc_req_que是否已處于滿狀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論