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>