RFC Errata
RFC 8033, "Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem", February 2017
Source of RFC: aqm (tsv)See Also: RFC 8033 w/ inline errata
Errata ID: 5095
Status: Verified
Type: Technical
Publication Format(s) : TEXT
Reported By: Liang Tian
Date Reported: 2017-08-24
Verifier Name: Mirja Kühlewind
Date Verified: 2020-03-04
Section 5.2 says:
if PIE->in_measurement_ == TRUE: PIE->dq_count_ = PIE->dq_count_ + deque_pkt_size; if PIE->dq_count_ >= DQ_THRESHOLD then weight = DQ_THRESHOLD/2^16 PIE->avg_dq_time_ = (now - PIE->measurement_start_) * weight + PIE->avg_dq_time_ * (1 - weight); PIE->dq_count_ = 0; PIE->measurement_start_ = now else PIE->in_measurement_ = FALSE;
It should say:
if PIE->in_measurement_ == TRUE: PIE->dq_count_ = PIE->dq_count_ + deque_pkt_size; if PIE->dq_count_ >= DQ_THRESHOLD then weight = DQ_THRESHOLD/2^16 PIE->avg_dq_time_ = (now - PIE->measurement_start_) * weight + PIE->avg_dq_time_ * (1 - weight); PIE->in_measurement_ = FALSE;
Notes:
There should not be an "else" because if PIE->dq_count_ >= DQ_THRESHOLD, this measurement is over: avg_dq_time is calculated and in_measurement is set to FALSE; otherwise dq_count has been increased before this "if" and now we wait for next packet. Resetting dq_count and measurement_start is not necessary because they will be set again when a new measurement begins.