Lines Matching refs:state
651 struct ip_frag_state *state)
655 state->DF = DF;
656 state->hlen = hlen;
657 state->ll_rs = ll_rs;
658 state->mtu = mtu;
660 state->left = skb->len - hlen; /* Space per frame */
661 state->ptr = hlen; /* Where to start from */
663 state->offset = (ntohs(iph->frag_off) & IP_OFFSET) << 3;
664 state->not_last_frag = iph->frag_off & htons(IP_MF);
684 struct sk_buff *ip_frag_next(struct sk_buff *skb, struct ip_frag_state *state)
686 unsigned int len = state->left;
690 len = state->left;
692 if (len > state->mtu)
693 len = state->mtu;
696 if (len < state->left) {
701 skb2 = alloc_skb(len + state->hlen + state->ll_rs, GFP_ATOMIC);
710 skb_reserve(skb2, state->ll_rs);
711 skb_put(skb2, len + state->hlen);
713 skb2->transport_header = skb2->network_header + state->hlen;
727 skb_copy_from_linear_data(skb, skb_network_header(skb2), state->hlen);
732 if (skb_copy_bits(skb, state->ptr, skb_transport_header(skb2), len))
734 state->left -= len;
740 iph->frag_off = htons((state->offset >> 3));
741 if (state->DF)
748 if (state->left > 0 || state->not_last_frag)
750 state->ptr += len;
751 state->offset += len;
753 iph->tot_len = htons(len + state->hlen);
777 struct ip_frag_state state;
901 &state);
907 while (state.left > 0) {
908 bool first_frag = (state.offset == 0);
910 skb2 = ip_frag_next(skb, &state);