VBoxBFE.cpp revision 0c04bf3d366953a24840080b5f7be34d9406a7dc
* available from http://www.virtualbox.org. This file is free software;
#ifndef VBOXBFE_WITHOUT_COM
using namespace com;
#ifdef VBOXBFE_WITH_USB
#include "VBoxBFE.h"
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#ifndef __L4ENV__
#include <vector>
#include "ConsoleImpl.h"
#include "DisplayImpl.h"
#include "MouseImpl.h"
#include "KeyboardImpl.h"
#include "VMMDevInterface.h"
#include "StatusImpl.h"
#include "Framebuffer.h"
#include "MachineDebuggerImpl.h"
#ifdef VBOXBFE_WITH_USB
# include "HostUSBImpl.h"
#include "SDLConsole.h"
#include "SDLFramebuffer.h"
#ifdef __L4__
#include "L4Console.h"
#include "L4Framebuffer.h"
#ifdef __L4ENV__
# ifndef L4API_l4v2onv4
#define VBOXSDL_ADVANCED_OPTIONS
static DECLCALLBACK(void) vmstateChangeCallback(PVM pVM, VMSTATE enmState, VMSTATE enmOldState, void *pvUser);
#ifdef VBOXBFE_WITH_USB
#ifdef __L4__
bool gfAllowFullscreenToggle = true;
static bool g_fIOAPIC = false;
static bool g_fACPI = true;
static bool g_fAudio = false;
#ifdef VBOXBFE_WITH_USB
static bool g_fUSB = false;
#ifdef VBOXSDL_ADVANCED_OPTIONS
static bool g_fRawR0 = true;
static bool g_fRawR3 = true;
static bool g_fPATM = true;
static bool g_fCSAM = true;
static bool g_fPreAllocRam = false;
typedef struct BFENetworkDevice
NOT_CONFIGURED = 0,
NONE,
NAT,
HIF,
uint32_t n;
static void show_usage()
" -hifdev<1-N> <dev> <mac> Use existing Host Interface Network Device with the given name and MAC address\n"
#ifdef RT_OS_LINUX
#ifdef VBOX_VRDP
#ifdef VBOX_SECURELABEL
#ifdef VBOXSDL_ADVANCED_OPTIONS
#ifdef __L4ENV__
#ifdef __L4ENV__
#ifndef L4API_l4v2onv4
for (int i = 0; i < argc; i++)
if (++i >= argc)
bool fFullscreen = false;
#ifdef VBOX_VRDP
#ifdef VBOX_SECURELABEL
bool fSecureLabel = false;
show_usage();
fFullscreen = true;
gfAllowFullscreenToggle = false;
gHostKey = 0;
gHostKeySym = 0;
g_fACPI = true;
g_fACPI = false;
g_fIOAPIC = true;
g_fIOAPIC = false;
g_fAudio = true;
#ifdef VBOXBFE_WITH_USB
g_fUSB = true;
if (!g_pszHdaFile)
return SyntaxError("The path to the specified harddisk, '%s', could not be resolved.\n", argv[curArg]);
if (!g_pszHdbFile)
return SyntaxError("The path to the specified harddisk, '%s', could not be resolved.\n", argv[curArg]);
if (!g_pszFdaFile)
return SyntaxError("The path to the specified floppy disk, '%s', could not be resolved.\n", argv[curArg]);
if (!g_pszCdromFile)
return SyntaxError("The path to the specified cdrom, '%s', could not be resolved.\n", argv[curArg]);
, pszArg);
return SyntaxError("The network MAC address has an invalid length: %s (%s)\n", argv[curArg], pszArg);
if (rc < 0)
#ifdef RT_OS_LINUX
#ifdef VBOX_VRDP
#ifdef VBOX_SECURELABEL
fSecureLabel = true;
g_fReleaseLog = true;
g_fReleaseLog = false;
g_fPreAllocRam = true;
#ifdef VBOXSDL_ADVANCED_OPTIONS
g_fRawR0 = true;
g_fRawR0 = false;
g_fRawR3 = true;
g_fRawR3 = false;
g_fPATM = true;
g_fPATM = false;
g_fCSAM = true;
g_fCSAM = false;
#ifdef __L4__
++curArg;
show_usage();
#if defined(USE_SDL)
goto leave;
switch (event)
case CONEVENT_USR_QUIT:
goto leave;
goto leave;
RTPrintf("Error: failed to power up VM! No error text available (rc = 0x%x state = %d)\n", rc, machineState);
goto leave;
#ifdef __L4__
switch (event)
case CONEVENT_NONE:
case CONEVENT_QUIT:
case CONEVENT_USR_QUIT:
goto leave;
case CONEVENT_SCREENUPDATE:
#ifdef VBOX_SECURELABEL
if (pVM)
delete gFramebuffer;
delete gConsole;
delete gDisplay;
delete gKeyboard;
delete gMouse;
delete gStatus;
delete gMachineDebugger;
static DECLCALLBACK(void) vmstateChangeCallback(PVM pVM, VMSTATE enmState, VMSTATE enmOldState, void *pvUser)
switch (enmState)
case VMSTATE_OFF:
case VMSTATE_TERMINATED:
const char *pszErrorId,
int rc2;
if (g_fReleaseLog)
szNowUct);
goto failure;
goto failure;
#ifdef VBOXBFE_WITH_USB
if (g_fUSB)
#ifdef __L4ENV__
goto failure;
if (pVM)
int rc;
AssertReleaseMsg(u32Version == VBOX_VERSION, ("u32Version=%#x VBOX_VERSION=%#x\n", u32Version, VBOX_VERSION));
return rc;
return rc;
return rc;
return rc;
return rc;
return VINF_SUCCESS;
int rc;
if (g_fPreAllocRam)
#ifdef VBOXSDL_ADVANCED_OPTIONS
if (g_fACPI)
if (g_pszFdaFile)
#ifdef DEBUG
if (g_fIOAPIC)
#ifdef __L4ENV__
if (g_pszHdaFile)
if (g_pszHdbFile)
if (g_pszCdromFile)
UPDATE_RC();
UPDATE_RC();
#if defined(RT_OS_LINUX)
UPDATE_RC();
UPDATE_RC();
return rc;
return VERR_BUFFER_OVERFLOW;
if (rc)
return rc2;
if (rc)
return rc2;
return VERR_NOT_IMPLEMENTED;
if (g_fAudio)
#ifdef RT_OS_WINDOWS
#ifdef VBOXBFE_WITH_USB
if (g_fUSB)
return rc;