On Thu, Oct 15, 2015 at 3:55 PM, Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> wrote:
Hi list,

Jonathan has been slaving over the oven (again) and produced a fresh
batch of commits, this time for the iproute2/tc userland side of things
(announced in another email on this list)  This means that the cake
qdisc module & tc will talk to one another again with a few new whizzy
features (and sprinkles!)

I've just merged those changes into Dave's 'tc-adv' repo, compiled &
run(ning) then here on an Archer C7.  I've not *yet* updated the
ceropackages repo to point to the latest sch-cake & tc-adv so it's not
'openwrt' wide at this time.

Warning:  Since the ABI/API changed, you'll likely need to update both
the kernel module & userland tc - nothing should burst into flames but
'missing stats' output from tc is a sure sign that cake tray & tin are
not in alignment.


Note the new 'rtt' parameter:

# tc qdisc change cake help
Usage: ... cake [ bandwidth RATE | unlimited* ]
                [ rtt TIME | datacentre | lan | metro | regional |
internet* | oceanic | satellite | interplanetary ]
                [ besteffort | squash | precedence | diffserv8 |
diffserv4* ]
                [ flowblind | srchost | dsthost | hosts | flows* ]
                [ atm | noatm* ] [ overhead N | conservative | raw* ]
    (* marks defaults)


And the stats:

# tc -s qdisc show dev eth0
qdisc cake 800a: root refcnt 2 bandwidth 9800Kbit diffserv4 flows rtt
100.0ms noatm overhead 12
 Sent 1580471 bytes 15158 pkt (dropped 0, overlimits 627 requeues 0)
 backlog 0b 0p requeues 0
             Tin 0       Tin 1       Tin 2       Tin 3
  thresh    9800Kbit    9187Kbit    7350Kbit    2450Kbit
  target       5.0ms       5.0ms       5.0ms       7.4ms
interval     100.0ms     100.0ms     100.0ms     102.4ms
Pk-delay         0us       381us         2us         1us
Av-delay         0us        10us         0us         0us
Sp-delay         0us         1us         0us         0us
  pkts             0       15053          66          39
  bytes            0     1565352        5940        9179
way-inds           0          43           0           0
way-miss           0         900          66          11
way-cols           0           0           0           0
  drops            0           0           0           0
  marks            0           0           0           0
Sp-flows           0           0           1           0
Bk-flows           0           2           0           2
last-len           0          82          90         225
max-len            0        1514          90         485

qdisc ingress ffff: parent ffff:fff1 ----------------
 Sent 12901461 bytes 20356 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0


Note how traffic is classified into Tins, not Classes or Bins :-)

Enjoy!



Building the latest tc-adv causes issues with gcc.

 
gcc -Wall -Wstrict-prototypes  -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wformat=2 -O2 -I../include -DRESOLVE_HOSTNAMES -DLIBDIR=\"/usr/lib\" -DCONFDIR=\"/etc/iproute2\" -D_GNU_SOURCE  -DHAVE_SETNS -DHAVE_ELF -DCONFIG_GACT -DCONFIG_GACT_PROB -DIPT_LIB_DIR=\"/usr/lib/iptables\" -DYY_NO_INPUT   -c -o q_cake0.o q_cake0.c
In file included from q_cake.c:48:0:
q_cake.c: In function ‘cake_print_xstats’:../include/utils.h:177:55: error: expected expression before ‘)’ token # define offsetof(type, member) ( (size_t) & ( (type *) 0 )->member )                                                       ^q_cake.c:500:31: note: in expansion of macro ‘offsetof’
     && RTA_PAYLOAD(xstats) >= offsetof(*stnc, capacity_estimate))

GCC version:
gcc version 5.2.0 (GCC)