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