brintos

brintos / linux-shallow public Read only

0
0
Text · 12.5 KiB · f287015 Raw
579 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2#ifndef _LINUX_XFRM_H3#define _LINUX_XFRM_H4 5#include <linux/in6.h>6#include <linux/types.h>7#include <linux/stddef.h>8 9/* All of the structures in this file may not change size as they are10 * passed into the kernel from userspace via netlink sockets.11 */12 13/* Structure to encapsulate addresses. I do not want to use14 * "standard" structure. My apologies.15 */16typedef union {17	__be32		a4;18	__be32		a6[4];19	struct in6_addr	in6;20} xfrm_address_t;21 22/* Ident of a specific xfrm_state. It is used on input to lookup23 * the state by (spi,daddr,ah/esp) or to store information about24 * spi, protocol and tunnel address on output.25 */26struct xfrm_id {27	xfrm_address_t	daddr;28	__be32		spi;29	__u8		proto;30};31 32struct xfrm_sec_ctx {33	__u8	ctx_doi;34	__u8	ctx_alg;35	__u16	ctx_len;36	__u32	ctx_sid;37	char	ctx_str[] __counted_by(ctx_len);38};39 40/* Security Context Domains of Interpretation */41#define XFRM_SC_DOI_RESERVED 042#define XFRM_SC_DOI_LSM 143 44/* Security Context Algorithms */45#define XFRM_SC_ALG_RESERVED 046#define XFRM_SC_ALG_SELINUX 147 48/* Selector, used as selector both on policy rules (SPD) and SAs. */49 50struct xfrm_selector {51	xfrm_address_t	daddr;52	xfrm_address_t	saddr;53	__be16	dport;54	__be16	dport_mask;55	__be16	sport;56	__be16	sport_mask;57	__u16	family;58	__u8	prefixlen_d;59	__u8	prefixlen_s;60	__u8	proto;61	int	ifindex;62	__kernel_uid32_t	user;63};64 65#define XFRM_INF (~(__u64)0)66 67struct xfrm_lifetime_cfg {68	__u64	soft_byte_limit;69	__u64	hard_byte_limit;70	__u64	soft_packet_limit;71	__u64	hard_packet_limit;72	__u64	soft_add_expires_seconds;73	__u64	hard_add_expires_seconds;74	__u64	soft_use_expires_seconds;75	__u64	hard_use_expires_seconds;76};77 78struct xfrm_lifetime_cur {79	__u64	bytes;80	__u64	packets;81	__u64	add_time;82	__u64	use_time;83};84 85struct xfrm_replay_state {86	__u32	oseq;87	__u32	seq;88	__u32	bitmap;89};90 91#define XFRMA_REPLAY_ESN_MAX	409692 93struct xfrm_replay_state_esn {94	unsigned int	bmp_len;95	__u32		oseq;96	__u32		seq;97	__u32		oseq_hi;98	__u32		seq_hi;99	__u32		replay_window;100	__u32		bmp[];101};102 103struct xfrm_algo {104	char		alg_name[64];105	unsigned int	alg_key_len;    /* in bits */106	char		alg_key[];107};108 109struct xfrm_algo_auth {110	char		alg_name[64];111	unsigned int	alg_key_len;    /* in bits */112	unsigned int	alg_trunc_len;  /* in bits */113	char		alg_key[];114};115 116struct xfrm_algo_aead {117	char		alg_name[64];118	unsigned int	alg_key_len;	/* in bits */119	unsigned int	alg_icv_len;	/* in bits */120	char		alg_key[];121};122 123struct xfrm_stats {124	__u32	replay_window;125	__u32	replay;126	__u32	integrity_failed;127};128 129enum {130	XFRM_POLICY_TYPE_MAIN	= 0,131	XFRM_POLICY_TYPE_SUB	= 1,132	XFRM_POLICY_TYPE_MAX	= 2,133	XFRM_POLICY_TYPE_ANY	= 255134};135 136enum {137	XFRM_POLICY_IN	= 0,138	XFRM_POLICY_OUT	= 1,139	XFRM_POLICY_FWD	= 2,140	XFRM_POLICY_MASK = 3,141	XFRM_POLICY_MAX	= 3142};143 144enum xfrm_sa_dir {145	XFRM_SA_DIR_IN	= 1,146	XFRM_SA_DIR_OUT = 2147};148 149enum {150	XFRM_SHARE_ANY,		/* No limitations */151	XFRM_SHARE_SESSION,	/* For this session only */152	XFRM_SHARE_USER,	/* For this user only */153	XFRM_SHARE_UNIQUE	/* Use once */154};155 156#define XFRM_MODE_TRANSPORT 0157#define XFRM_MODE_TUNNEL 1158#define XFRM_MODE_ROUTEOPTIMIZATION 2159#define XFRM_MODE_IN_TRIGGER 3160#define XFRM_MODE_BEET 4161#define XFRM_MODE_MAX 5162 163/* Netlink configuration messages.  */164enum {165	XFRM_MSG_BASE = 0x10,166 167	XFRM_MSG_NEWSA = 0x10,168#define XFRM_MSG_NEWSA XFRM_MSG_NEWSA169	XFRM_MSG_DELSA,170#define XFRM_MSG_DELSA XFRM_MSG_DELSA171	XFRM_MSG_GETSA,172#define XFRM_MSG_GETSA XFRM_MSG_GETSA173 174	XFRM_MSG_NEWPOLICY,175#define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY176	XFRM_MSG_DELPOLICY,177#define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY178	XFRM_MSG_GETPOLICY,179#define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY180 181	XFRM_MSG_ALLOCSPI,182#define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI183	XFRM_MSG_ACQUIRE,184#define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE185	XFRM_MSG_EXPIRE,186#define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE187 188	XFRM_MSG_UPDPOLICY,189#define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY190	XFRM_MSG_UPDSA,191#define XFRM_MSG_UPDSA XFRM_MSG_UPDSA192 193	XFRM_MSG_POLEXPIRE,194#define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE195 196	XFRM_MSG_FLUSHSA,197#define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA198	XFRM_MSG_FLUSHPOLICY,199#define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY200 201	XFRM_MSG_NEWAE,202#define XFRM_MSG_NEWAE XFRM_MSG_NEWAE203	XFRM_MSG_GETAE,204#define XFRM_MSG_GETAE XFRM_MSG_GETAE205 206	XFRM_MSG_REPORT,207#define XFRM_MSG_REPORT XFRM_MSG_REPORT208 209	XFRM_MSG_MIGRATE,210#define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE211 212	XFRM_MSG_NEWSADINFO,213#define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO214	XFRM_MSG_GETSADINFO,215#define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO216 217	XFRM_MSG_NEWSPDINFO,218#define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO219	XFRM_MSG_GETSPDINFO,220#define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO221 222	XFRM_MSG_MAPPING,223#define XFRM_MSG_MAPPING XFRM_MSG_MAPPING224 225	XFRM_MSG_SETDEFAULT,226#define XFRM_MSG_SETDEFAULT XFRM_MSG_SETDEFAULT227	XFRM_MSG_GETDEFAULT,228#define XFRM_MSG_GETDEFAULT XFRM_MSG_GETDEFAULT229	__XFRM_MSG_MAX230};231#define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)232 233#define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)234 235/*236 * Generic LSM security context for communicating to user space237 * NOTE: Same format as sadb_x_sec_ctx238 */239struct xfrm_user_sec_ctx {240	__u16			len;241	__u16			exttype;242	__u8			ctx_alg;  /* LSMs: e.g., selinux == 1 */243	__u8			ctx_doi;244	__u16			ctx_len;245};246 247struct xfrm_user_tmpl {248	struct xfrm_id		id;249	__u16			family;250	xfrm_address_t		saddr;251	__u32			reqid;252	__u8			mode;253	__u8			share;254	__u8			optional;255	__u32			aalgos;256	__u32			ealgos;257	__u32			calgos;258};259 260struct xfrm_encap_tmpl {261	__u16		encap_type;262	__be16		encap_sport;263	__be16		encap_dport;264	xfrm_address_t	encap_oa;265};266 267/* AEVENT flags  */268enum xfrm_ae_ftype_t {269	XFRM_AE_UNSPEC,270	XFRM_AE_RTHR=1,	/* replay threshold*/271	XFRM_AE_RVAL=2, /* replay value */272	XFRM_AE_LVAL=4, /* lifetime value */273	XFRM_AE_ETHR=8, /* expiry timer threshold */274	XFRM_AE_CR=16, /* Event cause is replay update */275	XFRM_AE_CE=32, /* Event cause is timer expiry */276	XFRM_AE_CU=64, /* Event cause is policy update */277	__XFRM_AE_MAX278 279#define XFRM_AE_MAX (__XFRM_AE_MAX - 1)280};281 282struct xfrm_userpolicy_type {283	__u8		type;284	__u16		reserved1;285	__u8		reserved2;286};287 288/* Netlink message attributes.  */289enum xfrm_attr_type_t {290	XFRMA_UNSPEC,291	XFRMA_ALG_AUTH,		/* struct xfrm_algo */292	XFRMA_ALG_CRYPT,	/* struct xfrm_algo */293	XFRMA_ALG_COMP,		/* struct xfrm_algo */294	XFRMA_ENCAP,		/* struct xfrm_algo + struct xfrm_encap_tmpl */295	XFRMA_TMPL,		/* 1 or more struct xfrm_user_tmpl */296	XFRMA_SA,		/* struct xfrm_usersa_info  */297	XFRMA_POLICY,		/*struct xfrm_userpolicy_info */298	XFRMA_SEC_CTX,		/* struct xfrm_sec_ctx */299	XFRMA_LTIME_VAL,300	XFRMA_REPLAY_VAL,301	XFRMA_REPLAY_THRESH,302	XFRMA_ETIMER_THRESH,303	XFRMA_SRCADDR,		/* xfrm_address_t */304	XFRMA_COADDR,		/* xfrm_address_t */305	XFRMA_LASTUSED,		/* __u64 */306	XFRMA_POLICY_TYPE,	/* struct xfrm_userpolicy_type */307	XFRMA_MIGRATE,308	XFRMA_ALG_AEAD,		/* struct xfrm_algo_aead */309	XFRMA_KMADDRESS,        /* struct xfrm_user_kmaddress */310	XFRMA_ALG_AUTH_TRUNC,	/* struct xfrm_algo_auth */311	XFRMA_MARK,		/* struct xfrm_mark */312	XFRMA_TFCPAD,		/* __u32 */313	XFRMA_REPLAY_ESN_VAL,	/* struct xfrm_replay_state_esn */314	XFRMA_SA_EXTRA_FLAGS,	/* __u32 */315	XFRMA_PROTO,		/* __u8 */316	XFRMA_ADDRESS_FILTER,	/* struct xfrm_address_filter */317	XFRMA_PAD,318	XFRMA_OFFLOAD_DEV,	/* struct xfrm_user_offload */319	XFRMA_SET_MARK,		/* __u32 */320	XFRMA_SET_MARK_MASK,	/* __u32 */321	XFRMA_IF_ID,		/* __u32 */322	XFRMA_MTIMER_THRESH,	/* __u32 in seconds for input SA */323	XFRMA_SA_DIR,		/* __u8 */324	XFRMA_NAT_KEEPALIVE_INTERVAL,	/* __u32 in seconds for NAT keepalive */325	__XFRMA_MAX326 327#define XFRMA_OUTPUT_MARK XFRMA_SET_MARK	/* Compatibility */328#define XFRMA_MAX (__XFRMA_MAX - 1)329};330 331struct xfrm_mark {332	__u32           v; /* value */333	__u32           m; /* mask */334};335 336enum xfrm_sadattr_type_t {337	XFRMA_SAD_UNSPEC,338	XFRMA_SAD_CNT,339	XFRMA_SAD_HINFO,340	__XFRMA_SAD_MAX341 342#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)343};344 345struct xfrmu_sadhinfo {346	__u32 sadhcnt; /* current hash bkts */347	__u32 sadhmcnt; /* max allowed hash bkts */348};349 350enum xfrm_spdattr_type_t {351	XFRMA_SPD_UNSPEC,352	XFRMA_SPD_INFO,353	XFRMA_SPD_HINFO,354	XFRMA_SPD_IPV4_HTHRESH,355	XFRMA_SPD_IPV6_HTHRESH,356	__XFRMA_SPD_MAX357 358#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)359};360 361struct xfrmu_spdinfo {362	__u32 incnt;363	__u32 outcnt;364	__u32 fwdcnt;365	__u32 inscnt;366	__u32 outscnt;367	__u32 fwdscnt;368};369 370struct xfrmu_spdhinfo {371	__u32 spdhcnt;372	__u32 spdhmcnt;373};374 375struct xfrmu_spdhthresh {376	__u8 lbits;377	__u8 rbits;378};379 380struct xfrm_usersa_info {381	struct xfrm_selector		sel;382	struct xfrm_id			id;383	xfrm_address_t			saddr;384	struct xfrm_lifetime_cfg	lft;385	struct xfrm_lifetime_cur	curlft;386	struct xfrm_stats		stats;387	__u32				seq;388	__u32				reqid;389	__u16				family;390	__u8				mode;		/* XFRM_MODE_xxx */391	__u8				replay_window;392	__u8				flags;393#define XFRM_STATE_NOECN	1394#define XFRM_STATE_DECAP_DSCP	2395#define XFRM_STATE_NOPMTUDISC	4396#define XFRM_STATE_WILDRECV	8397#define XFRM_STATE_ICMP		16398#define XFRM_STATE_AF_UNSPEC	32399#define XFRM_STATE_ALIGN4	64400#define XFRM_STATE_ESN		128401};402 403#define XFRM_SA_XFLAG_DONT_ENCAP_DSCP	1404#define XFRM_SA_XFLAG_OSEQ_MAY_WRAP	2405 406struct xfrm_usersa_id {407	xfrm_address_t			daddr;408	__be32				spi;409	__u16				family;410	__u8				proto;411};412 413struct xfrm_aevent_id {414	struct xfrm_usersa_id		sa_id;415	xfrm_address_t			saddr;416	__u32				flags;417	__u32				reqid;418};419 420struct xfrm_userspi_info {421	struct xfrm_usersa_info		info;422	__u32				min;423	__u32				max;424};425 426struct xfrm_userpolicy_info {427	struct xfrm_selector		sel;428	struct xfrm_lifetime_cfg	lft;429	struct xfrm_lifetime_cur	curlft;430	__u32				priority;431	__u32				index;432	__u8				dir;433	__u8				action;434#define XFRM_POLICY_ALLOW	0435#define XFRM_POLICY_BLOCK	1436	__u8				flags;437#define XFRM_POLICY_LOCALOK	1	/* Allow user to override global policy */438	/* Automatically expand selector to include matching ICMP payloads. */439#define XFRM_POLICY_ICMP	2440	__u8				share;441};442 443struct xfrm_userpolicy_id {444	struct xfrm_selector		sel;445	__u32				index;446	__u8				dir;447};448 449struct xfrm_user_acquire {450	struct xfrm_id			id;451	xfrm_address_t			saddr;452	struct xfrm_selector		sel;453	struct xfrm_userpolicy_info	policy;454	__u32				aalgos;455	__u32				ealgos;456	__u32				calgos;457	__u32				seq;458};459 460struct xfrm_user_expire {461	struct xfrm_usersa_info		state;462	__u8				hard;463};464 465struct xfrm_user_polexpire {466	struct xfrm_userpolicy_info	pol;467	__u8				hard;468};469 470struct xfrm_usersa_flush {471	__u8				proto;472};473 474struct xfrm_user_report {475	__u8				proto;476	struct xfrm_selector		sel;477};478 479/* Used by MIGRATE to pass addresses IKE should use to perform480 * SA negotiation with the peer */481struct xfrm_user_kmaddress {482	xfrm_address_t                  local;483	xfrm_address_t                  remote;484	__u32				reserved;485	__u16				family;486};487 488struct xfrm_user_migrate {489	xfrm_address_t			old_daddr;490	xfrm_address_t			old_saddr;491	xfrm_address_t			new_daddr;492	xfrm_address_t			new_saddr;493	__u8				proto;494	__u8				mode;495	__u16				reserved;496	__u32				reqid;497	__u16				old_family;498	__u16				new_family;499};500 501struct xfrm_user_mapping {502	struct xfrm_usersa_id		id;503	__u32				reqid;504	xfrm_address_t			old_saddr;505	xfrm_address_t			new_saddr;506	__be16				old_sport;507	__be16				new_sport;508};509 510struct xfrm_address_filter {511	xfrm_address_t			saddr;512	xfrm_address_t			daddr;513	__u16				family;514	__u8				splen;515	__u8				dplen;516};517 518struct xfrm_user_offload {519	int				ifindex;520	__u8				flags;521};522/* This flag was exposed without any kernel code that supports it.523 * Unfortunately, strongswan has the code that sets this flag,524 * which makes it impossible to reuse this bit.525 *526 * So leave it here to make sure that it won't be reused by mistake.527 */528#define XFRM_OFFLOAD_IPV6	1529#define XFRM_OFFLOAD_INBOUND	2530/* Two bits above are relevant for state path only, while531 * offload is used for both policy and state flows.532 *533 * In policy offload mode, they are free and can be safely reused.534 */535#define XFRM_OFFLOAD_PACKET	4536 537struct xfrm_userpolicy_default {538#define XFRM_USERPOLICY_UNSPEC	0539#define XFRM_USERPOLICY_BLOCK	1540#define XFRM_USERPOLICY_ACCEPT	2541	__u8				in;542	__u8				fwd;543	__u8				out;544};545 546#ifndef __KERNEL__547/* backwards compatibility for userspace */548#define XFRMGRP_ACQUIRE		1549#define XFRMGRP_EXPIRE		2550#define XFRMGRP_SA		4551#define XFRMGRP_POLICY		8552#define XFRMGRP_REPORT		0x20553#endif554 555enum xfrm_nlgroups {556	XFRMNLGRP_NONE,557#define XFRMNLGRP_NONE		XFRMNLGRP_NONE558	XFRMNLGRP_ACQUIRE,559#define XFRMNLGRP_ACQUIRE	XFRMNLGRP_ACQUIRE560	XFRMNLGRP_EXPIRE,561#define XFRMNLGRP_EXPIRE	XFRMNLGRP_EXPIRE562	XFRMNLGRP_SA,563#define XFRMNLGRP_SA		XFRMNLGRP_SA564	XFRMNLGRP_POLICY,565#define XFRMNLGRP_POLICY	XFRMNLGRP_POLICY566	XFRMNLGRP_AEVENTS,567#define XFRMNLGRP_AEVENTS	XFRMNLGRP_AEVENTS568	XFRMNLGRP_REPORT,569#define XFRMNLGRP_REPORT	XFRMNLGRP_REPORT570	XFRMNLGRP_MIGRATE,571#define XFRMNLGRP_MIGRATE	XFRMNLGRP_MIGRATE572	XFRMNLGRP_MAPPING,573#define XFRMNLGRP_MAPPING	XFRMNLGRP_MAPPING574	__XFRMNLGRP_MAX575};576#define XFRMNLGRP_MAX	(__XFRMNLGRP_MAX - 1)577 578#endif /* _LINUX_XFRM_H */579