 /************************************************************************
*                                                                       *
*               INTEL CORPORATION PROPRIETARY INFORMATION               *
*  This software is supplied under the terms of a license agreement or  *
*  nondisclosure agreement with Intel Corporation and may not be copied *
*   or disclosed except in accordance with the terms of that agreement. *
*        Copyright (c) 2008 Intel Corporation. All Rights Reserved.     *
*                                                                       *
************************************************************************/
/***********************************************************************\
*
* NAME:	Ncs2ICr.mof	
* 
* DESCRIPTION: Master MOF file with class definitions for the 
*			   Intel PRO Network Adapters WMI Provider (802.3 schema).
*
* PREREQUISITE: Ncs2Cm.mof 
*
* NOTE:	This file generates language neutral MOF for IntelNCS2 namespace.
*		This file also generates ENU language specific MFL. 
*
\***********************************************************************/

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

instance of __Win32Provider as $P
{
    Name    = "Ncs2" ;
    ClsId   = "{AF7799A5-A3E7-455C-92B5-8F9D7C127B15}" ;
	Pure = FALSE;
	ImpersonationLevel = 3;
    PerUserInitialization = TRUE;
    UnloadTimeout = "00000000000500.000000:000";
};    

instance of __MethodProviderRegistration
{
    Provider = $P;
};

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


// ============================================================================
// Ethernet Adapter Base Class
// ============================================================================
[Abstract, Description("IANet_EthernetAdapter abstract base class objectifies "
"the general network characteristics of the Intel NIC. In this class, "
"the lower level networking properties are presented. Note that only the "
"network relationships are in this class. The controller characteristics "
"are presented separately."): Amended,  LOCALE(0x409)
]
class IANet_EthernetAdapter : CIM_EthernetAdapter
{
	[Override("NetworkAddresses"), MaxLen (64), 
	Description (
	"An array of strings indicating the network addresses for an adapter."):ToSubclass Amended,
	ArrayType ("Indexed"),
	MappingStrings {"MIF.DMTF|Network Adapter 802 Port|001.3"}:ToSubclass,
	ModelCorrespondence {"IANet_EthernetAdapter.NetworkAddressDescription"}:ToSubclass
	]
    string NetworkAddresses[];
    		

	[ Description (
	"MiniPortName represents the Win32 kernel mode service name of the adapter."):ToSubclass Amended
	]
	string MiniPortName;

	[Description (
	"MiniPortInstance distinguishes a network device from other devices of "
	"the same type on a machine. It is a unique string without any "
	"path-separator characters that contains serial-number information, "
	"if supported by the underlying bus, or some kind of location "
	"information. The format of the string is bus specific. "
	"It is persistent across system boots."):ToSubclass Amended
	]
	string MiniPortInstance;	
	 
};






// ============================================================================
// Physical Ethernet Adapter Class
// ============================================================================
[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
Description("IANet_PhysicalEthernetAdapter concrete class objectifies "
"the general network characteristics of the Intel NIC. In this class, "
"the lower level networking properties are presented. Note that only the "
"network relationships are in this class. The controller characteristics "
"are presented separately."):Amended,  LOCALE(0x409)
]
class IANet_PhysicalEthernetAdapter : IANet_EthernetAdapter
{

[Description (
		 "PartNumber is the NIC's PBA manufacturing part number"):Amended
	]
   string PartNumber;

	[Description (
		 "PHYDevice indicates the particular PHY used on this NIC"):Amended,
		 ValueMap{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
			"13", "14", "15", "16", "50", "60", "70" }:Amended,
		 Values {
		 /* 0 */ "No PHY detected", 
		 /* 1 */ "Intel 82553 (PHY 100) A or B step",
		 /* 2 */ "Intel 82553 (PHY 100) C step",
		 /* 3 */ "Intel 82503 10Mps",
		 /* 4 */ "National DP83840A (10BaseT and 100Base-TX)", 
		 /* 5 */ "Seeq 80C240 - 100BASE-T4",
		 /* 6 */ "Seeq 80C24 - 10Mps",
	     /* 7 */ "Intel 82555 100Base-TX PHY", 
		 /* 8 */ "Microlinear 10Mps", 
		 /* 9 */ "Level One 10Mbps", 
		 /* 10*/ "National DP83840 100Base-TX, C step", 
		 /* 11*/ "ICS 100Base-TX PHY", 
		 /* 12*/ "Gilad",
		 /* 13*/ "Kinnereth", 
		 /* 14*/ "Kinnereth Plus",
		 /* 15*/ "Other",
		 /* 16*/ "Unknown",
		 /**********/
		 /* 50*/ "Intel 82562 EH Phoneline PLC",
		 /* 60*/ "Intel 82562 ET 100 Base-TX PHY",
		 /* 70*/ "Intel 82562 EM 100 Base-TX PHY"
		 }:Amended
		]
    uint16 PHYDevice;

	[Description (
	"OtherPhyDevice contains the name of the device if the PHYDevice has the value "
	 "'Other'."):Amended
	]
    string OtherPhyDevice;
	
	[Description (
	"Bus Type indicates the bus type"):Amended,
	ValueMap{"0","1","2","3","4","5","6","7"}:Amended,
	Values {"Unknown","ISA","EISA","PCMCIA","CardBus","PCI","PCI-X","PCI Express"}:Amended
	]
	uint16 BusType;
	
	[Description (
	"Negotiated Link Width specifies the negotiated link width of the bus"):Amended,
	ValueMap{"0","1","2","4","8"}:Amended,
	Values{"Unknown","x1","x2","x4","x8"}:Amended
	]
	uint16 NegotiatedLinkWidth;
	
	[Description (
	"PortNumber indicates the port number on PCIe Quad port adapters"):Amended,
	ValueMap{"0","1","2","3"}:Amended,
	Values{"A","B","C","D"}:Amended
	]
	uint16 PortNumber;
	
	[Description (
	"MediaType indicates the media which interfaces to this phy"):Amended,
	ValueMap{"0", "1", "2", "3", "4", "5", "6"}:Amended,
	Values {"Unknown", "Copper", "Fiber", "Phone Line", "CX4 Copper", "SFP+ Direct Attach", "Other"} : Amended
	]
    uint16 MediaType;

	[Description (
	"OtherMediaType contains the media type name of the device if the MediaType "
	"has the value 'Other'."):Amended
	]
    string OtherMediaType;

		[ Description (
		"The Controller ID identifies the Ethernet controller that the adapter uses. "
		"Adapters with different DeviceIDs can have the same Controller ID"):Amended,
		ValueMap{
			"0", 
			"1", "3", "6", "7", "8", "11", "13", "20", "30", "31", "40", "50", "51", "52", "60", "62", "63",
			"65537", "65538", "65539", "65540", "65541", "65542", "65543", "65544", "65545", "65546", "65547", "65548", "65549", "65550", "65551", "65552", "65553", 
			"131073",
			"196609", "196610"
			}:Amended,
			Values {"Unknown", 

				/* 1 -> 63 */
				"Intel 82542 Controller",
				"Intel 82543 Controller",
				"Intel 82544 Controller",
				"Intel 82540 Controller",
				"Intel 82545 Controller",
				"Intel 82541 Controller",
				"Intel 82547 Controller",
				"Intel 82571 Controller",
				"Intel 82573 Controller",
				"Intel 82574 Controller",
				"Intel ESB2LAN Controller",
				"Intel ICH8 Controller",
				"Intel ICH9 Controller",
				"Intel ICH10 Controller",
				"Intel 82575 Controller",
				"Intel 82576 Controller",
				"Intel ADORAM_VIRTUAL Controller",
								
				/* 65537 -> 65553 */
				"Intel D100_A_STEP Controller",
				"Intel D100_B_STEP Controller",
				"Intel D100_C_STEP Controller",
				"Intel D101_A_STEP Controller",
				"Intel D101_B0_STEP Controller",
				"Intel D101M_A_STEP Controller",
				"Intel D101S_A_STEP Controller",
				"Intel D102_A_STEP Controller",
				"Intel D102_B_STEP Controller",
				"Intel D102_C_STEP Controller",
				"Intel D102_D_STEP Controller",
				"Intel D102_E_STEP Controller",
				"Intel D102_F_STEP Controller",
				"Intel 82562_G Controller",
				"Intel 82562_GZ Controller",
				"Intel 82562_GX_GT Controller",
				"Intel 82562 Controller",
				
				/* 131073 */			
				"Intel 82597 EX Controller",
								
				/* 196609 -> 196610 */
				"Intel 82598 Controller",
				"Intel 82599 Controller"
				
				
			}:Amended
		]
	uint32 ControllerID;



[Description (
 	"Adapter status specifies the current status of the adapter."):Amended,
	Bitmap{"1", "2", "4", "16", "32", "1024", "2048"}:Amended,
	Bitvalues {"Installed", "DriverLoaded", "HardwareMissing", 
    "HasDiag", "HasLink", "HasTCOEnabled", "DeviceError"}:Amended,
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.AdapterStatus"}
	]
    uint32 AdapterStatus;

[Override ("Capabilities"), Description (
	"Lists the capabilities of the device."):Amended, 
	ArrayType ("Indexed"),
	Values {
	/* 0 */ "Unknown", "Other", "AlertOnLan", "WakeOnLan", 
	/* 4 */ "Adapter Fault Tolerance", "Adaptive Load Balancing", 
	/* 6 */ "IPSec Offload", "ASF",
	/* 8 */  "Feature Not Supported", "Static Link Aggregation",
	/* 10 */ "IEEE 802.3ad Dynamic Link Aggregation", "Checksum Offload",
	/* 12 */ "Switch Fault Tolerance", "Feature Not Supported", "Feature Not Supported",
	/* 15 */ "Feature Not Supported", "Feature Not Supported", "Feature Not Supported",
	/* 18 */ "Feature Not Supported", "Feature Not Supported",
	/* 20 */ "Feature Not Supported", "Feature Not Supported",
	/* 22 */ "Feature Not Supported", "Feature Not Supported",	
	/* 24 */ "Feature Not Supported",
	/* 25 */ "Feature Not Supported", "Feature Not Supported",
	/* 27 */ "Feature Not Supported", "Feature Not Supported",
	/* 29 */ "TCO Capability", "Wake Up Capabilities", "IP Checksum Offload",
	/* 32 */ "10 Mbps", "100 Mbps", "1000 Mbps", "10000 Mbps",
	/* 36 */ "Teaming", "VLAN", "IEEE VLAN", "ISL VLAN", "Feature Not Supported",
	/* 41 */ "Identify Adapter Support", "Cable Test Support", "Diagnostic Support",
	/* 44 */ "Flash support", "ICH Support", "Usage Server", "Vendor Intel", "Feature Not Supported",
	/* 49 */ "Feature Not Supported", "PowerManagement Support", "Feature Not Supported",
	/* 52 */ "MFO", "Pass Through", "Quad-Port Support", "Dedicated MAC Address",
	/* 56 */ "Jumbo Frame Support","Feature Not Supported","Signal Quality Test", 
	/* 59 */ "Cable Offline Test", "Adapter is LOM", "Scalable Networking Pack Capability", 
	/* 62 */ "CB Platform Capability",
	/* 63 */ "iSCSI Capability"
	} : Amended, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.CapabilityDescriptions"}
	]
    uint16 Capabilities[];

[Override ("CapabilityDescriptions"), Description (
	"An array of free-form strings providing more detailed "
	"explanations for any of the Physical Ethernet Adapter features "
	"indicated in the Capabilities array. Note, each entry of "
	"this array is related to the entry in the Capabilities "
	"array that is located at the same index."):Amended, 
	ArrayType ("Indexed"), 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.Capabilities"}
	]
    string CapabilityDescriptions[];

[ Description (
	"Hardware status specifies the current status of the hardware"):Amended,
	Values {"Unknown", "Ready", "Initializing", "Reset", 
	"Closing", "Not Ready" }: Amended
	]
	uint32 HardwareStatus;

[Description (
	"An array of IDs of other capabilities.  There is no value map for these - the "
	"meaning can be ascertained from the OtherEnabledCapabilities string array."):Amended,
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.OtherEnabledCapabilityIDs"}
	]
	uint16 OtherEnabledCapabilityIDs[];

	[Description ("An array of free-form strings used to state "
	"Other Capabilities of the Ethernet Adapter."):Amended,
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.OtherEnabledCapabilities"}
	]
	string OtherEnabledCapabilities[];

	[Description ("An array of free-form strings used to state "
	"Other Capabilities of the Ethernet Adapter."):Amended,
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.OtherEnabledCapabilities"}
	]
	string OtherCapabilityDescriptions[];


	[Description (
        "SlotID field of the System Slot structure provides a mechanism to correlate the "
	"physical attributes of the slot to its logical access method."):Amended
	]
   	string SlotID;

	[Description (
	"EEPROMVersion contains the EEPROM version of the device."):Amended
	]
	string EEPROMVersion;

	[Description(
	"Original display name of the adapter. "):Amended]
	string OriginalDisplayName;

	[Description (
	"PCI device Id of the device."):Amended
	]
	string PCIDeviceID ;

	[Description (
        "StaticIPAddress shows the static IP address if Static IP Address is configured, "
	"else this is set to 0.0.0.0."):Amended
	]
   	string StaticIPAddress;
	
	[Description (
        "SubnetMask shows the current conffigured SubnetMask. This field is "
	"populated only if the adapter has a static IP Address configured or "
	"else this is set to 0.0.0.0."):Amended
	]
   	string SubnetMask;


[Description (
	"IdentifyAdapter will flash the light on the adapter for a few "
	"seconds to enable the user to identify it.  This method will only "
	"work for physical adapters."):Amended, implemented 
	]
	uint32 IdentifyAdapter( [in] uint16 nSeconds );	


	[Description (
	"GetPowerUsageOptions detects any optional power usage settings. "
	"For example, power usage for standby, battery operation etc."  
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.GetPowerUsageOptions"}
	]
	uint32 GetPowerUsageOptions(
	  	[OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 AutoPowerSaveModeEnabled,
		[OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 ReduceSpeedOnPowerDown,
		[OUT,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 SmartPowerDown,
		[OUT,
        ValueMap {"1","2"}: Amended , 
        Values {"Normal Power", "Low Power"}: Amended
	]
		 uint32 SavePowerNowEnabled,
	[OUT,
		 ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 EnhancedASPMPowerSaver,
	[OUT,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "BatteryMode"}: Amended
	] 
		uint32 ACBSMode,
	
	[OUT,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 LinkSpeedBatterySaver,
	[OUT,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 SystemIdlePowerSaver
	);

	[Description (
	"This method can be used to makes changes to the power usage options. "
	"For example, this method could be used to reduce power usage for "
	"standby, battery operation etc. Note power usage settings are "
	"stored and used for every boot."
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.SetPowerUsageOptions"} 
	]
	uint32 SetPowerUsageOptions(
	 	[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 AutoPowerSaveModeEnabled,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 ReduceSpeedOnPowerDown,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 SmartPowerDown,
		[IN,
        ValueMap {"1","2"}: Amended , 
        Values {"Normal Power", "Low Power"}: Amended
	]
		 uint32 SavePowerNowEnabled,
		[IN,
		 ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 EnhancedASPMPowerSaver,
	[IN,
		 ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "BatteryMode"}: Amended
	]
		 uint32 ACBSMode,		 
	[IN,
		 ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 LinkSpeedBatterySaver,

	[IN,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 SystemIdlePowerSaver

	);	

	[Description (
	"GetWakeOnLanPowerOptions returns WakeOnLan power settings. "
	"For example, information about wakeonlink, wakeonmagicpacket etc.."  
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.GetWakeOnLanPowerOptions"}
	]
	uint32 GetWakeOnLanPowerOptions(
	  	[OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeFromPowerOff,
		[OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeOnLink,
		[OUT,
        ValueMap {"0","1"} : Amended, 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeOnMagicPacket,
		[OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 WakeOnDirectedPacket,
		 [OUT,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 WakeOnEvent
	);
	[Description (
	"This method can be used to makes changes to the WakeOnLan options. "
	"For example, this method could be used to set options like "
	"wakefromPoweroff, wakeOnlink, WakeOnMagicPacket, WakeOnDirectedPacket etc."
	" Note WakeOnLan settings are stored and used for every boot."
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.SetWakeOnLanPowerOptions"} 
	]
	uint32 SetWakeOnLanPowerOptions(
	 	[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeFromPowerOff,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeOnLink,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	] 
		uint32 WakeOnMagicPacket,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 WakeOnDirectedPacket,
		[IN,
        ValueMap {"0","1"}: Amended , 
        Values {"Disabled", "Enabled"}: Amended
	]
		 uint32 WakeOnEvent

	);
	[Description (
	"This method is used to makes changes to the Power management"
	"capabilities during DMIX install so that any upgrade scenarios from "
	"earlier releases will have the right options for all the WakeOnLAN"
	" options and DMIX will not have reinterpret them dynamically"
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.SetPowerMgmtCapabilities"} 
	]
	uint32 SetPowerMgmtCapabilities();
	[Description (
	"This method can be used to check if SetPowerMgmtCapabilities() needs to be called."
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.IsSetPowerMgmtCapabilitiesReq"} 
	]
	uint32 IsSetPowerMgmtCapabilitiesReq(
	 	[OUT] 
		boolean bIsSetRequired);
	[Description (
	"This method can be used to check if iSCSI is supported by the OS and iSCSI "
	"patch and hotfix are installed."
	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.IsiSCSISupported"} 
	]
	uint32 IsiSCSISupported(
	 	[OUT] 
		boolean bIsiSCSIOS,
		[OUT]
		boolean bIsiSCSIPatch,
		[OUT]
		boolean bIsiSCSIHotFix);		
	
	
	[Description 
	(
		"This method can be used to determine if the passed in setting will be changed when the new team is created."
		"Depending on the adapters in the team and which features each supports, the setting may be disabled to "
		"synchronize the setting accross all adapters in the team."
		):Amended, implemented,
		ModelCorrespondence {"IANet_PhysicalEthernetAdapter.ValidateSettingOnNewTeam"}
	]
	uint32 ValidateSettingOnNewTeam
	(
		[IN]    string Adapters[],
		[IN]	string SettingName,
		[OUT]   uint16 ValResult
	);	
	
	
	[Description (
	"This method can be used to check if iSCSI is enabled on that adapter."

	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.IsiSCSIEnabled"} 
	]
	uint32 IsiSCSIEnabled(
	 	[OUT,
        	Values {"0", "1", "2", "3"}: Amended
	]
		
	uint32 iSCSIStatus);
	
	[Description (
	"This method can be used to get the NDIS version"

	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.GetNDISVersion"} 
	]
	uint32 GetNDISVersion(
	 	[OUT] 
		uint32 dwMajorVersion,
		[OUT]
		uint32 dwMinorVersion);
		
	[Description (
	"This method can be used check if the fan is running on the adapter.  NOTE:  not all devices support this functionality"

	):Amended, implemented, 
	ModelCorrespondence {"IANet_PhysicalEthernetAdapter.GetAdapterFanStatus"} 
	]
	uint32 GetAdapterFanStatus(
		[OUT,
			ValueMap {"0", "1", "2"}: Amended , 
			Values {"Not Supported", "Not Active", "Active"}: Amended
		]
		uint32 dwAdapterFanStatus);
};

// ============================================================================
// Intel IANetSetting Abstract Base Class
// ============================================================================
		[Abstract, 
		 Description("IANet_Setting objectifies instance related "
		 "driver and network device settings. IANet_Setting is an "
		 "Abstract superclass for a set of concrete classes of different "
		 "types.  This set of classes allows open ended usage of a variable "
		 "number of settings.  These can be different for different adapters, "
		 "teams or VLANs "
		 "and it may not always be possible to predict what parameters will "
		 "be required."):Amended,  LOCALE(0x409)
		]
class IANet_Setting : CIM_Setting
{
		[Key,Description(
		 "ParentId identifies the object that this parameter is for. " 
		 "This is used to ensure that the parameters have unique keys - applications "
		 "should use associations to link settings with managed elements.") : ToSubclass Amended
		]
	string ParentId;

	[Key,Description(
		 "ParentType identifies the type of object that this parameter is for. " 
		 "This can take one of the following values:\n"
		 "		VLAN - for VLAN settings\n"
		 "		NIC - for Adapter settings\n"
		 "		Team - for Team settings\n") :ToSubclass Amended]

	string ParentType;

		[Key,Description(
		 "Caption contains a short name for the parameter that is used to "
		 "uniquely identify the parameter for the user."):ToSubclass Amended]
	string Caption;

		[Description(
		 "Description is a longer string that describes the parameter for the user.")
		 :ToSubclass Amended
		]

     	string Description;

		[Description(
		 "MiniHelp is a help string for this setting."):ToSubclass Amended
		]
	string MiniHelp;

	[Description (
    "Expose level of setting. For example, based on the expose level "
	"management application could determine whether this setting could be "
	"exposed to the user.") : Amended,
		ValueMap{"0", "1"}:ToSubclass Amended,
		Values {"Zero", "One"}:ToSubclass Amended
	]	
	uint32 ExposeLevel;

		[Description(
		 "Writable is true if the setting can be changed and false if the setting "
		 "cannot be changed. If this attribute is NULL then the user needs to do a "
		 "pre-check to see if the setting can be saved."):ToSubclass Amended
		]
	boolean Writable;
	
	[Description(
		 "Some settings require a session to be set. If this is true then this "
		 "setting requires a session. The setting will not be saved until the Apply "
		 "method of IANet_NetService is called."):ToSubclass Amended
		]
	boolean RequiresSession;

	[Description(
		 "Some of the settings are grouped under specific categories."
		 "Grouped is true if the setting is grouped."):ToSubclass Amended
		]
	boolean Grouped;

	[Description(
		 "Some of the settings are grouped under specific categories."
		 "This attribute specifies the Id of the group under which this setting belongs."
		):ToSubclass Amended
		]
	uint16 GroupId;
};


// ============================================================================
// Intel IANet_AdapterSetting Abstract Base Class
// ============================================================================
		[Abstract, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),
		 Description("IANet_AdapterSetting objectifies Adapter instance related "
		 "driver and network device settings. IANet_AdapterSetting is an "
		 "Abstract superclass for a set of concrete classes of different "
		 "types.  This set of classes allows open ended usage of a variable "
		 "number of settings." 
		):Amended,  LOCALE(0x409)
		]
class IANet_AdapterSetting : IANet_Setting
{

};


// ============================================================================
// AdapterSetting Int Class
// ============================================================================

		[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
		 Description("IANet_AdapterSettingInt objectifies Adapter related "
		 "driver and network device settings. IANet_AdapterSettingInt " 
		 "specifically handles Integer settings. The following "
		 "constraints are placed on the CurrentValue and default value:\n"
		 "	min <= CurrentValue <= max\n"
		 "	( CurrentValue - base ) is a multiple of step\n"):Amended,  LOCALE(0x409)]
class IANet_AdapterSettingInt : IANet_AdapterSetting
{
		[Description(
		 "Min is the minimum value that the integer can take."):Amended]
	sint64 min;

		[Description(
		 "Max is the maximum value that the integer can take."):Amended]
	sint64 max;

		[Description(
		 "Step is the granularity of the integer value."):Amended]
	sint64 step;

		[Description(
		 "Base is the root from which the integer value may take values. i.e. "
		 " CurrentValue - base is a multiple of step."):Amended]
	uint64 base;

		[Description(
		 "DefaultValue is the initial value of the parameter."):Amended]	
	sint64 DefaultValue;

		[Write, Description(
		 "CurrentValue is the actual value of the parameter - this is the only attribute that "
		 "the user can change."):Amended]	
	sint64 CurrentValue;

		[Description(
		 "Scale is unit of measurement to set or estimate series of marks "
		 "or points at known intervals to measure value of the parameter."):Amended]	
	sint64 Scale;
	
};

// ============================================================================
//  Adapter Setting Enum Class
// ============================================================================
		[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
		 Description("IANet_AdapterSettingEnum objectifies Adapter related "
		 "driver and network device settings. IANet_AdapterSettingEnum " 
		 "specifically handles Enumeration settings"):Amended,  LOCALE(0x409)
		]
class IANet_AdapterSettingEnum : IANet_AdapterSetting
{
		[Description(
		 "PossibleValues is an array of the possible values allowed for the enum."):Amended
		]	
	sint64 PossibleValues[];
		
		[Description(
		 "DescriptionMap describes what each value means."):Amended
		]	
	string DescriptionMap[];
		
		[write, Description(
		 "CurrentValue is the current setting for this parameter."):Amended
		]	 
	sint64 CurrentValue;
		
		[Description(
		 "DefaultValue is the initial setting for this value."):Amended
		]
	sint64 DefaultValue;
};

// ============================================================================
//  Adapter Setting Slider Class
// ============================================================================
    [dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
    Description("IANet_AdapterSettingSlider objectifies Adapter related "
    "driver and network device settings. IANet_AdapterSettingSlider " 
    "specifically handles Slider settings"):Amended,  LOCALE(0x409)
    ]
class IANet_AdapterSettingSlider : IANet_AdapterSetting
{
		[Description(
		 "PossibleValues is an array of all the possible values.  The values "
		 "should be arranged with the first value on the left of the slider and "
		 "the last value on the right. "):Amended
		]
	sint64 PossibleValues[];
		[write, Description(
		 "CurrentValue is the current setting for this parameter."):Amended
		] 
	sint64 CurrentValue;

		[Description(
		 "DefaultValue is the initial setting for this parameter."):Amended
		]
	sint64 DefaultValue;
		
		[Description(
		 "FirstLabel is the label that should be displayed on the left of the slider."):Amended
		]
	string FirstLabel;
		[Description(
		 "LastLabel is the label that should be displayed on the right of the slider."):Amended
		]
	string LastLabel;
};

// ============================================================================
//  Adapter Setting Multi Selection Class
// ============================================================================
    [dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
    Description("IANet_AdapterSettingMultiSelection objectifies Adapter related "
    "driver and network device settings. IANet_AdapterSettingMultiSelection " 
    "specifically handles Multi Selection settings."):Amended,  LOCALE(0x409)
    ]

class IANet_AdapterSettingMultiSelection : IANet_AdapterSetting
{
		[Description(
		 "PossibleValues is an array of all the possible selections."):Amended
		]
	sint64 PossibleValues[];
		[Description(
		 "DescriptionMap is an array of descriptions of the possible selections."):Amended
		]
	string DescriptionMap[];
		[write, Description(
		 "Current value is a bit-wise OR of the currently chosen options from the "
		 "possible values."):Amended
		] 
	sint64 CurrentValue;

		[write, Description(
		 "Default value is a bit-wise OR of the default options from the "
		 "possible values."):Amended	
		] 
	sint64 DefaultValue;
	
};

// ============================================================================
//  Adapter Setting String Class
// ============================================================================
		[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
		 Description("IANet_AdapterSettingString objectifies Adapter related "
		 "driver and network device settings. IANet_AdapterSettingString " 
		 "specifically handles String settings."):Amended,  LOCALE(0x409)
		]
class IANet_AdapterSettingString : IANet_AdapterSetting
{
		[Description("MaxLength is the maximum length of the string."):Amended]
	uint32  MaxLength;

		[write, Description("CurrentString is the current value for the parameter."):Amended] 
	string  CurrentValue;

		[Description("DefaultString is the initial value for the parameter."):Amended]
	string  DefaultValue;
};

// ============================================================================
//  Adapter Setting Multi String Class
// ============================================================================
		[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"),  
		 Description("IANet_AdapterSettingMultiString objectifies Adapter related "
		 "driver and network device settings. IANet_AdapterSettingMultiString " 
		 "specifically handles Multi String settings."):Amended,  LOCALE(0x409)
		]
class IANet_AdapterSettingMultiString : IANet_AdapterSetting
{
		[Description("MaxLength is the maximum length of the string."):Amended]
	uint32  MaxLength;

		[write, Description("CurrentString is the current values for the parameter."):Amended] 
	string  CurrentValues[];

		[Description("DefaultString is the initial value for the parameter."):Amended]
	string  DefaultValue;
};


// ============================================================================
// IANet_AdapterToSettingAssoc class
// ============================================================================
[   Association, Description("This class associates Intel NICs with their respective settings.")
                :Amended,  LOCALE(0x409),
    Dynamic,
    Provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll")
]
class IANet_AdapterToSettingAssoc  : CIM_ElementSetting
{
   [  Override("Element"),
      Description ("The Adapter to which the Setting object belongs."):Amended
   ]
   IANet_PhysicalEthernetAdapter REF Element = NULL;
   [  Override("Setting"),
      Description ("The Setting belonging to the Adapter."):Amended
   ]
   IANet_AdapterSetting REF Setting = NULL;
};


// ============================================================================
// NetService class
// ============================================================================
// TO BE DECIDED:: The Save Restore functionality, if not at Component Level,
// then Save Restore functionality can be handled in this class. TBD
//=============================================================================
[dynamic, provider("Ncs2"), IANet_ModuleIdentifier("Ncs2Core.dll"), Description (
"IANet_NetService is used to manage the interface supported by the provider.  "
"All set operations require a unique Client handle in the context if they are to "
"succeed."):Amended,  LOCALE(0x409)
]
class IANet_NetService: CIM_Service
{
	[Description (
		 "Version of Intel NCS software stack."
		 ):Amended]
	string Version;

	[Description (
	"The BeginApply method creates a new Client handle that can be used "
	"for any set operations on the IANet classes. "
	"Parameters:\n"
	"	ClientSetHandle - returns the new Set handle\n"	
	"Return code:\n"
	"	0 if operation was successful\n"
	"	non-zero if operation failed - check extended error status\n"
	):Amended, implemented
	] 
	uint32 BeginApply(
		[OUT] uint32 ClientSetHandle 		
		);

	[Description (
	"The Apply method commits any changes that the user has made with a "
	"Client Set handle. After this method is invoked the Client Set Handle is invalidated and a new handle needs to be acquired before the next Set operation"
	"Parameters:\n"
	"	ClientSetHandle - Handle with which the set operations were performed\n"
	"	FollowupAction - caller may be required to do something before "
	"	changes will take effect.\n"
	"Return code:\n"
	"	0 if operation was successful\n"
	"	non-zero if operation failed - check extended error status\n"
	):Amended, implemented 
	]
	uint32 Apply(
		[IN] uint32 ClientSetHandle,
		[OUT,
		ValueMap {"0", "1"} :Amended, 
		Values {"No Action Required", "Reboot"}: Amended] 
		uint32 FollowupAction
		);		

};


// ============================================================================
// Extended Status class
// ============================================================================
[Description (
"IANet_ExtendedStatus is used to return error information back to the "
"caller if something went wrong with an operation."):Amended,  LOCALE(0x409)
]
class IANet_ExtendedStatus : __ExtendedStatus 
{
		[Description (
		 "The code file name in the provider where the error occurred."
		 ):Amended]
	string File;

		[Description (
		 "The line number in the code file where the error occurred."
		 ):Amended]
	uint32 Line;
		[Description (
		 "The ClientSetHandle used in the call that caused the problem."
		 ):Amended]
	uint32 ClientSetHandle;

		[Description (
		 "If a technical rule has failed this array provides several strings "
		 "explaining the reasons for the failure. "
		 ):Amended]
	string RuleFailureReasons[];

};




