Lines Matching refs:frent

143 static int	pf_frent_holes(struct pf_frent *frent);
295 struct pf_frent *frent; in pf_free_fragment() local
313 while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) { in pf_free_fragment()
314 TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); in pf_free_fragment()
316 m_freem(frent->fe_m); in pf_free_fragment()
317 uma_zfree(V_pf_frent_z, frent); in pf_free_fragment()
348 struct pf_frent *frent; in pf_create_fragment() local
352 frent = uma_zalloc(V_pf_frent_z, M_NOWAIT); in pf_create_fragment()
353 if (frent == NULL) { in pf_create_fragment()
355 frent = uma_zalloc(V_pf_frent_z, M_NOWAIT); in pf_create_fragment()
356 if (frent == NULL) { in pf_create_fragment()
362 return (frent); in pf_create_fragment()
373 pf_frent_holes(struct pf_frent *frent) in pf_frent_holes() argument
375 struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next); in pf_frent_holes()
376 struct pf_frent *next = TAILQ_NEXT(frent, fr_next); in pf_frent_holes()
380 if (frent->fe_off == 0) in pf_frent_holes()
383 KASSERT(frent->fe_off != 0, ("frent->fe_off != 0")); in pf_frent_holes()
384 if (frent->fe_off == prev->fe_off + prev->fe_len) in pf_frent_holes()
388 if (!frent->fe_mff) in pf_frent_holes()
391 KASSERT(frent->fe_mff, ("frent->fe_mff")); in pf_frent_holes()
392 if (next->fe_off == frent->fe_off + frent->fe_len) in pf_frent_holes()
399 pf_frent_index(struct pf_frent *frent) in pf_frent_index() argument
411 return frent->fe_off / (0x10000 / PF_FRAG_ENTRY_POINTS); in pf_frent_index()
415 pf_frent_insert(struct pf_fragment *frag, struct pf_frent *frent, in pf_frent_insert() argument
427 index = pf_frent_index(frent); in pf_frent_insert()
433 TAILQ_INSERT_HEAD(&frag->fr_queue, frent, fr_next); in pf_frent_insert()
435 KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off, in pf_frent_insert()
437 TAILQ_INSERT_AFTER(&frag->fr_queue, prev, frent, fr_next); in pf_frent_insert()
443 frag->fr_firstoff[index] = frent; in pf_frent_insert()
445 if (frent->fe_off < frag->fr_firstoff[index]->fe_off) { in pf_frent_insert()
448 frag->fr_firstoff[index] = frent; in pf_frent_insert()
456 frag->fr_holes += pf_frent_holes(frent); in pf_frent_insert()
462 pf_frent_remove(struct pf_fragment *frag, struct pf_frent *frent) in pf_frent_remove() argument
465 struct pf_frent *prev = TAILQ_PREV(frent, pf_fragq, fr_next); in pf_frent_remove()
467 struct pf_frent *next = TAILQ_NEXT(frent, fr_next); in pf_frent_remove()
470 frag->fr_holes -= pf_frent_holes(frent); in pf_frent_remove()
472 index = pf_frent_index(frent); in pf_frent_remove()
474 if (frag->fr_firstoff[index]->fe_off == frent->fe_off) { in pf_frent_remove()
478 KASSERT(frent->fe_off + frent->fe_len <= next->fe_off, in pf_frent_remove()
487 KASSERT(frag->fr_firstoff[index]->fe_off < frent->fe_off, in pf_frent_remove()
490 KASSERT(prev->fe_off + prev->fe_len <= frent->fe_off, in pf_frent_remove()
496 TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); in pf_frent_remove()
503 pf_frent_previous(struct pf_fragment *frag, struct pf_frent *frent) in pf_frent_previous() argument
514 if (prev->fe_off <= frent->fe_off) in pf_frent_previous()
523 for (index = pf_frent_index(frent); index < PF_FRAG_ENTRY_POINTS; in pf_frent_previous()
536 if (prev->fe_off > frent->fe_off) { in pf_frent_previous()
540 KASSERT(prev->fe_off <= frent->fe_off, in pf_frent_previous()
550 if (next->fe_off > frent->fe_off) in pf_frent_previous()
559 struct pf_frent *frent, u_short *reason) in pf_fillup_fragment() argument
569 if (frent->fe_len == 0) { in pf_fillup_fragment()
575 if (frent->fe_mff && (frent->fe_len & 0x7)) { in pf_fillup_fragment()
577 frent->fe_len); in pf_fillup_fragment()
582 if (frent->fe_off + frent->fe_len > IP_MAXPACKET) { in pf_fillup_fragment()
584 frent->fe_off + frent->fe_len); in pf_fillup_fragment()
590 id, frent->fe_off, frent->fe_off + frent->fe_len); in pf_fillup_fragment()
593 id, frent->fe_off, frent->fe_off + frent->fe_len); in pf_fillup_fragment()
630 frag->fr_maxlen = frent->fe_len; in pf_fillup_fragment()
644 pf_frent_insert(frag, frent, NULL); in pf_fillup_fragment()
653 if (frent->fe_len > frag->fr_maxlen) in pf_fillup_fragment()
654 frag->fr_maxlen = frent->fe_len; in pf_fillup_fragment()
661 if (frent->fe_off + frent->fe_len < total && !frent->fe_mff) in pf_fillup_fragment()
666 if (frent->fe_off + frent->fe_len > total || in pf_fillup_fragment()
667 (frent->fe_off + frent->fe_len == total && frent->fe_mff)) in pf_fillup_fragment()
670 if (frent->fe_off + frent->fe_len == total && !frent->fe_mff) in pf_fillup_fragment()
675 prev = pf_frent_previous(frag, frent); in pf_fillup_fragment()
683 if (prev != NULL && prev->fe_off + prev->fe_len > frent->fe_off) { in pf_fillup_fragment()
689 precut = prev->fe_off + prev->fe_len - frent->fe_off; in pf_fillup_fragment()
690 if (precut >= frent->fe_len) { in pf_fillup_fragment()
695 m_adj(frent->fe_m, precut); in pf_fillup_fragment()
696 frent->fe_off += precut; in pf_fillup_fragment()
697 frent->fe_len -= precut; in pf_fillup_fragment()
700 for (; after != NULL && frent->fe_off + frent->fe_len > after->fe_off; in pf_fillup_fragment()
704 aftercut = frent->fe_off + frent->fe_len - after->fe_off; in pf_fillup_fragment()
734 if (pf_frent_insert(frag, frent, prev)) { in pf_fillup_fragment()
757 uma_zfree(V_pf_frent_z, frent); in pf_fillup_fragment()
765 struct pf_frent *frent; in pf_join_fragment() local
767 frent = TAILQ_FIRST(&frag->fr_queue); in pf_join_fragment()
768 TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); in pf_join_fragment()
770 m = frent->fe_m; in pf_join_fragment()
771 if ((frent->fe_hdrlen + frent->fe_len) < m->m_pkthdr.len) in pf_join_fragment()
772 m_adj(m, (frent->fe_hdrlen + frent->fe_len) - m->m_pkthdr.len); in pf_join_fragment()
773 uma_zfree(V_pf_frent_z, frent); in pf_join_fragment()
774 while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) { in pf_join_fragment()
775 TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); in pf_join_fragment()
777 m2 = frent->fe_m; in pf_join_fragment()
779 m_adj(m2, frent->fe_hdrlen); in pf_join_fragment()
781 if (frent->fe_len < m2->m_pkthdr.len) in pf_join_fragment()
782 m_adj(m2, frent->fe_len - m2->m_pkthdr.len); in pf_join_fragment()
784 uma_zfree(V_pf_frent_z, frent); in pf_join_fragment()
800 struct pf_frent *frent; in pf_reassemble() local
810 if ((frent = pf_create_fragment(reason)) == NULL) in pf_reassemble()
813 frent->fe_m = m; in pf_reassemble()
814 frent->fe_hdrlen = ip->ip_hl << 2; in pf_reassemble()
815 frent->fe_extoff = 0; in pf_reassemble()
816 frent->fe_len = ntohs(ip->ip_len) - (ip->ip_hl << 2); in pf_reassemble()
817 frent->fe_off = (ntohs(ip->ip_off) & IP_OFFMASK) << 3; in pf_reassemble()
818 frent->fe_mff = ntohs(ip->ip_off) & IP_MF; in pf_reassemble()
822 if ((frag = pf_fillup_fragment(&key, ip->ip_id, frent, reason)) == NULL) in pf_reassemble()
835 frent = TAILQ_FIRST(&frag->fr_queue); in pf_reassemble()
836 KASSERT(frent != NULL, ("frent != NULL")); in pf_reassemble()
839 hdrlen = frent->fe_hdrlen; in pf_reassemble()
895 struct pf_frent *frent; in pf_reassemble6() local
908 if ((frent = pf_create_fragment(reason)) == NULL) { in pf_reassemble6()
913 frent->fe_m = m; in pf_reassemble6()
914 frent->fe_hdrlen = hdrlen; in pf_reassemble6()
915 frent->fe_extoff = extoff; in pf_reassemble6()
916 frent->fe_len = sizeof(struct ip6_hdr) + ntohs(ip6->ip6_plen) - hdrlen; in pf_reassemble6()
917 frent->fe_off = ntohs(fraghdr->ip6f_offlg & IP6F_OFF_MASK); in pf_reassemble6()
918 frent->fe_mff = fraghdr->ip6f_offlg & IP6F_MORE_FRAG; in pf_reassemble6()
926 if ((frag = pf_fillup_fragment(&key, fraghdr->ip6f_ident, frent, reason)) == NULL) { in pf_reassemble6()
942 frent = TAILQ_FIRST(&frag->fr_queue); in pf_reassemble6()
943 KASSERT(frent != NULL, ("frent != NULL")); in pf_reassemble6()
944 extoff = frent->fe_extoff; in pf_reassemble6()
949 hdrlen = frent->fe_hdrlen - sizeof(struct ip6_frag); in pf_reassemble6()