Firstly, Sorry about the long long delay with the response. Because of a few personal and work items, had to push this to the back burner. Have a few cycles to work on this and would like to get this going again.
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;
[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[];
/* 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; */
[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[];
/*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*/
[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" )] uint32 set_IP4Address( [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);
[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." )] string get_active_nic();
};
Thank you Praveen K Paladugu Dell Linux Engineering
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@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
Jan
Thanks for the Comments!! Updated the MOF as recommended (for the most part).
An Array of IPaddresses was recommended in the last thread, so updated the MOF accordingly. I pinged some folks on Dell's Service Processor team to check if multiple IP addresses can be assigned a BMC NIC. Will update as soon as I hear something.
[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 PermanentMACAddress;
[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_URLs[];
/* 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 indexed IndentifyingDescriptions and OtheridentifyingInfo Arrays of CIM_LogicalDevice. #string Manufacturer_ID; #string Manufacturer; #string Model; */
[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"), ArrayType ("Indexed"), MaxLen (256), ModelCorrespondence {"LMI_BMC.SupportedProtoVersion"} ] string SupportedProtos[];
[Description("This Array will capture the version of the supported protocol listed in the corresponding index of SupportedProtos "), ArrayType ("Indexed"), ModelCorrespondence {"LMI_BMC.SupportedProtos" } ] string SupportedProtoVersion[];
/*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*/
[Description("Function to add a new IPv4 address to BMC.")' ValueMap ("0","1","2")' Values ("Success", "Failed", "Invalid Argument")] uint32 set_IP4Address( [IN, Description ("Set the IP address of the BMC, to the input value")] string IP4Address, [IN, Description ("Set the netmask to this input value")] string Netmask, [IN, Description ("Set the gateway this input value")] string Gateway);
[Description("Function to assign a new IPv6 address to BMC."), ValueMap ("0","1","2"), Values ("Success", "Failed", "Invalid Argument")] uint32 set_IP6Address( [IN, Description ("Set the IP address of the BMC, to the input value")] string IP6Address, [IN, Description ("Set the netmask to this input value")] string Netmask, [IN, Description ("Set the gateway on BMC to this input value")] string Gateway);
[Description("Function to assign a VLAN ID to BMC.") ValueMap ("0","1","2") Values ("Success", "Failed", "Invalid Argument")] uint32 set_VLAN( [IN, Description("Set the VLAN ID of BMC NIC to this input value")] string 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 know which the case is."), ValueMap ("0", "1","2","3","4"), Values ("Dedicated", "LOM1","LOM2","LOM3","LOM4")] string get_active_nic();
};
Thank you Praveen K Paladugu Dell Linux Engineering
Consolidating all the past comments on the MOF structure, I put together a basic implementation of lmi-bmc provider (with just enumeration enabled)at https://github.com/praveen-pk/lmi-bmc. Please give this a spin and let me know your comments/suggestions.
This provider works fine on Dell System with IPMI service running. There is much work left while handling the error cases, so the code is a bit unstable.
Thank you Praveen K Paladugu Dell Linux Engineering
From: openlmi-devel-bounces@lists.fedorahosted.org [mailto:openlmi-devel-bounces@lists.fedorahosted.org] On Behalf Of Paladugu, Praveen Sent: Monday, May 05, 2014 5:06 PM To: jsafrane@redhat.com; openlmi-devel@lists.fedorahosted.org Subject: RE: A provider for publishing Management Controller (Service Processor) information
Jan
Thanks for the Comments!! Updated the MOF as recommended (for the most part).
An Array of IPaddresses was recommended in the last thread, so updated the MOF accordingly. I pinged some folks on Dell's Service Processor team to check if multiple IP addresses can be assigned a BMC NIC. Will update as soon as I hear something.
[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 PermanentMACAddress;
[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_URLs[];
/* 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 indexed IndentifyingDescriptions and OtheridentifyingInfo Arrays of CIM_LogicalDevice. #string Manufacturer_ID; #string Manufacturer; #string Model; */
[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"), ArrayType ("Indexed"), MaxLen (256), ModelCorrespondence {"LMI_BMC.SupportedProtoVersion"} ] string SupportedProtos[];
[Description("This Array will capture the version of the supported protocol listed in the corresponding index of SupportedProtos "), ArrayType ("Indexed"), ModelCorrespondence {"LMI_BMC.SupportedProtos" } ] string SupportedProtoVersion[];
/*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*/
[Description("Function to add a new IPv4 address to BMC.")' ValueMap ("0","1","2")' Values ("Success", "Failed", "Invalid Argument")] uint32 set_IP4Address( [IN, Description ("Set the IP address of the BMC, to the input value")] string IP4Address, [IN, Description ("Set the netmask to this input value")] string Netmask, [IN, Description ("Set the gateway this input value")] string Gateway);
[Description("Function to assign a new IPv6 address to BMC."), ValueMap ("0","1","2"), Values ("Success", "Failed", "Invalid Argument")] uint32 set_IP6Address( [IN, Description ("Set the IP address of the BMC, to the input value")] string IP6Address, [IN, Description ("Set the netmask to this input value")] string Netmask, [IN, Description ("Set the gateway on BMC to this input value")] string Gateway);
[Description("Function to assign a VLAN ID to BMC.") ValueMap ("0","1","2") Values ("Success", "Failed", "Invalid Argument")] uint32 set_VLAN( [IN, Description("Set the VLAN ID of BMC NIC to this input value")] string 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 know which the case is."), ValueMap ("0", "1","2","3","4"), Values ("Dedicated", "LOM1","LOM2","LOM3","LOM4")] string get_active_nic();
};
Thank you Praveen K Paladugu Dell Linux Engineering
Hello,
Could you please fix the license of https://github.com/praveen-pk/lmi-bmc to lesser gpl?
Thank you.
----- Original Message ----- From: "Praveen Paladugu" Praveen_Paladugu@Dell.com To: openlmi-devel@lists.fedorahosted.org, jsafrane@redhat.com Sent: Monday, June 2, 2014 9:43:34 PM Subject: RE: A provider for publishing Management Controller (Service Processor) information
Consolidating all the past comments on the MOF structure, I put together a basic implementation of lmi-bmc provider (with just enumeration enabled)at https://github.com/praveen-pk/lmi-bmc . Please give this a spin and let me know your comments/suggestions.
This provider works fine on Dell System with IPMI service running. There is much work left while handling the error cases, so the code is a bit unstable.
Thank you
Praveen K Paladugu
Dell Linux Engineering
From: openlmi-devel-bounces@lists.fedorahosted.org [mailto:openlmi-devel-bounces@lists.fedorahosted.org] On Behalf Of Paladugu, Praveen Sent: Monday, May 05, 2014 5:06 PM To: jsafrane@redhat.com; openlmi-devel@lists.fedorahosted.org Subject: RE: A provider for publishing Management Controller (Service Processor) information
Jan
Thanks for the Comments!!
Updated the MOF as recommended (for the most part).
An Array of IPaddresses was recommended in the last thread, so updated the MOF accordingly. I pinged some folks on Dell’s Service Processor team to check if multiple IP addresses can be assigned a BMC NIC. Will update as soon as I hear something.
[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 PermanentMACAddress;
[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_URLs[];
/* 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 indexed IndentifyingDescriptions and OtheridentifyingInfo Arrays of CIM_LogicalDevice.
#string Manufacturer_ID;
#string Manufacturer;
#string Model;
*/
[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”),
ArrayType (“Indexed”),
MaxLen (256),
ModelCorrespondence {“LMI_BMC.SupportedProtoVersion”} ]
string SupportedProtos[];
[Description(“This Array will capture the version of the supported protocol listed in the corresponding index of SupportedProtos ”),
ArrayType (“Indexed”),
ModelCorrespondence {“LMI_BMC.SupportedProtos” } ]
string SupportedProtoVersion[];
/*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*/
[Description("Function to add a new IPv4 address to BMC.")’
ValueMap (“0”,”1”,”2”)’
Values (“Success”, “Failed”, “Invalid Argument”)]
uint32 set_IP4Address(
[IN, Description ("Set the IP address of the BMC, to the input value")]
string IP4Address,
[IN, Description ("Set the netmask to this input value")]
string Netmask,
[IN, Description ("Set the gateway this input value")]
string Gateway);
[Description("Function to assign a new IPv6 address to BMC."),
ValueMap (“0”,”1”,”2”),
Values (“Success”, “Failed”, “Invalid Argument”)]
uint32 set_IP6Address(
[IN, Description ("Set the IP address of the BMC, to the input value")]
string IP6Address,
[IN, Description ("Set the netmask to this input value")]
string Netmask,
[IN, Description ("Set the gateway on BMC to this input value")]
string Gateway);
[Description("Function to assign a VLAN ID to BMC.")
ValueMap (“0”,”1”,”2”)
Values (“Success”, “Failed”, “Invalid Argument”)]
uint32 set_VLAN(
[IN, Description("Set the VLAN ID of BMC NIC to this input value")]
string 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 know which the case is."),
ValueMap (“0”, “1”,”2”,”3”,”4”),
Values (“Dedicated”, “LOM1”,”LOM2”,”LOM3”,”LOM4”)]
string get_active_nic();
};
Thank you Praveen K Paladugu Dell Linux Engineering
_______________________________________________ openlmi-devel mailing list openlmi-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/openlmi-devel
Ales,
Fixed the license as recommended.
Thank you Praveen K Paladugu Dell Linux Engineering
On 06/02/2014 09:43 PM, Praveen_Paladugu@dell.com wrote:
Consolidating all the past comments on the MOF structure, I put together a basic implementation of lmi-bmc provider (with just enumeration enabled)at https://github.com/praveen-pk/lmi-bmc. Please give this a spin and let me know your comments/suggestions.
This provider works fine on Dell System with IPMI service running. There is much work left while handling the error cases, so the code is a bit unstable.
Hello,
sorry for late response, I finally compiled the provider on one of our Dell PE 1850 and it seems to be on the right track.
As you pointed out, there are very little error cases and robustness. For example, our PE 1850 reports Vendor in BIOS as "Dell Computer Corporation" and your is_vendor_like_dell() check fails.
Jan
Jan,
Thanks for the inputs.
I committed the required changes to be able to detect the 18xx server as well. Unfortunately, I don't have any of those servers to check the fix. Please feel free to give the latest update a spin.
Also, I noticed that the provider fails with Selinux enabled. Am looking into this issue.
Thank you Praveen K Paladugu Dell Linux Engineering
openlmi-devel@lists.stg.fedorahosted.org