Lines Matching refs:bw
1782 bandwidth_limit_init(struct bwlimit *bw, u_int64_t kbps, size_t buflen) in bandwidth_limit_init() argument
1784 bw->buflen = buflen; in bandwidth_limit_init()
1785 bw->rate = kbps; in bandwidth_limit_init()
1786 bw->thresh = buflen; in bandwidth_limit_init()
1787 bw->lamt = 0; in bandwidth_limit_init()
1788 timerclear(&bw->bwstart); in bandwidth_limit_init()
1789 timerclear(&bw->bwend); in bandwidth_limit_init()
1794 bandwidth_limit(struct bwlimit *bw, size_t read_len) in bandwidth_limit() argument
1799 bw->lamt += read_len; in bandwidth_limit()
1800 if (!timerisset(&bw->bwstart)) { in bandwidth_limit()
1801 monotime_tv(&bw->bwstart); in bandwidth_limit()
1804 if (bw->lamt < bw->thresh) in bandwidth_limit()
1807 monotime_tv(&bw->bwend); in bandwidth_limit()
1808 timersub(&bw->bwend, &bw->bwstart, &bw->bwend); in bandwidth_limit()
1809 if (!timerisset(&bw->bwend)) in bandwidth_limit()
1812 bw->lamt *= 8; in bandwidth_limit()
1813 waitlen = (double)1000000L * bw->lamt / bw->rate; in bandwidth_limit()
1815 bw->bwstart.tv_sec = waitlen / 1000000L; in bandwidth_limit()
1816 bw->bwstart.tv_usec = waitlen % 1000000L; in bandwidth_limit()
1818 if (timercmp(&bw->bwstart, &bw->bwend, >)) { in bandwidth_limit()
1819 timersub(&bw->bwstart, &bw->bwend, &bw->bwend); in bandwidth_limit()
1822 if (bw->bwend.tv_sec) { in bandwidth_limit()
1823 bw->thresh /= 2; in bandwidth_limit()
1824 if (bw->thresh < bw->buflen / 4) in bandwidth_limit()
1825 bw->thresh = bw->buflen / 4; in bandwidth_limit()
1826 } else if (bw->bwend.tv_usec < 10000) { in bandwidth_limit()
1827 bw->thresh *= 2; in bandwidth_limit()
1828 if (bw->thresh > bw->buflen * 8) in bandwidth_limit()
1829 bw->thresh = bw->buflen * 8; in bandwidth_limit()
1832 TIMEVAL_TO_TIMESPEC(&bw->bwend, &ts); in bandwidth_limit()
1840 bw->lamt = 0; in bandwidth_limit()
1841 monotime_tv(&bw->bwstart); in bandwidth_limit()