proper thread cancellation when using the charon->interfaces
[strongswan.git] / src / libfreeswan / ipsec_tunnel.h
1 /*
2 * IPSEC tunneling code
3 * Copyright (C) 1996, 1997 John Ioannidis.
4 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Richard Guy Briggs.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * for more details.
15 *
16 * RCSID $Id: ipsec_tunnel.h,v 1.1 2004/03/15 20:35:25 as Exp $
17 */
18
19
20 #ifdef NET_21
21 # define DEV_QUEUE_XMIT(skb, device, pri) {\
22 skb->dev = device; \
23 neigh_compat_output(skb); \
24 /* skb->dst->output(skb); */ \
25 }
26 # define ICMP_SEND(skb_in, type, code, info, dev) \
27 icmp_send(skb_in, type, code, htonl(info))
28 # define IP_SEND(skb, dev) \
29 ip_send(skb);
30 #else /* NET_21 */
31 # define DEV_QUEUE_XMIT(skb, device, pri) {\
32 dev_queue_xmit(skb, device, pri); \
33 }
34 # define ICMP_SEND(skb_in, type, code, info, dev) \
35 icmp_send(skb_in, type, code, info, dev)
36 # define IP_SEND(skb, dev) \
37 if(ntohs(iph->tot_len) > physmtu) { \
38 ip_fragment(NULL, skb, dev, 0); \
39 ipsec_kfree_skb(skb); \
40 } else { \
41 dev_queue_xmit(skb, dev, SOPRI_NORMAL); \
42 }
43 #endif /* NET_21 */
44
45
46 /*
47 * Heavily based on drivers/net/new_tunnel.c. Lots
48 * of ideas also taken from the 2.1.x version of drivers/net/shaper.c
49 */
50
51 struct ipsectunnelconf
52 {
53 __u32 cf_cmd;
54 union
55 {
56 char cfu_name[12];
57 } cf_u;
58 #define cf_name cf_u.cfu_name
59 };
60
61 #define IPSEC_SET_DEV (SIOCDEVPRIVATE)
62 #define IPSEC_DEL_DEV (SIOCDEVPRIVATE + 1)
63 #define IPSEC_CLR_DEV (SIOCDEVPRIVATE + 2)
64
65 #ifdef __KERNEL__
66 #include <linux/version.h>
67 #ifndef KERNEL_VERSION
68 # define KERNEL_VERSION(x,y,z) (((x)<<16)+((y)<<8)+(z))
69 #endif
70 struct ipsecpriv
71 {
72 struct sk_buff_head sendq;
73 struct device *dev;
74 struct wait_queue *wait_queue;
75 char locked;
76 int (*hard_start_xmit) (struct sk_buff *skb,
77 struct device *dev);
78 int (*hard_header) (struct sk_buff *skb,
79 struct device *dev,
80 unsigned short type,
81 void *daddr,
82 void *saddr,
83 unsigned len);
84 #ifdef NET_21
85 int (*rebuild_header)(struct sk_buff *skb);
86 #else /* NET_21 */
87 int (*rebuild_header)(void *buff, struct device *dev,
88 unsigned long raddr, struct sk_buff *skb);
89 #endif /* NET_21 */
90 int (*set_mac_address)(struct device *dev, void *addr);
91 #ifndef NET_21
92 void (*header_cache_bind)(struct hh_cache **hhp, struct device *dev,
93 unsigned short htype, __u32 daddr);
94 #endif /* !NET_21 */
95 void (*header_cache_update)(struct hh_cache *hh, struct device *dev, unsigned char * haddr);
96 struct net_device_stats *(*get_stats)(struct device *dev);
97 struct net_device_stats mystats;
98 int mtu; /* What is the desired MTU? */
99 };
100
101 extern char ipsec_tunnel_c_version[];
102
103 extern struct device *ipsecdevices[IPSEC_NUM_IF];
104
105 int ipsec_tunnel_init_devices(void);
106
107 /* void */ int ipsec_tunnel_cleanup_devices(void);
108
109 extern /* void */ int ipsec_init(void);
110
111 extern int ipsec_tunnel_start_xmit(struct sk_buff *skb, struct device *dev);
112
113 #ifdef CONFIG_IPSEC_DEBUG
114 extern int debug_tunnel;
115 extern int sysctl_ipsec_debug_verbose;
116 #endif /* CONFIG_IPSEC_DEBUG */
117 #endif /* __KERNEL__ */
118
119 #ifdef CONFIG_IPSEC_DEBUG
120 #define DB_TN_INIT 0x0001
121 #define DB_TN_PROCFS 0x0002
122 #define DB_TN_XMIT 0x0010
123 #define DB_TN_OHDR 0x0020
124 #define DB_TN_CROUT 0x0040
125 #define DB_TN_OXFS 0x0080
126 #define DB_TN_REVEC 0x0100
127 #endif /* CONFIG_IPSEC_DEBUG */
128
129 /*
130 * $Log: ipsec_tunnel.h,v $
131 * Revision 1.1 2004/03/15 20:35:25 as
132 * added files from freeswan-2.04-x509-1.5.3
133 *
134 * Revision 1.28 2003/06/24 20:22:32 mcr
135 * added new global: ipsecdevices[] so that we can keep track of
136 * the ipsecX devices. They will be referenced with dev_hold(),
137 * so 2.2 may need this as well.
138 *
139 * Revision 1.27 2003/04/03 17:38:09 rgb
140 * Centralised ipsec_kfree_skb and ipsec_dev_{get,put}.
141 *
142 * Revision 1.26 2003/02/12 19:32:20 rgb
143 * Updated copyright year.
144 *
145 * Revision 1.25 2002/05/27 18:56:07 rgb
146 * Convert to dynamic ipsec device allocation.
147 *
148 * Revision 1.24 2002/04/24 07:36:48 mcr
149 * Moved from ./klips/net/ipsec/ipsec_tunnel.h,v
150 *
151 * Revision 1.23 2001/11/06 19:50:44 rgb
152 * Moved IP_SEND, ICMP_SEND, DEV_QUEUE_XMIT macros to ipsec_tunnel.h for
153 * use also by pfkey_v2_parser.c
154 *
155 * Revision 1.22 2001/09/15 16:24:05 rgb
156 * Re-inject first and last HOLD packet when an eroute REPLACE is done.
157 *
158 * Revision 1.21 2001/06/14 19:35:10 rgb
159 * Update copyright date.
160 *
161 * Revision 1.20 2000/09/15 11:37:02 rgb
162 * Merge in heavily modified Svenning Soerensen's <svenning@post5.tele.dk>
163 * IPCOMP zlib deflate code.
164 *
165 * Revision 1.19 2000/09/08 19:12:56 rgb
166 * Change references from DEBUG_IPSEC to CONFIG_IPSEC_DEBUG.
167 *
168 * Revision 1.18 2000/07/28 13:50:54 rgb
169 * Changed enet_statistics to net_device_stats and added back compatibility
170 * for pre-2.1.19.
171 *
172 * Revision 1.17 1999/11/19 01:12:15 rgb
173 * Purge unneeded proc_info prototypes, now that static linking uses
174 * dynamic proc_info registration.
175 *
176 * Revision 1.16 1999/11/18 18:51:00 rgb
177 * Changed all device registrations for static linking to
178 * dynamic to reduce the number and size of patches.
179 *
180 * Revision 1.15 1999/11/18 04:14:21 rgb
181 * Replaced all kernel version macros to shorter, readable form.
182 * Added CONFIG_PROC_FS compiler directives in case it is shut off.
183 * Added Marc Boucher's 2.3.25 proc patches.
184 *
185 * Revision 1.14 1999/05/25 02:50:10 rgb
186 * Fix kernel version macros for 2.0.x static linking.
187 *
188 * Revision 1.13 1999/05/25 02:41:06 rgb
189 * Add ipsec_klipsdebug support for static linking.
190 *
191 * Revision 1.12 1999/05/05 22:02:32 rgb
192 * Add a quick and dirty port to 2.2 kernels by Marc Boucher <marc@mbsi.ca>.
193 *
194 * Revision 1.11 1999/04/29 15:19:50 rgb
195 * Add return values to init and cleanup functions.
196 *
197 * Revision 1.10 1999/04/16 16:02:39 rgb
198 * Bump up macro to 4 ipsec I/Fs.
199 *
200 * Revision 1.9 1999/04/15 15:37:25 rgb
201 * Forward check changes from POST1_00 branch.
202 *
203 * Revision 1.5.2.1 1999/04/02 04:26:14 rgb
204 * Backcheck from HEAD, pre1.0.
205 *
206 * Revision 1.8 1999/04/11 00:29:01 henry
207 * GPL boilerplate
208 *
209 * Revision 1.7 1999/04/06 04:54:28 rgb
210 * Fix/Add RCSID Id: and Log: bits to make PHMDs happy. This includes
211 * patch shell fixes.
212 *
213 * Revision 1.6 1999/03/31 05:44:48 rgb
214 * Keep PMTU reduction private.
215 *
216 * Revision 1.5 1999/02/10 22:31:20 rgb
217 * Change rebuild_header member to reflect generality of link layer.
218 *
219 * Revision 1.4 1998/12/01 13:22:04 rgb
220 * Added support for debug printing of version info.
221 *
222 * Revision 1.3 1998/07/29 20:42:46 rgb
223 * Add a macro for clearing all tunnel devices.
224 * Rearrange structures and declarations for sharing with userspace.
225 *
226 * Revision 1.2 1998/06/25 20:01:45 rgb
227 * Make prototypes available for ipsec_init and ipsec proc_dir_entries
228 * for static linking.
229 *
230 * Revision 1.1 1998/06/18 21:27:50 henry
231 * move sources from klips/src to klips/net/ipsec, to keep stupid
232 * kernel-build scripts happier in the presence of symlinks
233 *
234 * Revision 1.3 1998/05/18 21:51:50 rgb
235 * Added macros for num of I/F's and a procfs debug switch.
236 *
237 * Revision 1.2 1998/04/21 21:29:09 rgb
238 * Rearrange debug switches to change on the fly debug output from user
239 * space. Only kernel changes checked in at this time. radij.c was also
240 * changed to temporarily remove buggy debugging code in rj_delete causing
241 * an OOPS and hence, netlink device open errors.
242 *
243 * Revision 1.1 1998/04/09 03:06:13 henry
244 * sources moved up from linux/net/ipsec
245 *
246 * Revision 1.1.1.1 1998/04/08 05:35:05 henry
247 * RGB's ipsec-0.8pre2.tar.gz ipsec-0.8
248 *
249 * Revision 0.5 1997/06/03 04:24:48 ji
250 * Added transport mode.
251 * Changed the way routing is done.
252 * Lots of bug fixes.
253 *
254 * Revision 0.4 1997/01/15 01:28:15 ji
255 * No changes.
256 *
257 * Revision 0.3 1996/11/20 14:39:04 ji
258 * Minor cleanups.
259 * Rationalized debugging code.
260 *
261 * Revision 0.2 1996/11/02 00:18:33 ji
262 * First limited release.
263 *
264 *
265 */