1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds #ifndef _NET_ESP_H 31da177e4SLinus Torvalds #define _NET_ESP_H 41da177e4SLinus Torvalds 538320c70SHerbert Xu #include <linux/skbuff.h> 61da177e4SLinus Torvalds 787bdc48dSHerbert Xu struct ip_esp_hdr; 887bdc48dSHerbert Xu 987bdc48dSHerbert Xu static inline struct ip_esp_hdr *ip_esp_hdr(const struct sk_buff *skb) 1087bdc48dSHerbert Xu { 1187bdc48dSHerbert Xu return (struct ip_esp_hdr *)skb_transport_header(skb); 1287bdc48dSHerbert Xu } 1387bdc48dSHerbert Xu 14*dda520c4SRaed Salem static inline void esp_output_fill_trailer(u8 *tail, int tfclen, int plen, __u8 proto) 15*dda520c4SRaed Salem { 16*dda520c4SRaed Salem /* Fill padding... */ 17*dda520c4SRaed Salem if (tfclen) { 18*dda520c4SRaed Salem memset(tail, 0, tfclen); 19*dda520c4SRaed Salem tail += tfclen; 20*dda520c4SRaed Salem } 21*dda520c4SRaed Salem do { 22*dda520c4SRaed Salem int i; 23*dda520c4SRaed Salem for (i = 0; i < plen - 2; i++) 24*dda520c4SRaed Salem tail[i] = i + 1; 25*dda520c4SRaed Salem } while (0); 26*dda520c4SRaed Salem tail[plen - 2] = plen - 2; 27*dda520c4SRaed Salem tail[plen - 1] = proto; 28*dda520c4SRaed Salem } 29*dda520c4SRaed Salem 30fca11ebdSSteffen Klassert struct esp_info { 31fca11ebdSSteffen Klassert struct ip_esp_hdr *esph; 32fca11ebdSSteffen Klassert __be64 seqno; 33fca11ebdSSteffen Klassert int tfclen; 34fca11ebdSSteffen Klassert int tailen; 35fca11ebdSSteffen Klassert int plen; 36fca11ebdSSteffen Klassert int clen; 37fca11ebdSSteffen Klassert int len; 38fca11ebdSSteffen Klassert int nfrags; 39fca11ebdSSteffen Klassert __u8 proto; 40fca11ebdSSteffen Klassert bool inplace; 41fca11ebdSSteffen Klassert }; 42fca11ebdSSteffen Klassert 43fca11ebdSSteffen Klassert int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp); 44fca11ebdSSteffen Klassert int esp_output_tail(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp); 45fca11ebdSSteffen Klassert int esp_input_done2(struct sk_buff *skb, int err); 46383d0350SSteffen Klassert int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp); 47383d0350SSteffen Klassert int esp6_output_tail(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *esp); 48383d0350SSteffen Klassert int esp6_input_done2(struct sk_buff *skb, int err); 491da177e4SLinus Torvalds #endif 50