| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 1 | *** Settings *** | 
|  | 2 | Documentation    Module to test IPMI chipher functionality. | 
|  | 3 | Resource         ../lib/ipmi_client.robot | 
|  | 4 | Resource         ../lib/openbmc_ffdc.robot | 
| nagarjunb22 | 7fabf79 | 2022-04-19 11:09:29 +0530 | [diff] [blame] | 5 | Resource         ../lib/bmc_network_utils.robot | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 6 | Library          ../lib/ipmi_utils.py | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 7 | Library          ../lib/var_funcs.py | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 8 | Variables        ../data/ipmi_raw_cmd_table.py | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 9 | Library          String | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 10 |  | 
| nagarjunb22 | 7fabf79 | 2022-04-19 11:09:29 +0530 | [diff] [blame] | 11 |  | 
|  | 12 | Suite Setup      IPMI Cipher Suite Setup | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 13 | Test Setup       Printn | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 14 | Test Teardown    FFDC On Test Case Fail | 
|  | 15 |  | 
| nagarjunb22 | 7fabf79 | 2022-04-19 11:09:29 +0530 | [diff] [blame] | 16 |  | 
|  | 17 | *** Variables  *** | 
|  | 18 | ${cipher_suite}      standard | 
|  | 19 | &{payload_type}      ipmi=0  sol=1 | 
|  | 20 | @{list_index_value}  0x80  0x00 | 
|  | 21 |  | 
|  | 22 |  | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 23 | *** Test Cases *** | 
|  | 24 |  | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 25 | Verify Supported Ciphers | 
|  | 26 | [Documentation]  Execute all supported ciphers and verify. | 
|  | 27 | [Tags]  Verify_Supported_Ciphers | 
|  | 28 | FOR  ${cipher}  IN  @{valid_ciphers} | 
|  | 29 | Run External IPMI Standard Command  power status  C=${cipher} | 
|  | 30 | END | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 31 |  | 
|  | 32 |  | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 33 | Verify Unsupported Ciphers | 
|  | 34 | [Documentation]  Execute all unsupported ciphers and verify error. | 
|  | 35 | [Tags]  Verify_Unsupported_Ciphers | 
|  | 36 | FOR  ${cipher}  IN  @{unsupported_ciphers} | 
|  | 37 | Run Keyword And Expect Error  *invalid * algorithm* | 
|  | 38 | ...  Run External IPMI Standard Command  power status  C=${cipher} | 
|  | 39 | END | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 40 |  | 
|  | 41 |  | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 42 | Verify Supported Ciphers Via Lan Print | 
|  | 43 | [Documentation]  Verify supported ciphers via IPMI lan print command. | 
|  | 44 | [Tags]  Verify_Supported_Ciphers_Via_Lan_Print | 
|  | 45 |  | 
|  | 46 | ${lan_print}=  Get Lan Print Dict | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 47 | # Example 'RMCP+ Cipher Suites' entry: 3,17 | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 48 | ${ciphers}=  Split String  ${lan_print['RMCP+ Cipher Suites']}  , | 
|  | 49 | Rprint Vars  ciphers | 
|  | 50 | Valid List  ciphers  valid_values=${valid_ciphers} | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 51 |  | 
|  | 52 |  | 
|  | 53 | Verify Supported Cipher Via Getciphers | 
| George Keishing | 13b7afd | 2022-05-23 07:36:16 -0500 | [diff] [blame] | 54 | [Documentation]  Verify supported cihpers via IPMI getciphers command. | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 55 | [Tags]  Verify_Supported_Cipher_Via_Getciphers | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 56 |  | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 57 | # Example output from 'Channel Getciphers IPMI': | 
|  | 58 | # ipmi_channel_ciphers: | 
|  | 59 | #   [0]: | 
|  | 60 | #     [id]:                                         3 | 
|  | 61 | #     [iana]:                                       N/A | 
|  | 62 | #     [auth_alg]:                                   hmac_sha1 | 
|  | 63 | #     [integrity_alg]:                              hmac_sha1_96 | 
|  | 64 | #     [confidentiality_alg]:                        aes_cbc_128 | 
|  | 65 | #   [1]: | 
|  | 66 | #     [id]:                                         17 | 
|  | 67 | #     [iana]:                                       N/A | 
|  | 68 | #     [auth_alg]:                                   hmac_sha256 | 
|  | 69 | #     [integrity_alg]:                              sha256_128 | 
|  | 70 | #     [confidentiality_alg]:                        aes_cbc_128 | 
| Rahul Maheshwari | d4d43fc | 2019-06-24 00:54:19 -0500 | [diff] [blame] | 71 |  | 
| George Keishing | 45511e8 | 2019-10-15 01:26:55 -0500 | [diff] [blame] | 72 | ${ipmi_channel_ciphers}=  Channel Getciphers IPMI | 
|  | 73 | # Example cipher entry: 3 17 | 
|  | 74 | Rprint Vars  ipmi_channel_ciphers | 
|  | 75 | ${ipmi_channel_cipher_ids}=  Nested Get  id  ${ipmi_channel_ciphers} | 
|  | 76 | Rpvars  ipmi_channel_cipher_ids | 
|  | 77 | Valid List  ipmi_channel_cipher_ids  valid_values=${valid_ciphers} | 
| nagarjunb22 | 7fabf79 | 2022-04-19 11:09:29 +0530 | [diff] [blame] | 78 |  | 
|  | 79 |  | 
|  | 80 | Verify Cipher Suite And Supported Algorithms Via IPMI Raw Command | 
|  | 81 | [Documentation]  Verify cipher ID and Supported Algorithms for all Available Channels. | 
|  | 82 | [Tags]  Verify_Cipher_Suite_And_Supported_Algorithms_Via_IPMI_Raw_Command | 
|  | 83 | [Template]  Verify Cipher ID and Supported Algorithm For Channel | 
|  | 84 |  | 
|  | 85 | FOR  ${channel}  IN  @{active_channel_list} | 
|  | 86 | FOR  ${name}  ${type}  IN  &{payload_type} | 
|  | 87 | FOR  ${index_value}  IN  @{list_index_value} | 
|  | 88 | # Input Channel   Payload type    Index value 0x80 or 0x00 | 
|  | 89 | ${channel}        ${type}         ${index_value} | 
|  | 90 | END | 
|  | 91 | END | 
|  | 92 | END | 
|  | 93 |  | 
|  | 94 |  | 
|  | 95 | Verify Get Cipher Suite Command For Invalid Channels | 
|  | 96 | [Documentation]  Verify Get Cipher Suite Command For all Invalid Channels. | 
|  | 97 | [Tags]  Verify_Get_Cipher_Suite_Command_For_Invalid_Channels | 
|  | 98 | [Template]  Verify Cipher Suite For Invalid Channel | 
|  | 99 |  | 
|  | 100 | FOR  ${channel}  IN  @{inactive_channel_list} | 
|  | 101 | # Input Channel | 
|  | 102 | ${channel} | 
|  | 103 | END | 
|  | 104 |  | 
|  | 105 |  | 
|  | 106 | Verify Get Cipher Suite Raw Command With Invalid Data Length | 
|  | 107 | [Documentation]  Verify Get Cipher Suite Raw Command With One Extra and Less Byte. | 
|  | 108 | [Tags]  Verify_Get_Cipher_Suite_Raw_Command_With_Invalid_Data_Length | 
|  | 109 | [Template]  Verify Cipher Suite Command for Invalid Request Data | 
|  | 110 |  | 
|  | 111 | # Byte | 
|  | 112 | less | 
|  | 113 | extra | 
|  | 114 |  | 
|  | 115 |  | 
|  | 116 | *** Keywords *** | 
|  | 117 |  | 
|  | 118 | IPMI Cipher Suite Setup | 
|  | 119 | [Documentation]  Get active and inactive/invalid channels from channel_config.json file | 
|  | 120 | ...              in list type and set it as suite variable. | 
|  | 121 |  | 
|  | 122 | # Get active channel list and set as a suite variable. | 
|  | 123 | @{active_channel_list}=  Get Active Ethernet Channel List  current_channel=1 | 
|  | 124 | Set Suite Variable  @{active_channel_list} | 
|  | 125 |  | 
|  | 126 | # Get Inactive/Invalid channel list and set as a suite variable. | 
|  | 127 | @{inactive_channel_list}=  Get Invalid Channel Number List | 
|  | 128 | Set Suite Variable  @{inactive_channel_list} | 
|  | 129 |  | 
|  | 130 | Verify Standard Cipher Suite For Channel | 
|  | 131 | [Documentation]  Get the supported algorithms from data/ipmi_raw_cmd_table.py and | 
|  | 132 | ...              split into list and compare it with the given data list. | 
|  | 133 | [Arguments]  ${data_list}  ${channel_number} | 
|  | 134 |  | 
|  | 135 | # Description of argument(s): | 
|  | 136 | # data_list   cipher suite records in list | 
|  | 137 | #  e.g  [01, c0, 11, 03, 44, 81] | 
|  | 138 |  | 
|  | 139 | ${supported_algorithms}=  Split String  ${IPMI_RAW_CMD['Cipher Suite']['get'][1]} | 
|  | 140 | ${cipher_suite_id}=  Convert To Integer  ${data_list}[2]  base=16 | 
|  | 141 |  | 
|  | 142 | Should Be Equal  ${data_list}[0]  ${channel_number} | 
|  | 143 | Should Be Equal  ${data_list}[1]  c0 | 
|  | 144 | Should Be Equal As Integers  ${cipher_suite_id}  ${valid_ciphers}[0] | 
|  | 145 | List Should Contain Value  ${supported_algorithms}  ${data_list}[3] | 
|  | 146 | List Should Contain Value  ${supported_algorithms}  ${data_list}[4] | 
|  | 147 | List Should Contain Value  ${supported_algorithms}  ${data_list}[5] | 
|  | 148 |  | 
|  | 149 | Verify Algorithm by Cipher Suite For Channel | 
|  | 150 | [Documentation]  Spilt the given response data, store it in a list. | 
|  | 151 | [Arguments]  ${response_data}  ${channel_number} | 
|  | 152 |  | 
|  | 153 | # Description of argument(s): | 
|  | 154 | # response_data   response data of get channel cipher suite ipmi raw command | 
|  | 155 | #   e.g  01 c0 11 03 44 81   ---> list of algorithms by cipher suite (0x80 in request data 3rd byte) | 
|  | 156 | # ${channel_number}  Interface channel number | 
|  | 157 |  | 
|  | 158 | @{expected_data_list}=  Split String  ${response_data} | 
|  | 159 |  | 
|  | 160 | Run Keyword If  '${cipher_suite}' == 'standard' | 
|  | 161 | ...  Verify Standard Cipher Suite For Channel  ${expected_data_list}  ${channel_number} | 
|  | 162 |  | 
|  | 163 | Verify Supported Algorithm For Channel | 
|  | 164 | [Documentation]  Compare the supported algorithms got from ipmi_raw_cmd_table with | 
| George Keishing | 13b7afd | 2022-05-23 07:36:16 -0500 | [diff] [blame] | 165 | ...              given response. | 
| nagarjunb22 | 7fabf79 | 2022-04-19 11:09:29 +0530 | [diff] [blame] | 166 | [Arguments]  ${response_data}  ${channel_number} | 
|  | 167 |  | 
|  | 168 | # Description of argument(s): | 
|  | 169 | # response_data    response data of get channel cipher suite ipmi raw command. | 
|  | 170 | # channel_number   Interface Channel Number. | 
|  | 171 |  | 
|  | 172 | # expected data will be like " 01 03 44 81 ". | 
|  | 173 | ${expected_data}=  Catenate  ${channel_number}  ${IPMI_RAW_CMD['Cipher Suite']['get'][1]} | 
|  | 174 |  | 
|  | 175 | Should Be Equal  ${expected_data}  ${response_data} | 
|  | 176 |  | 
|  | 177 | Verify Cipher ID and Supported Algorithm For Channel | 
|  | 178 | [Documentation]  Verify Cipher ID and Supported Algorithm on given channel. | 
|  | 179 | [Arguments]  ${channel_num}  ${payload_type}  ${index_value} | 
|  | 180 |  | 
|  | 181 | # Description of argument(s): | 
|  | 182 | # channel_num   Interface channel number. | 
|  | 183 | # payload_type   IPMI(0x00) or Sol(0x01). | 
|  | 184 | # index_value    0x80 for list algorithm by cipher suite. | 
|  | 185 | #                0x00 for supported algorithms. | 
|  | 186 |  | 
|  | 187 | ${cmd}=  Catenate  ${IPMI_RAW_CMD['Cipher Suite']['get'][0]} | 
|  | 188 | ...  ${channel_num} ${payload_type} ${index_value} | 
|  | 189 |  | 
|  | 190 | ${resp}=  Run External IPMI Raw Command  ${cmd} | 
|  | 191 | ${resp}=  Strip String  ${resp} | 
|  | 192 |  | 
|  | 193 | # channel 14 represents current channel in which we send request. | 
|  | 194 | ${channel_num}=  Run Keyword If  '${channel_num}' == '14' | 
|  | 195 | ...  Convert To Hex  ${CHANNEL_NUMBER}  length=2 | 
|  | 196 | ...  ELSE | 
|  | 197 | ...  Convert To Hex  ${channel_num}  length=2 | 
|  | 198 |  | 
|  | 199 | Run Keyword If  '${index_value}' == '0x80' | 
|  | 200 | ...  Verify Algorithm by Cipher Suite For Channel  ${resp}  ${channel_num} | 
|  | 201 | ...  ELSE | 
|  | 202 | ...  Verify Supported Algorithm For Channel  ${resp}  ${channel_num} | 
|  | 203 |  | 
|  | 204 | Verify Cipher Suite For Invalid Channel | 
|  | 205 | [Documentation]  Execute cipher suite ipmi cmd for invalid channel and verify Error code. | 
|  | 206 | [Arguments]  ${channel_number} | 
|  | 207 |  | 
|  | 208 | # Description of argument(s): | 
|  | 209 | # channel_number   Interface channel number. | 
|  | 210 |  | 
|  | 211 | ${cmd}=  Catenate  ${IPMI_RAW_CMD['Cipher Suite']['get'][0]} ${channel_number} 00 00 | 
|  | 212 |  | 
|  | 213 | Verify Invalid IPMI Command  ${cmd}  0xcc | 
|  | 214 |  | 
|  | 215 | Verify Cipher Suite Command for Invalid Request Data | 
|  | 216 | [Documentation]  Verify Cipher Suite Command with Invalid data Length. | 
|  | 217 | [Arguments]  ${byte_length} | 
|  | 218 |  | 
|  | 219 | # Description of argument(s): | 
|  | 220 | # byte_length   extra or less. | 
|  | 221 |  | 
|  | 222 | ${req_cmd}=  Run Keyword If  '${byte_length}' == 'less' | 
|  | 223 | ...  Catenate  ${IPMI_RAW_CMD['Cipher Suite']['get'][0]} ${CHANNEL_NUMBER} 00 | 
|  | 224 | ...  ELSE | 
|  | 225 | ...  Catenate  ${IPMI_RAW_CMD['Cipher Suite']['get'][0]} ${CHANNEL_NUMBER} 00 00 01 | 
|  | 226 |  | 
|  | 227 | Verify Invalid IPMI Command  ${req_cmd}  0xc7 |