1829d1a776d2fc5124c1701da541079d0e17da6b3tuexen/*- 2829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2009-2010 Brad Penoff 3829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2009-2010 Humaira Kamal 4829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2011-2012 Irene Ruengeler 5829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Copyright (c) 2011-2012 Michael Tuexen 6829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * 7829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * All rights reserved. 8829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * 9829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * Redistribution and use in source and binary forms, with or without 10829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * modification, are permitted provided that the following conditions 11829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * are met: 12829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * 1. Redistributions of source code must retain the above copyright 13829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * notice, this list of conditions and the following disclaimer. 14829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * 2. Redistributions in binary form must reproduce the above copyright 15829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * notice, this list of conditions and the following disclaimer in the 16829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * documentation and/or other materials provided with the distribution. 17829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * 18829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28829d1a776d2fc5124c1701da541079d0e17da6b3tuexen * SUCH DAMAGE. 29829d1a776d2fc5124c1701da541079d0e17da6b3tuexen */ 30829d1a776d2fc5124c1701da541079d0e17da6b3tuexen 31bca1dae6587a640359abee04337c0463b0a3893tuexen#ifndef _USER_ENVIRONMENT_H_ 32bca1dae6587a640359abee04337c0463b0a3893tuexen#define _USER_ENVIRONMENT_H_ 33bca1dae6587a640359abee04337c0463b0a3893tuexen/* __Userspace__ */ 34bca1dae6587a640359abee04337c0463b0a3893tuexen#include <sys/types.h> 35bca1dae6587a640359abee04337c0463b0a3893tuexen 36bca1dae6587a640359abee04337c0463b0a3893tuexen#ifdef __Userspace_os_FreeBSD 37bca1dae6587a640359abee04337c0463b0a3893tuexen#ifndef _SYS_MUTEX_H_ 38bca1dae6587a640359abee04337c0463b0a3893tuexen#include <sys/mutex.h> 39bca1dae6587a640359abee04337c0463b0a3893tuexen#endif 40bca1dae6587a640359abee04337c0463b0a3893tuexen#endif 4105c94d0de60f87f8d9f350a0051ba0b59e7a2daftuexen#if defined (__Userspace_os_Windows) 4205c94d0de60f87f8d9f350a0051ba0b59e7a2daftuexen#include "netinet/sctp_os_userspace.h" 4305c94d0de60f87f8d9f350a0051ba0b59e7a2daftuexen#endif 44bca1dae6587a640359abee04337c0463b0a3893tuexen 45bca1dae6587a640359abee04337c0463b0a3893tuexen/* maxsockets is used in SCTP_ZONE_INIT call. It refers to 46bca1dae6587a640359abee04337c0463b0a3893tuexen * kern.ipc.maxsockets kernel environment variable. 4788c4269f510758d2e64c3759db1af9242ddc8208tuexen */ 48bca1dae6587a640359abee04337c0463b0a3893tuexenextern int maxsockets; 49bca1dae6587a640359abee04337c0463b0a3893tuexen 50bca1dae6587a640359abee04337c0463b0a3893tuexen/* int hz; is declared in sys/kern/subr_param.c and refers to kernel timer frequency. 51bca1dae6587a640359abee04337c0463b0a3893tuexen * See http://ivoras.sharanet.org/freebsd/vmware.html for additional info about kern.hz 5288c4269f510758d2e64c3759db1af9242ddc8208tuexen * hz is initialized in void init_param1(void) in that file. 53bca1dae6587a640359abee04337c0463b0a3893tuexen */ 54bca1dae6587a640359abee04337c0463b0a3893tuexenextern int hz; 55bca1dae6587a640359abee04337c0463b0a3893tuexen 56bca1dae6587a640359abee04337c0463b0a3893tuexen 57bca1dae6587a640359abee04337c0463b0a3893tuexen/* The following two ints define a range of available ephermal ports. */ 58bca1dae6587a640359abee04337c0463b0a3893tuexenextern int ipport_firstauto, ipport_lastauto; 59bca1dae6587a640359abee04337c0463b0a3893tuexen 60bca1dae6587a640359abee04337c0463b0a3893tuexen/* nmbclusters is used in sctp_usrreq.c (e.g., sctp_init). In the FreeBSD kernel, 61bca1dae6587a640359abee04337c0463b0a3893tuexen * this is 1024 + maxusers * 64. 62bca1dae6587a640359abee04337c0463b0a3893tuexen */ 63bca1dae6587a640359abee04337c0463b0a3893tuexenextern int nmbclusters; 64bca1dae6587a640359abee04337c0463b0a3893tuexen 6505c94d0de60f87f8d9f350a0051ba0b59e7a2daftuexen#if !defined (__Userspace_os_Windows) 66bca1dae6587a640359abee04337c0463b0a3893tuexen#define min(a,b) ((a)>(b)?(b):(a)) 67bca1dae6587a640359abee04337c0463b0a3893tuexen#define max(a,b) ((a)>(b)?(a):(b)) 6805c94d0de60f87f8d9f350a0051ba0b59e7a2daftuexen#endif 69bca1dae6587a640359abee04337c0463b0a3893tuexen 70bca1dae6587a640359abee04337c0463b0a3893tuexenextern int read_random(void *buf, int count); 71bca1dae6587a640359abee04337c0463b0a3893tuexen 72bca1dae6587a640359abee04337c0463b0a3893tuexen/* errno's may differ per OS. errno.h now included in sctp_os_userspace.h */ 73bca1dae6587a640359abee04337c0463b0a3893tuexen/* Source: /usr/src/sys/sys/errno.h */ 74bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define ENOSPC 28 */ /* No space left on device */ 75bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define ENOBUFS 55 */ /* No buffer space available */ 76bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define ENOMEM 12 */ /* Cannot allocate memory */ 77bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define EACCES 13 */ /* Permission denied */ 78bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define EFAULT 14 */ /* Bad address */ 79bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define EHOSTDOWN 64 */ /* Host is down */ 80bca1dae6587a640359abee04337c0463b0a3893tuexen/* #define EHOSTUNREACH 65 */ /* No route to host */ 81bca1dae6587a640359abee04337c0463b0a3893tuexen 82bca1dae6587a640359abee04337c0463b0a3893tuexen/* Source ip_output.c. extern'd in ip_var.h */ 83bca1dae6587a640359abee04337c0463b0a3893tuexenextern u_short ip_id; 84bca1dae6587a640359abee04337c0463b0a3893tuexen 85bca1dae6587a640359abee04337c0463b0a3893tuexen#if defined(__Userspace_os_Linux) 86bca1dae6587a640359abee04337c0463b0a3893tuexen#define IPV6_VERSION 0x60 87bca1dae6587a640359abee04337c0463b0a3893tuexen#endif 8888c4269f510758d2e64c3759db1af9242ddc8208tuexen#if defined(INVARIANTS) 89c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#define panic(args...) \ 90c7108437de5af4d0b9f9a24979710b39197ec6cetuexen do { \ 91c7108437de5af4d0b9f9a24979710b39197ec6cetuexen SCTP_PRINTF(args);\ 92c7108437de5af4d0b9f9a24979710b39197ec6cetuexen exit(1); \ 93bca1dae6587a640359abee04337c0463b0a3893tuexen} while (0) 9488c4269f510758d2e64c3759db1af9242ddc8208tuexen#endif 9588c4269f510758d2e64c3759db1af9242ddc8208tuexen 96c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#if defined(INVARIANTS) 97c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#define KASSERT(cond, args) \ 98c7108437de5af4d0b9f9a24979710b39197ec6cetuexen do { \ 99c7108437de5af4d0b9f9a24979710b39197ec6cetuexen if (!(cond)) { \ 100c7108437de5af4d0b9f9a24979710b39197ec6cetuexen printf args ;\ 101c7108437de5af4d0b9f9a24979710b39197ec6cetuexen exit(1); \ 102c7108437de5af4d0b9f9a24979710b39197ec6cetuexen } \ 103c7108437de5af4d0b9f9a24979710b39197ec6cetuexen } while (0) 104c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#else 105c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#define KASSERT(cond, args) 106c7108437de5af4d0b9f9a24979710b39197ec6cetuexen#endif 107c7108437de5af4d0b9f9a24979710b39197ec6cetuexen 108bca1dae6587a640359abee04337c0463b0a3893tuexen/* necessary for sctp_pcb.c */ 109bca1dae6587a640359abee04337c0463b0a3893tuexenextern int ip_defttl; 110bca1dae6587a640359abee04337c0463b0a3893tuexen 111bca1dae6587a640359abee04337c0463b0a3893tuexen 112bca1dae6587a640359abee04337c0463b0a3893tuexen/* dummy definitions used (temporarily?) for inpcb userspace port */ 113bca1dae6587a640359abee04337c0463b0a3893tuexen 114bca1dae6587a640359abee04337c0463b0a3893tuexen/* called in sctp_usrreq.c */ 115bca1dae6587a640359abee04337c0463b0a3893tuexen#define in6_sin_2_v4mapsin6(arg1, arg2) /* STUB */ 116bca1dae6587a640359abee04337c0463b0a3893tuexen 117bca1dae6587a640359abee04337c0463b0a3893tuexen#endif 118