net/sched: add skbprio scheduler
Subsystems (3)
PATCH v5 1/1 net/sched: add skbprio scheduler
net/sched: add skbprio scheduler
Skbprio (SKB Priority Queue) is a queueing discipline that prioritizes packets according to their skb->priority field. Under congestion, already-enqueued lower priority packets will be dropped to make space available for higher priority packets. Skbprio was conceived as a solution for denial-of-service defenses that need to route packets with different priorities as a means to overcome DoS attacks.
v5
*Do not reference qdisc_dev(sch)->tx_queue_len for setting limit. Instead set default sch->limit to 64.
v4
*Drop Documentation/networking/sch_skbprio.txt doc file to move it to tc man page for Skbprio, in iproute2.
v3
*Drop max_limit parameter in struct skbprio_sched_data and instead use sch->limit.
*Reference qdisc_dev(sch)->tx_queue_len only once, during initialisation for qdisc (previously being referenced every time qdisc changes).
*Move qdisc's detailed description from in-code to Documentation/networking.
*When qdisc is saturated, enqueue incoming packet first before dequeueing lowest priority packet in queue - improves usage of call stack registers.
*Introduce and use overlimit stat to keep track of number of dropped packets.
v2
*Use skb->priority field rather than DS field. Rename queueing discipline as SKB Priority Queue (previously Gatekeeper Priority Queue).
*Queueing discipline is made classful to expose Skbprio's internal priority queues.
--- include/uapi/linux/pkt_sched.h | 15 ++ net/sched/Kconfig | 13 ++ net/sched/Makefile | 1 + net/sched/sch_skbprio.c | 320 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 349 insertions(+) create mode 100644 net/sched/sch_skbprio.c
include/uapi/linux/pkt_sched.h +15 -0
@@ -124,6 +124,21 @@ struct tc_fifo_qopt {__u32 limit;/* Queue length: bytes for bfifo, packets for pfifo */ }; +/* SKBPRIO section */ + +/* +* Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1). +* SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able +* to map one to one the DS field of IPV4 and IPV6 headers. +* Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY. +*/ + +#define SKBPRIO_MAX_PRIORITY 64 + +struct tc_skbprio_qopt { +__u32 limit;/* Queue length in packets. */ +}; +/* PRIO section */ #define TCQ_PRIO_BANDS 16
net/sched/Kconfig +13 -0
@@ -251,6 +251,19 @@ config NET_SCH_MQPRIO If unsure, say N. +config NET_SCH_SKBPRIO + tristate "SKB priority queue scheduler (SKBPRIO)" + help + Say Y here if you want to use the SKB priority queue + scheduler. This schedules packets according to skb->priority, + which is useful for request packets in DoS mitigation systems such + as Gatekeeper. + + To compile this driver as a module, choose M here: the module will + be called sch_skbprio. + + If unsure, say N. + config NET_SCH_CHOKE tristate "CHOose and Keep responsive flow scheduler (CHOKE)" help
net/sched/Makefile +1 -0
@@ -46,6 +46,7 @@ obj-$(CONFIG_NET_SCH_NETEM) += sch_netem.o obj-$(CONFIG_NET_SCH_DRR) += sch_drr.o obj-$(CONFIG_NET_SCH_PLUG) += sch_plug.o obj-$(CONFIG_NET_SCH_MQPRIO) += sch_mqprio.o +obj-$(CONFIG_NET_SCH_SKBPRIO) += sch_skbprio.o obj-$(CONFIG_NET_SCH_CHOKE) += sch_choke.o obj-$(CONFIG_NET_SCH_QFQ) += sch_qfq.o obj-$(CONFIG_NET_SCH_CODEL) += sch_codel.o
net/sched/sch_skbprio.c new file +320 -0
320 lines not on this page · raw message
Signature · 1 line
1.9.1
Quoted 10 lines · Nishanth Devarajan
net/sched: add skbprio scheduler
Skbprio (SKB Priority Queue) is a queueing discipline that prioritizes packets according to their
skb->priorityfield. Under congestion, already-enqueued lower priority packets will be dropped to make space available for higher priority packets. Skbprio was conceived as a solution for denial-of-service defenses that need to route packets with different priorities as a means to overcome DoS attacks.
Quoted 3 lines
v5
*Do not reference qdisc_dev(sch)->tx_queue_len for setting limit. Instead set defaultsch->limitto 64.
Overall, it looks much better now!
Thanks the update!
From: Nishanth Devarajan <[email protected]>
Date: Mon, 23 Jul 2018 19:37:41 +0530
Quoted 1 line
net/sched: add skbprio scheduler
Applied to net-next, thank you.