Lines Matching refs:q6

292 frag6_rmqueue(struct ip6q *q6, uint32_t bucket)  in frag6_rmqueue()  argument
296 TAILQ_REMOVE(IP6QB_HEAD(bucket), q6, ip6q_tq); in frag6_rmqueue()
299 mac_ip6q_destroy(q6); in frag6_rmqueue()
301 free(q6, M_FRAG6); in frag6_rmqueue()
309 frag6_freef(struct ip6q *q6, uint32_t bucket) in frag6_freef() argument
317 while ((af6 = TAILQ_FIRST(&q6->ip6q_frags)) != NULL) { in frag6_freef()
319 TAILQ_REMOVE(&q6->ip6q_frags, af6, ip6af_tq); in frag6_freef()
330 ip6->ip6_src = q6->ip6q_src; in frag6_freef()
331 ip6->ip6_dst = q6->ip6q_dst; in frag6_freef()
341 atomic_subtract_int(&frag6_nfrags, q6->ip6q_nfrag); in frag6_freef()
342 frag6_rmqueue(q6, bucket); in frag6_freef()
353 struct ip6q *q6; in frag6_cleanup() local
375 TAILQ_FOREACH(q6, head, ip6q_tq) { in frag6_cleanup()
376 TAILQ_FOREACH(af6, &q6->ip6q_frags, ip6af_tq) { in frag6_cleanup()
427 struct ip6q *q6; in frag6_input() local
569 TAILQ_FOREACH(q6, head, ip6q_tq) in frag6_input()
570 if (ip6f->ip6f_ident == q6->ip6q_ident && in frag6_input()
571 IN6_ARE_ADDR_EQUAL(&ip6->ip6_src, &q6->ip6q_src) && in frag6_input()
572 IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst, &q6->ip6q_dst) in frag6_input()
574 && mac_ip6q_match(m, q6) in frag6_input()
580 if (q6 == NULL) { in frag6_input()
599 q6 = malloc(sizeof(struct ip6q), M_FRAG6, M_NOWAIT | M_ZERO); in frag6_input()
600 if (q6 == NULL) in frag6_input()
603 if (mac_ip6q_init(q6, M_NOWAIT) != 0) { in frag6_input()
604 free(q6, M_FRAG6); in frag6_input()
607 mac_ip6q_create(m, q6); in frag6_input()
612 TAILQ_INIT(&q6->ip6q_frags); in frag6_input()
613 q6->ip6q_ident = ip6f->ip6f_ident; in frag6_input()
614 q6->ip6q_ttl = frag6_milli_to_callout_ticks(V_ip6_fraglifetime); in frag6_input()
615 q6->ip6q_src = ip6->ip6_src; in frag6_input()
616 q6->ip6q_dst = ip6->ip6_dst; in frag6_input()
617 q6->ip6q_ecn = IPV6_ECN(ip6); in frag6_input()
618 q6->ip6q_unfrglen = -1; /* The 1st fragment has not arrived. */ in frag6_input()
621 TAILQ_INSERT_HEAD(head, q6, ip6q_tq); in frag6_input()
633 if (fragoff == 0 && q6->ip6q_unfrglen == -1) { in frag6_input()
634 q6->ip6q_unfrglen = offset - sizeof(struct ip6_hdr) - in frag6_input()
636 q6->ip6q_nxt = ip6f->ip6f_nxt; in frag6_input()
645 if (q6->ip6q_unfrglen >= 0) { in frag6_input()
647 if (q6->ip6q_unfrglen + fragoff + frgpartlen > IPV6_MAXPACKET) { in frag6_input()
649 frag6_rmqueue(q6, bucket); in frag6_input()
659 frag6_rmqueue(q6, bucket); in frag6_input()
673 TAILQ_FOREACH_SAFE(af6, &q6->ip6q_frags, ip6af_tq, af6tmp) { in frag6_input()
674 if (q6->ip6q_unfrglen + af6->ip6af_off + in frag6_input()
684 TAILQ_REMOVE(&q6->ip6q_frags, af6, ip6af_tq); in frag6_input()
685 q6->ip6q_nfrag--; in frag6_input()
699 ip6err->ip6_src = q6->ip6q_src; in frag6_input()
700 ip6err->ip6_dst = q6->ip6q_dst; in frag6_input()
725 TAILQ_INSERT_HEAD(&q6->ip6q_frags, ip6af, ip6af_tq); in frag6_input()
736 ecn0 = q6->ip6q_ecn; in frag6_input()
743 q6->ip6q_ecn = IPTOS_ECN_CE; in frag6_input()
751 TAILQ_FOREACH(af6, &q6->ip6q_frags, ip6af_tq) in frag6_input()
766 af6tmp = TAILQ_LAST(&q6->ip6q_frags, ip6fraghead); in frag6_input()
772 frag6_freef(q6, bucket); in frag6_input()
782 frag6_freef(q6, bucket); in frag6_input()
789 mac_ip6q_update(m, q6); in frag6_input()
800 TAILQ_INSERT_TAIL(&q6->ip6q_frags, ip6af, ip6af_tq); in frag6_input()
803 q6->ip6q_nfrag++; in frag6_input()
806 TAILQ_FOREACH(af6, &q6->ip6q_frags, ip6af_tq) { in frag6_input()
808 if (q6->ip6q_nfrag > V_ip6_maxfragsperpacket) { in frag6_input()
809 IP6STAT_ADD(ip6s_fragdropped, q6->ip6q_nfrag); in frag6_input()
810 frag6_freef(q6, bucket); in frag6_input()
818 af6 = TAILQ_LAST(&q6->ip6q_frags, ip6fraghead); in frag6_input()
820 if (q6->ip6q_nfrag > V_ip6_maxfragsperpacket) { in frag6_input()
821 IP6STAT_ADD(ip6s_fragdropped, q6->ip6q_nfrag); in frag6_input()
822 frag6_freef(q6, bucket); in frag6_input()
830 ip6af = TAILQ_FIRST(&q6->ip6q_frags); in frag6_input()
832 TAILQ_REMOVE(&q6->ip6q_frags, ip6af, ip6af_tq); in frag6_input()
833 while ((af6 = TAILQ_FIRST(&q6->ip6q_frags)) != NULL) { in frag6_input()
839 TAILQ_REMOVE(&q6->ip6q_frags, af6, ip6af_tq); in frag6_input()
856 frag6_freef(q6, bucket); in frag6_input()
861 if (q6->ip6q_ecn == IPTOS_ECN_CE) in frag6_input()
863 nxt = q6->ip6q_nxt; in frag6_input()
872 mac_ip6q_reassemble(q6, m); in frag6_input()
874 atomic_subtract_int(&frag6_nfrags, q6->ip6q_nfrag); in frag6_input()
875 frag6_rmqueue(q6, bucket); in frag6_input()
937 struct ip6q *q6, *q6tmp; in frag6_slowtimo() local
951 TAILQ_FOREACH_SAFE(q6, head, ip6q_tq, q6tmp) in frag6_slowtimo()
952 if (--q6->ip6q_ttl == 0) { in frag6_slowtimo()
954 q6->ip6q_nfrag); in frag6_slowtimo()
956 frag6_freef(q6, bucket); in frag6_slowtimo()
970 (q6 = TAILQ_LAST(head, ip6qhead)) != NULL) { in frag6_slowtimo()
971 IP6STAT_ADD(ip6s_fragoverflow, q6->ip6q_nfrag); in frag6_slowtimo()
973 frag6_freef(q6, bucket); in frag6_slowtimo()
986 q6 = TAILQ_LAST(IP6QB_HEAD(bucket), ip6qhead); in frag6_slowtimo()
987 if (q6 != NULL) { in frag6_slowtimo()
988 IP6STAT_ADD(ip6s_fragoverflow, q6->ip6q_nfrag); in frag6_slowtimo()
990 frag6_freef(q6, bucket); in frag6_slowtimo()
1066 struct ip6q *q6; in frag6_drain_one() local
1071 while ((q6 = TAILQ_FIRST(IP6QB_HEAD(bucket))) != NULL) { in frag6_drain_one()
1074 frag6_freef(q6, bucket); in frag6_drain_one()