Lines Matching refs:skb
119 struct sk_buff *skb = base->data; in esp_output_done() local
121 kfree(ESP_SKB_CB(skb)->tmp); in esp_output_done()
122 xfrm_output_resume(skb, err); in esp_output_done()
126 static void esp_restore_header(struct sk_buff *skb, unsigned int offset) in esp_restore_header() argument
128 struct ip_esp_hdr *esph = (void *)(skb->data + offset); in esp_restore_header()
129 void *tmp = ESP_SKB_CB(skb)->tmp; in esp_restore_header()
136 static void esp_output_restore_header(struct sk_buff *skb) in esp_output_restore_header() argument
138 esp_restore_header(skb, skb_transport_offset(skb) - sizeof(__be32)); in esp_output_restore_header()
143 struct sk_buff *skb = base->data; in esp_output_done_esn() local
145 esp_output_restore_header(skb); in esp_output_done_esn()
149 static int esp6_output(struct xfrm_state *x, struct sk_buff *skb) in esp6_output() argument
179 struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); in esp6_output()
183 if (skb->len < padto) in esp6_output()
184 tfclen = padto - skb->len; in esp6_output()
187 clen = ALIGN(skb->len + 2 + tfclen, blksize); in esp6_output()
188 plen = clen - skb->len - tfclen; in esp6_output()
190 err = skb_cow_data(skb, tfclen + plen + alen, &trailer); in esp6_output()
226 tail[plen - 1] = *skb_mac_header(skb); in esp6_output()
227 pskb_put(skb, trailer, clen - skb->len + alen); in esp6_output()
229 skb_push(skb, -skb_network_offset(skb)); in esp6_output()
230 esph = ip_esp_hdr(skb); in esp6_output()
231 *skb_mac_header(skb) = IPPROTO_ESP; in esp6_output()
233 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low); in esp6_output()
235 aead_request_set_callback(req, 0, esp_output_done, skb); in esp6_output()
242 esph = (void *)(skb_transport_header(skb) - sizeof(__be32)); in esp6_output()
244 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.hi); in esp6_output()
245 aead_request_set_callback(req, 0, esp_output_done_esn, skb); in esp6_output()
251 skb_to_sgvec(skb, sg, in esp6_output()
252 (unsigned char *)esph - skb->data, in esp6_output()
258 seqno = cpu_to_be64(XFRM_SKB_CB(skb)->seq.output.low + in esp6_output()
259 ((u64)XFRM_SKB_CB(skb)->seq.output.hi << 32)); in esp6_output()
265 ESP_SKB_CB(skb)->tmp = tmp; in esp6_output()
278 esp_output_restore_header(skb); in esp6_output()
287 static int esp_input_done2(struct sk_buff *skb, int err) in esp_input_done2() argument
289 struct xfrm_state *x = xfrm_input_state(skb); in esp_input_done2()
293 int elen = skb->len - hlen; in esp_input_done2()
294 int hdr_len = skb_network_header_len(skb); in esp_input_done2()
298 kfree(ESP_SKB_CB(skb)->tmp); in esp_input_done2()
303 if (skb_copy_bits(skb, skb->len - alen - 2, nexthdr, 2)) in esp_input_done2()
316 pskb_trim(skb, skb->len - alen - padlen - 2); in esp_input_done2()
317 __skb_pull(skb, hlen); in esp_input_done2()
319 skb_reset_transport_header(skb); in esp_input_done2()
321 skb_set_transport_header(skb, -hdr_len); in esp_input_done2()
335 struct sk_buff *skb = base->data; in esp_input_done() local
337 xfrm_input_resume(skb, esp_input_done2(skb, err)); in esp_input_done()
340 static void esp_input_restore_header(struct sk_buff *skb) in esp_input_restore_header() argument
342 esp_restore_header(skb, 0); in esp_input_restore_header()
343 __skb_pull(skb, 4); in esp_input_restore_header()
348 struct sk_buff *skb = base->data; in esp_input_done_esn() local
350 esp_input_restore_header(skb); in esp_input_done_esn()
354 static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) in esp6_input() argument
361 int elen = skb->len - sizeof(*esph) - ivlen; in esp6_input()
371 if (!pskb_may_pull(skb, sizeof(*esph) + ivlen)) { in esp6_input()
381 nfrags = skb_cow_data(skb, 0, &trailer); in esp6_input()
401 ESP_SKB_CB(skb)->tmp = tmp; in esp6_input()
407 skb->ip_summed = CHECKSUM_NONE; in esp6_input()
409 esph = (struct ip_esp_hdr *)skb->data; in esp6_input()
411 aead_request_set_callback(req, 0, esp_input_done, skb); in esp6_input()
418 esph = (void *)skb_push(skb, 4); in esp6_input()
421 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.input.hi); in esp6_input()
422 aead_request_set_callback(req, 0, esp_input_done_esn, skb); in esp6_input()
426 skb_to_sgvec(skb, sg, 0, skb->len); in esp6_input()
436 esp_input_restore_header(skb); in esp6_input()
438 ret = esp_input_done2(skb, ret); in esp6_input()
459 static int esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, in esp6_err() argument
462 struct net *net = dev_net(skb->dev); in esp6_err()
463 const struct ipv6hdr *iph = (const struct ipv6hdr *)skb->data; in esp6_err()
464 struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data + offset); in esp6_err()
471 x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr, in esp6_err()
477 ip6_redirect(skb, net, skb->dev->ifindex, 0); in esp6_err()
479 ip6_update_pmtu(skb, net, info, 0, 0); in esp6_err()
664 static int esp6_rcv_cb(struct sk_buff *skb, int err) in esp6_rcv_cb() argument