VirtualBox

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

Last change on this file since 55854 was 54407, checked in by vboxsync, 10 years ago

Main/DHCPServerImpl: kludge to sneak in dhcp option encoding through
existing API. If the option to set is 0, interpret the value as the
encoded string from getter methods that supplies option code, option
text and its encoding.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.5 KB
Line 
1/* $Id: DHCPServerImpl.h 54407 2015-02-24 00:04:44Z vboxsync $ */
2
3/** @file
4 *
5 * VirtualBox COM class implementation
6 */
7
8/*
9 * Copyright (C) 2006-2013 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_H_DHCPSERVERIMPL
21#define ____H_H_DHCPSERVERIMPL
22
23#include <VBox/settings.h>
24#include "DHCPServerWrap.h"
25
26#ifdef VBOX_WITH_HOSTNETIF_API
27struct NETIFINFO;
28#endif
29
30#ifdef RT_OS_WINDOWS
31# define DHCP_EXECUTABLE_NAME "VBoxNetDHCP.exe"
32#else
33# define DHCP_EXECUTABLE_NAME "VBoxNetDHCP"
34#endif
35
36class DHCPServerRunner: public NetworkServiceRunner
37{
38public:
39 DHCPServerRunner():NetworkServiceRunner(DHCP_EXECUTABLE_NAME){}
40 virtual ~DHCPServerRunner(){};
41
42 static const std::string kDsrKeyGateway;
43 static const std::string kDsrKeyLowerIp;
44 static const std::string kDsrKeyUpperIp;
45};
46
47/**
48 * for server configuration needs, it's perhaps better to use (VM,slot) pair
49 * (vm-name, slot) <----> (MAC)
50 *
51 * but for client configuration, when server will have MACs at hand, it'd be
52 * easier to requiest options by MAC.
53 * (MAC) <----> (option-list)
54 *
55 * Doubts: What should be done if MAC changed for (vm-name, slot), when syncing should?
56 * XML: serialization of dependecy (DHCP options) - (VM,slot) shouldn't be done via MAC in
57 * the middle.
58 */
59
60using settings::DhcpOptValue;
61using settings::DhcpOptionMap;
62using settings::DhcpOptValuePair;
63using settings::DhcpOptConstIterator;
64using settings::DhcpOptIterator;
65
66using settings::VmNameSlotKey;
67using settings::VmSlot2OptionsMap;
68using settings::VmSlot2OptionsPair;
69using settings::VmSlot2OptionsIterator;
70
71
72class ATL_NO_VTABLE DHCPServer :
73 public DHCPServerWrap
74{
75public:
76
77 DECLARE_EMPTY_CTOR_DTOR (DHCPServer)
78
79 HRESULT FinalConstruct();
80 void FinalRelease();
81
82 HRESULT init(VirtualBox *aVirtualBox,
83 IN_BSTR aName);
84 HRESULT init(VirtualBox *aVirtualBox,
85 const settings::DHCPServer &data);
86 void uninit();
87
88 // Public internal methids.
89 HRESULT i_saveSettings(settings::DHCPServer &data);
90 DhcpOptionMap& i_findOptMapByVmNameSlot(const com::Utf8Str& aVmName,
91 LONG Slot);
92
93private:
94 HRESULT encodeOption(com::Utf8Str &aEncoded,
95 uint32_t aOptCode, const DhcpOptValue &aOptValue);
96 int addOption(DhcpOptionMap &aMap,
97 DhcpOpt_T aOption, const com::Utf8Str &aValue);
98
99 // wrapped IDHCPServer properties
100 HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
101 HRESULT getEnabled(BOOL *aEnabled);
102 HRESULT setEnabled(BOOL aEnabled);
103 HRESULT getIPAddress(com::Utf8Str &aIPAddress);
104 HRESULT getNetworkMask(com::Utf8Str &aNetworkMask);
105 HRESULT getNetworkName(com::Utf8Str &aName);
106 HRESULT getLowerIP(com::Utf8Str &aIPAddress);
107 HRESULT getUpperIP(com::Utf8Str &aIPAddress);
108 HRESULT getGlobalOptions(std::vector<com::Utf8Str> &aGlobalOptions);
109 HRESULT getVmConfigs(std::vector<com::Utf8Str> &aVmConfigs);
110 HRESULT getMacOptions(const com::Utf8Str &aMAC, std::vector<com::Utf8Str> &aValues);
111 HRESULT setConfiguration(const com::Utf8Str &aIPAddress,
112 const com::Utf8Str &aNetworkMask,
113 const com::Utf8Str &aFromIPAddress,
114 const com::Utf8Str &aToIPAddress);
115 HRESULT getVmSlotOptions(const com::Utf8Str &aVmName,
116 LONG aSlot,
117 std::vector<com::Utf8Str> &aValues);
118
119 // Wrapped IDHCPServer Methods
120 HRESULT addGlobalOption(DhcpOpt_T aOption,
121 const com::Utf8Str &aValue);
122 HRESULT addVmSlotOption(const com::Utf8Str &aVmName,
123 LONG aSlot,
124 DhcpOpt_T aOption,
125 const com::Utf8Str &aValue);
126 HRESULT removeVmSlotOptions(const com::Utf8Str &aVmName,
127 LONG aSlot);
128 HRESULT start(const com::Utf8Str &aNetworkName,
129 const com::Utf8Str &aTrunkName,
130 const com::Utf8Str &aTrunkType);
131 HRESULT stop();
132
133 struct Data;
134 Data *m;
135 /** weak VirtualBox parent */
136 VirtualBox * const mVirtualBox;
137 const Bstr mName;
138
139};
140
141#endif // ____H_H_DHCPSERVERIMPL
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