Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp	(revision 17308)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp	(revision 17309)
@@ -303,6 +303,8 @@
                 networkInterface->COMGETTER(Id)(interfaceGuid.asOutParam());
                 RTPrintf("GUID:            %lS\n", Bstr(interfaceGuid.toString()).raw());
+                ComPtr<IHostNetworkInterfaceIpConfig> ipConfig;
+                networkInterface->COMGETTER(IpConfig)(ipConfig.asOutParam());
                 ULONG IPAddress;
-                networkInterface->COMGETTER(IPAddress)(&IPAddress);
+                ipConfig->COMGETTER(IPAddress)(&IPAddress);
                 RTPrintf("IPAddress:       %d.%d.%d.%d\n",
                         ((uint8_t*)&IPAddress)[0],
@@ -311,5 +313,5 @@
                         ((uint8_t*)&IPAddress)[3]);
                 ULONG NetworkMask;
-                networkInterface->COMGETTER(NetworkMask)(&NetworkMask);
+                ipConfig->COMGETTER(NetworkMask)(&NetworkMask);
                 RTPrintf("NetworkMask:     %d.%d.%d.%d\n",
                         ((uint8_t*)&NetworkMask)[0],
@@ -318,8 +320,8 @@
                         ((uint8_t*)&NetworkMask)[3]);
                 Bstr IPV6Address;
-                networkInterface->COMGETTER(IPV6Address)(IPV6Address.asOutParam());
+                ipConfig->COMGETTER(IPV6Address)(IPV6Address.asOutParam());
                 RTPrintf("IPV6Address:     %lS\n", IPV6Address.raw());
                 Bstr IPV6NetworkMask;
-                networkInterface->COMGETTER(IPV6NetworkMask)(IPV6NetworkMask.asOutParam());
+                ipConfig->COMGETTER(IPV6NetworkMask)(IPV6NetworkMask.asOutParam());
                 RTPrintf("IPV6NetworkMask: %lS\n", IPV6NetworkMask.raw());
                 Bstr HardwareAddress;
Index: /trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp	(revision 17308)
+++ /trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp	(revision 17309)
@@ -72,4 +72,16 @@
 
     return S_OK;
+}
+
+void HostNetworkInterface::uninit()
+{
+    LogFlowThisFunc (("\n"));
+
+    /* Enclose the state transition Ready->InUninit->NotReady */
+    AutoUninitSpan autoUninitSpan (this);
+    if (autoUninitSpan.uninitDone())
+        return;
+
+    m.ipConfig.setNull();
 }
 
@@ -129,8 +141,10 @@
     mIfType = ifType;
 
-    m.IPAddress = pIf->IPAddress.u;
-    m.networkMask = pIf->IPNetMask.u;
-    m.IPV6Address = composeIPv6Address(&pIf->IPv6Address);
-    m.IPV6NetworkMask = composeIPv6Address(&pIf->IPv6NetMask);
+    m.ipConfig.createObject();
+
+    HRESULT hr = m.ipConfig->init (pIf);
+    if(FAILED(hr))
+        return hr;
+
     m.hardwareAddress = composeHardwareAddress(&pIf->MACAddress);
 #ifdef RT_OS_WINDOWS
@@ -188,73 +202,13 @@
 }
 
-
-/**
- * Returns the IP address of the host network interface.
- *
- * @returns COM status code
- * @param   aIPAddress address of result pointer
- */
-STDMETHODIMP HostNetworkInterface::COMGETTER(IPAddress) (ULONG *aIPAddress)
-{
-    CheckComArgOutPointerValid(aIPAddress);
-
-    AutoCaller autoCaller (this);
-    CheckComRCReturnRC (autoCaller.rc());
-
-    *aIPAddress = m.IPAddress;
-
-    return S_OK;
-}
-
-/**
- * Returns the netwok mask of the host network interface.
- *
- * @returns COM status code
- * @param   aNetworkMask address of result pointer
- */
-STDMETHODIMP HostNetworkInterface::COMGETTER(NetworkMask) (ULONG *aNetworkMask)
-{
-    CheckComArgOutPointerValid(aNetworkMask);
-
-    AutoCaller autoCaller (this);
-    CheckComRCReturnRC (autoCaller.rc());
-
-    *aNetworkMask = m.networkMask;
-
-    return S_OK;
-}
-
-/**
- * Returns the IP V6 address of the host network interface.
- *
- * @returns COM status code
- * @param   aIPV6Address address of result pointer
- */
-STDMETHODIMP HostNetworkInterface::COMGETTER(IPV6Address) (BSTR *aIPV6Address)
-{
-    CheckComArgOutPointerValid(aIPV6Address);
-
-    AutoCaller autoCaller (this);
-    CheckComRCReturnRC (autoCaller.rc());
-
-    m.IPV6Address.cloneTo (aIPV6Address);
-
-    return S_OK;
-}
-
-/**
- * Returns the IP V6 network mask of the host network interface.
- *
- * @returns COM status code
- * @param   aIPV6Mask address of result pointer
- */
-STDMETHODIMP HostNetworkInterface::COMGETTER(IPV6NetworkMask) (BSTR *aIPV6Mask)
-{
-    CheckComArgOutPointerValid(aIPV6Mask);
-
-    AutoCaller autoCaller (this);
-    CheckComRCReturnRC (autoCaller.rc());
-
-    m.IPV6NetworkMask.cloneTo (aIPV6Mask);
+STDMETHODIMP HostNetworkInterface::COMGETTER(IpConfig) (IHostNetworkInterfaceIpConfig **aIpConfig)
+{
+    if (!aIpConfig)
+        return E_POINTER;
+
+    AutoCaller autoCaller (this);
+    CheckComRCReturnRC (autoCaller.rc());
+
+    m.ipConfig.queryInterfaceTo (aIpConfig);
 
     return S_OK;
Index: /trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Main/Makefile.kmk	(revision 17308)
+++ /trunk/src/VBox/Main/Makefile.kmk	(revision 17309)
@@ -281,4 +281,5 @@
 	HostFloppyDriveImpl.cpp \
 	HostNetworkInterfaceImpl.cpp \
+	HostNetworkInterfaceIpConfigImpl.cpp \
 	GuestOSTypeImpl.cpp \
 	NetworkAdapterImpl.cpp \
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 17308)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 17309)
@@ -6448,6 +6448,39 @@
 
   <interface
+     name="IHostNetworkInterfaceIpConfig" extends="$unknown"
+     uuid="38f31587-1ad2-4593-ab0c-d16f6e36c0ee"
+     wsmap="managed"
+     >
+    <desc>
+      Reprents IP settings for one of host's network interfaces. IP V6 address and network
+      mask are strings of 32 hexdecimal digits grouped by four. Groups are
+      separated by colons.
+      For example, fe80:0000:0000:0000:021e:c2ff:fed2:b030.
+    </desc>
+
+    <attribute name="IPAddress" type="unsigned long" readonly="yes">
+      <desc>Returns the IP V4 address of the interface.</desc>
+    </attribute>
+
+    <attribute name="networkMask" type="unsigned long" readonly="yes">
+      <desc>Returns the network mask of the interface.</desc>
+    </attribute>
+
+    <attribute name="defaultGateway" type="unsigned long" readonly="yes">
+      <desc>Returns the network mask of the interface.</desc>
+    </attribute>
+
+    <attribute name="IPV6Address" type="wstring" readonly="yes">
+      <desc>Returns the IP V6 address of the interface.</desc>
+    </attribute>
+
+    <attribute name="IPV6NetworkMask" type="wstring" readonly="yes">
+      <desc>Returns the IP V6 network mask of the interface.</desc>
+    </attribute>
+  </interface>
+
+  <interface
      name="IHostNetworkInterface" extends="$unknown"
-     uuid="c312bf73-b353-4add-9db7-481b891ec08c"
+     uuid="3fd5d8d9-c503-4c1a-b88c-e78fb78f8559"
      wsmap="managed"
      >
@@ -6466,18 +6499,6 @@
     </attribute>
 
-    <attribute name="IPAddress" type="unsigned long" readonly="yes">
-      <desc>Returns the IP V4 address of the interface.</desc>
-    </attribute>
-
-    <attribute name="networkMask" type="unsigned long" readonly="yes">
-      <desc>Returns the network mask of the interface.</desc>
-    </attribute>
-
-    <attribute name="IPV6Address" type="wstring" readonly="yes">
-      <desc>Returns the IP V6 address of the interface.</desc>
-    </attribute>
-
-    <attribute name="IPV6NetworkMask" type="wstring" readonly="yes">
-      <desc>Returns the IP V6 network mask of the interface.</desc>
+    <attribute name="ipConfig" type="IHostNetworkInterfaceIpConfig" readonly="yes">
+      <desc>Returns the adapter ip config information </desc>
     </attribute>
 
Index: /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h	(revision 17308)
+++ /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h	(revision 17309)
@@ -27,4 +27,6 @@
 #include "VirtualBoxBase.h"
 #include "Collection.h"
+#include "HostNetworkInterfaceIpConfigImpl.h"
+
 #ifdef VBOX_WITH_HOSTNETIF_API
 /* class HostNetworkInterface; */
@@ -64,12 +66,10 @@
     HRESULT init (Bstr aInterfaceName, HostNetworkInterfaceType_T ifType, struct NETIFINFO *pIfs);
 #endif
+    void uninit();
 
     // IHostNetworkInterface properties
     STDMETHOD(COMGETTER(Name)) (BSTR *aInterfaceName);
     STDMETHOD(COMGETTER(Id)) (OUT_GUID aGuid);
-    STDMETHOD(COMGETTER(IPAddress)) (ULONG *aIPAddress);
-    STDMETHOD(COMGETTER(NetworkMask)) (ULONG *aNetworkMask);
-    STDMETHOD(COMGETTER(IPV6Address)) (BSTR *aIPV6Address);
-    STDMETHOD(COMGETTER(IPV6NetworkMask)) (BSTR *aIPV6Mask);
+    STDMETHOD(COMGETTER(IpConfig)) (IHostNetworkInterfaceIpConfig **aIpConfig);
     STDMETHOD(COMGETTER(HardwareAddress)) (BSTR *aHardwareAddress);
     STDMETHOD(COMGETTER(MediumType)) (HostNetworkInterfaceMediumType_T *aType);
@@ -87,12 +87,8 @@
     struct Data
     {
-        Data() : IPAddress (0), networkMask (0),
-            mediumType (HostNetworkInterfaceMediumType_Unknown),
+        Data() : mediumType (HostNetworkInterfaceMediumType_Unknown),
             status(HostNetworkInterfaceStatus_Down){}
 
-        ULONG IPAddress;
-        ULONG networkMask;
-        Bstr IPV6Address;
-        Bstr IPV6NetworkMask;
+        ComObjPtr <HostNetworkInterfaceIpConfig> ipConfig;
         Bstr hardwareAddress;
         HostNetworkInterfaceMediumType_T mediumType;
Index: /trunk/src/VBox/Main/include/netif.h
===================================================================
--- /trunk/src/VBox/Main/include/netif.h	(revision 17308)
+++ /trunk/src/VBox/Main/include/netif.h	(revision 17309)
@@ -59,4 +59,5 @@
     RTNETADDRIPV4  IPAddress;
     RTNETADDRIPV4  IPNetMask;
+    RTNETADDRIPV4  IPDefaultGateway;
     RTNETADDRIPV6  IPv6Address;
     RTNETADDRIPV6  IPv6NetMask;
