VirtualBox

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

Last change on this file since 25800 was 23082, checked in by vboxsync, 15 years ago

VBoxNetAdp: Darwin: fix missing vboxNetAdpFindByName, use common code, drop useless code.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.4 KB
Line 
1/* $Id: VBoxNetAdpInternal.h 23082 2009-09-17 11:00:13Z vboxsync $ */
2/** @file
3 * VBoxNetAdp - Network Filter Driver (Host), Internal Header.
4 */
5
6/*
7 * Copyright (C) 2008 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ___VBoxNetAdpInternal_h___
23#define ___VBoxNetAdpInternal_h___
24
25#include <VBox/sup.h>
26#include <VBox/intnet.h>
27#include <iprt/semaphore.h>
28#include <iprt/assert.h>
29
30
31RT_C_DECLS_BEGIN
32
33/** Pointer to the globals. */
34typedef struct VBOXNETADPGLOBALS *PVBOXNETADPGLOBALS;
35
36#define VBOXNETADP_MAX_INSTANCES 8
37#define VBOXNETADP_NAME "vboxnet"
38#define VBOXNETADP_MAX_NAME_LEN 32
39#define VBOXNETADP_MTU 1500
40#if defined(RT_OS_DARWIN)
41# define VBOXNETADP_MAX_FAMILIES 4
42# define VBOXNETADP_DETACH_TIMEOUT 500
43#endif
44
45#define VBOXNETADP_CTL_DEV_NAME "vboxnetctl"
46#define VBOXNETADP_CTL_ADD _IOR('v', 1, VBOXNETADPREQ)
47#define VBOXNETADP_CTL_REMOVE _IOW('v', 2, VBOXNETADPREQ)
48
49typedef struct VBoxNetAdpReq
50{
51 char szName[VBOXNETADP_MAX_NAME_LEN];
52} VBOXNETADPREQ;
53typedef VBOXNETADPREQ *PVBOXNETADPREQ;
54
55/**
56 * Void entries mark vacant slots in adapter array. Valid entries are busy slots.
57 * As soon as slot is being modified its state changes to transitional.
58 * An entry in transitional state must only be accessed by the thread that
59 * put it to this state.
60 */
61/**
62 * To avoid races on adapter fields we stick to the following rules:
63 * - rewrite: Int net port calls are serialized
64 * - No modifications are allowed on busy adapters (deactivate first)
65 * Refuse to destroy adapter until it gets to available state
66 * - No transfers (thus getting busy) on inactive adapters
67 * - Init sequence: void->available->connected->active
68 1) Create
69 2) Connect
70 3) Activate
71 * - Destruction sequence: active->connected->available->void
72 1) Deactivate
73 2) Disconnect
74 3) Destroy
75*/
76
77enum VBoxNetAdpState
78{
79 kVBoxNetAdpState_Invalid,
80 kVBoxNetAdpState_Transitional,
81 kVBoxNetAdpState_Active,
82 kVBoxNetAdpState_U32Hack = 0xFFFFFFFF
83};
84typedef enum VBoxNetAdpState VBOXNETADPSTATE;
85
86struct VBoxNetAdapter
87{
88 /** Denotes availability of this slot in adapter array. */
89 VBOXNETADPSTATE enmState;
90 /** Corresponds to the digit at the end of device name. */
91 uint32_t uUnit;
92
93 union
94 {
95#ifdef VBOXNETADP_OS_SPECFIC
96 struct
97 {
98# if defined(RT_OS_DARWIN)
99 /** @name Darwin instance data.
100 * @{ */
101 /** Event to signal detachment of interface. */
102 RTSEMEVENT hEvtDetached;
103 /** Pointer to Darwin interface structure. */
104 ifnet_t pIface;
105 /** MAC address. */
106 RTMAC Mac;
107 /** Protocol families attached to this adapter. */
108 protocol_family_t aAttachedFamilies[VBOXNETADP_MAX_FAMILIES];
109 /** @} */
110# elif defined(RT_OS_LINUX)
111 /** @name Darwin instance data.
112 * @{ */
113 /** Pointer to Linux network device structure. */
114 struct net_device *pNetDev;
115 /** @} */
116# elif defined(RT_OS_FREEBSD)
117 /** @name FreeBSD instance data.
118 * @{ */
119 struct ifnet *ifp;
120 /** @} */
121# else
122# error PORTME
123# endif
124 } s;
125#endif
126 /** Padding. */
127#if defined(RT_OS_WINDOWS)
128# if defined(VBOX_NETFLT_ONDEMAND_BIND)
129 uint8_t abPadding[192];
130# else
131 uint8_t abPadding[1024];
132# endif
133#elif defined(RT_OS_LINUX)
134 uint8_t abPadding[64];
135#else
136 uint8_t abPadding[64];
137#endif
138 } u;
139 /** The interface name. */
140 char szName[VBOXNETADP_MAX_NAME_LEN];
141};
142typedef struct VBoxNetAdapter VBOXNETADP;
143typedef VBOXNETADP *PVBOXNETADP;
144
145DECLHIDDEN(int) vboxNetAdpInit(void);
146DECLHIDDEN(void) vboxNetAdpShutdown(void);
147DECLHIDDEN(int) vboxNetAdpCreate (PVBOXNETADP *ppNew);
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