VirtualBox

source: vbox/trunk/src/VBox/Main/include/DHCPServerImpl.h@ 85235

Last change on this file since 85235 was 85235, checked in by vboxsync, 4 years ago

Main/DHCPServerImpl: Fixed error code mixup in findLeaseByMAC() and corrected a signedness issue with the slot argument for i_vmNameToIdAndValidateSlot and i_vmNameAndSlotToConfig. bugref:9790

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1/* $Id: DHCPServerImpl.h 85235 2020-07-11 16:34:10Z vboxsync $ */
2/** @file
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2020 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef MAIN_INCLUDED_DHCPServerImpl_h
19#define MAIN_INCLUDED_DHCPServerImpl_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include "DHCPServerWrap.h"
25#include <map>
26
27namespace settings
28{
29 struct DHCPServer;
30 struct DhcpOptValue;
31 typedef std::map<DHCPOption_T, DhcpOptValue> DhcpOptionMap;
32}
33
34class DHCPConfig;
35class DHCPIndividualConfig;
36
37/**
38 * A DHCP server for internal host-only & NAT networks.
39 *
40 * Old notes:
41 *
42 * for server configuration needs, it's perhaps better to use (VM,slot) pair
43 * (vm-name, slot) <----> (MAC)
44 *
45 * but for client configuration, when server will have MACs at hand, it'd be
46 * easier to requiest options by MAC.
47 * (MAC) <----> (option-list)
48 *
49 * Doubts: What should be done if MAC changed for (vm-name, slot), when syncing should?
50 * XML: serialization of dependecy (DHCP options) - (VM,slot) shouldn't be done via MAC in
51 * the middle.
52 */
53class ATL_NO_VTABLE DHCPServer
54 : public DHCPServerWrap
55{
56public:
57 /** @name Constructors and destructors
58 * @{ */
59 DECLARE_EMPTY_CTOR_DTOR(DHCPServer)
60 HRESULT FinalConstruct();
61 void FinalRelease();
62
63 HRESULT init(VirtualBox *aVirtualBox, const com::Utf8Str &aName);
64 HRESULT init(VirtualBox *aVirtualBox, const settings::DHCPServer &data);
65 void uninit();
66 /** @} */
67
68 /** @name Public internal methods.
69 * @{ */
70 HRESULT i_saveSettings(settings::DHCPServer &data);
71 HRESULT i_removeConfig(DHCPConfig *pConfig, DHCPConfigScope_T enmScope);
72 /** @} */
73
74private:
75 /** @name IDHCPServer Properties
76 * @{ */
77 HRESULT getEventSource(ComPtr<IEventSource> &aEventSource) RT_OVERRIDE;
78 HRESULT getEnabled(BOOL *aEnabled) RT_OVERRIDE;
79 HRESULT setEnabled(BOOL aEnabled) RT_OVERRIDE;
80 HRESULT getIPAddress(com::Utf8Str &aIPAddress) RT_OVERRIDE;
81 HRESULT getNetworkMask(com::Utf8Str &aNetworkMask) RT_OVERRIDE;
82 HRESULT getNetworkName(com::Utf8Str &aName) RT_OVERRIDE;
83 HRESULT getLowerIP(com::Utf8Str &aIPAddress) RT_OVERRIDE;
84 HRESULT getUpperIP(com::Utf8Str &aIPAddress) RT_OVERRIDE;
85 HRESULT setConfiguration(const com::Utf8Str &aIPAddress, const com::Utf8Str &aNetworkMask,
86 const com::Utf8Str &aFromIPAddress, const com::Utf8Str &aToIPAddress) RT_OVERRIDE;
87 HRESULT getGlobalConfig(ComPtr<IDHCPGlobalConfig> &aGlobalConfig) RT_OVERRIDE;
88 HRESULT getGroupConfigs(std::vector<ComPtr<IDHCPGroupConfig> > &aGroupConfigs) RT_OVERRIDE;
89 HRESULT getIndividualConfigs(std::vector<ComPtr<IDHCPIndividualConfig> > &aIndividualConfigs) ;
90 /** @} */
91
92 /** @name IDHCPServer Methods
93 * @{ */
94 HRESULT start(const com::Utf8Str &aTrunkName, const com::Utf8Str &aTrunkType) RT_OVERRIDE;
95 HRESULT stop() RT_OVERRIDE;
96 HRESULT restart() RT_OVERRIDE;
97 HRESULT findLeaseByMAC(const com::Utf8Str &aMac, LONG aType, com::Utf8Str &aAddress, com::Utf8Str &aState,
98 LONG64 *aIssued, LONG64 *aExpire) RT_OVERRIDE;
99 HRESULT getConfig(DHCPConfigScope_T aScope, const com::Utf8Str &aName, ULONG aSlot, BOOL aMayAdd,
100 ComPtr<IDHCPConfig> &aConfig) RT_OVERRIDE;
101 /** @} */
102
103 /** @name Helpers
104 * @{ */
105 HRESULT i_doSaveSettings();
106 HRESULT i_calcLeasesConfigAndLogFilenames(const com::Utf8Str &aNetwork) RT_NOEXCEPT;
107 HRESULT i_writeDhcpdConfig(const char *pszFilename, uint32_t uMACAddressVersion) RT_NOEXCEPT;
108
109 HRESULT i_vmNameToIdAndValidateSlot(const com::Utf8Str &aVmName, ULONG a_uSlot, com::Guid &idMachine);
110 HRESULT i_vmNameAndSlotToConfig(const com::Utf8Str &a_strVmName, ULONG a_uSlot, bool a_fCreateIfNeeded,
111 ComObjPtr<DHCPIndividualConfig> &a_rPtrConfig);
112 /** @} */
113
114 /** Private data */
115 struct Data;
116 /** Private data. */
117 Data *m;
118};
119
120#endif /* !MAIN_INCLUDED_DHCPServerImpl_h */
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