(高清版)GB∕T 37982-2019 信息技術(shù) 多路徑管理(API)_第1頁
(高清版)GB∕T 37982-2019 信息技術(shù) 多路徑管理(API)_第2頁
(高清版)GB∕T 37982-2019 信息技術(shù) 多路徑管理(API)_第3頁
(高清版)GB∕T 37982-2019 信息技術(shù) 多路徑管理(API)_第4頁
(高清版)GB∕T 37982-2019 信息技術(shù) 多路徑管理(API)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

國家市場監(jiān)督管理總局中國國家標(biāo)準(zhǔn)化管理委員會(huì)GB/T37982—2019/ISO/IEC11002:2008 I 3術(shù)語、定義和縮略語 4文件約定 4 46常量和結(jié)構(gòu) 8實(shí)現(xiàn)規(guī)則 附錄A(資料性附錄)設(shè)備名稱 附錄B(資料性附錄)合成目標(biāo)端口組 附錄C(資料性附錄)傳輸層多路徑方法 附錄D(資料性附錄)編碼示例 附錄E(資料性附錄)接口庫/插件API I1ISO/IEC9899:1999程序設(shè)計(jì)語言C(ISO/IEC14165-133信息技術(shù)光纖信道第133部分:光纖信道交換機(jī)結(jié)構(gòu)-3(FC-SW-3)[In-formationtechnology—Fibrechannmationtechnology-Fibrechannel—Part251:Framinga[Informationtechnology—SmallcomputerISO/IEC14776-150信息技術(shù)小型計(jì)算機(jī)系統(tǒng)接口(SCSI)第150部分:串行附加SCSIISO/IEC14776-413信息技術(shù)小型計(jì)算機(jī)系統(tǒng)接口(SCSI)第413部分:體系結(jié)構(gòu)模型3(SAM-3)[Informationtechnology—SmallcompISO/IEC14776-453信息技術(shù)小型計(jì)算機(jī)系統(tǒng)接口(SCSI)第453部分:主要指令(SPC-3)[Informationtechnology—SmallRFC3720互聯(lián)網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口(iSCSI)[InternetSmallComputerSystemsInterface2GB/T37982—2019/ISO/IEC11002:2008某些多路徑驅(qū)動(dòng)程序所具有的重新使用由不可用狀態(tài)恢復(fù)為可用狀態(tài)的路徑的能力。自動(dòng)探測auto-probing某些多路徑驅(qū)動(dòng)程序所具有的查驗(yàn)當(dāng)前未使用的工作路徑的能力??捎寐窂絘vailablepaths一個(gè)邏輯單元的可用于選做I/O請求路線的路徑集合。設(shè)備文件devicefile便于與系統(tǒng)硬件和外圍設(shè)備通信的操作系統(tǒng)文件(如UNIX、Linux……等的實(shí)例)。設(shè)備標(biāo)識VPD頁deviceidentificationVPDpage提供檢索SCSI設(shè)備、邏輯單元和SCSI端口的標(biāo)識信息的方法的VPD頁。十六進(jìn)制編碼二進(jìn)制數(shù)據(jù)hexadecimal-encodedbinarydata用來表示二進(jìn)制8位組字串的十六進(jìn)制編碼的ASCII(對應(yīng)于GB/T1988—1998)字符串。連接到存儲區(qū)域網(wǎng)(SAN)的計(jì)算節(jié)點(diǎn)。發(fā)起請求的SCSI設(shè)備,也稱為客戶端。邏輯單元logicalunitSCSI目標(biāo)設(shè)備中的可尋址實(shí)體。多路徑邏輯單元multipathlogicalunit本標(biāo)準(zhǔn)中代表“虛擬的”邏輯單元的對象類型,它針對作為基礎(chǔ)的同一個(gè)設(shè)備邏輯單元將多個(gè)路徑邏輯單元合并在一起。在多路徑API中分配給任何對象的唯一標(biāo)識符。發(fā)起者端口、目標(biāo)端口和邏輯單元之間的關(guān)聯(lián)。見3.1.13。3GB/T37982—2019/ISO/路徑邏輯單元pathlogicalunit本標(biāo)準(zhǔn)中的通過一個(gè)發(fā)起者端口和一個(gè)設(shè)備端口提供對一個(gè)邏輯單元進(jìn)行訪問的對象類型。持久性persistent數(shù)據(jù)的非易失特性。插件plugin為操作系統(tǒng)、HBA或者設(shè)備提供商開發(fā)的支持一個(gè)或多個(gè)多路徑驅(qū)動(dòng)程序的軟件。特定型號的目標(biāo)設(shè)備,該型號由標(biāo)準(zhǔn)SCSIINQUIRY命令的響應(yīng)返回的供應(yīng)商ID、產(chǎn)品ID和修訂版本ID標(biāo)識。包含邏輯單元和接收SCSI發(fā)起者命令的SCSI目標(biāo)端口的SCSI設(shè)備。任何時(shí)候都處于同一目標(biāo)端口訪問狀態(tài)的目標(biāo)端口的集合。唯一地標(biāo)識(編號)字符的系統(tǒng),幾乎標(biāo)識了任何語言中的任何字符。重要產(chǎn)品數(shù)據(jù)vitalproductdata;VPD為響應(yīng)SCSIINQUIRY命令而使用EVPD位組[見ISO/IEC14776-453(SPC-3)]返回的供應(yīng)商關(guān)于某設(shè)備的具體信息。3.2縮略語下列縮略語適用于本文件。API應(yīng)用編程接口(ApplicationProgrammingInterface)DLL動(dòng)態(tài)鏈接庫(DynamicLinkLibrary)HBA主機(jī)總線適配器(HostBusAdapter)LUN邏輯單元號(LogicalUnitNumber)OID對象標(biāo)識符(ObjectIdentifier)4用一組類型和結(jié)構(gòu)(見第6章)及后隨的一組功能定義(見第7章)來詳細(xì)說明API。本章討論在第6章和第7章中使用的格式及定義API時(shí)使用的約定。5存儲產(chǎn)品(特別是磁盤陣列)為了提供更好的可靠性和性能,添加了多路徑的這些驅(qū)動(dòng)程序創(chuàng)建代表多路徑設(shè)備的特殊設(shè)備文件。諸如文件系統(tǒng)之類本標(biāo)準(zhǔn)著重于通過SCSI命令訪問的設(shè)備。SCSI命令由發(fā)起者發(fā)送給目標(biāo)設(shè)備。目標(biāo)設(shè)備可能由多個(gè)邏輯單元組成。例如,RAID陣列對外表示虛擬磁盤為若干單獨(dú)的邏輯單元。支持多個(gè)路徑和多能是訪問的首選端口(有時(shí)稱為緊密組)。ISO/IEC14776-453(SPC-3)引入目標(biāo)端口組的概念可以應(yīng)用到所有的設(shè)備,即使它們并未實(shí)際實(shí)現(xiàn)SCSI標(biāo)準(zhǔn)接口。本標(biāo)準(zhǔn)不要SCSI的設(shè)備標(biāo)識VPD頁(即,page83h)和REPOR6——設(shè)備標(biāo)識VPD頁返回一個(gè)標(biāo)識符列表。識符是MP_TARGET_PORT_GROUP_PROPERTIES的tpgID屬性?!猄CSI命令REPORTTARGETPORTGROUPS返回一個(gè)帶有目標(biāo)端口組訪問狀態(tài)的目標(biāo)SCSI命令SETTARGETPORTGROUP允許發(fā)起者設(shè)置目標(biāo)端口訪問狀態(tài)——這將導(dǎo)致故障接管或故障恢復(fù)。本API提供MP_SetTPGAccess作為與SETTARGETPORTGROUP的接口。圖1是一個(gè)具體示例。圖1中描述了一個(gè)采用非對稱訪問且包含兩個(gè)控制器的一個(gè)RAID陣列。每個(gè)控制器包含始終具有相同訪問狀態(tài)的兩個(gè)端口。為該RAID陣列配置了四個(gè)邏輯單元。通過不同控制器上的端口以最佳狀態(tài)訪問每對邏輯單元。當(dāng)其中的任何一個(gè)控制器失效的端口3端口4端口1端口2端口3端口4控制器B控制器控制器BBBCD表1總結(jié)了SCSIINQUIRY標(biāo)識符和REPORTTARGETPORTGROUPS命令響應(yīng)中針對此通過端口1或者端口2訪問通過端口3或者端口4訪問目標(biāo)端口組ID/狀態(tài)目標(biāo)端口組ID/狀態(tài)A1/活躍最佳2/備用B1/活躍最佳2/備用C1/備用D1/備用7在控制器A出現(xiàn)故障的情況下,從端口1或者端口2訪問所有邏輯單元將發(fā)現(xiàn)沒有響應(yīng)或目標(biāo)端口組狀態(tài)是不可用。通過端口3或者端口4,邏輯單元A和邏輯單元B將發(fā)現(xiàn)非最佳活躍訪問狀態(tài)。REPORTTARGETPORTGROUP命令的端口。此API中,將每個(gè)目標(biāo)端口組ID和訪問狀態(tài)的組圖2是一個(gè)實(shí)例簡圖,它表現(xiàn)與上述非對稱陣列對應(yīng)的此API實(shí)例。其中還包含相關(guān)的APIrelativePortID:1relativePorAccessState:最優(yōu)的切換的時(shí)候可能會(huì)有性能損失。對稱多路徑訪問設(shè)備不存在路徑切換的性能損失問此邏輯單元?jiǎng)t不是最佳的。ISO/IEC14776-453(SPC-3)定義了發(fā)現(xiàn)和管理多路徑設(shè)備的標(biāo)準(zhǔn)接了允許目標(biāo)設(shè)備描述若干目標(biāo)端口組的接口。一個(gè)目標(biāo)端口組中的所有端口同時(shí)處于同一個(gè)訪問狀8GB/T37982—2019/ISO/I一個(gè)邏輯單元可能經(jīng)由部分而非全部目標(biāo)端口執(zhí)行對稱多路徑訪問一個(gè)邏輯單元的目標(biāo)端口組訪問狀態(tài)改變的時(shí)候,在這個(gè)邏輯單元組里響應(yīng)可能包含一個(gè)邏輯單元組標(biāo)識符(標(biāo)識符類型為6h)。具有相同的邏輯單元組標(biāo)識符的所有邏輯此API遵循同樣的方式,MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES包含屬性logical-UnitGroupID。這個(gè)屬性的詳細(xì)信息(見6.26)明確指出了一個(gè)插件/驅(qū)動(dòng)程序在目標(biāo)設(shè)備不支持該此API沒有提供一種機(jī)制來創(chuàng)建一個(gè)邏輯單元組或者增加邏輯單元組成員。ISO/IEC中邏輯單元組遵循快照配置的RAID拓?fù)?。由于和目?biāo)設(shè)備的其他能力重疊,此API中不對這些接口·當(dāng)多條可用的路徑具有相同的訪問狀態(tài)時(shí),每一個(gè)I/O請求只能向一條特定路徑發(fā)出。多路此API允許插件/驅(qū)動(dòng)程序提供多個(gè)負(fù)載均衡算法,API客戶端可以把這些算法提供給管理員。幾種常見算法在MP_LOAD_BALANCE_TYPE中定義。插件/驅(qū)動(dòng)程序可以用驅(qū)動(dòng)程序特定算法擴(kuò)戶端應(yīng)用程序呈現(xiàn)供應(yīng)商名稱和算法名稱的機(jī)制??蛻舳丝梢允褂眠@些名稱來填充負(fù)載均衡算法(包一些多路徑驅(qū)動(dòng)程序具有針對某些設(shè)備類型的優(yōu)化的負(fù)載均衡算法。設(shè)備類型由SCSIInquiry數(shù)9據(jù)中返回的供應(yīng)商ID和產(chǎn)品ID確定。插件/驅(qū)動(dòng)程序可以使用MP_DEVICE_PRODUCT_PROPER-路徑權(quán)重是由指定優(yōu)先級的管理員分配給某路徑(或路徑邏輯單元)的一用具有最高權(quán)重的可用路徑(可用路徑的說明見下文)。這種方式允許管理員驅(qū)動(dòng)程序支持的權(quán)重范圍(maximumWeight)作為插件/驅(qū)動(dòng)程序?qū)傩猿尸F(xiàn)給客重設(shè)置功能的驅(qū)動(dòng)程序宜把這個(gè)屬性值設(shè)置為0。具有啟用/禁用路徑功能的驅(qū)動(dòng)程序宜把這個(gè)屬性值設(shè)置為1。具有的權(quán)重不止0和1的插件/驅(qū)動(dòng)程序可以把這個(gè)屬性值設(shè)置為適當(dāng)?shù)闹?。路徑?quán)重其他API(MP_DisablePath,MP_EnablePath,MP_SetOverridePath,MP_SetTPGAccess)可能會(huì)影響I/O路由,但是都不改變路徑的實(shí)際權(quán)重值。這種方式允許管理員把使用路徑權(quán)插件/驅(qū)動(dòng)程序可以為重載路徑提供一個(gè)接口(MP_SetOverridePath)。一個(gè)重載路徑是一個(gè)單一的路徑,管理員能夠指定所有的I/O都經(jīng)由此路徑到某個(gè)邏輯單元。設(shè)置首選路徑將禁用負(fù)載平衡。為禁用某路徑,插件/驅(qū)動(dòng)程序可以為禁用的路徑提供一個(gè)接口(MP_DisablePath)。此API的模型包含以下各類對象:GB/T37982—2019/ISO/IEC11002:2008●發(fā)起者端口——插件所在系統(tǒng)上的端口;·路徑邏輯單元—代表訪問某邏輯單元的一個(gè)發(fā)起者/目標(biāo)端口的組合??梢詻]有相應(yīng)的操作系統(tǒng)設(shè)備文件名;·多路徑邏輯單元——虛擬設(shè)備,它聚合代表相同邏輯單元的所有路徑(路徑邏輯單元);·目標(biāo)端口組——具有共同訪問狀態(tài)的各目標(biāo)端口的集合。圖3是一個(gè)顯示不同種類對象在多路徑模型中關(guān)系的UML略圖。發(fā)起端口圖3多路徑模型中各種對象之間的關(guān)系后續(xù)章條定義的結(jié)構(gòu)和API允許客戶端通過這個(gè)模型發(fā)現(xiàn)和操作多路徑驅(qū)動(dòng)程序和硬件。圖3中的每類對象都有一個(gè)包含屬性的結(jié)構(gòu)(例如,MP_INITIATOR_PORT_PROPERTIES具有發(fā)起者端口的屬性)和獲取屬性的API(MP_GetInitiatorPortProperties)。其他API允許客戶端遵循圖3所示的各對象之間的關(guān)系。例如,最右邊的垂直線+菱形箭頭代表目標(biāo)端口聚合到目標(biāo)端口組;MP_Get-TargetPortOidList返回一個(gè)目標(biāo)端口OID(有時(shí)OID和指針相似,見5.6.3)列表。其他的API通過設(shè)定特定屬性或者操作對象組來改變行為。圖4是一個(gè)UML實(shí)例略圖,圖中描述了OS/驅(qū)動(dòng)程序視角下的配置,即,有四條路徑與同一個(gè)邏輯單元(比如一個(gè)RAID卷)連接。針對特定的邏輯單元,每個(gè)發(fā)起端口連接到分開的兩對目標(biāo)端口,一對目標(biāo)端口最佳,另一對非最佳。這個(gè)模型描述了典型的多路徑驅(qū)動(dòng)程序行為,即,把多路徑邏輯單元看作非多路徑設(shè)備文件的聚合,而不是路徑的聚合。注意,這些對象類/結(jié)構(gòu)實(shí)例不能在不同的插件/驅(qū)動(dòng)程序間共享。但每個(gè)單獨(dú)的插件/驅(qū)動(dòng)程序中的實(shí)例可能映射同一個(gè)實(shí)際對象。例如,多個(gè)插件/驅(qū)動(dòng)程序可能表現(xiàn)同一個(gè)發(fā)起者(HBA)端口。客戶端可以通過比較不同的插件/驅(qū)動(dòng)程序的端口實(shí)例的端口名(例如光纖端口的WWN)屬性來確定這些端口是否相同。多路徑驅(qū)動(dòng)程序的安裝和配置是復(fù)雜和具有風(fēng)險(xiǎn)性的。在某些情況下,不同插件/驅(qū)動(dòng)程序的配置重疊可能對客戶造成災(zāi)難性的后果。此API不執(zhí)行“最佳實(shí)踐”。它假定客戶是以安全的方法安裝的多路徑驅(qū)動(dòng)程序。此API僅報(bào)告和操作配置。GB/T37982—2019/ISO多路徑邏輯單元多路徑邏輯單元發(fā)起者端口路徑邏輯單元邏輯單元是多路徑驅(qū)動(dòng)程序之下的四倍目標(biāo)端口目標(biāo)端口目標(biāo)端口目標(biāo)端口目標(biāo)端口組目標(biāo)端口組訪問狀態(tài):活躍最佳訪問狀態(tài):備用操作系統(tǒng)看到的每個(gè)路徑邏輯單元路徑邏輯單元路徑邏輯單元發(fā)起者端口圖4多路徑邏輯單元的驅(qū)動(dòng)程序表示5.4可選行為的客戶端發(fā)現(xiàn)沒有多路徑驅(qū)動(dòng)程序,通常是簡單的得到一個(gè)所有連接到系統(tǒng)的磁盤設(shè)備的列表;通常情況下,這僅僅是一個(gè)包含所有磁盤設(shè)備名稱的設(shè)備文件列表。但安裝多路徑驅(qū)動(dòng)程序后,可能難以確定一個(gè)虛擬多路徑設(shè)備歸納了哪些設(shè)備文件。并且,多路徑驅(qū)動(dòng)程序可能會(huì)增加額外的特殊的設(shè)備文件名到磁盤設(shè)備文件列表。本標(biāo)準(zhǔn)的主要目的是創(chuàng)建一個(gè)確定的方式,使管理軟件去發(fā)現(xiàn)連接到服務(wù)器的存儲資源。除了上述發(fā)現(xiàn)功能,本標(biāo)準(zhǔn)還提供了多路徑驅(qū)動(dòng)程序的主動(dòng)式管理功能,控制故障接管/故障恢復(fù)和負(fù)載平衡的功能。這些主動(dòng)管理API是可選的。在一般情況下,支持可選的功能是通過插件/驅(qū)動(dòng)程序(和其他對象)的屬性來顯示的。例如,MP_PLUGIN_PROPERTIES有一個(gè)canActivateTPG屬性,用來通知客戶端這個(gè)插件是否支持故障接管/故障恢復(fù)命令。5.4.2發(fā)現(xiàn)負(fù)載均衡行為此API內(nèi)置了常見的負(fù)載均衡算法,也可以讓插件來描述專有算法。只是以不透明信息的方式簡單呈現(xiàn),客戶端可以顯示或者修改這些信息,此API不具體解釋這些信息。客戶端可以通過查看MP_GetPluginPropertiesr返回的MP_PLUGIN_PROPERTIES的support-edLoadBanlanceTypes屬性來確定可用的負(fù)載均衡算法。如果supportLoadBalanceTypes中設(shè)置了MP_LOAD_BALANCE_TYPE_PRODUCT,那么客戶端宜使用MP_GetDeviceProduct_GetDeviceProductProperties去獲取該插件支持的目標(biāo)產(chǎn)品類型列表。如果有一個(gè)MP_DEVICE_●輪轉(zhuǎn)調(diào)度算法(默認(rèn));●不支持算法AL1用于DEVXXX邏輯單元。2MP_LOAD_BALANCE_TYPE8MP_LOAD_BALANCE_TYPE_MP_LOAD_BALANCE_TYPE_PROPRhMP_LOAD_BALANCE_TYPE_PROPR該MP_PLUGIN_PROPERTIES實(shí)例的supportedLoadBalanceTypes的十六進(jìn)制值為3001ah(這該MP_PLUGIN_PROPERTIES實(shí)例的defaultLoadBalanceType的值為MP_LOAD_BALANCE_對于65536和更高值標(biāo)志的負(fù)載均衡算法類型,各有一個(gè)MP_PROPRIETARY_LOAD_131072,“YY2”,“YoyodyneCorp.”LOGICAL_UNIT的canActivateTPGs表示支持MP_ActivateTPGsAPI-此API提供手動(dòng)故障接管用MP_PLUGIN_PROPERTIES的exposesPathDeviceFiles來檢測。如果exposesPathDevice置為非真,那么插件只對一個(gè)多路徑邏輯單元呈現(xiàn)一個(gè)設(shè)備文件名。如果MP_PLUGIN復(fù)。MP_AUTOFAILBACK_SUPPORT_PLUGIN表示所有設(shè)備都同樣執(zhí)行自動(dòng)故障恢AUTOFAILBACK_SUPPORT_MPLU表示分別對每個(gè)多路徑邏輯單元設(shè)置自動(dòng)故障恢復(fù)。M如果autoFailbackSupport是MP_AUTOFAILBACK_SUPPORT_PLUGIN或者M(jìn)P_AUTO-pluginAutofailbackEnab如果autoFailbackSupport是MP_AUTOFAILBACK_SUPP為MP_TURE時(shí)表示管理員請求啟用此多路徑邏輯單元自動(dòng)故障恢復(fù)。如果插件的autoFail-MP_PLUGIN_PROPERTIES.autoProbingSupport描述多路徑驅(qū)動(dòng)程序是否支持自動(dòng)探測。MP_AUTOPROBING_SUPPORT_PLUGIN表示所有設(shè)備都執(zhí)行同樣的自動(dòng)探測。pluginAutoProbingEnabl_如果autoProbingSupport是MP_AUTOPROBING_探測功能,或未提供設(shè)置多路徑邏輯單元輪詢間隔的接口。如果該屬性值和插件的probingPoll-GROUP.supportsLuAssignment為真。表示MP_AssignLogicalUnitToTPGAPIGB/T37982—2019/ISO/此API支持兩類事件:●可見性變化-對象出現(xiàn)或消失;●屬性變化-對象的屬性變化。API允許客戶端注冊或注銷每一類事件。注冊表提供客戶端的回調(diào)功能的地址,以備事件發(fā)生時(shí)調(diào)用??蛻舳丝梢詾槭录付ㄒ粋€(gè)特定的對象類別(默認(rèn)為所有對象類別)??蛻舳丝梢詾槭录付ㄒ粋€(gè)特定的插件(默認(rèn)為所有插件)。多個(gè)調(diào)用支持注冊對象類型子集和插件子集??蛻舳诉€可以指定“調(diào)用者數(shù)據(jù)”,調(diào)用者可以此將其用于糾正源于注冊表的事件。插件保存調(diào)用者數(shù)據(jù),并在返回事件時(shí)附加此數(shù)據(jù)。5.6API概念符合本標(biāo)準(zhǔn)的多路徑管理API實(shí)現(xiàn)應(yīng)便于在配置由多家供應(yīng)商提供和不同時(shí)間裝、卸的多路徑實(shí)現(xiàn)時(shí)采用通用管理方法。這種動(dòng)態(tài)安裝和拆卸應(yīng)按某種軟件結(jié)構(gòu)來執(zhí)行;這種軟件結(jié)構(gòu)可以是OS(操作系統(tǒng))特定的并且由OS供應(yīng)商充分文件化的,也可以是按本標(biāo)準(zhǔn)中定義的與O顯示為強(qiáng)制性的、但與操作系統(tǒng)特定實(shí)現(xiàn)無關(guān)的功能,應(yīng)返回MP_STATUS_SUCCESSDeregristerPlugin),應(yīng)用程序不必編碼特定的基礎(chǔ)實(shí)現(xiàn)。多路徑管理API可以使用庫與插件的組合來實(shí)現(xiàn)。庫的一個(gè)功能是加載插件,并分發(fā)管理應(yīng)用程序的請求到相應(yīng)的插件。在操作系統(tǒng)無關(guān)的實(shí)現(xiàn)中,操作系統(tǒng)供應(yīng)商,HBA卡供應(yīng)商,或目標(biāo)設(shè)備供應(yīng)商提供插件管理一組目標(biāo)設(shè)備。典型的情況是,插件得到庫提供的通用格式的請求,然后將該請求轉(zhuǎn)換成供應(yīng)商特定格式,轉(zhuǎn)發(fā)給供應(yīng)商的設(shè)備驅(qū)動(dòng)程序。實(shí)際情況下插件可能使用DLL或共享庫與設(shè)備驅(qū)動(dòng)程序交互。也可能同多個(gè)設(shè)備驅(qū)動(dòng)程序交互。插件用于執(zhí)行其工作的方式完全取決于特定的供應(yīng)商。盡管很少見,但兩個(gè)插件可能對同一個(gè)物理設(shè)備都有一個(gè)實(shí)例。這種情況可能發(fā)生在發(fā)起者端口,目標(biāo)端口甚至邏輯單元上??蛻舳送ㄟ^檢測某些屬性來確定這種等價(jià)情況,這些屬性包含由硬件本身報(bào)告的名稱/ID(例如,用于FC端口的幾個(gè)端口WWN)。如果客戶端應(yīng)用程序運(yùn)行在多個(gè)主機(jī)上,此方法同樣適用于發(fā)現(xiàn)是否同一個(gè)邏輯單元目標(biāo)端口連接在多個(gè)主機(jī)上。這樣做,有助于客戶端保留一個(gè)匯集了幾個(gè)插件的信息的實(shí)例。如果實(shí)例重疊,其結(jié)果之一是,幾個(gè)插件可能向客戶端報(bào)告同一個(gè)本架構(gòu)對系統(tǒng)引導(dǎo)時(shí)間沒有要求。插件在安裝時(shí)注冊到通用庫。通常是在MP驅(qū)動(dòng)程序(和/或客戶端管理軟件)安裝時(shí)完成。注冊信息長久保存在注冊表或配置文件中(見7.37)。多路徑管理API的一個(gè)核心元素是對象標(biāo)識符(OID)。OID是一種“唯一地”標(biāo)識對象的結(jié)構(gòu)。唯一地這個(gè)詞加引號的原因是,同一個(gè)OID有可能被重復(fù)用于代表不同的對象,盡管很少見。OID包含3個(gè)字段:a)對象類型。標(biāo)識該OID代表的對象的類型,例如,端口,邏輯單元等。b)對象所有者標(biāo)識符。這是一個(gè)編號,用于唯一地標(biāo)識對象的所有者。所有者可能是庫,或者是擁有對象的某個(gè)插件。c)對象序號。這是一個(gè)編號,對象所有者將它或可能是它與對象類型的組合用于標(biāo)識某對象。使用庫的客戶端應(yīng)將OID看做不透明的??蛻舳酥粦?yīng)使用文件化的API訪問該OID中的信息。任何時(shí)候只能有一個(gè)OID來代表它。不允許同時(shí)有多個(gè)OID代表同一個(gè)對象。遵循這個(gè)規(guī)則有時(shí)比例如,假設(shè)某HBA端口處于某系統(tǒng)中。該端口會(huì)有一個(gè)OID。如果該HBA卡在與之關(guān)聯(lián)的插件a)該HBA端口能保留原來的OID;b)該HBA端口對象得到新的OID,原來的OID不再使用。上例僅是同一個(gè)HBA的插拔。如果是在運(yùn)行特定插件或庫實(shí)例時(shí)拔下某個(gè)HBA后安裝另外一個(gè)系統(tǒng)中以前沒有的HBA,那么,應(yīng)給這個(gè)新安裝的HBA分配一個(gè)新的OID。插件和庫可以通過對象序號或?qū)ο箢愋团c對象序號的組合,在自己的對象域?qū)ο笮蛱柕闹赜脩?yīng)謹(jǐn)慎,盡可能防止由于打因?yàn)椴灰蟛寮驇毂A魧ο笮蛱枺允褂迷搸斓目蛻舳瞬粦?yīng)使用保留的自己的各個(gè)實(shí)例OID列表包含0個(gè)或多個(gè)OID。有一些API,例如MP_GetTargetPortOidList,它們返回OID列表。如果客戶端不再使用某OID列表,該類型定義為wchar_t(wchar_t是ISO/IEC9899:1999定義的C語言標(biāo)準(zhǔn)中的一部分),近期的C類型定義為字符,僅用于不支持寬字節(jié)字符的上下文中,如SCSI命令返回的文件名和ASCII值為1。值為FFFFFFFFh。MP_STATUS_INVALID_PARAMP_STATUS_INSUFFICIENTMP_STATUS_INVALID_OBJEMP_STATUS_OBJECT_NOMP_STATUS_ACCESS_STATE_MP_STATUS_PATH_NONOPER是11。014MP_PATH_STATE_TRANSIMP_PATH_STATE_OPERATIONAL6MP_PATH_STATE_INVALID7MP_PATH_STATE_OFFLINE89typedefMP_UINT32MP_PATH_STATE;MP_PATH_STATE_OPERATIONALMP_PATH_STATE_INVALIDMP_PATH_STATE_OFFLINE錯(cuò)誤通常在I/O請求沒有正常完成時(shí)被檢測到。此狀態(tài)變化中涉及的I/O請求可能已經(jīng)由多路徑插件/驅(qū)動(dòng)程序或用戶程序發(fā)布了。本標(biāo)準(zhǔn)不要求插件/驅(qū)動(dòng)程序輪詢錯(cuò)誤狀typedefvoid(*MP_OBJECT_VISIBILITY_FN)(/*in*/MP_BOOLbecomingVisible,/*in*/MP_OID_MP_BO0L值,表示由pOidList規(guī)定的對象列表已經(jīng)可見或者消失。MP_TRUE值表示這pOidList對象ID列表,其可見性處于變化中。引用的所有對象應(yīng)是同一類型(不同類型可能有不同的pCallerData值)。引用的所有的對pCallerData傳遞給MP_RegisterForObjectVisibilityChange的pCallerData??捎烧{(diào)用者用來糾正源于注該類型用于聲明可以結(jié)合APIMP_RegisterForObjectVisibilityChanges和MP_DeregisterForOb-jectVisibilityChanges當(dāng)客戶端功能結(jié)束功能使用pOidList引用的列表時(shí),應(yīng)通過調(diào)用MP_FreeOidList列表釋放typedefvoid(*MP_OBJECT_PROPERTY_FN)(/*in*/MP_OID_LIST*pOidList,pOidList同的pCallerData值)。pCallerData傳遞給MP_RegisterForObjectPropertyChanges的pCallerData??捎烧{(diào)用者用來糾正源于注冊表的事件。該類型通常用來聲明可以結(jié)合MP_RegisterForObjectPropertyChanges和MP_DeregisterForOb-功能當(dāng)客戶端功能結(jié)束使用pOidList引用的列表時(shí),應(yīng)通過調(diào)用MP_FreeOidList列表釋放pOidList使用的內(nèi)存。常量#defineMP_OBJECT_TYPE_UNKNOWN#defineMP_OBJECT_TYPE_PLUGIN#defineMP_OBJECT_TYPE_INITIATOR_PORT#defineMP_OBJECT_TYPE_TARGET_PORT#defineMP_OBJECT_TYPE_MULTIPATH_LU4#defineMP_OBJECT_TYPE_PATH_LU5#defineMP_OBJECT_TYPE_DEVICE_PRODUCT6#defineMP_OBJECT_TYPE_TARGET_PORT_GROUP7#defineMP_OBJECT_TYPE_PROPRIETARY_LOAD_BALANCE8typedefMP_UINT32MP_OBJECT_TYPE;MP_OBJECT_TYPE_INITIATMP_OBJECT_TYPE_TARGMP_OBJECT_TYPE_MULTIPMP_OBJECT_TYPE_DEVICE_MP_OBJECT_TYPE_TARGET_POMP_OBJECT_TYPE_PROPRIETARY_LOAtypedefstruct_MP_OID{指定對象類型。當(dāng)對象ID作為參數(shù)提供給API時(shí),庫使用此值來確保提供的對象類型適合于所調(diào)用的API。庫確定的編號,它用于唯一地標(biāo)識一個(gè)對象的所有者。對象的所有象ID作為參數(shù)提供給API時(shí),庫使用此值來確定它是否應(yīng)處理調(diào)用本身或?qū)⒄{(diào)用指向一個(gè)API的客戶端應(yīng)將此結(jié)構(gòu)視為不透明的。應(yīng)使用適當(dāng)?shù)腁PI(例如MP_GetObjectType和MP_格式typedefstruct_MP_OID_LIST{oids陣列中OID的數(shù)量。OID的變長陣列。在此陣列中有oidCount個(gè)OID。此結(jié)構(gòu)由多個(gè)API用于返回對象列表。由API返回的此結(jié)構(gòu)的任何實(shí)例都應(yīng)由客戶端使用MP_雖然oids被聲明為1個(gè)MP_OID結(jié)構(gòu)的陣列,但它實(shí)際上可以包含#defineMP_PORT_TRANSPORT_TYPE_UNKNOWN#defineMP_PORT_TRANSPORT_TYPE_MPNODE1#defineMP_PORT_TRANSPORT_TYPE_FC2#defineMP_PORT_TRANSPORT_TYPE_SPI3#defineMP_PORT_TRANSPORT_TYPE_ISCSI45#defineMP_PORT_TRANSP5typedefMP_UINT32MP_PORT_TRANSPORT_TYPE;MP_PORT_TRANSPORT_TYPEMP_PORT_TRANSPORT_TYPMP_PORT_TRANSPORT_TMP_PORT_TRANSPORT_TMP_PORT_TRANSPORT_TYPMP_PORT_TRANSPORT_T#defineMP_ACCESS_STATE_A#defineMP_ACCESS_STATE_AC#defineMP_ACCESS_STATE_STANDBY#defineMP_ACCESS_STATE_UNAVAILABLE3h#defineMP_ACCESS_STATE_TRANSITIONINGFh#defineMP_ACCESS_STATE_ACTIVEtypedefMP_UINT32MP_ACCESS_STATE_TYPE;MP_ACCESS_STATE_ACTIVE_OMP_ACCESS_STATE_ACTIVE_NONOMP_ACCESS_STATE_UNAVMP_ACCESS_STATE_TRANSI當(dāng)客戶端請求激活目標(biāo)端口組(使用APIMP_SetTPGAccess)時(shí),使用該狀態(tài)。但是并不關(guān)注這些端口組是否處在活躍且最佳化/活躍但非最佳化狀態(tài)。該值不在屬性中返回。該值未該枚舉類型提供了ISO/IEC14776-453(SPC-3)里面描述的目標(biāo)端口(組#defineMP_LOAD_BALANCE_TYPE_UNKNOWN#defineMP_LOAD_BALANCE_TYPE_ROUNDROBIN1<<1,#defineMP_LOAD_BALANCE_TYPE_LEAS#defineMP_LOAD_BALANCE_TYPE_LEASTIO1<<3,#defineMP_LOAD_BA#defineMP_LOAD_BALANCE_TYPE_LBA_REGION#defineMP_LOAD_BALANCE_TYPE_FAILOVER_ONLY#defineMP_LOAD_BALANCE_#defineMP_LOAD_BALANCE_T//附加自有屬性類型typedefMP_UINT32MP_LOAD_BALANCE_TYPE;MP_LOAD_BALANCE_TYPE_MP_LOAD_BALANCE_TYPE_ROUMP_LOAD_BALANCE_TYPE_LEAMP_LOAD_BALANCE_TYPE_表示負(fù)載均衡對象類型以最少IO為準(zhǔn)則選擇轉(zhuǎn)發(fā)請求的路徑的負(fù)載均衡算法。MP_LOAD_BALANCE_TYPE_DEVICE表示負(fù)載均衡算法對于該邏輯單元相關(guān)的MP_DEVICE_PRODUCT_PROPERTIES中指定MP_LOAD_BALANCE_TYPE_LBAMP_LOAD_BALANCE_TYPE_FAILO當(dāng)插件/驅(qū)動(dòng)程序確認(rèn)設(shè)備支持SCSI2RESERVE/RELEASE時(shí),在MP_DEVICE_PROD-UCT_PROPERTIES中設(shè)置該常量。由API客戶端用來表明SCSI2保留策略正在被使用,MP_LOAD_BALANCE_TYPE_PROP表示負(fù)載均衡算法是專有的。其中的位掩碼支持多達(dá)16種專有類型。插件對于設(shè)備類型的特定負(fù)載均衡類型的支持,通過MP_DEVICE_PRODUCT_PROPERTIES的實(shí)例表示。如果該屬性是MP_LOAD_BALANCE_TYPE_DEVICE_PRODUCT,那么邏輯單元的供該值設(shè)置為0。見MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES。typedefstruct_MP_PROPRIETARY_PROPERTY{Name一個(gè)包含專有屬性的名字的空字符結(jié)尾的UCS字符串。一個(gè)包含關(guān)聯(lián)專有屬性的值的空字符結(jié)尾的UCS字符串。typedefstruct_MP_PROPRIETARY_LOAD_BALANCE_PROPERTIESMP_LOAD_BALANCE_TYPEtypeIndex;MP_UINT32proprietaryPropertyCount;MP_PROPRIETARY_PROPERTYproprietaryProperties[8];表示供應(yīng)商特定的負(fù)載均衡算法的數(shù)值(大于或等于65536)。NameproprietaryPropertyCou所支持的專有屬性的數(shù)量(小于或等于8)。proprietaryProperti這個(gè)結(jié)構(gòu)是可選的,并允許供應(yīng)商在邏輯單元和插件屬性上使用的負(fù)載平見MP_LOAD_BALANCE_TYPE。#defineMP_LU_NAME_TYPE_UNKNOWN#defineMP_LU_NAME_TYPE_VPD83_TYPE1#defineMP_LU_NAME_TYPE_VPD83_TYPE22#defineMP_LU_NAME_TYPE_VPD83_TYPE3#defineMP_LU_NAME_TYPE_DEVICE_SPECIFICtypedefMP_UINT32MP_LOGICAL_UNIT_NAME_TYPE;MP_LOGICAL_UNIT_NAME_TYPE沒有邏輯單元名稱的解釋。不鼓勵(lì)使用此值,這樣的用法僅適用于名字不是來自SCSIMP_LU_NAME_TYPE_VPD83MP_LU_NAME_TYPE_VPD83MP_LU_NAME_TYPE_VPD83MP_LU_NAME_TYPE_DEVICE_Stypedefstruct_MP_LIBRARY_PROPERTIESMP_WCHARimplementationVersion[256];MP_WCHARbuildTime[2typedef0123MP_AUTOFAILBACK_SUPPORTMP_AUTOFAILBACK_SUPPOMP_AUTOFAILBACK_SUPPORT_PLUGINMP_UINT32MP_AUTOFAILBACK_SUPPORT;MP_AUTOFAILBACK_SUPPOMP_AUTOFAILBACK_SUPPORTMP_AUTOFAILBACK_SUPPOMP_AUTOFAILBACK_SUPPORT_PLUGIN該實(shí)現(xiàn)支持各個(gè)插件和多路徑邏輯單元級的自動(dòng)故障恢復(fù)和API。動(dòng)故障恢復(fù),則它支持MP_SetFailbackPollingRateAPI,或者應(yīng)將MP_PLUGIN_PROPERTIESbackPollingRateMax設(shè)置為0(表示不執(zhí)行輪詢或者輪詢速率不可調(diào))。typedefMP_AUTOPROBING_SUPPORMP_AUTOPROBING_SUPPORTMP_AUTOPROBING_SUPPOMP_AUTOPROBING_SUPPORT_PLUGINMP_UINT32MP_AUTOPROBING_SUPPORT;0123MP_AUTOPROBING_SUPPORMP_AUTOPROBING_SUPPORT_MP_AUTOPROBING_SUPPOMP_AUTOPROBING_SUPPORT_PLUGINtypedefstruct_MP_PLUGIN_PROPERTIES{MP_WCHARimplementationVersion[256];MP_UINT32supportedLoadBalanceTypes;MP_BO0LcanOverrideMP_BOOLexposesPathDeviMP_CHARdeviceFileNamespace[256];MP_BO0LonlySupportsSpeMP_AUTOFAILBACK_SUPPORTautoFailbackSupport;MP_BO0LpluginAutoFailbackMP_UINT32currentFailMP_AUTOPROBING_SUPPORTautoProbingSupport;MP_BO0LpluginAutoProbingEnableMP_UINT32probingPollingRateMax;MP_UINT32currentProbingPollingRate;MP_LOAD_BALANCE_TYPEdefaultloadBMP_UINT32proprietaryPropertyCount;MP_PROPRIETARY_PROPERTYproprietaryProperties[8];GB/T37982—2019/ISO/IEC11002:2008驅(qū)動(dòng)程序有更多的路徑權(quán)值設(shè)定能力,可以適當(dāng)設(shè)置此屬性。一個(gè)枚舉類型,指出此實(shí)現(xiàn)是支持插件級的或多路徑邏輯單元級的自動(dòng)故障恢復(fù)、或兩者皆支持或者均不支持。pluginAutoFailbackEnab一個(gè)布爾型的值,表示支持插件級的自動(dòng)故障恢復(fù)。如果autoFailbackSupport為MP_AU-TOFAILBACK_SUPPORT_NONE或者M(jìn)P_AUTOFAILB這個(gè)屬性是未定義的。_驅(qū)動(dòng)程序支持的自動(dòng)故障恢復(fù)的最大輪詢間率(單位為秒)。如果autofailbackSupport為MPAUTOFAILBACK_SUPPORT_NONE或者M(jìn)P_AUTOFAILBACK_SUPPORT_MPLU,_那么這個(gè)屬性是未定義的。如果插件/驅(qū)動(dòng)程序支持自動(dòng)故障恢復(fù)但非通過輪詢也沒提供設(shè)置輪詢率,那么這個(gè)屬性設(shè)置為0。這個(gè)屬性值是插件設(shè)置的,用戶不能設(shè)置。當(dāng)前的插件相關(guān)自動(dòng)故障恢復(fù)輪詢率(單位為秒)。如果autofailbackSupport為MP_AUTO-FAILBACK_SUPPORT_NONE或者M(jìn)P_AUTOFAILBACK_SUPPORT_MPLU,那么此屬性是未定義的。一個(gè)枚舉類型,表示此實(shí)現(xiàn)是支持插件級的或多路徑邏輯單元級的自動(dòng)探測,或者兩者都支pluginAutoProbingEnabl一個(gè)布爾型的值,表示支持插件級的自動(dòng)探測。如果autoProbingSupport為MP_AUTO-PROBING_SUPPORT_NONE或者M(jìn)P_AUTOPROBING_SUPPORT_MPLU,那么這個(gè)屬性是未定義的。驅(qū)動(dòng)程序支持的插件級探測最大輪詢率(單位為秒)。如果autoProbingSupport為MP_AU-TOPROBING_SUPPORT_NONE或者M(jìn)P_AUTOPROBING_SUPPORT_MPLU,那么這個(gè)屬性為未定義的。如果插件/驅(qū)動(dòng)程序支持非輪詢的探測或沒有提供設(shè)置探測輪詢率的方式,那么此屬性的值設(shè)置為0。這個(gè)值是插件設(shè)置的,用戶不能設(shè)置。當(dāng)前插件自動(dòng)探測率(單位為秒)。如果autoProbingSupport為MP_AUTOPROBING_SUP-PORT_NONE或者M(jìn)P_AUTOPROBING_SUPPORT_MPLU,那么這個(gè)屬性為未定義。負(fù)載均衡類型,若非管理員強(qiáng)行指定則由設(shè)備驅(qū)動(dòng)程序使用(沒有對應(yīng)的MP_DEVICE_PRODUCT_PROPERITIES實(shí)例)。具有與MP_DEVICE_PRODUCT_PROPERTIES實(shí)例匹配的供應(yīng)商、產(chǎn)品及修訂版本屬性的任何邏輯單元將默認(rèn)一個(gè)設(shè)備特定的負(fù)載均衡類型。proprietaryPropertyCoun所支持的專有屬性的數(shù)量(小于或等于8)。proprietaryProperti專有屬性名稱/值對列表。typedefstruct_MP_DEVICE_PRODUCT_PROPE標(biāo)識設(shè)備產(chǎn)品供應(yīng)商的8字節(jié)ASCII數(shù)據(jù)。對應(yīng)于SCSIINQUIRY響應(yīng)中的VENDORI-product16字節(jié)ASCII數(shù)據(jù)。對應(yīng)于SCSIINQUIRY響應(yīng)中的PRODUCTIDENTIFICATION字4字節(jié)ASCII數(shù)據(jù)。對應(yīng)于SCSIINQUIRY響應(yīng)中的PRODUCTREVISIONLEVEL字見MP_LOAD_BALANCE_TYPE的備注(見6.17)。typedefstruct_MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES{MP_CHARvendor[8];MP_CHARproduct[16];MP_CHARrevision[4];MP_LOGICAL_UNIT_NAME_TYPEMP_OIDoverridePatMP_LOAD_BALANCE_TYPEcurrenMP_UINT32currentFailMP_UINT32probingPollingRateMax;MP_UINT32currentProbingPollingRateMP_UINT32proprietaryPropertMP_PROPRIETARY_PROPERTYproprietaryProperti標(biāo)識設(shè)備產(chǎn)品供應(yīng)商的8字節(jié)ASCII數(shù)據(jù),對應(yīng)于SCSIINQUIRY響應(yīng)中的VENDORI-product16字節(jié)ASCII數(shù)據(jù)。對應(yīng)于SCSIINQUIRY響應(yīng)中的PRODUCTIDENTIFICATION字4字節(jié)ASCII數(shù)據(jù)。對應(yīng)于來自SCSIINQUIRY響應(yīng)的PRODUCTREVISIONLEVEL字用字節(jié)0設(shè)置為空。邏輯單元組標(biāo)識符,并且插件不具備該邏輯單元組的專有技術(shù),那么此字段應(yīng)設(shè)置為的autoFailbackSupport值為MP_AUTOFAILBAC性為MP_AUTOFAILBACK_SUPPORT_NONE或者M(jìn)P_AUTOFAILBACK_SUPPORT_ProbingSupport值為MP_AUTOPROBING_SUPPORT_PLUGINANDMPLU,且MP_UN-沒有提供一個(gè)接口為多路徑邏輯單元設(shè)置輪詢率。如果這個(gè)屬性和插件的probingPoll-為MP_AUTOPROBING_SUPPORT_NONE或者M(jìn)P_AUTOPROBING_SUPPORT_PLU-toProbingSupport屬性為MP_AUTOPROBING_SUPPORT_NONE或者M(jìn)P_AUTO-proprietaryPropertyCoutypedefstruct_MP_PATH_LOGICAL_UNIT_PROPERTIESMP_CHARdeviceFileNameSCSI架構(gòu)模型(SAM)定義的8字節(jié)SCSI邏輯busNumberportNumbertypedefstruct_MP_INITIATOR_PORT_PROPERTIES{MP_PORT_TRANSPORT_TYPEportType;MP_CHARosDeviceFile[256];portID端口名稱。此名稱宜為遵循傳輸層特定標(biāo)準(zhǔn)定義的全球唯一的名字;例如FC端口的WW-portType代表系統(tǒng)上的端口的OS中的設(shè)備文件名。見A.2。表2不同端口類型對PortID的實(shí)現(xiàn)要求端口類型MP_PORT_TRANSPORT_TYPE_MPNMP_PORT_TRANSPORT_TYPE和十六進(jìn)制數(shù)字(例如*21000020372D3C73')MP_PORT_TRANSPORT_TYPE_決方案MP_PORT_TRANSPORT_TYPE_IS式按iSCSIRFC中描述的“iqn”,“eui”或“naa”MP_PORT_TRANSPORT_TYPE_typedefstruct_MP_TARGET_PORT_PROPERTIES{MP_CHARportID[256];MP_UINT32relativePortIDportID在ISO/IEC14776-453(SPC-3)被限制為16位并且0為保留值。如果目標(biāo)設(shè)備不支持此接typedefstruct_MP_TARGET_PORT_GROUP_PROPERTIES{MP_ACCESS_STATE_TYPEaccessState;如果目標(biāo)設(shè)備支持顯式命令設(shè)置目標(biāo)端口組的訪問狀態(tài),則設(shè)為真(例如SCSISETtypedefstruct_MP_TPG_STATE_PAIR有很多API返回對象的屬性。這些API命名格式一般為Puget<object-type>Properties,MP_GetTargetPortProp一些API返回的是和其他對象相關(guān)的一些對象的ID。例如,MP_GetTargetPortOIDList含目標(biāo)端口組的目標(biāo)端口對象的ID列表。例如,返回包執(zhí)行多路徑任務(wù)的API包括MP_AssignLogicalUnitToTPG,MP_CancelOverridePath,MP_DisablDisableAutoProbing,MP_DisablePath,MP_EnableAutoFailback,MP_EnableAutoProablePath,MP_SetLogicalUnitLoadBalanceType,MP_SetOverridePath,MP_SetPPluginLoadBalanceType,MP_SetPollingRate和MP_SetTPGAccess。MP_CompareOids,MP_FreeOidList,MP_GetAssociatedPluginOid,MP_GetMP_DeregisterForObjectPropertyChanges,MP_DeregisterForVisibilityChanges,MPrObjectPropertyChanges,MP_RegisterForVisibilityC典型的客戶端任務(wù)首先是通過調(diào)用一系列API發(fā)現(xiàn)一個(gè)子集API。一旦這個(gè)子集被發(fā)現(xiàn),客戶端圖5幫助開發(fā)者理解在發(fā)現(xiàn)過程中會(huì)使用到哪些API。虛線旁包括功能名稱,客戶端將功能用以tOIDListtOIDList路徑邏輯單元多路徑邏輯單元多路徑插件目標(biāo)端口組發(fā)起端口目標(biāo)端口圖5與圖1中對象相關(guān)的API一個(gè)模型子集的發(fā)現(xiàn)過程通常開始于多路徑庫(左上),通過調(diào)用GetPluginOidList找到關(guān)聯(lián)的插件(沿著虛線),然后使用GetPluginProperties獲取插件的詳細(xì)信息。之后,客戶端根據(jù)具體的任務(wù)選擇通過哪類API來導(dǎo)航。如果任務(wù)需要發(fā)起者端口列表,沿著虛線到發(fā)起者端口(調(diào)用GetInitiator-PathOidList返回路徑列表??梢允褂猛瑯拥奶椒椒▉泶_定哪些API功能在發(fā)現(xiàn)該模型的各種子集MP_STATUSMP_AssignLogicalUnitToTPG(一個(gè)MP_TARGET_PORT_GROUP對象ID。管理員希望將邏輯單元分配給處于活躍訪問luOid一個(gè)MP_MULTIPATH_LOGICAL_UNIT對MP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOMP_GetAssociatedTPGMP_TARGET_PORT_GROUP_PROPERTIES.supportsLuAMP_STATUSMP_CancelOverridePath(一個(gè)MP_MULTIPATH_LOGICAL_UNIT對象ID。MP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA對象logicalUnitOid有除MP_MULTIPATH_LOGICAL_UNIT之外的類型子字段時(shí)返回MP_STATUS_OBJECT_NOT對象logicalUnitOid所有者ID或?qū)ο笮蛄刑枱o效時(shí)返回此值。僅在插件屬性中的canOverridePaths為真時(shí)才有效。需要對比的兩個(gè)對象ID。兩個(gè)對象ID的所有字段將會(huì)被逐一比對是否相等。1HMP_STATUSMP_DeregisterForObjectPropertyChanges(/*in*/MP_OBJECT_PROPERTY_FNpClien/*in*/MP_OIDplupClientFnpluginOidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARApluginOid不為0且有除MP_OBJECT_TYPE_PMP_STATUS_OBJECT_NOMP_RegisterForObjectPropertMP_STATUSMP_DeregisterForObjectCre/*in*/MP_OBJECT_VISIBILITY_FNpClientFn,/*in*/MP_OIDplupClientFnpluginOidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOMP_RegisterForObjectVisibilipPluginIdMP_STATUS_INVALID_PARA該插件將不再由公共庫調(diào)用。此API不會(huì)從正在運(yùn)行的庫實(shí)例動(dòng)態(tài)刪除插件。而是阻止當(dāng)前未MP_STATUSMP_DisableAutoFailback(oidMP_STATUS_INVALID_OBJE當(dāng)oid未指向任何有效的對象類型時(shí)返回此值。通常發(fā)生在未初始化的對象ID傳遞給此接MP_STATUS_INVALID_PARA當(dāng)oid的類型子字段不是MP_OBJECT_TYPE_PLUGIN或MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或?qū)ο笮蛄刑枱o效時(shí)返回此值。不支持此API時(shí)返回此值。如果MP_PLUGIN_PROPERTIES.autoProbingSupported不是MP_AUTOPROBING_SUPPORT_MP_STATUSMP_DisableAuoidMP_STATUS_INVALID_OBJE當(dāng)oid未指向任何有效的對象類型時(shí)返回此值。通常發(fā)生在將未初始化的對象ID傳遞給此APIMP_STATUS_INVALID_PARA當(dāng)oid的類型子字段不是MP_OBJECT_TYPE_PLUGIN或MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或?qū)ο笮蛄刑枱o效時(shí)返回此值。不支持此API時(shí)返回此值。如果MP_PLUGIN_PROPERTIES.autoProbingSuppoidMP_STATUS_INVALID_OBJEMP_STATUS_OBJECT_NOMP_STATUS_INVALID_PARA此API設(shè)置MP_PATH_LOGICMP_STATUSMP_EnableAoidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA當(dāng)oid的類型子字段不是MP_OBJECT_TYPE_PLUGIN和MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或者對象序列號無效時(shí)返回此值。支持如果MP_PLUGIN_PROPERTIES.autofailbacksupported值不為MP_AUTOFAILBACK_SUP-7.12MP_EnableAutoProbingMP_STATUSMP_EnableAutoProbing(oid插件或多路邏輯單元的對象ID。MP_STATUS_INVALID_OBJE當(dāng)oid未指向任何有效的對象類型時(shí)返回此值。通常發(fā)生在將未初始化的對象ID傳遞給此MP_STATUS_INVALID_PARA當(dāng)oid的類型子字段不是MP_OBJECT_TYPE_PLUGIN和MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或者對象序列號無效時(shí)返回此值。如果MP_PLUGIN_PROPERTIES.autofailbacksupported的值不為MP_AUTOFAILBACK_oidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NO此API設(shè)置MP_PATH_LOGICAL_UNIT_PROPERTIES.disabled的值為非pOidListMP_STATUS_INVALID_PARA客戶端應(yīng)釋放由任何API使用此功能返回的所有MP_ODI_LIST結(jié)構(gòu)。獲取與指定的多路徑邏輯單元、發(fā)起者端口或目標(biāo)端口相關(guān)聯(lián)的所有路徑邏輯單元的對象ID的MP_STATUSMP_GetAssociatedPathOoidppList指向某個(gè)指向MP_OID_LIST結(jié)構(gòu)的指針的指針。成功返回時(shí),將包含指向MP_OID_LIST的指針。MP_OID_LIST包含與指定的(多路徑)邏輯單元、發(fā)起者端口發(fā)起者端口或目標(biāo)端口oid相關(guān)聯(lián)的所有路徑的對象ID。MP_STATUS_INVALID_PARA當(dāng)ppList為空或指定不可寫入數(shù)據(jù)的內(nèi)存區(qū)域或oid有除MP_OBJECT_TYPE_MUL-TIPATH_LU,MP_OBJECT_TYPE_INITIATOR_PORT或MP_OBJECT_TYPE_MP_STATUS_INVALID_OBJE當(dāng)oid未指向任何有效的對象類型時(shí)返回。通常發(fā)生在將未初始化的對象ID傳遞給此APIMP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或?qū)ο笮蛄刑枱o效時(shí)返回此值。MP_GetPathLogicalUnitPr7.16MP_GetAssociatedPlu獲取與指定對象ID關(guān)聯(lián)的插件的對象ID。MP_STATUSMP_GetAssociatedPluginOid(/*out*/MP_OID*pPluginOidoid從先前的API調(diào)用接收到的對象的對象ID。pPluginOid指向調(diào)用者分配的MP_OID結(jié)構(gòu)的指針。成功返回時(shí),將包含與由oid指定的對象關(guān)聯(lián)的插MP_STATUS_INVALID_OBJE當(dāng)oid未指向任何有效的對象類型時(shí)返回此值。通常發(fā)生在將未初始化的對象ID傳遞給此MP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOT當(dāng)oid所有者ID無效時(shí)返回。7.17MP_GetAssociate獲取包含與指定的多路徑邏輯單元關(guān)聯(lián)的目標(biāo)端口組的對象ID的列表。MP_STATUSMP_GetAssociatedTPGOidList(參數(shù)oid多路徑邏輯單元的對象ID。ppListMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA當(dāng)ppList為空或指向無法寫入數(shù)據(jù)的內(nèi)存區(qū)域或oid的類型子字段不是MP_OBJECTMP_STATUS_OBJECT_NOMP_STATUS_INSUFFICIENTMP_GetTargetPortGroupProMP_STATUSMP_GetDeviceProductOidL/*out*/MP_OID_oidppListMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOMP_STATUS_INSUFFICIENTMP_GetDeviceProductPrMP_STATUSMP_GetDeviceProductProperties(/*out*/MP_DEVICE_PRODUCT_PROPERTIES*pPropsoidpPropsMP_STATUS_INVALID_OBJEMP_STATUS_OBJECT_NOMP_STATUS_INVALID_PARA當(dāng)實(shí)現(xiàn)不支持該API時(shí)返回此值。MP_GetDeviceProduct獲取與該插件關(guān)聯(lián)的所有發(fā)起者端口的對象ID的列表。原型MP_STATUSMP_GetInitiatorPortOioid插件的對象ID。ppList指向某個(gè)指向MP_OID_LIST結(jié)構(gòu)的指針的指針。成功返回時(shí),將包含一個(gè)指向MP_OID_MP_STATUS_INVALID_OBJE當(dāng)oid未指向有效對象類型時(shí)返回此值。通常發(fā)生在將未初始化的對象ID傳遞給此API的MP_STATUS_INVALID_PARA_MP_STATUS_OBJECT_NOT當(dāng)oid所有者ID或?qū)ο笮蛄刑枱o效時(shí)返回此值。MP_STATUS_INSUFFICIENTMP_GetInitiatorPortProMP_STATUSMP_GetInitiatorPortProperties(/*out*/MP_INITIATOR_PORT_PROoidpPropsMP_STATUS_INVALID_PARAMP_STATUS_INVALID_OBJEMP_STATUS_OBJECT_NOMP_GetInitiatorPortMP_STATUSMP_GetLibraryProperties(pPropsMP_STATUS_INVALID_PARAExampleofGettingLibraryMP_STATUSMP_GetMPLuOidListFromTPG(/*in

溫馨提示

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

評論

0/150

提交評論