130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _LINUX_XFRM_H
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _LINUX_XFRM_H
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* All of the structures in this file may not change size as they are
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * passed into the kernel from userspace via netlink sockets.
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Structure to encapsulate addresses. I do not want to use
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * "standard" structure. My apologies.
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1330692c65c4174412c90e79489e98ab85c1a7412fBen Chengtypedef union {
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		a4;
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		a6[4];
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} xfrm_address_t;
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Ident of a specific xfrm_state. It is used on input to lookup
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the state by (spi,daddr,ah/esp) or to store information about
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * spi, protocol and tunnel address on output.
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_id {
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t	daddr;
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		spi;
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		proto;
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_sec_ctx {
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	ctx_doi;
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	ctx_alg;
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	ctx_len;
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	ctx_sid;
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char	ctx_str[0];
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Security Context Domains of Interpretation */
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_SC_DOI_RESERVED 0
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_SC_DOI_LSM 1
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Security Context Algorithms */
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_SC_ALG_RESERVED 0
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_SC_ALG_SELINUX 1
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Selector, used as selector both on policy rules (SPD) and SAs. */
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_selector {
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t	daddr;
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t	saddr;
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16	dport;
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16	dport_mask;
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16	sport;
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16	sport_mask;
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16	family;
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	prefixlen_d;
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	prefixlen_s;
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	proto;
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	ifindex;
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__kernel_uid32_t	user;
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_INF (~(__u64)0)
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_lifetime_cfg {
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	soft_byte_limit;
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	hard_byte_limit;
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	soft_packet_limit;
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	hard_packet_limit;
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	soft_add_expires_seconds;
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	hard_add_expires_seconds;
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	soft_use_expires_seconds;
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	hard_use_expires_seconds;
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_lifetime_cur {
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	bytes;
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	packets;
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	add_time;
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u64	use_time;
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_replay_state {
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	oseq;
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	seq;
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	bitmap;
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMA_REPLAY_ESN_MAX	4096
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_replay_state_esn {
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	bmp_len;
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		oseq;
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		seq;
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		oseq_hi;
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		seq_hi;
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		replay_window;
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32		bmp[0];
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_algo {
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_name[64];
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	alg_key_len;    /* in bits */
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_key[0];
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_algo_auth {
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_name[64];
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	alg_key_len;    /* in bits */
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	alg_trunc_len;  /* in bits */
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_key[0];
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_algo_aead {
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_name[64];
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	alg_key_len;	/* in bits */
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	alg_icv_len;	/* in bits */
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		alg_key[0];
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_stats {
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	replay_window;
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	replay;
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	integrity_failed;
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_TYPE_MAIN	= 0,
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_TYPE_SUB	= 1,
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_TYPE_MAX	= 2,
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_TYPE_ANY	= 255
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13230692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_IN	= 0,
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_OUT	= 1,
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_FWD	= 2,
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_MASK = 3,
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_POLICY_MAX	= 3
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14030692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_SHARE_ANY,		/* No limitations */
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_SHARE_SESSION,	/* For this session only */
14330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_SHARE_USER,	/* For this user only */
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_SHARE_UNIQUE	/* Use once */
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_TRANSPORT 0
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_TUNNEL 1
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_ROUTEOPTIMIZATION 2
15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_IN_TRIGGER 3
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_BEET 4
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MODE_MAX 5
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Netlink configuration messages.  */
15530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum {
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_BASE = 0x10,
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_NEWSA = 0x10,
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_DELSA,
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_DELSA XFRM_MSG_DELSA
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_GETSA,
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_GETSA XFRM_MSG_GETSA
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_NEWPOLICY,
16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_DELPOLICY,
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_GETPOLICY,
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_ALLOCSPI,
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_ACQUIRE,
17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_EXPIRE,
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_UPDPOLICY,
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_UPDSA,
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_POLEXPIRE,
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_FLUSHSA,
18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_FLUSHPOLICY,
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_NEWAE,
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_GETAE,
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_GETAE XFRM_MSG_GETAE
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_REPORT,
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_REPORT XFRM_MSG_REPORT
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_MIGRATE,
20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_NEWSADINFO,
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_GETSADINFO,
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_NEWSPDINFO,
20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_GETSPDINFO,
21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_MSG_MAPPING,
21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRM_MSG_MAX
21630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Generic LSM security context for comunicating to user space
22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * NOTE: Same format as sadb_x_sec_ctx
22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
22530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_sec_ctx {
22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16			len;
22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16			exttype;
22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8			ctx_alg;  /* LSMs: e.g., selinux == 1 */
22930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8			ctx_doi;
23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16			ctx_len;
23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
23330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_tmpl {
23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_id		id;
23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16			family;
23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t		saddr;
23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			reqid;
23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8			mode;
23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8			share;
24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8			optional;
24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			aalgos;
24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			ealgos;
24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32			calgos;
24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
24530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
24630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_encap_tmpl {
24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		encap_type;
24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16		encap_sport;
24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16		encap_dport;
25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t	encap_oa;
25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* AEVENT flags  */
25430692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum xfrm_ae_ftype_t {
25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_UNSPEC,
25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_RTHR=1,	/* replay threshold*/
25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_RVAL=2, /* replay value */
25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_LVAL=4, /* lifetime value */
25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_ETHR=8, /* expiry timer threshold */
26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_CR=16, /* Event cause is replay update */
26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_CE=32, /* Event cause is timer expiry */
26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRM_AE_CU=64, /* Event cause is policy update */
26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRM_AE_MAX
26430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
26830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_userpolicy_type {
26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		type;
27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16		reserved1;
27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		reserved2;
27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Netlink message attributes.  */
27530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum xfrm_attr_type_t {
27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_UNSPEC,
27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ALG_AUTH,		/* struct xfrm_algo */
27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ALG_CRYPT,	/* struct xfrm_algo */
27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ALG_COMP,		/* struct xfrm_algo */
28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ENCAP,		/* struct xfrm_algo + struct xfrm_encap_tmpl */
28130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_TMPL,		/* 1 or more struct xfrm_user_tmpl */
28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SA,		/* struct xfrm_usersa_info  */
28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_POLICY,		/*struct xfrm_userpolicy_info */
28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SEC_CTX,		/* struct xfrm_sec_ctx */
28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_LTIME_VAL,
28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_REPLAY_VAL,
28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_REPLAY_THRESH,
28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ETIMER_THRESH,
28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SRCADDR,		/* xfrm_address_t */
29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_COADDR,		/* xfrm_address_t */
29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_LASTUSED,		/* unsigned long  */
29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_POLICY_TYPE,	/* struct xfrm_userpolicy_type */
29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_MIGRATE,
29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ALG_AEAD,		/* struct xfrm_algo_aead */
29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */
29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_ALG_AUTH_TRUNC,	/* struct xfrm_algo_auth */
29730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_MARK,		/* struct xfrm_mark */
29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_TFCPAD,		/* __u32 */
29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_REPLAY_ESN_VAL,	/* struct xfrm_replay_esn */
30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SA_EXTRA_FLAGS,	/* __u32 */
30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRMA_MAX
30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMA_MAX (__XFRMA_MAX - 1)
30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
30630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_mark {
30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32           v; /* value */
30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32           m; /* mask */
30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31130692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum xfrm_sadattr_type_t {
31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SAD_UNSPEC,
31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SAD_CNT,
31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SAD_HINFO,
31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRMA_SAD_MAX
31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrmu_sadhinfo {
32130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sadhcnt; /* current hash bkts */
32230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 sadhmcnt; /* max allowed hash bkts */
32330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
32430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
32530692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum xfrm_spdattr_type_t {
32630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SPD_UNSPEC,
32730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SPD_INFO,
32830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMA_SPD_HINFO,
32930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRMA_SPD_MAX
33030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
33230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
33330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
33430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrmu_spdinfo {
33530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 incnt;
33630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 outcnt;
33730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 fwdcnt;
33830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 inscnt;
33930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 outscnt;
34030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 fwdscnt;
34130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
34230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrmu_spdhinfo {
34430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 spdhcnt;
34530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32 spdhmcnt;
34630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
34730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
34830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_usersa_info {
34930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_selector		sel;
35030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_id			id;
35130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			saddr;
35230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_lifetime_cfg	lft;
35330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_lifetime_cur	curlft;
35430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_stats		stats;
35530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				seq;
35630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				reqid;
35730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				family;
35830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				mode;		/* XFRM_MODE_xxx */
35930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				replay_window;
36030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				flags;
36130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_NOECN	1
36230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_DECAP_DSCP	2
36330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_NOPMTUDISC	4
36430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_WILDRECV	8
36530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_ICMP		16
36630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_AF_UNSPEC	32
36730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_ALIGN4	64
36830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_STATE_ESN		128
36930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_SA_XFLAG_DONT_ENCAP_DSCP	1
37230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
37330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_usersa_id {
37430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			daddr;
37530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32				spi;
37630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				family;
37730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				proto;
37830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
37930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_aevent_id {
38130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_usersa_id		sa_id;
38230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			saddr;
38330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				flags;
38430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				reqid;
38530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
38630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
38730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_userspi_info {
38830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_usersa_info		info;
38930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				min;
39030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				max;
39130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
39230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
39330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_userpolicy_info {
39430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_selector		sel;
39530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_lifetime_cfg	lft;
39630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_lifetime_cur	curlft;
39730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				priority;
39830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				index;
39930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				dir;
40030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				action;
40130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_POLICY_ALLOW	0
40230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_POLICY_BLOCK	1
40330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				flags;
40430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_POLICY_LOCALOK	1	/* Allow user to override global policy */
40530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	/* Automatically expand selector to include matching ICMP payloads. */
40630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRM_POLICY_ICMP	2
40730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				share;
40830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
40930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_userpolicy_id {
41130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_selector		sel;
41230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				index;
41330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				dir;
41430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
41530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
41630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_acquire {
41730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_id			id;
41830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			saddr;
41930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_selector		sel;
42030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_userpolicy_info	policy;
42130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				aalgos;
42230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				ealgos;
42330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				calgos;
42430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				seq;
42530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
42630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
42730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_expire {
42830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_usersa_info		state;
42930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				hard;
43030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
43130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
43230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_polexpire {
43330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_userpolicy_info	pol;
43430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				hard;
43530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
43630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
43730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_usersa_flush {
43830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				proto;
43930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
44030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_report {
44230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				proto;
44330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_selector		sel;
44430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
44530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
44630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Used by MIGRATE to pass addresses IKE should use to perform
44730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * SA negotiation with the peer */
44830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_kmaddress {
44930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t                  local;
45030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t                  remote;
45130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				reserved;
45230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				family;
45330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
45430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
45530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_migrate {
45630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			old_daddr;
45730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			old_saddr;
45830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			new_daddr;
45930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			new_saddr;
46030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				proto;
46130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8				mode;
46230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				reserved;
46330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				reqid;
46430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				old_family;
46530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u16				new_family;
46630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
46730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
46830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct xfrm_user_mapping {
46930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct xfrm_usersa_id		id;
47030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32				reqid;
47130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			old_saddr;
47230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	xfrm_address_t			new_saddr;
47330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16				old_sport;
47430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be16				new_sport;
47530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
47630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
47730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef __KERNEL__
47830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* backwards compatibility for userspace */
47930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMGRP_ACQUIRE		1
48030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMGRP_EXPIRE		2
48130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMGRP_SA		4
48230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMGRP_POLICY		8
48330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMGRP_REPORT		0x20
48430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif
48530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
48630692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum xfrm_nlgroups {
48730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_NONE,
48830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_NONE		XFRMNLGRP_NONE
48930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_ACQUIRE,
49030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_ACQUIRE	XFRMNLGRP_ACQUIRE
49130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_EXPIRE,
49230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_EXPIRE	XFRMNLGRP_EXPIRE
49330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_SA,
49430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_SA		XFRMNLGRP_SA
49530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_POLICY,
49630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_POLICY	XFRMNLGRP_POLICY
49730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_AEVENTS,
49830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_AEVENTS	XFRMNLGRP_AEVENTS
49930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_REPORT,
50030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_REPORT	XFRMNLGRP_REPORT
50130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_MIGRATE,
50230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_MIGRATE	XFRMNLGRP_MIGRATE
50330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	XFRMNLGRP_MAPPING,
50430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_MAPPING	XFRMNLGRP_MAPPING
50530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__XFRMNLGRP_MAX
50630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
50730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define XFRMNLGRP_MAX	(__XFRMNLGRP_MAX - 1)
50830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
50930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _LINUX_XFRM_H */
510