twx-linux/include/uapi/linux
Toke Høiland-Jørgensen 046f6fd5da sched: Add Common Applications Kept Enhanced (cake) qdisc
sch_cake targets the home router use case and is intended to squeeze the
most bandwidth and latency out of even the slowest ISP links and routers,
while presenting an API simple enough that even an ISP can configure it.

Example of use on a cable ISP uplink:

tc qdisc add dev eth0 cake bandwidth 20Mbit nat docsis ack-filter

To shape a cable download link (ifb and tc-mirred setup elided)

tc qdisc add dev ifb0 cake bandwidth 200mbit nat docsis ingress wash

CAKE is filled with:

* A hybrid Codel/Blue AQM algorithm, "Cobalt", tied to an FQ_Codel
  derived Flow Queuing system, which autoconfigures based on the bandwidth.
* A novel "triple-isolate" mode (the default) which balances per-host
  and per-flow FQ even through NAT.
* An deficit based shaper, that can also be used in an unlimited mode.
* 8 way set associative hashing to reduce flow collisions to a minimum.
* A reasonable interpretation of various diffserv latency/loss tradeoffs.
* Support for zeroing diffserv markings for entering and exiting traffic.
* Support for interacting well with Docsis 3.0 shaper framing.
* Extensive support for DSL framing types.
* Support for ack filtering.
* Extensive statistics for measuring, loss, ecn markings, latency
  variation.

A paper describing the design of CAKE is available at
https://arxiv.org/abs/1804.07617, and will be published at the 2018 IEEE
International Symposium on Local and Metropolitan Area Networks (LANMAN).

This patch adds the base shaper and packet scheduler, while subsequent
commits add the optional (configurable) features. The full userspace API
and most data structures are included in this commit, but options not
understood in the base version will be ignored.

Various versions baking have been available as an out of tree build for
kernel versions going back to 3.10, as the embedded router world has been
running a few years behind mainline Linux. A stable version has been
generally available on lede-17.01 and later.

sch_cake replaces a combination of iptables, tc filter, htb and fq_codel
in the sqm-scripts, with sane defaults and vastly simpler configuration.

CAKE's principal author is Jonathan Morton, with contributions from
Kevin Darbyshire-Bryant, Toke Høiland-Jørgensen, Sebastian Moeller,
Ryan Mounce, Tony Ambardar, Dean Scarff, Nils Andreas Svee, Dave Täht,
and Loganaden Velvindron.

Testing from Pete Heist, Georgios Amanakis, and the many other members of
the cake@lists.bufferbloat.net mailing list.

tc -s qdisc show dev eth2
 qdisc cake 8017: root refcnt 2 bandwidth 1Gbit diffserv3 triple-isolate split-gso rtt 100.0ms noatm overhead 38 mpu 84
 Sent 51504294511 bytes 37724591 pkt (dropped 6, overlimits 64958695 requeues 12)
  backlog 0b 0p requeues 12
  memory used: 1053008b of 15140Kb
  capacity estimate: 970Mbit
  min/max network layer size:           28 /    1500
  min/max overhead-adjusted size:       84 /    1538
  average network hdr offset:           14
                    Bulk  Best Effort        Voice
   thresh      62500Kbit        1Gbit      250Mbit
   target          5.0ms        5.0ms        5.0ms
   interval      100.0ms      100.0ms      100.0ms
   pk_delay          5us          5us          6us
   av_delay          3us          2us          2us
   sp_delay          2us          1us          1us
   backlog            0b           0b           0b
   pkts          3164050     25030267      9530280
   bytes      3227519915  35396974782  12879808898
   way_inds            0            8            0
   way_miss           21          366           25
   way_cols            0            0            0
   drops               5            0            1
   marks               0            0            0
   ack_drop            0            0            0
   sp_flows            1            3            0
   bk_flows            0            1            1
   un_flows            0            0            0
   max_len         68130        68130        68130

Tested-by: Pete Heist <peteheist@gmail.com>
Tested-by: Georgios Amanakis <gamanakis@gmail.com>
Signed-off-by: Dave Taht <dave.taht@gmail.com>
Signed-off-by: Toke Høiland-Jørgensen <toke@toke.dk>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-07-10 20:06:34 -07:00
..
android
byteorder
caif
can
cifs
dvb media: dvb: add continuity error indicators for memory mapped buffers 2018-02-23 05:28:41 -05:00
genwqe
hdlc
hsi
iio
isdn
mmc
netfilter netfilter: nft_dynset: do not reject set updates with NFT_SET_EVAL 2018-06-12 19:12:48 +02:00
netfilter_arp
netfilter_bridge netfilter: ebtables: add ebt_get_target and ebt_get_target_c 2018-04-24 10:29:18 +02:00
netfilter_ipv4
netfilter_ipv6 netfilter: ip6t_srh: extend SRH matching for previous, next and last SID 2018-05-06 23:33:03 +02:00
nfsd
raid
sched
spi
sunrpc
tc_act net:sched: add action inheritdsfield to skbedit 2018-07-04 21:27:42 +09:00
tc_ematch net: sched: add em_ipt ematch for calling xtables matches 2018-02-21 13:15:33 -05:00
usb sound fixes for 4.18-rc1 2018-06-15 17:24:40 +09:00
wimax
a.out.h
acct.h
adb.h
adfs_fs.h
affs_hardblocks.h
agpgart.h
aio_abi.h aio: mark __aio_sigset::sigmask const 2018-06-29 06:51:57 -07:00
am437x-vpfe.h
apm_bios.h
arcfb.h
arm_sdei.h
aspeed-lpc-ctrl.h
atalk.h
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
audit.h Merge branch 'next-integrity' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2018-06-07 15:40:37 -07:00
auto_dev-ioctl.h
auto_fs4.h autofs4: merge auto_fs.h and auto_fs4.h 2018-06-07 17:34:39 -07:00
auto_fs.h autofs4: merge auto_fs.h and auto_fs4.h 2018-06-07 17:34:39 -07:00
auxvec.h
ax25.h
b1lli.h
batadv_packet.h batman-adv: always assume 2-byte packet alignment 2018-02-27 13:02:54 +01:00
batman_adv.h batman-adv: add multicast flags netlink support 2018-03-14 10:15:34 +01:00
baycom.h
bcache.h
bcm933xx_hcs.h
bfs_fs.h
binfmts.h
blkpg.h
blktrace_api.h blktrace: fix comment in blktrace_api.h 2018-03-30 14:16:24 -06:00
blkzoned.h
bpf_common.h
bpf_perf_event.h bpf: add support to read sample address in bpf program 2018-03-08 02:22:34 +01:00
bpf.h bpf: Change bpf_fib_lookup to return lookup status 2018-06-29 00:02:02 +02:00
bpfilter.h net: add skeleton of bpfilter kernel module 2018-05-23 13:23:40 -04:00
bpqether.h
bsg.h
bt-bmc.h
btf.h bpf: btf: Remove unused bits from uapi/linux/btf.h 2018-05-23 12:03:32 +02:00
btrfs_tree.h
btrfs.h btrfs: Add unprivileged version of ino_lookup ioctl 2018-05-31 11:35:24 +02:00
can.h
capability.h
capi.h
cciss_defs.h
cciss_ioctl.h
cdrom.h
cec-funcs.h media: include/(uapi/)media: add SPDX license info 2018-02-14 13:23:51 -05:00
cec.h media: include/(uapi/)media: add SPDX license info 2018-02-14 13:23:51 -05:00
cgroupstats.h
chio.h
cm4000_cs.h
cn_proc.h connector: add parent pid and tgid to coredump and exit events 2018-05-01 14:25:37 -04:00
coda_psdev.h
coda.h
coff.h
connector.h
const.h linux/const.h: refactor _BITUL and _BITULL a bit 2018-04-11 10:28:38 -07:00
coresight-stm.h
cramfs_fs.h
cryptouser.h
cuda.h
cyclades.h
cycx_cfm.h
dcbnl.h net/dcb: Add dcbnl buffer attribute 2018-05-24 14:22:59 -07:00
dccp.h
devlink.h devlink: Add devlink notifications support for params 2018-07-05 19:58:35 +09:00
dlm_device.h
dlm_netlink.h
dlm_plock.h
dlm.h
dlmconstants.h
dm-ioctl.h dm: hold DM table for duration of ioctl rather than use blkdev_get 2018-04-04 12:12:38 -04:00
dm-log-userspace.h
dma-buf.h
dn.h
dqblk_xfs.h
edd.h
efs_fs_sb.h
elf-em.h
elf-fdpic.h
elf.h vmcore: add API to collect hardware dump in second kernel 2018-05-14 13:46:04 -04:00
elfcore.h
errno.h
errqueue.h net/sched: Make etf report drops on error_queue 2018-07-04 22:30:28 +09:00
erspan.h
ethtool.h ethtool: Add support for configuring PFC stall prevention in ethtool 2018-03-26 13:46:46 -07:00
eventpoll.h
fadvise.h
falloc.h
fanotify.h
fb.h
fcntl.h
fd.h
fdreg.h
fib_rules.h net: fib_rules: support for match on ip_proto, sport and dport 2018-02-28 22:44:43 -05:00
fiemap.h
filter.h
firewire-cdev.h
firewire-constants.h
flat.h
fou.h
fs.h Add bunch of cleanups, and add support for the Speck128/256 2018-06-05 15:15:32 -07:00
fsl_hypervisor.h
fsmap.h
fuse.h fuse: return -ECONNABORTED on /dev/fuse read after abort 2018-03-20 17:11:44 +01:00
futex.h
gameport.h
gen_stats.h
genetlink.h
gfs2_ondisk.h
gigaset_dev.h
gpio.h
gsmmux.h
gtp.h
hash_info.h
hdlc.h
hdlcdrv.h
hdreg.h
hid.h
hiddev.h
hidraw.h
hpet.h
hsr_netlink.h
hw_breakpoint.h
hyperv.h
hysdn_if.h
i2c-dev.h
i2c.h
i2o-dev.h
i8k.h
icmp.h
icmpv6.h
if_addr.h net: Add IFA_RT_PRIORITY address attribute 2018-05-29 10:12:45 -04:00
if_addrlabel.h
if_alg.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_eql.h
if_ether.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-03-23 11:31:58 -04:00
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h uapi: Fix SPDX tags for files referring to the 'OpenIB.org' license 2018-04-23 11:10:33 -04:00
if_link.h net: bridge: add support for port isolation 2018-05-25 14:37:20 -04:00
if_ltalk.h
if_macsec.h
if_packet.h
if_phonet.h
if_plip.h
if_ppp.h
if_pppol2tp.h
if_pppox.h
if_slip.h
if_team.h
if_tun.h
if_tunnel.h
if_vlan.h
if_x25.h
if_xdp.h xsk: Fix umem fill/completion queue mmap on 32-bit 2018-06-08 00:18:02 +02:00
if.h
ife.h
igmp.h
ila.h ila: Flush netlink command to clear xlat table 2018-06-29 11:32:55 +09:00
in6.h
in_route.h
in.h
inet_diag.h
inotify.h inotify: Extend ioctl to allow to request id of new watch descriptor 2018-02-14 11:16:28 +01:00
input-event-codes.h
input.h
ioctl.h
ip6_tunnel.h
ip_vs.h
ip.h
ipc.h
ipmi_bmc.h ipmi: kcs_bmc: coding-style fixes and use new poll type 2018-02-26 09:49:21 -06:00
ipmi_msgdefs.h ipmi: Add or fix SPDX-License-Identifier in all files 2018-02-27 07:42:51 -06:00
ipmi.h ipmi: Add or fix SPDX-License-Identifier in all files 2018-02-27 07:42:51 -06:00
ipsec.h
ipv6_route.h
ipv6.h
ipx.h
irqnr.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
iso_fs.h
ivtv.h
ivtvfb.h
jffs2.h
joystick.h
Kbuild
kcm.h
kcmp.h
kcov.h
kd.h
kdev_t.h
kernel-page-flags.h mm: mark pages in use for page tables 2018-06-07 17:34:37 -07:00
kernel.h
kernelcapi.h
kexec.h
keyboard.h
keyctl.h
kfd_ioctl.h drm/amdkfd: Add ioctls for GPUVM memory management 2018-03-15 17:27:51 -04:00
kvm_para.h
kvm.h kvm: fix typo in flag name 2018-06-12 15:06:35 +02:00
l2tp.h
libc-compat.h uapi/if_ether.h: move __UAPI_DEF_ETHHDR libc define 2018-02-13 11:23:24 -05:00
lightnvm.h
limits.h
lirc.h media: rc: add ioctl to get the current timeout 2018-04-20 09:15:18 -04:00
llc.h
loop.h
lp.h
lwtunnel.h
magic.h
major.h
map_to_7segment.h
matroxfb.h
max2175.h
mdio.h
media-bus-format.h
media.h media: media.h: reorganize header to make it easier to understand 2018-02-26 10:14:46 -05:00
mei.h
membarrier.h
memfd.h
mempolicy.h
meye.h
mic_common.h
mic_ioctl.h
mii.h
minix_fs.h
mman.h
mmtimer.h
module.h
mpls_iptunnel.h
mpls.h
mqueue.h
mroute6.h
mroute.h
msdos_fs.h block: Move SECTOR_SIZE and SECTOR_SHIFT definitions into <linux/blkdev.h> 2018-03-17 14:45:23 -06:00
msg.h ipc/msg: introduce msgctl(MSG_STAT_ANY) 2018-04-11 10:28:37 -07:00
mtio.h
n_r3964.h
nbd-netlink.h
nbd.h nbd: Add the nbd NBD_DISCONNECT_ON_CLOSE config flag. 2018-06-20 19:10:06 -06:00
ncsi.h net/ncsi: Add generic netlink family 2018-03-05 10:43:37 -05:00
ndctl.h
neighbour.h
net_dropmon.h
net_namespace.h
net_tstamp.h net: Use __u32 in uapi net_stamp.h 2018-07-09 16:31:28 -07:00
net.h
netconf.h
netdevice.h
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h
netfilter_ipv6.h
netfilter.h
netlink_diag.h
netlink.h
netrom.h
nfc.h
nfs2.h
nfs3.h
nfs4_mount.h
nfs4.h
nfs_fs.h
nfs_idmap.h
nfs_mount.h
nfs.h
nfsacl.h
nilfs2_api.h
nilfs2_ondisk.h
nl80211.h This round's updates: 2018-06-30 21:08:12 +09:00
nsfs.h
nubus.h
nvme_ioctl.h
nvram.h
omap3isp.h media: omap3isp: support 64-bit version of omap3isp_stat_data 2018-05-09 16:37:05 -04:00
omapfb.h
oom.h
openvswitch.h openvswitch: kernel datapath clone action 2018-07-08 11:13:25 +09:00
packet_diag.h
param.h
parport.h
patchkey.h
pci_regs.h pci-v4.18-changes 2018-06-07 12:45:58 -07:00
pci.h
pcitest.h
perf_event.h perf/core: Store context switch out type in PERF_RECORD_SWITCH[_CPU_WIDE] 2018-04-17 09:47:39 -03:00
personality.h
pfkeyv2.h
pg.h
phantom.h
phonet.h
pkt_cls.h net/sched: flower: Add supprt for matching on QinQ vlan headers 2018-07-07 20:51:53 +09:00
pkt_sched.h sched: Add Common Applications Kept Enhanced (cake) qdisc 2018-07-10 20:06:34 -07:00
pktcdvd.h
pmu.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
ppdev.h
ppp_defs.h
ppp-comp.h
ppp-ioctl.h ppp: remove the PPPIOCDETACH ioctl 2018-05-24 22:55:07 -04:00
pps.h
pr.h
prctl.h docs: Fix some broken references 2018-06-15 18:10:01 -03:00
psample.h
psci.h arm/arm64: KVM: Add PSCI_VERSION helper 2018-02-06 22:53:56 +00:00
psp-sev.h crypto: ccp - Add GET_ID SEV command 2018-05-31 00:13:56 +08:00
ptp_clock.h
ptrace.h seccomp, ptrace: switch get_metadata types to arch independent 2018-02-21 16:56:03 -08:00
qemu_fw_cfg.h fw_cfg: write vmcoreinfo details 2018-03-20 03:17:41 +02:00
qnx4_fs.h
qnxtypes.h
qrtr.h
quota.h
radeonfb.h
random.h random: add new ioctl RNDRESEEDCRNG 2018-04-14 11:59:31 -04:00
raw.h
rds.h uapi: Fix SPDX tags for files referring to the 'OpenIB.org' license 2018-04-23 11:10:33 -04:00
reboot.h
reiserfs_fs.h
reiserfs_xattr.h
resource.h
rfkill.h
rio_cm_cdev.h
rio_mport_cdev.h
romfs_fs.h
rose.h
route.h
rpmsg.h rpmsg: char: Switch to SPDX license identifier 2018-06-03 17:37:16 -07:00
rseq.h rseq: Introduce restartable sequences system call 2018-06-06 11:58:31 +02:00
rtc.h
rtnetlink.h rtnetlink: Add more well known protocol values 2018-05-31 15:25:10 -04:00
rxrpc.h
scc.h
sched.h
scif_ioctl.h
screen_info.h
sctp.h sctp: add spp_ipv6_flowlabel and spp_dscp for sctp_paddrparams 2018-07-04 11:36:54 +09:00
sdla.h
seccomp.h seccomp: Add filter flag to opt-out of SSB mitigation 2018-05-05 00:51:44 +02:00
securebits.h
sed-opal.h
seg6_genl.h
seg6_hmac.h
seg6_iptunnel.h
seg6_local.h ipv6: sr: Add seg6local action End.BPF 2018-05-24 11:57:36 +02:00
seg6.h
selinux_netlink.h
sem.h ipc/sem: introduce semctl(SEM_STAT_ANY) 2018-04-11 10:28:37 -07:00
serial_core.h serial: 8250: Add Nuvoton NPCM UART 2018-03-09 11:01:19 -08:00
serial_reg.h
serial.h
serio.h
shm.h ipc/shm: introduce shmctl(SHM_STAT_ANY) 2018-04-11 10:28:37 -07:00
signal.h
signalfd.h signal/signalfd: Add support for SIGSYS 2018-04-26 19:51:12 -05:00
smc_diag.h net/smc: add SMC-D diag support 2018-06-30 20:42:26 +09:00
smc.h
smiapp.h
snmp.h tcp: add new SNMP counter for drops when try to queue in rcv queue 2018-06-30 18:43:53 +09:00
sock_diag.h
socket.h
sockios.h
sonet.h
sonypi.h
sound.h
soundcard.h
stat.h
stddef.h
stm.h stm class: Make dummy's master/channel ranges configurable 2018-03-28 18:47:18 +03:00
string.h
suspend_ioctls.h
swab.h
switchtec_ioctl.h
sync_file.h
synclink.h
sysctl.h staging: irda: remove remaining remants of irda code removal 2018-04-16 11:26:49 +02:00
sysinfo.h
target_core_user.h scsi: target: tcmu: add read length support 2018-06-18 21:02:52 -04:00
taskstats.h
tcp_metrics.h
tcp.h tcp: send in-queue bytes in cmsg upon read 2018-05-01 18:56:29 -04:00
tee.h
termios.h
thermal.h
time.h Merge branch 'timers/urgent' into timers/core 2018-05-02 16:11:12 +02:00
timerfd.h
times.h
timex.h
tiocl.h
tipc_config.h tipc: set default MTU for UDP media 2018-04-20 11:04:05 -04:00
tipc_netlink.h tipc: extend sock diag for group communication 2018-06-30 21:05:42 +09:00
tipc_sockets_diag.h tipc: implement socket diagnostics for AF_TIPC 2018-03-22 14:43:35 -04:00
tipc.h tipc: introduce ioctl for fetching node identity 2018-04-27 11:05:41 -04:00
tls.h uapi: Fix SPDX tags for files referring to the 'OpenIB.org' license 2018-04-23 11:10:33 -04:00
toshiba.h
tty_flags.h tty: fix typo in ASYNCB_FOURPORT comment 2018-05-24 18:38:51 +02:00
tty.h
types_32_64.h uapi/headers: Provide types_32_64.h 2018-06-06 11:58:31 +02:00
types.h uapi: turn __poll_t sparse checks on by default 2018-05-26 09:16:44 +02:00
udf_fs_i.h
udp.h udp: generate gso with UDP_SEGMENT 2018-04-26 15:08:04 -04:00
uhid.h
uinput.h
uio.h
uleds.h
ultrasound.h
un.h
unistd.h
unix_diag.h
usbdevice_fs.h
usbip.h
userfaultfd.h
userio.h
utime.h
utsname.h
uuid.h uuid: cleanup <uapi/linux/uuid.h> 2018-02-06 18:32:44 -08:00
uvcvideo.h
v4l2-common.h
v4l2-controls.h media: v4l2: Add v4l2 control IDs for HEVC encoder 2018-03-22 06:32:15 -04:00
v4l2-dv-timings.h
v4l2-mediabus.h media: v4l: doc: Clarify v4l2_mbus_fmt height definition 2018-02-26 08:15:50 -05:00
v4l2-subdev.h
vbox_err.h
vbox_vmmdev_types.h
vboxguest.h
veth.h
vfio_ccw.h
vfio.h vfio/pci: Add ioeventfd support 2018-03-26 13:22:58 -06:00
vhost.h
videodev2.h media: videodev2.h: Add v4l2 definition for HEVC 2018-03-22 06:26:05 -04:00
virtio_9p.h
virtio_balloon.h virtio_balloon: add array of stat names 2018-04-24 21:44:01 +03:00
virtio_blk.h
virtio_config.h virtio: update the comments for transport features 2018-06-12 04:59:29 +03:00
virtio_console.h
virtio_crypto.h
virtio_gpu.h drm/virtio: add define for second capset to the virgl code. 2018-05-14 11:01:29 +02:00
virtio_ids.h
virtio_input.h
virtio_mmio.h
virtio_net.h virtio_net: Introduce VIRTIO_NET_F_STANDBY feature bit 2018-05-28 22:59:54 -04:00
virtio_pci.h
virtio_ring.h
virtio_rng.h
virtio_scsi.h
virtio_types.h
virtio_vsock.h
vm_sockets_diag.h
vm_sockets.h
vmcore.h vmcore: add API to collect hardware dump in second kernel 2018-05-14 13:46:04 -04:00
vsockmon.h
vt.h
vtpm_proxy.h
wait.h
wanrouter.h
watchdog.h
wimax.h
wireless.h
wmi.h
x25.h
xattr.h
xfrm.h
xilinx-v4l2-controls.h
zorro_ids.h
zorro.h