130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* PF_KEY user interface, this is defined by rfc2367 so
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * do not make arbitrary modifications or else this header
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * file will not be compliant.
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _LINUX_PFKEY2_H
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _LINUX_PFKEY2_H
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PF_KEY_V2		2
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PFKEYV2_REVISION	199806L
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_msg {
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_msg_version;
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_msg_type;
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_msg_errno;
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_msg_satype;
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_msg_len;
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_msg_reserved;
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_msg_seq;
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_msg_pid;
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_msg) == 16 */
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_ext {
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ext_len;
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ext_type;
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_ext) == 4 */
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_sa {
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_sa_len;
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_sa_exttype;
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		sadb_sa_spi;
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sa_replay;
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sa_state;
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sa_auth;
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sa_encrypt;
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_sa_flags;
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_sa) == 16 */
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_lifetime {
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_lifetime_len;
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_lifetime_exttype;
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_lifetime_allocations;
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_lifetime_bytes;
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_lifetime_addtime;
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_lifetime_usetime;
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_lifetime) == 32 */
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_address {
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_address_len;
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_address_exttype;
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_address_proto;
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_address_prefixlen;
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_address_reserved;
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_address) == 8 */
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_key {
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_key_len;
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_key_exttype;
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_key_bits;
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_key_reserved;
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_key) == 8 */
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_ident {
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ident_len;
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ident_exttype;
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ident_type;
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_ident_reserved;
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_ident_id;
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_ident) == 16 */
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_sens {
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_sens_len;
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_sens_exttype;
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_sens_dpd;
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sens_sens_level;
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sens_sens_len;
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sens_integ_level;
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_sens_integ_len;
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_sens_reserved;
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_sens) == 16 */
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* followed by:
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_sens_bitmap[sens_len];
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_integ_bitmap[integ_len];  */
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_prop {
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_prop_len;
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_prop_exttype;
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_prop_replay;
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_prop_reserved[3];
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_prop) == 8 */
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* followed by:
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct sadb_comb sadb_combs[(sadb_prop_len +
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		sizeof(__u64) - sizeof(struct sadb_prop)) /
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		sizeof(struct sadb_comb)]; */
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_comb {
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_comb_auth;
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_comb_encrypt;
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_comb_flags;
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_comb_auth_minbits;
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_comb_auth_maxbits;
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_comb_encrypt_minbits;
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_comb_encrypt_maxbits;
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_comb_reserved;
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_comb_soft_allocations;
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_comb_hard_allocations;
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_soft_bytes;
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_hard_bytes;
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_soft_addtime;
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_hard_addtime;
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_soft_usetime;
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	sadb_comb_hard_usetime;
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_comb) == 72 */
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_supported {
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_supported_len;
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_supported_exttype;
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_supported_reserved;
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_supported) == 8 */
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* followed by:
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct sadb_alg sadb_algs[(sadb_supported_len +
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		sizeof(__u64) - sizeof(struct sadb_supported)) /
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng		sizeof(struct sadb_alg)]; */
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_alg {
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_alg_id;
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_alg_ivlen;
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_alg_minbits;
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_alg_maxbits;
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_alg_reserved;
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_alg) == 8 */
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_spirange {
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_spirange_len;
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_spirange_exttype;
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_spirange_min;
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_spirange_max;
15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_spirange_reserved;
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_spirange) == 16 */
15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_kmprivate {
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_kmprivate_len;
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_kmprivate_exttype;
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_kmprivate_reserved;
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_kmprivate) == 8 */
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_sa2 {
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_sa2_len;
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_sa2_exttype;
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_sa2_mode;
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_sa2_reserved1;
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_sa2_reserved2;
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_sa2_sequence;
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_sa2_reqid;
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_sa2) == 16 */
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_policy {
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_policy_len;
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_policy_exttype;
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_policy_type;
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_policy_dir;
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_policy_reserved;
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_policy_id;
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_policy_priority;
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_policy) == 16 */
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_ipsecrequest {
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_ipsecrequest_len;
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_ipsecrequest_proto;
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_ipsecrequest_mode;
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_ipsecrequest_level;
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_ipsecrequest_reserved1;
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_ipsecrequest_reqid;
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_ipsecrequest_reserved2;
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_ipsecrequest) == 16 */
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* This defines the TYPE of Nat Traversal in use.  Currently only one
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * type of NAT-T is supported, draft-ietf-ipsec-udp-encaps-06
20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
20230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_nat_t_type {
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_nat_t_type_len;
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_nat_t_type_exttype;
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_nat_t_type_type;
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_nat_t_type_reserved[3];
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_nat_t_type) == 8 */
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Pass a NAT Traversal port (Source or Dest port) */
21130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_nat_t_port {
21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_nat_t_port_len;
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_nat_t_port_exttype;
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16		sadb_x_nat_t_port_port;
21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_nat_t_port_reserved;
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_nat_t_port) == 8 */
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Generic LSM security context */
22030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_sec_ctx {
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_sec_len;
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_sec_exttype;
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_ctx_alg;  /* LSMs: e.g., selinux == 1 */
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		sadb_x_ctx_doi;
22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_ctx_len;
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_sec_ctx) = 8 */
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Used by MIGRATE to pass addresses IKE will use to perform
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * negotiation with the peer */
23130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct sadb_x_kmaddress {
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_kmaddress_len;
23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	sadb_x_kmaddress_exttype;
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	sadb_x_kmaddress_reserved;
23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed));
23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* sizeof(struct sadb_x_kmaddress) == 8 */
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Message types */
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_RESERVED		0
24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_GETSPI		1
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_UPDATE		2
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_ADD		3
24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_DELETE		4
24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_GET		5
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_ACQUIRE		6
24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_REGISTER		7
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXPIRE		8
24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_FLUSH		9
24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_DUMP		10
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_PROMISC		11
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_PCHANGE		12
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDUPDATE	13
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDADD		14
25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDDELETE	15
25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDGET		16
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDACQUIRE	17
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDDUMP		18
25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDFLUSH		19
25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDSETIDX	20
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDEXPIRE	21
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SPDDELETE2	22
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_NAT_T_NEW_MAPPING	23
26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_MIGRATE		24
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_MAX		24
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Security Association flags */
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SAFLAGS_PFS	1
26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SAFLAGS_NOPMTUDISC	0x20000000
26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SAFLAGS_DECAP_DSCP	0x40000000
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SAFLAGS_NOECN	0x80000000
27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Security Association states */
27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SASTATE_LARVAL	0
27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SASTATE_MATURE	1
27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SASTATE_DYING	2
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SASTATE_DEAD	3
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SASTATE_MAX	3
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Security Association types */
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_UNSPEC	0
28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_AH		2
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_ESP		3
28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_RSVP	5
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_OSPFV2	6
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_RIPV2	7
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_MIP		8
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_SATYPE_IPCOMP	9
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_SATYPE_MAX		9
28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Authentication algorithms */
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_AALG_NONE			0
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_AALG_MD5HMAC		2
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_AALG_SHA1HMAC		3
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_SHA2_256HMAC	5
29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_SHA2_384HMAC	6
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_SHA2_512HMAC	7
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_RIPEMD160HMAC	8
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_AES_XCBC_MAC	9
29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_AALG_NULL		251	/* kame */
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_AALG_MAX			251
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Encryption algorithms */
30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EALG_NONE			0
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EALG_DESCBC		2
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EALG_3DESCBC		3
30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_CASTCBC		6
30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_BLOWFISHCBC		7
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EALG_NULL			11
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AESCBC		12
31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AESCTR		13
31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_CCM_ICV8	14
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_CCM_ICV12	15
31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_CCM_ICV16	16
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_GCM_ICV8	18
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_GCM_ICV12	19
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_AES_GCM_ICV16	20
31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_CAMELLIACBC		22
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_NULL_AES_GMAC	23
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EALG_MAX                   253 /* last EALG */
32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* private allocations should use 249-255 (RFC2407) */
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_SERPENTCBC  252     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EALG_TWOFISHCBC  253     /* draft-ietf-ipsec-ciph-aes-cbc-00 */
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Compression algorithms */
32530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_NONE		0
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_OUI			1
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_DEFLATE		2
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_LZS			3
32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_LZJH		4
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_CALG_MAX			4
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Extension Header values */
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_RESERVED		0
33430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_SA			1
33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_LIFETIME_CURRENT	2
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_LIFETIME_HARD		3
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_LIFETIME_SOFT		4
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_ADDRESS_SRC		5
33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_ADDRESS_DST		6
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_ADDRESS_PROXY		7
34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_KEY_AUTH		8
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_KEY_ENCRYPT		9
34330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_IDENTITY_SRC		10
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_IDENTITY_DST		11
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_SENSITIVITY		12
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_PROPOSAL		13
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_SUPPORTED_AUTH		14
34830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_SUPPORTED_ENCRYPT	15
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_SPIRANGE		16
35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_KMPRIVATE		17
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_POLICY		18
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_SA2			19
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* The next four entries are for setting up NAT Traversal */
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_NAT_T_TYPE		20
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_NAT_T_SPORT		21
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_NAT_T_DPORT		22
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_NAT_T_OA		23
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_SEC_CTX		24
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Used with MIGRATE to pass @ to IKE for negotiation */
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_X_EXT_KMADDRESS		25
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_EXT_MAX			25
36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Identity Extension values */
36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_IDENTTYPE_RESERVED	0
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_IDENTTYPE_PREFIX	1
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_IDENTTYPE_FQDN	2
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_IDENTTYPE_USERFQDN	3
36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SADB_IDENTTYPE_MAX	3
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* !(_LINUX_PFKEY2_H) */
371