NetworkAdapterImpl.h revision 4651430e55b9df9726347e3e3968618e540fe729
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* $Id$ */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * VirtualBox COM class implementation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/*
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Copyright (C) 2006-2010 Oracle Corporation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * available from http://www.virtualbox.org. This file is free software;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * you can redistribute it and/or modify it under the terms of the GNU
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * General Public License (GPL) as published by the Free Software
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef ____H_NETWORKADAPTER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ____H_NETWORKADAPTER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "VirtualBoxBase.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "NATEngineImpl.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass GuestOSType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncnamespace settings
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct NetworkAdapter;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncclass ATL_NO_VTABLE NetworkAdapter :
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync public VirtualBoxBase,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VBOX_SCRIPTABLE_IMPL(INetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncpublic:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Data() : mSlot(0),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mEnabled(FALSE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mAttachmentType(NetworkAttachmentType_Null),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mCableConnected(TRUE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mLineSpeed(0),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mTraceEnabled(FALSE),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mHostInterface("") /* cannot be null */,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef VBOX_WITH_VDE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mVDENetwork("") /* can be null */,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mNATNetwork("") /* cannot be null */,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mBootPriority(0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NetworkAdapterType_T mAdapterType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ULONG mSlot;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOL mEnabled;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mMACAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NetworkAttachmentType_T mAttachmentType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOL mCableConnected;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ULONG mLineSpeed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOL mTraceEnabled;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mTraceFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mHostInterface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mInternalNetwork;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifdef VBOX_WITH_VDE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mVDENetwork;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Bstr mNATNetwork;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ULONG mBootPriority;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync };
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(NetworkAdapter, INetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DECLARE_NOT_AGGREGATABLE(NetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BEGIN_COM_MAP(NetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync COM_INTERFACE_ENTRY (INetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync COM_INTERFACE_ENTRY2 (IDispatch, INetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync END_COM_MAP()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DECLARE_EMPTY_CTOR_DTOR (NetworkAdapter)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT FinalConstruct();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void FinalRelease();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // public initializer/uninitializer for internal purposes only
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT init (Machine *aParent, ULONG aSlot);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT init (Machine *aParent, NetworkAdapter *aThat);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT initCopy (Machine *aParent, NetworkAdapter *aThat);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void uninit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // INetworkAdapter properties
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(AdapterType))(NetworkAdapterType_T *aAdapterType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(AdapterType))(NetworkAdapterType_T aAdapterType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(Slot)) (ULONG *aSlot);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(Enabled)) (BOOL *aEnabled);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(Enabled)) (BOOL aEnabled);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(MACAddress)) (BSTR *aMACAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(MACAddress)) (IN_BSTR aMACAddress);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(AttachmentType)) (NetworkAttachmentType_T *aAttachmentType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(HostInterface)) (BSTR *aHostInterface);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(HostInterface)) (IN_BSTR aHostInterface);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(InternalNetwork)) (BSTR *aInternalNetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(InternalNetwork)) (IN_BSTR aInternalNetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(NATNetwork)) (BSTR *aNATNetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(NATNetwork)) (IN_BSTR aNATNetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(VDENetwork)) (BSTR *aVDENetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(VDENetwork)) (IN_BSTR aVDENetwork);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(CableConnected)) (BOOL *aConnected);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(CableConnected)) (BOOL aConnected);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(TraceEnabled)) (BOOL *aEnabled);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(TraceEnabled)) (BOOL aEnabled);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(LineSpeed)) (ULONG *aSpeed);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(LineSpeed)) (ULONG aSpeed);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(TraceFile)) (BSTR *aTraceFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(TraceFile)) (IN_BSTR aTraceFile);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(NatDriver)) (INATEngine **aNatDriver);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMGETTER(BootPriority)) (ULONG *aBootPriority);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(COMSETTER(BootPriority)) (ULONG aBootPriority);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // INetworkAdapter methods
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(AttachToNAT)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(AttachToBridgedInterface)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(AttachToInternalNetwork)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(AttachToHostOnlyInterface)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(AttachToVDE)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync STDMETHOD(Detach)();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // public methods only for internal purposes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT loadSettings(const settings::NetworkAdapter &data);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync HRESULT saveSettings(settings::NetworkAdapter &data);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool isModified();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void rollback();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void commit();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void copyFrom (NetworkAdapter *aThat);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void applyDefaults (GuestOSType *aOsType);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncprivate:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void detach();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync void generateMACAddress();
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Machine * const mParent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const ComObjPtr<NetworkAdapter> mPeer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync const ComObjPtr<NATEngine> mNATEngine;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bool m_fModified;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Backupable<Data> mData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif // ____H_NETWORKADAPTER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync