VirtualBox

Changeset 35887 in vbox


Ignore:
Timestamp:
Feb 8, 2011 8:36:00 AM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
69899
Message:

Main/VBoxManage: Introduced facility handling for more fine grained status reporting of Guest Additions components.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VMMDev.h

    r34754 r35887  
    44
    55/*
    6  * Copyright (C) 2006-2007 Oracle Corporation
     6 * Copyright (C) 2006-2011 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    670670/**
    671671 * Guest status facility.
     672 * This needs to be kept in sync with AdditionsFacility of the Main API!
    672673 */
    673674typedef enum
     
    676677    VBoxGuestStatusFacility_VBoxGuestDriver = 20,
    677678    VBoxGuestStatusFacility_VBoxService     = 100,
    678     VBoxGuestStatusFacility_VBoxTray        = 101,
     679    VBoxGuestStatusFacility_VBoxTrayClient  = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */
    679680    VBoxGuestStatusFacility_All             = 999,
    680681    VBoxGuestStatusFacility_SizeHack        = 0x7fffffff
     
    682683AssertCompileSize(VBoxGuestStatusFacility, 4);
    683684
     685
    684686/**
    685687 * The current guest status of a facility.
     
    689691    VBoxGuestStatusCurrent_Disabled    = 0,
    690692    VBoxGuestStatusCurrent_Inactive    = 1,
     693    VBoxGuestStatusCurrent_Paused      = 2,
    691694    VBoxGuestStatusCurrent_PreInit     = 20,
    692695    VBoxGuestStatusCurrent_Init        = 30,
     
    694697    VBoxGuestStatusCurrent_Terminating = 100,
    695698    VBoxGuestStatusCurrent_Terminated  = 101,
     699    VBoxGuestStatusCurrent_Unknown     = 999,
    696700    VBoxGuestStatusCurrent_SizeHack    = 0x7fffffff
    697701} VBoxGuestStatusCurrent;
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.cpp

    r35863 r35887  
    3030int hlpReportStatus(VBoxGuestStatusCurrent statusCurrent)
    3131{
    32     int rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxTray,
     32    int rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxTrayClient,
    3333                                         statusCurrent,
    3434                                         0 /* Flags */);
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r35761 r35887  
    110110                        t.u8Hour, t.u8Minute, t.u8Second);
    111111}
    112 
    113112
    114113const char *stateToName(MachineState_T machineState, bool fShort)
     
    787786    }
    788787
    789     /* get the maximum amount of NICS */   
     788    /* get the maximum amount of NICS */
    790789    ULONG maxNICs = getMaxNics(virtualBox, machine);
    791    
     790
    792791    for (ULONG currentNIC = 0; currentNIC < maxNICs; currentNIC++)
    793792    {
     
    20052004        RTPrintf("Guest:\n\n");
    20062005
     2006    ULONG guestVal;
     2007    rc = machine->COMGETTER(MemoryBalloonSize)(&guestVal);
     2008    if (SUCCEEDED(rc))
     2009    {
     2010        if (details == VMINFO_MACHINEREADABLE)
     2011            RTPrintf("GuestMemoryBalloon=%d\n", guestVal);
     2012        else
     2013            RTPrintf("Configured memory balloon size:      %d MB\n", guestVal);
     2014    }
     2015
    20072016    if (console)
    20082017    {
     
    20432052                        RTPrintf("Additions version:                   %lS\n\n", guestString.raw());
    20442053                }
    2045             }
    2046         }
    2047     }
    2048 
    2049     ULONG guestVal;
    2050     rc = machine->COMGETTER(MemoryBalloonSize)(&guestVal);
    2051     if (SUCCEEDED(rc))
    2052     {
    2053         if (details == VMINFO_MACHINEREADABLE)
    2054             RTPrintf("GuestMemoryBalloon=%d\n", guestVal);
    2055         else
    2056             RTPrintf("Configured memory balloon size:      %d MB\n", guestVal);
    2057     }
     2054
     2055                if (details != VMINFO_MACHINEREADABLE)
     2056                    RTPrintf("\nGuest Components:\n\n");
     2057
     2058                /* Print information about important Guest Additions parts: */
     2059                /** @todo Add a makeFacilityStatusStr() to translate facility states into a human readable string! */
     2060                AdditionsFacilityStatus faStatus;
     2061                LONGLONG lLastUpdatedMS = 0;
     2062                char szLastUpdated[32];
     2063                rc = guest->GetFacilityStatus(AdditionsFacilityType_VBoxGuestDriver, &lLastUpdatedMS, &faStatus);
     2064                if (SUCCEEDED(rc))
     2065                {
     2066                    makeTimeStr(szLastUpdated, sizeof(szLastUpdated), lLastUpdatedMS);
     2067                    if (details == VMINFO_MACHINEREADABLE)
     2068                        RTPrintf("GuestAdditionsFacilityStatusGuestDriver=%u,%ld\n",
     2069                                 faStatus, lLastUpdatedMS);
     2070                    else
     2071                        RTPrintf("Guest driver:                        %u (last update: %s)\n",
     2072                                 faStatus, szLastUpdated);
     2073                }
     2074
     2075                rc = guest->GetFacilityStatus(AdditionsFacilityType_VBoxService, &lLastUpdatedMS, &faStatus);
     2076                if (SUCCEEDED(rc))
     2077                {
     2078                    makeTimeStr(szLastUpdated, sizeof(szLastUpdated), lLastUpdatedMS);
     2079                    if (details == VMINFO_MACHINEREADABLE)
     2080                        RTPrintf("GuestAdditionsFacilityStatusVBoxService=%u,%ld\n",
     2081                                 faStatus, lLastUpdatedMS);
     2082                    else
     2083                        RTPrintf("VBoxService:                         %u (last update: %s)\n",
     2084                                 faStatus, szLastUpdated);
     2085                }
     2086
     2087                rc = guest->GetFacilityStatus(AdditionsFacilityType_VBoxTrayClient, &lLastUpdatedMS, &faStatus);
     2088                if (SUCCEEDED(rc))
     2089                {
     2090                    makeTimeStr(szLastUpdated, sizeof(szLastUpdated), lLastUpdatedMS);
     2091                    if (details == VMINFO_MACHINEREADABLE)
     2092                        RTPrintf("GuestAdditionsFacilityStatusVBoxTrayClient=%u,%ld\n",
     2093                                 faStatus, lLastUpdatedMS);
     2094                    else
     2095                        RTPrintf("VBoxTray / VBoxClient:               %u (last update: %s)\n",
     2096                                 faStatus, szLastUpdated);
     2097                }
     2098            }
     2099        }
     2100    }
     2101
    20582102    if (details != VMINFO_MACHINEREADABLE)
    20592103        RTPrintf("\n");
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r35886 r35887  
    78797879
    78807880  <enum
     7881    name="AdditionsFacilityType"
     7882    uuid="bcf4f5e7-86d6-4b8c-99cd-449a79114fb4"
     7883    >
     7884    <desc>
     7885      Guest Additions facility IDs.
     7886    </desc>
     7887
     7888    <const name="None"                    value="0">
     7889      <desc>No/invalid facility.</desc>
     7890    </const>
     7891    <const name="VBoxGuestDriver"         value="20">
     7892      <desc>VBoxGuest base driver.</desc>
     7893    </const>
     7894    <const name="VBoxService"             value="100">
     7895      <desc>VBoxService.</desc>
     7896    </const>
     7897    <const name="VBoxTrayClient"          value="101">
     7898      <desc>VBoxTray (Windows) / VBoxClient (Non-Windows).</desc>
     7899    </const>
     7900    <const name="All"                     value="999">
     7901      <desc>All facilities selected.</desc>
     7902    </const>
     7903  </enum>
     7904
     7905  <enum
     7906    name="AdditionsFacilityStatus"
     7907    uuid="f49bf8c0-e40b-44dd-9db5-8f4196bfda94"
     7908    >
     7909    <desc>
     7910      Guest Additions facility states.
     7911    </desc>
     7912
     7913    <const name="Disabled"                value="0">
     7914      <desc>Facility is disabled.</desc>
     7915    </const>
     7916    <const name="Inactive"                value="1">
     7917      <desc>Facility is enabled but inactive.</desc>
     7918    </const>
     7919    <const name="Paused"                  value="2">
     7920      <desc>Facility has been paused.</desc>
     7921    </const>
     7922    <const name="PreInit"                 value="20">
     7923      <desc>Facility is preparing to initialize.</desc>
     7924    </const>
     7925    <const name="Init"                    value="30">
     7926      <desc>Facility is initializing.</desc>
     7927    </const>
     7928    <const name="Active"                  value="50">
     7929      <desc>Facility is up and running.</desc>
     7930    </const>
     7931    <const name="Terminating"             value="100">
     7932      <desc>Facility is shutting down.</desc>
     7933    </const>
     7934    <const name="Terminated"              value="101">
     7935      <desc>Facility successfully shut down.</desc>
     7936    </const>
     7937    <const name="Unknown"                 value="999">
     7938      <desc>Facility status is unknown.</desc>
     7939    </const>
     7940  </enum>
     7941
     7942  <enum
    78817943    name="AdditionsRunLevelType"
    78827944    uuid="a25417ee-a9dd-4f5b-b0dc-377860087754"
     
    80048066  <interface
    80058067    name="IGuest" extends="$unknown"
    8006     uuid="7ce7e4d8-cdaa-4d83-a0f4-510c8ee70aea"
     8068    uuid="09c2e2e0-f6f9-45ec-91a1-aaab3fad9f1f"
    80078069    wsmap="managed"
    80088070    >
     
    81118173      <param name="memSharedTotal" type="unsigned long" dir="out">
    81128174        <desc>Total amount of shared memory in the hypervisor</desc>
     8175      </param>
     8176    </method>
     8177
     8178    <method name="getFacilityStatus">
     8179      <desc>
     8180        Get the current status of a Guest Additions facility.
     8181      </desc>
     8182      <param name="facility" type="AdditionsFacilityType" dir="in">
     8183        <desc>Facility to check status for.</desc>
     8184      </param>
     8185      <param name="timestamp" type="long long" dir="out">
     8186        <desc>Timestamp (in ms) of last status update of this facility seen by the host.</desc>
     8187      </param>
     8188      <param name="status" type="AdditionsFacilityStatus" dir="return">
     8189        <desc>The current (latest) facility status.</desc>
    81138190      </param>
    81148191    </method>
  • trunk/src/VBox/Main/include/GuestImpl.h

    r35638 r35887  
    44
    55/*
    6  * Copyright (C) 2006-2010 Oracle Corporation
     6 * Copyright (C) 2006-2011 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2020#include "VirtualBoxBase.h"
    2121#include <iprt/list.h>
     22#include <iprt/time.h>
    2223#include <VBox/ostypes.h>
    2324
     
    8889
    8990    // IGuest methods
     91    STDMETHOD(GetFacilityStatus)(AdditionsFacilityType aType, LONGLONG *aTimestamp, AdditionsFacilityStatus *aStatus);
    9092    STDMETHOD(GetAdditionsStatus)(AdditionsRunLevelType_T aLevel, BOOL *aActive);
    9193    STDMETHOD(SetCredentials)(IN_BSTR aUserName, IN_BSTR aPassword,
     
    129131
    130132private:
    131 
    132     // Internal tasks
     133#ifdef VBOX_WITH_GUEST_CONTROL
     134    // Internal tasks.
    133135    struct TaskGuest; /* Worker thread helper. */
    134 #ifdef VBOX_WITH_GUEST_CONTROL
    135136    HRESULT taskCopyFile(TaskGuest *aTask);
    136137    HRESULT taskUpdateGuestAdditions(TaskGuest *aTask);
    137138
     139    // Internal callback context handling.
    138140    struct CallbackContext
    139141    {
     
    183185# endif
    184186
     187    struct FacilityData
     188    {
     189        RTTIMESPEC                  tsLastUpdated;
     190        AdditionsFacilityStatus_T   curStatus;
     191    };
     192    typedef std::map< AdditionsFacilityType_T, FacilityData > FacilityMap;
     193    typedef std::map< AdditionsFacilityType_T, FacilityData >::iterator FacilityMapIter;
     194
    185195    struct Data
    186196    {
     
    190200
    191201        Bstr                    mOSTypeId;
     202
     203        FacilityMap             mFacilityMap;
    192204        AdditionsRunLevelType_T mAdditionsRunLevel;
    193205        Bstr                    mAdditionsVersion;
  • trunk/src/VBox/Main/src-client/GuestImpl.cpp

    r35638 r35887  
    55
    66/*
    7  * Copyright (C) 2006-2010 Oracle Corporation
     7 * Copyright (C) 2006-2011 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    438438}
    439439
     440/**
     441 * Returns the status of a specified Guest Additions facility.
     442 *
     443 * @return  aStatus         Current status of specified facility.
     444 * @param   aType           Facility to get the status from.
     445 * @param   aTimestamp      Timestamp of last facility status update in ms (optional).
     446 */
     447STDMETHODIMP Guest::GetFacilityStatus(AdditionsFacilityType aType, LONGLONG *aTimestamp, AdditionsFacilityStatus *aStatus)
     448{
     449    AutoCaller autoCaller(this);
     450    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     451
     452    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     453
     454    CheckComArgNotNull(aStatus);
     455    /* Not checking for aTimestamp is intentional; it's optional. */
     456
     457    FacilityMapIter it = mData.mFacilityMap.find(aType);
     458    if (it != mData.mFacilityMap.end())
     459    {
     460        *aStatus = it->second.curStatus;
     461        if (aTimestamp)
     462            *aTimestamp = RTTimeSpecGetMilli(&it->second.tsLastUpdated);
     463    }
     464    else
     465    {
     466        /*
     467         * Do not fail here -- could be that the facility never has been brought up (yet) but
     468         * the host wants to have its status anyway. So just tell we don't know at this point.
     469         */
     470        *aStatus = AdditionsFacilityStatus_Unknown;
     471        if (aTimestamp)
     472            *aTimestamp = RTTimeMilliTS();
     473    }
     474    return S_OK;
     475}
     476
    440477STDMETHODIMP Guest::GetAdditionsStatus(AdditionsRunLevelType_T aLevel, BOOL *aActive)
    441478{
     
    600637    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    601638
     639    /*
     640     * Set overall additions run level.
     641     */
     642
     643    /* First check for disabled status. */
    602644    uint32_t uCurFacility = Facility + (Status == VBoxGuestStatusCurrent_Active ? 0 : -1);
    603 
    604     /* First check for disabled status. */
    605645    if (   Facility < VBoxGuestStatusFacility_VBoxGuestDriver
    606646        || (   Facility == VBoxGuestStatusFacility_All
     
    613653        mData.mAdditionsRunLevel = AdditionsRunLevelType_None;
    614654    }
    615     else if (uCurFacility >= VBoxGuestStatusFacility_VBoxTray)
     655    else if (uCurFacility >= VBoxGuestStatusFacility_VBoxTrayClient)
    616656    {
    617657        mData.mAdditionsRunLevel = AdditionsRunLevelType_Desktop;
     
    627667    else /* Should never happen! */
    628668        AssertMsgFailed(("Invalid facility status/run level detected! uCurFacility=%ld\n", uCurFacility));
     669
     670    /*
     671     * Set a specific facility status.
     672     */
     673    if (Facility)
     674    {
     675        Assert(Facility < UINT32_MAX);
     676        FacilityData *pData = &mData.mFacilityMap[(AdditionsFacilityType_T)Facility];
     677        AssertPtr(pData);
     678
     679        RTTimeNow(&pData->tsLastUpdated);
     680        pData->curStatus = (AdditionsFacilityStatus_T)Status;
     681
     682        LogFlowFunc(("Setting guest facility %u = %u (%u)\n",
     683                     Facility, pData->curStatus, pData->tsLastUpdated));
     684    }
    629685}
    630686
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette