/*
Copyright(c) 1999  Microsoft Corporation

Schema Name:

	MicrosoftNLB

Abstract:

	Network Load Balancing MOF Specification.

  Created by drbeck.
*/


#pragma autorecover
#pragma classflags ("forceupdate")
#pragma namespace ("\\\\.\\Root")

instance of __NameSpace
{
  Name = "MicrosoftNLB" ;
} ;

#pragma namespace ( "\\\\.\\Root\\MicrosoftNLB" ) 

instance of __Win32Provider as $P
{
  Name                  = "Microsoft|NLB_Provider|V1.0";
  ClsId                 = "{FB223274-D72E-11d2-A420-00C04F68FE28}";
  ImpersonationLevel    = 1;
  PerUserInitialization = "FALSE";
};

instance of __InstanceProviderRegistration
{
    Provider            = $P;
    SupportsGet         = "TRUE";
    SupportsPut         = "TRUE";
    SupportsDelete      = "TRUE";
    SupportsEnumeration = "TRUE";
};

instance of __MethodProviderRegistration
{
    Provider = $P;
};

// =============================================================================
//    CIM_ManagedSystemElement
// =============================================================================
[ Abstract, 
  Description ( "The CIM_ManagedSystemElement class is the base class for the "
                 "system element hierarchy. Membership criteria: Any "
                 "distinguishable component of a system is a candidate for "
                 "inclusion in this class. \nExamples: software components, such "
                 "as files; and devices, such as disk drives and controllers, "
                 "and physical components such as chips and cards." ) : Amended, 
                 LOCALE(0x409)
]
class CIM_ManagedSystemElement
{
    [ MaxLen (64), 
      Description ( "The Caption property is a short textual description "
                    "(one-line string) of the object." ) : Amended
    ] 
  string Caption;

    [ Description ( "The Description property provides a textual description of "
                    "the object. ") : Amended
    ] 
  string Description;

    [ Description ( "The InstallDate property is a datetime value indicating when "
                    "the object was installed. A lack of a value does not indicate "
                    "that the object is not installed." ) : Amended, 
      MappingStrings {"MIF.DMTF|ComponentID|001.5"} 
    ]
  datetime InstallDate;

    [ MaxLen (256), 
      Description ( "The Name property defines the label by which the object is "
                    "known. When subclassed, the Name property can be overridden "
                    "to be a Key property." ) : Amended
    ] 
  string Name;

    [ MaxLen (10), 
      Description ( "The Status property is a string indicating the current status "
                    "of the object. Various operational and non-operational "
                    "statuses can be defined. Operational statuses are \"OK\", "
                    "\"Degraded\" and \"Pred Fail\". \"Pred Fail\" indicates that "
                    "an element may be functioning properly but predicting a "
                    "failure in the near future. An example is a SMART-enabled "
                    "hard drive. Non-operational statuses can also be specified. "
                    "These are \"Error\", \"Starting\", \"Stopping\" and "
                    "\"Service\". The latter, \"Service\", could apply during "
                    "mirror-resilvering of a disk, reload of a user permissions "
                    "list, or other administrative work. Not all such work is "
                    "on-line, yet the managed element is neither \"OK\" nor in "
                    "one of the other states.") : Amended ToSubclass, 
      ValueMap { "OK", "Error", "Degraded", "Unknown", "Pred Fail", 
                 "Starting", "Stopping", "Service" }  : Amended
    ] 
  string Status;
};
     
// =============================================================================
//    CIM_LogicalElement
// =============================================================================
  [ Abstract, 
    Description ( "The CIM_LogicalElement class is the base class for all the "
                  "components of the system that represent abstract system "
                  "components.\nExample: profiles, processes, or system "
                  "capabilities in the form of logical devices.") : Amended, 
                  LOCALE(0x409)
  ] 
class CIM_LogicalElement : CIM_ManagedSystemElement
{
};

// =============================================================================
//    CIM_Configuration
// =============================================================================
[ Description ( "The Configuration object allows the grouping of sets of "
                "parameters (defined in CIM_Setting objects) and dependencies "
                "for one or more managed system elements. The Configuration "
                "object represents a certain behavior, or a desired functional "
                "state for the managed system elements. The desired functional "
                "state is typically driven by external requirements such as "
                "time or location. For example, to connect to a mail system from "
                "'home', a dependency on a modem exists, but a dependency on a "
                "network adapter exists at 'work'. Settings for the pertinent "
                "logical devices (in this example, POTS modem and network "
                "adapter) can be defined and aggregated by CIM_Configuration. "
                "Therefore, two 'Connect to Mail' configurations may be defined "
                "grouping the relevant dependencies and CIM_Setting objects." ) 
                : Amended, LOCALE(0x409)
]
class CIM_Configuration
{
    [ Key, 
      MaxLen (256), 
      Description ( "The label by which the CIM_Configuration object is known.") 
      : Amended 
    ]
  string Name;

    [ MaxLen (64), 
      Description ( "A short textual description (one-line string) of the "
      "CIM_Configuration object") : Amended 
    ]
  string Caption;

    [ Description ("A textual description of the CIM_Configuration object.") : Amended 
    ]
  string Description;
};

// =============================================================================
//    CIM_ElementConfiguration
// =============================================================================
  [ Association, 
    Description ( "This association relates a CIM_Configuration object to one "
                  "or more managed system elements. The CIM_Configuration object "
                  "represents a certain behavior, or a desired functional state "
                  "for the associated managed system elements.") 
                  : Amended, LOCALE(0x409)
  ]
class CIM_ElementConfiguration
{
    [ Description ("The managed system element") : Amended
    ]
  CIM_ManagedSystemElement REF Element;

    [Description ( "The CIM_Configuration object that groups the settings and "
                   "dependencies associated with the managed system element") 
                   : Amended 
    ] 
  CIM_Configuration REF Configuration;
};
     
// =============================================================================
//    CIM_Setting
// =============================================================================
  [ Abstract, 
    Description ( "The CIM_Setting class represents configuration-related and "
                  "operational parameters for one or more managed system"
                  "element(s). A managed system element may have multiple setting "
                  "objects associated with it. The current operational values "
                  "for an element's parameters are reflected by properties in "
                  "the element itself or by properties in its associations. "
                  "These properties do not have to be the same values present "
                  "in the CIM_Setting object. For example, a modem may have a "
                  "setting baud rate of 56Kb/sec but be operating "
                  "at 19.2Kb/sec." ) : Amended, LOCALE(0x409)
  ]
class CIM_Setting
{
    [ MaxLen (256), 
      Description ( "The identifier by which the CIM_Setting object is known.") 
        : Amended 
    ]
  string SettingID;

    [ MaxLen (64), 
      Description ( "A short textual description (one-line string) of the "
                    "CIM_Setting object." ) : Amended
    ]
  string Caption;

    [ Description ( "A textual description of the CIM_Setting object.") : Amended
    ]
  string Description;
};

// =============================================================================
//    CIM_ElementSetting
// =============================================================================
  [ Association, 
    Description ( "CIM_ElementSetting represents the association between managed"
                  "system elements and the setting class(es) defined for them." ) 
				  : Amended, LOCALE(0x409) 
  ]
class CIM_ElementSetting
{
     [ Description ("The CIM_ManagedSystemElement reference represents the role "
                    "of the CIM_ManagedSystemElement object of the "
                    "CIM_ElementSetting association. Role: The associated managed "
                    "system element provides the element that implements the "
                    "element setting.") : Amended,  
       Min (1) 
     ]
   CIM_ManagedSystemElement REF Element;

     [ Description ( "The CIM_Setting reference represents the role of the "
                     "CIM_Setting object of the CIM_ElementSetting association. "
                     "Role: The associated setting provides the setting that "
                     "implements the element setting.") : Amended 
     ]
   CIM_Setting REF Setting;
};

// ===================================================================
//    CIM_SettingContext
// ===================================================================
[ Association, 
  Aggregation, 
  Description ( "This relationship associates a setting with one or "
                "more configuration objects. For example, a network "
                "adapter's settings could change based on the site/network "
                "to which its hosting computer system is attached.") 
                : Amended, LOCALE(0x409) 
]
class CIM_SettingContext
{
    [ Aggregate, 
      Description ( "The configuration object that aggregates the setting") 
      : Amended 
    ]
  CIM_Configuration REF Context;

    [ Description ("An aggregated setting.") : Amended
    ]
  CIM_Setting REF Setting;

};

// =============================================================================
//    CIM_System
// =============================================================================
  [ Abstract, 
    Description ( "A logical element that aggregates an enumerable set of "
                  "managed system elements. The aggregation operates as an "
                  "functional whole. Within any particular subclass of CIM_System, "
                  "there is a well-defined list of CIM_ManagedSystemElement "
                  "classes whose instances must be aggregated." ) 
                  : Amended, LOCALE(0x409) 
  ] 
class CIM_System : CIM_LogicalElement
{
    [ CIM_Key, 
      MaxLen (256), 
      Description ( "The CreationClassName property indicates the name of the "
                    "class or the subclass used in the creation of an instance. "
                    "When used with the other key properties of this class, this "
                    "property allows all instances of this class and its "
                    "subclasses to be uniquely identified.") : Amended 
    ]
  string CreationClassName;

    [ Override ("Name"),
      Key, 
      MaxLen (256), 
      Description ( "The inherited Name property serves as key of a CIM_System "
                    "instance in an enterprise environment.") : Amended 
    ] 
  string Name;

    [ MaxLen (64), 
      Description ( "The CIM_System object and its derivatives are top level "
                    "objects of CIM. They provide the scope for numerous "
                    "components. Having unique system keys is required. A "
                    "heuristic can be defined in individual system subclasses "
                    "to attempt to always generate the same system name key. "
                    "The NameFormat property identifies how the system name "
                    "was generated, using the subclass' heuristic.") : Amended 
    ] 
  string NameFormat;

    [ MaxLen (256), 
      Description ( "A string that provides information on how the primary "
                    "system owner can be reached (e.g. phone number, email "
                    "address, ...)." ) : Amended,
      MappingStrings {"MIF.DMTF|General Information|001.3"} 
    ] 
  string PrimaryOwnerContact;

    [ MaxLen (64), 
      Description ( "The name of the primary system owner.") : Amended,
      MappingStrings { "MIF.DMTF|General Information|001.4" }
    ]
  string PrimaryOwnerName;

    [ Description ( "A collection of strings that specify the roles this "
                    "system plays in the IT-environment.") : Amended 
    ] 
  string Roles[];
};

// =============================================================================
//    CIM_ComputerSystem
// =============================================================================
  [ Abstract, 
    Description ( "A class derived from CIM_System that is a special collection "
                  "of CIM_ManagedSystemElement instances. This collection "
                  "provides compute capabilities and serves as aggregation point "
                  "to associate one or more of the following elements: file "
                  "system, operating system, processor and memory (volatile "
                  "and/or non-volatile storage).") : Amended, LOCALE(0x409) 
  ]
class CIM_ComputerSystem : CIM_System
{
    [ Override ("NameFormat"), 
      Description ( "The CIM_ComputerSystem object and its derivatives are Top "
                    "Level Objects of CIM. They provide the scope for numerous "
                    "components. Having unique CIM_System keys is required. A "
                    "heuristic is defined to create the CIM_ComputerSystem name "
                    "to attempt to always generate the same name, independent "
                    "of discovery protocol. This prevents inventory and management "
                    "problems where the same asset or entity is discovered multiple "
                    "times, but can not be resolved to a single object. Use of "
                    "the heuristic is optional, but recommended. \n\n The "
                    "NameFormat property identifies how the computer system name "
                    "is generated, using a heuristic. The heuristic is outlined, "
                    "in detail, in the CIM V2 Common Model specification. It "
                    "assumes that the documented rules are traversed in order, "
                    "to determine and assign a name. The NameFormat values list "
                    "defines the precedence order for assigning the computer system "
                    "name. Several rules do map to the same Value. \n\n Note that "
                    "the CIM_ComputerSystem Name calculated using the heuristic "
                    "is the system's key value. Other names can be assigned and "
                    "used for the CIM_ComputerSystem, that better suit the "
                    "business, using Aliases." ) : Amended, 
      ValueMap { "Other", "IP", "Dial", "HID", "NWA", "HWA", "X25", 
                 "ISDN", "IPX", "DCC", "ICD", "E.164", "SNA", "OID/OSI"} 
    ]
  string NameFormat;
};
     
// =============================================================================
//    CIM_Service
// =============================================================================
[ Abstract, 
  Description ( "A logical element that contains the information necessary to "
                "represent and manage the functionality provided by a device "
                "and/or software feature. A service is a general-purpose object "
                "to configure and manage the implementation of functionality. It "
                "is not the functionality itself." ) : Amended, LOCALE(0x409)
] 
class CIM_Service : CIM_LogicalElement
{
    [ CIM_Key, 
      MaxLen (256), 
      Description ( "CreationClassName indicates the name of the class or the "
                    "subclass used in the creation of an instance. When used "
                    "with the other key properties of this class, this property "
                    "allows all instances of this class and its subclasses to be "
                    "uniquely identified.") : Amended 
    ]
  string CreationClassName;

    [ Override ("Name"), 
      Key, 
      MaxLen (256),
      Description ( "The Name property uniquely identifies the service and "
                    "provides an indication of the functionality that is managed. "
                    "This functionality is described in more detail in the "
                    "object's Description property.") : Amended 
    ] 
  string Name;

    [ MaxLen (10), 
      Description ( "StartMode is a string value indicating whether the service "
                    "is automatically started by a operating system, or only "
                    "started upon request." ) : Amended, 
      ValueMap {"Automatic", "Manual"} : Amended 
    ] 
  string StartMode;

    [ Description ( "Started is a boolean indicating whether the service has "
                    "been started (TRUE), or stopped (FALSE)." ) : Amended
    ] 
  boolean Started;

    [ Propagated ("CIM_System.CreationClassName"), 
      CIM_Key, 
      MaxLen (256), 
      Description ( "The scoping System's CreationClassName. ") : Amended 
    ] 
  string SystemCreationClassName;

    [ Propagated ("CIM_System.Name"), 
      Key, 
      MaxLen (256),
      Description ("The name of the system that hosts this service") : Amended 
    ]
  string SystemName;

    [ Description ( "The StartService method places the service in the started "
                    "state. It returns an integer value of 0 if the service was "
                    "successfully started, 1 if the request is not supported and "
                    "any other number to indicate an error." ) : Amended 
    ]
  uint32 StartService();

    [ Description ( "The StopService method places the service in the stopped "
                    "state. It returns an integer value of 0 if the service was "
                    "successfully stopped, 1 if the request is not supported and "
                    "any other number to indicate an error.") : Amended 
    ]
  uint32 StopService();

};

// =============================================================================
//    CIM_Dependency
// =============================================================================
  [ Association, 
    Abstract, 
    Description ( "A generic association to establish dependency relationships "
                  "between objects") : Amended, LOCALE(0x409) 
  ] 
class CIM_Dependency
{
    [ Description ( "Antecedent represents the independent object in this "
                    "association.") : Amended 
    ] 
  CIM_ManagedSystemElement REF Antecedent;

    [ Description ( "Dependent represents the object dependent on the Antecedent.") 
                    : Amended
    ] 
  CIM_ManagedSystemElement REF Dependent;
};

// =============================================================================
//    CIM_HostedService
// =============================================================================
[ Association, 
  Description ( "CIM_HostedService is an association between a service and the "
                "system on which the functionality resides.  The cardinality of "
                "this association is 1-to-many.  A system may host many "
                "services. services are weak with respect to their hosting "
                "system. Heuristic:  A service is hosted on the system where "
                "the logical devices or software features that implement the "
                "service are located.  The model does not represent services "
                "hosted across multiple systems.  This is modeled as an "
                "application system that acts as an aggregation point for "
                "services, that are each located on a single host." ) 
                : Amended, LOCALE(0x409)
] 
class CIM_HostedService:CIM_Dependency
{
    [ Override ("Antecedent"), 
      Max (1), 
      Min (1),
      Description ( "The hosting system" ) : Amended 
    ] 
  CIM_System REF Antecedent;

    [ Override ("Dependent"), 
      Weak,
      Description ("The service hosted on the system") : Amended 
    ] 
  CIM_Service REF Dependent;
};
     
// =============================================================================
//    CIM_ServiceServiceDependency
// =============================================================================
  [ Association, 
    Description ( "CIM_ServiceServiceDependency is an association between a "
                  "service and another service, indicating that the latter is "
                  "required to be present, required to have completed, or must "
                  "be absent for the former service to provide its functionality. "
                  "For example, boot services may be dependent upon underlying "
                  "BIOS Disk and initialization services. In the case of the "
                  "initialization services, the boot service is simply dependent "
                  "on the init services completing.  For the disk services, boot "
                  "services may actually utilize the SAPs of this service.  "
                  "This usage dependency is modeled via the "
                  "CIM_ServiceSAPDependency association." ) 
                  : Amended, LOCALE(0x409)
  ] 
class CIM_ServiceServiceDependency:CIM_Dependency
{
    [ Override ("Antecedent"), 
      Description ("The required service.") : Amended 
    ] 
  CIM_Service REF Antecedent;

    [ Override ("Dependent"), 
      Description ( "The service that is dependent on an underlying service.") : Amended 
    ] 
  CIM_Service REF Dependent;

    [ Description ( "The nature of the service to service dependency. This "
                    "property describes that the associated service must have "
                    "completed (value=2), must be started (3) or must not be "
                    "started (4) in order for the service to function.") 
                    : Amended ToSubclass,
      Values { "Unknown", "Other", "Service Must Have Completed",
               "Service Must Be Started", "Service Must Not Be Started" } : Amended 
    ]
  uint16 TypeOfDependency;

};

// =============================================================================
//    CIM_Component
// =============================================================================
[ Association, 
  Abstract, 
  Aggregation: ToSubClass, 
  Description ( "A generic association to establish 'part of' relationships "
                "between managed system elements." ) : Amended, LOCALE(0x409)
] 
class CIM_Component
{
    [ Aggregate: ToSubClass, 
      Description ( "The parent element in the association.") : Amended 
    ] 
  CIM_ManagedSystemElement REF GroupComponent;

    [ Description ("The child element in the association.") : Amended
    ] 
  CIM_ManagedSystemElement REF PartComponent;

};
     
// =============================================================================
// CIM_UnitaryComputerSystem
// =============================================================================
  [  Abstract,
     Description ( "A class derived from CIM_ComputerSystem that represents a "
                   "desktop, mobile, network PC, server or other type of a "
                   "single node computer system." ) : Amended, LOCALE(0x409)
  ] 
class CIM_UnitaryComputerSystem : CIM_ComputerSystem
{
    [ Description ( "This object contains the data needed to find either the "
                    "initial load device (its key) or the boot service to "
                    "request the operating system to start up." ) : Amended
    ]
  string InitialLoadInfo[];

    [ Description ( "The array entry of the InitialLoadInfo property, that "
                    "holds the data corresponding to booting the currently "
                    "loaded operating system." ) : Amended,
      MappingStrings { "MIB.IETF|HOST-RESOURCES-MIB.hrSystemInitialLoadDevice",
                       "MIB.IETF|HOST-RESOURCES-MIB.hrSystemInitialLoadParameters" }
    ]
  string LastLoadInfo;

    [ Description ( "If enabled (value = 4), the unitary computer system can "
                    "be reset via hardware (e.g. the power and reset buttons). "
                    "If disabled (value = 3), hardware reset is not allowed. In "
                    "addition to Enabled and Disabled, other values for the "
                    "property are also defined - \"Not Implemented\" (5), "
                    "\"Other\" (1) and \"Unknown\" (2)." ) : Amended,
      ValueMap { "1", "2", "3", "4", "5" },
      Values { "Other", "Unknown", "Disabled", "Enabled", "Not Implemented" } 
      : Amended ToSubclass,
      MappingStrings { "MIF.DMTF|System Hardware Security|001.4" }
    ]
  uint16 ResetCapability;

    [ Description ( "Boolean indicating that the computer system, with "
                    "its running operating system, support power management. "
                    "This boolean does not indicate that power management "
                    "features are currently enabled, only that the system is "
                    "capable of power management." ) : Amended
    ]
  boolean PowerManagementSupported;

    [ Description( "Indicates the specific power-related capabilities of a "
                   "computer system and its associated running operating "
                   "system. The values, 0=\"Unknown\", 1=\"Not Supported\", "
                   "and 2=\"Disabled\" are self-explanatory. The value, "
                   "3=\"Enabled\" indicates that the power management "
                   "features are currently enabled but the exact feature "
                   "set is unknown or the information is unavailable. "
                   "\"Power Saving Modes Entered Automatically\" (4) "
                   "describes that a system can change its power state "
                   "based on usage or other criteria. \"Power State "
                   "Settable\" (5) indicates that the SetPowerState method "
                   "is supported. \"Power Cycling Supported\" (6) indicates "
                   "that the SetPowerState method can be invoked with the "
                   "PowerState parameter set to 5 (\"Power Cycle\"). "
                   "\"Timed Power On Supported\" (7) indicates that the "
                   "SetPowerState method can be invoked with the "
                   "PowerState parameter set to 5 (\"Power Cycle\") and "
                   "the Time parameter set to a specific date and time, "
                   "or interval, for power-on." ) : Amended,
      Values {  "Unknown", "Not Supported", "Disabled", "Enabled", 
                "Power Saving Modes Entered Automatically",
                "Power State Settable", "Power Cycling Supported",
                "Timed Power On Supported" } : Amended,
      MappingStrings {"MIF.DMTF|System Power Controls|001.2"}
    ]
  uint16 PowerManagementCapabilities[];

    [ Description( "Indicates the current power state of the computer "
                   "system and its associated operating system. Regarding "
                   "the power saving states, these are defined as follows: "
                   "Value 4 (Unknown) indicates that the system is known "
                   "to be in a power save mode, but its exact status in "
                   "this mode is unknown; 2 (Low Power Mode) indicates "
                   "that the system is in a power save state but still "
                   "functioning, and may exhibit degraded performance; "
                   "3 (Standby) describes that the system is not functioning "
                   "but could be brought to full power 'quickly'; and value "
                   "7 (Warning) indicates that the computerSystem is in a "
                   "warning state, though also in a power save mode." ) : Amended,
      Values { "Unknown", "Full Power", "Power Save - Low Power Mode", 
               "Power Save - Standby", "Power Save - Unknown", "Power Cycle", 
               "Power Off", "Power Save - Warning" } : Amended
    ]
  uint16 PowerState;

    [ Description( "SetPowerState method defines the desired power state of "
                   "a computer system and its running operating system, and "
                   "when the system should be put into that state. The "
                   "PowerState parameter is specified as one of the valid "
                   "integer values defined for the property, PowerState. "
                   "The Time parameter (for all state changes but 5, "
                   "\"Power Cycle\") indicates when the power state should "
                   "be set, either as a regular date-time value or as an "
                   "interval value (where the interval begins when the "
                   "method invocation is received). When the PowerState "
                   "parameter is equal to 5, \"Power Cycle\", the Time "
                   "parameter indicates when the system should power on "
                   "again. power off is immediate. SetPowerState should "
                   "return 0 if successful, 1 if the specified power state "
                   "and time requests are not supported, and some other "
                   "value if any other error occurred." ) : Amended
    ]
  uint32 SetPowerState([IN] uint16 PowerState, [IN] datetime Time);

};

// =============================================================================
// CIM_Cluster
// =============================================================================
[	Abstract,
	Description ( "A class derived from CIM_ComputerSystem that 'is made up of' two "
                "or more computer systems which operate together as an atomic, "
                "functional whole to increase the performance, resources and/or "
                "RAS (Reliability, Availability and Serviceability) of the "
                "component computer systems, related to some aspects of these "
                "computer systems." ) : Amended, LOCALE(0x409)
] 
class CIM_Cluster : CIM_ComputerSystem
{
    [ Description ( "Interconnect is a free form string that describes the "
                    "interconnection mechanism for the cluster." ) : Amended
    ]
  string Interconnect;	

    [ Description ( "InterconnectAddress indicates the address of the cluster "
                    "system, which is dependent on the interconnection scheme. "
                    "If no address is available or applicable, a null string "
                    "should be used." ) : Amended
    ]
  string InterconnectAddress;

    [ Description ( "This displays the cluster types. This specifies whether "
                    "the cluster is for failover (value=2), performance (3), "
                    "etc. The values which can be specified are not mutually "
                    "exclusive. Thus, Types isan array." ) : Amended,
      Values { "Unknown", "Other", "Failover", "Performance", 
               "Distributed OS", "Node Grouping" } : Amended
    ]
  uint16 Types[];

    [Description ( "Indicates the maximum number of nodes that may participate in "
                   "the cluster.  If unlimited, enter 0." ) : Amended
    ]
  uint32 MaxNumberOfNodes;

    [ Description ( "Indicates the state of the cluster.  The cluster can be "
                    "defined to be on-line (value=2), off-line (3), in a degraded "
                    "mode of operation (4) or unavailable (5)." ) : Amended,
      Values { "Unknown", "Other", "On-line", "Off-line", 
               "Degraded", "Unavailable" } : Amended
    ]
  uint16 ClusterState;
};

// =============================================================================
// CIM_ParticipatingCS
// =============================================================================
  [ Association, 
    Abstract,
    Description ( "A CIM_Cluster is composed of two or more computer system's, "
                  "operating together. A computer system may participate in "
                  "multiple clusters. \n\n"
                  "When first establishing or bringing up a cluster, only one "
                  "computer system may be defined as participating in it. "
                  "Therefore, the cardinality of the association for "
                  "the CIM_ComputerSystem reference is Min(1). " ) 
                  : Amended, LOCALE(0x409)
  ] 
class CIM_ParticipatingCS : CIM_Dependency 
{ 
    [ Override ("Antecedent"), 
	    Description ( "The ComputerSystem which participates in the Cluster. ") : Amended, 
	    Min (1) 
	  ]
  CIM_ComputerSystem REF Antecedent;

	  [ Override ("Dependent"), 
	    Description ("The cluster")  : Amended
	  ] 
  CIM_Cluster REF Dependent;

    [ Description ( "StateOfNode indicates the condition of the participating "
	                "computer system in the cluster.  For example, one value is "
	                "\"Joining\" (2)." ) : Amended,
      Values { "Unknown", "Other", "Joining", "Paused", "Available", 
               "Unavailable", "Degraded" } : Amended
    ] 
  uint16 StateOfNode;

    [ Description ( "RoleOfNode indicates whether the cluster nodes are "
                    "peers (value = 3), connected in a master-slave/primary-"
                    "secondary relationship (values = 4 for primary, 5 for "
                    "secondary), available in a standby configuration (6) or "
                    "of some other (1) or unknown (2) relationship." ) : Amended, 
      Values { "Unknown", "Other", "Peer", "Primary", "Secondary", "Standby" } : Amended
    ] 
  uint16 RoleOfNode;
};

// =============================================================================
// CIM_ClusteringService
// =============================================================================
  [ Abstract,
    Description ( "CIM_ClusteringService represents the functionality provided by a "
                  "cluster. For example, failover functionality may be modeled as "
                  "a service of a failover cluster." ) : Amended, LOCALE(0x409)
  ]
class CIM_ClusteringService : CIM_Service
{
     [ Description ( "AddNode brings a new computer system into a cluster. "
	                   "The node to be added is specified as a parameter to the "
	                   "method. The return value should be 0 if the computer "
	                   "system is successfully added, 1 if the method is not "
	                   "supported and any other number if an error occurred." )
					    : Amended
     ]
   uint32 AddNode ( [IN] CIM_ComputerSystem ref CS );

     [ Description ( "EvictNode removes a computer system from a cluster. "
	                    "The node to be evicted is specified as a parameter to the "
	                    "method. The return value should be 0 if the computer system "
	                    "is successfully evicted, 1 if the method is not supported "
	                    "and any other number if an error occurred." ) : Amended
     ]
   uint32 EvictNode ( [IN] CIM_ComputerSystem ref CS );
};

// =============================================================================
// CIM_HostedClusterService
// =============================================================================
   [ Association,
     Description ( "CIM_HostedClusterService defines the hosting cluster for a "
                   "clustering service.  Since this relationship is subclassed "
                   "from CIM_HostedService, it inherits the scoping/naming scheme "
                   "defined for CIM_Service - where a service is weak to its "
                   "hosting system.  In this case, a clustering service must be "
                   "weak to its hosting cluster system." ) : Amended, LOCALE(0x409)
   ]
class CIM_HostedClusterService : CIM_HostedService
{
      [ Override ("Antecedent"), 
	      Description ("The cluster") : Amended
      ]
   CIM_Cluster REF Antecedent;

      [ Override ("Dependent"), 
	      Description ( "The CIM_ClusteringService that is hosted on the cluster." ) : Amended
      ]
   CIM_ClusteringService REF Dependent;
};

// *****************************************************************************
// MicrosoftNLB_Cluster
// *****************************************************************************
[ 
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"), 
  Description( "This represents an instance of the NLB cluster. Only nodes that "
               "have remote control enabled contribute to the ClusterState as "
               "reported in this class and respond to the methods invoked from "
               "this class.") : Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_Cluster : CIM_Cluster
{
    [ Read,
      Override ("Name"),
      MaxLen (256), 
      Description ( "The cluster IP address is used in this property to uniquely "
                    "identify the cluster.") : Amended 
    ] 
  string Name;

    [ Override("InterconnectAddress"),
      Read,
      Description ( "InterconnectAddress displays the IP address of the cluster." ) 
      : Amended
    ]
  string InterconnectAddress;

    [ Override ("ClusterState"),
	  Read,
	  Description ( "Indicates the current state of the entire cluster. Only "
	                "nodes that have remote control enabled report their status. "
                  "The value represents the summary of the state from all "
      					  "cluster nodes. In addition to the values indicated in the "
                  "Values qualifier, this property may take on a value from 1 to 32 "
                  "that signifies the number of converged remote-control-enabled "
                  "nodes within the cluster." ) : Amended,
      Values   { "WLBS_SUSPENDED", "WLBS_STOPPED", "WLBS_DRAINING", "WLBS_CONVERGING"}
	     : ToInstance,
      ValueMap { "1013",           "1005",         "1009",          "1006"} 
	     : ToInstance
    ]
  uint16 ClusterState;

  //Methods

	  [ 
		  Implemented, 
		  Description( "Disable all traffic handling on all remoted-control-enabled "
                   "nodes, for the rule containing the specified port. Port "
                   "may take any value from 0 to 65,535 or 0xFFFFFFFF to specify "
                   "all ports. NumNodes returns the number of nodes that "
                   "have responded to the request.") : Amended,
      Values   { "WLBS_OK", "WLBS_NOT_FOUND", "WLBS_SUSPENDED" } : ToInstance,
      ValueMap { "1000",    "1004",           "1013"           } : ToInstance
	  ]
	uint32 Disable( [IN] uint32 Port, [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Enable traffic handling on all remoted-control-enabled nodes, "
                  "for the rule containing the specified port on specified nodes. "
                  "Port may take any value from 0 to 65,535 or 0xFFFFFFFF to "
                  "specify all ports. NumNodes returns the number of nodes that "
                  "have responded to the request.")
				   : Amended,
      Values   { "WLBS_OK", "WLBS_NOT_FOUND", "WLBS_SUSPENDED" } : ToInstance,
      ValueMap { "1000",    "1004",           "1013"           } : ToInstance
	  ]
	uint32 Enable( [IN] uint32 Port, [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Disable new traffic handling on all remoted-control-enabled "
                  "nodes, for the rule containing the specified port on "
                  "specified nodes. Port may take any value from 0 to 65,535 "
                  "or 0xFFFFFFFF to specify all ports. NumNodes returns the "
                  "number of nodes that have responded to the request.") : Amended,
      Values   { "WLBS_OK", "WLBS_NOT_FOUND", "WLBS_SUSPENDED" } : ToInstance,
      ValueMap { "1000",    "1004",           "1013"           } : ToInstance
	  ]
	uint32 Drain( [IN] uint32 Port, [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Enter draining mode on all remoted-control-enabled nodes. "
					        "WlbsDrainStop affects all ports. NumNodes returns the "
                  "number of nodes that have responded to the request.") : Amended,
      Values   { "WLBS_OK", "WLBS_STOPPED", "WLBS_SUSPENDED" } : ToInstance,
      ValueMap { "1000",    "1005",         "1013"           } : ToInstance
	  ]
	uint32 DrainStop( [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Resume cluster operation control on all remoted-control-enabled "
                  "nodes. NumNodes returns the number of nodes respond to the "
                  "request.") : Amended,
      Values   { "WLBS_OK" } : ToInstance,
      ValueMap { "1000"    } : ToInstance
	  ]
	uint32 Resume( [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Start cluster operations on all remoted-control-enabled "
                  "nodes. NumNodes returns the number of nodes that respond "
                  "to the request.") : Amended,
      Values   { "WLBS_OK", "WLBS_SUSPENDED", "WLBS_BAD_PARAMS" } : ToInstance,
      ValueMap { "1000",    "1013",           "1003"           }  : ToInstance
	  ]
	uint32 Start( [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Stop cluster operations on all remoted-control-enabled nodes.") : Amended,
      Values   { "WLBS_OK", "WLBS_SUSPENDED" } : ToInstance,
      ValueMap { "1000",    "1013"           } : ToInstance
	  ]
	uint32 Stop( [OUT] uint32 NumNodes );

	  [ 
		  Implemented, 
		  Description("Suspend cluster operation control on all remoted-control-enabled nodes.") : Amended,
      Values   { "WLBS_OK" } : ToInstance,
      ValueMap { "1000"    } : ToInstance
	  ]
  uint32 Suspend( [OUT] uint32 NumNodes );
};

// *****************************************************************************
// MicrosoftNLB_Node
// *****************************************************************************
[ 
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"), 
  Description( "This represents an instance of a node within a cluster." ) : Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_Node : CIM_UnitaryComputerSystem
{

    [ Read,
      Override ("Name"),
      Description ( "The ID of the host participating in the cluster. The ID is in "
                    "format ClusterIP:HostPriority, i.e. 172.150.35.12:1") : Amended 
    ] 
  string Name;

    [ Read,
      Description("This property specifies a host's unique priority for handling "
                  "default network traffic for TCP and UDP ports that are not "
                  "otherwise handled by port rules. It is used in case a host "
                  "within the cluster goes offline, and determines which host "
                  "within the cluster will take over handling this traffic if "
                  "required. The allowed values for host priority range from 1 "
                  "to the maximum number of hosts. Lower values indicate higher "
                  "priorities (where 1 is the highest priority). Each host "
                  "within the cluster must specify a unique host priority.") : Amended 
    ]			
  uint32 HostPriority;

    [ Read,
      Description("This property specifies this host's unique IP address used "
                  "for network traffic not associated with the cluster (for "
                  "example, Telnet access to a specific host within the cluster).")
				   : Amended
    ]      
  string DedicatedIPAddress;

    [ Read,
      Description("The current status of the host.") : Amended,
      Values   { 
                "WLBS_SUSPENDED", 
                "WLBS_STOPPED", 
                "WLBS_DRAINING", 
                "WLBS_CONVERGING", 
                "WLBS_CONVERGED", 
                "WLBS_DEFAULT" 
			   } : ToInstance,
      ValueMap { 
                "1013",
                "1005",
                "1009",
                "1006",
                "1007",
                "1008"
			   } : ToInstance
    ]        
  uint32 StatusCode;

  //Methods

	  [ 
		  Implemented, 
		  Description( "Disable all traffic handling for the rule containing the "
                   "specified port. Port may take any value from 0 to 65,535 or"
                   "0xFFFFFFFF to specify all ports.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_NOT_FOUND", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_STOPPED", 
                "WLBS_DRAINING" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1004",           
                "1013",           
                "1001",         
                "1005",         
                "1009"           
			   } : ToInstance
	  ]
	uint32 Disable( [IN] uint32 Port );

	  [ 
		  Implemented, 
		  Description("Enable traffic handling for the rule containing "
                  "the specified port. Port may take any value from "
                  "0 to 65,535 or 0xFFFFFFFF to specify all ports.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_NOT_FOUND", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_STOPPED", 
                "WLBS_DRAINING" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1004",           
                "1013",           
                "1001",         
                "1005",         
                "1009"           
			  } : ToInstance
	  ]
	uint32 Enable( [IN] uint32 Port );

	  [ 
		  Implemented, 
		  Description("Disable new traffic handling for rule containing the specified port."
                  "Port may take any value from 0 to 65,535 or "
                  "0xFFFFFFFF to specify all ports.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_NOT_FOUND", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_STOPPED", 
                "WLBS_DRAINING" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1004",           
                "1013",           
                "1001",         
                "1005",         
                "1009"           
			   } : ToInstance
	  ]
	uint32 Drain( [IN] uint32 Port );

	  [ 
		  Implemented, 
		  Description("Enter draining mode on specified nodes. WlbsDrainStop affects all ports.")
		   : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_STOPPED" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1013",           
                "1001",         
                "1005"         
		       } : ToInstance
	  ]
	uint32 DrainStop();

	  [ 
		  Implemented, 
		  Description("Resume cluster operation control.") : Amended,
      Values   { "WLBS_OK", "WLBS_ALREADY" } : ToInstance,
      ValueMap { "1000",    "1001"         } : ToInstance
	  ]
	uint32 Resume();

	  [ 
		  Implemented, 
		  Description("Start cluster operations.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_DRAIN_STOP", 
                "WLBS_BAD_PARAMS" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1013",           
                "1001",         
                "1002",            
                "1003"        
			   } : ToInstance
	  ]
	uint32 Start();

	  [ 
		  Implemented, 
		  Description("Stop cluster operations.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_SUSPENDED", 
                "WLBS_ALREADY", 
                "WLBS_DRAIN_STOP"
			    } : ToInstance,
      ValueMap { 
                "1000",    
                "1013",           
                "1001",         
                "1002"
			   } : ToInstance
	  ]
	uint32 Stop();

	  [ 
		  Implemented, 
		  Description("Suspend cluster operation control.") : Amended,
      Values   { 
                "WLBS_OK", 
                "WLBS_STOPPED", 
                "WLBS_ALREADY", 
                "WLBS_DRAIN_STOP" 
			   } : ToInstance,
      ValueMap { 
                "1000",    
                "1005",         
                "1001",         
                "1002"            
			   } : ToInstance
	  ]
  uint32 Suspend();

};

// *****************************************************************************
// MicrosoftNLB_ClusterSetting
// *****************************************************************************
[ 
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"), 
  Description("This holds and modifies cluster specific configuration information."
              "The provider will only return the instance for "
              "this class that corresponds to the node upon which it resides."
              "Consequently, to configure a node, the client must explicitly "
              "connect to that node. Modified values do not take affect until "
              "LoadAllSettings is invoked from this class or the "
              "MicrosoftNLB_NodeSetting class.") : Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_ClusterSetting : CIM_Setting
{
  //Properties
    [ 
      Key,
      Read,

      Description("The name of the host to which this setting applies"): ToInstance
	    Amended
    ]   
  string Name;

    [ 
	    Description("This property specifies a full Internet name for the Network "
                  "Load Balancing cluster (for example, cluster.domain.com). This "
                  "name is used for the cluster as a whole, and should be the "
                  "same for all hosts in the cluster. ") : Amended 
    ]
  string ClusterName;

    [
      ModelCorrespondence {"CIM_Cluster.InterconnectAddress"},
      Description("This property specifies the cluster's primary IP address "
                  "in standard Internet dotted notation (for example, w.x.y.z).") : Amended
    ]
  string ClusterIPAddress;

    [
      Description("This property denotes the subnet mask.") : Amended
    ]
  string ClusterNetworkMask;

    [
      Read,
      Description("This property denotes the cluster MAC address.") : Amended
    ]
  string ClusterMACAddress;

    [
      Description("This property specifies whether or not a multicast MAC "
                  "address should be used for cluster operations. If this "
                  "option is enabled, Network Load Balancing converts the "
                  "cluster MAC address belonging to the cluster adapter into "
                  "a multicast address. It also ensures that the cluster's "
                  "primary IP address resolves to this multicast address as "
                  "part of the ARP protocol. At the same time, the adapter "
                  "can now use its original, built-in MAC address, which, "
                  "in unicast mode, was disabled. ") : Amended
    ]
  Boolean MulticastSupportEnabled;

    [
      Description("This property specifies whether remote-control operations "
                  "are enabled. When disabled, the Service methods will not function"
                  "for remote HostIDs. Remote control is disabled by default.") : Amended
    ]
  Boolean RemoteControlEnabled;

    [
      Description("If set to TRUE, send IGMP join periodically.") : Amended
    ]
  Boolean IgmpSupport; 

    [
      Description("If set to TRUE, generate IGMP multicast IP from cluster IP.") : Amended
    ]
  Boolean ClusterIPToMulticastIP;  

    [
      Description("The cluster's multicast IP address for IGMP.") : Amended
    ]
  string MulticastIPAddress;

    [ Read,
      Description("This is the GUID of the adapter NLB is bound to.") : Amended
    ]        
  string AdapterGuid;

    [ 
      Description("This property specifies if the cluster that this "
                  "network adapter is a part of, is operating in the"
                  "Bi-Directional Affinity mode.") : Amended
    ]        
  Boolean BDATeamActive;

    [ 
      Description("This property specifies the Bi-Directional Affinity "
                  "team identifier of the cluster that this network "
                  "adapter is a part of. The value of this property "
                  "must be a GUID") : Amended
    ]        
  string BDATeamId;

    [ 
      Description("This property specifies if the cluster that this "
                  "network adapter is a part of, is the Master cluster.") : Amended 
    ]        
  Boolean BDATeamMaster;

    [ 
      Description("This property specifies whether to reverse hash "
                  "on the cluster that this network adapter is a part of.") : Amended
    ]        
  Boolean BDAReverseHash;

  //Methods
    [ 
	    Implemented, 
	    Description("Sets the remote control password.") : Amended
    ]
  void SetPassword( [IN] string Password );

  //Methods
	  [ 
		  Implemented, 
		  Description("This method causes the NLB driver to load with all the values "
					        "that are set in ALL of the the setting classes, including the "
                  "MicrosoftNLB_NodeSetting and the port rule classes. If the system "
                  "is Windows NT4, then the method will return a reboot value.") : Amended,
      Values   { "WLBS_OK", "WLBS_REBOOT" } : ToInstance,
      ValueMap { "1000",    "1050"        } : ToInstance
	  ]
	uint32 LoadAllSettings();

	  [ 
		  Implemented, 
		  Description("This method resets all of the properties for this class to "
                  "their default values. The values are not commited to the NLB "
                  "driver.") : Amended
	  ]
	void SetDefaults();

};

// *****************************************************************************
// MicrosoftNLB_NodeSetting
// *****************************************************************************
[ Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"), 
  Description("This holds and modifies node specific configuration information."
              "The provider will only return the instance for "
              "this class that corresponds to the node upon which it resides."
              "Consequently, to configure a node, the client must explicitly "
              "connect to that node. Modified values do not take affect until "
              "LoadAllSettings is invoked from this class or the "
              "MicrosoftNLB_ClusterSetting class.") : Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_NodeSetting : CIM_Setting
{
  //Properties
    [ Key,
      Read,
      Description("The name of the host to which this setting applies"): ToInstance 
	   Amended
    ]   
  string Name;

    [ ModelCorrespondence {"MicrosoftNLB_Node.DedicatedIPAddress"},
      Description("This property specifies this host's unique IP address used "
                  "for network traffic not associated with the cluster (for "
                  "example, Telnet access to a specific host within the cluster).") : Amended
    ]
  string DedicatedIPAddress;

    [ Description("This property denotes the subnet mask.") : Amended
    ]
  string DedicatedNetworkMask;

    [ Read,
      Description("This is the number of defined port rules.") : Amended
    ]        
  uint32 NumberOfRules;

    [ ModelCorrespondence {"MicrosoftNLB_Node.HostPriority"},
      Description("This property specifies a host's unique priority for handling "
                  "default network traffic for TCP and UDP ports that are not "
                  "included in the Port rule configuration. It is used "
				          "in case a host within the cluster goes offline, and determines "
				          "which host within the cluster will take over handling this "
				          "traffic if required. The allowed values for host priority "
				          "range from 1 to the maximum number of hosts. Lower values "
				          "indicate higher priorities (where 1 is the highest priority)."
				          "Each host within the cluster must specify a unique host priority. "
				          "NOTE: This has no affect on traffic that is load balanced. "
				          "It only applies to traffic that is not handled by a "
				          "port rule." ) : Amended 
    ]
  uint32 HostPriority;

    [ 
      Description("The AliveMsgPeriod value holds the message exchange period in "
                  "milliseconds.You should pick this number "
                  "based on your failover requirements. A longer message "
                  "exchange period will reduce the networking overhead needed "
                  "to maintain fault tolerance, but it will increase the "
                  "failover delay.") : Amended
    ]
  uint32 AliveMessagePeriod;

    [
      Description("The AliveMsgTolerance value specifies how "
                  "many exchanged messages from a host can be missed before the "
                  "cluster initiates convergence. You should pick this number "
                  "based on your failover requirements. Increasing the number of "
                  "message exchanges prior to convergence will reduce the number "
                  "of unnecessary convergence initiations due to transient "
                  "network congestion, but it will also increase the "
                  "failover delay. ") : Amended
    ]
  uint32 AliveMessageTolerance;

    [
      Description("If set to TRUE, join cluster on boot.") : Amended
    ]
  Boolean ClusterModeOnStart;

    [
      Description("This property specifies the UDP port that is used to "
                  "receive remote control commands. By default, these are "
                  "ports 1717 and 2504 at the cluster IP address") : Amended
    ]
  uint32 RemoteControlUDPPort;

    [
      Description("If true, mangle source MAC address to prevent switch "
                  "learning. Use a value of false if the cluster is on a hub: "
                  "optimizes switch performance by re-enabling learning.") : Amended
    ]
  Boolean MaskSourceMAC;

    [
      Description("The number of connection tracking descriptors per allocation.") : Amended
    ]
  uint32 DescriptorsPerAlloc;

    [
      Description("The maximum number of connection tracking descriptors "
                  "per allocation.") : Amended
    ]
  uint32 MaxDescriptorsPerAlloc;

    [
      Description("The number of actions per allocation.") : Amended
    ]
  uint32 NumActions;

    [
      Description("The number of packets per allocation.") : Amended
    ]
  uint32 NumPackets;

    [
      Description("The number of heartbeats per allocation.") : Amended
    ]
  uint32 NumAliveMessages;


    [ Read,
      Description("This is the GUID of the adapter NLB is bound to.") : Amended
    ]        
  string AdapterGuid;


  //Methods
	  [ 
		  Implemented, 
		  Description("This method provides an optimized means for obtaining "
                  "the port rule which encapsulates the input Port number.") : Amended
	  ]
	void GetPortRule([IN] UINT32 Port, [OUT] MicrosoftNLB_PortRule PortRule);

	  [ 
		  Implemented, 
		  Description("This method causes the NLB driver to load with all the values "
					        "that are set in ALL of the the setting classes, including the "
                  "MicrosoftNLB_ClusterSetting and the port rule classes. If the system "
                  "is Windows NT4, then the method will return a reboot value.") : Amended,
          Values   { "WLBS_OK", "WLBS_REBOOT" } : ToInstance,
          ValueMap { "1000",    "1050"        } : ToInstance
	  ]
	uint32 LoadAllSettings();

	  [ 
		  Implemented, 
		  Description("This method resets all of the properties for this class to "
                  "their default values. The values are not committed to the NLB "
                  "driver.") : Amended
	  ]
	void SetDefaults();
};

// *****************************************************************************
// MicrosoftNLB_PortRule
// *****************************************************************************
 [ Abstract,
   Provider("Microsoft|NLB_Provider|V1.0"),
   Description("This class represents a rule for how TCP/IP traffic "
               "is handled. The provider will only return the instances for "
               "this class that correspond to the node upon which it resides."
               "Consequently, to configure a node, the client must explicitly "
               "connect to that node.") : Amended, 
   LOCALE(0x409)
 ]
class MicrosoftNLB_PortRule : CIM_Setting
{
    [ Key,
      Override("Name"), 
      Description("The name of the host to which this port rule applies"): ToInstance
	   Amended
    ] 
  string Name;

    [ Key,
		  Description("The starting port number to which this rule applies.") : Amended
    ]										
  uint32 StartPort = 0;

    [ Description("The ending port number to which this rule applies.") : Amended
    ]
  uint32 EndPort = 65535;

    [ Values {"TCP", "UDP", "Both"},
      ValueMap {"1", "2", "3"} ,
      Description("This specifies the protocol for which this rule applies. "
                  "The possible values include TCP, UDP or Both ") : Amended
    ]										
  uint32 Protocol = 3;

    [ Read,
      Description("This is the GUID of the adapter NLB is bound to.") : Amended
    ]        
  string AdapterGuid;

	  [ 
      Static,
		  Implemented, 
		  Description("This method resets the node's port rule configuration "
                  "to the default. The new configuration is not committed "
                  "to the driver.") : Amended,
      Values   { "WLBS_OK" } : ToInstance,
      ValueMap { "1000"    } : ToInstance
	  ]


	void SetDefaults([IN] MicrosoftNLB_Node ref Node);
};

// *****************************************************************************
// MicrosoftNLB_PortRuleFailover
// *****************************************************************************
[
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"),
  LOCALE(0x409)
]
class MicrosoftNLB_PortRuleFailover : MicrosoftNLB_PortRule
{
    [ Description("This property specifies the local host's priority for "
                  "handling the networking traffic for this port "
                  "rule. The host with the highest handling priority (lowest "
                  "numerical value) for this rule among the current members of "
                  "the cluster will handle all of the traffic for this rule. "
                  "The allowed values range from 1, the highest priority, to "
                  "the maximum number of hosts allowed. This value must be "
                  "unique for all hosts in the cluster.") : Amended, LOCALE(0x409)
    ]										
  uint32 Priority = 1;
};

// *****************************************************************************
// MicrosoftNLB_PortRuleLoadbalanced
// *****************************************************************************
[
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"),
  LOCALE(0x409)
]
class MicrosoftNLB_PortRuleLoadbalanced : MicrosoftNLB_PortRule
{
    [ Description("This property specifies that the host accepts an equal "
                  "portion of the load-balanced traffic in multiple-host "
                  "filtering mode for this port rule. If this value is true, "
                  "then the value for LoadWeight is ignored.") : Amended
    ]										
  Boolean EqualLoad = True;

    [ Description("This property specifies the relative weight of load-balanced "
                  "network traffic that this host should handle for the "
                  "associated port rule. Allowed values range from 0 "
                  "(zero) to 100. To prevent a host from handling any "
                  "network traffic, set the load weight to 0 (zero). ") : Amended
    ]										
  uint32 LoadWeight = 50;

    [ Values {"None", "Single", "ClassC"} : Amended, 
      ValueMap{"0", "1", "2"},
      Description("This option specifies the client affinity. The possible "
                  "values are None, Single and Class C. Single and Class C "
                  "are used to ensure that all network traffic from a "
                  "particular client be directed to the same cluster host.") : Amended
    ]										
  uint32 Affinity = 1;

};

// *****************************************************************************
// MicrosoftNLB_PortRuleDisabled
// *****************************************************************************
[
  Dynamic, 
  Provider("Microsoft|NLB_Provider|V1.0"),
  Description("This class represents a disabled port rule."): Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_PortRuleDisabled : MicrosoftNLB_PortRule
{
};

// *****************************************************************************
// *****************************************************************************
// SCHEMA SPECIFIC ASSOCIATIONS
// *****************************************************************************
// *****************************************************************************

// *****************************************************************************
// MicrosoftNLB_NodeSettingPortRule
// *****************************************************************************
[ Association,
  Dynamic:      ToInstance, provider("Microsoft|NLB_Provider|V1.0"),
  Description( "This associates rules to a NodeSetting." ) : Amended, 
  LOCALE(0x409)
]
class MicrosoftNLB_NodeSettingPortRule : CIM_Component
{
    [ Key,
      Override("GroupComponent"),
      Description ("The MicrosoftNLB_NodeSetting class.") : Amended,
      Min (1) 
    ]
  MicrosoftNLB_NodeSetting REF GroupComponent;

    [ Key,
      Override("PartComponent"),
      Description ( "The MicrosoftNLB_PortRule") : Amended
    ]
  MicrosoftNLB_PortRule REF PartComponent;

};

// *****************************************************************************
// MicrosoftNLB_ClusterClusterSetting
// *****************************************************************************
  [ Association,
    Dynamic: ToInstance, 
    Provider("Microsoft|NLB_Provider|V1.0"),
    Description ( "This associates a MicrosoftNLB_ClusterSetting to a MicrosoftNLB_Cluster." ) : Amended,  
	LOCALE(0x409)
  ]
class MicrosoftNLB_ClusterClusterSetting : CIM_ElementSetting
{
     [ Key,
       Override("Element"),
       Description ("A cluster") : Amended,  
       Min (1)
     ]
   MicrosoftNLB_Cluster REF Element;

     [ Key,
       Override("Setting"),
       Description ( "The cluster-related settings for a node in a cluster.") : Amended
     ]
   MicrosoftNLB_ClusterSetting REF Setting;
};

// *****************************************************************************
// MicrosoftNLB_NodeNodeSetting
// *****************************************************************************
  [ Association,
    Dynamic:      ToInstance, 
    Provider("Microsoft|NLB_Provider|V1.0"),
    Description ( "This associates a MicrosoftNLB_NodeSetting to a MicrosoftNLB_Node." ) : Amended,  
				LOCALE(0x409) 
  ]
class MicrosoftNLB_NodeNodeSetting : CIM_ElementSetting
{
     [ Key,
       Override("Element"),
       Description ("A node") : Amended,  
       Min (1) 
     ]
   MicrosoftNLB_Node REF Element;

     [ Key,
       Override("Setting"),
       Description ( "The settings for a node") : Amended 
     ]
   MicrosoftNLB_NodeSetting REF Setting;
};

// *****************************************************************************
// MicrosoftNLB_ParticipatingNode
// *****************************************************************************
  [ Association,
    Dynamic:      ToInstance, 
    Provider("Microsoft|NLB_Provider|V1.0"), LOCALE(0x409)
  ]
class MicrosoftNLB_ParticipatingNode : CIM_ParticipatingCS
{
    [ Key,
      Override ("Antecedent"), 
	  Description ( "The computer system which participates in the cluster." ) : Amended, 
	  Min (1) 
	]
  MicrosoftNLB_Node REF Antecedent;

	  [ Key,
        Override ("Dependent"), 
	    Description ("The Cluster.") : Amended 
	  ] 
  MicrosoftNLB_Cluster REF Dependent;
};

// *****************************************************************************
// MicrosoftNLB_ExtendedStatus
// *****************************************************************************
  [ Dynamic : ToInstance,
    Description("The provider utilizes this class to report NLB "
                "specific error codes.") : Amended,
    Provider("Microsoft|NLB_Provider|V1.0"), LOCALE(0x409)
  ]
class MicrosoftNLB_ExtendedStatus : __ExtendedStatus
{
    [ Override("StatusCode"),
	  Description("NLB and Winsock error codes are returned in this property."
                "The Values and ValueMap qualifiers map the NLB defined "
                "constants, but do not include Winsock error codes.") 
	    : Amended,
      Values   { 
                "WLBS_BAD_PARAMS"     ,
                "WLBS_NOT_FOUND"      ,
                "WLBS_BAD_PASSW"      ,
                "WLBS_IO_ERROR"       ,
                "WLBS_TIMEOUT"        , 
                "WLBS_PORT_OVERLAP"   , 
                "WLBS_BAD_PORT_PARAMS",
                "WLBS_MAX_PORT_RULES" ,
                "WLBS_REG_ERROR"
	           } : ToInstance,
      ValueMap { 
                "1003",
                "1004",
                "1101",
                "1102",
                "1103",
                "1150",
                "1151",
                "1152",
                "1154"
			   } : ToInstance
	]
  uint32 StatusCode;
};
