VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/NetLib/VBoxNetBaseService.h@ 49950

Last change on this file since 49950 was 49842, checked in by vboxsync, 11 years ago

DHCP/NAT and NAT are acting in the same manner: polling for events on main thread and waiting for packets on internal network on RECV thread. DHCP/Host-Only waits for packets on main thread.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.0 KB
Line 
1/* $Id: VBoxNetBaseService.h 49842 2013-12-09 13:49:46Z vboxsync $ */
2/** @file
3 * VBoxNetUDP - IntNet Client Library.
4 */
5
6/*
7 * Copyright (C) 2009-2011 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ___VBoxNetBaseService_h___
19#define ___VBoxNetBaseService_h___
20
21#include <iprt/critsect.h>
22
23
24class VBoxNetHlpUDPService
25{
26public:
27virtual int hlpUDPBroadcast(unsigned uSrcPort, unsigned uDstPort,
28 void const *pvData, size_t cbData) const = 0;
29};
30
31
32class VBoxNetLockee
33{
34public:
35 virtual int syncEnter() = 0;
36 virtual int syncLeave() = 0;
37};
38
39
40class VBoxNetALock
41{
42public:
43 VBoxNetALock(VBoxNetLockee *a_lck):m_lck(a_lck)
44 {
45 if (m_lck)
46 m_lck->syncEnter();
47 }
48
49 ~VBoxNetALock()
50 {
51 if (m_lck)
52 m_lck->syncLeave();
53 }
54
55private:
56 VBoxNetLockee *m_lck;
57};
58
59# ifndef BASE_SERVICES_ONLY
60class VBoxNetBaseService: public VBoxNetHlpUDPService, public VBoxNetLockee
61{
62public:
63 VBoxNetBaseService(const std::string& aName, const std::string& aNetworkName);
64 virtual ~VBoxNetBaseService();
65 int parseArgs(int argc, char **argv);
66 int tryGoOnline(void);
67 void shutdown(void);
68 int syncEnter();
69 int syncLeave();
70 int waitForIntNetEvent(int cMillis);
71 int sendBufferOnWire(PCINTNETSEG pSg, int cSg, size_t cbBuffer);
72 void flushWire();
73
74 virtual int hlpUDPBroadcast(unsigned uSrcPort, unsigned uDstPort,
75 void const *pvData, size_t cbData) const;
76 virtual void usage(void) = 0;
77 virtual int parseOpt(int rc, const RTGETOPTUNION& getOptVal) = 0;
78 virtual int processFrame(void *, size_t) = 0;
79 virtual int processGSO(PCPDMNETWORKGSO, size_t) = 0;
80 virtual int processUDP(void *, size_t) = 0;
81
82
83 virtual int init(void);
84 virtual int run(void);
85 virtual bool isMainNeeded() const;
86
87protected:
88 const std::string getName() const;
89 void setName(const std::string&);
90
91 const std::string getNetwork() const;
92 void setNetwork(const std::string&);
93
94 const RTMAC getMacAddress() const;
95 void setMacAddress(const RTMAC&);
96
97 const RTNETADDRIPV4 getIpv4Address() const;
98 void setIpv4Address(const RTNETADDRIPV4&);
99
100 const RTNETADDRIPV4 getIpv4Netmask() const;
101 void setIpv4Netmask(const RTNETADDRIPV4&);
102
103 uint32_t getSendBufSize() const;
104 void setSendBufSize(uint32_t);
105
106 uint32_t getRecvBufSize() const;
107 void setRecvBufSize(uint32_t);
108
109 int32_t getVerbosityLevel() const;
110 void setVerbosityLevel(int32_t);
111
112 void addCommandLineOption(const PRTGETOPTDEF);
113
114 /**
115 * Print debug message depending on the m_cVerbosity level.
116 *
117 * @param iMinLevel The minimum m_cVerbosity level for this message.
118 * @param fMsg Whether to dump parts for the current DHCP message.
119 * @param pszFmt The message format string.
120 * @param ... Optional arguments.
121 */
122 void debugPrint(int32_t iMinLevel, bool fMsg, const char *pszFmt, ...) const;
123 virtual void debugPrintV(int32_t iMinLevel, bool fMsg, const char *pszFmt, va_list va) const;
124
125 private:
126 void doReceiveLoop();
127
128 /** starts receiving thread and enter event polling loop. */
129 int startReceiveThreadAndEnterEventLoop();
130
131 protected:
132 /* VirtualBox instance */
133 ComPtr<IVirtualBox> virtualbox;
134
135 private:
136 struct Data;
137 Data *m;
138
139 private:
140 PRTGETOPTDEF getOptionsPtr();
141};
142# endif
143#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette