VirtualBox

source: vbox/trunk/src/VBox/Main/include/NetworkAdapterImpl.h@ 40532

Last change on this file since 40532 was 40491, checked in by vboxsync, 13 years ago

Main/NetworkAdapter: Take the easy solution out of the reference hell created by the SessionMachine logic. Since the BandwidthGroup objects are not logically located below NetworkAdapter (they are under Machine/BandwidthControl) it is effectively impossible to get the right references in the object. Querying through the appropriate Machine object is guaranteed to give the right result.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.9 KB
Line 
1/* $Id: NetworkAdapterImpl.h 40491 2012-03-15 20:52:05Z vboxsync $ */
2
3/** @file
4 *
5 * VirtualBox COM class implementation
6 */
7
8/*
9 * Copyright (C) 2006-2011 Oracle Corporation
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 */
19
20#ifndef ____H_NETWORKADAPTER
21#define ____H_NETWORKADAPTER
22
23#include "VirtualBoxBase.h"
24#include "NATEngineImpl.h"
25#include "BandwidthGroupImpl.h"
26
27class GuestOSType;
28
29namespace settings
30{
31 struct NetworkAdapter;
32}
33
34class ATL_NO_VTABLE NetworkAdapter :
35 public VirtualBoxBase,
36 VBOX_SCRIPTABLE_IMPL(INetworkAdapter)
37{
38public:
39
40 struct Data
41 {
42 Data() : mSlot(0),
43 mEnabled(FALSE),
44 mAttachmentType(NetworkAttachmentType_Null),
45 mCableConnected(TRUE),
46 mLineSpeed(0),
47 mPromiscModePolicy(NetworkAdapterPromiscModePolicy_Deny),
48 mTraceEnabled(FALSE),
49 mBridgedInterface("") /* cannot be null */,
50 mHostOnlyInterface("") /* cannot be null */,
51 mNATNetwork("") /* cannot be null */,
52 mBootPriority(0)
53 {}
54
55 NetworkAdapterType_T mAdapterType;
56 ULONG mSlot;
57 BOOL mEnabled;
58 Bstr mMACAddress;
59 NetworkAttachmentType_T mAttachmentType;
60 BOOL mCableConnected;
61 ULONG mLineSpeed;
62 NetworkAdapterPromiscModePolicy_T mPromiscModePolicy;
63 BOOL mTraceEnabled;
64 Bstr mTraceFile;
65 Bstr mBridgedInterface;
66 Bstr mHostOnlyInterface;
67 Bstr mInternalNetwork;
68 Bstr mNATNetwork;
69 Bstr mGenericDriver;
70 settings::StringsMap mGenericProperties;
71 ULONG mBootPriority;
72 Utf8Str mBandwidthGroup;
73 };
74
75 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(NetworkAdapter, INetworkAdapter)
76
77 DECLARE_NOT_AGGREGATABLE(NetworkAdapter)
78
79 DECLARE_PROTECT_FINAL_CONSTRUCT()
80
81 BEGIN_COM_MAP(NetworkAdapter)
82 VBOX_DEFAULT_INTERFACE_ENTRIES(INetworkAdapter)
83 END_COM_MAP()
84
85 DECLARE_EMPTY_CTOR_DTOR(NetworkAdapter)
86
87 HRESULT FinalConstruct();
88 void FinalRelease();
89
90 // public initializer/uninitializer for internal purposes only
91 HRESULT init(Machine *aParent, ULONG aSlot);
92 HRESULT init(Machine *aParent, NetworkAdapter *aThat);
93 HRESULT initCopy(Machine *aParent, NetworkAdapter *aThat);
94 void uninit();
95
96 // INetworkAdapter properties
97 STDMETHOD(COMGETTER(AdapterType))(NetworkAdapterType_T *aAdapterType);
98 STDMETHOD(COMSETTER(AdapterType))(NetworkAdapterType_T aAdapterType);
99 STDMETHOD(COMGETTER(Slot))(ULONG *aSlot);
100 STDMETHOD(COMGETTER(Enabled))(BOOL *aEnabled);
101 STDMETHOD(COMSETTER(Enabled))(BOOL aEnabled);
102 STDMETHOD(COMGETTER(MACAddress))(BSTR *aMACAddress);
103 STDMETHOD(COMSETTER(MACAddress))(IN_BSTR aMACAddress);
104 STDMETHOD(COMGETTER(AttachmentType))(NetworkAttachmentType_T *aAttachmentType);
105 STDMETHOD(COMSETTER(AttachmentType))(NetworkAttachmentType_T aAttachmentType);
106 STDMETHOD(COMGETTER(BridgedInterface))(BSTR *aBridgedInterface);
107 STDMETHOD(COMSETTER(BridgedInterface))(IN_BSTR aBridgedInterface);
108 STDMETHOD(COMGETTER(HostOnlyInterface))(BSTR *aHostOnlyInterface);
109 STDMETHOD(COMSETTER(HostOnlyInterface))(IN_BSTR aHostOnlyInterface);
110 STDMETHOD(COMGETTER(InternalNetwork))(BSTR *aInternalNetwork);
111 STDMETHOD(COMSETTER(InternalNetwork))(IN_BSTR aInternalNetwork);
112 STDMETHOD(COMGETTER(NATNetwork))(BSTR *aNATNetwork);
113 STDMETHOD(COMSETTER(NATNetwork))(IN_BSTR aNATNetwork);
114 STDMETHOD(COMGETTER(GenericDriver))(BSTR *aGenericDriver);
115 STDMETHOD(COMSETTER(GenericDriver))(IN_BSTR aGenericDriver);
116 STDMETHOD(COMGETTER(CableConnected))(BOOL *aConnected);
117 STDMETHOD(COMSETTER(CableConnected))(BOOL aConnected);
118 STDMETHOD(COMGETTER(TraceEnabled))(BOOL *aEnabled);
119 STDMETHOD(COMSETTER(TraceEnabled))(BOOL aEnabled);
120 STDMETHOD(COMGETTER(LineSpeed))(ULONG *aSpeed);
121 STDMETHOD(COMSETTER(LineSpeed))(ULONG aSpeed);
122 STDMETHOD(COMGETTER(PromiscModePolicy))(NetworkAdapterPromiscModePolicy_T *aPromiscModePolicy);
123 STDMETHOD(COMSETTER(PromiscModePolicy))(NetworkAdapterPromiscModePolicy_T aPromiscModePolicy);
124 STDMETHOD(COMGETTER(TraceFile))(BSTR *aTraceFile);
125 STDMETHOD(COMSETTER(TraceFile))(IN_BSTR aTraceFile);
126 STDMETHOD(COMGETTER(NatDriver))(INATEngine **aNatDriver);
127 STDMETHOD(COMGETTER(BootPriority))(ULONG *aBootPriority);
128 STDMETHOD(COMSETTER(BootPriority))(ULONG aBootPriority);
129 STDMETHOD(COMGETTER(BandwidthGroup))(IBandwidthGroup **aBwGroup);
130 STDMETHOD(COMSETTER(BandwidthGroup))(IBandwidthGroup *aBwGroup);
131
132 // INetworkAdapter methods
133 STDMETHOD(GetProperty)(IN_BSTR aName, BSTR *aValue);
134 STDMETHOD(SetProperty)(IN_BSTR aName, IN_BSTR aValue);
135 STDMETHOD(GetProperties)(IN_BSTR aNames,
136 ComSafeArrayOut(BSTR, aReturnNames),
137 ComSafeArrayOut(BSTR, aReturnValues));
138
139 // public methods only for internal purposes
140
141 HRESULT loadSettings(BandwidthControl *bwctl, const settings::NetworkAdapter &data);
142 HRESULT saveSettings(settings::NetworkAdapter &data);
143
144 bool isModified();
145 void rollback();
146 void commit();
147 void copyFrom(NetworkAdapter *aThat);
148 void applyDefaults(GuestOSType *aOsType);
149
150private:
151
152 void generateMACAddress();
153 HRESULT updateMacAddress(Utf8Str aMacAddress);
154 void updateBandwidthGroup(BandwidthGroup *aBwGroup);
155
156 Machine * const mParent;
157 const ComObjPtr<NetworkAdapter> mPeer;
158 const ComObjPtr<NATEngine> mNATEngine;
159
160 bool m_fModified;
161 Backupable<Data> mData;
162};
163
164#endif // ____H_NETWORKADAPTER
165/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette