(高清版)GB∕T 37982-2019 信息技术 多路径管理(API)_第1页
(高清版)GB∕T 37982-2019 信息技术 多路径管理(API)_第2页
(高清版)GB∕T 37982-2019 信息技术 多路径管理(API)_第3页
(高清版)GB∕T 37982-2019 信息技术 多路径管理(API)_第4页
(高清版)GB∕T 37982-2019 信息技术 多路径管理(API)_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家市场监督管理总局中国国家标准化管理委员会GB/T37982—2019/ISO/IEC11002:2008 I 3术语、定义和缩略语 4文件约定 4 46常量和结构 8实现规则 附录A(资料性附录)设备名称 附录B(资料性附录)合成目标端口组 附录C(资料性附录)传输层多路径方法 附录D(资料性附录)编码示例 附录E(资料性附录)接口库/插件API I1ISO/IEC9899:1999程序设计语言C(ISO/IEC14165-133信息技术光纤信道第133部分:光纤信道交换机结构-3(FC-SW-3)[In-formationtechnology—Fibrechannmationtechnology-Fibrechannel—Part251:Framinga[Informationtechnology—SmallcomputerISO/IEC14776-150信息技术小型计算机系统接口(SCSI)第150部分:串行附加SCSIISO/IEC14776-413信息技术小型计算机系统接口(SCSI)第413部分:体系结构模型3(SAM-3)[Informationtechnology—SmallcompISO/IEC14776-453信息技术小型计算机系统接口(SCSI)第453部分:主要指令(SPC-3)[Informationtechnology—SmallRFC3720互联网小型计算机系统接口(iSCSI)[InternetSmallComputerSystemsInterface2GB/T37982—2019/ISO/IEC11002:2008某些多路径驱动程序所具有的重新使用由不可用状态恢复为可用状态的路径的能力。自动探测auto-probing某些多路径驱动程序所具有的查验当前未使用的工作路径的能力。可用路径availablepaths一个逻辑单元的可用于选做I/O请求路线的路径集合。设备文件devicefile便于与系统硬件和外围设备通信的操作系统文件(如UNIX、Linux……等的实例)。设备标识VPD页deviceidentificationVPDpage提供检索SCSI设备、逻辑单元和SCSI端口的标识信息的方法的VPD页。十六进制编码二进制数据hexadecimal-encodedbinarydata用来表示二进制8位组字串的十六进制编码的ASCII(对应于GB/T1988—1998)字符串。连接到存储区域网(SAN)的计算节点。发起请求的SCSI设备,也称为客户端。逻辑单元logicalunitSCSI目标设备中的可寻址实体。多路径逻辑单元multipathlogicalunit本标准中代表“虚拟的”逻辑单元的对象类型,它针对作为基础的同一个设备逻辑单元将多个路径逻辑单元合并在一起。在多路径API中分配给任何对象的唯一标识符。发起者端口、目标端口和逻辑单元之间的关联。见3.1.13。3GB/T37982—2019/ISO/路径逻辑单元pathlogicalunit本标准中的通过一个发起者端口和一个设备端口提供对一个逻辑单元进行访问的对象类型。持久性persistent数据的非易失特性。插件plugin为操作系统、HBA或者设备提供商开发的支持一个或多个多路径驱动程序的软件。特定型号的目标设备,该型号由标准SCSIINQUIRY命令的响应返回的供应商ID、产品ID和修订版本ID标识。包含逻辑单元和接收SCSI发起者命令的SCSI目标端口的SCSI设备。任何时候都处于同一目标端口访问状态的目标端口的集合。唯一地标识(编号)字符的系统,几乎标识了任何语言中的任何字符。重要产品数据vitalproductdata;VPD为响应SCSIINQUIRY命令而使用EVPD位组[见ISO/IEC14776-453(SPC-3)]返回的供应商关于某设备的具体信息。3.2缩略语下列缩略语适用于本文件。API应用编程接口(ApplicationProgrammingInterface)DLL动态链接库(DynamicLinkLibrary)HBA主机总线适配器(HostBusAdapter)LUN逻辑单元号(LogicalUnitNumber)OID对象标识符(ObjectIdentifier)4用一组类型和结构(见第6章)及后随的一组功能定义(见第7章)来详细说明API。本章讨论在第6章和第7章中使用的格式及定义API时使用的约定。5存储产品(特别是磁盘阵列)为了提供更好的可靠性和性能,添加了多路径的这些驱动程序创建代表多路径设备的特殊设备文件。诸如文件系统之类本标准着重于通过SCSI命令访问的设备。SCSI命令由发起者发送给目标设备。目标设备可能由多个逻辑单元组成。例如,RAID阵列对外表示虚拟磁盘为若干单独的逻辑单元。支持多个路径和多能是访问的首选端口(有时称为紧密组)。ISO/IEC14776-453(SPC-3)引入目标端口组的概念可以应用到所有的设备,即使它们并未实际实现SCSI标准接口。本标准不要SCSI的设备标识VPD页(即,page83h)和REPOR6——设备标识VPD页返回一个标识符列表。识符是MP_TARGET_PORT_GROUP_PROPERTIES的tpgID属性。——SCSI命令REPORTTARGETPORTGROUPS返回一个带有目标端口组访问状态的目标SCSI命令SETTARGETPORTGROUP允许发起者设置目标端口访问状态——这将导致故障接管或故障恢复。本API提供MP_SetTPGAccess作为与SETTARGETPORTGROUP的接口。图1是一个具体示例。图1中描述了一个采用非对称访问且包含两个控制器的一个RAID阵列。每个控制器包含始终具有相同访问状态的两个端口。为该RAID阵列配置了四个逻辑单元。通过不同控制器上的端口以最佳状态访问每对逻辑单元。当其中的任何一个控制器失效的端口3端口4端口1端口2端口3端口4控制器B控制器控制器BBBCD表1总结了SCSIINQUIRY标识符和REPORTTARGETPORTGROUPS命令响应中针对此通过端口1或者端口2访问通过端口3或者端口4访问目标端口组ID/状态目标端口组ID/状态A1/活跃最佳2/备用B1/活跃最佳2/备用C1/备用D1/备用7在控制器A出现故障的情况下,从端口1或者端口2访问所有逻辑单元将发现没有响应或目标端口组状态是不可用。通过端口3或者端口4,逻辑单元A和逻辑单元B将发现非最佳活跃访问状态。REPORTTARGETPORTGROUP命令的端口。此API中,将每个目标端口组ID和访问状态的组图2是一个实例简图,它表现与上述非对称阵列对应的此API实例。其中还包含相关的APIrelativePortID:1relativePorAccessState:最优的切换的时候可能会有性能损失。对称多路径访问设备不存在路径切换的性能损失问此逻辑单元则不是最佳的。ISO/IEC14776-453(SPC-3)定义了发现和管理多路径设备的标准接了允许目标设备描述若干目标端口组的接口。一个目标端口组中的所有端口同时处于同一个访问状8GB/T37982—2019/ISO/I一个逻辑单元可能经由部分而非全部目标端口执行对称多路径访问一个逻辑单元的目标端口组访问状态改变的时候,在这个逻辑单元组里响应可能包含一个逻辑单元组标识符(标识符类型为6h)。具有相同的逻辑单元组标识符的所有逻辑此API遵循同样的方式,MP_MULTIPATH_LOGICAL_UNIT_PROPERTIES包含属性logical-UnitGroupID。这个属性的详细信息(见6.26)明确指出了一个插件/驱动程序在目标设备不支持该此API没有提供一种机制来创建一个逻辑单元组或者增加逻辑单元组成员。ISO/IEC中逻辑单元组遵循快照配置的RAID拓扑。由于和目标设备的其他能力重叠,此API中不对这些接口·当多条可用的路径具有相同的访问状态时,每一个I/O请求只能向一条特定路径发出。多路此API允许插件/驱动程序提供多个负载均衡算法,API客户端可以把这些算法提供给管理员。几种常见算法在MP_LOAD_BALANCE_TYPE中定义。插件/驱动程序可以用驱动程序特定算法扩户端应用程序呈现供应商名称和算法名称的机制。客户端可以使用这些名称来填充负载均衡算法(包一些多路径驱动程序具有针对某些设备类型的优化的负载均衡算法。设备类型由SCSIInquiry数9据中返回的供应商ID和产品ID确定。插件/驱动程序可以使用MP_DEVICE_PRODUCT_PROPER-路径权重是由指定优先级的管理员分配给某路径(或路径逻辑单元)的一用具有最高权重的可用路径(可用路径的说明见下文)。这种方式允许管理员驱动程序支持的权重范围(maximumWeight)作为插件/驱动程序属性呈现给客重设置功能的驱动程序宜把这个属性值设置为0。具有启用/禁用路径功能的驱动程序宜把这个属性值设置为1。具有的权重不止0和1的插件/驱动程序可以把这个属性值设置为适当的值。路径权重其他API(MP_DisablePath,MP_EnablePath,MP_SetOverridePath,MP_SetTPGAccess)可能会影响I/O路由,但是都不改变路径的实际权重值。这种方式允许管理员把使用路径权插件/驱动程序可以为重载路径提供一个接口(MP_SetOverridePath)。一个重载路径是一个单一的路径,管理员能够指定所有的I/O都经由此路径到某个逻辑单元。设置首选路径将禁用负载平衡。为禁用某路径,插件/驱动程序可以为禁用的路径提供一个接口(MP_DisablePath)。此API的模型包含以下各类对象:GB/T37982—2019/ISO/IEC11002:2008●发起者端口——插件所在系统上的端口;·路径逻辑单元—代表访问某逻辑单元的一个发起者/目标端口的组合。可以没有相应的操作系统设备文件名;·多路径逻辑单元——虚拟设备,它聚合代表相同逻辑单元的所有路径(路径逻辑单元);·目标端口组——具有共同访问状态的各目标端口的集合。图3是一个显示不同种类对象在多路径模型中关系的UML略图。发起端口图3多路径模型中各种对象之间的关系后续章条定义的结构和API允许客户端通过这个模型发现和操作多路径驱动程序和硬件。图3中的每类对象都有一个包含属性的结构(例如,MP_INITIATOR_PORT_PROPERTIES具有发起者端口的属性)和获取属性的API(MP_GetInitiatorPortProperties)。其他API允许客户端遵循图3所示的各对象之间的关系。例如,最右边的垂直线+菱形箭头代表目标端口聚合到目标端口组;MP_Get-TargetPortOidList返回一个目标端口OID(有时OID和指针相似,见5.6.3)列表。其他的API通过设定特定属性或者操作对象组来改变行为。图4是一个UML实例略图,图中描述了OS/驱动程序视角下的配置,即,有四条路径与同一个逻辑单元(比如一个RAID卷)连接。针对特定的逻辑单元,每个发起端口连接到分开的两对目标端口,一对目标端口最佳,另一对非最佳。这个模型描述了典型的多路径驱动程序行为,即,把多路径逻辑单元看作非多路径设备文件的聚合,而不是路径的聚合。注意,这些对象类/结构实例不能在不同的插件/驱动程序间共享。但每个单独的插件/驱动程序中的实例可能映射同一个实际对象。例如,多个插件/驱动程序可能表现同一个发起者(HBA)端口。客户端可以通过比较不同的插件/驱动程序的端口实例的端口名(例如光纤端口的WWN)属性来确定这些端口是否相同。多路径驱动程序的安装和配置是复杂和具有风险性的。在某些情况下,不同插件/驱动程序的配置重叠可能对客户造成灾难性的后果。此API不执行“最佳实践”。它假定客户是以安全的方法安装的多路径驱动程序。此API仅报告和操作配置。GB/T37982—2019/ISO多路径逻辑单元多路径逻辑单元发起者端口路径逻辑单元逻辑单元是多路径驱动程序之下的四倍目标端口目标端口目标端口目标端口目标端口组目标端口组访问状态:活跃最佳访问状态:备用操作系统看到的每个路径逻辑单元路径逻辑单元路径逻辑单元发起者端口图4多路径逻辑单元的驱动程序表示5.4可选行为的客户端发现没有多路径驱动程序,通常是简单的得到一个所有连接到系统的磁盘设备的列表;通常情况下,这仅仅是一个包含所有磁盘设备名称的设备文件列表。但安装多路径驱动程序后,可能难以确定一个虚拟多路径设备归纳了哪些设备文件。并且,多路径驱动程序可能会增加额外的特殊的设备文件名到磁盘设备文件列表。本标准的主要目的是创建一个确定的方式,使管理软件去发现连接到服务器的存储资源。除了上述发现功能,本标准还提供了多路径驱动程序的主动式管理功能,控制故障接管/故障恢复和负载平衡的功能。这些主动管理API是可选的。在一般情况下,支持可选的功能是通过插件/驱动程序(和其他对象)的属性来显示的。例如,MP_PLUGIN_PROPERTIES有一个canActivateTPG属性,用来通知客户端这个插件是否支持故障接管/故障恢复命令。5.4.2发现负载均衡行为此API内置了常见的负载均衡算法,也可以让插件来描述专有算法。只是以不透明信息的方式简单呈现,客户端可以显示或者修改这些信息,此API不具体解释这些信息。客户端可以通过查看MP_GetPluginPropertiesr返回的MP_PLUGIN_PROPERTIES的support-edLoadBanlanceTypes属性来确定可用的负载均衡算法。如果supportLoadBalanceTypes中设置了MP_LOAD_BALANCE_TYPE_PRODUCT,那么客户端宜使用MP_GetDeviceProduct_GetDeviceProductProperties去获取该插件支持的目标产品类型列表。如果有一个MP_DEVICE_●轮转调度算法(默认);●不支持算法AL1用于DEVXXX逻辑单元。2MP_LOAD_BALANCE_TYPE8MP_LOAD_BALANCE_TYPE_MP_LOAD_BALANCE_TYPE_PROPRhMP_LOAD_BALANCE_TYPE_PROPR该MP_PLUGIN_PROPERTIES实例的supportedLoadBalanceTypes的十六进制值为3001ah(这该MP_PLUGIN_PROPERTIES实例的defaultLoadBalanceType的值为MP_LOAD_BALANCE_对于65536和更高值标志的负载均衡算法类型,各有一个MP_PROPRIETARY_LOAD_131072,“YY2”,“YoyodyneCorp.”LOGICAL_UNIT的canActivateTPGs表示支持MP_ActivateTPGsAPI-此API提供手动故障接管用MP_PLUGIN_PROPERTIES的exposesPathDeviceFiles来检测。如果exposesPathDevice置为非真,那么插件只对一个多路径逻辑单元呈现一个设备文件名。如果MP_PLUGIN复。MP_AUTOFAILBACK_SUPPORT_PLUGIN表示所有设备都同样执行自动故障恢AUTOFAILBACK_SUPPORT_MPLU表示分别对每个多路径逻辑单元设置自动故障恢复。M如果autoFailbackSupport是MP_AUTOFAILBACK_SUPPORT_PLUGIN或者MP_AUTO-pluginAutofailbackEnab如果autoFailbackSupport是MP_AUTOFAILBACK_SUPP为MP_TURE时表示管理员请求启用此多路径逻辑单元自动故障恢复。如果插件的autoFail-MP_PLUGIN_PROPERTIES.autoProbingSupport描述多路径驱动程序是否支持自动探测。MP_AUTOPROBING_SUPPORT_PLUGIN表示所有设备都执行同样的自动探测。pluginAutoProbingEnabl_如果autoProbingSupport是MP_AUTOPROBING_探测功能,或未提供设置多路径逻辑单元轮询间隔的接口。如果该属性值和插件的probingPoll-GROUP.supportsLuAssignment为真。表示MP_AssignLogicalUnitToTPGAPIGB/T37982—2019/ISO/此API支持两类事件:●可见性变化-对象出现或消失;●属性变化-对象的属性变化。API允许客户端注册或注销每一类事件。注册表提供客户端的回调功能的地址,以备事件发生时调用。客户端可以为事件指定一个特定的对象类别(默认为所有对象类别)。客户端可以为事件指定一个特定的插件(默认为所有插件)。多个调用支持注册对象类型子集和插件子集。客户端还可以指定“调用者数据”,调用者可以此将其用于纠正源于注册表的事件。插件保存调用者数据,并在返回事件时附加此数据。5.6API概念符合本标准的多路径管理API实现应便于在配置由多家供应商提供和不同时间装、卸的多路径实现时采用通用管理方法。这种动态安装和拆卸应按某种软件结构来执行;这种软件结构可以是OS(操作系统)特定的并且由OS供应商充分文件化的,也可以是按本标准中定义的与O显示为强制性的、但与操作系统特定实现无关的功能,应返回MP_STATUS_SUCCESSDeregristerPlugin),应用程序不必编码特定的基础实现。多路径管理API可以使用库与插件的组合来实现。库的一个功能是加载插件,并分发管理应用程序的请求到相应的插件。在操作系统无关的实现中,操作系统供应商,HBA卡供应商,或目标设备供应商提供插件管理一组目标设备。典型的情况是,插件得到库提供的通用格式的请求,然后将该请求转换成供应商特定格式,转发给供应商的设备驱动程序。实际情况下插件可能使用DLL或共享库与设备驱动程序交互。也可能同多个设备驱动程序交互。插件用于执行其工作的方式完全取决于特定的供应商。尽管很少见,但两个插件可能对同一个物理设备都有一个实例。这种情况可能发生在发起者端口,目标端口甚至逻辑单元上。客户端通过检测某些属性来确定这种等价情况,这些属性包含由硬件本身报告的名称/ID(例如,用于FC端口的几个端口WWN)。如果客户端应用程序运行在多个主机上,此方法同样适用于发现是否同一个逻辑单元目标端口连接在多个主机上。这样做,有助于客户端保留一个汇集了几个插件的信息的实例。如果实例重叠,其结果之一是,几个插件可能向客户端报告同一个本架构对系统引导时间没有要求。插件在安装时注册到通用库。通常是在MP驱动程序(和/或客户端管理软件)安装时完成。注册信息长久保存在注册表或配置文件中(见7.37)。多路径管理API的一个核心元素是对象标识符(OID)。OID是一种“唯一地”标识对象的结构。唯一地这个词加引号的原因是,同一个OID有可能被重复用于代表不同的对象,尽管很少见。OID包含3个字段:a)对象类型。标识该OID代表的对象的类型,例如,端口,逻辑单元等。b)对象所有者标识符。这是一个编号,用于唯一地标识对象的所有者。所有者可能是库,或者是拥有对象的某个插件。c)对象序号。这是一个编号,对象所有者将它或可能是它与对象类型的组合用于标识某对象。使用库的客户端应将OID看做不透明的。客户端只应使用文件化的API访问该OID中的信息。任何时候只能有一个OID来代表它。不允许同时有多个OID代表同一个对象。遵循这个规则有时比例如,假设某HBA端口处于某系统中。该端口会有一个OID。如果该HBA卡在与之关联的插件a)该HBA端口能保留原来的OID;b)该HBA端口对象得到新的OID,原来的OID不再使用。上例仅是同一个HBA的插拔。如果是在运行特定插件或库实例时拔下某个HBA后安装另外一个系统中以前没有的HBA,那么,应给这个新安装的HBA分配一个新的OID。插件和库可以通过对象序号或对象类型与对象序号的组合,在自己的对象域对象序号的重用应谨慎,尽可能防止由于打因为不要求插件或库保留对象序号,所以使用该库的客户端不应使用保留的自己的各个实例OID列表包含0个或多个OID。有一些API,例如MP_GetTargetPortOidList,它们返回OID列表。如果客户端不再使用某OID列表,该类型定义为wchar_t(wchar_t是ISO/IEC9899:1999定义的C语言标准中的一部分),近期的C类型定义为字符,仅用于不支持宽字节字符的上下文中,如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错误通常在I/O请求没有正常完成时被检测到。此状态变化中涉及的I/O请求可能已经由多路径插件/驱动程序或用户程序发布了。本标准不要求插件/驱动程序轮询错误状typedefvoid(*MP_OBJECT_VISIBILITY_FN)(/*in*/MP_BOOLbecomingVisible,/*in*/MP_OID_MP_BO0L值,表示由pOidList规定的对象列表已经可见或者消失。MP_TRUE值表示这pOidList对象ID列表,其可见性处于变化中。引用的所有对象应是同一类型(不同类型可能有不同的pCallerData值)。引用的所有的对pCallerData传递给MP_RegisterForObjectVisibilityChange的pCallerData。可由调用者用来纠正源于注该类型用于声明可以结合APIMP_RegisterForObjectVisibilityChanges和MP_DeregisterForOb-jectVisibilityChanges当客户端功能结束功能使用pOidList引用的列表时,应通过调用MP_FreeOidList列表释放typedefvoid(*MP_OBJECT_PROPERTY_FN)(/*in*/MP_OID_LIST*pOidList,pOidList同的pCallerData值)。pCallerData传递给MP_RegisterForObjectPropertyChanges的pCallerData。可由调用者用来纠正源于注册表的事件。该类型通常用来声明可以结合MP_RegisterForObjectPropertyChanges和MP_DeregisterForOb-功能当客户端功能结束使用pOidList引用的列表时,应通过调用MP_FreeOidList列表释放pOidList使用的内存。常量#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{指定对象类型。当对象ID作为参数提供给API时,库使用此值来确保提供的对象类型适合于所调用的API。库确定的编号,它用于唯一地标识一个对象的所有者。对象的所有象ID作为参数提供给API时,库使用此值来确定它是否应处理调用本身或将调用指向一个API的客户端应将此结构视为不透明的。应使用适当的API(例如MP_GetObjectType和MP_格式typedefstruct_MP_OID_LIST{oids阵列中OID的数量。OID的变长阵列。在此阵列中有oidCount个OID。此结构由多个API用于返回对象列表。由API返回的此结构的任何实例都应由客户端使用MP_虽然oids被声明为1个MP_OID结构的阵列,但它实际上可以包含#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当客户端请求激活目标端口组(使用APIMP_SetTPGAccess)时,使用该状态。但是并不关注这些端口组是否处在活跃且最佳化/活跃但非最佳化状态。该值不在属性中返回。该值未该枚举类型提供了ISO/IEC14776-453(SPC-3)里面描述的目标端口(组#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_表示负载均衡对象类型以最少IO为准则选择转发请求的路径的负载均衡算法。MP_LOAD_BALANCE_TYPE_DEVICE表示负载均衡算法对于该逻辑单元相关的MP_DEVICE_PRODUCT_PROPERTIES中指定MP_LOAD_BALANCE_TYPE_LBAMP_LOAD_BALANCE_TYPE_FAILO当插件/驱动程序确认设备支持SCSI2RESERVE/RELEASE时,在MP_DEVICE_PROD-UCT_PROPERTIES中设置该常量。由API客户端用来表明SCSI2保留策略正在被使用,MP_LOAD_BALANCE_TYPE_PROP表示负载均衡算法是专有的。其中的位掩码支持多达16种专有类型。插件对于设备类型的特定负载均衡类型的支持,通过MP_DEVICE_PRODUCT_PROPERTIES的实例表示。如果该属性是MP_LOAD_BALANCE_TYPE_DEVICE_PRODUCT,那么逻辑单元的供该值设置为0。见MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES。typedefstruct_MP_PROPRIETARY_PROPERTY{Name一个包含专有属性的名字的空字符结尾的UCS字符串。一个包含关联专有属性的值的空字符结尾的UCS字符串。typedefstruct_MP_PROPRIETARY_LOAD_BALANCE_PROPERTIESMP_LOAD_BALANCE_TYPEtypeIndex;MP_UINT32proprietaryPropertyCount;MP_PROPRIETARY_PROPERTYproprietaryProperties[8];表示供应商特定的负载均衡算法的数值(大于或等于65536)。NameproprietaryPropertyCou所支持的专有属性的数量(小于或等于8)。proprietaryProperti这个结构是可选的,并允许供应商在逻辑单元和插件属性上使用的负载平见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没有逻辑单元名称的解释。不鼓励使用此值,这样的用法仅适用于名字不是来自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该实现支持各个插件和多路径逻辑单元级的自动故障恢复和API。动故障恢复,则它支持MP_SetFailbackPollingRateAPI,或者应将MP_PLUGIN_PROPERTIESbackPollingRateMax设置为0(表示不执行轮询或者轮询速率不可调)。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驱动程序有更多的路径权值设定能力,可以适当设置此属性。一个枚举类型,指出此实现是支持插件级的或多路径逻辑单元级的自动故障恢复、或两者皆支持或者均不支持。pluginAutoFailbackEnab一个布尔型的值,表示支持插件级的自动故障恢复。如果autoFailbackSupport为MP_AU-TOFAILBACK_SUPPORT_NONE或者MP_AUTOFAILB这个属性是未定义的。_驱动程序支持的自动故障恢复的最大轮询间率(单位为秒)。如果autofailbackSupport为MPAUTOFAILBACK_SUPPORT_NONE或者MP_AUTOFAILBACK_SUPPORT_MPLU,_那么这个属性是未定义的。如果插件/驱动程序支持自动故障恢复但非通过轮询也没提供设置轮询率,那么这个属性设置为0。这个属性值是插件设置的,用户不能设置。当前的插件相关自动故障恢复轮询率(单位为秒)。如果autofailbackSupport为MP_AUTO-FAILBACK_SUPPORT_NONE或者MP_AUTOFAILBACK_SUPPORT_MPLU,那么此属性是未定义的。一个枚举类型,表示此实现是支持插件级的或多路径逻辑单元级的自动探测,或者两者都支pluginAutoProbingEnabl一个布尔型的值,表示支持插件级的自动探测。如果autoProbingSupport为MP_AUTO-PROBING_SUPPORT_NONE或者MP_AUTOPROBING_SUPPORT_MPLU,那么这个属性是未定义的。驱动程序支持的插件级探测最大轮询率(单位为秒)。如果autoProbingSupport为MP_AU-TOPROBING_SUPPORT_NONE或者MP_AUTOPROBING_SUPPORT_MPLU,那么这个属性为未定义的。如果插件/驱动程序支持非轮询的探测或没有提供设置探测轮询率的方式,那么此属性的值设置为0。这个值是插件设置的,用户不能设置。当前插件自动探测率(单位为秒)。如果autoProbingSupport为MP_AUTOPROBING_SUP-PORT_NONE或者MP_AUTOPROBING_SUPPORT_MPLU,那么这个属性为未定义。负载均衡类型,若非管理员强行指定则由设备驱动程序使用(没有对应的MP_DEVICE_PRODUCT_PROPERITIES实例)。具有与MP_DEVICE_PRODUCT_PROPERTIES实例匹配的供应商、产品及修订版本属性的任何逻辑单元将默认一个设备特定的负载均衡类型。proprietaryPropertyCoun所支持的专有属性的数量(小于或等于8)。proprietaryProperti专有属性名称/值对列表。typedefstruct_MP_DEVICE_PRODUCT_PROPE标识设备产品供应商的8字节ASCII数据。对应于SCSIINQUIRY响应中的VENDORI-product16字节ASCII数据。对应于SCSIINQUIRY响应中的PRODUCTIDENTIFICATION字4字节ASCII数据。对应于SCSIINQUIRY响应中的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标识设备产品供应商的8字节ASCII数据,对应于SCSIINQUIRY响应中的VENDORI-product16字节ASCII数据。对应于SCSIINQUIRY响应中的PRODUCTIDENTIFICATION字4字节ASCII数据。对应于来自SCSIINQUIRY响应的PRODUCTREVISIONLEVEL字用字节0设置为空。逻辑单元组标识符,并且插件不具备该逻辑单元组的专有技术,那么此字段应设置为的autoFailbackSupport值为MP_AUTOFAILBAC性为MP_AUTOFAILBACK_SUPPORT_NONE或者MP_AUTOFAILBACK_SUPPORT_ProbingSupport值为MP_AUTOPROBING_SUPPORT_PLUGINANDMPLU,且MP_UN-没有提供一个接口为多路径逻辑单元设置轮询率。如果这个属性和插件的probingPoll-为MP_AUTOPROBING_SUPPORT_NONE或者MP_AUTOPROBING_SUPPORT_PLU-toProbingSupport属性为MP_AUTOPROBING_SUPPORT_NONE或者MP_AUTO-proprietaryPropertyCoutypedefstruct_MP_PATH_LOGICAL_UNIT_PROPERTIESMP_CHARdeviceFileNameSCSI架构模型(SAM)定义的8字节SCSI逻辑busNumberportNumbertypedefstruct_MP_INITIATOR_PORT_PROPERTIES{MP_PORT_TRANSPORT_TYPEportType;MP_CHARosDeviceFile[256];portID端口名称。此名称宜为遵循传输层特定标准定义的全球唯一的名字;例如FC端口的WW-portType代表系统上的端口的OS中的设备文件名。见A.2。表2不同端口类型对PortID的实现要求端口类型MP_PORT_TRANSPORT_TYPE_MPNMP_PORT_TRANSPORT_TYPE和十六进制数字(例如*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为保留值。如果目标设备不支持此接typedefstruct_MP_TARGET_PORT_GROUP_PROPERTIES{MP_ACCESS_STATE_TYPEaccessState;如果目标设备支持显式命令设置目标端口组的访问状态,则设为真(例如SCSISETtypedefstruct_MP_TPG_STATE_PAIR有很多API返回对象的属性。这些API命名格式一般为Puget<object-type>Properties,MP_GetTargetPortProp一些API返回的是和其他对象相关的一些对象的ID。例如,MP_GetTargetPortOIDList含目标端口组的目标端口对象的ID列表。例如,返回包执行多路径任务的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典型的客户端任务首先是通过调用一系列API发现一个子集API。一旦这个子集被发现,客户端图5帮助开发者理解在发现过程中会使用到哪些API。虚线旁包括功能名称,客户端将功能用以tOIDListtOIDList路径逻辑单元多路径逻辑单元多路径插件目标端口组发起端口目标端口图5与图1中对象相关的API一个模型子集的发现过程通常开始于多路径库(左上),通过调用GetPluginOidList找到关联的插件(沿着虚线),然后使用GetPluginProperties获取插件的详细信息。之后,客户端根据具体的任务选择通过哪类API来导航。如果任务需要发起者端口列表,沿着虚线到发起者端口(调用GetInitiator-PathOidList返回路径列表。可以使用同样的跳越方法来确定哪些API功能在发现该模型的各种子集MP_STATUSMP_AssignLogicalUnitToTPG(一个MP_TARGET_PORT_GROUP对象ID。管理员希望将逻辑单元分配给处于活跃访问luOid一个MP_MULTIPATH_LOGICAL_UNIT对MP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOMP_GetAssociatedTPGMP_TARGET_PORT_GROUP_PROPERTIES.supportsLuAMP_STATUSMP_CancelOverridePath(一个MP_MULTIPATH_LOGICAL_UNIT对象ID。MP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA对象logicalUnitOid有除MP_MULTIPATH_LOGICAL_UNIT之外的类型子字段时返回MP_STATUS_OBJECT_NOT对象logicalUnitOid所有者ID或对象序列号无效时返回此值。仅在插件属性中的canOverridePaths为真时才有效。需要对比的两个对象ID。两个对象ID的所有字段将会被逐一比对是否相等。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该插件将不再由公共库调用。此API不会从正在运行的库实例动态删除插件。而是阻止当前未MP_STATUSMP_DisableAutoFailback(oidMP_STATUS_INVALID_OBJE当oid未指向任何有效的对象类型时返回此值。通常发生在未初始化的对象ID传递给此接MP_STATUS_INVALID_PARA当oid的类型子字段不是MP_OBJECT_TYPE_PLUGIN或MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT当oid所有者ID或对象序列号无效时返回此值。不支持此API时返回此值。如果MP_PLUGIN_PROPERTIES.autoProbingSupported不是MP_AUTOPROBING_SUPPORT_MP_STATUSMP_DisableAuoidMP_STATUS_INVALID_OBJE当oid未指向任何有效的对象类型时返回此值。通常发生在将未初始化的对象ID传递给此APIMP_STATUS_INVALID_PARA当oid的类型子字段不是MP_OBJECT_TYPE_PLUGIN或MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT当oid所有者ID或对象序列号无效时返回此值。不支持此API时返回此值。如果MP_PLUGIN_PROPERTIES.autoProbingSuppoidMP_STATUS_INVALID_OBJEMP_STATUS_OBJECT_NOMP_STATUS_INVALID_PARA此API设置MP_PATH_LOGICMP_STATUSMP_EnableAoidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA当oid的类型子字段不是MP_OBJECT_TYPE_PLUGIN和MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT当oid所有者ID或者对象序列号无效时返回此值。支持如果MP_PLUGIN_PROPERTIES.autofailbacksupported值不为MP_AUTOFAILBACK_SUP-7.12MP_EnableAutoProbingMP_STATUSMP_EnableAutoProbing(oid插件或多路逻辑单元的对象ID。MP_STATUS_INVALID_OBJE当oid未指向任何有效的对象类型时返回此值。通常发生在将未初始化的对象ID传递给此MP_STATUS_INVALID_PARA当oid的类型子字段不是MP_OBJECT_TYPE_PLUGIN和MP_OBJECT_TYPE_MUL-MP_STATUS_OBJECT_NOT当oid所有者ID或者对象序列号无效时返回此值。如果MP_PLUGIN_PROPERTIES.autofailbacksupported的值不为MP_AUTOFAILBACK_oidMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NO此API设置MP_PATH_LOGICAL_UNIT_PROPERTIES.disabled的值为非pOidListMP_STATUS_INVALID_PARA客户端应释放由任何API使用此功能返回的所有MP_ODI_LIST结构。获取与指定的多路径逻辑单元、发起者端口或目标端口相关联的所有路径逻辑单元的对象ID的MP_STATUSMP_GetAssociatedPathOoidppList指向某个指向MP_OID_LIST结构的指针的指针。成功返回时,将包含指向MP_OID_LIST的指针。MP_OID_LIST包含与指定的(多路径)逻辑单元、发起者端口发起者端口或目标端口oid相关联的所有路径的对象ID。MP_STATUS_INVALID_PARA当ppList为空或指定不可写入数据的内存区域或oid有除MP_OBJECT_TYPE_MUL-TIPATH_LU,MP_OBJECT_TYPE_INITIATOR_PORT或MP_OBJECT_TYPE_MP_STATUS_INVALID_OBJE当oid未指向任何有效的对象类型时返回。通常发生在将未初始化的对象ID传递给此APIMP_STATUS_OBJECT_NOT当oid所有者ID或对象序列号无效时返回此值。MP_GetPathLogicalUnitPr7.16MP_GetAssociatedPlu获取与指定对象ID关联的插件的对象ID。MP_STATUSMP_GetAssociatedPluginOid(/*out*/MP_OID*pPluginOidoid从先前的API调用接收到的对象的对象ID。pPluginOid指向调用者分配的MP_OID结构的指针。成功返回时,将包含与由oid指定的对象关联的插MP_STATUS_INVALID_OBJE当oid未指向任何有效的对象类型时返回此值。通常发生在将未初始化的对象ID传递给此MP_STATUS_INVALID_PARAMP_STATUS_OBJECT_NOT当oid所有者ID无效时返回。7.17MP_GetAssociate获取包含与指定的多路径逻辑单元关联的目标端口组的对象ID的列表。MP_STATUSMP_GetAssociatedTPGOidList(参数oid多路径逻辑单元的对象ID。ppListMP_STATUS_INVALID_OBJEMP_STATUS_INVALID_PARA当ppList为空或指向无法写入数据的内存区域或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当实现不支持该API时返回此值。MP_GetDeviceProduct获取与该插件关联的所有发起者端口的对象ID的列表。原型MP_STATUSMP_GetInitiatorPortOioid插件的对象ID。ppList指向某个指向MP_OID_LIST结构的指针的指针。成功返回时,将包含一个指向MP_OID_MP_STATUS_INVALID_OBJE当oid未指向有效对象类型时返回此值。通常发生在将未初始化的对象ID传递给此API的MP_STATUS_INVALID_PARA_MP_STATUS_OBJECT_NOT当oid所有者ID或对象序列号无效时返回此值。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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论