Lines Matching full:skb
31 struct sk_buff *skb) in esp4_gro_receive() argument
33 int offset = skb_gro_offset(skb); in esp4_gro_receive()
40 if (!pskb_pull(skb, offset)) in esp4_gro_receive()
43 if (xfrm_parse_spi(skb, IPPROTO_ESP, &spi, &seq) != 0) in esp4_gro_receive()
46 xo = xfrm_offload(skb); in esp4_gro_receive()
48 struct sec_path *sp = secpath_set(skb); in esp4_gro_receive()
56 x = xfrm_input_state_lookup(dev_net(skb->dev), skb->mark, in esp4_gro_receive()
57 (xfrm_address_t *)&ip_hdr(skb)->daddr, in esp4_gro_receive()
69 skb->mark = xfrm_smark_get(skb->mark, x); in esp4_gro_receive()
74 xo = xfrm_offload(skb); in esp4_gro_receive()
81 if (NAPI_GRO_CB(skb)->proto == IPPROTO_UDP) in esp4_gro_receive()
84 XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = NULL; in esp4_gro_receive()
85 XFRM_SPI_SKB_CB(skb)->family = AF_INET; in esp4_gro_receive()
86 XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr); in esp4_gro_receive()
87 XFRM_SPI_SKB_CB(skb)->seq = seq; in esp4_gro_receive()
91 xfrm_input(skb, IPPROTO_ESP, spi, encap_type); in esp4_gro_receive()
95 secpath_reset(skb); in esp4_gro_receive()
97 skb_push(skb, offset); in esp4_gro_receive()
98 NAPI_GRO_CB(skb)->same_flow = 0; in esp4_gro_receive()
99 NAPI_GRO_CB(skb)->flush = 1; in esp4_gro_receive()
104 static void esp4_gso_encap(struct xfrm_state *x, struct sk_buff *skb) in esp4_gso_encap() argument
107 struct iphdr *iph = ip_hdr(skb); in esp4_gso_encap()
108 struct xfrm_offload *xo = xfrm_offload(skb); in esp4_gso_encap()
111 skb_push(skb, -skb_network_offset(skb)); in esp4_gso_encap()
112 esph = ip_esp_hdr(skb); in esp4_gso_encap()
113 *skb_mac_header(skb) = IPPROTO_ESP; in esp4_gso_encap()
116 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low); in esp4_gso_encap()
122 struct sk_buff *skb, in xfrm4_tunnel_gso_segment() argument
128 return skb_eth_gso_segment(skb, features, type); in xfrm4_tunnel_gso_segment()
132 struct sk_buff *skb, in xfrm4_transport_gso_segment() argument
137 struct xfrm_offload *xo = xfrm_offload(skb); in xfrm4_transport_gso_segment()
139 skb->transport_header += x->props.header_len; in xfrm4_transport_gso_segment()
142 segs = ops->callbacks.gso_segment(skb, features); in xfrm4_transport_gso_segment()
148 struct sk_buff *skb, in xfrm4_beet_gso_segment() argument
151 struct xfrm_offload *xo = xfrm_offload(skb); in xfrm4_beet_gso_segment()
156 skb->transport_header += x->props.header_len; in xfrm4_beet_gso_segment()
161 (struct ip_beet_phdr *)skb->data; in xfrm4_beet_gso_segment()
163 skb->transport_header += ph->hdrlen * 8; in xfrm4_beet_gso_segment()
166 skb->transport_header -= IPV4_BEET_PHMAXLEN; in xfrm4_beet_gso_segment()
171 skb->transport_header += in xfrm4_beet_gso_segment()
172 ipv6_skip_exthdr(skb, 0, &proto, &frag); in xfrm4_beet_gso_segment()
174 skb_shinfo(skb)->gso_type |= SKB_GSO_TCPV4; in xfrm4_beet_gso_segment()
178 skb_shinfo(skb)->gso_type |= SKB_GSO_IPXIP4; in xfrm4_beet_gso_segment()
180 __skb_pull(skb, skb_transport_offset(skb)); in xfrm4_beet_gso_segment()
183 segs = ops->callbacks.gso_segment(skb, features); in xfrm4_beet_gso_segment()
189 struct sk_buff *skb, in xfrm4_outer_mode_gso_segment() argument
194 return xfrm4_tunnel_gso_segment(x, skb, features); in xfrm4_outer_mode_gso_segment()
196 return xfrm4_transport_gso_segment(x, skb, features); in xfrm4_outer_mode_gso_segment()
198 return xfrm4_beet_gso_segment(x, skb, features); in xfrm4_outer_mode_gso_segment()
204 static struct sk_buff *esp4_gso_segment(struct sk_buff *skb, in esp4_gso_segment() argument
211 struct xfrm_offload *xo = xfrm_offload(skb); in esp4_gso_segment()
217 if (!(skb_shinfo(skb)->gso_type & SKB_GSO_ESP)) in esp4_gso_segment()
220 sp = skb_sec_path(skb); in esp4_gso_segment()
223 esph = ip_esp_hdr(skb); in esp4_gso_segment()
228 if (!pskb_may_pull(skb, sizeof(*esph) + crypto_aead_ivsize(aead))) in esp4_gso_segment()
231 __skb_pull(skb, sizeof(*esph) + crypto_aead_ivsize(aead)); in esp4_gso_segment()
233 skb->encap_hdr_csum = 1; in esp4_gso_segment()
235 if ((!(skb->dev->gso_partial_features & NETIF_F_HW_ESP) && in esp4_gso_segment()
236 !(features & NETIF_F_HW_ESP)) || x->xso.dev != skb->dev) in esp4_gso_segment()
240 !(skb->dev->gso_partial_features & NETIF_F_HW_ESP_TX_CSUM)) in esp4_gso_segment()
246 return xfrm4_outer_mode_gso_segment(x, skb, esp_features); in esp4_gso_segment()
249 static int esp_input_tail(struct xfrm_state *x, struct sk_buff *skb) in esp_input_tail() argument
252 struct xfrm_offload *xo = xfrm_offload(skb); in esp_input_tail()
254 if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + crypto_aead_ivsize(aead))) in esp_input_tail()
258 skb->ip_summed = CHECKSUM_NONE; in esp_input_tail()
260 return esp_input_done2(skb, 0); in esp_input_tail()
263 static int esp_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features_t features) in esp_xmit() argument
278 xo = xfrm_offload(skb); in esp_xmit()
284 !(skb->dev->gso_partial_features & NETIF_F_HW_ESP)) || in esp_xmit()
285 x->xso.dev != skb->dev) { in esp_xmit()
292 /* skb is pure payload to encrypt */ in esp_xmit()
301 esp.clen = ALIGN(skb->len + 2 + esp.tfclen, blksize); in esp_xmit()
302 esp.plen = esp.clen - skb->len - esp.tfclen; in esp_xmit()
305 esp.esph = ip_esp_hdr(skb); in esp_xmit()
310 if (!hw_offload || !skb_is_gso(skb) || (hw_offload && encap_type == UDP_ENCAP_ESPINUDP)) { in esp_xmit()
311 esp.nfrags = esp_output_head(x, skb, &esp); in esp_xmit()
321 skb_push(skb, -skb_network_offset(skb)); in esp_xmit()
326 if (!skb_is_gso(skb)) in esp_xmit()
329 xo->seq.low += skb_shinfo(skb)->gso_segs; in esp_xmit()
339 * setting *skb_mac_header(skb) (see esp_output_udp_encap()) where skb->mac_header in esp_xmit()
341 * However, in esp_xmit(), skb->mac_header doesn't point to iphdr->protocol. in esp_xmit()
344 ip_hdr(skb)->protocol = IPPROTO_UDP; in esp_xmit()
349 ip_hdr(skb)->tot_len = htons(skb->len); in esp_xmit()
350 ip_send_check(ip_hdr(skb)); in esp_xmit()
353 if (!skb_ext_add(skb, SKB_EXT_SEC_PATH)) in esp_xmit()
356 xo = xfrm_offload(skb); in esp_xmit()
364 err = esp_output_tail(x, skb, &esp); in esp_xmit()
368 secpath_reset(skb); in esp_xmit()
370 if (skb_needs_linearize(skb, skb->dev->features) && in esp_xmit()
371 __skb_linearize(skb)) in esp_xmit()