Lines Matching refs:skb
19 static int udp6_ufo_send_check(struct sk_buff *skb) in udp6_ufo_send_check() argument
25 if (skb->encapsulation) in udp6_ufo_send_check()
28 if (!pskb_may_pull(skb, sizeof(*uh))) in udp6_ufo_send_check()
31 ipv6h = ipv6_hdr(skb); in udp6_ufo_send_check()
32 uh = udp_hdr(skb); in udp6_ufo_send_check()
34 uh->check = ~csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, skb->len, in udp6_ufo_send_check()
36 skb->csum_start = skb_transport_header(skb) - skb->head; in udp6_ufo_send_check()
37 skb->csum_offset = offsetof(struct udphdr, check); in udp6_ufo_send_check()
38 skb->ip_summed = CHECKSUM_PARTIAL; in udp6_ufo_send_check()
42 static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, in udp6_ufo_fragment() argument
56 mss = skb_shinfo(skb)->gso_size; in udp6_ufo_fragment()
57 if (unlikely(skb->len <= mss)) in udp6_ufo_fragment()
60 if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) { in udp6_ufo_fragment()
62 int type = skb_shinfo(skb)->gso_type; in udp6_ufo_fragment()
71 skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss); in udp6_ufo_fragment()
80 offset = skb_checksum_start_offset(skb); in udp6_ufo_fragment()
81 csum = skb_checksum(skb, offset, skb->len - offset, 0); in udp6_ufo_fragment()
82 offset += skb->csum_offset; in udp6_ufo_fragment()
83 *(__sum16 *)(skb->data + offset) = csum_fold(csum); in udp6_ufo_fragment()
84 skb->ip_summed = CHECKSUM_NONE; in udp6_ufo_fragment()
87 tnl_hlen = skb_tnl_header_len(skb); in udp6_ufo_fragment()
88 if (skb_headroom(skb) < (tnl_hlen + frag_hdr_sz)) { in udp6_ufo_fragment()
89 if (gso_pskb_expand_head(skb, tnl_hlen + frag_hdr_sz)) in udp6_ufo_fragment()
96 unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr); in udp6_ufo_fragment()
99 unfrag_len = (skb_network_header(skb) - skb_mac_header(skb)) + in udp6_ufo_fragment()
101 packet_start = (u8 *) skb->head + SKB_GSO_CB(skb)->mac_offset; in udp6_ufo_fragment()
104 SKB_GSO_CB(skb)->mac_offset -= frag_hdr_sz; in udp6_ufo_fragment()
105 skb->mac_header -= frag_hdr_sz; in udp6_ufo_fragment()
106 skb->network_header -= frag_hdr_sz; in udp6_ufo_fragment()
108 fptr = (struct frag_hdr *)(skb_network_header(skb) + unfrag_ip6hlen); in udp6_ufo_fragment()
111 ipv6_select_ident(fptr, (struct rt6_info *)skb_dst(skb)); in udp6_ufo_fragment()
116 segs = skb_segment(skb, features); in udp6_ufo_fragment()