1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #include <linux/ipv6.h> 3 #include <net/dsfield.h> 4 #include <net/xfrm.h> 5 6 #ifndef XFRM_INOUT_H 7 #define XFRM_INOUT_H 1 8 9 static inline void xfrm6_beet_make_header(struct sk_buff *skb) 10 { 11 struct ipv6hdr *iph = ipv6_hdr(skb); 12 13 iph->version = 6; 14 15 memcpy(iph->flow_lbl, XFRM_MODE_SKB_CB(skb)->flow_lbl, 16 sizeof(iph->flow_lbl)); 17 iph->nexthdr = XFRM_MODE_SKB_CB(skb)->protocol; 18 19 ipv6_change_dsfield(iph, 0, XFRM_MODE_SKB_CB(skb)->tos); 20 iph->hop_limit = XFRM_MODE_SKB_CB(skb)->ttl; 21 } 22 23 static inline void xfrm4_beet_make_header(struct sk_buff *skb) 24 { 25 struct iphdr *iph = ip_hdr(skb); 26 27 iph->ihl = 5; 28 iph->version = 4; 29 30 iph->protocol = XFRM_MODE_SKB_CB(skb)->protocol; 31 iph->tos = XFRM_MODE_SKB_CB(skb)->tos; 32 33 iph->id = XFRM_MODE_SKB_CB(skb)->id; 34 iph->frag_off = XFRM_MODE_SKB_CB(skb)->frag_off; 35 iph->ttl = XFRM_MODE_SKB_CB(skb)->ttl; 36 } 37 38 #endif 39