Lines Matching refs:frag

710 	iter->frag = skb_shinfo(skb)->frag_list;  in ip6_fraglist_init()
741 struct sk_buff *frag = iter->frag; in ip6_fraglist_prepare() local
745 frag->ip_summed = CHECKSUM_NONE; in ip6_fraglist_prepare()
746 skb_reset_transport_header(frag); in ip6_fraglist_prepare()
747 fh = __skb_push(frag, sizeof(struct frag_hdr)); in ip6_fraglist_prepare()
748 __skb_push(frag, hlen); in ip6_fraglist_prepare()
749 skb_reset_network_header(frag); in ip6_fraglist_prepare()
750 memcpy(skb_network_header(frag), iter->tmp_hdr, hlen); in ip6_fraglist_prepare()
755 if (frag->next) in ip6_fraglist_prepare()
758 ipv6_hdr(frag)->payload_len = htons(frag->len - sizeof(struct ipv6hdr)); in ip6_fraglist_prepare()
759 ip6_copy_metadata(frag, skb); in ip6_fraglist_prepare()
787 struct sk_buff *frag; in ip6_frag_next() local
801 frag = alloc_skb(len + state->hlen + sizeof(struct frag_hdr) + in ip6_frag_next()
803 if (!frag) in ip6_frag_next()
810 ip6_copy_metadata(frag, skb); in ip6_frag_next()
811 skb_reserve(frag, state->hroom); in ip6_frag_next()
812 skb_put(frag, len + state->hlen + sizeof(struct frag_hdr)); in ip6_frag_next()
813 skb_reset_network_header(frag); in ip6_frag_next()
814 fh = (struct frag_hdr *)(skb_network_header(frag) + state->hlen); in ip6_frag_next()
815 frag->transport_header = (frag->network_header + state->hlen + in ip6_frag_next()
823 skb_set_owner_w(frag, skb->sk); in ip6_frag_next()
828 skb_copy_from_linear_data(skb, skb_network_header(frag), state->hlen); in ip6_frag_next()
830 fragnexthdr_offset = skb_network_header(frag); in ip6_frag_next()
844 BUG_ON(skb_copy_bits(skb, state->ptr, skb_transport_header(frag), in ip6_frag_next()
851 ipv6_hdr(frag)->payload_len = htons(frag->len - sizeof(struct ipv6hdr)); in ip6_frag_next()
856 return frag; in ip6_frag_next()
863 struct sk_buff *frag; in ip6_fragment() local
928 skb_walk_frags(skb, frag) { in ip6_fragment()
930 if (frag->len > mtu || in ip6_fragment()
931 ((frag->len & 7) && frag->next) || in ip6_fragment()
932 skb_headroom(frag) < (hlen + hroom + sizeof(struct frag_hdr))) in ip6_fragment()
936 if (skb_shared(frag)) in ip6_fragment()
939 BUG_ON(frag->sk); in ip6_fragment()
941 frag->sk = skb->sk; in ip6_fragment()
942 frag->destructor = sock_wfree; in ip6_fragment()
944 skb->truesize -= frag->truesize; in ip6_fragment()
958 if (iter.frag) in ip6_fragment()
967 if (err || !iter.frag) in ip6_fragment()
982 kfree_skb_list(iter.frag); in ip6_fragment()
991 if (frag2 == frag) in ip6_fragment()
1013 frag = ip6_frag_next(skb, &state); in ip6_fragment()
1014 if (IS_ERR(frag)) { in ip6_fragment()
1015 err = PTR_ERR(frag); in ip6_fragment()
1022 skb_set_delivery_time(frag, tstamp, mono_delivery_time); in ip6_fragment()
1023 err = output(net, sk, frag); in ip6_fragment()