VirtualBox

source: vbox/trunk/src/VBox/Main/include/NATNetworkImpl.h@ 49935

Last change on this file since 49935 was 49742, checked in by vboxsync, 11 years ago

6813 stage 2 - Use the server side API wrapper code..

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.1 KB
Line 
1/* $Id: NATNetworkImpl.h 49742 2013-12-02 17:59:21Z vboxsync $ */
2/** @file
3 * INATNetwork implementation header, lives in VBoxSVC.
4 */
5
6/*
7 * Copyright (C) 2006-2013 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 ____H_H_NATNETWORKIMPL
19#define ____H_H_NATNETWORKIMPL
20#include "VBoxEvents.h"
21#include "NATNetworkWrap.h"
22
23#ifdef VBOX_WITH_HOSTNETIF_API
24struct NETIFINFO;
25#endif
26
27namespace settings
28{
29 struct NATNetwork;
30 struct NATRule;
31}
32
33#ifdef RT_OS_WINDOWS
34# define NATSR_EXECUTABLE_NAME "VBoxNetNAT.exe"
35#else
36# define NATSR_EXECUTABLE_NAME "VBoxNetNAT"
37#endif
38
39enum ADDRESSLOOKUPTYPE
40{
41 ADDR_GATEWAY,
42 ADDR_DHCP,
43 ADDR_DHCPLOWERIP,
44 ADDR_ANY
45};
46
47class NATNetworkServiceRunner: public NetworkServiceRunner
48{
49public:
50 NATNetworkServiceRunner(): NetworkServiceRunner(NATSR_EXECUTABLE_NAME){}
51 ~NATNetworkServiceRunner(){}
52};
53
54class ATL_NO_VTABLE NATNetwork :
55 public NATNetworkWrap
56{
57public:
58
59 DECLARE_EMPTY_CTOR_DTOR(NATNetwork)
60
61 HRESULT FinalConstruct();
62 void FinalRelease();
63
64 HRESULT init(VirtualBox *aVirtualBox,
65 com::Utf8Str aName);
66
67
68 HRESULT init(VirtualBox *aVirtualBox,
69 const settings::NATNetwork &data);
70 void uninit();
71 HRESULT i_saveSettings(settings::NATNetwork &data);
72
73private:
74
75 // Wrapped INATNetwork properties
76 HRESULT getNetworkName(com::Utf8Str &aNetworkName);
77 HRESULT setNetworkName(const com::Utf8Str &aNetworkName);
78 HRESULT getEnabled(BOOL *aEnabled);
79 HRESULT setEnabled(BOOL aEnabled);
80 HRESULT getNetwork(com::Utf8Str &aNetwork);
81 HRESULT setNetwork(const com::Utf8Str &aNetwork);
82 HRESULT getGateway(com::Utf8Str &aGateway);
83 HRESULT getIPv6Enabled(BOOL *aIPv6Enabled);
84 HRESULT setIPv6Enabled(BOOL aIPv6Enabled);
85 HRESULT getIPv6Prefix(com::Utf8Str &aIPv6Prefix);
86 HRESULT setIPv6Prefix(const com::Utf8Str &aIPv6Prefix);
87 HRESULT getAdvertiseDefaultIPv6RouteEnabled(BOOL *aAdvertiseDefaultIPv6RouteEnabled);
88 HRESULT setAdvertiseDefaultIPv6RouteEnabled(BOOL aAdvertiseDefaultIPv6RouteEnabled);
89 HRESULT getNeedDhcpServer(BOOL *aNeedDhcpServer);
90 HRESULT setNeedDhcpServer(BOOL aNeedDhcpServer);
91 HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
92 HRESULT getPortForwardRules4(std::vector<com::Utf8Str> &aPortForwardRules4);
93 HRESULT getLocalMappings(std::vector<com::Utf8Str> &aLocalMappings);
94 HRESULT getLoopbackIp6(LONG *aLoopbackIp6);
95 HRESULT setLoopbackIp6(LONG aLoopbackIp6);
96 HRESULT getPortForwardRules6(std::vector<com::Utf8Str> &aPortForwardRules6);
97
98 // wrapped INATNetwork methods
99 HRESULT addLocalMapping(const com::Utf8Str &aHostid,
100 LONG aOffset);
101 HRESULT addPortForwardRule(BOOL aIsIpv6,
102 const com::Utf8Str &aRuleName,
103 NATProtocol_T aProto,
104 const com::Utf8Str &aHostIP,
105 USHORT aHostPort,
106 const com::Utf8Str &aGuestIP,
107 USHORT aGuestPort);
108 HRESULT removePortForwardRule(BOOL aISipv6,
109 const com::Utf8Str &aRuleName);
110 HRESULT start(const com::Utf8Str &aTrunkType);
111 HRESULT stop();
112
113 // Internal methods
114 int i_recalculateIpv4AddressAssignments();
115 int i_findFirstAvailableOffset(ADDRESSLOOKUPTYPE, uint32_t *);
116
117 typedef std::map<Utf8Str, settings::NATRule> NATRuleMap;
118 typedef NATRuleMap::const_iterator constNATRuleMapIterator;
119
120 void i_getPortForwardRulesFromMap(std::vector<Utf8Str> &aPortForwardRules, NATRuleMap& aRules);
121
122 /** weak VirtualBox parent */
123 VirtualBox * const mVirtualBox;
124
125 const com::Utf8Str mName;
126
127 struct Data;
128 struct Data *m;
129
130};
131
132#endif // !____H_H_NATNETWORKIMPL
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