Lines Matching refs:skb
91 struct sk_buff *skb = base->data; in esp_output_done() local
93 kfree(ESP_SKB_CB(skb)->tmp); in esp_output_done()
94 xfrm_output_resume(skb, err); in esp_output_done()
98 static void esp_restore_header(struct sk_buff *skb, unsigned int offset) in esp_restore_header() argument
100 struct ip_esp_hdr *esph = (void *)(skb->data + offset); in esp_restore_header()
101 void *tmp = ESP_SKB_CB(skb)->tmp; in esp_restore_header()
108 static void esp_output_restore_header(struct sk_buff *skb) in esp_output_restore_header() argument
110 esp_restore_header(skb, skb_transport_offset(skb) - sizeof(__be32)); in esp_output_restore_header()
115 struct sk_buff *skb = base->data; in esp_output_done_esn() local
117 esp_output_restore_header(skb); in esp_output_done_esn()
121 static int esp_output(struct xfrm_state *x, struct sk_buff *skb) in esp_output() argument
152 struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); in esp_output()
156 if (skb->len < padto) in esp_output()
157 tfclen = padto - skb->len; in esp_output()
160 clen = ALIGN(skb->len + 2 + tfclen, blksize); in esp_output()
161 plen = clen - skb->len - tfclen; in esp_output()
163 err = skb_cow_data(skb, tfclen + plen + alen, &trailer); in esp_output()
199 tail[plen - 1] = *skb_mac_header(skb); in esp_output()
200 pskb_put(skb, trailer, clen - skb->len + alen); in esp_output()
202 skb_push(skb, -skb_network_offset(skb)); in esp_output()
203 esph = ip_esp_hdr(skb); in esp_output()
204 *skb_mac_header(skb) = IPPROTO_ESP; in esp_output()
223 uh->len = htons(skb->len - skb_transport_offset(skb)); in esp_output()
238 *skb_mac_header(skb) = IPPROTO_UDP; in esp_output()
241 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low); in esp_output()
243 aead_request_set_callback(req, 0, esp_output_done, skb); in esp_output()
250 esph = (void *)(skb_transport_header(skb) - sizeof(__be32)); in esp_output()
252 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.hi); in esp_output()
253 aead_request_set_callback(req, 0, esp_output_done_esn, skb); in esp_output()
259 skb_to_sgvec(skb, sg, in esp_output()
260 (unsigned char *)esph - skb->data, in esp_output()
266 seqno = cpu_to_be64(XFRM_SKB_CB(skb)->seq.output.low + in esp_output()
267 ((u64)XFRM_SKB_CB(skb)->seq.output.hi << 32)); in esp_output()
273 ESP_SKB_CB(skb)->tmp = tmp; in esp_output()
286 esp_output_restore_header(skb); in esp_output()
295 static int esp_input_done2(struct sk_buff *skb, int err) in esp_input_done2() argument
298 struct xfrm_state *x = xfrm_input_state(skb); in esp_input_done2()
302 int elen = skb->len - hlen; in esp_input_done2()
307 kfree(ESP_SKB_CB(skb)->tmp); in esp_input_done2()
312 if (skb_copy_bits(skb, skb->len-alen-2, nexthdr, 2)) in esp_input_done2()
322 iph = ip_hdr(skb); in esp_input_done2()
327 struct udphdr *uh = (void *)(skb_network_header(skb) + ihl); in esp_input_done2()
359 skb->ip_summed = CHECKSUM_UNNECESSARY; in esp_input_done2()
362 pskb_trim(skb, skb->len - alen - padlen - 2); in esp_input_done2()
363 __skb_pull(skb, hlen); in esp_input_done2()
365 skb_reset_transport_header(skb); in esp_input_done2()
367 skb_set_transport_header(skb, -ihl); in esp_input_done2()
381 struct sk_buff *skb = base->data; in esp_input_done() local
383 xfrm_input_resume(skb, esp_input_done2(skb, err)); in esp_input_done()
386 static void esp_input_restore_header(struct sk_buff *skb) in esp_input_restore_header() argument
388 esp_restore_header(skb, 0); in esp_input_restore_header()
389 __skb_pull(skb, 4); in esp_input_restore_header()
394 struct sk_buff *skb = base->data; in esp_input_done_esn() local
396 esp_input_restore_header(skb); in esp_input_done_esn()
405 static int esp_input(struct xfrm_state *x, struct sk_buff *skb) in esp_input() argument
412 int elen = skb->len - sizeof(*esph) - ivlen; in esp_input()
422 if (!pskb_may_pull(skb, sizeof(*esph) + ivlen)) in esp_input()
428 err = skb_cow_data(skb, 0, &trailer); in esp_input()
447 ESP_SKB_CB(skb)->tmp = tmp; in esp_input()
453 skb->ip_summed = CHECKSUM_NONE; in esp_input()
455 esph = (struct ip_esp_hdr *)skb->data; in esp_input()
457 aead_request_set_callback(req, 0, esp_input_done, skb); in esp_input()
464 esph = (void *)skb_push(skb, 4); in esp_input()
467 esph->seq_no = htonl(XFRM_SKB_CB(skb)->seq.input.hi); in esp_input()
468 aead_request_set_callback(req, 0, esp_input_done_esn, skb); in esp_input()
472 skb_to_sgvec(skb, sg, 0, skb->len); in esp_input()
482 esp_input_restore_header(skb); in esp_input()
484 err = esp_input_done2(skb, err); in esp_input()
512 static int esp4_err(struct sk_buff *skb, u32 info) in esp4_err() argument
514 struct net *net = dev_net(skb->dev); in esp4_err()
515 const struct iphdr *iph = (const struct iphdr *)skb->data; in esp4_err()
516 struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data+(iph->ihl<<2)); in esp4_err()
519 switch (icmp_hdr(skb)->type) { in esp4_err()
521 if (icmp_hdr(skb)->code != ICMP_FRAG_NEEDED) in esp4_err()
529 x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr, in esp4_err()
534 if (icmp_hdr(skb)->type == ICMP_DEST_UNREACH) in esp4_err()
535 ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_ESP, 0); in esp4_err()
537 ipv4_redirect(skb, net, 0, 0, IPPROTO_ESP, 0); in esp4_err()
723 static int esp4_rcv_cb(struct sk_buff *skb, int err) in esp4_rcv_cb() argument