static void qfq_purge_sc(struct qfq_if *qif, cqrq_purge_sc_t *pr) { struct ifclassq *ifq = qif->qif_ifq; u_int32_t i; IFCQ_LOCK_ASSERT_HELD(ifq); VERIFY(pr->sc == MBUF_SC_UNSPEC || MBUF_VALID_SC(pr->sc)); VERIFY(pr->flow != 0); if (pr->sc != MBUF_SC_UNSPEC) { i = MBUF_SCIDX(pr->sc); VERIFY(i < IFCQ_SC_MAX); qfq_purgeq(qif, ifq->ifcq_disc_slots[i].cl, pr->flow, &pr->packets, &pr->bytes); } else { u_int32_t cnt, len; pr->packets = 0; pr->bytes = 0; for (i = 0; i < IFCQ_SC_MAX; i++) { qfq_purgeq(qif, ifq->ifcq_disc_slots[i].cl, pr->flow, &cnt, &len); pr->packets += cnt; pr->bytes += len; } } }
errno_t mbuf_get_service_class_index(mbuf_svc_class_t sc, u_int32_t *index) { if (index == NULL || !MBUF_VALID_SC(sc)) return (EINVAL); *index = MBUF_SCIDX(sc); return (0); }
int mbuf_is_traffic_class_privileged(mbuf_t m) { if (m == NULL || !(m->m_flags & M_PKTHDR) || !MBUF_VALID_SC(m->m_pkthdr.pkt_svc)) return (0); return ((m->m_pkthdr.pkt_flags & PKTF_PRIO_PRIVILEGED) ? 1 : 0); }
static int priq_stat_sc(struct priq_if *pif, cqrq_stat_sc_t *sr) { struct ifclassq *ifq = pif->pif_ifq; struct priq_class *cl; u_int32_t i; IFCQ_LOCK_ASSERT_HELD(ifq); VERIFY(sr->sc == MBUF_SC_UNSPEC || MBUF_VALID_SC(sr->sc)); i = MBUF_SCIDX(sr->sc); VERIFY(i < IFCQ_SC_MAX); cl = ifq->ifcq_disc_slots[i].cl; sr->packets = qlen(&cl->cl_q); sr->bytes = qsize(&cl->cl_q); return (0); }