xref: /linux/include/net/xfrm.h (revision d44cd8226449114780a8554fd253c7e3d171a0a6)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _NET_XFRM_H
3 #define _NET_XFRM_H
4 
5 #include <linux/compiler.h>
6 #include <linux/xfrm.h>
7 #include <linux/spinlock.h>
8 #include <linux/list.h>
9 #include <linux/skbuff.h>
10 #include <linux/socket.h>
11 #include <linux/pfkeyv2.h>
12 #include <linux/ipsec.h>
13 #include <linux/in6.h>
14 #include <linux/mutex.h>
15 #include <linux/audit.h>
16 #include <linux/slab.h>
17 #include <linux/refcount.h>
18 #include <linux/sockptr.h>
19 
20 #include <net/sock.h>
21 #include <net/dst.h>
22 #include <net/ip.h>
23 #include <net/route.h>
24 #include <net/ipv6.h>
25 #include <net/ip6_fib.h>
26 #include <net/flow.h>
27 #include <net/gro_cells.h>
28 
29 #include <linux/interrupt.h>
30 
31 #ifdef CONFIG_XFRM_STATISTICS
32 #include <net/snmp.h>
33 #endif
34 
35 #define XFRM_PROTO_ESP		50
36 #define XFRM_PROTO_AH		51
37 #define XFRM_PROTO_COMP		108
38 #define XFRM_PROTO_IPIP		4
39 #define XFRM_PROTO_IPV6		41
40 #define XFRM_PROTO_ROUTING	IPPROTO_ROUTING
41 #define XFRM_PROTO_DSTOPTS	IPPROTO_DSTOPTS
42 
43 #define XFRM_ALIGN4(len)	(((len) + 3) & ~3)
44 #define XFRM_ALIGN8(len)	(((len) + 7) & ~7)
45 #define MODULE_ALIAS_XFRM_MODE(family, encap) \
46 	MODULE_ALIAS("xfrm-mode-" __stringify(family) "-" __stringify(encap))
47 #define MODULE_ALIAS_XFRM_TYPE(family, proto) \
48 	MODULE_ALIAS("xfrm-type-" __stringify(family) "-" __stringify(proto))
49 #define MODULE_ALIAS_XFRM_OFFLOAD_TYPE(family, proto) \
50 	MODULE_ALIAS("xfrm-offload-" __stringify(family) "-" __stringify(proto))
51 
52 #ifdef CONFIG_XFRM_STATISTICS
53 #define XFRM_INC_STATS(net, field)	SNMP_INC_STATS((net)->mib.xfrm_statistics, field)
54 #define XFRM_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.xfrm_statistics, field, val)
55 #else
56 #define XFRM_INC_STATS(net, field)	((void)(net))
57 #define XFRM_ADD_STATS(net, field, val) ((void)(net))
58 #endif
59 
60 
61 /* Organization of SPD aka "XFRM rules"
62    ------------------------------------
63 
64    Basic objects:
65    - policy rule, struct xfrm_policy (=SPD entry)
66    - bundle of transformations, struct dst_entry == struct xfrm_dst (=SA bundle)
67    - instance of a transformer, struct xfrm_state (=SA)
68    - template to clone xfrm_state, struct xfrm_tmpl
69 
70    SPD is organized as hash table (for policies that meet minimum address prefix
71    length setting, net->xfrm.policy_hthresh).  Other policies are stored in
72    lists, sorted into rbtree ordered by destination and source address networks.
73    See net/xfrm/xfrm_policy.c for details.
74 
75    (To be compatible with existing pfkeyv2 implementations,
76    many rules with priority of 0x7fffffff are allowed to exist and
77    such rules are ordered in an unpredictable way, thanks to bsd folks.)
78 
79    If "action" is "block", then we prohibit the flow, otherwise:
80    if "xfrms_nr" is zero, the flow passes untransformed. Otherwise,
81    policy entry has list of up to XFRM_MAX_DEPTH transformations,
82    described by templates xfrm_tmpl. Each template is resolved
83    to a complete xfrm_state (see below) and we pack bundle of transformations
84    to a dst_entry returned to requester.
85 
86    dst -. xfrm  .-> xfrm_state #1
87     |---. child .-> dst -. xfrm .-> xfrm_state #2
88                      |---. child .-> dst -. xfrm .-> xfrm_state #3
89                                       |---. child .-> NULL
90 
91 
92    Resolution of xrfm_tmpl
93    -----------------------
94    Template contains:
95    1. ->mode		Mode: transport or tunnel
96    2. ->id.proto	Protocol: AH/ESP/IPCOMP
97    3. ->id.daddr	Remote tunnel endpoint, ignored for transport mode.
98       Q: allow to resolve security gateway?
99    4. ->id.spi          If not zero, static SPI.
100    5. ->saddr		Local tunnel endpoint, ignored for transport mode.
101    6. ->algos		List of allowed algos. Plain bitmask now.
102       Q: ealgos, aalgos, calgos. What a mess...
103    7. ->share		Sharing mode.
104       Q: how to implement private sharing mode? To add struct sock* to
105       flow id?
106 
107    Having this template we search through SAD searching for entries
108    with appropriate mode/proto/algo, permitted by selector.
109    If no appropriate entry found, it is requested from key manager.
110 
111    PROBLEMS:
112    Q: How to find all the bundles referring to a physical path for
113       PMTU discovery? Seems, dst should contain list of all parents...
114       and enter to infinite locking hierarchy disaster.
115       No! It is easier, we will not search for them, let them find us.
116       We add genid to each dst plus pointer to genid of raw IP route,
117       pmtu disc will update pmtu on raw IP route and increase its genid.
118       dst_check() will see this for top level and trigger resyncing
119       metrics. Plus, it will be made via sk->sk_dst_cache. Solved.
120  */
121 
122 struct xfrm_state_walk {
123 	struct list_head	all;
124 	u8			state;
125 	u8			dying;
126 	u8			proto;
127 	u32			seq;
128 	struct xfrm_address_filter *filter;
129 };
130 
131 enum {
132 	XFRM_DEV_OFFLOAD_IN = 1,
133 	XFRM_DEV_OFFLOAD_OUT,
134 	XFRM_DEV_OFFLOAD_FWD,
135 };
136 
137 enum {
138 	XFRM_DEV_OFFLOAD_UNSPECIFIED,
139 	XFRM_DEV_OFFLOAD_CRYPTO,
140 	XFRM_DEV_OFFLOAD_PACKET,
141 };
142 
143 enum {
144 	XFRM_DEV_OFFLOAD_FLAG_ACQ = 1,
145 };
146 
147 struct xfrm_dev_offload {
148 	struct net_device	*dev;
149 	netdevice_tracker	dev_tracker;
150 	struct net_device	*real_dev;
151 	unsigned long		offload_handle;
152 	u8			dir : 2;
153 	u8			type : 2;
154 	u8			flags : 2;
155 };
156 
157 struct xfrm_mode {
158 	u8 encap;
159 	u8 family;
160 	u8 flags;
161 };
162 
163 /* Flags for xfrm_mode. */
164 enum {
165 	XFRM_MODE_FLAG_TUNNEL = 1,
166 };
167 
168 enum xfrm_replay_mode {
169 	XFRM_REPLAY_MODE_LEGACY,
170 	XFRM_REPLAY_MODE_BMP,
171 	XFRM_REPLAY_MODE_ESN,
172 };
173 
174 /* Full description of state of transformer. */
175 struct xfrm_state {
176 	possible_net_t		xs_net;
177 	union {
178 		struct hlist_node	gclist;
179 		struct hlist_node	bydst;
180 	};
181 	union {
182 		struct hlist_node	dev_gclist;
183 		struct hlist_node	bysrc;
184 	};
185 	struct hlist_node	byspi;
186 	struct hlist_node	byseq;
187 
188 	refcount_t		refcnt;
189 	spinlock_t		lock;
190 
191 	struct xfrm_id		id;
192 	struct xfrm_selector	sel;
193 	struct xfrm_mark	mark;
194 	u32			if_id;
195 	u32			tfcpad;
196 
197 	u32			genid;
198 
199 	/* Key manager bits */
200 	struct xfrm_state_walk	km;
201 
202 	/* Parameters of this state. */
203 	struct {
204 		u32		reqid;
205 		u8		mode;
206 		u8		replay_window;
207 		u8		aalgo, ealgo, calgo;
208 		u8		flags;
209 		u16		family;
210 		xfrm_address_t	saddr;
211 		int		header_len;
212 		int		trailer_len;
213 		u32		extra_flags;
214 		struct xfrm_mark	smark;
215 	} props;
216 
217 	struct xfrm_lifetime_cfg lft;
218 
219 	/* Data for transformer */
220 	struct xfrm_algo_auth	*aalg;
221 	struct xfrm_algo	*ealg;
222 	struct xfrm_algo	*calg;
223 	struct xfrm_algo_aead	*aead;
224 	const char		*geniv;
225 
226 	/* mapping change rate limiting */
227 	__be16 new_mapping_sport;
228 	u32 new_mapping;	/* seconds */
229 	u32 mapping_maxage;	/* seconds for input SA */
230 
231 	/* Data for encapsulator */
232 	struct xfrm_encap_tmpl	*encap;
233 	struct sock __rcu	*encap_sk;
234 
235 	/* NAT keepalive */
236 	u32			nat_keepalive_interval; /* seconds */
237 	time64_t		nat_keepalive_expiration;
238 
239 	/* Data for care-of address */
240 	xfrm_address_t	*coaddr;
241 
242 	/* IPComp needs an IPIP tunnel for handling uncompressed packets */
243 	struct xfrm_state	*tunnel;
244 
245 	/* If a tunnel, number of users + 1 */
246 	atomic_t		tunnel_users;
247 
248 	/* State for replay detection */
249 	struct xfrm_replay_state replay;
250 	struct xfrm_replay_state_esn *replay_esn;
251 
252 	/* Replay detection state at the time we sent the last notification */
253 	struct xfrm_replay_state preplay;
254 	struct xfrm_replay_state_esn *preplay_esn;
255 
256 	/* replay detection mode */
257 	enum xfrm_replay_mode    repl_mode;
258 	/* internal flag that only holds state for delayed aevent at the
259 	 * moment
260 	*/
261 	u32			xflags;
262 
263 	/* Replay detection notification settings */
264 	u32			replay_maxage;
265 	u32			replay_maxdiff;
266 
267 	/* Replay detection notification timer */
268 	struct timer_list	rtimer;
269 
270 	/* Statistics */
271 	struct xfrm_stats	stats;
272 
273 	struct xfrm_lifetime_cur curlft;
274 	struct hrtimer		mtimer;
275 
276 	struct xfrm_dev_offload xso;
277 
278 	/* used to fix curlft->add_time when changing date */
279 	long		saved_tmo;
280 
281 	/* Last used time */
282 	time64_t		lastused;
283 
284 	struct page_frag xfrag;
285 
286 	/* Reference to data common to all the instances of this
287 	 * transformer. */
288 	const struct xfrm_type	*type;
289 	struct xfrm_mode	inner_mode;
290 	struct xfrm_mode	inner_mode_iaf;
291 	struct xfrm_mode	outer_mode;
292 
293 	const struct xfrm_type_offload	*type_offload;
294 
295 	/* Security context */
296 	struct xfrm_sec_ctx	*security;
297 
298 	/* Private data of this transformer, format is opaque,
299 	 * interpreted by xfrm_type methods. */
300 	void			*data;
301 	u8			dir;
302 };
303 
xs_net(struct xfrm_state * x)304 static inline struct net *xs_net(struct xfrm_state *x)
305 {
306 	return read_pnet(&x->xs_net);
307 }
308 
309 /* xflags - make enum if more show up */
310 #define XFRM_TIME_DEFER	1
311 #define XFRM_SOFT_EXPIRE 2
312 
313 enum {
314 	XFRM_STATE_VOID,
315 	XFRM_STATE_ACQ,
316 	XFRM_STATE_VALID,
317 	XFRM_STATE_ERROR,
318 	XFRM_STATE_EXPIRED,
319 	XFRM_STATE_DEAD
320 };
321 
322 /* callback structure passed from either netlink or pfkey */
323 struct km_event {
324 	union {
325 		u32 hard;
326 		u32 proto;
327 		u32 byid;
328 		u32 aevent;
329 		u32 type;
330 	} data;
331 
332 	u32	seq;
333 	u32	portid;
334 	u32	event;
335 	struct net *net;
336 };
337 
338 struct xfrm_if_decode_session_result {
339 	struct net *net;
340 	u32 if_id;
341 };
342 
343 struct xfrm_if_cb {
344 	bool (*decode_session)(struct sk_buff *skb,
345 			       unsigned short family,
346 			       struct xfrm_if_decode_session_result *res);
347 };
348 
349 void xfrm_if_register_cb(const struct xfrm_if_cb *ifcb);
350 void xfrm_if_unregister_cb(void);
351 
352 struct xfrm_dst_lookup_params {
353 	struct net *net;
354 	int tos;
355 	int oif;
356 	xfrm_address_t *saddr;
357 	xfrm_address_t *daddr;
358 	u32 mark;
359 	__u8 ipproto;
360 	union flowi_uli uli;
361 };
362 
363 struct net_device;
364 struct xfrm_type;
365 struct xfrm_dst;
366 struct xfrm_policy_afinfo {
367 	struct dst_ops		*dst_ops;
368 	struct dst_entry	*(*dst_lookup)(const struct xfrm_dst_lookup_params *params);
369 	int			(*get_saddr)(xfrm_address_t *saddr,
370 					     const struct xfrm_dst_lookup_params *params);
371 	int			(*fill_dst)(struct xfrm_dst *xdst,
372 					    struct net_device *dev,
373 					    const struct flowi *fl);
374 	struct dst_entry	*(*blackhole_route)(struct net *net, struct dst_entry *orig);
375 };
376 
377 int xfrm_policy_register_afinfo(const struct xfrm_policy_afinfo *afinfo, int family);
378 void xfrm_policy_unregister_afinfo(const struct xfrm_policy_afinfo *afinfo);
379 void km_policy_notify(struct xfrm_policy *xp, int dir,
380 		      const struct km_event *c);
381 void km_state_notify(struct xfrm_state *x, const struct km_event *c);
382 
383 struct xfrm_tmpl;
384 int km_query(struct xfrm_state *x, struct xfrm_tmpl *t,
385 	     struct xfrm_policy *pol);
386 void km_state_expired(struct xfrm_state *x, int hard, u32 portid);
387 int __xfrm_state_delete(struct xfrm_state *x);
388 
389 struct xfrm_state_afinfo {
390 	u8				family;
391 	u8				proto;
392 
393 	const struct xfrm_type_offload *type_offload_esp;
394 
395 	const struct xfrm_type		*type_esp;
396 	const struct xfrm_type		*type_ipip;
397 	const struct xfrm_type		*type_ipip6;
398 	const struct xfrm_type		*type_comp;
399 	const struct xfrm_type		*type_ah;
400 	const struct xfrm_type		*type_routing;
401 	const struct xfrm_type		*type_dstopts;
402 
403 	int			(*output)(struct net *net, struct sock *sk, struct sk_buff *skb);
404 	int			(*transport_finish)(struct sk_buff *skb,
405 						    int async);
406 	void			(*local_error)(struct sk_buff *skb, u32 mtu);
407 };
408 
409 int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
410 int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
411 struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
412 struct xfrm_state_afinfo *xfrm_state_afinfo_get_rcu(unsigned int family);
413 
414 struct xfrm_input_afinfo {
415 	u8			family;
416 	bool			is_ipip;
417 	int			(*callback)(struct sk_buff *skb, u8 protocol,
418 					    int err);
419 };
420 
421 int xfrm_input_register_afinfo(const struct xfrm_input_afinfo *afinfo);
422 int xfrm_input_unregister_afinfo(const struct xfrm_input_afinfo *afinfo);
423 
424 void xfrm_flush_gc(void);
425 void xfrm_state_delete_tunnel(struct xfrm_state *x);
426 
427 struct xfrm_type {
428 	struct module		*owner;
429 	u8			proto;
430 	u8			flags;
431 #define XFRM_TYPE_NON_FRAGMENT	1
432 #define XFRM_TYPE_REPLAY_PROT	2
433 #define XFRM_TYPE_LOCAL_COADDR	4
434 #define XFRM_TYPE_REMOTE_COADDR	8
435 
436 	int			(*init_state)(struct xfrm_state *x,
437 					      struct netlink_ext_ack *extack);
438 	void			(*destructor)(struct xfrm_state *);
439 	int			(*input)(struct xfrm_state *, struct sk_buff *skb);
440 	int			(*output)(struct xfrm_state *, struct sk_buff *pskb);
441 	int			(*reject)(struct xfrm_state *, struct sk_buff *,
442 					  const struct flowi *);
443 };
444 
445 int xfrm_register_type(const struct xfrm_type *type, unsigned short family);
446 void xfrm_unregister_type(const struct xfrm_type *type, unsigned short family);
447 
448 struct xfrm_type_offload {
449 	struct module	*owner;
450 	u8		proto;
451 	void		(*encap)(struct xfrm_state *, struct sk_buff *pskb);
452 	int		(*input_tail)(struct xfrm_state *x, struct sk_buff *skb);
453 	int		(*xmit)(struct xfrm_state *, struct sk_buff *pskb, netdev_features_t features);
454 };
455 
456 int xfrm_register_type_offload(const struct xfrm_type_offload *type, unsigned short family);
457 void xfrm_unregister_type_offload(const struct xfrm_type_offload *type, unsigned short family);
458 
xfrm_af2proto(unsigned int family)459 static inline int xfrm_af2proto(unsigned int family)
460 {
461 	switch(family) {
462 	case AF_INET:
463 		return IPPROTO_IPIP;
464 	case AF_INET6:
465 		return IPPROTO_IPV6;
466 	default:
467 		return 0;
468 	}
469 }
470 
xfrm_ip2inner_mode(struct xfrm_state * x,int ipproto)471 static inline const struct xfrm_mode *xfrm_ip2inner_mode(struct xfrm_state *x, int ipproto)
472 {
473 	if ((ipproto == IPPROTO_IPIP && x->props.family == AF_INET) ||
474 	    (ipproto == IPPROTO_IPV6 && x->props.family == AF_INET6))
475 		return &x->inner_mode;
476 	else
477 		return &x->inner_mode_iaf;
478 }
479 
480 struct xfrm_tmpl {
481 /* id in template is interpreted as:
482  * daddr - destination of tunnel, may be zero for transport mode.
483  * spi   - zero to acquire spi. Not zero if spi is static, then
484  *	   daddr must be fixed too.
485  * proto - AH/ESP/IPCOMP
486  */
487 	struct xfrm_id		id;
488 
489 /* Source address of tunnel. Ignored, if it is not a tunnel. */
490 	xfrm_address_t		saddr;
491 
492 	unsigned short		encap_family;
493 
494 	u32			reqid;
495 
496 /* Mode: transport, tunnel etc. */
497 	u8			mode;
498 
499 /* Sharing mode: unique, this session only, this user only etc. */
500 	u8			share;
501 
502 /* May skip this transfomration if no SA is found */
503 	u8			optional;
504 
505 /* Skip aalgos/ealgos/calgos checks. */
506 	u8			allalgs;
507 
508 /* Bit mask of algos allowed for acquisition */
509 	u32			aalgos;
510 	u32			ealgos;
511 	u32			calgos;
512 };
513 
514 #define XFRM_MAX_DEPTH		6
515 #define XFRM_MAX_OFFLOAD_DEPTH	1
516 
517 struct xfrm_policy_walk_entry {
518 	struct list_head	all;
519 	u8			dead;
520 };
521 
522 struct xfrm_policy_walk {
523 	struct xfrm_policy_walk_entry walk;
524 	u8 type;
525 	u32 seq;
526 };
527 
528 struct xfrm_policy_queue {
529 	struct sk_buff_head	hold_queue;
530 	struct timer_list	hold_timer;
531 	unsigned long		timeout;
532 };
533 
534 /**
535  *	struct xfrm_policy - xfrm policy
536  *	@xp_net: network namespace the policy lives in
537  *	@bydst: hlist node for SPD hash table or rbtree list
538  *	@byidx: hlist node for index hash table
539  *	@lock: serialize changes to policy structure members
540  *	@refcnt: reference count, freed once it reaches 0
541  *	@pos: kernel internal tie-breaker to determine age of policy
542  *	@timer: timer
543  *	@genid: generation, used to invalidate old policies
544  *	@priority: priority, set by userspace
545  *	@index:  policy index (autogenerated)
546  *	@if_id: virtual xfrm interface id
547  *	@mark: packet mark
548  *	@selector: selector
549  *	@lft: liftime configuration data
550  *	@curlft: liftime state
551  *	@walk: list head on pernet policy list
552  *	@polq: queue to hold packets while aqcuire operaion in progress
553  *	@bydst_reinsert: policy tree node needs to be merged
554  *	@type: XFRM_POLICY_TYPE_MAIN or _SUB
555  *	@action: XFRM_POLICY_ALLOW or _BLOCK
556  *	@flags: XFRM_POLICY_LOCALOK, XFRM_POLICY_ICMP
557  *	@xfrm_nr: number of used templates in @xfrm_vec
558  *	@family: protocol family
559  *	@security: SELinux security label
560  *	@xfrm_vec: array of templates to resolve state
561  *	@rcu: rcu head, used to defer memory release
562  *	@xdo: hardware offload state
563  */
564 struct xfrm_policy {
565 	possible_net_t		xp_net;
566 	struct hlist_node	bydst;
567 	struct hlist_node	byidx;
568 
569 	/* This lock only affects elements except for entry. */
570 	rwlock_t		lock;
571 	refcount_t		refcnt;
572 	u32			pos;
573 	struct timer_list	timer;
574 
575 	atomic_t		genid;
576 	u32			priority;
577 	u32			index;
578 	u32			if_id;
579 	struct xfrm_mark	mark;
580 	struct xfrm_selector	selector;
581 	struct xfrm_lifetime_cfg lft;
582 	struct xfrm_lifetime_cur curlft;
583 	struct xfrm_policy_walk_entry walk;
584 	struct xfrm_policy_queue polq;
585 	bool                    bydst_reinsert;
586 	u8			type;
587 	u8			action;
588 	u8			flags;
589 	u8			xfrm_nr;
590 	u16			family;
591 	struct xfrm_sec_ctx	*security;
592 	struct xfrm_tmpl       	xfrm_vec[XFRM_MAX_DEPTH];
593 	struct rcu_head		rcu;
594 
595 	struct xfrm_dev_offload xdo;
596 };
597 
xp_net(const struct xfrm_policy * xp)598 static inline struct net *xp_net(const struct xfrm_policy *xp)
599 {
600 	return read_pnet(&xp->xp_net);
601 }
602 
603 struct xfrm_kmaddress {
604 	xfrm_address_t          local;
605 	xfrm_address_t          remote;
606 	u32			reserved;
607 	u16			family;
608 };
609 
610 struct xfrm_migrate {
611 	xfrm_address_t		old_daddr;
612 	xfrm_address_t		old_saddr;
613 	xfrm_address_t		new_daddr;
614 	xfrm_address_t		new_saddr;
615 	u8			proto;
616 	u8			mode;
617 	u16			reserved;
618 	u32			reqid;
619 	u16			old_family;
620 	u16			new_family;
621 };
622 
623 #define XFRM_KM_TIMEOUT                30
624 /* what happened */
625 #define XFRM_REPLAY_UPDATE	XFRM_AE_CR
626 #define XFRM_REPLAY_TIMEOUT	XFRM_AE_CE
627 
628 /* default aevent timeout in units of 100ms */
629 #define XFRM_AE_ETIME			10
630 /* Async Event timer multiplier */
631 #define XFRM_AE_ETH_M			10
632 /* default seq threshold size */
633 #define XFRM_AE_SEQT_SIZE		2
634 
635 struct xfrm_mgr {
636 	struct list_head	list;
637 	int			(*notify)(struct xfrm_state *x, const struct km_event *c);
638 	int			(*acquire)(struct xfrm_state *x, struct xfrm_tmpl *, struct xfrm_policy *xp);
639 	struct xfrm_policy	*(*compile_policy)(struct sock *sk, int opt, u8 *data, int len, int *dir);
640 	int			(*new_mapping)(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport);
641 	int			(*notify_policy)(struct xfrm_policy *x, int dir, const struct km_event *c);
642 	int			(*report)(struct net *net, u8 proto, struct xfrm_selector *sel, xfrm_address_t *addr);
643 	int			(*migrate)(const struct xfrm_selector *sel,
644 					   u8 dir, u8 type,
645 					   const struct xfrm_migrate *m,
646 					   int num_bundles,
647 					   const struct xfrm_kmaddress *k,
648 					   const struct xfrm_encap_tmpl *encap);
649 	bool			(*is_alive)(const struct km_event *c);
650 };
651 
652 void xfrm_register_km(struct xfrm_mgr *km);
653 void xfrm_unregister_km(struct xfrm_mgr *km);
654 
655 struct xfrm_tunnel_skb_cb {
656 	union {
657 		struct inet_skb_parm h4;
658 		struct inet6_skb_parm h6;
659 	} header;
660 
661 	union {
662 		struct ip_tunnel *ip4;
663 		struct ip6_tnl *ip6;
664 	} tunnel;
665 };
666 
667 #define XFRM_TUNNEL_SKB_CB(__skb) ((struct xfrm_tunnel_skb_cb *)&((__skb)->cb[0]))
668 
669 /*
670  * This structure is used for the duration where packets are being
671  * transformed by IPsec.  As soon as the packet leaves IPsec the
672  * area beyond the generic IP part may be overwritten.
673  */
674 struct xfrm_skb_cb {
675 	struct xfrm_tunnel_skb_cb header;
676 
677         /* Sequence number for replay protection. */
678 	union {
679 		struct {
680 			__u32 low;
681 			__u32 hi;
682 		} output;
683 		struct {
684 			__be32 low;
685 			__be32 hi;
686 		} input;
687 	} seq;
688 };
689 
690 #define XFRM_SKB_CB(__skb) ((struct xfrm_skb_cb *)&((__skb)->cb[0]))
691 
692 /*
693  * This structure is used by the afinfo prepare_input/prepare_output functions
694  * to transmit header information to the mode input/output functions.
695  */
696 struct xfrm_mode_skb_cb {
697 	struct xfrm_tunnel_skb_cb header;
698 
699 	/* Copied from header for IPv4, always set to zero and DF for IPv6. */
700 	__be16 id;
701 	__be16 frag_off;
702 
703 	/* IP header length (excluding options or extension headers). */
704 	u8 ihl;
705 
706 	/* TOS for IPv4, class for IPv6. */
707 	u8 tos;
708 
709 	/* TTL for IPv4, hop limitfor IPv6. */
710 	u8 ttl;
711 
712 	/* Protocol for IPv4, NH for IPv6. */
713 	u8 protocol;
714 
715 	/* Option length for IPv4, zero for IPv6. */
716 	u8 optlen;
717 
718 	/* Used by IPv6 only, zero for IPv4. */
719 	u8 flow_lbl[3];
720 };
721 
722 #define XFRM_MODE_SKB_CB(__skb) ((struct xfrm_mode_skb_cb *)&((__skb)->cb[0]))
723 
724 /*
725  * This structure is used by the input processing to locate the SPI and
726  * related information.
727  */
728 struct xfrm_spi_skb_cb {
729 	struct xfrm_tunnel_skb_cb header;
730 
731 	unsigned int daddroff;
732 	unsigned int family;
733 	__be32 seq;
734 };
735 
736 #define XFRM_SPI_SKB_CB(__skb) ((struct xfrm_spi_skb_cb *)&((__skb)->cb[0]))
737 
738 #ifdef CONFIG_AUDITSYSCALL
xfrm_audit_start(const char * op)739 static inline struct audit_buffer *xfrm_audit_start(const char *op)
740 {
741 	struct audit_buffer *audit_buf = NULL;
742 
743 	if (audit_enabled == AUDIT_OFF)
744 		return NULL;
745 	audit_buf = audit_log_start(audit_context(), GFP_ATOMIC,
746 				    AUDIT_MAC_IPSEC_EVENT);
747 	if (audit_buf == NULL)
748 		return NULL;
749 	audit_log_format(audit_buf, "op=%s", op);
750 	return audit_buf;
751 }
752 
xfrm_audit_helper_usrinfo(bool task_valid,struct audit_buffer * audit_buf)753 static inline void xfrm_audit_helper_usrinfo(bool task_valid,
754 					     struct audit_buffer *audit_buf)
755 {
756 	const unsigned int auid = from_kuid(&init_user_ns, task_valid ?
757 					    audit_get_loginuid(current) :
758 					    INVALID_UID);
759 	const unsigned int ses = task_valid ? audit_get_sessionid(current) :
760 		AUDIT_SID_UNSET;
761 
762 	audit_log_format(audit_buf, " auid=%u ses=%u", auid, ses);
763 	audit_log_task_context(audit_buf);
764 }
765 
766 void xfrm_audit_policy_add(struct xfrm_policy *xp, int result, bool task_valid);
767 void xfrm_audit_policy_delete(struct xfrm_policy *xp, int result,
768 			      bool task_valid);
769 void xfrm_audit_state_add(struct xfrm_state *x, int result, bool task_valid);
770 void xfrm_audit_state_delete(struct xfrm_state *x, int result, bool task_valid);
771 void xfrm_audit_state_replay_overflow(struct xfrm_state *x,
772 				      struct sk_buff *skb);
773 void xfrm_audit_state_replay(struct xfrm_state *x, struct sk_buff *skb,
774 			     __be32 net_seq);
775 void xfrm_audit_state_notfound_simple(struct sk_buff *skb, u16 family);
776 void xfrm_audit_state_notfound(struct sk_buff *skb, u16 family, __be32 net_spi,
777 			       __be32 net_seq);
778 void xfrm_audit_state_icvfail(struct xfrm_state *x, struct sk_buff *skb,
779 			      u8 proto);
780 #else
781 
xfrm_audit_policy_add(struct xfrm_policy * xp,int result,bool task_valid)782 static inline void xfrm_audit_policy_add(struct xfrm_policy *xp, int result,
783 					 bool task_valid)
784 {
785 }
786 
xfrm_audit_policy_delete(struct xfrm_policy * xp,int result,bool task_valid)787 static inline void xfrm_audit_policy_delete(struct xfrm_policy *xp, int result,
788 					    bool task_valid)
789 {
790 }
791 
xfrm_audit_state_add(struct xfrm_state * x,int result,bool task_valid)792 static inline void xfrm_audit_state_add(struct xfrm_state *x, int result,
793 					bool task_valid)
794 {
795 }
796 
xfrm_audit_state_delete(struct xfrm_state * x,int result,bool task_valid)797 static inline void xfrm_audit_state_delete(struct xfrm_state *x, int result,
798 					   bool task_valid)
799 {
800 }
801 
xfrm_audit_state_replay_overflow(struct xfrm_state * x,struct sk_buff * skb)802 static inline void xfrm_audit_state_replay_overflow(struct xfrm_state *x,
803 					     struct sk_buff *skb)
804 {
805 }
806 
xfrm_audit_state_replay(struct xfrm_state * x,struct sk_buff * skb,__be32 net_seq)807 static inline void xfrm_audit_state_replay(struct xfrm_state *x,
808 					   struct sk_buff *skb, __be32 net_seq)
809 {
810 }
811 
xfrm_audit_state_notfound_simple(struct sk_buff * skb,u16 family)812 static inline void xfrm_audit_state_notfound_simple(struct sk_buff *skb,
813 				      u16 family)
814 {
815 }
816 
xfrm_audit_state_notfound(struct sk_buff * skb,u16 family,__be32 net_spi,__be32 net_seq)817 static inline void xfrm_audit_state_notfound(struct sk_buff *skb, u16 family,
818 				      __be32 net_spi, __be32 net_seq)
819 {
820 }
821 
xfrm_audit_state_icvfail(struct xfrm_state * x,struct sk_buff * skb,u8 proto)822 static inline void xfrm_audit_state_icvfail(struct xfrm_state *x,
823 				     struct sk_buff *skb, u8 proto)
824 {
825 }
826 #endif /* CONFIG_AUDITSYSCALL */
827 
xfrm_pol_hold(struct xfrm_policy * policy)828 static inline void xfrm_pol_hold(struct xfrm_policy *policy)
829 {
830 	if (likely(policy != NULL))
831 		refcount_inc(&policy->refcnt);
832 }
833 
834 void xfrm_policy_destroy(struct xfrm_policy *policy);
835 
xfrm_pol_put(struct xfrm_policy * policy)836 static inline void xfrm_pol_put(struct xfrm_policy *policy)
837 {
838 	if (refcount_dec_and_test(&policy->refcnt))
839 		xfrm_policy_destroy(policy);
840 }
841 
xfrm_pols_put(struct xfrm_policy ** pols,int npols)842 static inline void xfrm_pols_put(struct xfrm_policy **pols, int npols)
843 {
844 	int i;
845 	for (i = npols - 1; i >= 0; --i)
846 		xfrm_pol_put(pols[i]);
847 }
848 
849 void __xfrm_state_destroy(struct xfrm_state *, bool);
850 
__xfrm_state_put(struct xfrm_state * x)851 static inline void __xfrm_state_put(struct xfrm_state *x)
852 {
853 	refcount_dec(&x->refcnt);
854 }
855 
xfrm_state_put(struct xfrm_state * x)856 static inline void xfrm_state_put(struct xfrm_state *x)
857 {
858 	if (refcount_dec_and_test(&x->refcnt))
859 		__xfrm_state_destroy(x, false);
860 }
861 
xfrm_state_put_sync(struct xfrm_state * x)862 static inline void xfrm_state_put_sync(struct xfrm_state *x)
863 {
864 	if (refcount_dec_and_test(&x->refcnt))
865 		__xfrm_state_destroy(x, true);
866 }
867 
xfrm_state_hold(struct xfrm_state * x)868 static inline void xfrm_state_hold(struct xfrm_state *x)
869 {
870 	refcount_inc(&x->refcnt);
871 }
872 
addr_match(const void * token1,const void * token2,unsigned int prefixlen)873 static inline bool addr_match(const void *token1, const void *token2,
874 			      unsigned int prefixlen)
875 {
876 	const __be32 *a1 = token1;
877 	const __be32 *a2 = token2;
878 	unsigned int pdw;
879 	unsigned int pbi;
880 
881 	pdw = prefixlen >> 5;	  /* num of whole u32 in prefix */
882 	pbi = prefixlen &  0x1f;  /* num of bits in incomplete u32 in prefix */
883 
884 	if (pdw)
885 		if (memcmp(a1, a2, pdw << 2))
886 			return false;
887 
888 	if (pbi) {
889 		__be32 mask;
890 
891 		mask = htonl((0xffffffff) << (32 - pbi));
892 
893 		if ((a1[pdw] ^ a2[pdw]) & mask)
894 			return false;
895 	}
896 
897 	return true;
898 }
899 
addr4_match(__be32 a1,__be32 a2,u8 prefixlen)900 static inline bool addr4_match(__be32 a1, __be32 a2, u8 prefixlen)
901 {
902 	/* C99 6.5.7 (3): u32 << 32 is undefined behaviour */
903 	if (sizeof(long) == 4 && prefixlen == 0)
904 		return true;
905 	return !((a1 ^ a2) & htonl(~0UL << (32 - prefixlen)));
906 }
907 
908 static __inline__
xfrm_flowi_sport(const struct flowi * fl,const union flowi_uli * uli)909 __be16 xfrm_flowi_sport(const struct flowi *fl, const union flowi_uli *uli)
910 {
911 	__be16 port;
912 	switch(fl->flowi_proto) {
913 	case IPPROTO_TCP:
914 	case IPPROTO_UDP:
915 	case IPPROTO_UDPLITE:
916 	case IPPROTO_SCTP:
917 		port = uli->ports.sport;
918 		break;
919 	case IPPROTO_ICMP:
920 	case IPPROTO_ICMPV6:
921 		port = htons(uli->icmpt.type);
922 		break;
923 	case IPPROTO_MH:
924 		port = htons(uli->mht.type);
925 		break;
926 	case IPPROTO_GRE:
927 		port = htons(ntohl(uli->gre_key) >> 16);
928 		break;
929 	default:
930 		port = 0;	/*XXX*/
931 	}
932 	return port;
933 }
934 
935 static __inline__
xfrm_flowi_dport(const struct flowi * fl,const union flowi_uli * uli)936 __be16 xfrm_flowi_dport(const struct flowi *fl, const union flowi_uli *uli)
937 {
938 	__be16 port;
939 	switch(fl->flowi_proto) {
940 	case IPPROTO_TCP:
941 	case IPPROTO_UDP:
942 	case IPPROTO_UDPLITE:
943 	case IPPROTO_SCTP:
944 		port = uli->ports.dport;
945 		break;
946 	case IPPROTO_ICMP:
947 	case IPPROTO_ICMPV6:
948 		port = htons(uli->icmpt.code);
949 		break;
950 	case IPPROTO_GRE:
951 		port = htons(ntohl(uli->gre_key) & 0xffff);
952 		break;
953 	default:
954 		port = 0;	/*XXX*/
955 	}
956 	return port;
957 }
958 
959 bool xfrm_selector_match(const struct xfrm_selector *sel,
960 			 const struct flowi *fl, unsigned short family);
961 
962 #ifdef CONFIG_SECURITY_NETWORK_XFRM
963 /*	If neither has a context --> match
964  * 	Otherwise, both must have a context and the sids, doi, alg must match
965  */
xfrm_sec_ctx_match(struct xfrm_sec_ctx * s1,struct xfrm_sec_ctx * s2)966 static inline bool xfrm_sec_ctx_match(struct xfrm_sec_ctx *s1, struct xfrm_sec_ctx *s2)
967 {
968 	return ((!s1 && !s2) ||
969 		(s1 && s2 &&
970 		 (s1->ctx_sid == s2->ctx_sid) &&
971 		 (s1->ctx_doi == s2->ctx_doi) &&
972 		 (s1->ctx_alg == s2->ctx_alg)));
973 }
974 #else
xfrm_sec_ctx_match(struct xfrm_sec_ctx * s1,struct xfrm_sec_ctx * s2)975 static inline bool xfrm_sec_ctx_match(struct xfrm_sec_ctx *s1, struct xfrm_sec_ctx *s2)
976 {
977 	return true;
978 }
979 #endif
980 
981 /* A struct encoding bundle of transformations to apply to some set of flow.
982  *
983  * xdst->child points to the next element of bundle.
984  * dst->xfrm  points to an instanse of transformer.
985  *
986  * Due to unfortunate limitations of current routing cache, which we
987  * have no time to fix, it mirrors struct rtable and bound to the same
988  * routing key, including saddr,daddr. However, we can have many of
989  * bundles differing by session id. All the bundles grow from a parent
990  * policy rule.
991  */
992 struct xfrm_dst {
993 	union {
994 		struct dst_entry	dst;
995 		struct rtable		rt;
996 		struct rt6_info		rt6;
997 	} u;
998 	struct dst_entry *route;
999 	struct dst_entry *child;
1000 	struct dst_entry *path;
1001 	struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
1002 	int num_pols, num_xfrms;
1003 	u32 xfrm_genid;
1004 	u32 policy_genid;
1005 	u32 route_mtu_cached;
1006 	u32 child_mtu_cached;
1007 	u32 route_cookie;
1008 	u32 path_cookie;
1009 };
1010 
xfrm_dst_path(const struct dst_entry * dst)1011 static inline struct dst_entry *xfrm_dst_path(const struct dst_entry *dst)
1012 {
1013 #ifdef CONFIG_XFRM
1014 	if (dst->xfrm || (dst->flags & DST_XFRM_QUEUE)) {
1015 		const struct xfrm_dst *xdst = (const struct xfrm_dst *) dst;
1016 
1017 		return xdst->path;
1018 	}
1019 #endif
1020 	return (struct dst_entry *) dst;
1021 }
1022 
xfrm_dst_child(const struct dst_entry * dst)1023 static inline struct dst_entry *xfrm_dst_child(const struct dst_entry *dst)
1024 {
1025 #ifdef CONFIG_XFRM
1026 	if (dst->xfrm || (dst->flags & DST_XFRM_QUEUE)) {
1027 		struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
1028 		return xdst->child;
1029 	}
1030 #endif
1031 	return NULL;
1032 }
1033 
1034 #ifdef CONFIG_XFRM
xfrm_dst_set_child(struct xfrm_dst * xdst,struct dst_entry * child)1035 static inline void xfrm_dst_set_child(struct xfrm_dst *xdst, struct dst_entry *child)
1036 {
1037 	xdst->child = child;
1038 }
1039 
xfrm_dst_destroy(struct xfrm_dst * xdst)1040 static inline void xfrm_dst_destroy(struct xfrm_dst *xdst)
1041 {
1042 	xfrm_pols_put(xdst->pols, xdst->num_pols);
1043 	dst_release(xdst->route);
1044 	if (likely(xdst->u.dst.xfrm))
1045 		xfrm_state_put(xdst->u.dst.xfrm);
1046 }
1047 #endif
1048 
1049 void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev);
1050 
1051 struct xfrm_if_parms {
1052 	int link;		/* ifindex of underlying L2 interface */
1053 	u32 if_id;		/* interface identifier */
1054 	bool collect_md;
1055 };
1056 
1057 struct xfrm_if {
1058 	struct xfrm_if __rcu *next;	/* next interface in list */
1059 	struct net_device *dev;		/* virtual device associated with interface */
1060 	struct net *net;		/* netns for packet i/o */
1061 	struct xfrm_if_parms p;		/* interface parms */
1062 
1063 	struct gro_cells gro_cells;
1064 };
1065 
1066 struct xfrm_offload {
1067 	/* Output sequence number for replay protection on offloading. */
1068 	struct {
1069 		__u32 low;
1070 		__u32 hi;
1071 	} seq;
1072 
1073 	__u32			flags;
1074 #define	SA_DELETE_REQ		1
1075 #define	CRYPTO_DONE		2
1076 #define	CRYPTO_NEXT_DONE	4
1077 #define	CRYPTO_FALLBACK		8
1078 #define	XFRM_GSO_SEGMENT	16
1079 #define	XFRM_GRO		32
1080 /* 64 is free */
1081 #define	XFRM_DEV_RESUME		128
1082 #define	XFRM_XMIT		256
1083 
1084 	__u32			status;
1085 #define CRYPTO_SUCCESS				1
1086 #define CRYPTO_GENERIC_ERROR			2
1087 #define CRYPTO_TRANSPORT_AH_AUTH_FAILED		4
1088 #define CRYPTO_TRANSPORT_ESP_AUTH_FAILED	8
1089 #define CRYPTO_TUNNEL_AH_AUTH_FAILED		16
1090 #define CRYPTO_TUNNEL_ESP_AUTH_FAILED		32
1091 #define CRYPTO_INVALID_PACKET_SYNTAX		64
1092 #define CRYPTO_INVALID_PROTOCOL			128
1093 
1094 	/* Used to keep whole l2 header for transport mode GRO */
1095 	__u32			orig_mac_len;
1096 
1097 	__u8			proto;
1098 	__u8			inner_ipproto;
1099 };
1100 
1101 struct sec_path {
1102 	int			len;
1103 	int			olen;
1104 	int			verified_cnt;
1105 
1106 	struct xfrm_state	*xvec[XFRM_MAX_DEPTH];
1107 	struct xfrm_offload	ovec[XFRM_MAX_OFFLOAD_DEPTH];
1108 };
1109 
1110 struct sec_path *secpath_set(struct sk_buff *skb);
1111 
1112 static inline void
secpath_reset(struct sk_buff * skb)1113 secpath_reset(struct sk_buff *skb)
1114 {
1115 #ifdef CONFIG_XFRM
1116 	skb_ext_del(skb, SKB_EXT_SEC_PATH);
1117 #endif
1118 }
1119 
1120 static inline int
xfrm_addr_any(const xfrm_address_t * addr,unsigned short family)1121 xfrm_addr_any(const xfrm_address_t *addr, unsigned short family)
1122 {
1123 	switch (family) {
1124 	case AF_INET:
1125 		return addr->a4 == 0;
1126 	case AF_INET6:
1127 		return ipv6_addr_any(&addr->in6);
1128 	}
1129 	return 0;
1130 }
1131 
1132 static inline int
__xfrm4_state_addr_cmp(const struct xfrm_tmpl * tmpl,const struct xfrm_state * x)1133 __xfrm4_state_addr_cmp(const struct xfrm_tmpl *tmpl, const struct xfrm_state *x)
1134 {
1135 	return	(tmpl->saddr.a4 &&
1136 		 tmpl->saddr.a4 != x->props.saddr.a4);
1137 }
1138 
1139 static inline int
__xfrm6_state_addr_cmp(const struct xfrm_tmpl * tmpl,const struct xfrm_state * x)1140 __xfrm6_state_addr_cmp(const struct xfrm_tmpl *tmpl, const struct xfrm_state *x)
1141 {
1142 	return	(!ipv6_addr_any((struct in6_addr*)&tmpl->saddr) &&
1143 		 !ipv6_addr_equal((struct in6_addr *)&tmpl->saddr, (struct in6_addr*)&x->props.saddr));
1144 }
1145 
1146 static inline int
xfrm_state_addr_cmp(const struct xfrm_tmpl * tmpl,const struct xfrm_state * x,unsigned short family)1147 xfrm_state_addr_cmp(const struct xfrm_tmpl *tmpl, const struct xfrm_state *x, unsigned short family)
1148 {
1149 	switch (family) {
1150 	case AF_INET:
1151 		return __xfrm4_state_addr_cmp(tmpl, x);
1152 	case AF_INET6:
1153 		return __xfrm6_state_addr_cmp(tmpl, x);
1154 	}
1155 	return !0;
1156 }
1157 
1158 #ifdef CONFIG_XFRM
xfrm_input_state(struct sk_buff * skb)1159 static inline struct xfrm_state *xfrm_input_state(struct sk_buff *skb)
1160 {
1161 	struct sec_path *sp = skb_sec_path(skb);
1162 
1163 	return sp->xvec[sp->len - 1];
1164 }
1165 #endif
1166 
xfrm_offload(struct sk_buff * skb)1167 static inline struct xfrm_offload *xfrm_offload(struct sk_buff *skb)
1168 {
1169 #ifdef CONFIG_XFRM
1170 	struct sec_path *sp = skb_sec_path(skb);
1171 
1172 	if (!sp || !sp->olen || sp->len != sp->olen)
1173 		return NULL;
1174 
1175 	return &sp->ovec[sp->olen - 1];
1176 #else
1177 	return NULL;
1178 #endif
1179 }
1180 
1181 #ifdef CONFIG_XFRM
1182 int __xfrm_policy_check(struct sock *, int dir, struct sk_buff *skb,
1183 			unsigned short family);
1184 
__xfrm_check_nopolicy(struct net * net,struct sk_buff * skb,int dir)1185 static inline bool __xfrm_check_nopolicy(struct net *net, struct sk_buff *skb,
1186 					 int dir)
1187 {
1188 	if (!net->xfrm.policy_count[dir] && !secpath_exists(skb))
1189 		return net->xfrm.policy_default[dir] == XFRM_USERPOLICY_ACCEPT;
1190 
1191 	return false;
1192 }
1193 
__xfrm_check_dev_nopolicy(struct sk_buff * skb,int dir,unsigned short family)1194 static inline bool __xfrm_check_dev_nopolicy(struct sk_buff *skb,
1195 					     int dir, unsigned short family)
1196 {
1197 	if (dir != XFRM_POLICY_OUT && family == AF_INET) {
1198 		/* same dst may be used for traffic originating from
1199 		 * devices with different policy settings.
1200 		 */
1201 		return IPCB(skb)->flags & IPSKB_NOPOLICY;
1202 	}
1203 	return skb_dst(skb) && (skb_dst(skb)->flags & DST_NOPOLICY);
1204 }
1205 
__xfrm_policy_check2(struct sock * sk,int dir,struct sk_buff * skb,unsigned int family,int reverse)1206 static inline int __xfrm_policy_check2(struct sock *sk, int dir,
1207 				       struct sk_buff *skb,
1208 				       unsigned int family, int reverse)
1209 {
1210 	struct net *net = dev_net(skb->dev);
1211 	int ndir = dir | (reverse ? XFRM_POLICY_MASK + 1 : 0);
1212 	struct xfrm_offload *xo = xfrm_offload(skb);
1213 	struct xfrm_state *x;
1214 
1215 	if (sk && sk->sk_policy[XFRM_POLICY_IN])
1216 		return __xfrm_policy_check(sk, ndir, skb, family);
1217 
1218 	if (xo) {
1219 		x = xfrm_input_state(skb);
1220 		if (x->xso.type == XFRM_DEV_OFFLOAD_PACKET)
1221 			return (xo->flags & CRYPTO_DONE) &&
1222 			       (xo->status & CRYPTO_SUCCESS);
1223 	}
1224 
1225 	return __xfrm_check_nopolicy(net, skb, dir) ||
1226 	       __xfrm_check_dev_nopolicy(skb, dir, family) ||
1227 	       __xfrm_policy_check(sk, ndir, skb, family);
1228 }
1229 
xfrm_policy_check(struct sock * sk,int dir,struct sk_buff * skb,unsigned short family)1230 static inline int xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, unsigned short family)
1231 {
1232 	return __xfrm_policy_check2(sk, dir, skb, family, 0);
1233 }
1234 
xfrm4_policy_check(struct sock * sk,int dir,struct sk_buff * skb)1235 static inline int xfrm4_policy_check(struct sock *sk, int dir, struct sk_buff *skb)
1236 {
1237 	return xfrm_policy_check(sk, dir, skb, AF_INET);
1238 }
1239 
xfrm6_policy_check(struct sock * sk,int dir,struct sk_buff * skb)1240 static inline int xfrm6_policy_check(struct sock *sk, int dir, struct sk_buff *skb)
1241 {
1242 	return xfrm_policy_check(sk, dir, skb, AF_INET6);
1243 }
1244 
xfrm4_policy_check_reverse(struct sock * sk,int dir,struct sk_buff * skb)1245 static inline int xfrm4_policy_check_reverse(struct sock *sk, int dir,
1246 					     struct sk_buff *skb)
1247 {
1248 	return __xfrm_policy_check2(sk, dir, skb, AF_INET, 1);
1249 }
1250 
xfrm6_policy_check_reverse(struct sock * sk,int dir,struct sk_buff * skb)1251 static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
1252 					     struct sk_buff *skb)
1253 {
1254 	return __xfrm_policy_check2(sk, dir, skb, AF_INET6, 1);
1255 }
1256 
1257 int __xfrm_decode_session(struct net *net, struct sk_buff *skb, struct flowi *fl,
1258 			  unsigned int family, int reverse);
1259 
xfrm_decode_session(struct net * net,struct sk_buff * skb,struct flowi * fl,unsigned int family)1260 static inline int xfrm_decode_session(struct net *net, struct sk_buff *skb, struct flowi *fl,
1261 				      unsigned int family)
1262 {
1263 	return __xfrm_decode_session(net, skb, fl, family, 0);
1264 }
1265 
xfrm_decode_session_reverse(struct net * net,struct sk_buff * skb,struct flowi * fl,unsigned int family)1266 static inline int xfrm_decode_session_reverse(struct net *net, struct sk_buff *skb,
1267 					      struct flowi *fl,
1268 					      unsigned int family)
1269 {
1270 	return __xfrm_decode_session(net, skb, fl, family, 1);
1271 }
1272 
1273 int __xfrm_route_forward(struct sk_buff *skb, unsigned short family);
1274 
xfrm_route_forward(struct sk_buff * skb,unsigned short family)1275 static inline int xfrm_route_forward(struct sk_buff *skb, unsigned short family)
1276 {
1277 	struct net *net = dev_net(skb->dev);
1278 
1279 	if (!net->xfrm.policy_count[XFRM_POLICY_OUT] &&
1280 	    net->xfrm.policy_default[XFRM_POLICY_OUT] == XFRM_USERPOLICY_ACCEPT)
1281 		return true;
1282 
1283 	return (skb_dst(skb)->flags & DST_NOXFRM) ||
1284 	       __xfrm_route_forward(skb, family);
1285 }
1286 
xfrm4_route_forward(struct sk_buff * skb)1287 static inline int xfrm4_route_forward(struct sk_buff *skb)
1288 {
1289 	return xfrm_route_forward(skb, AF_INET);
1290 }
1291 
xfrm6_route_forward(struct sk_buff * skb)1292 static inline int xfrm6_route_forward(struct sk_buff *skb)
1293 {
1294 	return xfrm_route_forward(skb, AF_INET6);
1295 }
1296 
1297 int __xfrm_sk_clone_policy(struct sock *sk, const struct sock *osk);
1298 
xfrm_sk_clone_policy(struct sock * sk,const struct sock * osk)1299 static inline int xfrm_sk_clone_policy(struct sock *sk, const struct sock *osk)
1300 {
1301 	if (!sk_fullsock(osk))
1302 		return 0;
1303 	sk->sk_policy[0] = NULL;
1304 	sk->sk_policy[1] = NULL;
1305 	if (unlikely(osk->sk_policy[0] || osk->sk_policy[1]))
1306 		return __xfrm_sk_clone_policy(sk, osk);
1307 	return 0;
1308 }
1309 
1310 int xfrm_policy_delete(struct xfrm_policy *pol, int dir);
1311 
xfrm_sk_free_policy(struct sock * sk)1312 static inline void xfrm_sk_free_policy(struct sock *sk)
1313 {
1314 	struct xfrm_policy *pol;
1315 
1316 	pol = rcu_dereference_protected(sk->sk_policy[0], 1);
1317 	if (unlikely(pol != NULL)) {
1318 		xfrm_policy_delete(pol, XFRM_POLICY_MAX);
1319 		sk->sk_policy[0] = NULL;
1320 	}
1321 	pol = rcu_dereference_protected(sk->sk_policy[1], 1);
1322 	if (unlikely(pol != NULL)) {
1323 		xfrm_policy_delete(pol, XFRM_POLICY_MAX+1);
1324 		sk->sk_policy[1] = NULL;
1325 	}
1326 }
1327 
1328 #else
1329 
xfrm_sk_free_policy(struct sock * sk)1330 static inline void xfrm_sk_free_policy(struct sock *sk) {}
xfrm_sk_clone_policy(struct sock * sk,const struct sock * osk)1331 static inline int xfrm_sk_clone_policy(struct sock *sk, const struct sock *osk) { return 0; }
xfrm6_route_forward(struct sk_buff * skb)1332 static inline int xfrm6_route_forward(struct sk_buff *skb) { return 1; }
xfrm4_route_forward(struct sk_buff * skb)1333 static inline int xfrm4_route_forward(struct sk_buff *skb) { return 1; }
xfrm6_policy_check(struct sock * sk,int dir,struct sk_buff * skb)1334 static inline int xfrm6_policy_check(struct sock *sk, int dir, struct sk_buff *skb)
1335 {
1336 	return 1;
1337 }
xfrm4_policy_check(struct sock * sk,int dir,struct sk_buff * skb)1338 static inline int xfrm4_policy_check(struct sock *sk, int dir, struct sk_buff *skb)
1339 {
1340 	return 1;
1341 }
xfrm_policy_check(struct sock * sk,int dir,struct sk_buff * skb,unsigned short family)1342 static inline int xfrm_policy_check(struct sock *sk, int dir, struct sk_buff *skb, unsigned short family)
1343 {
1344 	return 1;
1345 }
xfrm_decode_session_reverse(struct net * net,struct sk_buff * skb,struct flowi * fl,unsigned int family)1346 static inline int xfrm_decode_session_reverse(struct net *net, struct sk_buff *skb,
1347 					      struct flowi *fl,
1348 					      unsigned int family)
1349 {
1350 	return -ENOSYS;
1351 }
xfrm4_policy_check_reverse(struct sock * sk,int dir,struct sk_buff * skb)1352 static inline int xfrm4_policy_check_reverse(struct sock *sk, int dir,
1353 					     struct sk_buff *skb)
1354 {
1355 	return 1;
1356 }
xfrm6_policy_check_reverse(struct sock * sk,int dir,struct sk_buff * skb)1357 static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir,
1358 					     struct sk_buff *skb)
1359 {
1360 	return 1;
1361 }
1362 #endif
1363 
1364 static __inline__
xfrm_flowi_daddr(const struct flowi * fl,unsigned short family)1365 xfrm_address_t *xfrm_flowi_daddr(const struct flowi *fl, unsigned short family)
1366 {
1367 	switch (family){
1368 	case AF_INET:
1369 		return (xfrm_address_t *)&fl->u.ip4.daddr;
1370 	case AF_INET6:
1371 		return (xfrm_address_t *)&fl->u.ip6.daddr;
1372 	}
1373 	return NULL;
1374 }
1375 
1376 static __inline__
xfrm_flowi_saddr(const struct flowi * fl,unsigned short family)1377 xfrm_address_t *xfrm_flowi_saddr(const struct flowi *fl, unsigned short family)
1378 {
1379 	switch (family){
1380 	case AF_INET:
1381 		return (xfrm_address_t *)&fl->u.ip4.saddr;
1382 	case AF_INET6:
1383 		return (xfrm_address_t *)&fl->u.ip6.saddr;
1384 	}
1385 	return NULL;
1386 }
1387 
1388 static __inline__
xfrm_flowi_addr_get(const struct flowi * fl,xfrm_address_t * saddr,xfrm_address_t * daddr,unsigned short family)1389 void xfrm_flowi_addr_get(const struct flowi *fl,
1390 			 xfrm_address_t *saddr, xfrm_address_t *daddr,
1391 			 unsigned short family)
1392 {
1393 	switch(family) {
1394 	case AF_INET:
1395 		memcpy(&saddr->a4, &fl->u.ip4.saddr, sizeof(saddr->a4));
1396 		memcpy(&daddr->a4, &fl->u.ip4.daddr, sizeof(daddr->a4));
1397 		break;
1398 	case AF_INET6:
1399 		saddr->in6 = fl->u.ip6.saddr;
1400 		daddr->in6 = fl->u.ip6.daddr;
1401 		break;
1402 	}
1403 }
1404 
1405 static __inline__ int
__xfrm4_state_addr_check(const struct xfrm_state * x,const xfrm_address_t * daddr,const xfrm_address_t * saddr)1406 __xfrm4_state_addr_check(const struct xfrm_state *x,
1407 			 const xfrm_address_t *daddr, const xfrm_address_t *saddr)
1408 {
1409 	if (daddr->a4 == x->id.daddr.a4 &&
1410 	    (saddr->a4 == x->props.saddr.a4 || !saddr->a4 || !x->props.saddr.a4))
1411 		return 1;
1412 	return 0;
1413 }
1414 
1415 static __inline__ int
__xfrm6_state_addr_check(const struct xfrm_state * x,const xfrm_address_t * daddr,const xfrm_address_t * saddr)1416 __xfrm6_state_addr_check(const struct xfrm_state *x,
1417 			 const xfrm_address_t *daddr, const xfrm_address_t *saddr)
1418 {
1419 	if (ipv6_addr_equal((struct in6_addr *)daddr, (struct in6_addr *)&x->id.daddr) &&
1420 	    (ipv6_addr_equal((struct in6_addr *)saddr, (struct in6_addr *)&x->props.saddr) ||
1421 	     ipv6_addr_any((struct in6_addr *)saddr) ||
1422 	     ipv6_addr_any((struct in6_addr *)&x->props.saddr)))
1423 		return 1;
1424 	return 0;
1425 }
1426 
1427 static __inline__ int
xfrm_state_addr_check(const struct xfrm_state * x,const xfrm_address_t * daddr,const xfrm_address_t * saddr,unsigned short family)1428 xfrm_state_addr_check(const struct xfrm_state *x,
1429 		      const xfrm_address_t *daddr, const xfrm_address_t *saddr,
1430 		      unsigned short family)
1431 {
1432 	switch (family) {
1433 	case AF_INET:
1434 		return __xfrm4_state_addr_check(x, daddr, saddr);
1435 	case AF_INET6:
1436 		return __xfrm6_state_addr_check(x, daddr, saddr);
1437 	}
1438 	return 0;
1439 }
1440 
1441 static __inline__ int
xfrm_state_addr_flow_check(const struct xfrm_state * x,const struct flowi * fl,unsigned short family)1442 xfrm_state_addr_flow_check(const struct xfrm_state *x, const struct flowi *fl,
1443 			   unsigned short family)
1444 {
1445 	switch (family) {
1446 	case AF_INET:
1447 		return __xfrm4_state_addr_check(x,
1448 						(const xfrm_address_t *)&fl->u.ip4.daddr,
1449 						(const xfrm_address_t *)&fl->u.ip4.saddr);
1450 	case AF_INET6:
1451 		return __xfrm6_state_addr_check(x,
1452 						(const xfrm_address_t *)&fl->u.ip6.daddr,
1453 						(const xfrm_address_t *)&fl->u.ip6.saddr);
1454 	}
1455 	return 0;
1456 }
1457 
xfrm_state_kern(const struct xfrm_state * x)1458 static inline int xfrm_state_kern(const struct xfrm_state *x)
1459 {
1460 	return atomic_read(&x->tunnel_users);
1461 }
1462 
xfrm_id_proto_valid(u8 proto)1463 static inline bool xfrm_id_proto_valid(u8 proto)
1464 {
1465 	switch (proto) {
1466 	case IPPROTO_AH:
1467 	case IPPROTO_ESP:
1468 	case IPPROTO_COMP:
1469 #if IS_ENABLED(CONFIG_IPV6)
1470 	case IPPROTO_ROUTING:
1471 	case IPPROTO_DSTOPTS:
1472 #endif
1473 		return true;
1474 	default:
1475 		return false;
1476 	}
1477 }
1478 
1479 /* IPSEC_PROTO_ANY only matches 3 IPsec protocols, 0 could match all. */
xfrm_id_proto_match(u8 proto,u8 userproto)1480 static inline int xfrm_id_proto_match(u8 proto, u8 userproto)
1481 {
1482 	return (!userproto || proto == userproto ||
1483 		(userproto == IPSEC_PROTO_ANY && (proto == IPPROTO_AH ||
1484 						  proto == IPPROTO_ESP ||
1485 						  proto == IPPROTO_COMP)));
1486 }
1487 
1488 /*
1489  * xfrm algorithm information
1490  */
1491 struct xfrm_algo_aead_info {
1492 	char *geniv;
1493 	u16 icv_truncbits;
1494 };
1495 
1496 struct xfrm_algo_auth_info {
1497 	u16 icv_truncbits;
1498 	u16 icv_fullbits;
1499 };
1500 
1501 struct xfrm_algo_encr_info {
1502 	char *geniv;
1503 	u16 blockbits;
1504 	u16 defkeybits;
1505 };
1506 
1507 struct xfrm_algo_comp_info {
1508 	u16 threshold;
1509 };
1510 
1511 struct xfrm_algo_desc {
1512 	char *name;
1513 	char *compat;
1514 	u8 available:1;
1515 	u8 pfkey_supported:1;
1516 	union {
1517 		struct xfrm_algo_aead_info aead;
1518 		struct xfrm_algo_auth_info auth;
1519 		struct xfrm_algo_encr_info encr;
1520 		struct xfrm_algo_comp_info comp;
1521 	} uinfo;
1522 	struct sadb_alg desc;
1523 };
1524 
1525 /* XFRM protocol handlers.  */
1526 struct xfrm4_protocol {
1527 	int (*handler)(struct sk_buff *skb);
1528 	int (*input_handler)(struct sk_buff *skb, int nexthdr, __be32 spi,
1529 			     int encap_type);
1530 	int (*cb_handler)(struct sk_buff *skb, int err);
1531 	int (*err_handler)(struct sk_buff *skb, u32 info);
1532 
1533 	struct xfrm4_protocol __rcu *next;
1534 	int priority;
1535 };
1536 
1537 struct xfrm6_protocol {
1538 	int (*handler)(struct sk_buff *skb);
1539 	int (*input_handler)(struct sk_buff *skb, int nexthdr, __be32 spi,
1540 			     int encap_type);
1541 	int (*cb_handler)(struct sk_buff *skb, int err);
1542 	int (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt,
1543 			   u8 type, u8 code, int offset, __be32 info);
1544 
1545 	struct xfrm6_protocol __rcu *next;
1546 	int priority;
1547 };
1548 
1549 /* XFRM tunnel handlers.  */
1550 struct xfrm_tunnel {
1551 	int (*handler)(struct sk_buff *skb);
1552 	int (*cb_handler)(struct sk_buff *skb, int err);
1553 	int (*err_handler)(struct sk_buff *skb, u32 info);
1554 
1555 	struct xfrm_tunnel __rcu *next;
1556 	int priority;
1557 };
1558 
1559 struct xfrm6_tunnel {
1560 	int (*handler)(struct sk_buff *skb);
1561 	int (*cb_handler)(struct sk_buff *skb, int err);
1562 	int (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt,
1563 			   u8 type, u8 code, int offset, __be32 info);
1564 	struct xfrm6_tunnel __rcu *next;
1565 	int priority;
1566 };
1567 
1568 void xfrm_init(void);
1569 void xfrm4_init(void);
1570 int xfrm_state_init(struct net *net);
1571 void xfrm_state_fini(struct net *net);
1572 void xfrm4_state_init(void);
1573 void xfrm4_protocol_init(void);
1574 #ifdef CONFIG_XFRM
1575 int xfrm6_init(void);
1576 void xfrm6_fini(void);
1577 int xfrm6_state_init(void);
1578 void xfrm6_state_fini(void);
1579 int xfrm6_protocol_init(void);
1580 void xfrm6_protocol_fini(void);
1581 #else
xfrm6_init(void)1582 static inline int xfrm6_init(void)
1583 {
1584 	return 0;
1585 }
xfrm6_fini(void)1586 static inline void xfrm6_fini(void)
1587 {
1588 	;
1589 }
1590 #endif
1591 
1592 #ifdef CONFIG_XFRM_STATISTICS
1593 int xfrm_proc_init(struct net *net);
1594 void xfrm_proc_fini(struct net *net);
1595 #endif
1596 
1597 int xfrm_sysctl_init(struct net *net);
1598 #ifdef CONFIG_SYSCTL
1599 void xfrm_sysctl_fini(struct net *net);
1600 #else
xfrm_sysctl_fini(struct net * net)1601 static inline void xfrm_sysctl_fini(struct net *net)
1602 {
1603 }
1604 #endif
1605 
1606 void xfrm_state_walk_init(struct xfrm_state_walk *walk, u8 proto,
1607 			  struct xfrm_address_filter *filter);
1608 int xfrm_state_walk(struct net *net, struct xfrm_state_walk *walk,
1609 		    int (*func)(struct xfrm_state *, int, void*), void *);
1610 void xfrm_state_walk_done(struct xfrm_state_walk *walk, struct net *net);
1611 struct xfrm_state *xfrm_state_alloc(struct net *net);
1612 void xfrm_state_free(struct xfrm_state *x);
1613 struct xfrm_state *xfrm_state_find(const xfrm_address_t *daddr,
1614 				   const xfrm_address_t *saddr,
1615 				   const struct flowi *fl,
1616 				   struct xfrm_tmpl *tmpl,
1617 				   struct xfrm_policy *pol, int *err,
1618 				   unsigned short family, u32 if_id);
1619 struct xfrm_state *xfrm_stateonly_find(struct net *net, u32 mark, u32 if_id,
1620 				       xfrm_address_t *daddr,
1621 				       xfrm_address_t *saddr,
1622 				       unsigned short family,
1623 				       u8 mode, u8 proto, u32 reqid);
1624 struct xfrm_state *xfrm_state_lookup_byspi(struct net *net, __be32 spi,
1625 					      unsigned short family);
1626 int xfrm_state_check_expire(struct xfrm_state *x);
1627 void xfrm_state_update_stats(struct net *net);
1628 #ifdef CONFIG_XFRM_OFFLOAD
xfrm_dev_state_update_stats(struct xfrm_state * x)1629 static inline void xfrm_dev_state_update_stats(struct xfrm_state *x)
1630 {
1631 	struct xfrm_dev_offload *xdo = &x->xso;
1632 	struct net_device *dev = READ_ONCE(xdo->dev);
1633 
1634 	if (dev && dev->xfrmdev_ops &&
1635 	    dev->xfrmdev_ops->xdo_dev_state_update_stats)
1636 		dev->xfrmdev_ops->xdo_dev_state_update_stats(x);
1637 
1638 }
1639 #else
xfrm_dev_state_update_stats(struct xfrm_state * x)1640 static inline void xfrm_dev_state_update_stats(struct xfrm_state *x) {}
1641 #endif
1642 void xfrm_state_insert(struct xfrm_state *x);
1643 int xfrm_state_add(struct xfrm_state *x);
1644 int xfrm_state_update(struct xfrm_state *x);
1645 struct xfrm_state *xfrm_state_lookup(struct net *net, u32 mark,
1646 				     const xfrm_address_t *daddr, __be32 spi,
1647 				     u8 proto, unsigned short family);
1648 struct xfrm_state *xfrm_state_lookup_byaddr(struct net *net, u32 mark,
1649 					    const xfrm_address_t *daddr,
1650 					    const xfrm_address_t *saddr,
1651 					    u8 proto,
1652 					    unsigned short family);
1653 #ifdef CONFIG_XFRM_SUB_POLICY
1654 void xfrm_tmpl_sort(struct xfrm_tmpl **dst, struct xfrm_tmpl **src, int n,
1655 		    unsigned short family);
1656 void xfrm_state_sort(struct xfrm_state **dst, struct xfrm_state **src, int n,
1657 		     unsigned short family);
1658 #else
xfrm_tmpl_sort(struct xfrm_tmpl ** d,struct xfrm_tmpl ** s,int n,unsigned short family)1659 static inline void xfrm_tmpl_sort(struct xfrm_tmpl **d, struct xfrm_tmpl **s,
1660 				  int n, unsigned short family)
1661 {
1662 }
1663 
xfrm_state_sort(struct xfrm_state ** d,struct xfrm_state ** s,int n,unsigned short family)1664 static inline void xfrm_state_sort(struct xfrm_state **d, struct xfrm_state **s,
1665 				   int n, unsigned short family)
1666 {
1667 }
1668 #endif
1669 
1670 struct xfrmk_sadinfo {
1671 	u32 sadhcnt; /* current hash bkts */
1672 	u32 sadhmcnt; /* max allowed hash bkts */
1673 	u32 sadcnt; /* current running count */
1674 };
1675 
1676 struct xfrmk_spdinfo {
1677 	u32 incnt;
1678 	u32 outcnt;
1679 	u32 fwdcnt;
1680 	u32 inscnt;
1681 	u32 outscnt;
1682 	u32 fwdscnt;
1683 	u32 spdhcnt;
1684 	u32 spdhmcnt;
1685 };
1686 
1687 struct xfrm_state *xfrm_find_acq_byseq(struct net *net, u32 mark, u32 seq);
1688 int xfrm_state_delete(struct xfrm_state *x);
1689 int xfrm_state_flush(struct net *net, u8 proto, bool task_valid, bool sync);
1690 int xfrm_dev_state_flush(struct net *net, struct net_device *dev, bool task_valid);
1691 int xfrm_dev_policy_flush(struct net *net, struct net_device *dev,
1692 			  bool task_valid);
1693 void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si);
1694 void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si);
1695 u32 xfrm_replay_seqhi(struct xfrm_state *x, __be32 net_seq);
1696 int xfrm_init_replay(struct xfrm_state *x, struct netlink_ext_ack *extack);
1697 u32 xfrm_state_mtu(struct xfrm_state *x, int mtu);
1698 int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload,
1699 		      struct netlink_ext_ack *extack);
1700 int xfrm_init_state(struct xfrm_state *x);
1701 int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type);
1702 int xfrm_input_resume(struct sk_buff *skb, int nexthdr);
1703 int xfrm_trans_queue_net(struct net *net, struct sk_buff *skb,
1704 			 int (*finish)(struct net *, struct sock *,
1705 				       struct sk_buff *));
1706 int xfrm_trans_queue(struct sk_buff *skb,
1707 		     int (*finish)(struct net *, struct sock *,
1708 				   struct sk_buff *));
1709 int xfrm_output_resume(struct sock *sk, struct sk_buff *skb, int err);
1710 int xfrm_output(struct sock *sk, struct sk_buff *skb);
1711 
1712 #if IS_ENABLED(CONFIG_NET_PKTGEN)
1713 int pktgen_xfrm_outer_mode_output(struct xfrm_state *x, struct sk_buff *skb);
1714 #endif
1715 
1716 void xfrm_local_error(struct sk_buff *skb, int mtu);
1717 int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
1718 		    int encap_type);
1719 int xfrm4_transport_finish(struct sk_buff *skb, int async);
1720 int xfrm4_rcv(struct sk_buff *skb);
1721 
xfrm4_rcv_spi(struct sk_buff * skb,int nexthdr,__be32 spi)1722 static inline int xfrm4_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)
1723 {
1724 	XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = NULL;
1725 	XFRM_SPI_SKB_CB(skb)->family = AF_INET;
1726 	XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr);
1727 	return xfrm_input(skb, nexthdr, spi, 0);
1728 }
1729 
1730 int xfrm4_output(struct net *net, struct sock *sk, struct sk_buff *skb);
1731 int xfrm4_protocol_register(struct xfrm4_protocol *handler, unsigned char protocol);
1732 int xfrm4_protocol_deregister(struct xfrm4_protocol *handler, unsigned char protocol);
1733 int xfrm4_tunnel_register(struct xfrm_tunnel *handler, unsigned short family);
1734 int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler, unsigned short family);
1735 void xfrm4_local_error(struct sk_buff *skb, u32 mtu);
1736 int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi,
1737 		  struct ip6_tnl *t);
1738 int xfrm6_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
1739 		    int encap_type);
1740 int xfrm6_transport_finish(struct sk_buff *skb, int async);
1741 int xfrm6_rcv_tnl(struct sk_buff *skb, struct ip6_tnl *t);
1742 int xfrm6_rcv(struct sk_buff *skb);
1743 int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
1744 		     xfrm_address_t *saddr, u8 proto);
1745 void xfrm6_local_error(struct sk_buff *skb, u32 mtu);
1746 int xfrm6_protocol_register(struct xfrm6_protocol *handler, unsigned char protocol);
1747 int xfrm6_protocol_deregister(struct xfrm6_protocol *handler, unsigned char protocol);
1748 int xfrm6_tunnel_register(struct xfrm6_tunnel *handler, unsigned short family);
1749 int xfrm6_tunnel_deregister(struct xfrm6_tunnel *handler, unsigned short family);
1750 __be32 xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr);
1751 __be32 xfrm6_tunnel_spi_lookup(struct net *net, const xfrm_address_t *saddr);
1752 int xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb);
1753 
1754 #ifdef CONFIG_XFRM
1755 void xfrm6_local_rxpmtu(struct sk_buff *skb, u32 mtu);
1756 int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
1757 int xfrm6_udp_encap_rcv(struct sock *sk, struct sk_buff *skb);
1758 struct sk_buff *xfrm4_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,
1759 					struct sk_buff *skb);
1760 struct sk_buff *xfrm6_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,
1761 					struct sk_buff *skb);
1762 int xfrm_user_policy(struct sock *sk, int optname, sockptr_t optval,
1763 		     int optlen);
1764 #else
xfrm_user_policy(struct sock * sk,int optname,sockptr_t optval,int optlen)1765 static inline int xfrm_user_policy(struct sock *sk, int optname,
1766 				   sockptr_t optval, int optlen)
1767 {
1768  	return -ENOPROTOOPT;
1769 }
1770 #endif
1771 
1772 struct dst_entry *__xfrm_dst_lookup(int family, const struct xfrm_dst_lookup_params *params);
1773 
1774 struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp);
1775 
1776 void xfrm_policy_walk_init(struct xfrm_policy_walk *walk, u8 type);
1777 int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk,
1778 		     int (*func)(struct xfrm_policy *, int, int, void*),
1779 		     void *);
1780 void xfrm_policy_walk_done(struct xfrm_policy_walk *walk, struct net *net);
1781 int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl);
1782 struct xfrm_policy *xfrm_policy_bysel_ctx(struct net *net,
1783 					  const struct xfrm_mark *mark,
1784 					  u32 if_id, u8 type, int dir,
1785 					  struct xfrm_selector *sel,
1786 					  struct xfrm_sec_ctx *ctx, int delete,
1787 					  int *err);
1788 struct xfrm_policy *xfrm_policy_byid(struct net *net,
1789 				     const struct xfrm_mark *mark, u32 if_id,
1790 				     u8 type, int dir, u32 id, int delete,
1791 				     int *err);
1792 int xfrm_policy_flush(struct net *net, u8 type, bool task_valid);
1793 void xfrm_policy_hash_rebuild(struct net *net);
1794 u32 xfrm_get_acqseq(void);
1795 int verify_spi_info(u8 proto, u32 min, u32 max, struct netlink_ext_ack *extack);
1796 int xfrm_alloc_spi(struct xfrm_state *x, u32 minspi, u32 maxspi,
1797 		   struct netlink_ext_ack *extack);
1798 struct xfrm_state *xfrm_find_acq(struct net *net, const struct xfrm_mark *mark,
1799 				 u8 mode, u32 reqid, u32 if_id, u8 proto,
1800 				 const xfrm_address_t *daddr,
1801 				 const xfrm_address_t *saddr, int create,
1802 				 unsigned short family);
1803 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol);
1804 
1805 #ifdef CONFIG_XFRM_MIGRATE
1806 int km_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
1807 	       const struct xfrm_migrate *m, int num_bundles,
1808 	       const struct xfrm_kmaddress *k,
1809 	       const struct xfrm_encap_tmpl *encap);
1810 struct xfrm_state *xfrm_migrate_state_find(struct xfrm_migrate *m, struct net *net,
1811 						u32 if_id);
1812 struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
1813 				      struct xfrm_migrate *m,
1814 				      struct xfrm_encap_tmpl *encap);
1815 int xfrm_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
1816 		 struct xfrm_migrate *m, int num_bundles,
1817 		 struct xfrm_kmaddress *k, struct net *net,
1818 		 struct xfrm_encap_tmpl *encap, u32 if_id,
1819 		 struct netlink_ext_ack *extack);
1820 #endif
1821 
1822 int km_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, __be16 sport);
1823 void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 portid);
1824 int km_report(struct net *net, u8 proto, struct xfrm_selector *sel,
1825 	      xfrm_address_t *addr);
1826 
1827 void xfrm_input_init(void);
1828 int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 *seq);
1829 
1830 void xfrm_probe_algs(void);
1831 int xfrm_count_pfkey_auth_supported(void);
1832 int xfrm_count_pfkey_enc_supported(void);
1833 struct xfrm_algo_desc *xfrm_aalg_get_byidx(unsigned int idx);
1834 struct xfrm_algo_desc *xfrm_ealg_get_byidx(unsigned int idx);
1835 struct xfrm_algo_desc *xfrm_aalg_get_byid(int alg_id);
1836 struct xfrm_algo_desc *xfrm_ealg_get_byid(int alg_id);
1837 struct xfrm_algo_desc *xfrm_calg_get_byid(int alg_id);
1838 struct xfrm_algo_desc *xfrm_aalg_get_byname(const char *name, int probe);
1839 struct xfrm_algo_desc *xfrm_ealg_get_byname(const char *name, int probe);
1840 struct xfrm_algo_desc *xfrm_calg_get_byname(const char *name, int probe);
1841 struct xfrm_algo_desc *xfrm_aead_get_byname(const char *name, int icv_len,
1842 					    int probe);
1843 
xfrm6_addr_equal(const xfrm_address_t * a,const xfrm_address_t * b)1844 static inline bool xfrm6_addr_equal(const xfrm_address_t *a,
1845 				    const xfrm_address_t *b)
1846 {
1847 	return ipv6_addr_equal((const struct in6_addr *)a,
1848 			       (const struct in6_addr *)b);
1849 }
1850 
xfrm_addr_equal(const xfrm_address_t * a,const xfrm_address_t * b,sa_family_t family)1851 static inline bool xfrm_addr_equal(const xfrm_address_t *a,
1852 				   const xfrm_address_t *b,
1853 				   sa_family_t family)
1854 {
1855 	switch (family) {
1856 	default:
1857 	case AF_INET:
1858 		return ((__force u32)a->a4 ^ (__force u32)b->a4) == 0;
1859 	case AF_INET6:
1860 		return xfrm6_addr_equal(a, b);
1861 	}
1862 }
1863 
xfrm_policy_id2dir(u32 index)1864 static inline int xfrm_policy_id2dir(u32 index)
1865 {
1866 	return index & 7;
1867 }
1868 
1869 #ifdef CONFIG_XFRM
1870 void xfrm_replay_advance(struct xfrm_state *x, __be32 net_seq);
1871 int xfrm_replay_check(struct xfrm_state *x, struct sk_buff *skb, __be32 net_seq);
1872 void xfrm_replay_notify(struct xfrm_state *x, int event);
1873 int xfrm_replay_overflow(struct xfrm_state *x, struct sk_buff *skb);
1874 int xfrm_replay_recheck(struct xfrm_state *x, struct sk_buff *skb, __be32 net_seq);
1875 
xfrm_aevent_is_on(struct net * net)1876 static inline int xfrm_aevent_is_on(struct net *net)
1877 {
1878 	struct sock *nlsk;
1879 	int ret = 0;
1880 
1881 	rcu_read_lock();
1882 	nlsk = rcu_dereference(net->xfrm.nlsk);
1883 	if (nlsk)
1884 		ret = netlink_has_listeners(nlsk, XFRMNLGRP_AEVENTS);
1885 	rcu_read_unlock();
1886 	return ret;
1887 }
1888 
xfrm_acquire_is_on(struct net * net)1889 static inline int xfrm_acquire_is_on(struct net *net)
1890 {
1891 	struct sock *nlsk;
1892 	int ret = 0;
1893 
1894 	rcu_read_lock();
1895 	nlsk = rcu_dereference(net->xfrm.nlsk);
1896 	if (nlsk)
1897 		ret = netlink_has_listeners(nlsk, XFRMNLGRP_ACQUIRE);
1898 	rcu_read_unlock();
1899 
1900 	return ret;
1901 }
1902 #endif
1903 
aead_len(struct xfrm_algo_aead * alg)1904 static inline unsigned int aead_len(struct xfrm_algo_aead *alg)
1905 {
1906 	return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
1907 }
1908 
xfrm_alg_len(const struct xfrm_algo * alg)1909 static inline unsigned int xfrm_alg_len(const struct xfrm_algo *alg)
1910 {
1911 	return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
1912 }
1913 
xfrm_alg_auth_len(const struct xfrm_algo_auth * alg)1914 static inline unsigned int xfrm_alg_auth_len(const struct xfrm_algo_auth *alg)
1915 {
1916 	return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
1917 }
1918 
xfrm_replay_state_esn_len(struct xfrm_replay_state_esn * replay_esn)1919 static inline unsigned int xfrm_replay_state_esn_len(struct xfrm_replay_state_esn *replay_esn)
1920 {
1921 	return sizeof(*replay_esn) + replay_esn->bmp_len * sizeof(__u32);
1922 }
1923 
1924 #ifdef CONFIG_XFRM_MIGRATE
xfrm_replay_clone(struct xfrm_state * x,struct xfrm_state * orig)1925 static inline int xfrm_replay_clone(struct xfrm_state *x,
1926 				     struct xfrm_state *orig)
1927 {
1928 
1929 	x->replay_esn = kmemdup(orig->replay_esn,
1930 				xfrm_replay_state_esn_len(orig->replay_esn),
1931 				GFP_KERNEL);
1932 	if (!x->replay_esn)
1933 		return -ENOMEM;
1934 	x->preplay_esn = kmemdup(orig->preplay_esn,
1935 				 xfrm_replay_state_esn_len(orig->preplay_esn),
1936 				 GFP_KERNEL);
1937 	if (!x->preplay_esn)
1938 		return -ENOMEM;
1939 
1940 	return 0;
1941 }
1942 
xfrm_algo_aead_clone(struct xfrm_algo_aead * orig)1943 static inline struct xfrm_algo_aead *xfrm_algo_aead_clone(struct xfrm_algo_aead *orig)
1944 {
1945 	return kmemdup(orig, aead_len(orig), GFP_KERNEL);
1946 }
1947 
1948 
xfrm_algo_clone(struct xfrm_algo * orig)1949 static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig)
1950 {
1951 	return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
1952 }
1953 
xfrm_algo_auth_clone(struct xfrm_algo_auth * orig)1954 static inline struct xfrm_algo_auth *xfrm_algo_auth_clone(struct xfrm_algo_auth *orig)
1955 {
1956 	return kmemdup(orig, xfrm_alg_auth_len(orig), GFP_KERNEL);
1957 }
1958 
xfrm_states_put(struct xfrm_state ** states,int n)1959 static inline void xfrm_states_put(struct xfrm_state **states, int n)
1960 {
1961 	int i;
1962 	for (i = 0; i < n; i++)
1963 		xfrm_state_put(*(states + i));
1964 }
1965 
xfrm_states_delete(struct xfrm_state ** states,int n)1966 static inline void xfrm_states_delete(struct xfrm_state **states, int n)
1967 {
1968 	int i;
1969 	for (i = 0; i < n; i++)
1970 		xfrm_state_delete(*(states + i));
1971 }
1972 #endif
1973 
1974 void __init xfrm_dev_init(void);
1975 
1976 #ifdef CONFIG_XFRM_OFFLOAD
1977 void xfrm_dev_resume(struct sk_buff *skb);
1978 void xfrm_dev_backlog(struct softnet_data *sd);
1979 struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features, bool *again);
1980 int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
1981 		       struct xfrm_user_offload *xuo,
1982 		       struct netlink_ext_ack *extack);
1983 int xfrm_dev_policy_add(struct net *net, struct xfrm_policy *xp,
1984 			struct xfrm_user_offload *xuo, u8 dir,
1985 			struct netlink_ext_ack *extack);
1986 bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x);
1987 void xfrm_dev_state_delete(struct xfrm_state *x);
1988 void xfrm_dev_state_free(struct xfrm_state *x);
1989 
xfrm_dev_state_advance_esn(struct xfrm_state * x)1990 static inline void xfrm_dev_state_advance_esn(struct xfrm_state *x)
1991 {
1992 	struct xfrm_dev_offload *xso = &x->xso;
1993 	struct net_device *dev = READ_ONCE(xso->dev);
1994 
1995 	if (dev && dev->xfrmdev_ops->xdo_dev_state_advance_esn)
1996 		dev->xfrmdev_ops->xdo_dev_state_advance_esn(x);
1997 }
1998 
xfrm_dst_offload_ok(struct dst_entry * dst)1999 static inline bool xfrm_dst_offload_ok(struct dst_entry *dst)
2000 {
2001 	struct xfrm_state *x = dst->xfrm;
2002 	struct xfrm_dst *xdst;
2003 
2004 	if (!x || !x->type_offload)
2005 		return false;
2006 
2007 	xdst = (struct xfrm_dst *) dst;
2008 	if (!x->xso.offload_handle && !xdst->child->xfrm)
2009 		return true;
2010 	if (x->xso.offload_handle && (x->xso.dev == xfrm_dst_path(dst)->dev) &&
2011 	    !xdst->child->xfrm)
2012 		return true;
2013 
2014 	return false;
2015 }
2016 
xfrm_dev_policy_delete(struct xfrm_policy * x)2017 static inline void xfrm_dev_policy_delete(struct xfrm_policy *x)
2018 {
2019 	struct xfrm_dev_offload *xdo = &x->xdo;
2020 	struct net_device *dev = xdo->dev;
2021 
2022 	if (dev && dev->xfrmdev_ops && dev->xfrmdev_ops->xdo_dev_policy_delete)
2023 		dev->xfrmdev_ops->xdo_dev_policy_delete(x);
2024 }
2025 
xfrm_dev_policy_free(struct xfrm_policy * x)2026 static inline void xfrm_dev_policy_free(struct xfrm_policy *x)
2027 {
2028 	struct xfrm_dev_offload *xdo = &x->xdo;
2029 	struct net_device *dev = xdo->dev;
2030 
2031 	if (dev && dev->xfrmdev_ops) {
2032 		if (dev->xfrmdev_ops->xdo_dev_policy_free)
2033 			dev->xfrmdev_ops->xdo_dev_policy_free(x);
2034 		xdo->dev = NULL;
2035 		netdev_put(dev, &xdo->dev_tracker);
2036 	}
2037 }
2038 #else
xfrm_dev_resume(struct sk_buff * skb)2039 static inline void xfrm_dev_resume(struct sk_buff *skb)
2040 {
2041 }
2042 
xfrm_dev_backlog(struct softnet_data * sd)2043 static inline void xfrm_dev_backlog(struct softnet_data *sd)
2044 {
2045 }
2046 
validate_xmit_xfrm(struct sk_buff * skb,netdev_features_t features,bool * again)2047 static inline struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features, bool *again)
2048 {
2049 	return skb;
2050 }
2051 
xfrm_dev_state_add(struct net * net,struct xfrm_state * x,struct xfrm_user_offload * xuo,struct netlink_ext_ack * extack)2052 static inline int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, struct xfrm_user_offload *xuo, struct netlink_ext_ack *extack)
2053 {
2054 	return 0;
2055 }
2056 
xfrm_dev_state_delete(struct xfrm_state * x)2057 static inline void xfrm_dev_state_delete(struct xfrm_state *x)
2058 {
2059 }
2060 
xfrm_dev_state_free(struct xfrm_state * x)2061 static inline void xfrm_dev_state_free(struct xfrm_state *x)
2062 {
2063 }
2064 
xfrm_dev_policy_add(struct net * net,struct xfrm_policy * xp,struct xfrm_user_offload * xuo,u8 dir,struct netlink_ext_ack * extack)2065 static inline int xfrm_dev_policy_add(struct net *net, struct xfrm_policy *xp,
2066 				      struct xfrm_user_offload *xuo, u8 dir,
2067 				      struct netlink_ext_ack *extack)
2068 {
2069 	return 0;
2070 }
2071 
xfrm_dev_policy_delete(struct xfrm_policy * x)2072 static inline void xfrm_dev_policy_delete(struct xfrm_policy *x)
2073 {
2074 }
2075 
xfrm_dev_policy_free(struct xfrm_policy * x)2076 static inline void xfrm_dev_policy_free(struct xfrm_policy *x)
2077 {
2078 }
2079 
xfrm_dev_offload_ok(struct sk_buff * skb,struct xfrm_state * x)2080 static inline bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x)
2081 {
2082 	return false;
2083 }
2084 
xfrm_dev_state_advance_esn(struct xfrm_state * x)2085 static inline void xfrm_dev_state_advance_esn(struct xfrm_state *x)
2086 {
2087 }
2088 
xfrm_dst_offload_ok(struct dst_entry * dst)2089 static inline bool xfrm_dst_offload_ok(struct dst_entry *dst)
2090 {
2091 	return false;
2092 }
2093 #endif
2094 
xfrm_mark_get(struct nlattr ** attrs,struct xfrm_mark * m)2095 static inline int xfrm_mark_get(struct nlattr **attrs, struct xfrm_mark *m)
2096 {
2097 	if (attrs[XFRMA_MARK])
2098 		memcpy(m, nla_data(attrs[XFRMA_MARK]), sizeof(struct xfrm_mark));
2099 	else
2100 		m->v = m->m = 0;
2101 
2102 	return m->v & m->m;
2103 }
2104 
xfrm_mark_put(struct sk_buff * skb,const struct xfrm_mark * m)2105 static inline int xfrm_mark_put(struct sk_buff *skb, const struct xfrm_mark *m)
2106 {
2107 	int ret = 0;
2108 
2109 	if (m->m | m->v)
2110 		ret = nla_put(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m);
2111 	return ret;
2112 }
2113 
xfrm_smark_get(__u32 mark,struct xfrm_state * x)2114 static inline __u32 xfrm_smark_get(__u32 mark, struct xfrm_state *x)
2115 {
2116 	struct xfrm_mark *m = &x->props.smark;
2117 
2118 	return (m->v & m->m) | (mark & ~m->m);
2119 }
2120 
xfrm_if_id_put(struct sk_buff * skb,__u32 if_id)2121 static inline int xfrm_if_id_put(struct sk_buff *skb, __u32 if_id)
2122 {
2123 	int ret = 0;
2124 
2125 	if (if_id)
2126 		ret = nla_put_u32(skb, XFRMA_IF_ID, if_id);
2127 	return ret;
2128 }
2129 
xfrm_tunnel_check(struct sk_buff * skb,struct xfrm_state * x,unsigned int family)2130 static inline int xfrm_tunnel_check(struct sk_buff *skb, struct xfrm_state *x,
2131 				    unsigned int family)
2132 {
2133 	bool tunnel = false;
2134 
2135 	switch(family) {
2136 	case AF_INET:
2137 		if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4)
2138 			tunnel = true;
2139 		break;
2140 	case AF_INET6:
2141 		if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6)
2142 			tunnel = true;
2143 		break;
2144 	}
2145 	if (tunnel && !(x->outer_mode.flags & XFRM_MODE_FLAG_TUNNEL))
2146 		return -EINVAL;
2147 
2148 	return 0;
2149 }
2150 
2151 extern const int xfrm_msg_min[XFRM_NR_MSGTYPES];
2152 extern const struct nla_policy xfrma_policy[XFRMA_MAX+1];
2153 
2154 struct xfrm_translator {
2155 	/* Allocate frag_list and put compat translation there */
2156 	int (*alloc_compat)(struct sk_buff *skb, const struct nlmsghdr *src);
2157 
2158 	/* Allocate nlmsg with 64-bit translaton of received 32-bit message */
2159 	struct nlmsghdr *(*rcv_msg_compat)(const struct nlmsghdr *nlh,
2160 			int maxtype, const struct nla_policy *policy,
2161 			struct netlink_ext_ack *extack);
2162 
2163 	/* Translate 32-bit user_policy from sockptr */
2164 	int (*xlate_user_policy_sockptr)(u8 **pdata32, int optlen);
2165 
2166 	struct module *owner;
2167 };
2168 
2169 #if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
2170 extern int xfrm_register_translator(struct xfrm_translator *xtr);
2171 extern int xfrm_unregister_translator(struct xfrm_translator *xtr);
2172 extern struct xfrm_translator *xfrm_get_translator(void);
2173 extern void xfrm_put_translator(struct xfrm_translator *xtr);
2174 #else
xfrm_get_translator(void)2175 static inline struct xfrm_translator *xfrm_get_translator(void)
2176 {
2177 	return NULL;
2178 }
xfrm_put_translator(struct xfrm_translator * xtr)2179 static inline void xfrm_put_translator(struct xfrm_translator *xtr)
2180 {
2181 }
2182 #endif
2183 
2184 #if IS_ENABLED(CONFIG_IPV6)
xfrm6_local_dontfrag(const struct sock * sk)2185 static inline bool xfrm6_local_dontfrag(const struct sock *sk)
2186 {
2187 	int proto;
2188 
2189 	if (!sk || sk->sk_family != AF_INET6)
2190 		return false;
2191 
2192 	proto = sk->sk_protocol;
2193 	if (proto == IPPROTO_UDP || proto == IPPROTO_RAW)
2194 		return inet6_test_bit(DONTFRAG, sk);
2195 
2196 	return false;
2197 }
2198 #endif
2199 
2200 #if (IS_BUILTIN(CONFIG_XFRM_INTERFACE) && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) || \
2201     (IS_MODULE(CONFIG_XFRM_INTERFACE) && IS_ENABLED(CONFIG_DEBUG_INFO_BTF_MODULES))
2202 
2203 extern struct metadata_dst __percpu *xfrm_bpf_md_dst;
2204 
2205 int register_xfrm_interface_bpf(void);
2206 
2207 #else
2208 
register_xfrm_interface_bpf(void)2209 static inline int register_xfrm_interface_bpf(void)
2210 {
2211 	return 0;
2212 }
2213 
2214 #endif
2215 
2216 #if IS_ENABLED(CONFIG_DEBUG_INFO_BTF)
2217 int register_xfrm_state_bpf(void);
2218 #else
register_xfrm_state_bpf(void)2219 static inline int register_xfrm_state_bpf(void)
2220 {
2221 	return 0;
2222 }
2223 #endif
2224 
2225 int xfrm_nat_keepalive_init(unsigned short family);
2226 void xfrm_nat_keepalive_fini(unsigned short family);
2227 int xfrm_nat_keepalive_net_init(struct net *net);
2228 int xfrm_nat_keepalive_net_fini(struct net *net);
2229 void xfrm_nat_keepalive_state_updated(struct xfrm_state *x);
2230 
2231 #endif	/* _NET_XFRM_H */
2232