VirtualBox

source: vbox/trunk/src/VBox/Main/include/netif.h@ 107044

Last change on this file since 107044 was 106061, checked in by vboxsync, 2 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/* $Id: netif.h 106061 2024-09-16 14:03:52Z vboxsync $ */
2/** @file
3 * Main - Network Interfaces.
4 */
5
6/*
7 * Copyright (C) 2008-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_netif_h
29#define MAIN_INCLUDED_netif_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include <iprt/cdefs.h>
35#include <iprt/types.h>
36#include <iprt/net.h>
37/** @todo r=bird: The inlined code below that drags in asm.h here. I doubt
38 * speed is very important here, so move it into a .cpp file, please. */
39#include <iprt/asm.h>
40
41#ifndef RT_OS_WINDOWS
42# include <arpa/inet.h>
43# include <stdio.h>
44#endif /* !RT_OS_WINDOWS */
45
46#ifdef RT_OS_LINUX
47# include <linux/version.h>
48# if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) /* proc_ns introduced */
49# define VBOXNETFLT_LINUX_NAMESPACE_SUPPORT
50# endif
51#endif
52
53#define VBOXNET_IPV4ADDR_DEFAULT 0x0138A8C0 /* 192.168.56.1 */
54#define VBOXNET_IPV4MASK_DEFAULT "255.255.255.0"
55
56#define VBOXNET_MAX_SHORT_NAME 50
57
58#if 1
59/**
60 * Encapsulation type.
61 * @note Must match HostNetworkInterfaceMediumType_T exactly.
62 * @todo r=bird: Why are we duplicating HostNetworkInterfaceMediumType_T here?!?
63 */
64typedef enum NETIFTYPE
65{
66 NETIF_T_UNKNOWN,
67 NETIF_T_ETHERNET,
68 NETIF_T_PPP,
69 NETIF_T_SLIP
70} NETIFTYPE;
71
72/**
73 * Current state of the interface.
74 * @note Must match HostNetworkInterfaceStatus_T exactly.
75 * @todo r=bird: Why are we duplicating HostNetworkInterfaceStatus_T here?!?
76 */
77typedef enum NETIFSTATUS
78{
79 NETIF_S_UNKNOWN,
80 NETIF_S_UP,
81 NETIF_S_DOWN
82} NETIFSTATUS;
83
84/**
85 * Host Network Interface Information.
86 */
87typedef struct NETIFINFO
88{
89 NETIFINFO *pNext;
90 RTNETADDRIPV4 IPAddress;
91 RTNETADDRIPV4 IPNetMask;
92 RTNETADDRIPV6 IPv6Address;
93 RTNETADDRIPV6 IPv6NetMask;
94 BOOL fDhcpEnabled;
95 BOOL fIsDefault;
96 BOOL fWireless;
97 RTMAC MACAddress;
98 NETIFTYPE enmMediumType;
99 NETIFSTATUS enmStatus;
100 uint32_t uSpeedMbits;
101 RTUUID Uuid;
102 char szShortName[VBOXNET_MAX_SHORT_NAME];
103 char szName[1];
104} NETIFINFO;
105
106/** Pointer to a network interface info. */
107typedef NETIFINFO *PNETIFINFO;
108/** Pointer to a const network interface info. */
109typedef NETIFINFO const *PCNETIFINFO;
110#endif
111
112int NetIfList(std::list <ComObjPtr<HostNetworkInterface> > &list);
113int NetIfEnableStaticIpConfig(VirtualBox *pVBox, HostNetworkInterface * pIf, ULONG aOldIp, ULONG aNewIp, ULONG aMask);
114int NetIfEnableStaticIpConfigV6(VirtualBox *pVBox, HostNetworkInterface *pIf, const Utf8Str &aOldIPV6Address, const Utf8Str &aIPV6Address, ULONG aIPV6MaskPrefixLength);
115int NetIfEnableDynamicIpConfig(VirtualBox *pVBox, HostNetworkInterface * pIf);
116#ifdef RT_OS_WINDOWS
117int NetIfCreateHostOnlyNetworkInterface(VirtualBox *pVBox, IHostNetworkInterface **aHostNetworkInterface, IProgress **aProgress,
118 IN_BSTR bstrName = NULL);
119#else
120int NetIfCreateHostOnlyNetworkInterface(VirtualBox *pVBox, IHostNetworkInterface **aHostNetworkInterface, IProgress **aProgress,
121 const char *pszName = NULL);
122#endif
123int NetIfRemoveHostOnlyNetworkInterface(VirtualBox *pVBox, const Guid &aId, IProgress **aProgress);
124int NetIfGetConfig(HostNetworkInterface * pIf, NETIFINFO *);
125int NetIfGetConfigByName(PNETIFINFO pInfo);
126int NetIfGetState(const char *pcszIfName, NETIFSTATUS *penmState);
127int NetIfGetLinkSpeed(const char *pcszIfName, uint32_t *puMbits);
128int NetIfDhcpRediscover(VirtualBox *pVBox, HostNetworkInterface * pIf);
129int NetIfAdpCtlOut(const char *pszName, const char *pszCmd, char *pszBuffer, size_t cBufSize);
130
131DECLINLINE(Bstr) getDefaultIPv4Address(Bstr bstrIfName)
132{
133 /* Get the index from the name */
134 Utf8Str strTmp = bstrIfName;
135 const char *pcszIfName = strTmp.c_str();
136 size_t iPos = strcspn(pcszIfName, "0123456789");
137 uint32_t uInstance = 0;
138 if (pcszIfName[iPos])
139 uInstance = RTStrToUInt32(pcszIfName + iPos);
140
141 in_addr tmp;
142#if defined(RT_OS_WINDOWS)
143 tmp.S_un.S_addr = VBOXNET_IPV4ADDR_DEFAULT + (uInstance << 16);
144#else
145 tmp.s_addr = VBOXNET_IPV4ADDR_DEFAULT + (uInstance << 16);
146#endif
147 char *addr = inet_ntoa(tmp);
148 return Bstr(addr);
149}
150
151#endif /* !MAIN_INCLUDED_netif_h */
152/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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