| #!/usr/bin/env python3 |
| |
| r""" |
| IPMI raw commands table: |
| |
| - Define IPMI interface index, commands and expected output. |
| |
| """ |
| |
| from robot.libraries.BuiltIn import BuiltIn |
| |
| # The currently supported cipher list. |
| # Refer: |
| # openbmc/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipe |
| # s-phosphor/ipmi/phosphor-ipmi-host/cipher_list.json |
| valid_ciphers = ["17"] |
| unsupported_ciphers = ["1", "2", "15", "16"] |
| |
| IPMI_RAW_CMD = { |
| # Interface name |
| "power_supply_redundancy": { |
| # Command action type |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x04 0x2d 0x0b", |
| "00 00 01 00", |
| "Byte position 3rd LSB e.g. 01 indicates disabled", |
| "00 00 02 00", |
| "Byte position 3rd LSB e.g. 02 indicates enabled", |
| "00 40 02 00", |
| "40 is scanning enabled and 02 indicates redundancy enabled", |
| ], |
| "Enabled": [ |
| # raw command, expected output, comment |
| "0x04 0x30 0x0b 0x00 0x00 0x02 0x00 0x00 0x00 0x00 0x00 0x00", |
| "none", |
| "Enabled nibble position 6th LSB e.g. 0x2", |
| ], |
| "Disabled": [ |
| # raw command, expected output, comment |
| "0x04 0x30 0x0b 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00", |
| "none", |
| "Enabled nibble position 6th LSB e.g. 0x1", |
| ], |
| }, |
| "power_reading": { |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x2c 0x02 0xdc 0x01 0x01 0x00", |
| "dc d5 00 d5 00 d5 00 d5 00 00 00 00 00 00 00 00 00 00", |
| "Byte position 2nd LSB e.g. d5 Instantaneous power readings", |
| ], |
| }, |
| "conf_param": { |
| "Enabled": [ |
| # raw command, expected output, comment |
| "0x2c 0x12 0xdc 0x02 0x00 0x01", |
| "dc", |
| "Enabled nibble position 6th LSB e.g. 0x01", |
| ], |
| "Disabled": [ |
| # raw command, expected output, comment |
| "0x2c 0x12 0xdc 0x02 0x00 0x00", |
| "dc", |
| "Disable nibble position 6th LSB e.g. 0x00", |
| ], |
| }, |
| "SEL_entry": { |
| "Reserve": [ |
| # raw command, expected output, comment |
| "0x0a 0x42", |
| "27 00", |
| "27 is Reservation ID, LSB, 00 Reservation ID, MSB ", |
| ], |
| "Get_SEL_Time": [ |
| # raw command |
| "0x0a 0x48", |
| ], |
| "Set_SEL_Time": [ |
| # raw command, expected output(s) |
| "0x0a 0x49", |
| "rsp=0xd5", |
| "not supported in present state", |
| "rsp=0xc7", |
| "Request data length invalid", |
| ], |
| "Clear_SEL": [ |
| # raw command, expected output(s) |
| "0x0a 0x47", |
| "0x43 0x4c 0x52 0xaa", |
| "sel clear", |
| "Clearing SEL", |
| "rsp=0xc5", |
| "Reservation cancelled or invalid", |
| "0x43 0x4c 0x52 0x00", |
| ], |
| "SEL_info": [ |
| # raw command |
| "0x0a 0x40" |
| ], |
| "Create_SEL": [ |
| # raw command, expected output, comment |
| "0x0a 0x44 0x00 0x00 0x02 0x00 0x00 0x00 0x00", |
| "0x04", |
| "0x00 0xa0 0x04 0x07", |
| ], |
| "Get_SEL_Entry": [ |
| # raw command |
| "0x0a 0x43 0x00 0x00", |
| "0x00 0xff", |
| ], |
| }, |
| "Self_Test_Results": { |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x06 0x04", |
| "56 00", |
| "56h = Self Test function not implemented in this controller.", |
| ] |
| }, |
| "Device GUID": { |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x06 0x08", |
| "01 70 9b ae da 6f dd 9c b4 4c 36 be 66 c8 49 28", |
| "Get GUID bytes 1 through 16.", |
| ] |
| }, |
| "LAN_Config_Params": { |
| "Get": [ |
| # raw command, expected output, comment |
| "0x0c 0x02", |
| "11 02", |
| ( |
| "11 is Parameter revision, 02 is Configuration parameter data" |
| " e.g. Cipher Suite Entry count" |
| ), |
| ], |
| "Set": [ |
| # raw command, expected output, error response |
| "0x0c 0x01", |
| "11 00", |
| "Unknown (0x82)", |
| "Invalid data field in request", |
| ], |
| }, |
| "Payload": { |
| "Get_Payload_Activation_Status": [ |
| # raw command, expected output(s), comment |
| "0x06 0x4a 0x01", |
| "01 00 00", |
| ( |
| "1st byte is instance capacity, last two bytes is activation" |
| " status of instances" |
| ), |
| ], |
| "Activate_Payload": [ |
| # raw command, expected output(s), comment |
| "0x06 0x48 0x01 0x01 0xc6 0x00 0x00 0x00", |
| "00 00 00 00 ff 00 ff 00 6f 02 ff ff", |
| ( |
| "Last two bits are payload vlan number, - FFFFh if VLAN" |
| " addressing is not used" |
| ), |
| ], |
| "Deactivate_Payload": [ |
| # raw command, expected output(s), comment |
| "0x06 0x49 0x01 0x01 0x00 0x00 0x00 0x00", |
| "", |
| "Line feed only", |
| ], |
| "Get_Payload_Instance_Info": [ |
| # raw command, expected output(s), comment |
| "0x06 0x4b 0x01 0x01", |
| "00 00 00 00 00 00 00 00 00 00 00 00", |
| ( |
| "When the payload is activated, the first four bytes are the" |
| " session ID,otherwise it should be 00." |
| ), |
| ], |
| "Get_User_Access_Payload": [ |
| # raw command, |
| "0x06 0x4d" |
| ], |
| "Set_User_Access_Payload": [ |
| # raw command, |
| "0x06 0x4c" |
| ], |
| "Get_Channel_Payload_Version": [ |
| # raw command, |
| "0x06 0x4F" |
| ], |
| "Get_Channel_Payload_Support": [ |
| # raw command, |
| "0x06 0x4E" |
| ], |
| }, |
| "BIOS_POST_Code": { |
| "Get": [ |
| # raw command, expected output, comment |
| "0x30 0xe9", |
| "", |
| "Response bytes will vary in length depending on state of system", |
| "0x89", |
| "error response byte when host is powered off", |
| ] |
| }, |
| "Device ID": { |
| "Get": [ |
| # raw command, error response, error code |
| "0x06 0x01", |
| "Error: Unable to establish IPMI v2 / RMCP+ session", |
| "0xc7", |
| ] |
| }, |
| "Cold Reset": { |
| "reset": [ |
| # raw command |
| "0x06 0x02" |
| ] |
| }, |
| "lan_parameters": { |
| "get_ip": [ |
| # raw command |
| "0x0c 0x02 0x" |
| + BuiltIn().get_variable_value("${CHANNEL_NUMBER}") |
| + " 0x03 0 0", |
| ], |
| "get_ip_src": [ |
| # raw command |
| "0x0c 0x02 0x" |
| + BuiltIn().get_variable_value("${CHANNEL_NUMBER}") |
| + " 0x04 0 0", |
| ], |
| "get_dot1q": [ |
| # raw command |
| "0x0c 0x02 0x" |
| + BuiltIn().get_variable_value("${CHANNEL_NUMBER}") |
| + " 0x14 0 0", |
| ], |
| }, |
| "SDR_Info": { |
| "get": [ |
| # raw command |
| "0x04 0x20 1" |
| ] |
| }, |
| "Chassis_status": { |
| "get": [ |
| # raw command |
| "0x00 0x01" |
| ] |
| }, |
| "SEL_Info": { |
| "get": [ |
| # raw command |
| "0x0a 0x40" |
| ] |
| }, |
| "Watchdog": { |
| # Command action type |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x06 0x25", |
| "05 00 00 00 64 00", |
| "don't log bit enabled", |
| "85 00 00 00 64 00", |
| "don't log bit disabled", |
| "05 00 00 00 64 00", |
| "stop bit stop", |
| "45 00 00 00 64 00", |
| "stop bit resume", |
| "01 00 00 00 64 00", |
| "timer use FRB2", |
| "02 00 00 00 64 00", |
| "timer use POST", |
| "03 00 00 00 64 00", |
| "timer use OS", |
| "04 00 00 00 64 00", |
| "timer use SMS", |
| "05 00 00 00 64 00", |
| "timer use OEM", |
| "05 00 00 00 64 00", |
| "pre-timeout interrupt None", |
| "05 20 00 00 64 00", |
| "pre-timeout interrupt NMI", |
| "05 00 00 00 64 00", |
| "timeout action None", |
| "05 01 00 00 64 00", |
| "timeout action Reset", |
| "05 02 00 00 64 00", |
| "timeout action PowerDown", |
| "05 03 00 00 64 00", |
| "timeout action PowerCycle", |
| "01 00 00 02 00 00", |
| "timeout flag FRB2", |
| "02 00 00 04 00 00", |
| "timeout flag POST", |
| "03 00 00 08 00 00", |
| "timeout flag OS", |
| "04 00 00 10 00 00", |
| "timeout flag SMS", |
| "05 00 00 20 00 00", |
| "timeout flag OEM", |
| "05 00 00 00 30 35 30 35", |
| "Get should return 13.6 seconds", |
| "05 00 00 00 ff ff ff ff", |
| "Bit 6 not set when timer stopped", |
| "0x06 0x25 0x00", |
| "Get with one extra byte", |
| ], |
| "Set": [ |
| # raw command, expected output, comment |
| "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "don't log bit enabled", |
| "0x06 0x24 0x85 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "don't log bit disabled", |
| "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "stop bit stop", |
| "0x06 0x24 0x45 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "stop bit resume", |
| "0x06 0x24 0x01 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timer use FRB2", |
| "0x06 0x24 0x02 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timer use POST", |
| "0x06 0x24 0x03 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timer use OS", |
| "0x06 0x24 0x04 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timer use SMS", |
| "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timer use OEM", |
| "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "pre-timeout interrupt None", |
| "0x06 0x24 0x05 0x20 0x00 0x00 0x64 0x00", |
| "none", |
| "pre-timeout interrupt NMI", |
| "0x06 0x24 0x05 0x00 0x00 0x00 0x64 0x00", |
| "none", |
| "timeout action None", |
| "0x06 0x24 0x05 0x01 0x00 0x00 0x64 0x00", |
| "none", |
| "timeout action Reset", |
| "0x06 0x24 0x05 0x02 0x00 0x00 0x64 0x00", |
| "none", |
| "timeout action PowerDown", |
| "0x06 0x24 0x05 0x03 0x00 0x00 0x64 0x00", |
| "none", |
| "timeout action PowerCycle", |
| "0x06 0x24 0x01 0x00 0x00 0x3e 0x00 0x00", |
| "none", |
| "timeout flag FRB2", |
| "0x06 0x24 0x02 0x00 0x00 0x3e 0x00 0x00", |
| "none", |
| "timeout flag POST", |
| "0x06 0x24 0x03 0x00 0x00 0x3e 0x00 0x00", |
| "none", |
| "timeout flag OS", |
| "0x06 0x24 0x04 0x00 0x00 0x3e 0x00 0x00", |
| "none", |
| "timeout flag SMS", |
| "0x06 0x24 0x05 0x00 0x00 0x3e 0x00 0x00", |
| "none", |
| "timeout flag OEM", |
| "0x06 0x24 0x01 0x02 0x00 0x00 0x20 0x00", |
| "none", |
| "Power down", |
| "0x06 0x24 0x01 0x01 0x00 0x00 0x20 0x00", |
| "none", |
| "Hard reset", |
| "0x06 0x24 0x01 0x03 0x00 0x00 0x20 0x00", |
| "none", |
| "Power cycle", |
| "0x06 0x24 0x01 0x00 0x00 0x00 0x20 0x00", |
| "none", |
| "No action", |
| "0x06 0x24 0x05 0x00 0x00 0x3e 0x30 0x35", |
| "none", |
| "Set for 13.6 seconds", |
| "0x06 0x24 0x05 0x00 0x07 0x00 0x50 0x00", |
| "none", |
| "Pre-timeout interval passes", |
| "0x06 0x24 0x05 0x00 0x04 0x00 0x0A 0x00", |
| "none", |
| "Pre-timeout interval fails", |
| "0x06 0x24 0x05 0x00 0x00 0x20 0xFF 0xFF", |
| "none", |
| "Bit 6 not set when timer stopped", |
| "0x06 0x24 0x05 0x00 0x08 0x00 0x64", |
| "none", |
| "Set with one less byte", |
| "0x06 0x24 0x05 0x00 0x08 0x00 0x64 0x00 0x00", |
| "none", |
| "Set with one extra byte", |
| ], |
| "Reset": [ |
| # raw command, expected output, comment |
| "0x06 0x22", |
| "none", |
| "Reset watchdog timer", |
| "0x06 0x22 0x00", |
| "none", |
| "Reset watchdog timer with extra byte", |
| "0x06 0x22", |
| "none", |
| "Reset watchdog timer without initialized watchdog", |
| ], |
| }, |
| "SOL": { |
| "Set_SOL": [ |
| # raw command, expected output(s), comment |
| "Invalid value", |
| "Valid values are serial, 9.6 19.2, 38.4, 57.6 and 115.2", |
| ] |
| }, |
| "Get SDR": { |
| "Get": [ |
| # Get SDR raw command without Reservation ID. |
| "0x0a 0x23 0x00 0x00 0x00 0x00 0x00 0xff", |
| # Netfunction and cmd. |
| "0x0a 0x23", |
| # Record ID offset and bytes to read. |
| "0x01 0x0f", |
| # Raw command To Get SDR Partial without Reservation ID. |
| "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f", |
| ], |
| }, |
| "Get": { |
| "POH_Counter": [ |
| # raw command, error response |
| "0x00 0x0f", |
| "Error: Unable to establish IPMI v2 / RMCP+ session", |
| ] |
| }, |
| "Device_SDR": { |
| "Get_Info": [ |
| # raw command, expected output(s), comment |
| "0x04 0x20 0x00", |
| "0x04 0x20 0x01", |
| "rsp=0xc7", |
| "Request data length invalid", |
| "rsp=0xd4", |
| "Insufficient privilege level", |
| ], |
| "Get": [ |
| # raw command, expected output(s), comment |
| "0x04 0x21", |
| "0x00 0x00 0x00 0xff", |
| "rsp=0xc7", |
| "Request data length invalid", |
| ], |
| "Reserve_Repository": [ |
| # raw command, expected output(s), comment |
| "0x04 0x22", |
| "rsp=0xc7", |
| "Request data length invalid", |
| "rsp=0xd4", |
| "Insufficient privilege level", |
| "Reservation cancelled or invalid", |
| ], |
| }, |
| "System_Info": { |
| "param0_Set_In_Progress": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x00 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x00", |
| "Request data length invalid", |
| "Invalid data field in request", |
| ], |
| }, |
| "param1_System_Firmware_Version": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x01 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x01 0x00 0x00 0x0e", |
| "Invalid data field in request", |
| ], |
| }, |
| "param2_System_Name": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x02 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x02 0x00 0x00 0x0e", |
| "Invalid data field in request", |
| ], |
| }, |
| "param3_Primary_Operating_System_Name": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x03 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x03 0x00 0x00 0x0e", |
| "Invalid data field in request", |
| ], |
| }, |
| "param4_Operating_System_Name": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x04 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x04 0x00 0x00 0x0e", |
| "Invalid data field in request", |
| ], |
| }, |
| "param5_Present_OS_Version_number": { |
| "Get": [ |
| # raw command, expected output(s) |
| "0x06 0x59 0x00 0x05 0x00 0x00", |
| "Request data length invalid", |
| ], |
| "Set": [ |
| # raw command, expected output(s) |
| "0x06 0x58 0x05 0x00 0x00 0x0e", |
| "Invalid data field in request", |
| ], |
| }, |
| }, |
| "Get Channel Auth Cap": { |
| "get": [ |
| # raw command |
| "0x06 0x38", |
| ] |
| }, |
| "Cipher Suite": { |
| "get": [ |
| # raw command, supported algorithm |
| "0x06 0x54", |
| "03 44 81", |
| # 03 - HMAC-SHA256 |
| # 44 - sha256_128 |
| # 81 - aes_cbc_128 |
| ] |
| }, |
| "SDR": { |
| "Get": [ |
| # Get SDR raw command without Reservation ID. |
| "0x0a 0x23 0x00 0x00 0x00 0x00 0x00 0xff", |
| # Netfunction and command. |
| "0x0a 0x23", |
| # Record ID offset and bytes to read. |
| "0x00 0x00 0x01 0x0f", |
| # Raw command To Get SDR Partial without reservation ID. |
| "0x0a 0x23 0x00 0x00 0x00 0x00 0x01 0x0f", |
| ], |
| "Reserve SDR Repository": [ |
| # raw command, expected output(s), comment |
| "0x0a 0x22", |
| ], |
| "SDR Repository Info": [ |
| # raw command. |
| "0x0a 0x20", |
| ], |
| "Get SDR allocation Info": [ |
| # raw command. |
| "0x0a 0x21" |
| ], |
| "Delete SDR": [ |
| # raw command. |
| "0x0a 0x26" |
| ], |
| "Partially Add SDR": [ |
| # raw command. |
| "0x0a 0x25" |
| ], |
| }, |
| "FRU": { |
| "Inventory_Area_Info": [ |
| # raw command, expected output(s), comment |
| "0x0a 0x10", |
| "Invalid data field in request", |
| "Request data length invalid", |
| ], |
| "Read": [ |
| # raw command |
| "0x0a 0x11", |
| ], |
| "Write": [ |
| # raw command |
| "0x0a 0x12", |
| ], |
| }, |
| "Chassis Capabilities": { |
| "Get": [ |
| # raw command, invalid data length |
| "0x00 0x00", |
| "0x00 0x00 0x01", |
| ] |
| }, |
| } |