VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/NetLib/utils.h@ 65754

Last change on this file since 65754 was 64215, checked in by vboxsync, 8 years ago

VBoxNetDHCP: Tell guests to use NAT Network DNS proxy as nameserver if
the host has only loopback nameserver that cannot be mapped to the
guests (e.g. dnsmaskq running on 127.0.1.1).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.2 KB
Line 
1/* $Id: utils.h 64215 2016-10-12 02:05:31Z vboxsync $ */
2/** @file
3 * ComHostUtils.cpp
4 */
5
6/*
7 * Copyright (C) 2013-2016 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/*******************************************************************************
19* Header Files *
20*******************************************************************************/
21#ifndef _NETLIB_UTILS_H_
22#define _NETLIB_UTILS_H_
23
24#include "cpp/utils.h"
25
26typedef ComPtr<IVirtualBox> ComVirtualBoxPtr;
27typedef ComPtr<IVirtualBoxClient> ComVirtualBoxClientPtr;
28typedef ComPtr<IDHCPServer> ComDhcpServerPtr;
29typedef ComPtr<IHost> ComHostPtr;
30typedef ComPtr<INATNetwork> ComNatPtr;
31typedef com::SafeArray<BSTR> ComBstrArray;
32
33typedef std::vector<RTNETADDRIPV4> AddressList;
34typedef std::map<RTNETADDRIPV4, int> AddressToOffsetMapping;
35
36
37inline bool isDhcpRequired(const ComNatPtr& nat)
38{
39 BOOL fNeedDhcpServer = false;
40 if (FAILED(nat->COMGETTER(NeedDhcpServer)(&fNeedDhcpServer)))
41 return false;
42
43 return RT_BOOL(fNeedDhcpServer);
44}
45
46
47inline int findDhcpServer(const ComVirtualBoxPtr& vbox, const std::string& name, ComDhcpServerPtr& dhcp)
48{
49 HRESULT hrc = vbox->FindDHCPServerByNetworkName(com::Bstr(name.c_str()).raw(),
50 dhcp.asOutParam());
51 AssertComRCReturn(hrc, VERR_NOT_FOUND);
52
53 return VINF_SUCCESS;
54}
55
56
57inline int findNatNetwork(const ComVirtualBoxPtr& vbox, const std::string& name, ComNatPtr& nat)
58{
59 HRESULT hrc = vbox->FindNATNetworkByName(com::Bstr(name.c_str()).raw(),
60 nat.asOutParam());
61
62 AssertComRCReturn(hrc, VERR_NOT_FOUND);
63
64 return VINF_SUCCESS;
65}
66
67
68inline RTNETADDRIPV4 networkid(const RTNETADDRIPV4& addr, const RTNETADDRIPV4& netmask)
69{
70 RTNETADDRIPV4 netid;
71 netid.u = addr.u & netmask.u;
72 return netid;
73}
74
75
76int localMappings(const ComNatPtr&, AddressToOffsetMapping&);
77int hostDnsSearchList(const ComHostPtr&, std::vector<std::string>&);
78int hostDnsDomain(const ComHostPtr&, std::string& domainStr);
79
80
81class NATNetworkEventAdapter
82{
83 public:
84 virtual HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent) = 0;
85};
86
87
88class NATNetworkListener
89{
90 public:
91 NATNetworkListener():m_pNAT(NULL){}
92
93 HRESULT init(NATNetworkEventAdapter *pNAT)
94 {
95 AssertPtrReturn(pNAT, E_INVALIDARG);
96
97 m_pNAT = pNAT;
98 return S_OK;
99 }
100
101 HRESULT init()
102 {
103 m_pNAT = NULL;
104 return S_OK;
105 }
106
107 void uninit() { m_pNAT = NULL; }
108
109 HRESULT HandleEvent(VBoxEventType_T aEventType, IEvent *pEvent)
110 {
111 if (m_pNAT)
112 return m_pNAT->HandleEvent(aEventType, pEvent);
113 else
114 return E_FAIL;
115 }
116
117 private:
118 NATNetworkEventAdapter *m_pNAT;
119};
120typedef ListenerImpl<NATNetworkListener, NATNetworkEventAdapter*> NATNetworkListenerImpl;
121
122# ifdef VBOX_WITH_XPCOM
123class NS_CLASSINFO_NAME(NATNetworkListenerImpl);
124# endif
125
126typedef ComPtr<NATNetworkListenerImpl> ComNatListenerPtr;
127typedef com::SafeArray<VBoxEventType_T> ComEventTypeArray;
128
129/* XXX: const is commented out because of compilation erro on Windows host, but it's intended that this function
130 isn't modify event type array */
131int createNatListener(ComNatListenerPtr& listener, const ComVirtualBoxPtr& vboxptr,
132 NATNetworkEventAdapter *adapter, /* const */ ComEventTypeArray& events);
133int destroyNatListener(ComNatListenerPtr& listener, const ComVirtualBoxPtr& vboxptr);
134int createClientListener(ComNatListenerPtr& listener, const ComVirtualBoxClientPtr& vboxclientptr,
135 NATNetworkEventAdapter *adapter, /* const */ ComEventTypeArray& events);
136int destroyClientListener(ComNatListenerPtr& listener, const ComVirtualBoxClientPtr& vboxclientptr);
137
138#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