mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
Add Dell OEM network commands
This commit is contained in:
parent
335d444213
commit
d06ddcd28b
@ -70,7 +70,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#define IPMI_DELL_IDRAC_VALIDATOR 0xDD
|
||||
#define IPMI_DELL_POWER_CAP_STATUS 0xBA
|
||||
#define IPMI_DELL_AVG_POWER_CONSMP_HST 0xEB
|
||||
#define IPMI_DELL_PEAK_POWER_CONSMP_HST 0xEC
|
||||
#define SYSTEM_BOARD_SYSTEM_LEVEL_SENSOR_NUM 0x98
|
||||
|
||||
#define IDRAC_11G 1
|
||||
#define IDRAC_12G 2
|
||||
#define btuphr 0x01
|
||||
#define watt 0x00
|
||||
#define IPMI_DELL_POWER_CAP 0xEA
|
||||
@ -176,6 +181,8 @@ 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_IDRAC_12G_MONOLITHIC (uint8_t) (0x10)
|
||||
#define IMC_IDRAC_12G_MODULAR (uint8_t) (0x11)
|
||||
|
||||
|
||||
|
||||
@ -216,9 +223,17 @@ typedef struct
|
||||
|
||||
#define TOTAL_N0_NICS_INDEX (uint8_t)(0x1)
|
||||
|
||||
|
||||
// 12g supported
|
||||
#define SET_NIC_SELECTION_12G_CMD (uint8_t)(0x28)
|
||||
#define GET_NIC_SELECTION_12G_CMD (uint8_t)(0x29)
|
||||
|
||||
// 11g supported
|
||||
#define SET_NIC_SELECTION_CMD (uint8_t)(0x24)
|
||||
#define GET_NIC_SELECTION_CMD (uint8_t)(0x25)
|
||||
#define GET_ACTIVE_NIC_CMD (uint8_t)(0xc1)
|
||||
#define POWER_EFFICENCY_CMD (uint8_t)(0xc0)
|
||||
#define SERVER_POWER_CONSUMPTION_CMD (uint8_t)(0x8F)
|
||||
|
||||
#define POWER_SUPPLY_INFO (uint8_t)(0xb0)
|
||||
#define IPMI_ENTITY_ID_POWER_SUPPLY (uint8_t)(0x0a)
|
||||
@ -229,6 +244,8 @@ typedef struct
|
||||
#define CLEAR_PWRMGMT_INFO_CMD (uint8_t)(0x9D)
|
||||
#define GET_PWR_HEADROOM_CMD (uint8_t)(0xBB)
|
||||
#define GET_PWR_CONSUMPTION_CMD (uint8_t)(0xB3)
|
||||
#define GET_FRONT_PANEL_INFO_CMD (uint8_t)0xb5
|
||||
|
||||
|
||||
typedef struct _ipmi_power_monitor
|
||||
{
|
||||
@ -242,6 +259,23 @@ typedef struct _ipmi_power_monitor
|
||||
} __attribute__ ((packed)) IPMI_POWER_MONITOR;
|
||||
|
||||
|
||||
#define MAX_POWER_FW_VERSION 8
|
||||
|
||||
typedef struct _ipmi_power_supply_infoo
|
||||
{
|
||||
/*No param_rev it is not a System Information Command */
|
||||
uint16_t ratedWatts;
|
||||
uint16_t ratedAmps;
|
||||
uint16_t ratedVolts;
|
||||
uint32_t vendorid;
|
||||
uint8_t FrimwareVersion[MAX_POWER_FW_VERSION];
|
||||
uint8_t Powersupplytype;
|
||||
uint16_t ratedDCWatts;
|
||||
uint16_t Resv;
|
||||
|
||||
} __attribute__ ((packed)) IPMI_POWER_SUPPLY_INFO;
|
||||
|
||||
|
||||
typedef struct ipmi_power_consumption_data
|
||||
{
|
||||
uint16_t actualpowerconsumption;
|
||||
@ -312,7 +346,7 @@ typedef struct _SensorReadingType
|
||||
uint8_t sensorFlags;
|
||||
uint16_t sensorState;
|
||||
}SensorReadingType;
|
||||
|
||||
uint16_t compareinputwattage(IPMI_POWER_SUPPLY_INFO* powersupplyinfo, uint16_t inputwattage);
|
||||
int ipmi_delloem_main(struct ipmi_intf * intf, int argc, char ** argv);
|
||||
|
||||
#endif /*IPMI_DELLOEM_H*/
|
||||
|
@ -31,6 +31,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
* <deepaganesh_paulraj@dell.com>
|
||||
*
|
||||
* This code implements a dell OEM proprietary commands.
|
||||
* This Code is edited and Implemented the License feature for Delloem
|
||||
* Author Harsha S <Harsha_S1@dell.com>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -68,13 +70,43 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
/*--------------time header-----------------*/
|
||||
#include <time.h>
|
||||
|
||||
#define DELL_OEM_NETFN (uint8_t)(0x30)
|
||||
#define DELL_OEM_NETFN (uint8_t)(0x30)
|
||||
#define GET_IDRAC_VIRTUAL_MAC (uint8_t)(0xC9)
|
||||
// 11g Support Macros
|
||||
#define INVALID -1
|
||||
#define SHARED 0
|
||||
#define SHARED_WITH_FAILOVER_LOM2 1
|
||||
#define DEDICATED 2
|
||||
#define SHARED_WITH_FAILOVER_ALL_LOMS 3
|
||||
char AciveLOM_String [5] [10] = {"dedicated","LOM1","LOM2","LOM3","LOM4" };
|
||||
#define INVALID -1
|
||||
|
||||
// 11g Support Strings for nic selection
|
||||
char NIC_Selection_Mode_String [4] [50] = { "shared",
|
||||
"shared with failover lom2",
|
||||
"dedicated",
|
||||
"shared with Failover all loms"
|
||||
};
|
||||
|
||||
// 11g Support Macros
|
||||
#define SHARED 0
|
||||
#define SHARED_WITH_FAILOVER_LOM2 1
|
||||
#define DEDICATED 2
|
||||
#define SHARED_WITH_FAILOVER_ALL_LOMS 3
|
||||
|
||||
// 12g Support Strings for nic selection
|
||||
char NIC_Selection_Mode_String_12g[] [50] = {
|
||||
"dedicated",
|
||||
"shared with lom1",
|
||||
"shared with lom2",
|
||||
"shared with lom3",
|
||||
"shared with lom4",
|
||||
"shared with failover lom1",
|
||||
"shared with failover lom2",
|
||||
"shared with failover lom3",
|
||||
"shared with failover lom4",
|
||||
"shared with failover all loms"
|
||||
};
|
||||
|
||||
static int current_arg =0;
|
||||
uint8_t iDRAC_FLAG=0;
|
||||
@ -92,6 +124,7 @@ uint8_t PowercapstatusFlag=0;
|
||||
|
||||
static void usage(void);
|
||||
|
||||
/* LCD Function prototypes */
|
||||
static int ipmi_delloem_lcd_main (struct ipmi_intf * intf, int argc, char ** argv);
|
||||
static int ipmi_lcd_get_platform_model_name (struct ipmi_intf * intf,char* lcdstring,
|
||||
uint8_t max_length,uint8_t field_type);
|
||||
@ -120,6 +153,7 @@ static int ipmi_lcd_configure (struct ipmi_intf * intf, int command,
|
||||
int8_t line_number, char * text);
|
||||
static void ipmi_lcd_usage(void);
|
||||
|
||||
/* MAC Function prototypes */
|
||||
static int ipmi_delloem_mac_main (struct ipmi_intf * intf, int argc, char ** argv);
|
||||
static int make_int(const char *str, int *value);
|
||||
static void InitEmbeddedNICMacAddressValues ();
|
||||
@ -130,6 +164,7 @@ static int ipmi_macinfo_11g (struct ipmi_intf* intf, uint8_t NicNum);
|
||||
static int ipmi_macinfo (struct ipmi_intf* intf, uint8_t NicNum);
|
||||
static void ipmi_mac_usage(void);
|
||||
|
||||
/* LAN Function prototypes */
|
||||
static int ipmi_delloem_lan_main (struct ipmi_intf * intf, int argc, char ** argv);
|
||||
static int IsLANSupported ();
|
||||
static int get_nic_selection_mode (int current_arg, char ** argv);
|
||||
@ -137,7 +172,9 @@ static int ipmi_lan_set_nic_selection (struct ipmi_intf* intf, uint8_t nic_selec
|
||||
static int ipmi_lan_get_nic_selection (struct ipmi_intf* intf);
|
||||
static int ipmi_lan_get_active_nic (struct ipmi_intf* intf);
|
||||
static void ipmi_lan_usage(void);
|
||||
static int ipmi_lan_set_nic_selection_12g (struct ipmi_intf* intf, uint8_t* nic_selection);
|
||||
|
||||
/* POwer monitor Function prototypes */
|
||||
static int ipmi_delloem_powermonitor_main (struct ipmi_intf * intf, int argc, char ** argv);
|
||||
static void ipmi_time_to_str(time_t rawTime, char* strTime);
|
||||
static int ipmi_get_sensor_reading(struct ipmi_intf *intf ,
|
||||
@ -299,7 +336,7 @@ static int ipmi_delloem_lcd_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
}
|
||||
else if (strncmp(argv[current_arg], "info\0", 5) == 0)
|
||||
{
|
||||
if(iDRAC_FLAG==1)
|
||||
if((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G) )
|
||||
rc = ipmi_lcd_get_info_wh(intf);
|
||||
else
|
||||
rc = ipmi_lcd_get_info(intf);
|
||||
@ -326,7 +363,9 @@ static int ipmi_delloem_lcd_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
current_arg++;
|
||||
if (argc <= current_arg) {usage();return -1;}
|
||||
}
|
||||
if ((strncmp(argv[current_arg], "mode\0", 5) == 0)&&(iDRAC_FLAG==1))
|
||||
|
||||
|
||||
if ((strncmp(argv[current_arg], "mode\0", 5) == 0)&&((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G) ))
|
||||
{
|
||||
current_arg++;
|
||||
if (argc <= current_arg)
|
||||
@ -400,7 +439,7 @@ static int ipmi_delloem_lcd_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
ipmi_lcd_usage();
|
||||
}
|
||||
}
|
||||
else if ((strncmp(argv[current_arg], "lcdqualifier\0", 13)== 0) &&(iDRAC_FLAG==1) )
|
||||
else if ((strncmp(argv[current_arg], "lcdqualifier\0", 13)== 0) &&((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G) ) )
|
||||
{
|
||||
|
||||
current_arg++;
|
||||
@ -435,7 +474,7 @@ static int ipmi_delloem_lcd_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
ipmi_lcd_usage();
|
||||
}
|
||||
}
|
||||
else if( (strncmp(argv[current_arg], "errordisplay\0", 13) == 0)&&(iDRAC_FLAG==1))
|
||||
else if( (strncmp(argv[current_arg], "errordisplay\0", 13) == 0)&&((iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G) ))
|
||||
{
|
||||
|
||||
current_arg++;
|
||||
@ -600,7 +639,7 @@ ipmi_lcd_get_platform_model_name (struct ipmi_intf * intf,
|
||||
for (ii = 0; ii < 4; ii++)
|
||||
{
|
||||
int bytes_to_copy;
|
||||
|
||||
memset (&req,0,sizeof(req));
|
||||
req.msg.netfn = IPMI_NETFN_APP;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = IPMI_GET_SYS_INFO;
|
||||
@ -669,6 +708,7 @@ ipmi_idracvalidator_command (struct ipmi_intf * intf)
|
||||
struct ipmi_rq req = {0};
|
||||
uint8_t data[4];
|
||||
|
||||
memset (&req,0,sizeof(req));
|
||||
req.msg.netfn = IPMI_NETFN_APP;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = IPMI_GET_SYS_INFO;
|
||||
@ -687,10 +727,14 @@ ipmi_idracvalidator_command (struct ipmi_intf * intf)
|
||||
/*lprintf(LOG_ERR, " Error getting IMC type: %s",
|
||||
val2str(rsp->ccode, completion_code_vals)); */
|
||||
return -1;
|
||||
}
|
||||
if( (0x0A == rsp->data[10]) || (0x0D ==rsp->data[10]) )
|
||||
}
|
||||
if( (IMC_IDRAC_11G_MONOLITHIC == rsp->data[10]) || (IMC_IDRAC_11G_MODULAR ==rsp->data[10]) )
|
||||
{
|
||||
iDRAC_FLAG=1;
|
||||
iDRAC_FLAG=IDRAC_11G;
|
||||
}
|
||||
else if( (IMC_IDRAC_12G_MONOLITHIC == rsp->data[10]) || (IMC_IDRAC_12G_MODULAR==rsp->data[10]) )
|
||||
{
|
||||
iDRAC_FLAG=IDRAC_12G;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1773,17 +1817,21 @@ ipmi_lcd_usage(void)
|
||||
lprintf(LOG_NOTICE, " lcd set {none}|{default}|{custom <text>}");
|
||||
lprintf(LOG_NOTICE, " Set LCD text displayed during non-fault conditions");
|
||||
}
|
||||
else if(iDRAC_FLAG==1)
|
||||
else if( (iDRAC_FLAG==IDRAC_11G) || (iDRAC_FLAG==IDRAC_12G) )
|
||||
{
|
||||
lprintf(LOG_NOTICE, " lcd set {mode}|{lcdqualifier}|{errordisplay}");
|
||||
lprintf(LOG_NOTICE, " Allows you to set the LCD mode and user-defined string.");
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lcd set mode {none}|{modelname}|{ipv4address}|{macaddress}|");
|
||||
lprintf(LOG_NOTICE, " {systemname}|{servicetag}|{ipv6address}|{ambienttemp}");
|
||||
lprintf(LOG_NOTICE, " {systemwatt }|{assettag}|{userdefined}<text>");
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " Allows you to set the LCD display mode to any of the preceding parameters");
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lcd set lcdqualifier {watt}|{btuphr}|{celsius}|{fahrenheit}");
|
||||
lprintf(LOG_NOTICE, " Allows you to set the unit for the system ambient temperature mode.");
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lcd set errordisplay {sel}|{simple}");
|
||||
lprintf(LOG_NOTICE, " Allows you to set the error display.");
|
||||
}
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lcd info");
|
||||
@ -1928,7 +1976,7 @@ static int ipmi_macinfo_drac_idrac_virtual_mac(struct ipmi_intf* intf,uint8_t Ni
|
||||
input_length = 0;
|
||||
msg_data[input_length++] = 1; /*Get*/
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = GET_IDRAC_VIRTUAL_MAC;
|
||||
req.msg.data = msg_data;
|
||||
@ -2026,6 +2074,10 @@ static int ipmi_macinfo_drac_idrac_mac(struct ipmi_intf* intf,uint8_t NicNum)
|
||||
|
||||
if (IMC_IDRAC_10G == IMC_Type)
|
||||
printf ("\n\rDRAC MAC Address ");
|
||||
else if ((IMC_IDRAC_11G_MODULAR == IMC_Type) || (IMC_IDRAC_11G_MONOLITHIC== IMC_Type))
|
||||
printf ("\n\riDRAC6 MAC Address ");
|
||||
else if ((IMC_IDRAC_12G_MODULAR == IMC_Type) || (IMC_IDRAC_12G_MONOLITHIC== IMC_Type))
|
||||
printf ("\n\riDRAC7 MAC Address ");
|
||||
else
|
||||
printf ("\n\riDRAC6 MAC Address ");
|
||||
|
||||
@ -2293,7 +2345,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 )
|
||||
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 ) )
|
||||
{
|
||||
return ipmi_macinfo_11g (intf,NicNum);
|
||||
}
|
||||
@ -2347,6 +2400,7 @@ static int ipmi_delloem_lan_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
int rc = 0;
|
||||
|
||||
int nic_selection = 0;
|
||||
char nic_set[2] = {0};
|
||||
current_arg++;
|
||||
if (argv[current_arg] == NULL)
|
||||
{
|
||||
@ -2361,6 +2415,18 @@ static int ipmi_delloem_lan_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
ipmi_lan_usage();
|
||||
return -1;
|
||||
}
|
||||
if(iDRAC_FLAG == IDRAC_12G) {
|
||||
nic_selection = get_nic_selection_mode_12g(intf,current_arg,argv,nic_set);
|
||||
if (INVALID == nic_selection)
|
||||
{
|
||||
ipmi_lan_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = ipmi_lan_set_nic_selection_12g(intf,nic_set);
|
||||
}
|
||||
else
|
||||
{
|
||||
nic_selection = get_nic_selection_mode(current_arg,argv);
|
||||
|
||||
|
||||
@ -2370,6 +2436,7 @@ static int ipmi_delloem_lan_main (struct ipmi_intf * intf, int argc, char ** arg
|
||||
return -1;
|
||||
}
|
||||
rc = ipmi_lan_set_nic_selection(intf,nic_selection);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (strncmp(argv[current_arg], "get\0", 4) == 0)
|
||||
@ -2405,16 +2472,135 @@ static int IsLANSupported ()
|
||||
return 1;
|
||||
}
|
||||
|
||||
char NIC_Selection_Mode_String [4] [50] = { "shared",
|
||||
"shared with failover lom2",
|
||||
"dedicated",
|
||||
"shared with Failover all loms"
|
||||
};
|
||||
|
||||
int get_nic_selection_mode_12g (struct ipmi_intf* intf,int current_arg, char ** argv, char *nic_set)
|
||||
{
|
||||
int nic_selection_mode = 0;
|
||||
int failover = 0;
|
||||
|
||||
char AciveLOM_String [5] [10] = {"dedicated","LOM1","LOM2","LOM3","LOM4" };
|
||||
// First get the current settings.
|
||||
struct ipmi_rs * rsp;
|
||||
struct ipmi_rq req;
|
||||
|
||||
uint8_t msg_data[30];
|
||||
uint8_t input_length=0;
|
||||
|
||||
input_length = 0;
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
|
||||
req.msg.cmd = GET_NIC_SELECTION_12G_CMD;
|
||||
|
||||
req.msg.data = msg_data;
|
||||
req.msg.data_len = input_length;
|
||||
|
||||
rsp = intf->sendrecv(intf, &req);
|
||||
if (rsp == NULL)
|
||||
{
|
||||
lprintf(LOG_ERR, " Error in getting nic selection");
|
||||
return -1;
|
||||
}
|
||||
else if (rsp->ccode > 0)
|
||||
{
|
||||
lprintf(LOG_ERR, " Error in getting nic selection (%s) \n",
|
||||
val2str(rsp->ccode, completion_code_vals) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
nic_set[0] = rsp->data[0];
|
||||
nic_set[1] = rsp->data[1];
|
||||
|
||||
|
||||
if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "dedicated\0", 10))
|
||||
{
|
||||
nic_set[0] = 1;
|
||||
return 0;
|
||||
}
|
||||
if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "shared\0", 7))
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
return INVALID;
|
||||
|
||||
current_arg++;
|
||||
if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "with\0", 5))
|
||||
{
|
||||
}
|
||||
else
|
||||
return INVALID;
|
||||
|
||||
current_arg++;
|
||||
if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "failover\0", 9))
|
||||
{
|
||||
failover = 1;
|
||||
}
|
||||
if(failover)
|
||||
current_arg++;
|
||||
if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "lom1\0", 5))
|
||||
{
|
||||
if(failover) {
|
||||
nic_set[1] = 2;
|
||||
}
|
||||
else {
|
||||
nic_set[0] = 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "lom2\0", 5))
|
||||
{
|
||||
if(failover) {
|
||||
nic_set[1] = 3;
|
||||
}
|
||||
else {
|
||||
nic_set[0] = 3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "lom3\0", 5))
|
||||
{
|
||||
if(failover) {
|
||||
nic_set[1] = 4;
|
||||
}
|
||||
else {
|
||||
nic_set[0] = 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "lom4\0", 5))
|
||||
{
|
||||
if(failover) {
|
||||
nic_set[1] = 5;
|
||||
}
|
||||
else {
|
||||
nic_set[0] = 5;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (failover && NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "none\0", 5))
|
||||
{
|
||||
if(failover) {
|
||||
nic_set[1] = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else if (failover && NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "all\0", 4))
|
||||
{
|
||||
}
|
||||
else
|
||||
return INVALID;
|
||||
|
||||
current_arg++;
|
||||
if (failover && NULL!= argv[current_arg] && 0 == strncmp(argv[current_arg], "loms\0", 5))
|
||||
{
|
||||
nic_set[1] = 6;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return INVALID;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int get_nic_selection_mode (int current_arg, char ** argv)
|
||||
@ -2461,7 +2647,44 @@ static int get_nic_selection_mode (int current_arg, char ** argv)
|
||||
}
|
||||
|
||||
return INVALID;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int ipmi_lan_set_nic_selection_12g (struct ipmi_intf* intf, uint8_t* nic_selection)
|
||||
{
|
||||
struct ipmi_rs * rsp;
|
||||
struct ipmi_rq req;
|
||||
|
||||
uint8_t msg_data[30];
|
||||
uint8_t input_length=0;
|
||||
|
||||
input_length = 0;
|
||||
|
||||
msg_data[input_length++] = nic_selection[0];
|
||||
msg_data[input_length++] = nic_selection[1];
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = SET_NIC_SELECTION_12G_CMD;
|
||||
req.msg.data = msg_data;
|
||||
req.msg.data_len = input_length;
|
||||
|
||||
rsp = intf->sendrecv(intf, &req);
|
||||
if (rsp == NULL)
|
||||
{
|
||||
lprintf(LOG_ERR, " Error in setting nic selection");
|
||||
return -1;
|
||||
}
|
||||
else if (rsp->ccode > 0)
|
||||
{
|
||||
lprintf(LOG_ERR, " Error in setting nic selection (%s) \n",
|
||||
val2str(rsp->ccode, completion_code_vals) );
|
||||
return -1;
|
||||
}
|
||||
printf("configured successfully");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -2478,7 +2701,7 @@ static int ipmi_lan_set_nic_selection (struct ipmi_intf* intf, uint8_t nic_selec
|
||||
|
||||
msg_data[input_length++] = nic_selection;
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = SET_NIC_SELECTION_CMD;
|
||||
req.msg.data = msg_data;
|
||||
@ -2504,6 +2727,7 @@ static int ipmi_lan_set_nic_selection (struct ipmi_intf* intf, uint8_t nic_selec
|
||||
static int ipmi_lan_get_nic_selection (struct ipmi_intf* intf)
|
||||
{
|
||||
uint8_t nic_selection=-1;
|
||||
uint8_t nic_selection_failover = 0;
|
||||
|
||||
struct ipmi_rs * rsp;
|
||||
struct ipmi_rq req;
|
||||
@ -2514,8 +2738,11 @@ static int ipmi_lan_get_nic_selection (struct ipmi_intf* intf)
|
||||
|
||||
input_length = 0;
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
if(iDRAC_FLAG == IDRAC_12G)
|
||||
req.msg.cmd = GET_NIC_SELECTION_12G_CMD;
|
||||
else
|
||||
req.msg.cmd = GET_NIC_SELECTION_CMD;
|
||||
req.msg.data = msg_data;
|
||||
req.msg.data_len = input_length;
|
||||
@ -2534,7 +2761,33 @@ static int ipmi_lan_get_nic_selection (struct ipmi_intf* intf)
|
||||
}
|
||||
nic_selection = rsp->data[0];
|
||||
|
||||
if(iDRAC_FLAG == IDRAC_12G)
|
||||
{
|
||||
|
||||
nic_selection_failover = rsp->data[1];
|
||||
if ((nic_selection < 6) && (nic_selection > 0) && (nic_selection_failover < 7))
|
||||
{
|
||||
if(nic_selection == 1) {
|
||||
printf ("\n%s",NIC_Selection_Mode_String_12g[nic_selection-1]);
|
||||
} else if(nic_selection) {
|
||||
printf ("\nShared LOM : %s",NIC_Selection_Mode_String_12g[nic_selection-1]);
|
||||
if(nic_selection_failover == 0)
|
||||
printf ("\nFailover LOM : None");
|
||||
else if(nic_selection_failover >= 2 && nic_selection_failover <= 6)
|
||||
printf ("\nFailover LOM : %s",NIC_Selection_Mode_String_12g[nic_selection_failover + 3]);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
lprintf(LOG_ERR, " Error Outof bond Value received (%d) (%d) \n",nic_selection,nic_selection_failover);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("\n%s",NIC_Selection_Mode_String[nic_selection]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2556,7 +2809,7 @@ static int ipmi_lan_get_active_nic (struct ipmi_intf* intf)
|
||||
msg_data[input_length++] = 0; /*Reserved*/
|
||||
msg_data[input_length++] = 0; /*Reserved*/
|
||||
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.netfn = DELL_OEM_NETFN;
|
||||
req.msg.lun = 0;
|
||||
req.msg.cmd = GET_ACTIVE_NIC_CMD;
|
||||
req.msg.data = msg_data;
|
||||
@ -2587,10 +2840,27 @@ ipmi_lan_usage(void)
|
||||
{
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lan set <Mode> ");
|
||||
lprintf(LOG_NOTICE, " sets the NIC Selection Mode (dedicated, shared, shared with failover lom2, shared with Failover all loms).");
|
||||
if(iDRAC_FLAG == IDRAC_12G) {
|
||||
lprintf(LOG_NOTICE, " sets the NIC Selection Mode :");
|
||||
lprintf(LOG_NOTICE, " dedicated, shared with lom1, shared with lom2,shared with lom3,shared ");
|
||||
lprintf(LOG_NOTICE, " with lom4,shared with failover lom1,shared with failover lom2,shared ");
|
||||
lprintf(LOG_NOTICE, " with failover lom3,shared with failover lom4,shared with Failover all ");
|
||||
lprintf(LOG_NOTICE, " loms, shared with Failover None).");
|
||||
} else {
|
||||
lprintf(LOG_NOTICE, " sets the NIC Selection Mode (dedicated, shared, shared with failover lom2, ");
|
||||
lprintf(LOG_NOTICE, " shared with Failover all loms).");
|
||||
}
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lan get ");
|
||||
lprintf(LOG_NOTICE, " returns the current NIC Selection Mode (dedicated, shared, shared with failover lom2, shared with Failover all loms).");
|
||||
if(iDRAC_FLAG == IDRAC_12G) {
|
||||
lprintf(LOG_NOTICE, " returns the current NIC Selection Mode (dedicated, shared with lom1, shared ");
|
||||
lprintf(LOG_NOTICE, " with lom2, shared with lom3, shared with lom4,shared with failover lom1,");
|
||||
lprintf(LOG_NOTICE, " shared with failover lom2,shared with failover lom3,shared with failover ");
|
||||
lprintf(LOG_NOTICE, " lom4,shared with Failover all loms,shared with Failover None).");
|
||||
}else {
|
||||
lprintf(LOG_NOTICE, " returns the current NIC Selection Mode (dedicated, shared, shared with failover");
|
||||
lprintf(LOG_NOTICE, " lom2, shared with Failover all loms).");
|
||||
}
|
||||
lprintf(LOG_NOTICE, "");
|
||||
lprintf(LOG_NOTICE, " lan get active");
|
||||
lprintf(LOG_NOTICE, " returns the current active NIC (dedicated, LOM1, LOM2, LOM3, LOM4).");
|
||||
@ -2733,6 +3003,11 @@ static int ipmi_delloem_powermonitor_main (struct ipmi_intf * intf, int argc, ch
|
||||
ipmi_powermonitor_usage();
|
||||
return -1;
|
||||
}
|
||||
if (strchr(argv[current_arg], '.'))
|
||||
{
|
||||
lprintf(LOG_ERR, " Cap value in Watts, Btu/hr or percent should be whole number");
|
||||
return -1;
|
||||
}
|
||||
make_int(argv[current_arg],&val);
|
||||
current_arg++;
|
||||
if (argv[current_arg] == NULL)
|
||||
@ -2914,7 +3189,8 @@ ipmi_set_power_capstatus_command (struct ipmi_intf * intf,uint8_t val)
|
||||
struct ipmi_rs * rsp = NULL;
|
||||
struct ipmi_rq req = {0};
|
||||
uint8_t data[2];
|
||||
ipmi_get_power_capstatus_command(intf);
|
||||
if(ipmi_get_power_capstatus_command(intf) < 0)
|
||||
return -1;
|
||||
|
||||
if (PowercapSetable_flag!=1)
|
||||
{
|
||||
@ -3143,6 +3419,7 @@ ipmi_powermgmt_clear(struct ipmi_intf* intf,uint8_t clearValue)
|
||||
val2str(rsp->ccode, completion_code_vals));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
@ -3234,14 +3511,14 @@ static int ipmi_get_power_headroom_command (struct ipmi_intf * intf,uint8_t unit
|
||||
peakpowerheadroombtuphr=watt_to_btuphr_conversion(powerheadroom.peakheadroom);
|
||||
instantpowerhearoom= watt_to_btuphr_conversion(powerheadroom.instheadroom);
|
||||
|
||||
printf ("System Instantaneous Headroom : %d BTU/hr\n",instantpowerhearoom);
|
||||
printf ("System Peak Headroom : %d BTU/hr\n",peakpowerheadroombtuphr);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("System Instantaneous Headroom : %d W\n",powerheadroom.instheadroom);
|
||||
printf ("System Peak Headroom : %d W\n",powerheadroom.peakheadroom);
|
||||
}
|
||||
printf ("System Instantaneous Headroom : %ld BTU/hr\n",instantpowerhearoom);
|
||||
printf ("System Peak Headroom : %ld BTU/hr\n",peakpowerheadroombtuphr);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("System Instantaneous Headroom : %ld W\n",powerheadroom.instheadroom);
|
||||
printf ("System Peak Headroom : %ld W\n",powerheadroom.peakheadroom);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -3733,35 +4010,35 @@ static int ipmi_print_power_consmpt_history(struct ipmi_intf* intf,int unit )
|
||||
|
||||
printf ("Average Power Consumption ");
|
||||
tempbtuphrconv=(avgpower.lastminutepower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lasthourpower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lastdaypower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lastweakpower);
|
||||
printf ("%4d W \n\r",tempbtuphrconv);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lasthourpower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lastdaypower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(avgpower.lastweakpower);
|
||||
printf ("%4ld W \n\r",tempbtuphrconv);
|
||||
|
||||
printf ("Max Power Consumption ");
|
||||
tempbtuphrconv=(stPeakpower.lastminutepower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lasthourpower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lastdaypower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lastweakpower);
|
||||
printf ("%4d W \n\r",tempbtuphrconv);
|
||||
|
||||
printf ("Min Power Consumption ");
|
||||
tempbtuphrconv=(stMinpower.lastminutepower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lasthourpower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lastdaypower);
|
||||
printf ("%4d W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lastweakpower);
|
||||
printf ("%4d W \n\r\n\r",tempbtuphrconv);
|
||||
}
|
||||
printf ("Max Power Consumption ");
|
||||
tempbtuphrconv=(stPeakpower.lastminutepower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lasthourpower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lastdaypower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stPeakpower.lastweakpower);
|
||||
printf ("%4ld W \n\r",tempbtuphrconv);
|
||||
|
||||
printf ("Min Power Consumption ");
|
||||
tempbtuphrconv=(stMinpower.lastminutepower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lasthourpower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lastdaypower);
|
||||
printf ("%4ld W ",tempbtuphrconv);
|
||||
tempbtuphrconv=(stMinpower.lastweakpower);
|
||||
printf ("%4ld W \n\r\n\r",tempbtuphrconv);
|
||||
}
|
||||
|
||||
lastminutepeakpower=stPeakpower.lastminutepowertime;
|
||||
lasthourpeakpower=stPeakpower.lasthourpowertime;
|
||||
lastdaypeakpower=stPeakpower.lastdaypowertime;
|
||||
@ -3794,6 +4071,7 @@ static int ipmi_print_power_consmpt_history(struct ipmi_intf* intf,int unit )
|
||||
printf ("Last Week : %s",timestr);
|
||||
|
||||
}
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
@ -3893,6 +4171,7 @@ static int ipmi_print_power_cap(struct ipmi_intf* intf,uint8_t unit )
|
||||
int rc;
|
||||
IPMI_POWER_CAP ipmipowercap;
|
||||
|
||||
memset(&ipmipowercap,0,sizeof(ipmipowercap));
|
||||
rc=ipmi_get_power_cap(intf,&ipmipowercap);
|
||||
|
||||
|
||||
@ -3900,16 +4179,16 @@ static int ipmi_print_power_cap(struct ipmi_intf* intf,uint8_t unit )
|
||||
{
|
||||
if (unit ==btuphr){
|
||||
tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.MaximumPowerConsmp);
|
||||
printf ("Maximum power: %d BTU/hr\n",tempbtuphrconv);
|
||||
tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.MinimumPowerConsmp);
|
||||
printf ("Minimum power: %d BTU/hr\n",tempbtuphrconv);
|
||||
tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.PowerCap);
|
||||
printf ("Power cap : %d BTU/hr\n",tempbtuphrconv);
|
||||
}else{
|
||||
|
||||
printf ("Maximum power: %d Watt\n",ipmipowercap.MaximumPowerConsmp);
|
||||
printf ("Minimum power: %d Watt\n",ipmipowercap.MinimumPowerConsmp);
|
||||
printf ("Power cap : %d Watt\n",ipmipowercap.PowerCap);
|
||||
printf ("Maximum power: %ld BTU/hr\n",tempbtuphrconv);
|
||||
tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.MinimumPowerConsmp);
|
||||
printf ("Minimum power: %ld BTU/hr\n",tempbtuphrconv);
|
||||
tempbtuphrconv=watt_to_btuphr_conversion(ipmipowercap.PowerCap);
|
||||
printf ("Power cap : %ld BTU/hr\n",tempbtuphrconv);
|
||||
}else{
|
||||
|
||||
printf ("Maximum power: %ld Watt\n",ipmipowercap.MaximumPowerConsmp);
|
||||
printf ("Minimum power: %ld Watt\n",ipmipowercap.MinimumPowerConsmp);
|
||||
printf ("Power cap : %ld Watt\n",ipmipowercap.PowerCap);
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
@ -3936,10 +4215,11 @@ static int ipmi_set_power_cap(struct ipmi_intf* intf,int unit,int val )
|
||||
uint64_t maxpowerbtuphr;
|
||||
uint64_t maxpowerbtuphr1;
|
||||
uint64_t minpowerbtuphr;
|
||||
int rc;
|
||||
IPMI_POWER_CAP ipmipowercap;
|
||||
IPMI_POWER_CAP ipmipowercap;
|
||||
|
||||
if(ipmi_get_power_capstatus_command(intf) < 0)
|
||||
return -1; // Adding the failed condition check
|
||||
|
||||
ipmi_get_power_capstatus_command(intf);
|
||||
if (PowercapSetable_flag!=1)
|
||||
{
|
||||
lprintf(LOG_ERR, " Can not set powercap on this system");
|
||||
@ -4051,7 +4331,7 @@ static int ipmi_set_power_cap(struct ipmi_intf* intf,int unit,int val )
|
||||
}
|
||||
else if(unit ==percent)
|
||||
{
|
||||
if((val <1)||(val>100))
|
||||
if((val <0)||(val>100))
|
||||
{
|
||||
lprintf(LOG_ERR, " Cap value is out of boundary conditon it should be between 0 - 100");
|
||||
return -1;
|
||||
@ -4187,6 +4467,7 @@ static int getpowersupplyfruinfo(struct ipmi_intf *intf, uint8_t id,
|
||||
|
||||
memcpy(&header, rsp->data + 1, 8);
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user