4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _NET_PFKEYV2_H
27 #define _NET_PFKEYV2_H
30 * Definitions and structures for PF_KEY version 2. See RFC 2367 for
31 * more details. SA == Security Association, which is what PF_KEY provides
32 * an API for managing.
40 #define PFKEYV2_REVISION 200109L
43 * Base PF_KEY message.
46 typedef struct sadb_msg
{
47 uint8_t sadb_msg_version
; /* Version, currently PF_KEY_V2 */
48 uint8_t sadb_msg_type
; /* ADD, UPDATE, etc. */
49 uint8_t sadb_msg_errno
; /* Error number from UNIX errno space */
50 uint8_t sadb_msg_satype
; /* ESP, AH, etc. */
51 uint16_t sadb_msg_len
; /* Length in 64-bit words. */
52 uint16_t sadb_msg_reserved
; /* must be zero */
54 * Use the reserved field for extended diagnostic information on errno
57 #define sadb_x_msg_diagnostic sadb_msg_reserved
58 /* Union is for guaranteeing 64-bit alignment. */
61 uint32_t sadb_x_msg_useq
; /* Set by originator */
62 uint32_t sadb_x_msg_upid
; /* Set by originator */
64 uint64_t sadb_x_msg_alignment
;
66 #define sadb_msg_seq sadb_x_msg_u.sadb_x_msg_actual.sadb_x_msg_useq
67 #define sadb_msg_pid sadb_x_msg_u.sadb_x_msg_actual.sadb_x_msg_upid
71 * Generic extension header.
74 typedef struct sadb_ext
{
76 /* Union is for guaranteeing 64-bit alignment. */
78 uint16_t sadb_x_ext_ulen
; /* In 64s, inclusive */
79 uint16_t sadb_x_ext_utype
; /* 0 is reserved */
81 uint64_t sadb_x_ext_alignment
;
83 #define sadb_ext_len sadb_x_ext_u.sadb_x_ext_actual.sadb_x_ext_ulen
84 #define sadb_ext_type sadb_x_ext_u.sadb_x_ext_actual.sadb_x_ext_utype
88 * Security Association information extension.
91 typedef struct sadb_sa
{
92 /* Union is for guaranteeing 64-bit alignment. */
95 uint16_t sadb_x_sa_ulen
;
96 uint16_t sadb_x_sa_uexttype
; /* ASSOCIATION */
97 uint32_t sadb_x_sa_uspi
; /* Sec. Param. Index */
99 uint64_t sadb_x_sa_alignment
;
101 #define sadb_sa_len sadb_x_sa_u.sadb_x_sa_uactual.sadb_x_sa_ulen
102 #define sadb_sa_exttype sadb_x_sa_u.sadb_x_sa_uactual.sadb_x_sa_uexttype
103 #define sadb_sa_spi sadb_x_sa_u.sadb_x_sa_uactual.sadb_x_sa_uspi
104 uint8_t sadb_sa_replay
; /* Replay counter */
105 uint8_t sadb_sa_state
; /* MATURE, DEAD, DYING, LARVAL */
106 uint8_t sadb_sa_auth
; /* Authentication algorithm */
107 uint8_t sadb_sa_encrypt
; /* Encryption algorithm */
108 uint32_t sadb_sa_flags
; /* SA flags. */
112 * SA Lifetime extension. Already 64-bit aligned thanks to uint64_t fields.
115 typedef struct sadb_lifetime
{
116 uint16_t sadb_lifetime_len
;
117 uint16_t sadb_lifetime_exttype
; /* SOFT, HARD, CURRENT */
118 uint32_t sadb_lifetime_allocations
;
119 uint64_t sadb_lifetime_bytes
;
120 uint64_t sadb_lifetime_addtime
; /* These fields are assumed to hold */
121 uint64_t sadb_lifetime_usetime
; /* >= sizeof (time_t). */
125 * SA address information.
128 typedef struct sadb_address
{
129 /* Union is for guaranteeing 64-bit alignment. */
132 uint16_t sadb_x_address_ulen
;
133 uint16_t sadb_x_address_uexttype
; /* SRC, DST, PROXY */
134 uint8_t sadb_x_address_uproto
; /* Proto for ports... */
135 uint8_t sadb_x_address_uprefixlen
; /* Prefix length. */
136 uint16_t sadb_x_address_ureserved
; /* Padding */
137 } sadb_x_address_actual
;
138 uint64_t sadb_x_address_alignment
;
140 #define sadb_address_len \
141 sadb_x_address_u.sadb_x_address_actual.sadb_x_address_ulen
142 #define sadb_address_exttype \
143 sadb_x_address_u.sadb_x_address_actual.sadb_x_address_uexttype
144 #define sadb_address_proto \
145 sadb_x_address_u.sadb_x_address_actual.sadb_x_address_uproto
146 #define sadb_address_prefixlen \
147 sadb_x_address_u.sadb_x_address_actual.sadb_x_address_uprefixlen
148 #define sadb_address_reserved \
149 sadb_x_address_u.sadb_x_address_actual.sadb_x_address_ureserved
150 /* Followed by a sockaddr structure which may contain ports. */
154 * SA key information.
157 typedef struct sadb_key
{
158 /* Union is for guaranteeing 64-bit alignment. */
161 uint16_t sadb_x_key_ulen
;
162 uint16_t sadb_x_key_uexttype
; /* AUTH, ENCRYPT */
163 uint16_t sadb_x_key_ubits
; /* Actual len (bits) */
164 uint16_t sadb_x_key_ureserved
;
166 uint64_t sadb_x_key_alignment
;
168 #define sadb_key_len sadb_x_key_u.sadb_x_key_actual.sadb_x_key_ulen
169 #define sadb_key_exttype sadb_x_key_u.sadb_x_key_actual.sadb_x_key_uexttype
170 #define sadb_key_bits sadb_x_key_u.sadb_x_key_actual.sadb_x_key_ubits
171 #define sadb_key_reserved sadb_x_key_u.sadb_x_key_actual.sadb_x_key_ureserved
172 /* Followed by actual key(s) in canonical (outbound proc.) order. */
176 * SA Identity information. Already 64-bit aligned thanks to uint64_t fields.
179 typedef struct sadb_ident
{
180 uint16_t sadb_ident_len
;
181 uint16_t sadb_ident_exttype
; /* SRC, DST, PROXY */
182 uint16_t sadb_ident_type
; /* FQDN, USER_FQDN, etc. */
183 uint16_t sadb_ident_reserved
; /* Padding */
184 uint64_t sadb_ident_id
; /* For userid, etc. */
185 /* Followed by an identity null-terminate C string if present. */
189 * SA sensitivity information. This is mostly useful on MLS systems.
192 typedef struct sadb_sens
{
193 /* Union is for guaranteeing 64-bit alignment. */
196 uint16_t sadb_x_sens_ulen
;
197 uint16_t sadb_x_sens_uexttype
; /* SENSITIVITY */
198 uint32_t sadb_x_sens_udpd
; /* Protection domain */
199 } sadb_x_sens_actual
;
200 uint64_t sadb_x_sens_alignment
;
202 #define sadb_sens_len sadb_x_sens_u.sadb_x_sens_actual.sadb_x_sens_ulen
203 #define sadb_sens_exttype sadb_x_sens_u.sadb_x_sens_actual.sadb_x_sens_uexttype
204 #define sadb_sens_dpd sadb_x_sens_u.sadb_x_sens_actual.sadb_x_sens_udpd
205 uint8_t sadb_sens_sens_level
;
206 uint8_t sadb_sens_sens_len
; /* 64-bit words */
207 uint8_t sadb_sens_integ_level
;
208 uint8_t sadb_sens_integ_len
; /* 64-bit words */
209 uint32_t sadb_x_sens_flags
;
211 * followed by two uint64_t arrays
212 * uint64_t sadb_sens_bitmap[sens_bitmap_len];
213 * uint64_t sadb_integ_bitmap[integ_bitmap_len];
218 * We recycled the formerly reserved word for flags.
221 #define sadb_sens_reserved sadb_x_sens_flags
223 #define SADB_X_SENS_IMPLICIT 0x1 /* implicit labelling */
224 #define SADB_X_SENS_UNLABELED 0x2 /* peer is unlabeled */
227 * a proposal extension. This is found in an ACQUIRE message, and it
228 * proposes what sort of SA the kernel would like to ACQUIRE.
231 /* First, a base structure... */
233 typedef struct sadb_x_propbase
{
234 uint16_t sadb_x_propb_len
;
235 uint16_t sadb_x_propb_exttype
; /* PROPOSAL, X_EPROP */
238 uint8_t sadb_x_propb_lenres_replay
;
239 uint8_t sadb_x_propb_lenres_eres
;
240 uint16_t sadb_x_propb_lenres_numecombs
;
241 } sadb_x_propb_lenres
;
243 uint8_t sadb_x_propb_oldres_replay
;
244 uint8_t sadb_x_propb_oldres_reserved
[3];
245 } sadb_x_propb_oldres
;
247 #define sadb_x_propb_replay \
248 sadb_x_propb_u.sadb_x_propb_lenres.sadb_x_propb_lenres_replay
249 #define sadb_x_propb_reserved \
250 sadb_x_propb_u.sadb_x_propb_oldres.sadb_x_propb_oldres_reserved
251 #define sadb_x_propb_ereserved \
252 sadb_x_propb_u.sadb_x_propb_lenres.sadb_x_propb_lenres_eres
253 #define sadb_x_propb_numecombs \
254 sadb_x_propb_u.sadb_x_propb_lenres.sadb_x_propb_lenres_numecombs
255 /* Followed by sadb_comb[] array or sadb_ecomb[] array. */
258 /* Now, the actual sadb_prop structure, which will have alignment in it! */
260 typedef struct sadb_prop
{
261 /* Union is for guaranteeing 64-bit alignment. */
263 sadb_x_propbase_t sadb_x_prop_actual
;
264 uint64_t sadb_x_prop_alignment
;
266 #define sadb_prop_len sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_len
267 #define sadb_prop_exttype sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_exttype
268 #define sadb_prop_replay sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_replay
269 #define sadb_prop_reserved \
270 sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_reserved
271 #define sadb_x_prop_ereserved \
272 sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_ereserved
273 #define sadb_x_prop_numecombs \
274 sadb_x_prop_u.sadb_x_prop_actual.sadb_x_propb_numecombs
278 * This is a proposed combination. Many of these can follow a proposal
279 * extension. Already 64-bit aligned thanks to uint64_t fields.
282 typedef struct sadb_comb
{
283 uint8_t sadb_comb_auth
; /* Authentication algorithm */
284 uint8_t sadb_comb_encrypt
; /* Encryption algorithm */
285 uint16_t sadb_comb_flags
; /* Comb. flags (e.g. PFS) */
286 uint16_t sadb_comb_auth_minbits
; /* Bit strengths for auth */
287 uint16_t sadb_comb_auth_maxbits
;
288 uint16_t sadb_comb_encrypt_minbits
; /* Bit strengths for encrypt */
289 uint16_t sadb_comb_encrypt_maxbits
;
290 uint32_t sadb_comb_reserved
;
291 uint32_t sadb_comb_soft_allocations
; /* Lifetime proposals for */
292 uint32_t sadb_comb_hard_allocations
; /* this combination. */
293 uint64_t sadb_comb_soft_bytes
;
294 uint64_t sadb_comb_hard_bytes
;
295 uint64_t sadb_comb_soft_addtime
;
296 uint64_t sadb_comb_hard_addtime
;
297 uint64_t sadb_comb_soft_usetime
;
298 uint64_t sadb_comb_hard_usetime
;
302 * An extended combination that can comprise of many SA types.
303 * A single combination has algorithms and SA types locked.
304 * These are represented by algorithm descriptors, the second structure
305 * in the list. For example, if the EACQUIRE requests AH(MD5) + ESP(DES/null)
306 * _or_ ESP(DES/MD5), it would have two combinations:
308 * COMB: algdes(AH, AUTH, MD5), algdes(ESP, CRYPT, DES)
309 * COMB: algdes(ESP, AUTH, MD5), algdes(ESP, CRYPT, DES)
311 * If an SA type supports an algorithm type, and there's no descriptor,
312 * assume it requires NONE, just like it were explicitly stated.
313 * (This includes ESP NULL encryption, BTW.)
315 * Already 64-bit aligned thanks to uint64_t fields.
318 typedef struct sadb_x_ecomb
{
319 uint8_t sadb_x_ecomb_numalgs
;
320 uint8_t sadb_x_ecomb_reserved
;
321 uint16_t sadb_x_ecomb_flags
; /* E.g. PFS? */
322 uint32_t sadb_x_ecomb_reserved2
;
323 uint32_t sadb_x_ecomb_soft_allocations
;
324 uint32_t sadb_x_ecomb_hard_allocations
;
325 uint64_t sadb_x_ecomb_soft_bytes
;
326 uint64_t sadb_x_ecomb_hard_bytes
;
327 uint64_t sadb_x_ecomb_soft_addtime
;
328 uint64_t sadb_x_ecomb_hard_addtime
;
329 uint64_t sadb_x_ecomb_soft_usetime
;
330 uint64_t sadb_x_ecomb_hard_usetime
;
333 typedef struct sadb_x_algdesc
{
334 /* Union is for guaranteeing 64-bit alignment. */
337 uint8_t sadb_x_algdesc_usatype
; /* ESP, AH, etc. */
338 uint8_t sadb_x_algdesc_ualgtype
; /* AUTH, CRYPT, COMP */
339 uint8_t sadb_x_algdesc_ualg
; /* 3DES, MD5, etc. */
340 uint8_t sadb_x_algdesc_ureserved
;
341 uint16_t sadb_x_algdesc_uminbits
; /* Bit strengths. */
342 uint16_t sadb_x_algdesc_umaxbits
;
343 } sadb_x_algdesc_actual
;
344 uint64_t sadb_x_algdesc_alignment
;
346 #define sadb_x_algdesc_satype \
347 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_usatype
348 #define sadb_x_algdesc_algtype \
349 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_ualgtype
350 #define sadb_x_algdesc_alg \
351 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_ualg
352 #define sadb_x_algdesc_reserved \
353 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_ureserved
354 #define sadb_x_algdesc_minbits \
355 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_uminbits
356 #define sadb_x_algdesc_maxbits \
357 sadb_x_algdesc_u.sadb_x_algdesc_actual.sadb_x_algdesc_umaxbits
361 * When key mgmt. registers with the kernel, the kernel will tell key mgmt.
362 * its supported algorithms.
365 typedef struct sadb_supported
{
366 /* Union is for guaranteeing 64-bit alignment. */
369 uint16_t sadb_x_supported_ulen
;
370 uint16_t sadb_x_supported_uexttype
;
371 uint32_t sadb_x_supported_ureserved
;
372 } sadb_x_supported_actual
;
373 uint64_t sadb_x_supported_alignment
;
374 } sadb_x_supported_u
;
375 #define sadb_supported_len \
376 sadb_x_supported_u.sadb_x_supported_actual.sadb_x_supported_ulen
377 #define sadb_supported_exttype \
378 sadb_x_supported_u.sadb_x_supported_actual.sadb_x_supported_uexttype
379 #define sadb_supported_reserved \
380 sadb_x_supported_u.sadb_x_supported_actual.sadb_x_supported_ureserved
383 /* First, a base structure... */
384 typedef struct sadb_x_algb
{
385 uint8_t sadb_x_algb_id
; /* Algorithm type. */
386 uint8_t sadb_x_algb_ivlen
; /* IV len, in bits */
387 uint16_t sadb_x_algb_minbits
; /* Min. key len (in bits) */
388 uint16_t sadb_x_algb_maxbits
; /* Max. key length */
390 uint16_t sadb_x_algb_ureserved
;
391 uint8_t sadb_x_algb_udefaults
[2];
394 #define sadb_x_algb_reserved sadb_x_algb_union.sadb_x_algb_ureserved
395 #define sadb_x_algb_increment sadb_x_algb_union.sadb_x_algb_udefaults[0]
396 #define sadb_x_algb_saltbits sadb_x_algb_union.sadb_x_algb_udefaults[1]
398 * alg_increment: the number of bits from a key length to the next
402 /* Now, the actual sadb_alg structure, which will have alignment in it. */
403 typedef struct sadb_alg
{
404 /* Union is for guaranteeing 64-bit alignment. */
406 sadb_x_algb_t sadb_x_alg_actual
;
407 uint64_t sadb_x_alg_alignment
;
409 #define sadb_alg_id sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_id
410 #define sadb_alg_ivlen sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_ivlen
411 #define sadb_alg_minbits sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_minbits
412 #define sadb_alg_maxbits sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_maxbits
413 #define sadb_alg_reserved sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_reserved
414 #define sadb_x_alg_increment \
415 sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_increment
416 #define sadb_x_alg_saltbits sadb_x_alg_u.sadb_x_alg_actual.sadb_x_algb_saltbits
420 * If key mgmt. needs an SPI in a range (including 0 to 0xFFFFFFFF), it
421 * asks the kernel with this extension in the SADB_GETSPI message.
424 typedef struct sadb_spirange
{
425 uint16_t sadb_spirange_len
;
426 uint16_t sadb_spirange_exttype
; /* SPI_RANGE */
427 uint32_t sadb_spirange_min
;
428 /* Union is for guaranteeing 64-bit alignment. */
431 uint32_t sadb_x_spirange_umax
;
432 uint32_t sadb_x_spirange_ureserved
;
433 } sadb_x_spirange_actual
;
434 uint64_t sadb_x_spirange_alignment
;
436 #define sadb_spirange_max \
437 sadb_x_spirange_u.sadb_x_spirange_actual.sadb_x_spirange_umax
438 #define sadb_spirange_reserved \
439 sadb_x_spirange_u.sadb_x_spirange_actual.sadb_x_spirange_ureserved
443 * For the "extended REGISTER" which'll tell the kernel to send me
444 * "extended ACQUIREs".
447 typedef struct sadb_x_ereg
{
448 /* Union is for guaranteeing 64-bit alignment. */
451 uint16_t sadb_x_ereg_ulen
;
452 uint16_t sadb_x_ereg_uexttype
; /* X_EREG */
453 /* Array of SA types, 0-terminated. */
454 uint8_t sadb_x_ereg_usatypes
[4];
455 } sadb_x_ereg_actual
;
456 uint64_t sadb_x_ereg_alignment
;
458 #define sadb_x_ereg_len \
459 sadb_x_ereg_u.sadb_x_ereg_actual.sadb_x_ereg_ulen
460 #define sadb_x_ereg_exttype \
461 sadb_x_ereg_u.sadb_x_ereg_actual.sadb_x_ereg_uexttype
462 #define sadb_x_ereg_satypes \
463 sadb_x_ereg_u.sadb_x_ereg_actual.sadb_x_ereg_usatypes
467 * For conveying a Key Management Cookie with SADB_GETSPI, SADB_ADD,
468 * SADB_ACQUIRE, or SADB_X_INVERSE_ACQUIRE.
471 typedef struct sadb_x_kmc
{
472 uint16_t sadb_x_kmc_len
;
473 uint16_t sadb_x_kmc_exttype
; /* X_KM_COOKIE */
474 uint32_t sadb_x_kmc_proto
; /* KM protocol */
477 uint32_t sadb_x_kmc_ucookie
; /* KMP-specific */
478 uint32_t sadb_x_kmc_ureserved
; /* Must be zero */
480 uint64_t sadb_x_kmc_alignment
;
482 #define sadb_x_kmc_cookie sadb_x_kmc_u.sadb_x_kmc_actual.sadb_x_kmc_ucookie
483 #define sadb_x_kmc_reserved sadb_x_kmc_u.sadb_x_kmc_actual.sadb_x_kmc_ureserved
486 typedef struct sadb_x_pair
{
488 /* Union is for guaranteeing 64-bit alignment. */
490 uint16_t sadb_x_pair_ulen
;
491 uint16_t sadb_x_pair_uexttype
;
492 uint32_t sadb_x_pair_uspi
; /* SPI of paired SA */
493 } sadb_x_pair_actual
;
494 uint64_t sadb_x_ext_alignment
;
496 #define sadb_x_pair_len sadb_x_pair_u.sadb_x_pair_actual.sadb_x_pair_ulen
497 #define sadb_x_pair_exttype \
498 sadb_x_pair_u.sadb_x_pair_actual.sadb_x_pair_uexttype
499 #define sadb_x_pair_spi sadb_x_pair_u.sadb_x_pair_actual.sadb_x_pair_uspi
503 * For the Sequence numbers to be used with SADB_DUMP, SADB_GET, SADB_UPDATE.
506 typedef struct sadb_x_replay_ctr
{
507 uint16_t sadb_x_rc_len
;
508 uint16_t sadb_x_rc_exttype
;
509 uint32_t sadb_x_rc_replay32
; /* For 240x SAs. */
510 uint64_t sadb_x_rc_replay64
; /* For 430x SAs. */
511 } sadb_x_replay_ctr_t
;
514 * For extended DUMP request. Dumps the SAs which were idle for
515 * longer than the timeout specified.
518 typedef struct sadb_x_edump
{
519 uint16_t sadb_x_edump_len
;
520 uint16_t sadb_x_edump_exttype
;
521 uint32_t sadb_x_edump_reserved
;
522 uint64_t sadb_x_edump_timeout
;
526 * Base message types.
529 #define SADB_RESERVED 0
530 #define SADB_GETSPI 1
531 #define SADB_UPDATE 2
533 #define SADB_DELETE 4
535 #define SADB_ACQUIRE 6
536 #define SADB_REGISTER 7
537 #define SADB_EXPIRE 8
539 #define SADB_DUMP 10 /* not used normally */
540 #define SADB_X_PROMISC 11
541 #define SADB_X_INVERSE_ACQUIRE 12
542 #define SADB_X_UPDATEPAIR 13
543 #define SADB_X_DELPAIR 14
544 #define SADB_X_DELPAIR_STATE 15
551 #define SADB_SAFLAGS_PFS 0x1 /* Perfect forward secrecy? */
552 #define SADB_SAFLAGS_NOREPLAY 0x2 /* Replay field NOT PRESENT. */
554 /* Below flags are used by this implementation. Grow from left-to-right. */
555 #define SADB_X_SAFLAGS_USED 0x80000000 /* SA used/not used */
556 #define SADB_X_SAFLAGS_UNIQUE 0x40000000 /* SA unique/reusable */
557 #define SADB_X_SAFLAGS_AALG1 0x20000000 /* Auth-alg specific flag 1 */
558 #define SADB_X_SAFLAGS_AALG2 0x10000000 /* Auth-alg specific flag 2 */
559 #define SADB_X_SAFLAGS_EALG1 0x8000000 /* Encr-alg specific flag 1 */
560 #define SADB_X_SAFLAGS_EALG2 0x4000000 /* Encr-alg specific flag 2 */
561 #define SADB_X_SAFLAGS_KM1 0x2000000 /* Key mgmt. specific flag 1 */
562 #define SADB_X_SAFLAGS_KM2 0x1000000 /* Key mgmt. specific flag 2 */
563 #define SADB_X_SAFLAGS_KM3 0x800000 /* Key mgmt. specific flag 3 */
564 #define SADB_X_SAFLAGS_KM4 0x400000 /* Key mgmt. specific flag 4 */
565 #define SADB_X_SAFLAGS_KRES1 0x200000 /* Reserved by the kernel */
566 #define SADB_X_SAFLAGS_NATT_LOC 0x100000 /* this has a natted src SA */
567 #define SADB_X_SAFLAGS_NATT_REM 0x80000 /* this has a natted dst SA */
568 #define SADB_X_SAFLAGS_KRES2 0x40000 /* Reserved by the kernel */
569 #define SADB_X_SAFLAGS_TUNNEL 0x20000 /* tunnel mode */
570 #define SADB_X_SAFLAGS_PAIRED 0x10000 /* inbound/outbound pair */
571 #define SADB_X_SAFLAGS_OUTBOUND 0x8000 /* SA direction bit */
572 #define SADB_X_SAFLAGS_INBOUND 0x4000 /* SA direction bit */
573 #define SADB_X_SAFLAGS_NATTED 0x1000 /* Local node is behind a NAT */
575 #define SADB_X_SAFLAGS_KRES \
576 SADB_X_SAFLAGS_KRES1 | SADB_X_SAFLAGS_KRES2
582 #define SADB_SASTATE_LARVAL 0
583 #define SADB_SASTATE_MATURE 1
584 #define SADB_SASTATE_DYING 2
585 #define SADB_SASTATE_DEAD 3
586 #define SADB_X_SASTATE_ACTIVE_ELSEWHERE 4
587 #define SADB_X_SASTATE_IDLE 5
588 #define SADB_X_SASTATE_ACTIVE 6
590 #define SADB_SASTATE_MAX 6
593 * SA type. Gaps are present in the number space because (for the time being)
594 * these types correspond to the SA types in the IPsec DOI document.
597 #define SADB_SATYPE_UNSPEC 0
598 #define SADB_SATYPE_AH 2 /* RFC-1826 */
599 #define SADB_SATYPE_ESP 3 /* RFC-1827 */
600 #define SADB_SATYPE_RSVP 5 /* RSVP Authentication */
601 #define SADB_SATYPE_OSPFV2 6 /* OSPFv2 Authentication */
602 #define SADB_SATYPE_RIPV2 7 /* RIPv2 Authentication */
603 #define SADB_SATYPE_MIP 8 /* Mobile IPv4 Authentication */
605 #define SADB_SATYPE_MAX 8
608 * Algorithm types. Gaps are present because (for the time being) these types
609 * correspond to the SA types in the IPsec DOI document.
611 * NOTE: These are numbered to play nice with the IPsec DOI. That's why
615 /* Authentication algorithms */
616 #define SADB_AALG_NONE 0
617 #define SADB_AALG_MD5HMAC 2
618 #define SADB_AALG_SHA1HMAC 3
619 #define SADB_AALG_SHA256HMAC 5
620 #define SADB_AALG_SHA384HMAC 6
621 #define SADB_AALG_SHA512HMAC 7
623 #define SADB_AALG_MAX 7
625 /* Encryption algorithms */
626 #define SADB_EALG_NONE 0
627 #define SADB_EALG_DESCBC 2
628 #define SADB_EALG_3DESCBC 3
629 #define SADB_EALG_BLOWFISH 7
630 #define SADB_EALG_NULL 11
631 #define SADB_EALG_AES 12
632 #define SADB_EALG_AES_CCM_8 14
633 #define SADB_EALG_AES_CCM_12 15
634 #define SADB_EALG_AES_CCM_16 16
635 #define SADB_EALG_AES_GCM_8 18
636 #define SADB_EALG_AES_GCM_12 19
637 #define SADB_EALG_AES_GCM_16 20
638 #define SADB_EALG_MAX 20
641 * Extension header values.
644 #define SADB_EXT_RESERVED 0
646 #define SADB_EXT_SA 1
647 #define SADB_EXT_LIFETIME_CURRENT 2
648 #define SADB_EXT_LIFETIME_HARD 3
649 #define SADB_EXT_LIFETIME_SOFT 4
650 #define SADB_EXT_ADDRESS_SRC 5
651 #define SADB_EXT_ADDRESS_DST 6
652 /* These two are synonyms. */
653 #define SADB_EXT_ADDRESS_PROXY 7
654 #define SADB_X_EXT_ADDRESS_INNER_SRC SADB_EXT_ADDRESS_PROXY
655 #define SADB_EXT_KEY_AUTH 8
656 #define SADB_EXT_KEY_ENCRYPT 9
657 #define SADB_EXT_IDENTITY_SRC 10
658 #define SADB_EXT_IDENTITY_DST 11
659 #define SADB_EXT_SENSITIVITY 12
660 #define SADB_EXT_PROPOSAL 13
661 #define SADB_EXT_SUPPORTED_AUTH 14
662 #define SADB_EXT_SUPPORTED_ENCRYPT 15
663 #define SADB_EXT_SPIRANGE 16
664 #define SADB_X_EXT_EREG 17
665 #define SADB_X_EXT_EPROP 18
666 #define SADB_X_EXT_KM_COOKIE 19
667 #define SADB_X_EXT_ADDRESS_NATT_LOC 20
668 #define SADB_X_EXT_ADDRESS_NATT_REM 21
669 #define SADB_X_EXT_ADDRESS_INNER_DST 22
670 #define SADB_X_EXT_PAIR 23
671 #define SADB_X_EXT_REPLAY_VALUE 24
672 #define SADB_X_EXT_EDUMP 25
673 #define SADB_X_EXT_LIFETIME_IDLE 26
674 #define SADB_X_EXT_OUTER_SENS 27
676 #define SADB_EXT_MAX 27
682 #define SADB_IDENTTYPE_RESERVED 0
685 * For PREFIX and ADDR_RANGE, use the AF of the PROXY if present, or the SRC
688 #define SADB_IDENTTYPE_PREFIX 1
689 #define SADB_IDENTTYPE_FQDN 2 /* Fully qualified domain name. */
690 #define SADB_IDENTTYPE_USER_FQDN 3 /* e.g. root@domain.com */
691 #define SADB_X_IDENTTYPE_DN 4 /* ASN.1 DER Distinguished Name. */
692 #define SADB_X_IDENTTYPE_GN 5 /* ASN.1 DER Generic Name. */
693 #define SADB_X_IDENTTYPE_KEY_ID 6 /* Generic KEY ID. */
694 #define SADB_X_IDENTTYPE_ADDR_RANGE 7
696 #define SADB_IDENTTYPE_MAX 7
699 * Protection DOI values for the SENSITIVITY extension. There are no values
700 * currently, so the MAX is the only non-zero value available.
703 #define SADB_DPD_NONE 0
705 #define SADB_DPD_MAX 1
708 * Diagnostic codes. These supplement error messages. Be sure to
709 * update libipsecutil's keysock_diag() if you change any of these.
712 #define SADB_X_DIAGNOSTIC_PRESET -1 /* Internal value. */
714 #define SADB_X_DIAGNOSTIC_NONE 0
716 #define SADB_X_DIAGNOSTIC_UNKNOWN_MSG 1
717 #define SADB_X_DIAGNOSTIC_UNKNOWN_EXT 2
718 #define SADB_X_DIAGNOSTIC_BAD_EXTLEN 3
719 #define SADB_X_DIAGNOSTIC_UNKNOWN_SATYPE 4
720 #define SADB_X_DIAGNOSTIC_SATYPE_NEEDED 5
721 #define SADB_X_DIAGNOSTIC_NO_SADBS 6
722 #define SADB_X_DIAGNOSTIC_NO_EXT 7
723 /* Bad address family value */
724 #define SADB_X_DIAGNOSTIC_BAD_SRC_AF 8
725 /* in sockaddr->sa_family. */
726 #define SADB_X_DIAGNOSTIC_BAD_DST_AF 9
727 /* These two are synonyms. */
728 #define SADB_X_DIAGNOSTIC_BAD_PROXY_AF 10
729 #define SADB_X_DIAGNOSTIC_BAD_INNER_SRC_AF 10
731 #define SADB_X_DIAGNOSTIC_AF_MISMATCH 11
733 #define SADB_X_DIAGNOSTIC_BAD_SRC 12
734 #define SADB_X_DIAGNOSTIC_BAD_DST 13
736 #define SADB_X_DIAGNOSTIC_ALLOC_HSERR 14
737 #define SADB_X_DIAGNOSTIC_BYTES_HSERR 15
738 #define SADB_X_DIAGNOSTIC_ADDTIME_HSERR 16
739 #define SADB_X_DIAGNOSTIC_USETIME_HSERR 17
741 #define SADB_X_DIAGNOSTIC_MISSING_SRC 18
742 #define SADB_X_DIAGNOSTIC_MISSING_DST 19
743 #define SADB_X_DIAGNOSTIC_MISSING_SA 20
744 #define SADB_X_DIAGNOSTIC_MISSING_EKEY 21
745 #define SADB_X_DIAGNOSTIC_MISSING_AKEY 22
746 #define SADB_X_DIAGNOSTIC_MISSING_RANGE 23
748 #define SADB_X_DIAGNOSTIC_DUPLICATE_SRC 24
749 #define SADB_X_DIAGNOSTIC_DUPLICATE_DST 25
750 #define SADB_X_DIAGNOSTIC_DUPLICATE_SA 26
751 #define SADB_X_DIAGNOSTIC_DUPLICATE_EKEY 27
752 #define SADB_X_DIAGNOSTIC_DUPLICATE_AKEY 28
753 #define SADB_X_DIAGNOSTIC_DUPLICATE_RANGE 29
755 #define SADB_X_DIAGNOSTIC_MALFORMED_SRC 30
756 #define SADB_X_DIAGNOSTIC_MALFORMED_DST 31
757 #define SADB_X_DIAGNOSTIC_MALFORMED_SA 32
758 #define SADB_X_DIAGNOSTIC_MALFORMED_EKEY 33
759 #define SADB_X_DIAGNOSTIC_MALFORMED_AKEY 34
760 #define SADB_X_DIAGNOSTIC_MALFORMED_RANGE 35
762 #define SADB_X_DIAGNOSTIC_AKEY_PRESENT 36
763 #define SADB_X_DIAGNOSTIC_EKEY_PRESENT 37
764 #define SADB_X_DIAGNOSTIC_PROP_PRESENT 38
765 #define SADB_X_DIAGNOSTIC_SUPP_PRESENT 39
767 #define SADB_X_DIAGNOSTIC_BAD_AALG 40
768 #define SADB_X_DIAGNOSTIC_BAD_EALG 41
769 #define SADB_X_DIAGNOSTIC_BAD_SAFLAGS 42
770 #define SADB_X_DIAGNOSTIC_BAD_SASTATE 43
772 #define SADB_X_DIAGNOSTIC_BAD_AKEYBITS 44
773 #define SADB_X_DIAGNOSTIC_BAD_EKEYBITS 45
775 #define SADB_X_DIAGNOSTIC_ENCR_NOTSUPP 46
777 #define SADB_X_DIAGNOSTIC_WEAK_EKEY 47
778 #define SADB_X_DIAGNOSTIC_WEAK_AKEY 48
780 #define SADB_X_DIAGNOSTIC_DUPLICATE_KMP 49
781 #define SADB_X_DIAGNOSTIC_DUPLICATE_KMC 50
783 #define SADB_X_DIAGNOSTIC_MISSING_NATT_LOC 51
784 #define SADB_X_DIAGNOSTIC_MISSING_NATT_REM 52
785 #define SADB_X_DIAGNOSTIC_DUPLICATE_NATT_LOC 53
786 #define SADB_X_DIAGNOSTIC_DUPLICATE_NATT_REM 54
787 #define SADB_X_DIAGNOSTIC_MALFORMED_NATT_LOC 55
788 #define SADB_X_DIAGNOSTIC_MALFORMED_NATT_REM 56
789 #define SADB_X_DIAGNOSTIC_DUPLICATE_NATT_PORTS 57
791 #define SADB_X_DIAGNOSTIC_MISSING_INNER_SRC 58
792 #define SADB_X_DIAGNOSTIC_MISSING_INNER_DST 59
793 #define SADB_X_DIAGNOSTIC_DUPLICATE_INNER_SRC 60
794 #define SADB_X_DIAGNOSTIC_DUPLICATE_INNER_DST 61
795 #define SADB_X_DIAGNOSTIC_MALFORMED_INNER_SRC 62
796 #define SADB_X_DIAGNOSTIC_MALFORMED_INNER_DST 63
798 #define SADB_X_DIAGNOSTIC_PREFIX_INNER_SRC 64
799 #define SADB_X_DIAGNOSTIC_PREFIX_INNER_DST 65
800 #define SADB_X_DIAGNOSTIC_BAD_INNER_DST_AF 66
801 #define SADB_X_DIAGNOSTIC_INNER_AF_MISMATCH 67
803 #define SADB_X_DIAGNOSTIC_BAD_NATT_REM_AF 68
804 #define SADB_X_DIAGNOSTIC_BAD_NATT_LOC_AF 69
806 #define SADB_X_DIAGNOSTIC_PROTO_MISMATCH 70
807 #define SADB_X_DIAGNOSTIC_INNER_PROTO_MISMATCH 71
809 #define SADB_X_DIAGNOSTIC_DUAL_PORT_SETS 72
811 #define SADB_X_DIAGNOSTIC_PAIR_INAPPROPRIATE 73
812 #define SADB_X_DIAGNOSTIC_PAIR_ADD_MISMATCH 74
813 #define SADB_X_DIAGNOSTIC_PAIR_ALREADY 75
814 #define SADB_X_DIAGNOSTIC_PAIR_SA_NOTFOUND 76
815 #define SADB_X_DIAGNOSTIC_BAD_SA_DIRECTION 77
817 #define SADB_X_DIAGNOSTIC_SA_NOTFOUND 78
818 #define SADB_X_DIAGNOSTIC_SA_EXPIRED 79
819 #define SADB_X_DIAGNOSTIC_BAD_CTX 80
820 #define SADB_X_DIAGNOSTIC_INVALID_REPLAY 81
821 #define SADB_X_DIAGNOSTIC_MISSING_LIFETIME 82
823 #define SADB_X_DIAGNOSTIC_BAD_LABEL 83
824 #define SADB_X_DIAGNOSTIC_MAX 83
826 /* Algorithm type for sadb_x_algdesc above... */
828 #define SADB_X_ALGTYPE_NONE 0
829 #define SADB_X_ALGTYPE_AUTH 1
830 #define SADB_X_ALGTYPE_CRYPT 2
831 #define SADB_X_ALGTYPE_COMPRESS 3
833 #define SADB_X_ALGTYPE_MAX 3
835 /* Key management protocol for sadb_x_kmc above... */
837 #define SADB_X_KMP_MANUAL 0
838 #define SADB_X_KMP_IKE 1
839 #define SADB_X_KMP_KINK 2
841 #define SADB_X_KMP_MAX 2
844 * Handy conversion macros. Not part of the PF_KEY spec...
847 #define SADB_64TO8(x) ((x) << 3)
848 #define SADB_8TO64(x) ((x) >> 3)
849 #define SADB_8TO1(x) ((x) << 3)
850 #define SADB_1TO8(x) ((x) >> 3)
856 #endif /* _NET_PFKEYV2_H */