VBoxNetBaseService.h revision 2e2dec6e64c09dd7e3fe4ad0ee8bb5cf7d63762e
181e56d8b348d301d615ccf5465ae600fee2867berikabele/* $Id$ */
181e56d8b348d301d615ccf5465ae600fee2867berikabele/** @file
181e56d8b348d301d615ccf5465ae600fee2867berikabele * VBoxNetUDP - IntNet Client Library.
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele/*
5a58787efeb02a1c3f06569d019ad81fd2efa06end * Copyright (C) 2009-2011 Oracle Corporation
5a58787efeb02a1c3f06569d019ad81fd2efa06end *
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * This file is part of VirtualBox Open Source Edition (OSE), as
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * available from http://www.virtualbox.org. This file is free software;
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * you can redistribute it and/or modify it under the terms of the GNU
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * General Public License (GPL) as published by the Free Software
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * Foundation, in version 2 as it comes in the "COPYING" file of the
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5a58787efeb02a1c3f06569d019ad81fd2efa06end */
d229f940abfb2490dee17979e9a5ff31b7012eb5rbowen
3f08db06526d6901aa08c110b5bc7dde6bc39905nd#ifndef ___VBoxNetBaseService_h___
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim#define ___VBoxNetBaseService_h___
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim
5a58787efeb02a1c3f06569d019ad81fd2efa06end#include <iprt/critsect.h>
3f08db06526d6901aa08c110b5bc7dde6bc39905ndclass VBoxNetBaseService
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd{
7add1372edb1ee95a2c4d1314df4c7567bda7c62jimpublic:
af84459fbf938e508fd10b01cb8d699c79083813takashi VBoxNetBaseService();
7f5b59ccc63c0c0e3e678a168f09ee6a2f51f9d0nd virtual ~VBoxNetBaseService();
f3ec420152ca921e4c1ce77782f51b53f659018dnd int parseArgs(int argc, char **argv);
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung int tryGoOnline(void);
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd void shutdown(void);
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd int syncEnter() { return RTCritSectEnter(&this->m_csThis);}
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele int syncLeave() { return RTCritSectLeave(&this->m_csThis);}
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim int waitForIntNetEvent(int cMillis);
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele int sendBufferOnWire(PCINTNETSEG pSg, int cSg, size_t cbBuffer);
5a58787efeb02a1c3f06569d019ad81fd2efa06end void flushWire();
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim virtual void usage(void) = 0;
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim virtual int run(void) = 0;
709e3a21ba73b8433462959cd56c773454b34441trawick virtual int parseOpt(int rc, const RTGETOPTUNION& getOptVal) = 0;
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim virtual int init(void);
5a58787efeb02a1c3f06569d019ad81fd2efa06end
5a58787efeb02a1c3f06569d019ad81fd2efa06end /* VirtualBox instance */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele ComPtr<IVirtualBox> virtualbox;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele
7add1372edb1ee95a2c4d1314df4c7567bda7c62jimprotected:
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele /**
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * Print debug message depending on the m_cVerbosity level.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim *
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele * @param iMinLevel The minimum m_cVerbosity level for this message.
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele * @param fMsg Whether to dump parts for the current DHCP message.
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim * @param pszFmt The message format string.
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele * @param ... Optional arguments.
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele */
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim void debugPrint(int32_t iMinLevel, bool fMsg, const char *pszFmt, ...) const
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim {
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim if (iMinLevel <= m_cVerbosity)
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele {
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele va_list va;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele va_start(va, pszFmt);
dfc515decf0e3a5a980ec4e06af4eb76d4a95440rbowen debugPrintV(iMinLevel, fMsg, pszFmt, va);
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele va_end(va);
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele }
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim }
5a58787efeb02a1c3f06569d019ad81fd2efa06end
5a58787efeb02a1c3f06569d019ad81fd2efa06end virtual void debugPrintV(int32_t iMinLevel, bool fMsg, const char *pszFmt, va_list va) const;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele /** @name The server configuration data members.
709e3a21ba73b8433462959cd56c773454b34441trawick * @{ */
57d0156f7bbd9ea3a72342cf9912aba61d118702rbowen std::string m_Name;
57d0156f7bbd9ea3a72342cf9912aba61d118702rbowen std::string m_Network;
dfc515decf0e3a5a980ec4e06af4eb76d4a95440rbowen std::string m_TrunkName;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele INTNETTRUNKTYPE m_enmTrunkType;
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim RTMAC m_MacAddress;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele RTNETADDRIPV4 m_Ipv4Address;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele RTNETADDRIPV4 m_Ipv4Netmask;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele /** @} */
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim /** @name The network interface
5a58787efeb02a1c3f06569d019ad81fd2efa06end * @{ */
5a58787efeb02a1c3f06569d019ad81fd2efa06end PSUPDRVSESSION m_pSession;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele uint32_t m_cbSendBuf;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele uint32_t m_cbRecvBuf;
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim INTNETIFHANDLE m_hIf; /**< The handle to the network interface. */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele PINTNETBUF m_pIfBuf; /**< Interface buffer. */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele std::vector<PRTGETOPTDEF> m_vecOptionDefs;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele /** @} */
dfc515decf0e3a5a980ec4e06af4eb76d4a95440rbowen /** @name Debug stuff
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele * @{ */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele int32_t m_cVerbosity;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabeleprivate:
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele PRTGETOPTDEF getOptionsPtr();
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele
dfc515decf0e3a5a980ec4e06af4eb76d4a95440rbowen /* cs for syncing */
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele RTCRITSECT m_csThis;
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele
c8e71fab0ea4bc3f8cb07693d6917f6b4644fbdcerikabele /** @} */
7add1372edb1ee95a2c4d1314df4c7567bda7c62jim};
87ffb6e33f3cbef3b9bb406cc2d27039fa336eaatrawick#endif
709e3a21ba73b8433462959cd56c773454b34441trawick