|  | #!/usr/bin/env python3 | 
|  |  | 
|  | r""" | 
|  | IPMI raw commands table: | 
|  |  | 
|  | - Define IPMI interface index, commands and expected output. | 
|  |  | 
|  | """ | 
|  |  | 
|  | # 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 | 
|  | "0x0a 0x44 0x00 0x00 0x02 0x00 0x00 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 0x01 0x03 0 0" | 
|  | ], | 
|  | 'get_ip_src': | 
|  | [ | 
|  | # raw command | 
|  | "0x0c 0x02 0x01 0x04 0 0" | 
|  | ], | 
|  | 'get_dot1q': | 
|  | [ | 
|  | # raw command | 
|  | "0x0c 0x02 0x01 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 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" | 
|  | ] | 
|  | }, | 
|  | } |