aboutsummaryrefslogtreecommitdiff
path: root/sys/netipsec/vipsec.h
blob: 4a643e5e0238eb8f6fb5f3214e373b547415bce3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
 * Copyright (c) 2007-2008 University of Zagreb
 * Copyright (c) 2007-2008 FreeBSD Foundation
 *
 * This software was developed by the University of Zagreb and the
 * FreeBSD Foundation under sponsorship by the Stichting NLnet and the
 * FreeBSD Foundation.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _NETIPSEC_VIPSEC_H_
#define _NETIPSEC_VIPSEC_H_

#include <sys/protosw.h>

#include <net/pfkeyv2.h>
#include <net/raw_cb.h>

#include <netipsec/ah_var.h>
#include <netipsec/esp_var.h>
#include <netipsec/ipcomp_var.h>
#include <netipsec/ipip_var.h>
#include <netipsec/ipsec.h>
#include <netipsec/keysock.h>

struct vnet_ipsec {
	int			_ipsec_debug;
	struct ipsecstat	_ipsec4stat;
	struct secpolicy 	_ip4_def_policy;

	int			_ip4_esp_trans_deflev;
	int			_ip4_esp_net_deflev;
	int			_ip4_ah_trans_deflev;
	int			_ip4_ah_net_deflev;
	int			_ip4_ah_offsetmask;
	int			_ip4_ipsec_dfbit;
	int			_ip4_ipsec_ecn;
	int			_ip4_ipsec_filtertunnel;
	int			_ip4_esp_randpad;

	int			_ipsec_replay;
	int			_ipsec_integrity;
	int			_crypto_support;

	u_int32_t		_key_debug_level;	
	u_int			_key_spi_trycnt;
	u_int32_t		_key_spi_minval;
	u_int32_t		_key_spi_maxval;  
	u_int32_t		_policy_id;
	u_int			_key_int_random;   
	u_int			_key_larval_lifetime; 
	int			_key_blockacq_count;
	int			_key_blockacq_lifetime;
	int			_key_preferred_oldsa;
	u_int32_t		_acq_seq;

	int			_esp_enable;
	struct espstat		_espstat;
	int			_esp_max_ivlen;
	int			_ipsec_esp_keymin;
	int			_ipsec_esp_auth;
	int			_ipsec_ah_keymin;
	int			_ipip_allow;
	struct ipipstat		_ipipstat;

	struct ipsecstat	_ipsec6stat;
	int			_ip6_esp_trans_deflev;
	int			_ip6_esp_net_deflev;
	int			_ip6_ah_trans_deflev;
	int			_ip6_ah_net_deflev;
	int			_ip6_ipsec_ecn;
	int			_ip6_ipsec6_filtertunnel;

	int			_ah_enable;
	int			_ah_cleartos;
	struct ahstat		_ahstat;

	int			_ipcomp_enable;
	struct ipcompstat	_ipcompstat;

	struct pfkeystat	_pfkeystat;
	struct key_cb		_key_cb;
	LIST_HEAD(, secpolicy)	_sptree[IPSEC_DIR_MAX];
	LIST_HEAD(, secashead)	_sahtree;
	LIST_HEAD(, secreg)	_regtree[SADB_SATYPE_MAX + 1];
	LIST_HEAD(, secacq)	_acqtree;
	LIST_HEAD(, secspacq)	_spacqtree;
};

/* Size guard. See sys/vimage.h. */
VIMAGE_CTASSERT(SIZEOF_vnet_ipsec, sizeof(struct vnet_ipsec));

#ifndef VIMAGE
#ifndef VIMAGE_GLOBALS
extern struct vnet_ipsec vnet_ipsec_0;
#endif
#endif

/*
 * Symbol translation macros
 */
#define	INIT_VNET_IPSEC(vnet) \
	INIT_FROM_VNET(vnet, VNET_MOD_IPSEC, struct vnet_ipsec, vnet_ipsec)

#define	VNET_IPSEC(sym)	VSYM(vnet_ipsec, sym)

#define	V_acq_seq			VNET_IPSEC(acq_seq)
#define	V_acqtree			VNET_IPSEC(acqtree)
#define	V_ah_cleartos			VNET_IPSEC(ah_cleartos)
#define	V_ah_enable			VNET_IPSEC(ah_enable)
#define	V_ahstat			VNET_IPSEC(ahstat)
#define	V_crypto_support		VNET_IPSEC(crypto_support)
#define	V_esp_enable			VNET_IPSEC(esp_enable)
#define	V_esp_max_ivlen			VNET_IPSEC(esp_max_ivlen)
#define	V_espstat			VNET_IPSEC(espstat)
#define	V_ip4_ah_net_deflev		VNET_IPSEC(ip4_ah_net_deflev)
#define	V_ip4_ah_offsetmask		VNET_IPSEC(ip4_ah_offsetmask)
#define	V_ip4_ah_trans_deflev		VNET_IPSEC(ip4_ah_trans_deflev)
#define	V_ip4_def_policy		VNET_IPSEC(ip4_def_policy)
#define	V_ip4_esp_net_deflev		VNET_IPSEC(ip4_esp_net_deflev)
#define	V_ip4_esp_randpad		VNET_IPSEC(ip4_esp_randpad)
#define	V_ip4_esp_trans_deflev		VNET_IPSEC(ip4_esp_trans_deflev)
#define	V_ip4_ipsec_dfbit		VNET_IPSEC(ip4_ipsec_dfbit)
#define	V_ip4_ipsec_ecn			VNET_IPSEC(ip4_ipsec_ecn)
#define	V_ip4_ipsec_filtertunnel	VNET_IPSEC(ip4_ipsec_filtertunnel)
#define	V_ip6_ah_net_deflev		VNET_IPSEC(ip6_ah_net_deflev)
#define	V_ip6_ah_trans_deflev		VNET_IPSEC(ip6_ah_trans_deflev)
#define	V_ip6_esp_net_deflev		VNET_IPSEC(ip6_esp_net_deflev)
#define	V_ip6_esp_randpad		VNET_IPSEC(ip6_esp_randpad)
#define	V_ip6_esp_trans_deflev		VNET_IPSEC(ip6_esp_trans_deflev)
#define	V_ip6_ipsec_ecn			VNET_IPSEC(ip6_ipsec_ecn)
#define	V_ip6_ipsec6_filtertunnel	VNET_IPSEC(ip6_ipsec6_filtertunnel)
#define	V_ipcomp_enable			VNET_IPSEC(ipcomp_enable)
#define	V_ipcompstat			VNET_IPSEC(ipcompstat)
#define	V_ipip_allow			VNET_IPSEC(ipip_allow)
#define	V_ipipstat			VNET_IPSEC(ipipstat)
#define	V_ipsec4stat			VNET_IPSEC(ipsec4stat)
#define	V_ipsec6stat			VNET_IPSEC(ipsec6stat)
#define	V_ipsec_ah_keymin		VNET_IPSEC(ipsec_ah_keymin)
#define	V_ipsec_debug			VNET_IPSEC(ipsec_debug)
#define	V_ipsec_esp_auth		VNET_IPSEC(ipsec_esp_auth)
#define	V_ipsec_esp_keymin		VNET_IPSEC(ipsec_esp_keymin)
#define	V_ipsec_integrity		VNET_IPSEC(ipsec_integrity)
#define	V_ipsec_replay			VNET_IPSEC(ipsec_replay)
#define	V_key_blockacq_count		VNET_IPSEC(key_blockacq_count)
#define	V_key_blockacq_lifetime		VNET_IPSEC(key_blockacq_lifetime)
#define	V_key_cb			VNET_IPSEC(key_cb)
#define	V_key_debug_level		VNET_IPSEC(key_debug_level)
#define	V_key_int_random		VNET_IPSEC(key_int_random)
#define	V_key_larval_lifetime		VNET_IPSEC(key_larval_lifetime)
#define	V_key_preferred_oldsa		VNET_IPSEC(key_preferred_oldsa)
#define	V_key_spi_maxval		VNET_IPSEC(key_spi_maxval)	
#define	V_key_spi_minval		VNET_IPSEC(key_spi_minval)
#define	V_key_spi_trycnt		VNET_IPSEC(key_spi_trycnt)
#define	V_pfkeystat			VNET_IPSEC(pfkeystat)
#define	V_policy_id			VNET_IPSEC(policy_id)
#define	V_regtree			VNET_IPSEC(regtree)
#define	V_sahtree			VNET_IPSEC(sahtree)
#define	V_spacqtree			VNET_IPSEC(spacqtree)
#define	V_sptree			VNET_IPSEC(sptree)

#endif /* !_NETIPSEC_VIPSEC_H_ */