net/sched: sch_plug - Queue traffic until an explicit release command
authorShriram Rajagopalan <rshriram@cs.ubc.ca>
Sun, 5 Feb 2012 13:51:32 +0000 (13:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Feb 2012 17:54:56 +0000 (12:54 -0500)
commitc3059be16c9ef29c05f0876a9df5fea21f29724f
tree18e5635982b69c7d8369e441d3233c437d2262df
parent17b8a74f00474fb4fe6154aa426a80bcf1220997
net/sched: sch_plug - Queue traffic until an explicit release command

The qdisc supports two operations - plug and unplug. When the
qdisc receives a plug command via netlink request, packets arriving
henceforth are buffered until a corresponding unplug command is received.
Depending on the type of unplug command, the queue can be unplugged
indefinitely or selectively.

This qdisc can be used to implement output buffering, an essential
functionality required for consistent recovery in checkpoint based
fault-tolerance systems. Output buffering enables speculative execution
by allowing generated network traffic to be rolled back. It is used to
provide network protection for Xen Guests in the Remus high availability
project, available as part of Xen.

This module is generic enough to be used by any other system that wishes
to add speculative execution and output buffering to its applications.

This module was originally available in the linux 2.6.32 PV-OPS tree,
used as dom0 for Xen.

For more information, please refer to http://nss.cs.ubc.ca/remus/
and http://wiki.xensource.com/xenwiki/Remus

Changes in V3:
  * Removed debug output (printk) on queue overflow
  * Added TCQ_PLUG_RELEASE_INDEFINITE - that allows the user to
    use this qdisc, for simple plug/unplug operations.
  * Use of packet counts instead of pointers to keep track of
    the buffers in the queue.

Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca>
Signed-off-by: Brendan Cully <brendan@cs.ubc.ca>
[author of the code in the linux 2.6.32 pvops tree]
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/pkt_sched.h
net/sched/Kconfig
net/sched/Makefile
net/sched/sch_plug.c [new file with mode: 0644]