From: Sebastian Moeller <moeller0@gmx.de>
To: Alec Robertson <alecrobertson13@gmail.com>
Cc: cake@lists.bufferbloat.net
Subject: Re: [Cake] How to test Cake on TP-Link WDR3600
Date: Sat, 25 Jul 2015 20:47:09 +0200 [thread overview]
Message-ID: <9039450E-CDB9-41D0-BACF-4B72FAC98D6D@gmx.de> (raw)
In-Reply-To: <1437845902806.eb7f6ec8@Nodemailer>
[-- Attachment #1: Type: text/plain, Size: 1425 bytes --]
Hi Alec,
On Jul 25, 2015, at 19:38 , Alec Robertson <alecrobertson13@gmail.com> wrote:
> I’ve uploaded all the files to the router and rebooted and very oddly, “cake" doesn’t show up as a qdisc but “layer_cake.qos” and “piece_of_cake.qos” show up as Queue setup scripts.
Ah, this just shows that your sqm.lua is older than I assumed. No big issue just replace the /usr/lib/lua/luci/model/cbi/sqm.lua on your router with the attached sqm.lua. That should fix that issue.
Then please select cake as “Queueing discipline” and piece_of_cake.qos as “Queue setup script”, also make sure to go to the “Link Layer Adaptation” tab and select Ethernet… as “Which link layer to account for:” and put in probably 8 as “Per Packet Overhead (byte):” (not quite sure what the correct value is for your ISP), AND check the checkbox named “Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced options will only be used as long as this box is checked.” and finally select cake as “Which linklayer adaptation mechanism to use; for testing only”. That should get you started. Most likely your firmware will not fully allow to specify overhead for cake, but we will diagnose this and the revert to fix this up then most likely is to select tc_stab as “Which linklayer adaptation mechanism to use; for testing only”.
With a bit of luck this is all that is needed to get you going.
Best Regards
Sebastian
[-- Attachment #2: sqm.lua --]
[-- Type: application/octet-stream, Size: 9571 bytes --]
--[[
LuCI - Lua Configuration Interface
Copyright 2014 Steven Barth <steven@midlink.org>
Copyright 2014 Dave Taht <dave.taht@bufferbloat.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
local wa = require "luci.tools.webadmin"
local fs = require "nixio.fs"
local net = require "luci.model.network".init()
local sys = require "luci.sys"
--local ifaces = net:get_interfaces()
local ifaces = sys.net:devices()
local path = "/usr/lib/sqm"
m = Map("sqm", translate("Smart Queue Management"),
translate("With <abbr title=\"Smart Queue Management\">SQM</abbr> you " ..
"can enable traffic shaping, better mixing (Fair Queueing)," ..
" active queue length management (AQM) " ..
" and prioritisation on one " ..
"network interface."))
s = m:section(TypedSection, "queue", translate("Queues"))
s:tab("tab_basic", translate("Basic Settings"))
s:tab("tab_qdisc", translate("Queue Discipline"))
s:tab("tab_linklayer", translate("Link Layer Adaptation"))
s.addremove = true -- set to true to allow adding SQM instances in the GUI
s.anonymous = true
-- BASIC
e = s:taboption("tab_basic", Flag, "enabled", translate("Enable this SQM instance."))
e.rmempty = false
-- sm: following jow's advise, be helpful to the user and enable
-- sqm's init script if even a single sm instance/interface
-- is enabled; this is unexpected in that the init script gets
-- enabled as soon as at least one sqm instance is enabled
-- and that state is saved, so it does not require "Save & Apply"
-- to effect the init scripts.
-- the implementation was inpired/lifted from
-- https://github.com/openwrt/luci/blob/master/applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
function e.write(self, section, value)
if value == "1" then
luci.sys.init.enable("sqm")
m.message = translate("The SQM GUI has just enabled the sqm initscript on your behalf. Remember to disable the sqm initscript manually under System Startup menu in case this change was not wished for.")
-- luci.sys.call("/etc/init.d/sqm start >/dev/null")
-- else
-- luci.sys.call("/etc/init.d/sqm stop >/dev/null")
-- luci.sys.init.disable("sqm")
end
return Flag.write(self, section, value)
end
-- TODO: inform the user what we just did...
n = s:taboption("tab_basic", ListValue, "interface", translate("Interface name"))
-- sm lifted from luci-app-wol, the original implementation failed to show pppoe-ge00 type interface names
for _, iface in ipairs(ifaces) do
-- if iface:is_up() then
-- n:value(iface:name())
-- end
if iface ~= "lo" then
n:value(iface)
end
end
n.rmempty = false
dl = s:taboption("tab_basic", Value, "download", translate("Download speed (kbit/s) (ingress) set to 0 to selectively disable ingress shaping:"))
dl.datatype = "and(uinteger,min(0))"
dl.rmempty = false
ul = s:taboption("tab_basic", Value, "upload", translate("Upload speed (kbit/s) (egress) set to 0 to selectively disable egress shaping:"))
ul.datatype = "and(uinteger,min(0))"
ul.rmempty = false
-- QDISC
c = s:taboption("tab_qdisc", ListValue, "qdisc", translate("Queueing discipline"))
c:value("fq_codel", "fq_codel ("..translate("default")..")")
c:value("efq_codel")
c:value("nfq_codel")
c:value("sfq")
c:value("codel")
c:value("ns2_codel")
c:value("pie")
c:value("sfq")
c:value("cake")
c.default = "fq_codel"
c.rmempty = false
local qos_desc = ""
sc = s:taboption("tab_qdisc", ListValue, "script", translate("Queue setup script"))
for file in fs.dir(path) do
if string.find(file, ".qos$") then
sc:value(file)
end
if string.find(file, ".qos.help$") then
fh = io.open(path .. "/" .. file, "r")
qos_desc = qos_desc .. "<p><b>" .. file:gsub(".help$", "") .. ":</b><br />" .. fh:read("*a") .. "</p>"
end
end
sc.default = "simple.qos"
sc.rmempty = false
sc.description = qos_desc
ad = s:taboption("tab_qdisc", Flag, "qdisc_advanced", translate("Show and Use Advanced Configuration. Advanced options will only be used as long as this box is checked."))
ad.default = false
ad.rmempty = true
squash_dscp = s:taboption("tab_qdisc", ListValue, "squash_dscp", translate("Squash DSCP on inbound packets (ingress):"))
squash_dscp:value("1", "SQUASH")
squash_dscp:value("0", "DO NOT SQUASH")
squash_dscp.default = "1"
squash_dscp.rmempty = true
squash_dscp:depends("qdisc_advanced", "1")
squash_ingress = s:taboption("tab_qdisc", ListValue, "squash_ingress", translate("Ignore DSCP on ingress:"))
squash_ingress:value("1", "Ignore")
squash_ingress:value("0", "Allow")
squash_ingress.default = "1"
squash_ingress.rmempty = true
squash_ingress:depends("qdisc_advanced", "1")
iecn = s:taboption("tab_qdisc", ListValue, "ingress_ecn", translate("Explicit congestion notification (ECN) status on inbound packets (ingress):"))
iecn:value("ECN", "ECN ("..translate("default")..")")
iecn:value("NOECN")
iecn.default = "ECN"
iecn.rmempty = true
iecn:depends("qdisc_advanced", "1")
eecn = s:taboption("tab_qdisc", ListValue, "egress_ecn", translate("Explicit congestion notification (ECN) status on outbound packets (egress)."))
eecn:value("NOECN", "NOECN ("..translate("default")..")")
eecn:value("ECN")
eecn.default = "NOECN"
eecn.rmempty = true
eecn:depends("qdisc_advanced", "1")
ad2 = s:taboption("tab_qdisc", Flag, "qdisc_really_really_advanced", translate("Show and Use Dangerous Configuration. Dangerous options will only be used as long as this box is checked."))
ad2.default = false
ad2.rmempty = true
ad2:depends("qdisc_advanced", "1")
ilim = s:taboption("tab_qdisc", Value, "ilimit", translate("Hard limit on ingress queues; leave empty for default."))
-- ilim.default = 1000
ilim.isnumber = true
ilim.datatype = "and(uinteger,min(0))"
ilim.rmempty = true
ilim:depends("qdisc_really_really_advanced", "1")
elim = s:taboption("tab_qdisc", Value, "elimit", translate("Hard limit on egress queues; leave empty for default."))
-- elim.default = 1000
elim.datatype = "and(uinteger,min(0))"
elim.rmempty = true
elim:depends("qdisc_really_really_advanced", "1")
itarg = s:taboption("tab_qdisc", Value, "itarget", translate("Latency target for ingress, e.g 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default."))
itarg.datatype = "string"
itarg.rmempty = true
itarg:depends("qdisc_really_really_advanced", "1")
etarg = s:taboption("tab_qdisc", Value, "etarget", translate("Latency target for egress, e.g. 5ms [units: s, ms, or us]; leave empty for automatic selection, put in the word default for the qdisc's default."))
etarg.datatype = "string"
etarg.rmempty = true
etarg:depends("qdisc_really_really_advanced", "1")
iqdisc_opts = s:taboption("tab_qdisc", Value, "iqdisc_opts", translate("Advanced option string to pass to the ingress queueing disciplines; no error checking, use very carefully."))
iqdisc_opts.rmempty = true
iqdisc_opts:depends("qdisc_really_really_advanced", "1")
eqdisc_opts = s:taboption("tab_qdisc", Value, "eqdisc_opts", translate("Advanced option string to pass to the egress queueing disciplines; no error checking, use very carefully."))
eqdisc_opts.rmempty = true
eqdisc_opts:depends("qdisc_really_really_advanced", "1")
-- LINKLAYER
ll = s:taboption("tab_linklayer", ListValue, "linklayer", translate("Which link layer to account for:"))
ll:value("none", "none ("..translate("default")..")")
ll:value("ethernet", "Ethernet with overhead: select for e.g. VDSL2.")
ll:value("atm", "ATM: select for e.g. ADSL1, ADSL2, ADSL2+.")
-- ll:value("adsl") -- reduce the options
ll.default = "none"
po = s:taboption("tab_linklayer", Value, "overhead", translate("Per Packet Overhead (byte):"))
po.datatype = "and(integer,min(-1500))"
po.default = 0
po.isnumber = true
po.rmempty = true
po:depends("linklayer", "ethernet")
-- po:depends("linklayer", "adsl")
po:depends("linklayer", "atm")
adll = s:taboption("tab_linklayer", Flag, "linklayer_advanced", translate("Show Advanced Linklayer Options, (only needed if MTU > 1500). Advanced options will only be used as long as this box is checked."))
adll.rmempty = true
adll:depends("linklayer", "ethernet")
-- adll:depends("linklayer", "adsl")
adll:depends("linklayer", "atm")
smtu = s:taboption("tab_linklayer", Value, "tcMTU", translate("Maximal Size for size and rate calculations, tcMTU (byte); needs to be >= interface MTU + overhead:"))
smtu.datatype = "and(uinteger,min(0))"
smtu.default = 2047
smtu.isnumber = true
smtu.rmempty = true
smtu:depends("linklayer_advanced", "1")
stsize = s:taboption("tab_linklayer", Value, "tcTSIZE", translate("Number of entries in size/rate tables, TSIZE; for ATM choose TSIZE = (tcMTU + 1) / 16:"))
stsize.datatype = "and(uinteger,min(0))"
stsize.default = 128
stsize.isnumber = true
stsize.rmempty = true
stsize:depends("linklayer_advanced", "1")
smpu = s:taboption("tab_linklayer", Value, "tcMPU", translate("Minimal packet size, MPU (byte); needs to be > 0 for ethernet size tables:"))
smpu.datatype = "and(uinteger,min(0))"
smpu.default = 0
smpu.isnumber = true
smpu.rmempty = true
smpu:depends("linklayer_advanced", "1")
lla = s:taboption("tab_linklayer", ListValue, "linklayer_adaptation_mechanism", translate("Which linklayer adaptation mechanism to use; for testing only"))
lla:value("cake")
lla:value("htb_private")
lla:value("tc_stab", "tc_stab ("..translate("default")..")")
lla.default = "tc_stab"
lla.rmempty = true
lla:depends("linklayer_advanced", "1")
-- PRORITIES?
return m
[-- Attachment #3: Type: text/plain, Size: 3068 bytes --]
>
> Weird.
>
> --
> Alec Robertson
>
>
> On Sat, Jul 25, 2015 at 6:15 PM, Sebastian Moeller <moeller0@gmx.de> wrote:
>
> Hi Alec,
>
>
> On Jul 25, 2015, at 18:49 , Alec Robertson <alecrobertson13@gmail.com> wrote:
>
> > Well I've already got confused and we haven't even started yet - my apologies.
>
> Then we are off to a good start ;)
>
> >
> > When you say "...select cake as qdisc and piece_of_cake.qos as script..." how exactly do you do that?
>
> Ah, this requires luci-app-sqm, you might be able to install this from the router’s GUI or it might be installed already; there should be a SQM tab in the network menu and there you should be able to configure things. http://wiki.openwrt.org/doc/howto/sqm has some advice about how to set things up. Please have a look and let me know what specific questions arise ;)
>
> Best Regards
> Sebastian
>
>
> >
> > Again I'm sorry if I'm being silly! :P
> >
> >
> > Yours sincerely,
> > Alec Robertson.
> >
> > On 25 July 2015 at 17:27, Sebastian Moeller <moeller0@gmx.de> wrote:
> > Hi Alec,
> >
> > On Jul 25, 2015, at 17:45 , Alec Robertson <alecrobertson13@gmail.com> wrote:
> >
> > > Hello,
> > >
> > > I’ve flashed the OpenWRT image for the TP-Link WDR3600 from 2015-06-23 (http://snapon.lab.bufferbloat.net/~cero3/lupin/ar71xx/) and it has installed correctly.
> > >
> > > How do I go about setting it up for my UK TalkTalk Fibre connection (using a VDSL modem connected to the TP-Link router: the TP-Link router gets an IP address via DHCP).
> > >
> > > My sincere apologies if any of this is really obvious and I’ve been silly and missed it.
> >
> > Maybe try luci-app-sqm and sqm scripts?
> > Attached you will find the most recent files for sqm-scripts, just move all the files in the archive to the corresponding locations on your router and the select cake as qdisc and piece_of_cake.qos as script. (You might need a more recent luck-app-sqm, but first try what happens if you try the new scripts). After using the GUI to properly configure your interface you can always run either:
> > /etc/init.d/sqm stop
> > or
> > /etc/init.d/sqm start
> > to stop and start sqm-scripts manually. Running:
> > tc -d qdisc
> > should give you some feedback whether things worked as you intended. If you want to tests this I am happy to help you along the way, just holler where things break ;).
> >
> > Best Regards
> > Sebastian
> >
> >
> > >
> > >
> > > —
> > > Alec Robertson
> > > _______________________________________________
> > > Cake mailing list
> > > Cake@lists.bufferbloat.net
> > > https://lists.bufferbloat.net/listinfo/cake
> >
> >
> >
> > _______________________________________________
> > Cake mailing list
> > Cake@lists.bufferbloat.net
> > https://lists.bufferbloat.net/listinfo/cake
>
>
>
> _______________________________________________
> Cake mailing list
> Cake@lists.bufferbloat.net
> https://lists.bufferbloat.net/listinfo/cake
next prev parent reply other threads:[~2015-07-25 18:47 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-25 15:45 Alec Robertson
2015-07-25 16:27 ` Sebastian Moeller
2015-07-25 16:40 ` Alec Robertson
2015-07-25 16:49 ` Alec Robertson
2015-07-25 17:15 ` Sebastian Moeller
2015-07-25 17:38 ` Alec Robertson
2015-07-25 18:12 ` Dave Taht
2015-07-25 18:21 ` Alec Robertson
2015-07-25 18:49 ` Sebastian Moeller
2015-07-25 18:47 ` Sebastian Moeller [this message]
2015-07-25 18:57 ` Alec Robertson
2015-07-25 19:19 ` Sebastian Moeller
2015-07-25 20:58 ` Alec Robertson
2015-07-26 7:01 ` Sebastian Moeller
2015-07-26 9:11 ` Alan Jenkins
2015-07-26 12:32 ` Alec Robertson
2015-07-26 12:35 ` Jonathan Morton
2015-07-26 20:09 ` Alec Robertson
2015-07-26 21:05 ` Alan Jenkins
2015-07-26 21:20 ` Jonathan Morton
2015-07-26 21:38 ` Alan Jenkins
2015-07-27 7:17 ` Sebastian Moeller
2015-08-02 19:04 ` Benjamin Cronce
2015-08-02 20:07 ` Dave Taht
2015-07-27 7:13 ` Sebastian Moeller
2015-07-27 7:10 ` Sebastian Moeller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.bufferbloat.net/postorius/lists/cake.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9039450E-CDB9-41D0-BACF-4B72FAC98D6D@gmx.de \
--to=moeller0@gmx.de \
--cc=alecrobertson13@gmail.com \
--cc=cake@lists.bufferbloat.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox