Skip to content

Commit

Permalink
lib/route: merge fixes to dump_details
Browse files Browse the repository at this point in the history
  • Loading branch information
thom311 committed Aug 14, 2015
2 parents d0406d3 + 6871a3b commit c380228
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 29 deletions.
2 changes: 1 addition & 1 deletion lib/route/qdisc.c
Expand Up @@ -520,7 +520,7 @@ static void qdisc_dump_details(struct rtnl_tc *tc, struct nl_dump_params *p)
{
struct rtnl_qdisc *qdisc = (struct rtnl_qdisc *) tc;

nl_dump(p, "refcnt %u ", qdisc->q_info);
nl_dump(p, "refcnt %u", qdisc->q_info);
}

static struct rtnl_tc_type_ops qdisc_ops = {
Expand Down
68 changes: 63 additions & 5 deletions lib/route/qdisc/netem.c
Expand Up @@ -29,8 +29,8 @@
/** @cond SKIP */
#define SCH_NETEM_ATTR_LATENCY 0x0001
#define SCH_NETEM_ATTR_LIMIT 0x0002
#define SCH_NETEM_ATTR_LOSS 0x0004
#define SCH_NETEM_ATTR_GAP 0x0008
#define SCH_NETEM_ATTR_LOSS 0x0004
#define SCH_NETEM_ATTR_GAP 0x0008
#define SCH_NETEM_ATTR_DUPLICATE 0x0010
#define SCH_NETEM_ATTR_JITTER 0x0020
#define SCH_NETEM_ATTR_DELAY_CORR 0x0040
Expand All @@ -40,7 +40,7 @@
#define SCH_NETEM_ATTR_RO_CORR 0x0400
#define SCH_NETEM_ATTR_CORRUPT_PROB 0x0800
#define SCH_NETEM_ATTR_CORRUPT_CORR 0x1000
#define SCH_NETEM_ATTR_DIST 0x2000
#define SCH_NETEM_ATTR_DIST 0x2000
/** @endcond */

static struct nla_policy netem_policy[TCA_NETEM_MAX+1] = {
Expand Down Expand Up @@ -141,8 +141,65 @@ static void netem_dump_line(struct rtnl_tc *tc, void *data,
{
struct rtnl_netem *netem = data;

if (netem)
nl_dump(p, "limit %d", netem->qnm_limit);
if (netem) {
if (netem->qnm_mask & SCH_NETEM_ATTR_LIMIT && netem->qnm_limit > 0)
nl_dump(p, " limit %dpkts", netem->qnm_limit);
else
nl_dump(p, " no limit");
}
}

static void netem_dump_details(struct rtnl_tc *tc, void *data,
struct nl_dump_params *p)
{
struct rtnl_netem *netem = data;
char buf[32];

if (netem) {
if (netem->qnm_mask & SCH_NETEM_ATTR_LATENCY && netem->qnm_latency > 0) {
nl_msec2str(nl_ticks2us(netem->qnm_latency) / 1000, buf, sizeof(buf));
nl_dump(p, " latency %s", buf);

if (netem->qnm_mask & SCH_NETEM_ATTR_JITTER && netem->qnm_jitter > 0) {
nl_msec2str(nl_ticks2us(netem->qnm_jitter) / 1000, buf, sizeof(buf));
nl_dump(p, " jitter %s", buf);

if (netem->qnm_mask & SCH_NETEM_ATTR_DELAY_CORR && netem->qnm_corr.nmc_delay > 0)
nl_dump(p, " %d%", netem->qnm_corr.nmc_delay);
}
}

if (netem->qnm_mask & SCH_NETEM_ATTR_LOSS && netem->qnm_loss > 0) {
nl_dump(p, " loss %d%", netem->qnm_loss);

if (netem->qnm_mask & SCH_NETEM_ATTR_LOSS_CORR && netem->qnm_corr.nmc_loss > 0)
nl_dump(p, " %d%", netem->qnm_corr.nmc_loss);
}

if (netem->qnm_mask & SCH_NETEM_ATTR_DUPLICATE && netem->qnm_duplicate > 0) {
nl_dump(p, " duplicate %d%", netem->qnm_duplicate);

if (netem->qnm_mask & SCH_NETEM_ATTR_DUP_CORR && netem->qnm_corr.nmc_duplicate > 0)
nl_dump(p, " %d%", netem->qnm_corr.nmc_duplicate);
}

if (netem->qnm_mask & SCH_NETEM_ATTR_RO_PROB && netem->qnm_ro.nmro_probability > 0) {
nl_dump(p, " reorder %d%", netem->qnm_ro.nmro_probability);

if (netem->qnm_mask & SCH_NETEM_ATTR_RO_CORR && netem->qnm_ro.nmro_correlation > 0)
nl_dump(p, " %d%", netem->qnm_ro.nmro_correlation);

if (netem->qnm_mask & SCH_NETEM_ATTR_GAP && netem->qnm_gap > 0)
nl_dump(p, " gap %d", netem->qnm_gap);
}

if (netem->qnm_mask & SCH_NETEM_ATTR_CORRUPT_PROB && netem->qnm_crpt.nmcr_probability > 0) {
nl_dump(p, " reorder %d%", netem->qnm_crpt.nmcr_probability);

if (netem->qnm_mask & SCH_NETEM_ATTR_CORRUPT_CORR && netem->qnm_crpt.nmcr_correlation > 0)
nl_dump(p, " %d%", netem->qnm_crpt.nmcr_correlation);
}
}
}

static int netem_msg_fill_raw(struct rtnl_tc *tc, void *data,
Expand Down Expand Up @@ -892,6 +949,7 @@ static struct rtnl_tc_ops netem_ops = {
.to_msg_parser = netem_msg_parser,
.to_free_data = netem_free_data,
.to_dump[NL_DUMP_LINE] = netem_dump_line,
.to_dump[NL_DUMP_DETAILS] = netem_dump_details,
.to_msg_fill_raw = netem_msg_fill_raw,
};

Expand Down
40 changes: 17 additions & 23 deletions lib/route/tc.c
Expand Up @@ -903,39 +903,33 @@ void rtnl_tc_dump_details(struct nl_object *obj, struct nl_dump_params *p)
void rtnl_tc_dump_stats(struct nl_object *obj, struct nl_dump_params *p)
{
struct rtnl_tc *tc = TC_CAST(obj);
char *unit, fmt[64];
char *unit;
float res;

rtnl_tc_dump_details(OBJ_CAST(tc), p);

strcpy(fmt, " %7.2f %s %10u %10u %10u %10u %10u\n");

nl_dump_line(p,
" Stats: bytes packets drops overlimits" \
" qlen backlog\n");
nl_dump_line(p,
" stats: %-14s %-10s %-10s %-10s %-10s %-10s\n",
"bytes", "packets", "drops", "overlimits", "qlen", "backlog");

res = nl_cancel_down_bytes(tc->tc_stats[RTNL_TC_BYTES], &unit);
if (*unit == 'B')
fmt[11] = '9';

nl_dump_line(p, fmt, res, unit,
tc->tc_stats[RTNL_TC_PACKETS],
tc->tc_stats[RTNL_TC_DROPS],
tc->tc_stats[RTNL_TC_OVERLIMITS],
tc->tc_stats[RTNL_TC_QLEN],
tc->tc_stats[RTNL_TC_BACKLOG]);
nl_dump_line(p,
" %10.2f %3s %10u %-10u %-10u %-10u %-10u\n",
res, unit,
tc->tc_stats[RTNL_TC_PACKETS],
tc->tc_stats[RTNL_TC_DROPS],
tc->tc_stats[RTNL_TC_OVERLIMITS],
tc->tc_stats[RTNL_TC_QLEN],
tc->tc_stats[RTNL_TC_BACKLOG]);

res = nl_cancel_down_bytes(tc->tc_stats[RTNL_TC_RATE_BPS], &unit);

strcpy(fmt, " %7.2f %s/s%9u pps");

if (*unit == 'B')
fmt[11] = '9';

nl_dump_line(p, fmt, res, unit, tc->tc_stats[RTNL_TC_RATE_PPS]);

tc_dump(tc, NL_DUMP_LINE, p);
nl_dump(p, "\n");
nl_dump_line(p,
" %10.2f %3s/s %10u/s\n",
res,
unit,
tc->tc_stats[RTNL_TC_RATE_PPS]);
}

int rtnl_tc_compare(struct nl_object *aobj, struct nl_object *bobj,
Expand Down

0 comments on commit c380228

Please sign in to comment.