1/*- 2 * Copyright (c) 2006-2009 University of Zagreb 3 * Copyright (c) 2006-2009 FreeBSD Foundation 4 * All rights reserved. 5 * 6 * This software was developed by the University of Zagreb and the 7 * FreeBSD Foundation under sponsorship by the Stichting NLnet and the 8 * FreeBSD Foundation. --- 18 unchanged lines hidden (view full) --- 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * |
35 * $FreeBSD: head/sys/net/vnet.h 215701 2010-11-22 19:32:54Z dim $ |
36 */ 37 38/*- 39 * This header file defines several sets of interfaces supporting virtualized 40 * network stacks: 41 * 42 * - Definition of 'struct vnet' and functions and macros to allocate/free/ 43 * manipulate it. --- 46 unchanged lines hidden (view full) --- 90#include <sys/proc.h> /* for struct thread */ 91#include <sys/rwlock.h> 92#include <sys/sx.h> 93 94/* 95 * Location of the kernel's 'set_vnet' linker set. 96 */ 97extern uintptr_t *__start_set_vnet; |
98__GLOBL(__start_set_vnet); |
99extern uintptr_t *__stop_set_vnet; |
100__GLOBL(__stop_set_vnet); |
101 102#define VNET_START (uintptr_t)&__start_set_vnet 103#define VNET_STOP (uintptr_t)&__stop_set_vnet 104 105/* 106 * Functions to allocate and destroy virtual network stacks. 107 */ 108struct vnet *vnet_alloc(void); --- 81 unchanged lines hidden (view full) --- 190#define VNET_FOREACH(arg) LIST_FOREACH((arg), &vnet_head, vnet_le) 191 192/* 193 * Virtual network stack memory allocator, which allows global variables to 194 * be automatically instantiated for each network stack instance. 195 */ 196#define VNET_NAME(n) vnet_entry_##n 197#define VNET_DECLARE(t, n) extern t VNET_NAME(n) |
198#define VNET_DEFINE(t, n) t VNET_NAME(n) __section(VNET_SETNAME) __used 199#define _VNET_PTR(b, n) (__typeof(VNET_NAME(n))*) \ 200 ((b) + (uintptr_t)&VNET_NAME(n)) |
201 202#define _VNET(b, n) (*_VNET_PTR(b, n)) 203 204/* 205 * Virtualized global variable accessor macros. 206 */ 207#define VNET_VNET_PTR(vnet, n) _VNET_PTR((vnet)->vnet_data_base, n) 208#define VNET_VNET(vnet, n) (*VNET_VNET_PTR((vnet), n)) --- 157 unchanged lines hidden (view full) --- 366#define CRED_TO_VNET(cr) NULL 367#define TD_TO_VNET(td) NULL 368#define P_TO_VNET(p) NULL 369 370/* 371 * Versions of the VNET macros that compile to normal global variables and 372 * standard sysctl definitions. 373 */ |
374#define VNET_NAME(n) n 375#define VNET_DECLARE(t, n) extern t n 376#define VNET_DEFINE(t, n) t n 377#define _VNET_PTR(b, n) &VNET_NAME(n) |
378 379/* 380 * Virtualized global variable accessor macros. 381 */ 382#define VNET_VNET_PTR(vnet, n) (&(n)) 383#define VNET_VNET(vnet, n) (n) 384 385#define VNET_PTR(n) (&(n)) --- 45 unchanged lines hidden --- |