Lines Matching refs:skb
122 struct sk_buff *skb = base->data; in ah_output_done() local
123 struct xfrm_state *x = skb_dst(skb)->xfrm; in ah_output_done()
125 struct iphdr *top_iph = ip_hdr(skb); in ah_output_done()
126 struct ip_auth_hdr *ah = ip_auth_hdr(skb); in ah_output_done()
127 int ihl = ip_hdrlen(skb); in ah_output_done()
129 iph = AH_SKB_CB(skb)->tmp; in ah_output_done()
141 kfree(AH_SKB_CB(skb)->tmp); in ah_output_done()
142 xfrm_output_resume(skb, err); in ah_output_done()
145 static int ah_output(struct xfrm_state *x, struct sk_buff *skb) in ah_output() argument
166 if ((err = skb_cow_data(skb, 0, &trailer)) < 0) in ah_output()
170 skb_push(skb, -skb_network_offset(skb)); in ah_output()
171 ah = ip_auth_hdr(skb); in ah_output()
172 ihl = ip_hdrlen(skb); in ah_output()
190 top_iph = ip_hdr(skb); in ah_output()
204 ah->nexthdr = *skb_mac_header(skb); in ah_output()
205 *skb_mac_header(skb) = IPPROTO_AH; in ah_output()
208 top_iph->tot_len = htons(skb->len); in ah_output()
220 ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output.low); in ah_output()
223 skb_to_sgvec_nomark(skb, sg, 0, skb->len); in ah_output()
227 *seqhi = htonl(XFRM_SKB_CB(skb)->seq.output.hi); in ah_output()
230 ahash_request_set_crypt(req, sg, icv, skb->len + seqhi_len); in ah_output()
231 ahash_request_set_callback(req, 0, ah_output_done, skb); in ah_output()
233 AH_SKB_CB(skb)->tmp = iph; in ah_output()
266 struct sk_buff *skb = base->data; in ah_input_done() local
267 struct xfrm_state *x = xfrm_input_state(skb); in ah_input_done()
269 struct ip_auth_hdr *ah = ip_auth_hdr(skb); in ah_input_done()
270 int ihl = ip_hdrlen(skb); in ah_input_done()
273 work_iph = AH_SKB_CB(skb)->tmp; in ah_input_done()
283 skb->network_header += ah_hlen; in ah_input_done()
284 memcpy(skb_network_header(skb), work_iph, ihl); in ah_input_done()
285 __skb_pull(skb, ah_hlen + ihl); in ah_input_done()
288 skb_reset_transport_header(skb); in ah_input_done()
290 skb_set_transport_header(skb, -ihl); in ah_input_done()
292 kfree(AH_SKB_CB(skb)->tmp); in ah_input_done()
293 xfrm_input_resume(skb, err); in ah_input_done()
296 static int ah_input(struct xfrm_state *x, struct sk_buff *skb) in ah_input() argument
317 if (!pskb_may_pull(skb, sizeof(*ah))) in ah_input()
320 ah = (struct ip_auth_hdr *)skb->data; in ah_input()
337 if (!pskb_may_pull(skb, ah_hlen)) in ah_input()
342 if (skb_unclone(skb, GFP_ATOMIC)) in ah_input()
345 skb->ip_summed = CHECKSUM_NONE; in ah_input()
348 if ((err = skb_cow_data(skb, 0, &trailer)) < 0) in ah_input()
352 ah = (struct ip_auth_hdr *)skb->data; in ah_input()
353 iph = ip_hdr(skb); in ah_input()
354 ihl = ip_hdrlen(skb); in ah_input()
388 skb_push(skb, ihl); in ah_input()
391 skb_to_sgvec_nomark(skb, sg, 0, skb->len); in ah_input()
395 *seqhi = XFRM_SKB_CB(skb)->seq.input.hi; in ah_input()
398 ahash_request_set_crypt(req, sg, icv, skb->len + seqhi_len); in ah_input()
399 ahash_request_set_callback(req, 0, ah_input_done, skb); in ah_input()
401 AH_SKB_CB(skb)->tmp = work_iph; in ah_input()
415 skb->network_header += ah_hlen; in ah_input()
416 memcpy(skb_network_header(skb), work_iph, ihl); in ah_input()
417 __skb_pull(skb, ah_hlen + ihl); in ah_input()
419 skb_reset_transport_header(skb); in ah_input()
421 skb_set_transport_header(skb, -ihl); in ah_input()
431 static int ah4_err(struct sk_buff *skb, u32 info) in ah4_err() argument
433 struct net *net = dev_net(skb->dev); in ah4_err()
434 const struct iphdr *iph = (const struct iphdr *)skb->data; in ah4_err()
435 struct ip_auth_hdr *ah = (struct ip_auth_hdr *)(skb->data+(iph->ihl<<2)); in ah4_err()
438 switch (icmp_hdr(skb)->type) { in ah4_err()
440 if (icmp_hdr(skb)->code != ICMP_FRAG_NEEDED) in ah4_err()
448 x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr, in ah4_err()
453 if (icmp_hdr(skb)->type == ICMP_DEST_UNREACH) in ah4_err()
454 ipv4_update_pmtu(skb, net, info, 0, 0, IPPROTO_AH, 0); in ah4_err()
456 ipv4_redirect(skb, net, 0, 0, IPPROTO_AH, 0); in ah4_err()
539 static int ah4_rcv_cb(struct sk_buff *skb, int err) in ah4_rcv_cb() argument