Description: Add support for Dell 13G server. Add support for upcoming Dell PowerEdge 13G server and replace multiple if statments. Based on patch from SriniG Author: Jörg Frings-Fürst Origin: based on patch from SriniG Bug: http://sourceforge.net/p/ipmitool/patches/102/ Bug-debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=756555 Forwarded: http://sourceforge.net/p/ipmitool/patches/102/ Reviewed-by: 2014-08-07 SriniG Last-Update: 2014-08-07 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ Index: trunk/include/ipmitool/ipmi_delloem.h =================================================================== --- trunk.orig/include/ipmitool/ipmi_delloem.h 2014-08-04 17:24:11.291429804 +0200 +++ trunk/include/ipmitool/ipmi_delloem.h 2014-08-04 17:24:11.279429542 +0200 @@ -72,6 +72,7 @@ #define IDRAC_11G 1 #define IDRAC_12G 2 +#define IDRAC_13G 3 // Return Error code for license #define LICENSE_NOT_SUPPORTED 0x6F #define VFL_NOT_LICENSED 0x33 @@ -184,6 +185,9 @@ #define IMC_IDRAC_12G_MONOLITHIC (uint8_t) (0x10) #define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11) +#define IMC_IDRAC_13G_MONOLITHIC (uint8_t) (0x20) +#define IMC_IDRAC_13G_MODULAR (uint8_t) (0x21) +#define IMC_IDRAC_13G_DCS (uint8_t) (0x22) typedef struct Index: trunk/lib/ipmi_delloem.c =================================================================== --- trunk.orig/lib/ipmi_delloem.c 2014-08-04 17:24:11.291429804 +0200 +++ trunk/lib/ipmi_delloem.c 2014-08-04 17:24:11.279429542 +0200 @@ -123,6 +123,16 @@ static int current_arg =0; uint8_t iDRAC_FLAG=0; + +/* + * new flags for + * 11G || 12G || 13G -> _ALL + * 12G || 13G -> _12_13 + * + */ +uint8_t iDRAC_FLAG_ALL=0; +uint8_t iDRAC_FLAG_12_13=0; + LCD_MODE lcd_mode; static uint8_t LcdSupported=0; static uint8_t SetLEDSupported=0; @@ -358,7 +368,7 @@ lprintf(LOG_ERR, "lcd is not supported on this system."); return -1; } else if (strncmp(argv[current_arg], "info\0", 5) == 0) { - if ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G)) { + if (iDRAC_FLAG_ALL) { rc = ipmi_lcd_get_info_wh(intf); } else { rc = ipmi_lcd_get_info(intf); @@ -392,7 +402,7 @@ } } if ((strncmp(argv[current_arg], "mode\0", 5) == 0) - && ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) { + && (iDRAC_FLAG_ALL)) { current_arg++; if (argc <= current_arg) { ipmi_lcd_usage(); @@ -446,7 +456,7 @@ ipmi_lcd_usage(); } } else if ((strncmp(argv[current_arg], "lcdqualifier\0", 13) == 0) - && ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) { + && (iDRAC_FLAG_ALL)) { current_arg++; if (argc <= current_arg) { ipmi_lcd_usage(); @@ -470,7 +480,7 @@ ipmi_lcd_usage(); } } else if ((strncmp(argv[current_arg], "errordisplay\0", 13) == 0) - && ((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G))) { + && (iDRAC_FLAG_ALL)) { current_arg++; if (argc <= current_arg) { ipmi_lcd_usage(); @@ -635,17 +645,33 @@ val2str(rsp->ccode, completion_code_vals)); */ return -1; } + /* + * Set the new flags to 0 + */ + iDRAC_FLAG_ALL = 0; + iDRAC_FLAG_12_13 = 0; /* Support the 11G Monolithic, modular, Maisy and Coaster */ if ((IMC_IDRAC_11G_MONOLITHIC == data[10]) || (IMC_IDRAC_11G_MODULAR == data[10]) || (IMC_MASER_LITE_BMC == data[10]) || (IMC_MASER_LITE_NU == data[10])) { iDRAC_FLAG=IDRAC_11G; + iDRAC_FLAG_ALL = 1; } else if((IMC_IDRAC_12G_MONOLITHIC == data[10]) || (IMC_IDRAC_12G_MODULAR == data[10])) { iDRAC_FLAG = IDRAC_12G; + iDRAC_FLAG_ALL = 1; + iDRAC_FLAG_12_13 = 1; + } else if( (IMC_IDRAC_13G_MONOLITHIC == data[10]) + || (IMC_IDRAC_13G_MODULAR == data[10]) + || (IMC_IDRAC_13G_DCS == data[10]) ) { + iDRAC_FLAG=IDRAC_13G; + iDRAC_FLAG_ALL = 1; + iDRAC_FLAG_12_13 = 1; } else { iDRAC_FLAG = 0; + iDRAC_FLAG_ALL = 0; + iDRAC_FLAG_12_13 = 0; } IMC_Type = data[10]; return 0; @@ -1394,7 +1420,7 @@ lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, -"iDRAC 11g or iDRAC 12g:"); +"iDRAC 11g or iDRAC 12g or iDRAC 13g :"); lprintf(LOG_NOTICE, " lcd set {mode}|{lcdqualifier}|{errordisplay}"); lprintf(LOG_NOTICE, @@ -1561,7 +1587,9 @@ return -1; } if ((IMC_IDRAC_12G_MODULAR == IMC_Type) - || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) { + || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type) + || (IMC_IDRAC_13G_MODULAR == IMC_Type) + || (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) { /* Get the Chasiss Assigned MAC Addresss for 12g Only */ memcpy(VirtualMacAddress, ((rsp->data) + 1), MACADDRESSLENGH); for (i = 0; i < MACADDRESSLENGH; i++) { @@ -1599,6 +1627,9 @@ } else if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) { printf("\niDRAC7 MAC Address "); + } else if ((IMC_IDRAC_13G_MODULAR == IMC_Type) + || (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) { + printf ("\niDRAC8 MAC Address "); } else if ((IMC_MASER_LITE_BMC== IMC_Type) || (IMC_MASER_LITE_NU== IMC_Type)) { printf("\nBMC MAC Address "); @@ -1668,6 +1699,9 @@ } else if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type)) { printf("\niDRAC7 MAC Address "); + } else if ((IMC_IDRAC_13G_MODULAR == IMC_Type) + || (IMC_IDRAC_13G_MONOLITHIC== IMC_Type)) { + printf ("\niDRAC8 MAC Address "); } else if ((IMC_MASER_LITE_BMC== IMC_Type) || (IMC_MASER_LITE_NU== IMC_Type)) { printf("\n\rBMC MAC Address "); @@ -1879,6 +1913,8 @@ || IMC_IDRAC_11G_MONOLITHIC == IMC_Type) || (IMC_IDRAC_12G_MODULAR == IMC_Type || IMC_IDRAC_12G_MONOLITHIC == IMC_Type) + || (IMC_IDRAC_13G_MODULAR == IMC_Type + || IMC_IDRAC_13G_MONOLITHIC == IMC_Type) || (IMC_MASER_LITE_NU == IMC_Type || IMC_MASER_LITE_BMC== IMC_Type)) { return ipmi_macinfo_11g(intf,NicNum); } else { @@ -1946,7 +1982,7 @@ ipmi_lan_usage(); return -1; } - if (iDRAC_FLAG == IDRAC_12G) { + if (iDRAC_FLAG_12_13) { nic_selection = get_nic_selection_mode_12g(intf, current_arg, argv, nic_set); if (INVALID == nic_selection) { @@ -2063,7 +2099,7 @@ } if (argv[current_arg] != NULL && strncmp(argv[current_arg], "lom1\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) { return INVAILD_SHARED_MODE; } if (failover) { @@ -2082,7 +2118,7 @@ return 0; } else if (argv[current_arg] != NULL && strncmp(argv[current_arg], "lom2\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) { return INVAILD_SHARED_MODE; } if (failover) { @@ -2101,7 +2137,7 @@ return 0; } else if (argv[current_arg] != NULL && strncmp(argv[current_arg], "lom3\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) { return INVAILD_SHARED_MODE; } if (failover) { @@ -2120,7 +2156,7 @@ return 0; } else if (argv[current_arg] != NULL && strncmp(argv[current_arg], "lom4\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) { return INVAILD_SHARED_MODE; } if (failover) { @@ -2139,7 +2175,7 @@ return 0; } else if (failover && argv[current_arg] != NULL && strncmp(argv[current_arg], "none\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type) ) { return INVAILD_SHARED_MODE; } if (failover) { @@ -2159,7 +2195,7 @@ current_arg++; if (failover && argv[current_arg] != NULL && strncmp(argv[current_arg], "loms\0", 5) == 0) { - if (IMC_IDRAC_12G_MODULAR == IMC_Type) { + if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_13G_MODULAR == IMC_Type)) { return INVAILD_SHARED_MODE; } if (nic_set[0] == 1) { @@ -2242,7 +2278,8 @@ lprintf(LOG_ERR, "Error in setting nic selection"); return -1; } else if( (nic_selection[0] == 1) - && ((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED))) { + && (( iDRAC_FLAG_12_13 ) + && (rsp->ccode == LICENSE_NOT_SUPPORTED))) { /* Check license only for setting the dedicated nic. */ lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); @@ -2297,7 +2334,7 @@ input_length = 0; req.msg.netfn = DELL_OEM_NETFN; req.msg.lun = 0; - if (iDRAC_FLAG == IDRAC_12G) { + if( iDRAC_FLAG_12_13 ) { req.msg.cmd = GET_NIC_SELECTION_12G_CMD; } else { req.msg.cmd = GET_NIC_SELECTION_CMD; @@ -2314,7 +2351,7 @@ return -1; } nic_selection = rsp->data[0]; - if (iDRAC_FLAG == IDRAC_12G) { + if( iDRAC_FLAG_12_13 ) { nic_selection_failover = rsp->data[1]; if ((nic_selection < 6) && (nic_selection > 0) && (nic_selection_failover < 7)) { @@ -2413,7 +2450,7 @@ lprintf(LOG_NOTICE, " sets the NIC Selection Mode :"); lprintf(LOG_NOTICE, -" on iDRAC12g :"); +" on iDRAC12g OR iDRAC13g :"); lprintf(LOG_NOTICE, " dedicated, shared with lom1, shared with lom2,shared with lom3,shared"); lprintf(LOG_NOTICE, @@ -2433,7 +2470,7 @@ lprintf(LOG_NOTICE, " lan get "); lprintf(LOG_NOTICE, -" on iDRAC12g :"); +" on iDRAC12g or iDRAC13g :"); lprintf(LOG_NOTICE, " returns the current NIC Selection Mode (dedicated, shared with lom1, shared"); lprintf(LOG_NOTICE, @@ -2662,7 +2699,7 @@ if (rsp == NULL) { lprintf(LOG_ERR, "Error getting powercap status"); return -1; - } else if((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { + } else if(( iDRAC_FLAG_12_13 ) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; /* Return Error as unlicensed */ @@ -2713,7 +2750,7 @@ if (rsp == NULL) { lprintf(LOG_ERR, "Error setting powercap status"); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; /* return unlicensed Error code */ @@ -2807,7 +2844,7 @@ return -1; } - if((iDRAC_FLAG == IDRAC_12G) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { + if((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -2910,7 +2947,7 @@ if (rsp == NULL) { lprintf(LOG_ERR, "Error clearing power values."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) + } else if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); @@ -2988,7 +3025,7 @@ if (rsp == NULL) { lprintf(LOG_ERR, "Error getting power headroom status"); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) + } else if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); @@ -3122,7 +3159,7 @@ if (rsp == NULL) { lprintf(LOG_ERR, "Error getting instantaneous power consumption data ."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) + } else if ((iDRAC_FLAG_12_13) && (rsp->ccode == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); @@ -3215,7 +3252,7 @@ lprintf(LOG_ERR, "Error getting average power consumption history data."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3264,7 +3301,7 @@ if (rc < 0) { lprintf(LOG_ERR, "Error getting peak power consumption history data."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3321,7 +3358,7 @@ if (rc < 0) { lprintf(LOG_ERR, "Error getting peak power consumption history data ."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3518,7 +3555,7 @@ if (rc < 0) { lprintf(LOG_ERR, "Error getting power cap."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3618,7 +3655,7 @@ if (rc < 0) { lprintf(LOG_ERR, "Error getting power cap."); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3698,7 +3735,7 @@ if (rc < 0) { lprintf(LOG_ERR, "Error setting power cap"); return -1; - } else if ((iDRAC_FLAG == IDRAC_12G) && (rc == LICENSE_NOT_SUPPORTED)) { + } else if ((iDRAC_FLAG_12_13) && (rc == LICENSE_NOT_SUPPORTED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired"); return -1; @@ -3860,7 +3897,7 @@ sdcardinfoblock = (IPMI_DELL_SDCARD_INFO *) (void *) rsp->data; - if ((iDRAC_FLAG == IDRAC_12G) + if ((iDRAC_FLAG_12_13) && (sdcardinfoblock->vflashcompcode == VFL_NOT_LICENSED)) { lprintf(LOG_ERR, "FM001 : A required license is missing or expired");