key.h revision 139823
1238104Sdes/*	$FreeBSD: head/sys/netipsec/key.h 139823 2005-01-07 01:45:51Z imp $	*/
2238104Sdes/*	$KAME: key.h,v 1.21 2001/07/27 03:51:30 itojun Exp $	*/
3238104Sdes
4238104Sdes/*-
5238104Sdes * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
6238104Sdes * All rights reserved.
7238104Sdes *
8238104Sdes * Redistribution and use in source and binary forms, with or without
9238104Sdes * modification, are permitted provided that the following conditions
10238104Sdes * are met:
11238104Sdes * 1. Redistributions of source code must retain the above copyright
12238104Sdes *    notice, this list of conditions and the following disclaimer.
13238104Sdes * 2. Redistributions in binary form must reproduce the above copyright
14238104Sdes *    notice, this list of conditions and the following disclaimer in the
15238104Sdes *    documentation and/or other materials provided with the distribution.
16238104Sdes * 3. Neither the name of the project nor the names of its contributors
17238104Sdes *    may be used to endorse or promote products derived from this software
18238104Sdes *    without specific prior written permission.
19238104Sdes *
20238104Sdes * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
21238104Sdes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22238104Sdes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23238104Sdes * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
24238104Sdes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25238104Sdes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26238104Sdes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27238104Sdes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28238104Sdes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29238104Sdes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30238104Sdes * SUCH DAMAGE.
31238104Sdes */
32238104Sdes
33238104Sdes#ifndef _NETIPSEC_KEY_H_
34238104Sdes#define _NETIPSEC_KEY_H_
35238104Sdes
36238104Sdes#ifdef _KERNEL
37238104Sdes
38238104Sdesstruct secpolicy;
39238104Sdesstruct secpolicyindex;
40238104Sdesstruct ipsecrequest;
41238104Sdesstruct secasvar;
42238104Sdesstruct sockaddr;
43238104Sdesstruct socket;
44238104Sdesstruct sadb_msg;
45238104Sdesstruct sadb_x_policy;
46238104Sdesstruct secasindex;
47238104Sdesunion sockaddr_union;
48238104Sdes
49238104Sdesextern void key_addref(struct secpolicy *sp);
50238104Sdesextern	int key_havesp(u_int dir);
51238104Sdesextern struct secpolicy *key_allocsp(struct secpolicyindex *, u_int,
52238104Sdes	const char*, int);
53238104Sdesextern struct secpolicy *key_allocsp2(u_int32_t spi, union sockaddr_union *dst,
54238104Sdes	u_int8_t proto, u_int dir, const char*, int);
55238104Sdesextern struct secpolicy *key_newsp(const char*, int);
56238104Sdesextern struct secpolicy *key_gettunnel(const struct sockaddr *,
57238104Sdes	const struct sockaddr *, const struct sockaddr *,
58238104Sdes	const struct sockaddr *, const char*, int);
59238104Sdes/* NB: prepend with _ for KAME IPv6 compatbility */
60238104Sdesextern void _key_freesp(struct secpolicy **, const char*, int);
61238104Sdes
62238104Sdes#define	KEY_ALLOCSP(spidx, dir)					\
63238104Sdes	key_allocsp(spidx, dir, __FILE__, __LINE__)
64238104Sdes#define	KEY_ALLOCSP2(spi, dst, proto, dir)			\
65238104Sdes	key_allocsp2(spi, dst, proto, dir, __FILE__, __LINE__)
66238104Sdes#define	KEY_NEWSP()						\
67238104Sdes	key_newsp(__FILE__, __LINE__)
68238104Sdes#define	KEY_GETTUNNEL(osrc, odst, isrc, idst)			\
69238104Sdes	key_gettunnel(osrc, odst, isrc, idst, __FILE__, __LINE__)
70238104Sdes#define	KEY_FREESP(spp)						\
71238104Sdes	_key_freesp(spp, __FILE__, __LINE__)
72238104Sdes
73238104Sdesextern struct secasvar *key_allocsa(union sockaddr_union *, u_int, u_int32_t,
74238104Sdes	const char*, int);
75238104Sdesextern void key_freesav(struct secasvar **, const char*, int);
76238104Sdes
77238104Sdes#define	KEY_ALLOCSA(dst, proto, spi)				\
78238104Sdes	key_allocsa(dst, proto, spi, __FILE__, __LINE__)
79238104Sdes#define	KEY_FREESAV(psav)					\
80238104Sdes	key_freesav(psav, __FILE__, __LINE__)
81238104Sdes
82238104Sdesextern void key_freeso __P((struct socket *));
83238104Sdesextern int key_checktunnelsanity __P((struct secasvar *, u_int,
84238104Sdes					caddr_t, caddr_t));
85238104Sdesextern int key_checkrequest
86238104Sdes	__P((struct ipsecrequest *isr, const struct secasindex *));
87238104Sdes
88238104Sdesextern struct secpolicy *key_msg2sp __P((struct sadb_x_policy *,
89238104Sdes	size_t, int *));
90238104Sdesextern struct mbuf *key_sp2msg __P((struct secpolicy *));
91238104Sdesextern int key_ismyaddr __P((struct sockaddr *));
92238104Sdesextern int key_spdacquire __P((struct secpolicy *));
93238104Sdesextern void key_timehandler __P((void));
94238104Sdesextern u_long key_random __P((void));
95238104Sdesextern void key_randomfill __P((void *, size_t));
96238104Sdesextern void key_freereg __P((struct socket *));
97238104Sdesextern int key_parse __P((struct mbuf *, struct socket *));
98238104Sdesextern void key_init __P((void));
99238104Sdesextern void key_sa_recordxfer __P((struct secasvar *, struct mbuf *));
100238104Sdesextern void key_sa_routechange __P((struct sockaddr *));
101238104Sdesextern void key_sa_stir_iv __P((struct secasvar *));
102238104Sdes
103238104Sdes#ifdef MALLOC_DECLARE
104238104SdesMALLOC_DECLARE(M_IPSEC_SA);
105238104SdesMALLOC_DECLARE(M_IPSEC_SAH);
106238104SdesMALLOC_DECLARE(M_IPSEC_SP);
107238104SdesMALLOC_DECLARE(M_IPSEC_SR);
108238104SdesMALLOC_DECLARE(M_IPSEC_MISC);
109238104SdesMALLOC_DECLARE(M_IPSEC_SAQ);
110238104SdesMALLOC_DECLARE(M_IPSEC_SAR);
111238104SdesMALLOC_DECLARE(M_IPSEC_INPCB);
112238104Sdes#endif /* MALLOC_DECLARE */
113238104Sdes
114238104Sdes#endif /* defined(_KERNEL) */
115238104Sdes#endif /* _NETIPSEC_KEY_H_ */
116238104Sdes