Enhancement : External ipmitool enablement

With this enhancement, a user can
    - send IPMI command using external ipmitool
    - by default dbus method will be used for ipmi command

Resolves    openbmc/openbmc-test-automation#64

Change-Id: Ibd49dc8cdaf30e32da468c8b04abbff29f673c8b
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index 6e50e8b..079804c 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -9,13 +9,38 @@
 *** Variables ***
 ${dbusHostIpmicmd1} =   dbus-send --system  /org/openbmc/HostIpmi/1
 ${dbusHostIpmiCmdReceivedMsg} =   org.openbmc.HostIpmi.ReceivedMessage
-${netfnByte} =    ${EMPTY}
-${cmdByte}   =    ${EMPTY}
-${arrayByte} =       array:byte:
+${netfnByte} =          ${EMPTY}
+${cmdByte}   =          ${EMPTY}
+${arrayByte} =          array:byte:
+${IPMI_EXT_CMD} =       ipmitool -I lanplus -C 1 -P
+${HOST} =               -H
+${RAW} =                raw
 
 *** Keywords ***
+
 Run IPMI Command
     [arguments]    ${args}
+    ${resp}=     Run Keyword If   '${IPMI_COMMAND}'=='External'
+    ...    Run External IPMI RAW Command   ${args}
+    ...          ELSE IF          '${IPMI_COMMAND}'=='Dbus'
+    ...    Run Dbus IPMI RAW Command   ${args}
+    ...          ELSE             Fail
+    ...    msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+    [return]    ${resp}
+
+Run IPMI Standard Command
+    [arguments]    ${args}
+    ${resp}=     Run Keyword If   '${IPMI_COMMAND}'=='External'
+    ...    Run External IPMI Standard Command   ${args}
+    ...          ELSE IF          '${IPMI_COMMAND}'=='Dbus'
+    ...    Run Dbus IPMI Standard Command   ${args}
+    ...          ELSE             Fail
+    ...    msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+
+    [return]    ${resp}
+
+Run Dbus IPMI RAW Command
+    [arguments]    ${args}
     ${valueinBytes} =   Byte Conversion  ${args}
     ${cmd} =   Catenate   ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg}
     ${cmd} =   Catenate   ${cmd} ${valueinBytes}
@@ -23,13 +48,34 @@
     Should Be Empty      ${stderr}
     set test variable    ${OUTPUT}     "${output}"
 
-Run IPMI Standard Command
+Run Dbus IPMI Standard Command
     [arguments]    ${args}
     Copy ipmitool
-    ${stdout}    ${stderr}    ${output}=  Execute Command    /tmp/ipmitool -I dbus ${args}    return_stdout=True    return_stderr= True    return_rc=True
+    ${stdout}    ${stderr}    ${output}=  Execute Command
+    ...    /tmp/ipmitool -I dbus ${args}    return_stdout=True
+    ...    return_stderr= True    return_rc=True
     Should Be Equal    ${output}    ${0}    msg=${stderr}
     [return]    ${stdout}
 
+Run External IPMI RAW Command
+    [arguments]    ${args}
+    ${ipmi_raw_cmd}=   Catenate  SEPARATOR=
+    ...    ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+    ...    ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${RAW}${SPACE}${args}
+    ${rc}    ${output}=    Run and Return RC and Output    ${ipmi_raw_cmd}
+    Should Be Equal    ${rc}    ${0}    msg=${output}
+    [return]    ${output}
+
+Run External IPMI Standard Command
+    [arguments]    ${args}
+    ${ipmi_cmd}=   Catenate  SEPARATOR=
+    ...    ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+    ...    ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${args}
+    ${rc}    ${output}=    Run and Return RC and Output    ${ipmi_cmd}
+    Should Be Equal    ${rc}    ${0}    msg=${output}
+    [return]   ${output}
+
+
 Byte Conversion
     [Documentation]   Byte Conversion method receives IPMI RAW commands as
     ...               argument in string format.