VBoxNetBaseService.h revision 0d49a2fbc9857ad8dd29542de7fb37202f1a283f
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync/* $Id$ */
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync/** @file
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * VBoxNetUDP - IntNet Client Library.
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync */
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2009-2011 Oracle Corporation
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync *
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * available from http://www.virtualbox.org. This file is free software;
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * you can redistribute it and/or modify it under the terms of the GNU
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * General Public License (GPL) as published by the Free Software
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync */
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync#ifndef ___VBoxNetBaseService_h___
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync#define ___VBoxNetBaseService_h___
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync#include <iprt/critsect.h>
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncclass VBoxNetHlpUDPService
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync{
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncpublic:
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncvirtual int hlpUDPBroadcast(unsigned uSrcPort, unsigned uDstPort,
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync void const *pvData, size_t cbData) const = 0;
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync};
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsyncclass VBoxNetLockee
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync{
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncpublic:
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync virtual int syncEnter() = 0;
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync virtual int syncLeave() = 0;
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync};
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncclass VBoxNetALock
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync{
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncpublic:
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync VBoxNetALock(VBoxNetLockee *a_lck):m_lck(a_lck)
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync {
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync if (m_lck)
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync m_lck->syncEnter();
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync }
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync ~VBoxNetALock()
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync {
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync if (m_lck)
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync m_lck->syncLeave();
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync }
a1df400bbe9d64aad400442e56eb637019300a5evboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncprivate:
a1df400bbe9d64aad400442e56eb637019300a5evboxsync VBoxNetLockee *m_lck;
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync};
a1df400bbe9d64aad400442e56eb637019300a5evboxsync
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync# ifndef BASE_SERVICES_ONLY
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsyncclass VBoxNetBaseService: public VBoxNetHlpUDPService, public VBoxNetLockee
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync{
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsyncpublic:
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync VBoxNetBaseService(const std::string& aName, const std::string& aNetworkName);
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync virtual ~VBoxNetBaseService();
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync int parseArgs(int argc, char **argv);
a1df400bbe9d64aad400442e56eb637019300a5evboxsync int tryGoOnline(void);
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync void shutdown(void);
a1df400bbe9d64aad400442e56eb637019300a5evboxsync int syncEnter();
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync int syncLeave();
a1df400bbe9d64aad400442e56eb637019300a5evboxsync int waitForIntNetEvent(int cMillis);
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync int sendBufferOnWire(PCINTNETSEG pSg, int cSg, size_t cbBuffer);
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync void flushWire();
ca3da10d05961c339b5180fbd40a54587d6bad35vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int hlpUDPBroadcast(unsigned uSrcPort, unsigned uDstPort,
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void const *pvData, size_t cbData) const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual void usage(void) = 0;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int parseOpt(int rc, const RTGETOPTUNION& getOptVal) = 0;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int processFrame(void *, size_t) = 0;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int processGSO(PCPDMNETWORKGSO, size_t) = 0;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int processUDP(void *, size_t) = 0;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual int init(void);
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync virtual int run(void);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync virtual bool isMainNeeded() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsyncprotected:
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync const std::string getName() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setName(const std::string&);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync const std::string getNetwork() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setNetwork(const std::string&);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync const RTMAC getMacAddress() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setMacAddress(const RTMAC&);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync const RTNETADDRIPV4 getIpv4Address() const;
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync void setIpv4Address(const RTNETADDRIPV4&);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync const RTNETADDRIPV4 getIpv4Netmask() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setIpv4Netmask(const RTNETADDRIPV4&);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync uint32_t getSendBufSize() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setSendBufSize(uint32_t);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync uint32_t getRecvBufSize() const;
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync void setRecvBufSize(uint32_t);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync int32_t getVerbosityLevel() const;
aa4bcf0a4b2db3ac352b56a291d49cb8d4b66d32vboxsync void setVerbosityLevel(int32_t);
7d80dfbe5d66fc4c6de6fe109ce96a081496dcd4vboxsync
void addCommandLineOption(const PRTGETOPTDEF);
/**
* Print debug message depending on the m_cVerbosity level.
*
* @param iMinLevel The minimum m_cVerbosity level for this message.
* @param fMsg Whether to dump parts for the current DHCP message.
* @param pszFmt The message format string.
* @param ... Optional arguments.
*/
void debugPrint(int32_t iMinLevel, bool fMsg, const char *pszFmt, ...) const;
virtual void debugPrintV(int32_t iMinLevel, bool fMsg, const char *pszFmt, va_list va) const;
private:
void doReceiveLoop();
/** starts receiving thread and enter event polling loop. */
int startReceiveThreadAndEnterEventLoop();
protected:
/* VirtualBox instance */
ComPtr<IVirtualBox> virtualbox;
private:
struct Data;
Data *m;
private:
PRTGETOPTDEF getOptionsPtr();
};
# endif
#endif