DHCPServerImpl.cpp revision f8a1555b6a5fb52eb99ce29c255d3233b2179a93
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor/* $Id$ */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor/** @file
417971bcf828b6bbe9ec2b5a9490dcb1cf1af3a4lgentis *
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * VirtualBox COM class implementation
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor/*
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * Copyright (C) 2006-2008 Sun Microsystems, Inc.
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor *
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * This file is part of VirtualBox Open Source Edition (OSE), as
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * available from http://www.virtualbox.org. This file is free software;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * you can redistribute it and/or modify it under the terms of the GNU
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * General Public License (GPL) as published by the Free Software
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * Foundation, in version 2 as it comes in the "COPYING" file of the
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor *
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * Clara, CA 95054 USA or visit http://www.sun.com if you need
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * additional information or have any questions.
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor#include "DHCPServerRunner.h"
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor#include "DHCPServerImpl.h"
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor#include "Logging.h"
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor#include <VBox/settings.h>
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor// constructor / destructor
8c7a70cc3f10ec5402377663f1ab14828871670elgentis/////////////////////////////////////////////////////////////////////////////
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorDEFINE_EMPTY_CTOR_DTOR (DHCPServer)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorHRESULT DHCPServer::FinalConstruct()
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorvoid DHCPServer::FinalRelease()
8c7a70cc3f10ec5402377663f1ab14828871670elgentis{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor uninit ();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorvoid DHCPServer::uninit()
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* Enclose the state transition Ready->InUninit->NotReady */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoUninitSpan autoUninitSpan (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor if (autoUninitSpan.uninitDone())
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor// /* we uninit children and reset mParent
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor// * and VirtualBox::removeDependentChild() needs a write lock */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor// AutoMultiWriteLock2 alock (mVirtualBox->lockHandle(), this->treeLock());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor mVirtualBox->removeDependentChild (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor unconst (mVirtualBox).setNull();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorHRESULT DHCPServer::init(VirtualBox *aVirtualBox, IN_BSTR aName)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (aName != NULL, E_INVALIDARG);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoInitSpan autoInitSpan (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (autoInitSpan.isOk(), E_FAIL);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* share VirtualBox weakly (parent remains NULL so far) */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor unconst (mVirtualBox) = aVirtualBox;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor unconst(mName) = aName;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.IPAddress = "0.0.0.0";
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.networkMask = "0.0.0.0";
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.enabled = FALSE;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.lowerIP = "0.0.0.0";
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.upperIP = "0.0.0.0";
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* register with VirtualBox early, since uninit() will
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor * unconditionally unregister on failure */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aVirtualBox->addDependentChild (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* Confirm a successful initialization */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor autoInitSpan.setSucceeded();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorHRESULT DHCPServer::init(VirtualBox *aVirtualBox, const settings::Key &aNode)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor using namespace settings;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* Enclose the state transition NotReady->InInit->Ready */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoInitSpan autoInitSpan (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (autoInitSpan.isOk(), E_FAIL);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* share VirtualBox weakly (parent remains NULL so far) */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor unconst (mVirtualBox) = aVirtualBox;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aVirtualBox->addDependentChild (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor unconst(mName) = aNode.stringValue ("networkName");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.IPAddress = aNode.stringValue ("IPAddress");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.networkMask = aNode.stringValue ("networkMask");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.enabled = aNode.value <BOOL> ("enabled");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.lowerIP = aNode.stringValue ("lowerIP");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.upperIP = aNode.stringValue ("upperIP");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor autoInitSpan.setSucceeded();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorHRESULT DHCPServer::saveSettings (settings::Key &aParentNode)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor using namespace settings;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (!aParentNode.isNull(), E_FAIL);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoReadLock alock (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor Key aNode = aParentNode.appendKey ("DHCPServer");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* required */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <Bstr> ("networkName", mName);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <Bstr> ("IPAddress", m.IPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <Bstr> ("networkMask", m.networkMask);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <Bstr> ("lowerIP", m.lowerIP);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <Bstr> ("upperIP", m.upperIP);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor aNode.setValue <BOOL> ("enabled", m.enabled);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(NetworkName) (BSTR *aName)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aName);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor mName.cloneTo(aName);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(Enabled) (BOOL *aEnabled)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aEnabled);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor *aEnabled = m.enabled;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMSETTER(Enabled) (BOOL aEnabled)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* VirtualBox::saveSettings() needs a write lock */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoMultiWriteLock2 alock (mVirtualBox, this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.enabled = aEnabled;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor HRESULT rc = mVirtualBox->saveSettings();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return rc;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(IPAddress) (BSTR *aIPAddress)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.IPAddress.cloneTo(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(NetworkMask) (BSTR *aNetworkMask)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aNetworkMask);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.networkMask.cloneTo(aNetworkMask);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(LowerIP) (BSTR *aIPAddress)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.lowerIP.cloneTo(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::COMGETTER(UpperIP) (BSTR *aIPAddress)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComArgOutPointerValid(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.upperIP.cloneTo(aIPAddress);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::SetConfiguration (IN_BSTR aIPAddress, IN_BSTR aNetworkMask, IN_BSTR aLowerIP, IN_BSTR aUpperIP)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (aIPAddress != NULL, E_INVALIDARG);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (aNetworkMask != NULL, E_INVALIDARG);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (aLowerIP != NULL, E_INVALIDARG);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AssertReturn (aUpperIP != NULL, E_INVALIDARG);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoCaller autoCaller (this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor CheckComRCReturnRC (autoCaller.rc());
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* VirtualBox::saveSettings() needs a write lock */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor AutoMultiWriteLock2 alock (mVirtualBox, this);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.IPAddress = aIPAddress;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.networkMask = aNetworkMask;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.lowerIP = aLowerIP;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.upperIP = aUpperIP;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return mVirtualBox->saveSettings();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::Start (IN_BSTR aNetworkName, IN_BSTR aTrunkName, IN_BSTR aTrunkType)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor /* Silently ignore attepmts to run disabled servers. */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor if (!m.enabled)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_NETNAME, Utf8Str(aNetworkName));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor Bstr tmp(aTrunkName);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor if (!tmp.isEmpty())
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_TRUNKNAME, Utf8Str(tmp));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_TRUNKTYPE, Utf8Str(aTrunkType));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor //temporary hack for testing
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_NAME
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor char strMAC[13];
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor Guid guid;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor guid.create();
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor RTStrPrintf (strMAC, sizeof(strMAC), "080027%02X%02X%02X",
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor guid.ptr()->au8[0], guid.ptr()->au8[1], guid.ptr()->au8[2]);
8c7a70cc3f10ec5402377663f1ab14828871670elgentis m.dhcp.setOption(DHCPCFG_MACADDRESS, strMAC);
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_IPADDRESS, Utf8Str(m.IPAddress));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_LEASEDB,
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_VERBOSE,
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_GATEWAY,
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_LOWERIP, Utf8Str(m.lowerIP));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_UPPERIP, Utf8Str(m.upperIP));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_NETMASK, Utf8Str(m.networkMask));
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_HELP,
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_VERSION,
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor // DHCPCFG_NOTOPT_MAXVAL
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor m.dhcp.setOption(DHCPCFG_BEGINCONFIG, "");
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return RT_FAILURE(m.dhcp.start()) ? E_FAIL : S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor //m.dhcp.detachFromServer(); /* need to do this to avoid server shutdown on runner destruction */
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzorSTDMETHODIMP DHCPServer::Stop (void)
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor{
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor return RT_FAILURE(m.dhcp.stop()) ? E_FAIL : S_OK;
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor}
293aa6caecb1db771e9baa2f79c92f1c381caee4gryzor