Annotation of embedaddon/ipsec-tools/src/libipsec/ipsec_set_policy.3, revision 1.1.1.1
1.1 misho 1: .\" $NetBSD: ipsec_set_policy.3,v 1.15 2010/03/05 06:47:58 tteras Exp $
2: .\"
3: .\" $KAME: ipsec_set_policy.3,v 1.16 2003/01/06 21:59:03 sumikawa Exp $
4: .\"
5: .\" Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
6: .\" All rights reserved.
7: .\"
8: .\" Redistribution and use in source and binary forms, with or without
9: .\" modification, are permitted provided that the following conditions
10: .\" are met:
11: .\" 1. Redistributions of source code must retain the above copyright
12: .\" notice, this list of conditions and the following disclaimer.
13: .\" 2. Redistributions in binary form must reproduce the above copyright
14: .\" notice, this list of conditions and the following disclaimer in the
15: .\" documentation and/or other materials provided with the distribution.
16: .\" 3. Neither the name of the project nor the names of its contributors
17: .\" may be used to endorse or promote products derived from this software
18: .\" without specific prior written permission.
19: .\"
20: .\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
21: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
24: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30: .\" SUCH DAMAGE.
31: .\"
32: .Dd May 5, 1998
33: .Dt IPSEC_SET_POLICY 3
34: .Os
35: .Sh NAME
36: .Nm ipsec_set_policy ,
37: .Nm ipsec_get_policylen ,
38: .Nm ipsec_dump_policy
39: .Nd manipulate IPsec policy specification structure from human-readable policy string
40: .\"
41: .Sh LIBRARY
42: .Lb libipsec
43: .Sh SYNOPSIS
44: .In netinet6/ipsec.h
45: .Ft "char *"
46: .Fn ipsec_set_policy "char *policy" "int len"
47: .Ft int
48: .Fn ipsec_get_policylen "char *buf"
49: .Ft "char *"
50: .Fn ipsec_dump_policy "char *buf" "char *delim"
51: .Sh DESCRIPTION
52: .Fn ipsec_set_policy
53: generates an IPsec policy specification structure, namely
54: .Li struct sadb_x_policy
55: and/or
56: .Li struct sadb_x_ipsecrequest
57: from a human-readable policy specification.
58: The policy specification must be given as a C string
59: .Fa policy
60: and its length
61: .Fa len .
62: .Fn ipsec_set_policy
63: will return a buffer with the corresponding IPsec policy specification structure.
64: The buffer is dynamically allocated, and must be
65: .Xr free 3 Ap d
66: by the caller.
67: .Pp
68: You can get the length of the generated buffer with
69: .Fn ipsec_get_policylen
70: (i.e. for calling
71: .Xr setsockopt 2 ) .
72: .Pp
73: .Fn ipsec_dump_policy
74: converts an IPsec policy structure into human-readable form.
75: Therefore,
76: .Fn ipsec_dump_policy
77: can be regarded as the inverse function to
78: .Fn ipsec_set_policy .
79: .Fa buf
80: points to an IPsec policy structure,
81: .Li struct sadb_x_policy .
82: .Fa delim
83: is a delimiter string, which is usually a blank character.
84: If you set
85: .Fa delim
86: to
87: .Dv NULL ,
88: a single whitespace is assumed.
89: .Fn ipsec_dump_policy
90: returns a pointer to a dynamically allocated string.
91: It is the caller's responsibility to
92: .Xr free 3
93: it.
94: .Pp
95: .Fa policy
96: is formatted as either of the following:
97: .Bl -tag -width "discard"
98: .It Ar direction [priority specification] Li discard
99: .Ar direction
100: must be
101: .Li in ,
102: .Li out ,
103: or
104: .Li fwd .
105: .Ar direction
106: specifies in which direction the policy needs to be applied.
107: The non-standard direction
108: .Li fwd
109: is substituted with
110: .Li in
111: on platforms which do not support forward policies.
112: .Pp
113: .Ar priority specification
114: is used to control the placement of the policy within the SPD.
115: The policy position is determined by
116: a signed integer where higher priorities indicate the policy is placed
117: closer to the beginning of the list and lower priorities indicate the
118: policy is placed closer to the end of the list.
119: Policies with equal
120: priorities are added at the end of the group of such policies.
121: .Pp
122: Priority can only
123: be specified when libipsec has been compiled against kernel headers that
124: support policy priorities (Linux \*[Gt]= 2.6.6).
125: It takes one of the following formats:
126: .Bl -tag -width "discard"
127: .It Ar {priority,prio} offset
128: .Ar offset
129: is an integer in the range \-2147483647..214783648.
130: .It Ar {priority,prio} base {+,-} offset
131: .Ar base
132: is either
133: .Li low (-1073741824) ,
134: .Li def (0) ,
135: or
136: .Li high (1073741824) .
137: .Pp
138: .Ar offset
139: is an unsigned integer.
140: It can be up to 1073741824 for
141: positive offsets, and up to 1073741823 for negative offsets.
142: .El
143: .Pp
144: The interpretation of policy priority in these functions and the
145: kernel DOES differ.
146: The relationship between the two can be described as
147: p(kernel) = 0x80000000 - p(func)
148: .Pp
149: With
150: .Li discard
151: policy, packets will be dropped if they match the policy.
152: .It Ar direction [priority specification] Li entrust
153: .Li entrust
154: means to consult the SPD defined by
155: .Xr setkey 8 .
156: .It Ar direction [priority specification] Li bypass
157: .Li bypass
158: means to bypass the IPsec processing.
159: .Pq the packet will be transmitted in clear .
160: This is for privileged sockets.
161: .It Ar direction Bo Ar priority specification Bc Li ipsec Ar request ...
162: .Li ipsec
163: means that the matching packets are subject to IPsec processing.
164: .Li ipsec
165: can be followed by one or more
166: .Ar request
167: strings, which are formatted as below:
168: .Bl -tag -width "discard"
169: .It Ar protocol Li / Ar mode Li / Ar src Li - Ar dst Op Ar /level
170: .Ar protocol
171: is either
172: .Li ah ,
173: .Li esp ,
174: or
175: .Li ipcomp .
176: .Pp
177: .Ar mode
178: is either
179: .Li transport
180: or
181: .Li tunnel .
182: .Pp
183: .Ar src
184: and
185: .Ar dst
186: specifies the IPsec endpoint.
187: .Ar src
188: always means the
189: .Dq sending node
190: and
191: .Ar dst
192: always means the
193: .Dq receiving node .
194: Therefore, when
195: .Ar direction
196: is
197: .Li in ,
198: .Ar dst
199: is this node
200: and
201: .Ar src
202: is the other node
203: .Pq peer .
204: If
205: .Ar mode
206: is
207: .Li transport ,
208: Both
209: .Ar src
210: and
211: .Ar dst
212: can be omitted.
213: .Pp
214: .Ar level
215: must be set to one of the following:
216: .Li default , use , require ,
217: or
218: .Li unique .
219: .Li default
220: means that the kernel should consult the system default policy
221: defined by
222: .Xr sysctl 8 ,
223: such as
224: .Li net.inet.ipsec.esp_trans_deflev .
225: See
226: .Xr ipsec 4
227: regarding the system default.
228: .Li use
229: means that a relevant SA can be used when available,
230: since the kernel may perform IPsec operation against packets when possible.
231: In this case, packets can be transmitted in clear
232: .Pq when SA is not available ,
233: or encrypted
234: .Pq when SA is available .
235: .Li require
236: means that a relevant SA is required,
237: since the kernel must perform IPsec operation against packets.
238: .Li unique
239: is the same as
240: .Li require ,
241: but adds the restriction that the SA for outbound traffic is used
242: only for this policy.
243: You may need the identifier in order to relate the policy and the SA
244: when you define the SA by manual keying.
245: You can put the decimal number as the identifier after
246: .Li unique
247: like
248: .Li unique : number .
249: .Li number
250: must be between 1 and 32767 .
251: If the
252: .Ar request
253: string is kept unambiguous,
254: .Ar level
255: and slash prior to
256: .Ar level
257: can be omitted.
258: However, it is encouraged to specify them explicitly
259: to avoid unintended behavior.
260: If
261: .Ar level
262: is omitted, it will be interpreted as
263: .Li default .
264: .El
265: .Pp
266: Note that there are slight differences to the specification of
267: .Xr setkey 8 .
268: In the specification of
269: .Xr setkey 8 ,
270: both
271: .Li entrust
272: and
273: .Li bypass
274: are not used.
275: Refer to
276: .Xr setkey 8
277: for details.
278: .Pp
279: Here are several examples
280: .Pq long lines are wrapped for readability :
281: .Bd -literal -offset indent
282: in discard
283: out ipsec esp/transport//require
284: in ipsec ah/transport//require
285: out ipsec esp/tunnel/10.1.1.2-10.1.1.1/use
286: in ipsec ipcomp/transport//use
287: esp/transport//use
288: .Ed
289: .El
290: .Sh RETURN VALUES
291: .Fn ipsec_set_policy
292: returns a pointer to the allocated buffer with the policy specification
293: if successful; otherwise a
294: .Dv NULL
295: pointer is returned.
296: .Fn ipsec_get_policylen
297: returns a positive value
298: .Pq meaning the buffer size
299: on success, and a negative value on errors.
300: .Fn ipsec_dump_policy
301: returns a pointer to a dynamically allocated region on success,
302: and
303: .Dv NULL
304: on errors.
305: .Sh SEE ALSO
306: .Xr ipsec_strerror 3 ,
307: .Xr ipsec 4 ,
308: .Xr setkey 8
309: .Sh HISTORY
310: The functions first appeared in the WIDE/KAME IPv6 protocol stack kit.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>