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