Author: cwittich
Date: Wed Apr 9 11:29:14 2008
New Revision: 32898
URL:
http://svn.reactos.org/svn/reactos?rev=32898&view=rev
Log:
add EMU_TYPE_XEN and initial Xen detection (including hvm support)
Modified:
trunk/reactos/tools/sysreg/rosboot_test.cpp
trunk/reactos/tools/sysreg/rosboot_test.h
Modified: trunk/reactos/tools/sysreg/rosboot_test.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/rosboot_test.…
==============================================================================
--- trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/sysreg/rosboot_test.cpp [iso-8859-1] Wed Apr 9 11:29:14 2008
@@ -53,6 +53,7 @@
string RosBootTest::ROS_EMU_TYPE= "ROS_EMU_TYPE";
string RosBootTest::EMU_TYPE_QEMU = "qemu";
string RosBootTest::EMU_TYPE_VMWARE = "vmware";
+ string RosBootTest::EMU_TYPE_XEN = "xen";
string RosBootTest::ROS_HDD_IMAGE= "ROS_HDD_IMAGE";
string RosBootTest::ROS_CD_IMAGE = "ROS_CD_IMAGE";
string RosBootTest::ROS_MAX_TIME = "ROS_MAX_TIME";
@@ -64,6 +65,7 @@
string RosBootTest::ROS_EMU_KILL = "ROS_EMU_KILL";
string RosBootTest::ROS_EMU_MEM = "ROS_EMU_MEM";
string RosBootTest::ROS_BOOT_CMD = "ROS_BOOT_CMD";
+ string RosBootTest::XEN_CONFIG_FILE = "XEN_CONFIG_FILE";
#ifdef __LINUX__
string RosBootTest::ROS_EMU_PATH = "ROS_EMU_PATH_LIN";
@@ -621,13 +623,58 @@
m_DataSource = new NamedPipeReader();
if (!executeBootCmd())
{
+
cerr << "Error: failed to launch emulator with: " <<
m_BootCmd << endl;
return false;
}
return true;
}
-
+
+//---------------------------------------------------------------------------------------
+ bool RosBootTest::xenGetCaps()
+ {
+ FILE *fp;
+ int ch, i;
+ char buffer[2048];
+
+ fp = popen("xm info", "r");
+ if (!fp)
+ {
+ cerr << "Error getting Xen caps." << endl;
+ return false;
+ }
+ for (i=0;(i<2049)&&(feof(fp) == 0 && ((ch = fgetc(fp)) != -1));
i++)
+ {
+ buffer[i] = (char) ch;
+ }
+ buffer[i] = '\0';
+ pclose(fp);
+
+ if (strstr(buffer, "hvm") == 0)
+ {
+ cerr << "No hvm support detected!" << endl;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+
+ }
+
+//---------------------------------------------------------------------------------------
+ bool RosBootTest::configureXen()
+ {
+ if (!xenGetCaps())
+ {
+ return false;
+ }
+
+ cerr << "Xen isn't supported yet." << endl;
+
+ return false;
+ }
//---------------------------------------------------------------------------------------
bool RosBootTest::configureVmWare()
{
@@ -637,17 +684,25 @@
//---------------------------------------------------------------------------------------
bool RosBootTest::readConfigurationValues(ConfigParser &conf_parser)
{
-#if 0
+
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_TYPE, m_EmuType))
{
cerr << "Error: ROS_EMU_TYPE is not set" << endl;
return false;
}
-#endif
+
+ if (ROS_EMU_TYPE == "xen")
+ {
+ if (!conf_parser.getStringValue(RosBootTest::XEN_CONFIG_FILE, m_XenConfig))
+ {
+ cerr << "Error: XEN_CONFIG_FILE is not set" << endl;
+ return false;
+ }
+ }
if (!conf_parser.getStringValue(RosBootTest::ROS_EMU_PATH, m_EmuPath))
{
- cerr << "Error: ROS_EMU_PATH is not set" << endl;
+ cerr << "Error: ROS_EMU_PATH_[LIN/WIN] is not set" <<
endl;
return false;
}
if (!m_HDDImage.length())
@@ -702,7 +757,7 @@
{
return false;
}
-#if 0
+
if (m_EmuType == EMU_TYPE_QEMU)
{
if (!configureQemu())
@@ -719,6 +774,14 @@
return false;
}
}
+ else if (m_EmuType == EMU_TYPE_XEN)
+ {
+ if (!configureXen())
+ {
+ cerr << "Error: failed to configure xen" << endl;
+ return false;
+ }
+ }
else
{
///
@@ -727,13 +790,6 @@
cerr << "Error: ROS_EMU_TYPE value is not supported:"
<< m_EmuType << "=" << EMU_TYPE_QEMU << endl;
return false;
}
-#else
- if (!configureQemu())
- {
- cerr << "Error: failed to configure qemu" << endl;
- return false;
- }
-#endif
if (m_DelayRead)
{
Modified: trunk/reactos/tools/sysreg/rosboot_test.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/sysreg/rosboot_test.…
==============================================================================
--- trunk/reactos/tools/sysreg/rosboot_test.h [iso-8859-1] (original)
+++ trunk/reactos/tools/sysreg/rosboot_test.h [iso-8859-1] Wed Apr 9 11:29:14 2008
@@ -43,6 +43,7 @@
static string ROS_EMU_TYPE;
static string EMU_TYPE_QEMU;
static string EMU_TYPE_VMWARE;
+ static string EMU_TYPE_XEN;
static string ROS_EMU_PATH;
static string ROS_HDD_IMAGE;
static string ROS_CD_IMAGE;
@@ -55,6 +56,7 @@
static string ROS_EMU_KILL;
static string ROS_EMU_MEM;
static string ROS_BOOT_CMD;
+ static string XEN_CONFIG_FILE;
//---------------------------------------------------------------------------------------
///
@@ -107,8 +109,10 @@
bool readConfigurationValues(ConfigParser & conf_parser);
bool configureQemu();
bool configureVmWare();
+ bool configureXen();
bool hasQemuNoRebootOption();
void cleanup();
+ bool xenGetCaps();
//---------------------------------------------------------------------------------------
///
/// dumpCheckpoints
@@ -155,6 +159,7 @@
string m_Src;
string m_DebugPort;
string m_PidFile;
+ string m_XenConfig;
DataSource * m_DataSource;
OsSupport::ProcessID m_Pid;