diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index 9f30e29..0dd7f5b 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -7,6 +7,7 @@
 import re
 import gen_print as gp
 import gen_misc as gm
+import gen_cmd as gc
 import gen_robot_keyword as grk
 import gen_robot_utils as gru
 import bmc_ssh_utils as bsu
@@ -78,7 +79,52 @@
     return status
 
 
-def get_lan_print_dict():
+def execute_ipmi_cmd(cmd_string,
+                     ipmi_cmd_type='inband',
+                     print_output=1,
+                     ignore_err=0):
+    r"""
+    Run the given command string as an IPMI command and return the stdout,
+    stderr and the return code.
+
+    Description of argument(s):
+    cmd_string                      The command string to be run as an IPMI
+                                    command.
+    ipmi_cmd_type                   'inband' or 'external'.
+    print_output                    If this is set, this function will print
+                                    the stdout/stderr generated by
+                                    the IPMI command.
+    ignore_err                      Ignore error means that a failure
+                                    encountered by running the command
+                                    string will not be raised as a python
+                                    exception.
+    """
+
+    if ipmi_cmd_type == 'inband':
+        IPMI_INBAND_CMD = BuiltIn().get_variable_value("${IPMI_INBAND_CMD}")
+        cmd_buf = IPMI_INBAND_CMD + " " + cmd_string
+        return bsu.os_execute_command(cmd_buf,
+                                      print_out=print_output,
+                                      ignore_err=ignore_err)
+
+    if ipmi_cmd_type == 'external':
+        cmd_buf = BuiltIn().get_variable_value("${IPMI_EXT_CMD}")
+        IPMI_USER_OPTIONS =\
+            BuiltIn().get_variable_value("${IPMI_USER_OPTIONS}")
+        if IPMI_USER_OPTIONS != "":
+            cmd_buf += " " + IPMI_USER_OPTIONS
+        cmd_buf += " -P " + BuiltIn().get_variable_value("${IPMI_PASSWORD}")
+        cmd_buf += " " + BuiltIn().get_variable_value("${HOST}")
+        cmd_buf += " " + BuiltIn().get_variable_value("${OPENBMC_HOST}")
+        cmd_buf += " " + cmd_string
+        rc, stdout, stderr = gc.shell_cmd(cmd_buf,
+                                          print_output=print_output,
+                                          ignore_err=ignore_err,
+                                          return_stderr=1)
+        return stdout, stderr, rc
+
+
+def get_lan_print_dict(ipmi_cmd_type='external'):
     r"""
     Get IPMI 'lan print' output and return it as a dictionary.
 
@@ -120,22 +166,25 @@
       [Cipher Suite Priv Max]:                        Not Available
       [Bad Password Threshold]:                       Not Available
 
+    Description of argument(s):
+    ipmi_cmd_type                   The type of ipmi command to use (e.g.
+                                    'inband', 'external').
     """
 
-    IPMI_INBAND_CMD = BuiltIn().get_variable_value("${IPMI_INBAND_CMD}")
-
     # Notice in the example of data above that 'Auth Type Enable' needs some
     # special processing.  We essentially want to isolate its data and remove
     # the 'Auth Type Enable' string so that key_value_outbuf_to_dict can
     # process it as a sub-dictionary.
-    cmd_buf = IPMI_INBAND_CMD + " lan print | grep -E '^(Auth Type Enable)" +\
+    cmd_buf = "lan print | grep -E '^(Auth Type Enable)" +\
         "?[ ]+: ' | sed -re 's/^(Auth Type Enable)?[ ]+: //g'"
-    stdout1, stderr, rc = bsu.os_execute_command(cmd_buf)
+    stdout1, stderr, rc = execute_ipmi_cmd(cmd_buf, ipmi_cmd_type,
+                                           print_output=0)
 
     # Now get the remainder of the data and exclude the lines with no field
     # names (i.e. the 'Auth Type Enable' sub-fields).
-    cmd_buf = IPMI_INBAND_CMD + " lan print | grep -E -v '^[ ]+: '"
-    stdout2, stderr, rc = bsu.os_execute_command(cmd_buf)
+    cmd_buf = "lan print | grep -E -v '^[ ]+: '"
+    stdout2, stderr, rc = execute_ipmi_cmd(cmd_buf, ipmi_cmd_type,
+                                           print_output=0)
 
     # Make auth_type_enable_dict sub-dictionary...
     auth_type_enable_dict = vf.key_value_outbuf_to_dict(stdout1, to_lower=0,
diff --git a/openpower/test_inband_factory_reset.robot b/openpower/test_inband_factory_reset.robot
index fd3344a..5983331 100644
--- a/openpower/test_inband_factory_reset.robot
+++ b/openpower/test_inband_factory_reset.robot
@@ -18,7 +18,7 @@
 
     REST Power On  stack_mode=skip
 
-    ${network_info}=  Get Lan Print Dict
+    ${network_info}=  Get Lan Print Dict  ipmi_cmd_type=inband
     Should Not Be Empty  ${network_info}
 
     # Call reset method.
