Hello Praveen,
Find my comments inline, they are mostly related to style, to make the
MOF look more CIM-ish.
On 05/02/2014 12:12 AM, Praveen_Paladugu(a)Dell.com wrote:
Based on the comments from the past threads, updated the MOF as
follows
and added some of my comments below, please take a look.
[Description("Model an Out of Band Management Controller and capture its
features and capabilities")]
class LMI_BMC : CIM_ManagementController
{
[Description("This variable, should always capture the latest ipv4
IP/s addresses of BMC.")]
string IP4Addresses[];
[Description("This variable, should always capture the latest ipv6
IP/s addresses of BMC.")]
string IP6Addresses[];
[Description("The VLAN setting on the BMC NIC port.")]
string VLAN;
[Description("This variable will capture MAC address of the BMC.”)]
string PermanentMACAddresses;
If the address is just one, then just 'PermanentMACAddress', without
'-es' suffix.
[Description(“If BMC provides any user friendly interfaces like http,
ftp etc, this variable will capture the related URL/s to interact with
BMC.”)]
string BMC_URL[];
Now the other way around... if there can be multiple URLs, then I would
add '-s' suffix to be consistent with IP4Addresses.
/* COMMENT: If the following properties are rolledup into
CIM_LogicalDevice, would a user enumerating LMI_BMC not be able to see
these properties? Or is it just a matter of how the Enumeration function
is defined for this class? */
/*
#Capture this information in IdentifyingDescriptions inherited from
CIM_LogicalDevice
#string Manufacturer_ID;
#string Manufacturer;
#string Model;
*/
What do you mean "rolledup into CIM_LogicalDevice"? There are no such
properties in CIM_LogicalDevices.
[Description(“This variable will capture the version of the firmware
installed on the BMC”)]
string FirmwareVersion;
[Description(“This Array will capture the list of protocols supported
by the BMC”)]
string SupportedProtos[];
[Description(“This Array will capture the version of the supported
protocol listed in the corresponding index of SupportedProtos ”)]
string SupportedProtoVersion[];
If two arrays must have items at the same positions, they should have
'ArrayType("Indexed")' qualifier to describe that items in the array
are
_not_ in arbitrary order:
[ArrayType("Indexed"), Description(...)]
string SupportedProtos[];
[ArrayType("Indexed"), Description(...)]
string SupportedProtoVersion[];
See DSP0004 for details.
/*COMMENT: Should the below function assign a new virtual ip address to
those already on the BMC? Or should the user be able to pass a list of
IP addresses to overwrite the existing ones? Am leaning towards the
latter option*/
From the model perspective, both are possible. I would suggest to
choose
the one that is the easiest to implement or is already implemented
somewhere else.
Just make sure it's functionally complete, so if there is a method to
add an IP address, there should be also method to remove it.
Out of curiositym is is possible for BMC to have multiple IPv4 addresses
at all? I have a feeling that IPMI does not support that, I am not sure
though.
[Description("Function to add a new IPv4 address to BMC."
"If the operation of setting the IP Address succeeds, return 0"
"If command fails, return 1"
"If the provided input is not a valid IP address, return 2"
)]
We use ValueMap in CIM to describe return codes instead of free-form text:
[ Description(...),
ValueMap("0", "1", "2"),
Values("Success", "Failed", "Invalid argument")]
uint32 set_IP4Address
uint32 set_IP4Address(
Also matter of taste/style: CIM uses CamelCase and very little
underscores, i.e. SetIP4Address(...) looks somewhat nicer.
[IN, Description ("Set the IP address of the BMC, to the
input value")]
string Input_IP,
[IN, Description ("Set the netmask to this input value")]
string Input_Netmask,
[IN, Description ("Set the gateway this input value")]
string Input_Gateway);
I don't think it's necessary to use 'Input_' prefix, there already is
'IN' qualifier to tell if it is input/output argument. It's just matter
of style though.
[Description("Function to assign a new IPv6 address to BMC."
"If the operation of setting the IP Address succeeds, return 0"
"If IPMI command fails, return 1"
"If the provided input is not a valid IP address, return 2"
)]
uint32 set_IP6Address(
[IN, Description ("Set the IP address of the BMC, to the
input value")]
string Input_IP6Address,
[IN, Description ("Set the netmask to this input value")]
string Input_Netmask,
[IN, Description ("Set the gateway on BMC to this input
value")]
string Input_Gateway);
[Description("Function to assign a VLAN ID to BMC."
"If the operation of setting the VLAN ID succeeds, return 0"
"If command fails, return 1"
"If the provided input is not a valid VLAN ID, return 2"
)]
uint32 set_VLAN(
[IN, Description("Set the VLAN ID of BMC NIC to this
input value")]
string Input_Vlan
);
[Description("Some servers have dedicated NIC attached to BMC, some
share a LOM used for host n/w communications. This function will let the
user determine which the case is."
"dedicated: will let the user know that BMC is using a dedicated NIC"
"A response like LOM1 will let the user know that BMC is sharing
LOM1 of the server with the OS."
Again, returning uint32 with defined ValueMap is nicer that just passing
strings.
)]
string get_active_nic();
};
Jan