|
|
|
@ -1710,6 +1710,33 @@ static void cli_incoming_list_interfaces(str *instr, struct cli_writer *cw) { |
|
|
|
unsigned int r = lif->spec->port_pool.max - lif->spec->port_pool.min + 1; |
|
|
|
cw->cw_printf(cw, " Ports used: %5u / %5u (%5.1f%%)\n", |
|
|
|
r - f, r, (double) (r - f) * 100.0 / r); |
|
|
|
cw->cw_printf(cw, " Packets/bytes/errors:\n"); |
|
|
|
cw->cw_printf(cw, " Ingress: %10" PRIu64 " / %10" PRIu64 " / %10" PRIu64 "\n", |
|
|
|
atomic64_get(&lif->stats.in.packets), |
|
|
|
atomic64_get(&lif->stats.in.bytes), |
|
|
|
atomic64_get(&lif->stats.in.errors)); |
|
|
|
cw->cw_printf(cw, " Egress: %10" PRIu64 " / %10" PRIu64 " / %10" PRIu64 "\n", |
|
|
|
atomic64_get(&lif->stats.out.packets), |
|
|
|
atomic64_get(&lif->stats.out.bytes), |
|
|
|
atomic64_get(&lif->stats.out.errors)); |
|
|
|
cw->cw_printf(cw, " Packets lost/duplicates: %10" PRIu64 " / %10" PRIu64 "\n", |
|
|
|
atomic64_get(&lif->stats.s.packets_lost), |
|
|
|
atomic64_get(&lif->stats.s.duplicates)); |
|
|
|
cw->cw_printf(cw, " MOS: avg %3.1f, packet loss avg %3.0f%%\n", |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.mos) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.mos) / 10., |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.packetloss) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.packetloss)); |
|
|
|
cw->cw_printf(cw, " Jitter: avg %3.0f (measured %3.0f)\n", |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.jitter) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.jitter), |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.jitter_measured) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.jitter_measured)); |
|
|
|
cw->cw_printf(cw, " RTT: e2e %3.0f, dsct %3.0f\n", |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.rtt_e2e) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.rtt_e2e), |
|
|
|
(double) atomic64_get(&lif->stats.sampled.sums.rtt_dsct) |
|
|
|
/ atomic64_get(&lif->stats.sampled.counts.rtt_dsct)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|