1 a.dunfey 1.1 // ===================================================================
2 // Title: Device_ProtocolController
3 // $State: Exp $
4 // $Date: 2004/11/29 18:31:42 $
5 // $RCSfile: Device_ProtocolController.mof,v $
6 // $Revision: 1.16.2.3 $
7 // ===================================================================
8 //#pragma inLine ("Includes/copyright.inc")
9 // Copyright 1998-2005 Distributed Management Task Force, Inc. (DMTF).
10 // All rights reserved.
11 // DMTF is a not-for-profit association of industry members dedicated
12 // to promoting enterprise and systems management and interoperability.
13 // DMTF specifications and documents may be reproduced for uses
14 // consistent with this purpose by members and non-members,
15 // provided that correct attribution is given.
16 // As DMTF specifications may be revised from time to time,
17 // the particular version and release date should always be noted.
18 //
19 // Implementation of certain elements of this standard or proposed
20 // standard may be subject to third party patent rights, including
21 // provisional patent rights (herein "patent rights"). DMTF makes
22 a.dunfey 1.1 // no representations to users of the standard as to the existence
23 // of such rights, and is not responsible to recognize, disclose, or
24 // identify any or all such third party patent right, owners or
25 // claimants, nor for any incomplete or inaccurate identification or
26 // disclosure of such rights, owners or claimants. DMTF shall have no
27 // liability to any party, in any manner or circumstance, under any
28 // legal theory whatsoever, for failure to recognize, disclose, or
29 // identify any such third party patent rights, or for such party's
30 // reliance on the standard or incorporation thereof in its product,
31 // protocols or testing procedures. DMTF shall have no liability to
32 // any party implementing such standard, whether such implementation
33 // is foreseeable or not, nor to any patent owner or claimant, and shall
34 // have no liability or responsibility for costs or losses incurred if
35 // a standard is withdrawn or modified after publication, and shall be
36 // indemnified and held harmless by any party implementing the
37 // standard from any and all claims of infringement by a patent owner
38 // for such implementations.
39 //
40 // For information about patents held by third-parties which have
41 // notified the DMTF that, in their opinion, such patent may relate to
42 // or impact implementations of DMTF standards, visit
43 a.dunfey 1.1 // http://www.dmtf.org/about/policies/disclosures.php.
44 //#pragma inLine
45 // ===================================================================
46 // Description: The Device Model extends the management concepts that
47 // are related to LogicalDevices. This file defines
48 // the concepts and classes for Protocol Controllers.
49 //
50 // The object classes below are listed in an order that
51 // avoids forward references. Required objects, defined
52 // by other working groups, are omitted.
53 // ==================================================================
54 // Change Log for v2.8 Final
55 // CR1202 - Experimental to Final for Device
56 //
57 // Change Log for v2.8 Final
58 // CR1201 - Fix use of Privilege/Identity in
59 // CreateProtocolControllerWithPorts()
60 // CR1223 - Fix ambiguity in ProtocolControllerMaskingCapabilities
61 //
62 // Change Log for v2.8 Preliminary
63 // CR1015 - Initial ProtocolController definition
64 a.dunfey 1.1 // CR1007 - Addition of ControllerConfigurationService and
65 // StorageMaskingService
66 // CR1040 - Improves CreateProtocolController by allowing
67 // atomic creation with permissions.
68 // CR1055 - Remove ConnectionRole from ProtocolController
69 // Add UsageRestriction to NetworkPort
70 // CR1082 - Change StorageMaskingCapabilities to be
71 // ProtocolControllerMaskingCapabilities
72 // CR1108 - Change CreatePortProtocolController to
73 // CreateProtocolControllerWithPorts
74 //
75 // ==================================================================
76
77 #pragma locale ("en_US")
78
79
80 // ===================================================================
81 // ProtocolController
82 // ===================================================================
83 [Abstract, Version ( "2.8.0" ), Description (
84 "ProtocolController is a superclass for grouping controllers "
85 a.dunfey 1.1 "that are used to control the operation and function of "
86 "sophisticated devices that instantiate a protocol such as "
87 "SCSI. Simpler 'bus' and device controllers are modeled using "
88 "the CIM_Controller class.")]
89 class CIM_ProtocolController : CIM_LogicalDevice {
90
91 [Description (
92 "Maximum number of Units that can be controlled by or "
93 "accessed through this ProtocolController.")]
94 uint32 MaxUnitsControlled;
95 };
96
97 // ===================================================================
98 // SCSIProtocolController
99 // ===================================================================
100 [Version ( "2.8.0" ), Description (
101 "SCSIProtocolController is a type of ProtocolController, "
102 "managing a SCSI interface.")]
103 class CIM_SCSIProtocolController : CIM_ProtocolController {
104 };
105
106 a.dunfey 1.1 // ===================================================================
107 // ProtocolControllerForDevice
108 // ===================================================================
109 [Association, Abstract, Version ( "2.8.0" ), Description (
110 "This association indicates a subclass of LogicalDevice (for "
111 "example a Storage Volume) is connected through a specific "
112 "ProtocolController. In many situations (for example storage "
113 "LUN masking), there may be many of these associations used to "
114 "relate to different objects. Therefore subclasses have been "
115 "defined to optimize enumeration of the associations.")]
116 class CIM_ProtocolControllerForDevice : CIM_Dependency {
117
118 [Override ( "Antecedent" ), Description (
119 "The ProtocolController.")]
120 CIM_ProtocolController REF Antecedent;
121
122 [Override ( "Dependent" ), Description (
123 "The controlled Device.")]
124 CIM_LogicalDevice REF Dependent;
125
126 [Description (
127 a.dunfey 1.1 "Address of the associated Device in the context of the "
128 "Antecedent Controller.")]
129 string DeviceNumber;
130
131 [Description (
132 "This property describes the priority given to accesses of "
133 "the device through this Controller. The highest priority "
134 "path will have the lowest value for this parameter.")]
135 uint16 AccessPriority;
136
137 [Description (
138 "The State property indicates whether the Controller is "
139 "actively commanding or accessing the device (value=2) or "
140 "not (value=3). Also, the value, \"Unknown\" (0), can be "
141 "defined. This information is necessary when a LogicalDevice "
142 "can be commanded by, or accessed through, multiple "
143 "ProtocolControllers."),
144 ValueMap { "0", "2", "3" },
145 Values { "Unknown", "Active", "Inactive" }]
146 uint16 AccessState;
147 };
148 a.dunfey 1.1
149 // ===================================================================
150 // AssociatedProtocolController
151 // ===================================================================
152 [Association, Version ( "2.8.0" ), Description (
153 "This association is used to define a hierarchy relationship "
154 "between ProtocolControllers. This subclass is provided so that "
155 "an enumeration of related ProtocolControllers can be performed "
156 "without retrieving any connected StorageVolumes, "
157 "MediaAccessDevices or LogicalPorts.")]
158 class CIM_AssociatedProtocolController : CIM_ProtocolControllerForDevice {
159
160 [Override ( "Antecedent" ), Description (
161 "The 'upstream', Antecedent ProtocolController.")]
162 CIM_ProtocolController REF Antecedent;
163
164 [Override ( "Dependent" ), Description (
165 "The 'downstream' Dependent ProtocolController.")]
166 CIM_ProtocolController REF Dependent;
167 };
168
169 a.dunfey 1.1 // ===================================================================
170 // ProtocolControllerForPort
171 // ===================================================================
172 [Association, Version ( "2.8.0" ), Description (
173 "This association is used to define a relationship between a "
174 "ProtocolController and a LogicalPort. This subclass is "
175 "provided so that an enumeration of related controllers and "
176 "ports can be performed without retrieving any other "
177 "controllers or connected units.")]
178 class CIM_ProtocolControllerForPort : CIM_ProtocolControllerForDevice {
179
180 [Override ( "Antecedent" ), Description (
181 "The ProtocolController.")]
182 CIM_ProtocolController REF Antecedent;
183
184 [Override ( "Dependent" ), Description (
185 "The LogicalPort 'behind' the ProtocolController.")]
186 CIM_LogicalPort REF Dependent;
187 };
188
189 // ===================================================================
190 a.dunfey 1.1 // ProtocolControllerForUnit
191 // ===================================================================
192 [Association, Version ( "2.8.0" ), Description (
193 "This association is used to define a relationship between a "
194 "ProtocolController and an exposed Logical Unit (for example a "
195 "Storage Volume or a MediaAccessDevice such as a tape drive). "
196 "An example of the use of this association is SCSI, where it "
197 "link the target controller and Logical Units. This subclass is "
198 "provided so that an enumeration of related controllers and "
199 "units can be performed without retrieving any connected ports "
200 "or other controllers.")]
201 class CIM_ProtocolControllerForUnit : CIM_ProtocolControllerForDevice {
202
203 [Override ( "Antecedent" ), Description (
204 "The ProtocolController.")]
205 CIM_ProtocolController REF Antecedent;
206
207 [Override ( "Dependent" ), Description (
208 "The logical unit (eg StorageVolume) 'behind' the "
209 "ProtocolController.")]
210 CIM_LogicalDevice REF Dependent;
211 a.dunfey 1.1 };
212
213 // ===================================================================
214 // ProtocolControllerAccessesUnit
215 // ===================================================================
216 [Association, Version ( "2.8.0" ), Description (
217 "This association is used to define a relationship between a "
218 "protocol controllers and a Logical Unit (for example a Storage "
219 "Volume or Media Access Device) controlled by the controller. "
220 "This association is used instead of ProtocolControllerForUnit "
221 "to indicate a 'controlled through' relationship rather than a "
222 "'controlled by' one. An example is SCSI where this association "
223 "is used to indicate a target/initiator relationship.")]
224 class CIM_ProtocolControllerAccessesUnit : CIM_ProtocolControllerForDevice {
225
226 [Override ( "Antecedent" ), Description (
227 "The protocol controller.")]
228 CIM_ProtocolController REF Antecedent;
229
230 [Override ( "Dependent" ), Description (
231 "The logical unit (eg StorageVolume).")]
232 a.dunfey 1.1 CIM_LogicalDevice REF Dependent;
233
234 [Description (
235 "The number of the dependent's target protocol controller. "
236 "As an example, in SCSI this is the Target ID.")]
237 string TargetControllerNumber;
238 };
239
240 // ==================================================================
241 // ControllerConfigurationService
242 // ==================================================================
243 [Version ( "2.8.0" ), Description (
244 "The ControllerConfigurationService provides methods that allow "
245 "a client to manipulate LUN Masking in a storage system.")]
246 class CIM_ControllerConfigurationService : CIM_Service {
247
248 [Description (
249 "This method creates an appropriate subclass of "
250 "ProtocolController. In addition to its role of controlling "
251 "downstream devices, a ProtocolControl is used to provide a "
252 "central management point for access control with respect to "
253 a.dunfey 1.1 "those devices. Certain storage system implementations "
254 "across multiple vendors require permissions to be "
255 "established atomically with the creation of a "
256 "ProtocolController. This method provides this capability "
257 "via the Privilege and Identity properties. By supplying "
258 "appropriate information in those properties, this method "
259 "will assure that appropriate AuthorizedTarget and "
260 "AuthorizedSubject associations, (as defined in the User and "
261 "Security Model), are instantiated to restrict access to the "
262 "logical devices 'behind' it. \n"
263 "If multiple target ports are specified in the Ports input "
264 "parameter, all expose the same view (i.e., have the same "
265 "unit numbers and permissions). This method does not create "
266 "the port instances, but does create "
267 "ProtocolControllerForPort associations between the "
268 "specified ports and the new ProtocolController. The new "
269 "ProtocolController is defined to be weak to the same System "
270 "as the ControllerConfigurationService."),
271 ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
272 "4097", "4098", "4099..32767", "32768..65535" },
273 Values { "Success", "Not Supported", "Unspecified Error",
274 a.dunfey 1.1 "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
275 "ID Parameter Missing or Not Unique",
276 "Hardware Implementation Requires Null Ports Parameter",
277 "Busy", "Method Reserved", "Vendor Specific" }]
278 uint32 CreateProtocolControllerWithPorts (
279 [IN, Description (
280 "The string to be used in the ElementName of the new "
281 "ProtocolController."),
282 ModelCorrespondence { "CIM_ProtocolController.ElementName" }]
283 string ElementName,
284 [IN, Description (
285 "Array of strings containing representations of "
286 "references to instances of CIM_LogicalPort (or subclass) "
287 "instances. This is the list of target ports that are "
288 "associated to the ProtocolController. "
289 "ProtocolControllerForPort associations are created by "
290 "the instrumentation associating the new "
291 "ProtocolController to these ports. If this parameter is "
292 "null, then all ports in the storage system (this "
293 "Service's 'scoping' System and all its ComponentCS "
294 "Systems) are attached to the new ProtocolController.")]
295 a.dunfey 1.1 string Ports[],
296 [IN, Description (
297 "The protocol type for the new ProtocolController."),
298 ValueMap { "0", "1", "2" },
299 Values { "Unknown", "Other", "SCSI" },
300 ModelCorrespondence { "CIM_SCSIProtocolController" }]
301 uint16 Protocol,
302 [IN, Description (
303 "Reference to a CIM_Privilege (or subclass) instance to "
304 "be used as a template. If supplied, it has a 1:1 "
305 "correspondence with the Identity parameter and this "
306 "method will atomically create the new ProtocolController "
307 "instance and related AuthorizedPrivilege, "
308 "AuthorizedTarget and AuthorizedSubject instances. \n"
309 "Note: if ProtocolControllerRequiresAuthorizedIdentity is "
310 "true, then the Identity/Privilege pair MUST be "
311 "specified. If false, then the Identity/Privilege pair "
312 "MUST NOT be specified."),
313 ModelCorrespondence { "CIM_ControllerConfigurationService."
314 "CreateProtocolControllerWithPorts.Identity" }]
315 CIM_Privilege REF Privilege,
316 a.dunfey 1.1 [Description (
317 "Reference to a CIM_ManagedElement (or subclass) "
318 "instance. This ManagedElement MUST be either a "
319 "CIM_Identity, or a CIM_Collection (or subclass, eg. "
320 "SystemSpecificCollection, Role, or Group) that has "
321 "CIM_Identities as MemberOfCollection. If "
322 "ProtocolControllerMaskingCapabilities.ProtocolControllerSupportsCollection "
323 "is false, the reference MUST be to a CIM_Identity (or "
324 "subclass). If present, it has a 1:1 correspondence with "
325 "the Privilege property. If present, this method will "
326 "atomically create the new ProtocolController instance "
327 "and instantiate a missing AuthorizedSubject association "
328 "between the Privilege/Identity pair; and instantiate an "
329 "AuthorizedTarget association between the "
330 "AuthorizedPrivilege and the new ProtocolController. \n"
331 "Note: if ProtocolControllerRequiresAuthorizedIdentity is "
332 "true, then at least the Identity/Privilege pair MUST be "
333 "specified."),
334 ModelCorrespondence { "CIM_ControllerConfigurationService."
335 "CreateProtocolControllerWithPorts.Privilege" }]
336 CIM_ManagedElement REF Identity,
337 a.dunfey 1.1 [IN ( false ), OUT, Description (
338 "A reference to the new ProtocolController that is "
339 "created.")]
340 CIM_ProtocolController REF ProtocolController);
341
342 [Description (
343 "The method deletes an instance of ProtocolController and "
344 "all associations in which this ProtocolController is "
345 "referenced."),
346 ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
347 "4097", "4098..32767", "32768..65535" },
348 Values { "Success", "Not Supported", "Unspecified Error",
349 "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
350 "LogicalDevices Associated to Other ProtocolControllers Not "
351 "Deleted", "Busy", "Method Reserved", "Vendor Specific" }]
352 uint32 DeleteProtocolController (
353 [IN, Description (
354 "The ProtocolController to be deleted.")]
355 CIM_ProtocolController REF ProtocolController,
356 [IN, Description (
357 "If true, the management instrumentation provider will "
358 a.dunfey 1.1 "also delete 'child' ProtocolControllers (i.e., those "
359 "defined as Dependent references in instances of "
360 "AssociatedProtocolController where this "
361 "ProtocolController is the Antecedent reference). Also, "
362 "all direct associations involving the 'child' "
363 "ProtocolControllers will be removed.")]
364 boolean DeleteChildrenProtocolControllers,
365 [IN, Description (
366 "If true, the management instrumentation provider will "
367 "also delete LogicalDevice instances associated via "
368 "ProtocolControllerForUnit, to this ProtocolController "
369 "and its children. (Note that 'child' controllers will "
370 "only be affected if the "
371 "DeleteChildrenProtocolControllers input parameter is "
372 "TRUE). LogicalDevice instances are only deleted if there "
373 "are NO remaining ProtocolControllerForUnit associations, "
374 "to other ProtocolControllers.")]
375 boolean DeleteUnits );
376
377 [Description (
378 "This method associates a LogicalDevice subclass "
379 a.dunfey 1.1 "(specifically a StorageVolume or MediaAccessDevice "
380 "subclass) to the referenced ProtocolController. The "
381 "association is persisted as an instance of "
382 "ProtocolControllerForUnit. The management instrumentation "
383 "provider must verify that the logical unit numbers (defined "
384 "using the DeviceNumber input parameter) are unique for the "
385 "ProtocolController. When the Protocol Controller is "
386 "actively masking a device (i.e. is part of an "
387 "AuthorizedTarget association), the provider should update "
388 "the access configuration in the underlying hardware as "
389 "appropriate."),
390 ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
391 "4097", "4098", "4099", "4100", "4101..32767",
392 "32768..65535" },
393 Values { "Success", "Not Supported", "Unspecified Error",
394 "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
395 "Invalid LogicalDevice Instance", "Device Number Conflict",
396 "DeviceNumber Parameter Must Be Provided",
397 "Hardware Implementation Requires Null DeviceNumber", "Busy",
398 "Method Reserved", "Vendor Specific" }]
399 uint32 AttachDevice (
400 a.dunfey 1.1 [IN, Description (
401 "The ProtocolController instance.")]
402 CIM_ProtocolController REF ProtocolController,
403 [IN, Description (
404 "The LogicalDevice instance to attach.")]
405 CIM_LogicalDevice REF Device,
406 [IN, OUT, Description (
407 "The number assigned to "
408 "ProtocolControllerForUnit.DeviceNumber (if supported by "
409 "the hardware). Hardware support is indicated by "
410 "ProtocolControllerMaskingCapabilities.ClientSelectableDeviceNumbers). "
411 "If the hardware does not support setting the number, but "
412 "the DeviceNumber has not been established in an existing "
413 "ProtocolControllerForDevice subclass, then this "
414 "parameter's value will be used. If the DeviceNumber has "
415 "been established, then the current number will be "
416 "reused."),
417 ModelCorrespondence {
418 "CIM_ProtocolControllerForUnit.DeviceNumber" }]
419 string DeviceNumber );
420
421 a.dunfey 1.1 [Description (
422 "This method removes the ProtocolControllerForDevice "
423 "association subclass between the ProtocolController and a "
424 "LogicalDevice, such as a StorageVolume or a "
425 "MediaAccessDevice. When the ProtocolController is actively "
426 "masking a device (i.e. is part of an AuthorizedTarget "
427 "association, the management instrumentation provider should "
428 "update the hardware access configuration when DetachDevice "
429 "is called."),
430 ValueMap { "0", "1", "2", "3", "4", "5", "6..4095", "4096",
431 "4097", "4098..32767", "32768..65535" },
432 Values { "Success", "Not Supported", "Unspecified Error",
433 "Timeout", "Failed", "Invalid Parameter", "DMTF Reserved",
434 "LogicalDevice Instance not Associated with Controller",
435 "Busy", "Method Reserved", "Vendor Specific" }]
436 uint32 DetachDevice (
437 [IN, Description (
438 "The ProtocolController instance.")]
439 CIM_ProtocolController REF ProtocolController,
440 [IN, Description (
441 "The LogicalDevice instance to detach.")]
442 a.dunfey 1.1 CIM_LogicalDevice REF Device );
443 };
444
445
446 // ==================================================================
447 // ProtocolControllerMaskingCapabilities
448 // ==================================================================
449 [Version ( "2.8.0" ), Description (
450 "A subclass of Capabilities that defines the Masking-related "
451 "capabilities of a ProtocolController.")]
452 class CIM_ProtocolControllerMaskingCapabilities : CIM_Capabilities {
453
454 [Description (
455 "A list of the valid values for StrorageHardwareID.IDType."),
456 ValueMap { "1", "2", "3", "4" },
457 Values { "Other", "Port WWN", "Node WWN", "Host Name" },
458 ArrayType ( "Indexed" )]
459 uint16 ValidHardwareIdTypes[];
460
461 [Description (
462 "An array of strings describing types for valid "
463 a.dunfey 1.1 "StorageHardwareID.IDType. Used when the "
464 "ValidHardwareIdTypes includes 1 (\"Other\")."),
465 ArrayType ( "Indexed" )]
466 string OtherValidHardwareIDTypes[];
467
468 [Description (
469 "An integer enumeration indicating the way that ports per "
470 "view (ProtocolController) are handled by the underlying "
471 "storage system."),
472 ValueMap { "2", "3", "4" },
473 Values { "One Port per View", "Multiple Ports per View",
474 "All Ports share the same View" }]
475 uint16 PortsPerView = 2;
476
477 [Description (
478 "Set to true if this storage system allows the client to "
479 "specify the DeviceNumber parameter when calling "
480 "ControllerConfigurationService.AttachDevice() and "
481 "ControllerConfigurationService.AttachDevice() and Set to "
482 "false if the implementation does not allow unit numbers to "
483 "vary for a ProtocolController. However, if set to false and "
484 a.dunfey 1.1 "a Device is not the Dependent of a "
485 "ProtocolControllerForUnit association, the client must "
486 "provide a DeviceNumber parameter in "
487 "ControllerConfigurationService.AttachDevice. If set to "
488 "false and the Device is already the Dependent of a "
489 "ProtocolControllerForUnit association, then the client can "
490 "omit the DeviceNumber parameter (or supply the same value) "
491 "in subsequent ControllerConfigurationService.AttachDevice "
492 "calls.")]
493 boolean ClientSelectableDeviceNumbers = TRUE;
494
495 [Description (
496 "Set to true if this storage system supports the "
497 "AttachDevice method.")]
498 boolean AttachDeviceSupported;
499
500 [Description (
501 "Set to true if this storage system limits configurations to "
502 "a single subject hardware ID per view. Otherwise, multiple "
503 "hardware ID types can be used. The default is FALSE, that "
504 "multiple ID types may be used in a single view.")]
505 a.dunfey 1.1 boolean OneHardwareIDPerView = FALSE;
506
507 [Description (
508 "When set to false, different ProtocolContollers attached to "
509 "a LogicalPort can expose the same unit numbers. If true, "
510 "then this storage system requires unique unit numbers "
511 "across all the ProtocolControllers connected to a "
512 "LogicalPort.")]
513 boolean UniqueUnitNumbersPerPort = FALSE;
514
515 [Description (
516 "Set to true if this storage system allows a client to "
517 "create a Privilege instance with PrivilegeGranted set to "
518 "FALSE.")]
519 boolean PrivilegeDeniedSupported = FALSE;
520
521 [Description (
522 "If true, this property indicates that a Privilege/Identity "
523 "pair MUST be specified when "
524 "CreateProtocolControllerWithPorts() is called. If false, "
525 "then the Privilege/Identity pair in "
526 a.dunfey 1.1 "CreateProtocolControllerWithPorts() MUST NOT be set.")]
527 boolean ProtocolControllerRequiresAuthorizedIdentity = FALSE;
528
529 [Description (
530 "If true, this property indicates that the Identity "
531 "parameter of CreateProtocolConntrollerWithPorts() MUST "
532 "contain a reference to a CIM_Collection (or subclass) or to "
533 "a CIM_Identity (or subclass).")]
534 boolean ProtocolControllerSupportsCollections = FALSE;
535 };
536
537
538 // ===================================================================
539 // end of file
540 // ===================================================================
|