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