From: <Srinivas_G_Gowda@Dell.com> - 2012-07-03 09:30:38
|
Dell specific mac sub command is updated to support the latest 12G Dell servers. Support for virtual mac is also implemented. Signed-off-by: Srinivas Gowda G <Srinivas_G_Gowda@Dell.com> --- include/ipmitool/ipmi_delloem.h | 1 + lib/ipmi_delloem.c | 55 +++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/include/ipmitool/ipmi_delloem.h b/include/ipmitool/ipmi_delloem.h index a82587c..0ef81b3 100644 --- a/include/ipmitool/ipmi_delloem.h +++ b/include/ipmitool/ipmi_delloem.h @@ -182,6 +182,7 @@ typedef struct _lcd_mode #define IMC_IDRAC_11G_MODULAR (uint8_t) (0x0B) #define IMC_UNUSED (uint8_t) (0x0C) #define IMC_MASER_LITE_BMC (uint8_t) (0x0D) +#define IMC_MASER_LITE_NU (uint8_t) (0x0E) #define IMC_IDRAC_12G_MONOLITHIC (uint8_t) (0x10) #define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11) diff --git a/lib/ipmi_delloem.c b/lib/ipmi_delloem.c index 963a321..4c01f73 100644 --- a/lib/ipmi_delloem.c +++ b/lib/ipmi_delloem.c @@ -751,8 +751,10 @@ ipmi_idracvalidator_command (struct ipmi_intf * intf) /*lprintf(LOG_ERR, " Error getting IMC type: %s", val2str(rsp->ccode, completion_code_vals)); */ return -1; - } - if( (IMC_IDRAC_11G_MONOLITHIC == rsp->data[10]) || (IMC_IDRAC_11G_MODULAR ==rsp->data[10]) ) + } + /* Support the 11G Monolithic, modular, Maisy and Coaster */ + if( (IMC_IDRAC_11G_MONOLITHIC == rsp->data[10]) || (IMC_IDRAC_11G_MODULAR ==rsp->data[10]) || + (IMC_MASER_LITE_BMC == rsp->data[10]) || (IMC_MASER_LITE_NU ==rsp->data[10]) ) { iDRAC_FLAG=IDRAC_11G; } @@ -1890,6 +1892,7 @@ ipmi_lcd_usage(void) static int ipmi_delloem_mac_main (struct ipmi_intf * intf, int argc, char ** argv) { int rc = 0; + int currIdInt = -1; current_arg++; if (argc > 1 && strcmp(argv[current_arg], "help") == 0) @@ -1914,12 +1917,14 @@ static int ipmi_delloem_mac_main (struct ipmi_intf * intf, int argc, char ** arg ipmi_mac_usage(); return -1; } - int currIdInt; - make_int(argv[current_arg],&currIdInt); - if(currIdInt>8) + + if(make_int(argv[current_arg],&currIdInt) < 0) { + lprintf(LOG_ERR, "Invalid NIC number. The NIC number should be between 0-8\n"); + return -1; + } + if( (currIdInt > 8) || (currIdInt < 0) ) { lprintf(LOG_ERR, "Invalid NIC number. The NIC number should be between 0-8\n"); - ipmi_mac_usage(); return -1; } rc = ipmi_macinfo(intf, currIdInt); @@ -2016,6 +2021,30 @@ static int ipmi_macinfo_drac_idrac_virtual_mac(struct ipmi_intf* intf,uint8_t Ni { return -1; } + if( (IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type) ) { + // Get the Chasiss Assigned MAC Addresss for 12g Only + memcpy(VirtualMacAddress,((rsp->data)+1),MACADDRESSLENGH); + + for (i=0;i<MACADDRESSLENGH;i++) + { + if (0 != VirtualMacAddress [i]) + { + UseVirtualMacAddress = 1; + } + } + // Get the Server Assigned MAC Addresss for 12g Only + if(!UseVirtualMacAddress) { + memcpy(VirtualMacAddress,((rsp->data)+1+MACADDRESSLENGH),MACADDRESSLENGH); + + for (i=0;i<MACADDRESSLENGH;i++) + { + if (0 != VirtualMacAddress [i]) + { + UseVirtualMacAddress = 1; + } + } + } + } else { memcpy(VirtualMacAddress,((rsp->data)+VIRTUAL_MAC_OFFSET),MACADDRESSLENGH); for (i=0;i<MACADDRESSLENGH;i++) @@ -2025,10 +2054,17 @@ static int ipmi_macinfo_drac_idrac_virtual_mac(struct ipmi_intf* intf,uint8_t Ni UseVirtualMacAddress = 1; } } + } if (0 == UseVirtualMacAddress) return -1; if (IMC_IDRAC_10G == IMC_Type) - printf ("\nDRAC MAC Address "); + printf ("\nDRAC MAC Address "); + else if ( (IMC_IDRAC_11G_MODULAR == IMC_Type) || (IMC_IDRAC_11G_MONOLITHIC== IMC_Type) ) + printf ("\niDRAC6 MAC Address "); + else if ( (IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type) ) + printf ("\niDRAC7 MAC Address "); + else if ( (IMC_MASER_LITE_BMC== IMC_Type) || (IMC_MASER_LITE_NU== IMC_Type) ) + printf ("\nBMC MAC Address "); else printf ("\niDRAC6 MAC Address "); @@ -2103,6 +2139,8 @@ static int ipmi_macinfo_drac_idrac_mac(struct ipmi_intf* intf,uint8_t NicNum) printf ("\niDRAC6 MAC Address "); else if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) printf ("\niDRAC7 MAC Address "); + else if ( (IMC_MASER_LITE_BMC== IMC_Type) || (IMC_MASER_LITE_NU== IMC_Type) ) + printf ("\n\rBMC MAC Address "); else printf ("\niDRAC6 MAC Address "); @@ -2365,7 +2403,8 @@ static int ipmi_macinfo (struct ipmi_intf* intf, uint8_t NicNum) return ipmi_macinfo_10g (intf,NicNum); } else if ((IMC_IDRAC_11G_MODULAR == IMC_Type || IMC_IDRAC_11G_MONOLITHIC== IMC_Type ) || - (IMC_IDRAC_12G_MODULAR == IMC_Type || IMC_IDRAC_12G_MONOLITHIC== IMC_Type ) ) + (IMC_IDRAC_12G_MODULAR == IMC_Type || IMC_IDRAC_12G_MONOLITHIC== IMC_Type ) || + (IMC_MASER_LITE_NU== IMC_Type || IMC_MASER_LITE_BMC== IMC_Type )) { return ipmi_macinfo_11g (intf,NicNum); } -- 1.7.7.6 Thanks, G |