Blame view

net/xfrm/xfrm_inout.h 1.85 KB
b3284df1c   Florian Westphal   xfrm: remove inpu...
1
2
3
4
5
6
7
  /* SPDX-License-Identifier: GPL-2.0 */
  #include <linux/ipv6.h>
  #include <net/dsfield.h>
  #include <net/xfrm.h>
  
  #ifndef XFRM_INOUT_H
  #define XFRM_INOUT_H 1
171916cbd   Florian Westphal   xfrm: move xfrm4_...
8
9
10
11
12
13
14
15
16
17
18
19
20
  static inline void xfrm4_extract_header(struct sk_buff *skb)
  {
  	const struct iphdr *iph = ip_hdr(skb);
  
  	XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
  	XFRM_MODE_SKB_CB(skb)->id = iph->id;
  	XFRM_MODE_SKB_CB(skb)->frag_off = iph->frag_off;
  	XFRM_MODE_SKB_CB(skb)->tos = iph->tos;
  	XFRM_MODE_SKB_CB(skb)->ttl = iph->ttl;
  	XFRM_MODE_SKB_CB(skb)->optlen = iph->ihl * 4 - sizeof(*iph);
  	memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0,
  	       sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));
  }
a269fbfc4   Florian Westphal   xfrm: state: remo...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  static inline void xfrm6_extract_header(struct sk_buff *skb)
  {
  #if IS_ENABLED(CONFIG_IPV6)
  	struct ipv6hdr *iph = ipv6_hdr(skb);
  
  	XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
  	XFRM_MODE_SKB_CB(skb)->id = 0;
  	XFRM_MODE_SKB_CB(skb)->frag_off = htons(IP_DF);
  	XFRM_MODE_SKB_CB(skb)->tos = ipv6_get_dsfield(iph);
  	XFRM_MODE_SKB_CB(skb)->ttl = iph->hop_limit;
  	XFRM_MODE_SKB_CB(skb)->optlen = 0;
  	memcpy(XFRM_MODE_SKB_CB(skb)->flow_lbl, iph->flow_lbl,
  	       sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));
  #else
  	WARN_ON_ONCE(1);
  #endif
  }
b3284df1c   Florian Westphal   xfrm: remove inpu...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  static inline void xfrm6_beet_make_header(struct sk_buff *skb)
  {
  	struct ipv6hdr *iph = ipv6_hdr(skb);
  
  	iph->version = 6;
  
  	memcpy(iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl,
  	       sizeof(iph->flow_lbl));
  	iph->nexthdr = XFRM_MODE_SKB_CB(skb)->protocol;
  
  	ipv6_change_dsfield(iph, 0, XFRM_MODE_SKB_CB(skb)->tos);
  	iph->hop_limit = XFRM_MODE_SKB_CB(skb)->ttl;
  }
  
  static inline void xfrm4_beet_make_header(struct sk_buff *skb)
  {
  	struct iphdr *iph = ip_hdr(skb);
  
  	iph->ihl = 5;
  	iph->version = 4;
  
  	iph->protocol = XFRM_MODE_SKB_CB(skb)->protocol;
  	iph->tos = XFRM_MODE_SKB_CB(skb)->tos;
  
  	iph->id = XFRM_MODE_SKB_CB(skb)->id;
  	iph->frag_off = XFRM_MODE_SKB_CB(skb)->frag_off;
  	iph->ttl = XFRM_MODE_SKB_CB(skb)->ttl;
  }
  
  #endif