NetworkAdapterImpl.h revision 9abd802d84a98ae8602297346ec3b3290423bbab
38856343f90103280eb83b5e697f9f618b407d83vboxsync/* $Id$ */
38856343f90103280eb83b5e697f9f618b407d83vboxsync
5b281ba489ca18f0380d7efc7a5108b606cce449vboxsync/** @file
38856343f90103280eb83b5e697f9f618b407d83vboxsync *
38856343f90103280eb83b5e697f9f618b407d83vboxsync * VirtualBox COM class implementation
38856343f90103280eb83b5e697f9f618b407d83vboxsync */
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync/*
38856343f90103280eb83b5e697f9f618b407d83vboxsync * Copyright (C) 2006-2007 innotek GmbH
38856343f90103280eb83b5e697f9f618b407d83vboxsync *
38856343f90103280eb83b5e697f9f618b407d83vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * available from http://www.virtualbox.org. This file is free software;
38856343f90103280eb83b5e697f9f618b407d83vboxsync * you can redistribute it and/or modify it under the terms of the GNU
38856343f90103280eb83b5e697f9f618b407d83vboxsync * General Public License (GPL) as published by the Free Software
38856343f90103280eb83b5e697f9f618b407d83vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
38856343f90103280eb83b5e697f9f618b407d83vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync */
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#ifndef ____H_NETWORKADAPTER
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#define ____H_NETWORKADAPTER
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include "VirtualBoxBase.h"
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync#include "Collection.h"
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsyncclass Machine;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsyncclass ATL_NO_VTABLE NetworkAdapter :
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync public VirtualBoxBaseNEXT,
38856343f90103280eb83b5e697f9f618b407d83vboxsync public VirtualBoxSupportErrorInfoImpl <NetworkAdapter, INetworkAdapter>,
38856343f90103280eb83b5e697f9f618b407d83vboxsync public VirtualBoxSupportTranslation <NetworkAdapter>,
38856343f90103280eb83b5e697f9f618b407d83vboxsync public INetworkAdapter
38856343f90103280eb83b5e697f9f618b407d83vboxsync{
38856343f90103280eb83b5e697f9f618b407d83vboxsyncpublic:
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync struct Data
38856343f90103280eb83b5e697f9f618b407d83vboxsync {
38856343f90103280eb83b5e697f9f618b407d83vboxsync Data()
38856343f90103280eb83b5e697f9f618b407d83vboxsync : mSlot (0), mEnabled (FALSE)
38856343f90103280eb83b5e697f9f618b407d83vboxsync , mAttachmentType (NetworkAttachmentType_Null)
a4d7fc6f54717c342281099fe14f5666be9b7921vboxsync , mCableConnected (TRUE), mLineSpeed (0), mTraceEnabled (FALSE)
38856343f90103280eb83b5e697f9f618b407d83vboxsync#ifdef RT_OS_WINDOWS
38856343f90103280eb83b5e697f9f618b407d83vboxsync , mHostInterface ("") // cannot be null
38856343f90103280eb83b5e697f9f618b407d83vboxsync#endif
38856343f90103280eb83b5e697f9f618b407d83vboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
38856343f90103280eb83b5e697f9f618b407d83vboxsync , mTAPFD (NIL_RTFILE)
38856343f90103280eb83b5e697f9f618b407d83vboxsync#endif
38856343f90103280eb83b5e697f9f618b407d83vboxsync , mInternalNetwork ("") // cannot be null
38856343f90103280eb83b5e697f9f618b407d83vboxsync {}
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync bool operator== (const Data &that) const
38856343f90103280eb83b5e697f9f618b407d83vboxsync {
38856343f90103280eb83b5e697f9f618b407d83vboxsync return this == &that ||
e227a95dad8aed081c9325091111832ed02ab41avboxsync (mSlot == that.mSlot &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mEnabled == that.mEnabled &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mMACAddress == that.mMACAddress &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mAttachmentType == that.mAttachmentType &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mCableConnected == that.mCableConnected &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mLineSpeed == that.mLineSpeed &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mTraceEnabled == that.mTraceEnabled &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mHostInterface == that.mHostInterface &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
38856343f90103280eb83b5e697f9f618b407d83vboxsync mTAPSetupApplication == that.mTAPSetupApplication &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mTAPTerminateApplication == that.mTAPTerminateApplication &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync mTAPFD == that.mTAPFD &&
38856343f90103280eb83b5e697f9f618b407d83vboxsync#endif
38856343f90103280eb83b5e697f9f618b407d83vboxsync mInternalNetwork == that.mInternalNetwork);
38856343f90103280eb83b5e697f9f618b407d83vboxsync }
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync NetworkAdapterType_T mAdapterType;
38856343f90103280eb83b5e697f9f618b407d83vboxsync ULONG mSlot;
38856343f90103280eb83b5e697f9f618b407d83vboxsync BOOL mEnabled;
38856343f90103280eb83b5e697f9f618b407d83vboxsync Bstr mMACAddress;
38856343f90103280eb83b5e697f9f618b407d83vboxsync NetworkAttachmentType_T mAttachmentType;
38856343f90103280eb83b5e697f9f618b407d83vboxsync BOOL mCableConnected;
38856343f90103280eb83b5e697f9f618b407d83vboxsync ULONG mLineSpeed;
38856343f90103280eb83b5e697f9f618b407d83vboxsync BOOL mTraceEnabled;
38856343f90103280eb83b5e697f9f618b407d83vboxsync Bstr mTraceFile;
38856343f90103280eb83b5e697f9f618b407d83vboxsync Bstr mHostInterface;
38856343f90103280eb83b5e697f9f618b407d83vboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
38856343f90103280eb83b5e697f9f618b407d83vboxsync Bstr mTAPSetupApplication;
99cd1ce586a12bf6b8c6084cbcdebe8fe3553cc2vboxsync Bstr mTAPTerminateApplication;
99cd1ce586a12bf6b8c6084cbcdebe8fe3553cc2vboxsync RTFILE mTAPFD;
99cd1ce586a12bf6b8c6084cbcdebe8fe3553cc2vboxsync#endif
10f18618390096a9c968016b6ca94d77b91618fbvboxsync Bstr mInternalNetwork;
38856343f90103280eb83b5e697f9f618b407d83vboxsync };
10f18618390096a9c968016b6ca94d77b91618fbvboxsync
10f18618390096a9c968016b6ca94d77b91618fbvboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (NetworkAdapter)
10f18618390096a9c968016b6ca94d77b91618fbvboxsync
10f18618390096a9c968016b6ca94d77b91618fbvboxsync DECLARE_NOT_AGGREGATABLE(NetworkAdapter)
da32c946fd40d7a49f63e5355cdcf3c75454e206vboxsync
10f18618390096a9c968016b6ca94d77b91618fbvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync BEGIN_COM_MAP(NetworkAdapter)
38856343f90103280eb83b5e697f9f618b407d83vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync COM_INTERFACE_ENTRY(INetworkAdapter)
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync END_COM_MAP()
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync NS_DECL_ISUPPORTS
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync DECLARE_EMPTY_CTOR_DTOR (NetworkAdapter)
98502a585f6eda30527b54f7df18dd3de3d3d7c6vboxsync
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync HRESULT FinalConstruct();
f3701698f9d61fed78c320c3b35c64a0c63d6db1vboxsync void FinalRelease();
f3701698f9d61fed78c320c3b35c64a0c63d6db1vboxsync
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync // public initializer/uninitializer for internal purposes only
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync HRESULT init (Machine *aParent, ULONG aSlot);
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync HRESULT init (Machine *aParent, NetworkAdapter *aThat);
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync HRESULT initCopy (Machine *aParent, NetworkAdapter *aThat);
38856343f90103280eb83b5e697f9f618b407d83vboxsync void uninit();
38856343f90103280eb83b5e697f9f618b407d83vboxsync
1e6f3dcff5f382b0ade59e1e7f3728e59e9b8c90vboxsync // INetworkAdapter properties
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(AdapterType))(NetworkAdapterType_T *aAdapterType);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(AdapterType))(NetworkAdapterType_T aAdapterType);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(Slot)) (ULONG *aSlot);
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync STDMETHOD(COMGETTER(Enabled)) (BOOL *aEnabled);
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync STDMETHOD(COMSETTER(Enabled)) (BOOL aEnabled);
1e6f3dcff5f382b0ade59e1e7f3728e59e9b8c90vboxsync STDMETHOD(COMGETTER(MACAddress)) (BSTR *aMACAddress);
1e6f3dcff5f382b0ade59e1e7f3728e59e9b8c90vboxsync STDMETHOD(COMSETTER(MACAddress)) (INPTR BSTR aMACAddress);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(AttachmentType)) (NetworkAttachmentType_T *aAttachmentType);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(HostInterface)) (BSTR *aHostInterface);
b0553043536ae0bdf9921b91597f9dc6c316b1b4vboxsync STDMETHOD(COMSETTER(HostInterface)) (INPTR BSTR aHostInterface);
38856343f90103280eb83b5e697f9f618b407d83vboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(TAPFileDescriptor)) (LONG *aTAPFileDescriptor);
fe95fa9fc2a364e3d678307971cc900b89f5c94avboxsync STDMETHOD(COMSETTER(TAPFileDescriptor)) (LONG aTAPFileDescriptor);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(TAPSetupApplication)) (BSTR *aTAPSetupApplication);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(TAPSetupApplication)) (INPTR BSTR aTAPSetupApplication);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(TAPTerminateApplication)) (BSTR *aTAPTerminateApplication);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(TAPTerminateApplication)) (INPTR BSTR aTAPTerminateApplication);
38856343f90103280eb83b5e697f9f618b407d83vboxsync#endif
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(InternalNetwork)) (BSTR *aInternalNetwork);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(InternalNetwork)) (INPTR BSTR aInternalNetwork);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(CableConnected)) (BOOL *aConnected);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(CableConnected)) (BOOL aConnected);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(TraceEnabled)) (BOOL *aEnabled);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(TraceEnabled)) (BOOL aEnabled);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(LineSpeed)) (ULONG *aSpeed);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(LineSpeed)) (ULONG aSpeed);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMGETTER(TraceFile)) (BSTR *aTraceFile);
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(COMSETTER(TraceFile)) (INPTR BSTR aTraceFile);
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync // INetworkAdapter methods
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(AttachToNAT)();
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(AttachToHostInterface)();
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(AttachToInternalNetwork)();
38856343f90103280eb83b5e697f9f618b407d83vboxsync STDMETHOD(Detach)();
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync // public methods only for internal purposes
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync HRESULT loadSettings (const settings::Key &aAdapterNode);
38856343f90103280eb83b5e697f9f618b407d83vboxsync HRESULT saveSettings (settings::Key &aAdapterNode);
38856343f90103280eb83b5e697f9f618b407d83vboxsync
38856343f90103280eb83b5e697f9f618b407d83vboxsync bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); }
38856343f90103280eb83b5e697f9f618b407d83vboxsync bool isReallyModified() { AutoWriteLock alock (this); return mData.hasActualChanges(); }
38856343f90103280eb83b5e697f9f618b407d83vboxsync bool rollback();
38856343f90103280eb83b5e697f9f618b407d83vboxsync void commit();
void copyFrom (NetworkAdapter *aThat);
// public methods for internal purposes only
// (ensure there is a caller and a read lock before calling them!)
const Backupable <Data> &data() const { return mData; }
// for VirtualBoxSupportErrorInfoImpl
static const wchar_t *getComponentName() { return L"NetworkAdapter"; }
private:
void detach();
void generateMACAddress();
const ComObjPtr <Machine, ComWeakRef> mParent;
const ComObjPtr <NetworkAdapter> mPeer;
Backupable <Data> mData;
};
#endif // ____H_NETWORKADAPTER