]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/pktsched/pktsched_qfq.c
xnu-3789.1.32.tar.gz
[apple/xnu.git] / bsd / net / pktsched / pktsched_qfq.c
index cc696f7307f719a6be3b641c5913e6f2e1a966ab..b1a88d4354ca327e6b78ce4729c383b15d6d6bec 100644 (file)
@@ -582,6 +582,10 @@ qfq_class_create(struct qfq_if *qif, u_int32_t weight, u_int32_t qlimit,
                        if (flags & QFCF_SFB)
                                cl->cl_qflags |= SFBF_FLOWCTL;
                }
+               if (flags & QFCF_DELAYBASED) {
+                       if (flags & QFCF_SFB)
+                               cl->cl_qflags |= SFBF_DELAYBASED;
+               }
                if (flags & QFCF_CLEARDSCP) {
                        if (flags & QFCF_RIO)
                                cl->cl_qflags |= RIOF_CLEARDSCP;
@@ -973,6 +977,7 @@ qfq_dequeue(struct qfq_if *qif, cqdq_op_t op)
 #endif /* QFQ_DEBUG */
 
        IFCQ_DEC_LEN(ifq);
+       IFCQ_DEC_BYTES(ifq, len);
        if (qempty(&cl->cl_q))
                cl->cl_period++;
        PKTCNTR_ADD(&cl->cl_xmitcnt, 1, len);
@@ -1118,6 +1123,7 @@ qfq_enqueue(struct qfq_if *qif, struct qfq_class *cl, struct mbuf *m,
                }
        }
        IFCQ_INC_LEN(ifq);
+       IFCQ_INC_BYTES(ifq, len);
 
 #if QFQ_DEBUG
        qif->qif_queued++;
@@ -1814,6 +1820,8 @@ qfq_setup_ifclassq(struct ifclassq *ifq, u_int32_t flags)
                qflags |= QFCF_ECN;
        if (flags & PKTSCHEDF_QALG_FLOWCTL)
                qflags |= QFCF_FLOWCTL;
+       if (flags & PKTSCHEDF_QALG_DELAYBASED)
+               qflags |= QFCF_DELAYBASED;
 
        qif = qfq_alloc(ifp, M_WAITOK, FALSE);
        if (qif == NULL)
@@ -1864,7 +1872,7 @@ qfq_setup_ifclassq(struct ifclassq *ifq, u_int32_t flags)
 
        err = ifclassq_attach(ifq, PKTSCHEDT_QFQ, qif,
            qfq_enqueue_ifclassq, qfq_dequeue_ifclassq, NULL,
-           qfq_request_ifclassq);
+           NULL, qfq_request_ifclassq);
 
        /* cache these for faster lookup */
        if (err == 0) {