| *** Settings *** | 
 |  | 
 | Documentation  Protocol settings utilities keywords. | 
 |  | 
 | Resource         ../lib/resource.robot | 
 | Resource         ../lib/utils.robot | 
 |  | 
 |  | 
 | *** Variables *** | 
 |  | 
 | ${cmd_prefix}    ipmitool -I lanplus -C 17 -p 623 -U ${IPMI_USERNAME} -P ${IPMI_PASSWORD} | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 | Enable SSH Protocol | 
 |     [Documentation]  Enable or disable SSH protocol. | 
 |     [Arguments]  ${enable_value}=${True} | 
 |  | 
 |     # Description of argument(s}: | 
 |     # enable_value  Enable or disable SSH, e.g. (true, false). | 
 |  | 
 |     ${ssh_state}=  Create Dictionary  ProtocolEnabled=${enable_value} | 
 |     ${data}=  Create Dictionary  SSH=${ssh_state} | 
 |  | 
 |     Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data} | 
 |     ...  valid_status_codes=[${HTTP_NO_CONTENT}] | 
 |  | 
 |     # Wait for timeout for new values to take effect. | 
 |     Sleep  ${NETWORK_TIMEOUT}s | 
 |  | 
 |  | 
 | Verify SSH Login And Commands Work | 
 |     [Documentation]  Verify if SSH connection works and able to run command on SSH session. | 
 |     [Arguments]  ${host}=${OPENBMC_HOST} | 
 |     [Teardown]  Close All Connections | 
 |  | 
 |     # Description of argument(s}: | 
 |     # host  OPENBMC_HOST, OPENBMC_HOST_1, Use eth0 as the default interface | 
 |  | 
 |     # Check if we can open SSH connection and login. | 
 |     Open Connection And Log In  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}  host=${host} | 
 |     # Check if we can run command successfully on SSH session. | 
 |     BMC Execute Command  /sbin/ip addr | 
 |  | 
 |  | 
 | Verify SSH Protocol State | 
 |     [Documentation]  verify SSH protocol state. | 
 |     [Arguments]  ${state}=${True} | 
 |  | 
 |     # Description of argument(s}: | 
 |     # state  Enable or disable SSH, e.g. (true, false) | 
 |  | 
 |     # Sample output: | 
 |     # { | 
 |     #   "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/NetworkProtocol", | 
 |     #   "@odata.type": "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol", | 
 |     #   "Description": "Manager Network Service", | 
 |     #   "FQDN": "bmc", | 
 |     #  "HTTP": { | 
 |     #    "Port": 0, | 
 |     #    "ProtocolEnabled": false | 
 |     #  }, | 
 |     #  "HTTPS": { | 
 |     #    "Certificates": { | 
 |     #      "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/NetworkProtocol/HTTPS/Certificates" | 
 |     #    }, | 
 |     #    "Port": xxx, | 
 |     #    "ProtocolEnabled": true | 
 |     #  }, | 
 |     #  "HostName": "xxxxbmc", | 
 |     #  "IPMI": { | 
 |     #    "Port": xxx, | 
 |     #    "ProtocolEnabled": true | 
 |     #  }, | 
 |     #  "Id": "NetworkProtocol", | 
 |     #  "NTP": { | 
 |     #    "NTPServers": [ | 
 |     #      "xx.xx.xx.xx", | 
 |     #      "xx.xx.xx.xx", | 
 |     #      "xx.xx.xx.xx" | 
 |     #    ], | 
 |     #    "ProtocolEnabled": true | 
 |     #  }, | 
 |     #  "Name": "Manager Network Protocol", | 
 |     #  "SSH": { | 
 |     #    "Port": xx, | 
 |     #    "ProtocolEnabled": true | 
 |     #  }, | 
 |     #  "Status": { | 
 |     #    "Health": "OK", | 
 |     #    "HealthRollup": "OK", | 
 |     #    "State": "Enabled" | 
 |     #  } | 
 |  | 
 |     ${resp}=  Redfish.Get  ${REDFISH_NW_PROTOCOL_URI} | 
 |     Should Be Equal As Strings  ${resp.dict['SSH']['ProtocolEnabled']}  ${state} | 
 |     ...  msg=Protocol states are not matching. | 
 |  | 
 |  | 
 | Enable IPMI Protocol | 
 |     [Documentation]  Enable or disable IPMI protocol. | 
 |     [Arguments]  ${enable_value}=${True} | 
 |  | 
 |     # Description of argument(s}: | 
 |     # enable_value  Enable or disable IPMI, e.g. (true, false). | 
 |  | 
 |     ${ipmi_state}=  Create Dictionary  ProtocolEnabled=${enable_value} | 
 |     ${data}=  Create Dictionary  IPMI=${ipmi_state} | 
 |  | 
 |     Redfish.Patch  ${REDFISH_NW_PROTOCOL_URI}  body=&{data} | 
 |     ...  valid_status_codes=[${HTTP_NO_CONTENT}] | 
 |  | 
 |     # Wait for timeout for new values to take effect. | 
 |     Sleep  ${NETWORK_TIMEOUT}s | 
 |  | 
 |  | 
 | Verify IPMI Works | 
 |     [Documentation]  Run IPMI command and return status. | 
 |     [Arguments]  ${sub_cmd}  ${host}=${OPENBMC_HOST} | 
 |  | 
 |     # Description of argument(s): | 
 |     # host         BMC host name or IP address. | 
 |     # sub_cmd      The IPMI command string to be executed. | 
 |  | 
 |     ${rc}=  Run And Return Rc  ${cmd_prefix} -H ${host} ${sub_cmd} | 
 |     Should Be Equal As Strings  ${rc}  0 | 
 |     ...  msg=IPMI is not enabled and commands are failing. | 
 |  | 
 |  | 
 | Verify IPMI Protocol State | 
 |     [Documentation]  Verify IPMI protocol state. | 
 |     [Arguments]  ${state}=${True} | 
 |  | 
 |     # Description of argument(s}: | 
 |     # state  Enable or disable IPMI, e.g. (true, false) | 
 |  | 
 |     ${resp}=  Redfish.Get  ${REDFISH_NW_PROTOCOL_URI} | 
 |     Should Be Equal As Strings  ${resp.dict['IPMI']['ProtocolEnabled']}  ${state} | 
 |     ...  msg=Protocol states are not matching. |