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) { */ |