static int tbf_dump_full(struct rtnl_qdisc *qdisc, struct nl_dump_params *p, int line) { struct rtnl_tbf *tbf = tbf_qdisc(qdisc); if (!tbf) goto ignore; if (1) { char *bu, *cu; double bs = nl_cancel_down_bytes(tbf->qt_rate_bucket, &bu); double cl = nl_cancel_down_bytes(1 << tbf->qt_rate.rs_cell_log, &cu); dp_dump(p, "mpu %u rate-bucket-size %1.f%s " "rate-cell-size %.1f%s\n", tbf->qt_mpu, bs, bu, cl, cu); } if (tbf->qt_mask & TBF_ATTR_PEAKRATE) { char *pru, *prbu, *bsu, *clu; double pr, prb, bs, cl; pr = nl_cancel_down_bytes(tbf->qt_peakrate.rs_rate, &pru); prb = nl_cancel_down_bits(tbf->qt_peakrate.rs_rate * 8, &prbu); bs = nl_cancel_down_bits(tbf->qt_peakrate_bucket, &bsu); cl = nl_cancel_down_bits(1 << tbf->qt_peakrate.rs_cell_log, &clu); dp_dump_line(p, line++, " peak-rate %.2f%s/s (%.0f%s) " "bucket-size %.1f%s cell-size %.1f%s", "latency %.1f%s", pr, pru, prb, prbu, bs, bsu, cl, clu); } ignore: return line; }
static void tbf_dump_details(struct rtnl_tc *tc, void *data, struct nl_dump_params *p) { struct rtnl_tbf *tbf = data; if (!tbf) return; if (1) { char *bu, *cu; double bs = nl_cancel_down_bytes(tbf->qt_rate_bucket, &bu); double cl = nl_cancel_down_bytes(1 << tbf->qt_rate.rs_cell_log, &cu); nl_dump(p, "rate-bucket-size %1.f%s " "rate-cell-size %.1f%s\n", bs, bu, cl, cu); } if (tbf->qt_mask & TBF_ATTR_PEAKRATE) { char *pru, *prbu, *bsu, *clu; double pr, prb, bs, cl; pr = nl_cancel_down_bytes(tbf->qt_peakrate.rs_rate, &pru); prb = nl_cancel_down_bits(tbf->qt_peakrate.rs_rate * 8, &prbu); bs = nl_cancel_down_bits(tbf->qt_peakrate_bucket, &bsu); cl = nl_cancel_down_bits(1 << tbf->qt_peakrate.rs_cell_log, &clu); nl_dump_line(p, " peak-rate %.2f%s/s (%.0f%s) " "bucket-size %.1f%s cell-size %.1f%s" "latency %.1f%s", pr, pru, prb, prbu, bs, bsu, cl, clu); } }
static void tbf_dump_line(struct rtnl_tc *tc, void *data, struct nl_dump_params *p) { double r, rbit, lim; char *ru, *rubit, *limu; struct rtnl_tbf *tbf = data; if (!tbf) return; r = nl_cancel_down_bytes(tbf->qt_rate.rs_rate, &ru); rbit = nl_cancel_down_bits(tbf->qt_rate.rs_rate*8, &rubit); lim = nl_cancel_down_bytes(tbf->qt_limit, &limu); nl_dump(p, " rate %.2f%s/s (%.0f%s) limit %.2f%s", r, ru, rbit, rubit, lim, limu); }
static void htb_class_dump_line(struct rtnl_tc *tc, void *data, struct nl_dump_params *p) { struct rtnl_htb_class *htb = data; if (!htb) return; if (htb->ch_mask & SCH_HTB_HAS_RATE) { double r, rbit; char *ru, *rubit; r = nl_cancel_down_bytes(htb->ch_rate.rs_rate, &ru); rbit = nl_cancel_down_bits(htb->ch_rate.rs_rate*8, &rubit); nl_dump(p, " rate %.2f%s/s (%.0f%s) log %u", r, ru, rbit, rubit, 1<<htb->ch_rate.rs_cell_log); } }
static void htb_class_dump_details(struct rtnl_tc *tc, void *data, struct nl_dump_params *p) { struct rtnl_htb_class *htb = data; if (!htb) return; /* line 1 */ if (htb->ch_mask & SCH_HTB_HAS_CEIL) { double r, rbit; char *ru, *rubit; r = nl_cancel_down_bytes(htb->ch_ceil.rs_rate, &ru); rbit = nl_cancel_down_bits(htb->ch_ceil.rs_rate*8, &rubit); nl_dump(p, " ceil %.2f%s/s (%.0f%s) log %u", r, ru, rbit, rubit, 1<<htb->ch_ceil.rs_cell_log); } if (htb->ch_mask & SCH_HTB_HAS_PRIO) nl_dump(p, " prio %u", htb->ch_prio); if (htb->ch_mask & SCH_HTB_HAS_RBUFFER) { double b; char *bu; b = nl_cancel_down_bytes(htb->ch_rbuffer, &bu); nl_dump(p, " rbuffer %.2f%s", b, bu); } if (htb->ch_mask & SCH_HTB_HAS_CBUFFER) { double b; char *bu; b = nl_cancel_down_bytes(htb->ch_cbuffer, &bu); nl_dump(p, " cbuffer %.2f%s", b, bu); } if (htb->ch_mask & SCH_HTB_HAS_QUANTUM) nl_dump(p, " quantum %u", htb->ch_quantum); }
int nl_rate2str(unsigned long long rate, int type, char *buf, size_t len) { char *unit; double frac; switch (type) { case NL_BYTE_RATE: frac = nl_cancel_down_bytes(rate, &unit); break; case NL_BIT_RATE: frac = nl_cancel_down_bits(rate, &unit); break; default: BUG(); } return snprintf(buf, len, "%.2f%s/s", frac, unit); }
static int tbf_dump_brief(struct rtnl_qdisc *qdisc, struct nl_dump_params *p, int line) { double r, rbit, lim; char *ru, *rubit, *limu; struct rtnl_tbf *tbf = tbf_qdisc(qdisc); if (!tbf) goto ignore; r = nl_cancel_down_bytes(tbf->qt_rate.rs_rate, &ru); rbit = nl_cancel_down_bits(tbf->qt_rate.rs_rate*8, &rubit); lim = nl_cancel_down_bytes(tbf->qt_limit, &limu); dp_dump(p, " rate %.2f%s/s (%.0f%s) limit %.2f%s", r, ru, rbit, rubit, lim, limu); ignore: return line; }