VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h@ 76474

Last change on this file since 76474 was 69500, checked in by vboxsync, 7 years ago

*: scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.7 KB
Line 
1/* $Id: VBoxNetAdpInternal.h 69500 2017-10-28 15:14:05Z vboxsync $ */
2/** @file
3 * VBoxNetAdp - Network Filter Driver (Host), Internal Header.
4 */
5
6/*
7 * Copyright (C) 2008-2017 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 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___VBoxNetAdpInternal_h___
28#define ___VBoxNetAdpInternal_h___
29
30#include <VBox/sup.h>
31#include <VBox/intnet.h>
32#include <iprt/semaphore.h>
33#include <iprt/assert.h>
34
35
36RT_C_DECLS_BEGIN
37
38/** Pointer to the globals. */
39typedef struct VBOXNETADPGLOBALS *PVBOXNETADPGLOBALS;
40
41#define VBOXNETADP_MAX_INSTANCES 128
42#define VBOXNETADP_MAX_UNITS 128
43#define VBOXNETADP_NAME "vboxnet"
44#define VBOXNETADP_MAX_NAME_LEN 32
45#define VBOXNETADP_MTU 1500
46#if defined(RT_OS_DARWIN)
47# define VBOXNETADP_MAX_FAMILIES 4
48# define VBOXNETADP_DETACH_TIMEOUT 500
49#endif
50
51#define VBOXNETADP_CTL_DEV_NAME "vboxnetctl"
52#define VBOXNETADP_CTL_ADD _IOWR('v', 1, VBOXNETADPREQ)
53#define VBOXNETADP_CTL_REMOVE _IOW('v', 2, VBOXNETADPREQ)
54
55typedef struct VBoxNetAdpReq
56{
57 char szName[VBOXNETADP_MAX_NAME_LEN];
58} VBOXNETADPREQ;
59typedef VBOXNETADPREQ *PVBOXNETADPREQ;
60
61/**
62 * Void entries mark vacant slots in adapter array. Valid entries are busy slots.
63 * As soon as slot is being modified its state changes to transitional.
64 * An entry in transitional state must only be accessed by the thread that
65 * put it to this state.
66 */
67/**
68 * To avoid races on adapter fields we stick to the following rules:
69 * - rewrite: Int net port calls are serialized
70 * - No modifications are allowed on busy adapters (deactivate first)
71 * Refuse to destroy adapter until it gets to available state
72 * - No transfers (thus getting busy) on inactive adapters
73 * - Init sequence: void->available->connected->active
74 1) Create
75 2) Connect
76 3) Activate
77 * - Destruction sequence: active->connected->available->void
78 1) Deactivate
79 2) Disconnect
80 3) Destroy
81*/
82
83enum VBoxNetAdpState
84{
85 kVBoxNetAdpState_Invalid,
86 kVBoxNetAdpState_Transitional,
87 kVBoxNetAdpState_Active,
88 kVBoxNetAdpState_32BitHack = 0x7FFFFFFF
89};
90typedef enum VBoxNetAdpState VBOXNETADPSTATE;
91
92struct VBoxNetAdapter
93{
94 /** Denotes availability of this slot in adapter array. */
95 VBOXNETADPSTATE enmState;
96 /** Corresponds to the digit at the end of device name. */
97 int iUnit;
98
99 union
100 {
101#ifdef VBOXNETADP_OS_SPECFIC
102 struct
103 {
104# if defined(RT_OS_DARWIN)
105 /** @name Darwin instance data.
106 * @{ */
107 /** Event to signal detachment of interface. */
108 RTSEMEVENT hEvtDetached;
109 /** Pointer to Darwin interface structure. */
110 ifnet_t pIface;
111 /** MAC address. */
112 RTMAC Mac;
113 /** @} */
114# elif defined(RT_OS_LINUX)
115 /** @name Darwin instance data.
116 * @{ */
117 /** Pointer to Linux network device structure. */
118 struct net_device *pNetDev;
119 /** @} */
120# elif defined(RT_OS_FREEBSD)
121 /** @name FreeBSD instance data.
122 * @{ */
123 struct ifnet *ifp;
124 /** @} */
125# else
126# error PORTME
127# endif
128 } s;
129#endif
130 /** Union alignment to a pointer. */
131 void *pvAlign;
132 /** Padding. */
133 uint8_t abPadding[64];
134 } u;
135 /** The interface name. */
136 char szName[VBOXNETADP_MAX_NAME_LEN];
137};
138typedef struct VBoxNetAdapter VBOXNETADP;
139typedef VBOXNETADP *PVBOXNETADP;
140/* Paranoia checks for alignment and padding. */
141AssertCompileMemberAlignment(VBOXNETADP, u, ARCH_BITS/8);
142AssertCompileMemberAlignment(VBOXNETADP, szName, ARCH_BITS/8);
143AssertCompileMembersSameSize(VBOXNETADP, u, VBOXNETADP, u.abPadding);
144
145DECLHIDDEN(int) vboxNetAdpInit(void);
146DECLHIDDEN(void) vboxNetAdpShutdown(void);
147DECLHIDDEN(int) vboxNetAdpCreate(PVBOXNETADP *ppNew, const char *pcszName);
148DECLHIDDEN(int) vboxNetAdpDestroy(PVBOXNETADP pThis);
149DECLHIDDEN(PVBOXNETADP) vboxNetAdpFindByName(const char *pszName);
150DECLHIDDEN(void) vboxNetAdpComposeMACAddress(PVBOXNETADP pThis, PRTMAC pMac);
151
152
153/**
154 * This is called to perform OS-specific structure initializations.
155 *
156 * @return IPRT status code.
157 * @param pThis The new instance.
158 *
159 * @remarks Owns no locks.
160 */
161DECLHIDDEN(int) vboxNetAdpOsInit(PVBOXNETADP pThis);
162
163/**
164 * Counter part to vboxNetAdpOsCreate().
165 *
166 * @return IPRT status code.
167 * @param pThis The new instance.
168 *
169 * @remarks May own the semaphores for the global list, the network lock and the out-bound trunk port.
170 */
171DECLHIDDEN(void) vboxNetAdpOsDestroy(PVBOXNETADP pThis);
172
173/**
174 * This is called to attach to the actual host interface
175 * after linking the instance into the list.
176 *
177 * @return IPRT status code.
178 * @param pThis The new instance.
179 * @param pMac The MAC address to use for this instance.
180 *
181 * @remarks Owns no locks.
182 */
183DECLHIDDEN(int) vboxNetAdpOsCreate(PVBOXNETADP pThis, PCRTMAC pMac);
184
185
186
187RT_C_DECLS_END
188
189#endif
190
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