NATNetworkImpl.h revision 20fc4a350a4a8e56ffaac6cf57dcd677a7ac36c5
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync/* $Id$ */
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync/** @file
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync *
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * VirtualBox COM class implementation
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync */
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync/*
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * Copyright (C) 2006-2011 Oracle Corporation
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync *
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * available from http://www.virtualbox.org. This file is free software;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * you can redistribute it and/or modify it under the terms of the GNU
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * General Public License (GPL) as published by the Free Software
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync */
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#ifndef ____H_H_NATNETWORKIMPL
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#define ____H_H_NATNETWORKIMPL
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#include "VirtualBoxBase.h"
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#ifdef VBOX_WITH_HOSTNETIF_API
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsyncstruct NETIFINFO;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#endif
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#ifdef VBOX_WITH_NAT_SERVICE
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync# define NAT_XML_SERIALIZATION 1
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#endif
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsyncnamespace settings
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync{
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync struct NATNetwork;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync struct NATRule;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync}
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync#ifdef RT_OS_WINDOWS
20fc4a350a4a8e56ffaac6cf57dcd677a7ac36c5vboxsync# define NATSR_EXECUTABLE_NAME "VBoxNetNAT.exe"
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync#else
20fc4a350a4a8e56ffaac6cf57dcd677a7ac36c5vboxsync# define NATSR_EXECUTABLE_NAME "VBoxNetNAT"
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync#endif
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsyncclass NATNetworkServiceRunner: public NetworkServiceRunner
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync{
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsyncpublic:
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync NATNetworkServiceRunner(): NetworkServiceRunner(NATSR_EXECUTABLE_NAME){}
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync virtual ~NATNetworkServiceRunner(){}
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync};
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsyncclass ATL_NO_VTABLE NATNetwork :
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync public VirtualBoxBase,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync VBOX_SCRIPTABLE_IMPL(INATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync{
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsyncpublic:
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(NATNetwork, INATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync DECLARE_NOT_AGGREGATABLE (NATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync BEGIN_COM_MAP (NATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(INATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync END_COM_MAP()
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync DECLARE_EMPTY_CTOR_DTOR (NATNetwork)
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync HRESULT FinalConstruct();
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync void FinalRelease();
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync HRESULT init(VirtualBox *aVirtualBox,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync IN_BSTR aName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync HRESULT init(VirtualBox *aVirtualBox,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync const settings::NATNetwork &data);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#ifdef NAT_XML_SERIALIZATION
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync HRESULT saveSettings(settings::NATNetwork &data);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#endif
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync void uninit();
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync // INATNetwork::EventSource
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(EventSource))(IEventSource **IEventSource);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync // INATNetwork properties
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(Enabled))(BOOL *aEnabled);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(Enabled))(BOOL aEnabled);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(NetworkName))(BSTR *aName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(NetworkName))(IN_BSTR aName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(Gateway))(BSTR *aIPGateway);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(Network))(BSTR *aIPNetwork);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(Network))(IN_BSTR aIPNetwork);
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(IPv6Enabled))(BOOL *aEnabled);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(IPv6Enabled))(BOOL aEnabled);
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(IPv6Prefix))(BSTR *aName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(IPv6Prefix))(IN_BSTR aName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(AdvertiseDefaultIPv6RouteEnabled))(BOOL *aEnabled);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(AdvertiseDefaultIPv6RouteEnabled))(BOOL aEnabled);
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(NeedDhcpServer))(BOOL *aEnabled);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMSETTER(NeedDhcpServer))(BOOL aEnabled);
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync
c33cfc3b3717e118f6e786433bd3725c33f2b8f8vboxsync STDMETHOD(COMGETTER(LocalMappings))(ComSafeArrayOut(BSTR, aLocalMappings));
c33cfc3b3717e118f6e786433bd3725c33f2b8f8vboxsync STDMETHOD(AddLocalMapping)(IN_BSTR aHostId, LONG aOffset);
c33cfc3b3717e118f6e786433bd3725c33f2b8f8vboxsync
90ec75021ad8bca45729eedf9d3de4726381bb9dvboxsync STDMETHOD(COMGETTER(LoopbackIp6))(LONG *aLoopbackIp6);
90ec75021ad8bca45729eedf9d3de4726381bb9dvboxsync STDMETHOD(COMSETTER(LoopbackIp6))(LONG aLoopbackIp6);
90ec75021ad8bca45729eedf9d3de4726381bb9dvboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(PortForwardRules4))(ComSafeArrayOut(BSTR, aPortForwardRules4));
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(COMGETTER(PortForwardRules6))(ComSafeArrayOut(BSTR, aPortForwardRules6));
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync STDMETHOD(AddPortForwardRule)(BOOL aIsIpv6,
152b12e401b58b34fbdbf2a4510152b67884ee89vboxsync IN_BSTR aPortForwardRuleName,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync NATProtocol_T aProto,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync IN_BSTR aHostIp,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync USHORT aHostPort,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync IN_BSTR aGuestIp,
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync USHORT aGuestPort);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(RemovePortForwardRule)(BOOL aIsIpv6, IN_BSTR aPortForwardRuleName);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(Start)(IN_BSTR aTrunkType);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync STDMETHOD(Stop)();
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsyncprivate:
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync int RecalculateIpv4AddressAssignments();
6d73c66200a04223ae56a22ff221ec32193717a5vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync typedef std::map<Utf8Str, settings::NATRule> NATRuleMap;
6d73c66200a04223ae56a22ff221ec32193717a5vboxsync typedef NATRuleMap::const_iterator constNATRuleMapIterator;
6d73c66200a04223ae56a22ff221ec32193717a5vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync void GetPortForwardRulesFromMap(ComSafeArrayOut(BSTR, aPortForwardRules), NATRuleMap& aRules);
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync /** weak VirtualBox parent */
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync VirtualBox * const mVirtualBox;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync const Bstr mName;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync struct Data;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync struct Data *m;
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync};
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync
75fb03f8c1ac60d0449d333b78ec1ef08fcc9868vboxsync#endif // ____H_H_NATNETWORKIMPL