summaryrefslogtreecommitdiff
path: root/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp')
-rw-r--r--src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp57
1 files changed, 47 insertions, 10 deletions
diff --git a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
index 1eeef5b5..58c5fd3b 100644
--- a/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
+++ b/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
@@ -6,7 +6,7 @@
*/
/*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * Copyright (C) 2006-2013 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -21,8 +21,10 @@
#include "AutoCaller.h"
#include "Logging.h"
#include "netif.h"
-#include "Performance.h"
-#include "PerformanceImpl.h"
+#ifdef VBOX_WITH_RESOURCE_USAGE_API
+# include "Performance.h"
+# include "PerformanceImpl.h"
+#endif
#include <iprt/cpp/utils.h>
@@ -69,7 +71,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG
aInterfaceName.raw(), aGuid.toString().c_str()));
ComAssertRet(!aInterfaceName.isEmpty(), E_INVALIDARG);
- ComAssertRet(!aGuid.isEmpty(), E_INVALIDARG);
+ ComAssertRet(aGuid.isValid(), E_INVALIDARG);
/* Enclose the state transition NotReady->InInit->Ready */
AutoInitSpan autoInitSpan(this);
@@ -77,6 +79,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG
unconst(mInterfaceName) = aInterfaceName;
unconst(mNetworkName) = composeNetworkName(aShortName);
+ unconst(mShortName) = aShortName;
unconst(mGuid) = aGuid;
mIfType = ifType;
@@ -86,22 +89,36 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, Bstr aShortName, Guid aG
return S_OK;
}
+#ifdef VBOX_WITH_RESOURCE_USAGE_API
+
void HostNetworkInterface::registerMetrics(PerformanceCollector *aCollector, ComPtr<IUnknown> objptr)
{
LogFlowThisFunc(("mShortName={%ls}, mInterfaceName={%ls}, mGuid={%s}, mSpeedMbits=%u\n",
mShortName.raw(), mInterfaceName.raw(), mGuid.toString().c_str(), m.speedMbits));
pm::CollectorHAL *hal = aCollector->getHAL();
/* Create sub metrics */
- Utf8StrFmt strName("Net/%ls/Load", mShortName.raw());
- pm::SubMetric *networkLoadRx = new pm::SubMetric(strName + "/Rx",
+ Utf8StrFmt strName("Net/%ls", mShortName.raw());
+ pm::SubMetric *networkLoadRx = new pm::SubMetric(strName + "/Load/Rx",
"Percentage of network interface receive bandwidth used.");
- pm::SubMetric *networkLoadTx = new pm::SubMetric(strName + "/Tx",
+ pm::SubMetric *networkLoadTx = new pm::SubMetric(strName + "/Load/Tx",
"Percentage of network interface transmit bandwidth used.");
+ pm::SubMetric *networkLinkSpeed = new pm::SubMetric(strName + "/LinkSpeed",
+ "Physical link speed.");
/* Create and register base metrics */
- pm::BaseMetric *networkLoad = new pm::HostNetworkLoadRaw(hal, objptr, strName, Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLoadRx, networkLoadTx);
+ pm::BaseMetric *networkSpeed = new pm::HostNetworkSpeed(hal, objptr, strName + "/LinkSpeed", Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLinkSpeed);
+ aCollector->registerBaseMetric(networkSpeed);
+ pm::BaseMetric *networkLoad = new pm::HostNetworkLoadRaw(hal, objptr, strName + "/Load", Utf8Str(mShortName), Utf8Str(mInterfaceName), m.speedMbits, networkLoadRx, networkLoadTx);
aCollector->registerBaseMetric(networkLoad);
+ aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed, 0));
+ aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed,
+ new pm::AggregateAvg()));
+ aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed,
+ new pm::AggregateMin()));
+ aCollector->registerMetric(new pm::Metric(networkSpeed, networkLinkSpeed,
+ new pm::AggregateMax()));
+
aCollector->registerMetric(new pm::Metric(networkLoad, networkLoadRx, 0));
aCollector->registerMetric(new pm::Metric(networkLoad, networkLoadRx,
new pm::AggregateAvg()));
@@ -123,11 +140,13 @@ void HostNetworkInterface::unregisterMetrics(PerformanceCollector *aCollector, C
{
LogFlowThisFunc(("mShortName={%ls}, mInterfaceName={%ls}, mGuid={%s}\n",
mShortName.raw(), mInterfaceName.raw(), mGuid.toString().c_str()));
- Utf8StrFmt name("Net/%ls/Load", mShortName.raw());
+ Utf8StrFmt name("Net/%ls", mShortName.raw());
aCollector->unregisterMetricsFor(objptr, name + "/*");
aCollector->unregisterBaseMetricsFor(objptr, name);
}
+#endif /* VBOX_WITH_RESOURCE_USAGE_API */
+
#ifdef VBOX_WITH_HOSTNETIF_API
HRESULT HostNetworkInterface::updateConfig()
@@ -172,7 +191,7 @@ HRESULT HostNetworkInterface::init(Bstr aInterfaceName, HostNetworkInterfaceType
// aInterfaceName.raw(), aGuid.toString().raw()));
// ComAssertRet(aInterfaceName, E_INVALIDARG);
-// ComAssertRet(!aGuid.isEmpty(), E_INVALIDARG);
+// ComAssertRet(aGuid.isValid(), E_INVALIDARG);
ComAssertRet(pIf, E_INVALIDARG);
/* Enclose the state transition NotReady->InInit->Ready */
@@ -237,6 +256,24 @@ STDMETHODIMP HostNetworkInterface::COMGETTER(Name)(BSTR *aInterfaceName)
}
/**
+ * Returns the short name of the host network interface.
+ *
+ * @returns COM status code
+ * @param aShortName address of result pointer
+ */
+STDMETHODIMP HostNetworkInterface::COMGETTER(ShortName)(BSTR *aShortName)
+{
+ CheckComArgOutPointerValid(aShortName);
+
+ AutoCaller autoCaller(this);
+ if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+ mShortName.cloneTo(aShortName);
+
+ return S_OK;
+}
+
+/**
* Returns the GUID of the host network interface.
*
* @returns COM status code