Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 68025)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 68026)
@@ -8927,4 +8927,8 @@
     </attribute>
 
+    <attribute name="wireless" type="boolean" readonly="yes">
+      <desc>Specifies whether the interface is wireless.</desc>
+    </attribute>
+
     <method name="enableStaticIPConfig">
       <desc>sets and enables the static IP V4 configuration for the given interface.</desc>
Index: /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h	(revision 68025)
+++ /trunk/src/VBox/Main/include/HostNetworkInterfaceImpl.h	(revision 68026)
@@ -70,4 +70,5 @@
     HRESULT getInterfaceType(HostNetworkInterfaceType_T *aType);
     HRESULT getNetworkName(com::Utf8Str &aNetworkName);
+    HRESULT getWireless(BOOL *aWireless);
 
     // Wrapped IHostNetworkInterface methods
@@ -93,5 +94,5 @@
         Data() : IPAddress(0), networkMask(0), dhcpEnabled(FALSE),
             mediumType(HostNetworkInterfaceMediumType_Unknown),
-            status(HostNetworkInterfaceStatus_Down){}
+            status(HostNetworkInterfaceStatus_Down), wireless(FALSE){}
 
         ULONG IPAddress;
@@ -108,4 +109,5 @@
         HostNetworkInterfaceStatus_T status;
         ULONG speedMbits;
+        BOOL wireless;
     } m;
 
Index: /trunk/src/VBox/Main/include/netif.h
===================================================================
--- /trunk/src/VBox/Main/include/netif.h	(revision 68025)
+++ /trunk/src/VBox/Main/include/netif.h	(revision 68026)
@@ -68,6 +68,7 @@
     RTNETADDRIPV6  IPv6Address;
     RTNETADDRIPV6  IPv6NetMask;
-    BOOL           bDhcpEnabled;
-    BOOL           bIsDefault;
+    BOOL           fDhcpEnabled;
+    BOOL           fIsDefault;
+    BOOL           fWireless;
     RTMAC          MACAddress;
     NETIFTYPE      enmMediumType;
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 68026)
@@ -104,5 +104,4 @@
 #  include <linux/types.h>
 #  include <linux/if.h>
-#  include <linux/wireless.h>
 # elif defined(RT_OS_FREEBSD)
 #  include <unistd.h>
@@ -5185,4 +5184,15 @@
                 const char *pszBridgedIfName = BridgedIfNameUtf8.c_str();
 
+                ComPtr<IHostNetworkInterface> hostInterface;
+                hrc = host->FindHostNetworkInterfaceByName(BridgedIfName.raw(),
+                                                           hostInterface.asOutParam());
+                if (!SUCCEEDED(hrc))
+                {
+                    AssertLogRelMsgFailed(("NetworkAttachmentType_Bridged: FindByName failed, rc=%Rhrc (0x%x)", hrc, hrc));
+                    return VMSetError(VMR3GetVM(mpUVM), VERR_INTERNAL_ERROR, RT_SRC_POS,
+                                      N_("Nonexistent host networking interface, name '%ls'"),
+                                      BridgedIfName.raw());
+                }
+
 # if defined(RT_OS_DARWIN)
                 /* The name is on the form 'ifX: long name', chop it off at the colon. */
@@ -5230,15 +5240,4 @@
 
 # elif defined(RT_OS_WINDOWS)
-                ComPtr<IHostNetworkInterface> hostInterface;
-                hrc = host->FindHostNetworkInterfaceByName(BridgedIfName.raw(),
-                                                           hostInterface.asOutParam());
-                if (!SUCCEEDED(hrc))
-                {
-                    AssertLogRelMsgFailed(("NetworkAttachmentType_Bridged: FindByName failed, rc=%Rhrc (0x%x)", hrc, hrc));
-                    return VMSetError(VMR3GetVM(mpUVM), VERR_INTERNAL_ERROR, RT_SRC_POS,
-                                      N_("Nonexistent host networking interface, name '%ls'"),
-                                      BridgedIfName.raw());
-                }
-
                 HostNetworkInterfaceType_T eIfType;
                 hrc = hostInterface->COMGETTER(InterfaceType)(&eIfType);
@@ -5423,131 +5422,16 @@
                 trunkType = Bstr(TRUNKTYPE_NETFLT);
 
-# if defined(RT_OS_DARWIN)
-                /** @todo Come up with a better deal here. Problem is that IHostNetworkInterface is completely useless here. */
-                if (    strstr(pszBridgedIfName, "Wireless")
-                    ||  strstr(pszBridgedIfName, "AirPort" ))
+                BOOL fSharedMacOnWire = false;
+                hrc = hostInterface->COMGETTER(Wireless)(&fSharedMacOnWire);
+                if (FAILED(hrc))
+                {
+                    LogRel(("NetworkAttachmentType_Bridged: COMGETTER(Wireless) failed, hrc (0x%x)\n", hrc));
+                    H();
+                }
+                else if (fSharedMacOnWire)
+                {
                     InsertConfigInteger(pCfg, "SharedMacOnWire", true);
-# elif defined(RT_OS_LINUX)
-                int iSock = socket(AF_INET, SOCK_DGRAM, 0);
-                if (iSock >= 0)
-                {
-                    struct iwreq WRq;
-
-                    RT_ZERO(WRq);
-                    strncpy(WRq.ifr_name, pszBridgedIfName, IFNAMSIZ);
-                    bool fSharedMacOnWire = ioctl(iSock, SIOCGIWNAME, &WRq) >= 0;
-                    close(iSock);
-                    if (fSharedMacOnWire)
-                    {
-                        InsertConfigInteger(pCfg, "SharedMacOnWire", true);
-                        Log(("Set SharedMacOnWire\n"));
-                    }
-                    else
-                        Log(("Failed to get wireless name\n"));
-                }
-                else
-                    Log(("Failed to open wireless socket\n"));
-# elif defined(RT_OS_FREEBSD)
-                int iSock = socket(AF_INET, SOCK_DGRAM, 0);
-                if (iSock >= 0)
-                {
-                    struct ieee80211req WReq;
-                    uint8_t abData[32];
-
-                    RT_ZERO(WReq);
-                    strncpy(WReq.i_name, pszBridgedIfName, sizeof(WReq.i_name));
-                    WReq.i_type = IEEE80211_IOC_SSID;
-                    WReq.i_val = -1;
-                    WReq.i_data = abData;
-                    WReq.i_len = sizeof(abData);
-
-                    bool fSharedMacOnWire = ioctl(iSock, SIOCG80211, &WReq) >= 0;
-                    close(iSock);
-                    if (fSharedMacOnWire)
-                    {
-                        InsertConfigInteger(pCfg, "SharedMacOnWire", true);
-                        Log(("Set SharedMacOnWire\n"));
-                    }
-                    else
-                        Log(("Failed to get wireless name\n"));
-                }
-                else
-                    Log(("Failed to open wireless socket\n"));
-# elif defined(RT_OS_WINDOWS)
-#  define DEVNAME_PREFIX L"\\\\.\\"
-                /* we are getting the medium type via IOCTL_NDIS_QUERY_GLOBAL_STATS Io Control
-                 * there is a pretty long way till there though since we need to obtain the symbolic link name
-                 * for the adapter device we are going to query given the device Guid */
-
-
-                /* prepend the "\\\\.\\" to the bind name to obtain the link name */
-
-                wchar_t FileName[MAX_PATH];
-                wcscpy(FileName, DEVNAME_PREFIX);
-                wcscpy((wchar_t*)(((char*)FileName) + sizeof(DEVNAME_PREFIX) - sizeof(FileName[0])), pswzBindName);
-
-                /* open the device */
-                HANDLE hDevice = CreateFile(FileName,
-                                            GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
-                                            NULL,
-                                            OPEN_EXISTING,
-                                            FILE_ATTRIBUTE_NORMAL,
-                                            NULL);
-
-                if (hDevice != INVALID_HANDLE_VALUE)
-                {
-                    bool fSharedMacOnWire = false;
-
-                    /* now issue the OID_GEN_PHYSICAL_MEDIUM query */
-                    DWORD Oid = OID_GEN_PHYSICAL_MEDIUM;
-                    NDIS_PHYSICAL_MEDIUM PhMedium;
-                    DWORD cbResult;
-                    if (DeviceIoControl(hDevice,
-                                        IOCTL_NDIS_QUERY_GLOBAL_STATS,
-                                        &Oid,
-                                        sizeof(Oid),
-                                        &PhMedium,
-                                        sizeof(PhMedium),
-                                        &cbResult,
-                                        NULL))
-                    {
-                        /* that was simple, now examine PhMedium */
-                        if (   PhMedium == NdisPhysicalMediumWirelessWan
-                            || PhMedium == NdisPhysicalMediumWirelessLan
-                            || PhMedium == NdisPhysicalMediumNative802_11
-                            || PhMedium == NdisPhysicalMediumBluetooth)
-                            fSharedMacOnWire = true;
-                    }
-                    else
-                    {
-                        int winEr = GetLastError();
-                        LogRel(("Console::configNetwork: DeviceIoControl failed, err (0x%x), ignoring\n", winEr));
-                        Assert(winEr == ERROR_INVALID_PARAMETER || winEr == ERROR_NOT_SUPPORTED || winEr == ERROR_BAD_COMMAND);
-                    }
-                    CloseHandle(hDevice);
-
-                    if (fSharedMacOnWire)
-                    {
-                        Log(("this is a wireless adapter"));
-                        InsertConfigInteger(pCfg, "SharedMacOnWire", true);
-                        Log(("Set SharedMacOnWire\n"));
-                    }
-                    else
-                        Log(("this is NOT a wireless adapter"));
-                }
-                else
-                {
-                    int winEr = GetLastError();
-                    AssertLogRelMsgFailed(("Console::configNetwork: CreateFile failed, err (0x%x), ignoring\n", winEr));
-                }
-
-                CoTaskMemFree(pswzBindName);
-
-                pAdaptorComponent.setNull();
-                /* release the pNc finally */
-                VBoxNetCfgWinReleaseINetCfg(pNc, FALSE /*fHasWriteLock*/);
-# else
-                /** @todo PORTME: wireless detection */
-# endif
+                    Log(("Set SharedMacOnWire\n"));
+                }
 
 # if defined(RT_OS_SOLARIS)
Index: /trunk/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-server/HostNetworkInterfaceImpl.cpp	(revision 68026)
@@ -167,5 +167,5 @@
         m.realIPAddress = m.IPAddress = info.IPAddress.u;
         m.realNetworkMask = m.networkMask = info.IPNetMask.u;
-        m.dhcpEnabled = info.bDhcpEnabled;
+        m.dhcpEnabled = info.fDhcpEnabled;
         if (info.IPv6Address.s.Lo || info.IPv6Address.s.Hi)
             m.realIPV6Address = m.IPV6Address = Bstr(Utf8StrFmt("%RTnaipv6", &info.IPv6Address));
@@ -183,4 +183,5 @@
 #endif /* !RT_OS_WINDOWS */
         m.speedMbits = info.uSpeedMbits;
+        m.wireless = info.fWireless;
         return S_OK;
     }
@@ -236,5 +237,5 @@
     RTNetMaskToPrefixIPv6(&pIf->IPv6NetMask, &iPrefixIPv6);
     m.realIPV6PrefixLength = m.IPV6NetworkMaskPrefixLength = iPrefixIPv6;
-    m.dhcpEnabled = pIf->bDhcpEnabled;
+    m.dhcpEnabled = pIf->fDhcpEnabled;
     m.hardwareAddress = Bstr(Utf8StrFmt("%RTmac", &pIf->MACAddress));
 #ifdef RT_OS_WINDOWS
@@ -246,4 +247,5 @@
 #endif /* !RT_OS_WINDOWS */
     m.speedMbits = pIf->uSpeedMbits;
+    m.wireless = pIf->fWireless;
 
     /* Confirm a successful initialization */
@@ -444,4 +446,11 @@
 {
     aNetworkName = mNetworkName;
+
+    return S_OK;
+}
+
+HRESULT HostNetworkInterface::getWireless(BOOL *aWireless)
+{
+    *aWireless = m.wireless;
 
     return S_OK;
Index: /trunk/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-server/darwin/NetIf-darwin.cpp	(revision 68026)
@@ -361,4 +361,5 @@
             memcpy(pNew->szName, pNIC->szName, cbNameLen);
             pNew->Uuid = pNIC->Uuid;
+            pNew->fWireless = pNIC->fWireless;
         }
         else
Index: /trunk/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp	(revision 68026)
@@ -176,4 +176,27 @@
 
 
+static bool isWireless(const char *pszName)
+{
+    bool fWireless = false;
+    int iSock = socket(AF_INET, SOCK_DGRAM, 0);
+    if (iSock >= 0)
+    {
+        struct ieee80211req WReq;
+        uint8_t abData[32];
+
+        RT_ZERO(WReq);
+        strncpy(WReq.i_name, pszName, sizeof(WReq.i_name));
+        WReq.i_type = IEEE80211_IOC_SSID;
+        WReq.i_val = -1;
+        WReq.i_data = abData;
+        WReq.i_len = sizeof(abData);
+
+        fWireless = ioctl(iSock, SIOCG80211, &WReq) >= 0;
+        close(iSock);
+    }
+
+    return fWireless;
+}    
+
 int NetIfList(std::list <ComObjPtr<HostNetworkInterface> > &list)
 {
@@ -289,4 +312,6 @@
                 enmType = HostNetworkInterfaceType_HostOnly;
 
+            pNew->wireless = isWireless(pNew->szName);
+
             ComObjPtr<HostNetworkInterface> IfObj;
             IfObj.createObject();
Index: /trunk/src/VBox/Main/src-server/linux/NetIf-linux.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/linux/NetIf-linux.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-server/linux/NetIf-linux.cpp	(revision 68026)
@@ -26,5 +26,6 @@
 #include <list>
 #include <sys/ioctl.h>
-#include <net/if.h>
+#include <sys/socket.h>
+#include <linux/wireless.h>
 #include <net/if_arp.h>
 #include <net/route.h>
@@ -164,4 +165,9 @@
         if (ioctl(iSocket, SIOCGIFFLAGS, &Req) >= 0)
             pInfo->enmStatus = Req.ifr_flags & IFF_UP ? NETIF_S_UP : NETIF_S_DOWN;
+
+        struct iwreq WRq;
+        RT_ZERO(WRq);
+        RTStrCopy(WRq.ifr_name, sizeof(WRq.ifr_name), pszName);
+        pInfo->fWireless = ioctl(iSocket, SIOCGIWNAME, &WRq) >= 0;
 
         FILE *fp = fopen("/proc/net/if_inet6", "r");
Index: /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 68025)
+++ /trunk/src/VBox/Main/src-server/win/NetIf-win.cpp	(revision 68026)
@@ -40,4 +40,5 @@
 
 #include <iprt/win/iphlpapi.h>
+#include <iprt/win/ntddndis.h>
 
 #include "Logging.h"
@@ -195,5 +196,5 @@
                     pInfo->enmMediumType = NETIF_T_ETHERNET;
                     pInfo->enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN;
-                    pInfo->bIsDefault = (pAdapter->IfIndex == (DWORD)iDefault);
+                    pInfo->fIsDefault = (pAdapter->IfIndex == (DWORD)iDefault);
                     RTStrFree(pszUuid);
                     break;
@@ -212,9 +213,9 @@
                 pInfo->IPNetMask.u = Settings.mask;
             }
-            pInfo->bDhcpEnabled = Settings.bDhcp;
+            pInfo->fDhcpEnabled = Settings.bDhcp;
         }
         else
         {
-            pInfo->bDhcpEnabled = false;
+            pInfo->fDhcpEnabled = false;
         }
     }
@@ -995,5 +996,5 @@
             if (SUCCEEDED(rc))
             {
-                if (Info.bIsDefault)
+                if (Info.fIsDefault)
                     pPist->push_front(iface);
                 else
@@ -1460,4 +1461,5 @@
     RTUUID                guid;
     PIP_ADAPTER_ADDRESSES pAdapter;
+    BOOL                  fWireless;
 };
 
@@ -1509,4 +1511,65 @@
     netIfLog(("return\n"));
     return VINF_SUCCESS;
+}
+
+#define DEVNAME_PREFIX L"\\\\.\\"
+
+static BOOL netIfIsWireless(INetCfgComponent *pAdapter)
+{
+    HRESULT hr;
+    wchar_t * pswzBindName;
+    wchar_t FileName[MAX_PATH];
+    bool    fWireless = false;
+
+    hr = pAdapter->GetBindName(&pswzBindName);
+    wcscpy(FileName, DEVNAME_PREFIX);
+    wcscpy((wchar_t*)(((char*)FileName) + sizeof(DEVNAME_PREFIX) - sizeof(FileName[0])), pswzBindName);
+
+    /* open the device */
+    HANDLE hDevice = CreateFile(FileName,
+                                GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
+                                NULL,
+                                OPEN_EXISTING,
+                                FILE_ATTRIBUTE_NORMAL,
+                                NULL);
+
+    if (hDevice != INVALID_HANDLE_VALUE)
+    {
+
+        /* now issue the OID_GEN_PHYSICAL_MEDIUM query */
+        DWORD Oid = OID_GEN_PHYSICAL_MEDIUM;
+        NDIS_PHYSICAL_MEDIUM PhMedium;
+        DWORD cbResult;
+        if (DeviceIoControl(hDevice,
+                            IOCTL_NDIS_QUERY_GLOBAL_STATS,
+                            &Oid,
+                            sizeof(Oid),
+                            &PhMedium,
+                            sizeof(PhMedium),
+                            &cbResult,
+                            NULL))
+        {
+            /* that was simple, now examine PhMedium */
+            fWireless = PhMedium == NdisPhysicalMediumWirelessWan
+                     || PhMedium == NdisPhysicalMediumWirelessLan
+                     || PhMedium == NdisPhysicalMediumNative802_11
+                     || PhMedium == NdisPhysicalMediumBluetooth;
+        }
+        else
+        {
+            int winEr = GetLastError();
+            LogRel(("netIfIsWireless: DeviceIoControl failed, err (0x%x), ignoring\n", winEr));
+            Assert(winEr == ERROR_INVALID_PARAMETER || winEr == ERROR_NOT_SUPPORTED || winEr == ERROR_BAD_COMMAND);
+        }
+        CloseHandle(hDevice);
+    }
+    else
+    {
+        int winEr = GetLastError();
+        AssertLogRelMsgFailed(("netIfIsWireless: CreateFile failed, err (0x%x), ignoring\n", winEr));
+    }
+
+    CoTaskMemFree(pswzBindName);
+    return fWireless;
 }
 
@@ -1610,4 +1673,5 @@
                                             adapter.guid     = *(Guid(guid).raw());
                                             adapter.pAdapter = NULL;
+                                            adapter.fWireless = netIfIsWireless(pAdapter);
                                             netIfLog(("guid=%RTuuid, name=%ls, hwid=%ls, status=%x, chars=%x\n",
                                                       &adapter.guid, pwszName, pwszHwId, uStatus, dwChars));
@@ -1873,6 +1937,6 @@
                 {
                     info.enmStatus = pAdapter->OperStatus == IfOperStatusUp ? NETIF_S_UP : NETIF_S_DOWN;
-                    info.bIsDefault = (pAdapter->IfIndex == (DWORD)iDefault);
-                    info.bDhcpEnabled = pAdapter->Flags & IP_ADAPTER_DHCP_ENABLED;
+                    info.fIsDefault = (pAdapter->IfIndex == (DWORD)iDefault);
+                    info.fDhcpEnabled = pAdapter->Flags & IP_ADAPTER_DHCP_ENABLED;
                     OSVERSIONINFOEX OSInfoEx;
                     RT_ZERO(OSInfoEx);
@@ -1900,5 +1964,5 @@
                 else
                 {
-                    if (info.bIsDefault)
+                    if (info.fIsDefault)
                         list.push_front(iface);
                     else
