|
Link Here
|
|
|
1 |
--- pftop.c.orig 2013-05-11 12:53:55.000000000 +0000 |
| 2 |
+++ pftop.c 2013-05-11 12:54:00.000000000 +0000 |
| 3 |
@@ -48,6 +48,8 @@ |
| 4 |
#include <altq/altq_cbq.h> |
| 5 |
#include <altq/altq_priq.h> |
| 6 |
#include <altq/altq_hfsc.h> |
| 7 |
+#include <altq/altq_fairq.h> |
| 8 |
+#include <altq/altq_codel.h> |
| 9 |
#endif |
| 10 |
|
| 11 |
#include <ctype.h> |
| 12 |
@@ -371,6 +373,8 @@ |
| 13 |
class_stats_t cbq_stats; |
| 14 |
struct priq_classstats priq_stats; |
| 15 |
struct hfsc_classstats hfsc_stats; |
| 16 |
+ struct fairq_classstats fairq_stats; |
| 17 |
+ struct codel_ifstats codel_stats; |
| 18 |
}; |
| 19 |
|
| 20 |
struct queue_stats { |
| 21 |
@@ -1764,6 +1768,8 @@ |
| 22 |
return (-1); |
| 23 |
} |
| 24 |
num_queues = nr_queues = pa.nr; |
| 25 |
+ if (pa.altq.scheduler == ALTQT_CODEL) |
| 26 |
+ num_queues = 1; |
| 27 |
for (nr = 0; nr < nr_queues; ++nr) { |
| 28 |
pa.nr = nr; |
| 29 |
if (ioctl(pf_dev, DIOCGETALTQ, &pa)) { |
| 30 |
@@ -1772,10 +1778,10 @@ |
| 31 |
return (-1); |
| 32 |
} |
| 33 |
#ifdef PFALTQ_FLAG_IF_REMOVED |
| 34 |
- if (pa.altq.qid > 0 && |
| 35 |
+ if ((pa.altq.qid > 0 || pa.altq.scheduler == ALTQT_CODEL) && |
| 36 |
!(pa.altq.local_flags & PFALTQ_FLAG_IF_REMOVED)) { |
| 37 |
#else |
| 38 |
- if (pa.altq.qid > 0) { |
| 39 |
+ if (pa.altq.qid > 0 || pa.altq.scheduler == ALTQT_CODEL) { |
| 40 |
#endif |
| 41 |
pq.nr = nr; |
| 42 |
pq.ticket = pa.ticket; |
| 43 |
@@ -1928,11 +1934,14 @@ |
| 44 |
tb_start(); |
| 45 |
for (d = 0; d < node->depth; d++) |
| 46 |
tbprintf(" "); |
| 47 |
- tbprintf(node->altq.qname); |
| 48 |
+ if (node->altq.qname[0] != '\0') |
| 49 |
+ tbprintf(node->altq.qname); |
| 50 |
+ else |
| 51 |
+ tbprintf("root"); |
| 52 |
print_fld_tb(FLD_QUEUE); |
| 53 |
|
| 54 |
if (node->altq.scheduler == ALTQT_CBQ || |
| 55 |
- node->altq.scheduler == ALTQT_HFSC |
| 56 |
+ node->altq.scheduler == ALTQT_HFSC || node->altq.scheduler == ALTQT_FAIRQ || node->altq.scheduler == ALTQT_CODEL |
| 57 |
) |
| 58 |
print_fld_bw(FLD_BANDW, (double)node->altq.bandwidth); |
| 59 |
|
| 60 |
@@ -2003,6 +2012,42 @@ |
| 61 |
node->qstats_last.data.hfsc_stats.xmit_cnt.bytes, interval); |
| 62 |
} |
| 63 |
break; |
| 64 |
+ case ALTQT_FAIRQ: |
| 65 |
+ print_fld_str(FLD_SCHED, "fairq"); |
| 66 |
+ print_fld_size(FLD_PKTS, |
| 67 |
+ node->qstats.data.fairq_stats.xmit_cnt.packets); |
| 68 |
+ print_fld_size(FLD_BYTES, |
| 69 |
+ node->qstats.data.fairq_stats.xmit_cnt.bytes); |
| 70 |
+ print_fld_size(FLD_DROPP, |
| 71 |
+ node->qstats.data.fairq_stats.drop_cnt.packets); |
| 72 |
+ print_fld_size(FLD_DROPB, |
| 73 |
+ node->qstats.data.fairq_stats.drop_cnt.bytes); |
| 74 |
+ print_fld_size(FLD_QLEN, node->qstats.data.fairq_stats.qlength); |
| 75 |
+ if (interval > 0) { |
| 76 |
+ pps = calc_pps(node->qstats.data.fairq_stats.xmit_cnt.packets, |
| 77 |
+ node->qstats_last.data.fairq_stats.xmit_cnt.packets, interval); |
| 78 |
+ bps = calc_rate(node->qstats.data.fairq_stats.xmit_cnt.bytes, |
| 79 |
+ node->qstats_last.data.fairq_stats.xmit_cnt.bytes, interval); |
| 80 |
+ } |
| 81 |
+ break; |
| 82 |
+ case ALTQT_CODEL: |
| 83 |
+ print_fld_str(FLD_SCHED, "codel"); |
| 84 |
+ print_fld_size(FLD_PKTS, |
| 85 |
+ node->qstats.data.codel_stats.cl_xmitcnt.packets); |
| 86 |
+ print_fld_size(FLD_BYTES, |
| 87 |
+ node->qstats.data.codel_stats.cl_xmitcnt.bytes); |
| 88 |
+ print_fld_size(FLD_DROPP, |
| 89 |
+ node->qstats.data.codel_stats.cl_dropcnt.packets); |
| 90 |
+ print_fld_size(FLD_DROPB, |
| 91 |
+ node->qstats.data.codel_stats.cl_dropcnt.bytes); |
| 92 |
+ print_fld_size(FLD_QLEN, node->qstats.data.codel_stats.qlength); |
| 93 |
+ if (interval > 0) { |
| 94 |
+ pps = calc_pps(node->qstats.data.codel_stats.cl_xmitcnt.packets, |
| 95 |
+ node->qstats_last.data.codel_stats.cl_xmitcnt.packets, interval); |
| 96 |
+ bps = calc_rate(node->qstats.data.codel_stats.cl_xmitcnt.bytes, |
| 97 |
+ node->qstats_last.data.codel_stats.cl_xmitcnt.bytes, interval); |
| 98 |
+ } |
| 99 |
+ break; |
| 100 |
} |
| 101 |
|
| 102 |
/* if (node->altq.scheduler != ALTQT_HFSC && interval > 0) { */ |