# | |
# 1:10 (8bit, 5mbit) 1:20 (8bit, 1gbit)
# | |
+# 1:100 (8bit, 5mbit) |
+# | |
# 1:1000 (8bit, 5mbit), 1:2000 (8bit, 1gbit),
# 1:1001 (8bit, 5mbit), 1:2001 (8bit, 1gbit),
# 1:1002 (1mbit, 5mbit), 1:2002 (1mbit, 1gbit),
# be off by a small fraction.
suffixes = {
"": 1,
- "bit": 1,
- "kibit": 1024,
- "kbit": 1000,
- "mibit": 1024*1024,
- "mbit": 1000000,
- "gibit": 1024*1024*1024,
- "gbit": 1000000000,
- "tibit": 1024*1024*1024*1024,
- "tbit": 1000000000000,
- "bps": 8,
- "kibps": 8*1024,
- "kbps": 8000,
- "mibps": 8*1024*1024,
- "mbps": 8000000,
- "gibps": 8*1024*1024*1024,
- "gbps": 8000000000,
- "tibps": 8*1024*1024*1024*1024,
- "tbps": 8000000000000
+ "bit": 1,
+ "kibit": 1024,
+ "kbit": 1000,
+ "mibit": 1024*1024,
+ "mbit": 1000000,
+ "gibit": 1024*1024*1024,
+ "gbit": 1000000000,
+ "tibit": 1024*1024*1024*1024,
+ "tbit": 1000000000000,
+ "bps": 8,
+ "kibps": 8*1024,
+ "kbps": 8000,
+ "mibps": 8*1024*1024,
+ "mbps": 8000000,
+ "gibps": 8*1024*1024*1024,
+ "gbps": 8000000000,
+ "tibps": 8*1024*1024*1024*1024,
+ "tbps": 8000000000000
}
return run(TC + " " + cmd)
+def stop(dev = dev):
+ '''
+ Turn off all queing. Stops all slice HTBS and reverts to pfifo_fast (the default).
+ '''
+ try:
+ for i in range(0,2):
+ tc("qdisc del dev %s root" % dev)
+ except: pass
+
+
def init(dev = dev, bwcap = bwmax):
"""
(Re)initialize the bandwidth limits on this node
tc("class add dev %s parent 1:1 classid 1:10 htb rate %dbit ceil %dbit" % \
(dev, bwmin, bwcap))
+ # Set up a subclass for DRL(Distributed Rate Limiting).
+ # DRL will directly modify that subclass implementing the site limits.
+ tc("class add dev %s parent 1:10 classid 1:100 htb rate %dbit ceil %dbit" % \
+ (dev, bwmin, bwcap))
+
+
# Set up a subclass that represents "exemption" from the node
# bandwidth cap. Once the node bandwidth cap is reached, bandwidth
# to exempt destinations can still be fairly shared up to bwmax.
minexemptrate = maxexemptrate
# Set up subclasses for the slice
- tc("class replace dev %s parent 1:10 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
+ tc("class replace dev %s parent 1:100 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
(dev, default_minor | xid, minrate, maxrate, share * quantum))
tc("class replace dev %s parent 1:20 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
(dev, exempt_minor | xid, exempt_minor | xid))
-def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None):
- # Get defaults from current state if available
- # get(xid,dev) = ( xid, share, minrate, maxrate, minexemptrate, maxexemptrate, bytes, i2bytes )
- current = get(xid, dev)
- if current == None: current = () # must be a new slice if returned nothing.
- new = ( share, minrate, maxrate, minexemptrate, maxexemptrate )
- if current[1:6] != new:
- on(xid = xid, share = share,
- minrate = minrate, maxrate = maxrate,
- minexemptrate = minexemptrate, maxexemptrate = maxexemptrate)
+def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None, dev = dev ):
+ on(xid = xid, dev = dev, share = share,
+ minrate = minrate, maxrate = maxrate,
+ minexemptrate = minexemptrate, maxexemptrate = maxexemptrate)
# Remove class associated with specified slice xid. If further packets
%s [OPTION]... [COMMAND] [ARGUMENT]...
Options:
- -d device Network interface (default: %s)
+ -d device Network interface (default: %s)
-r rate Node bandwidth cap (default: %s)
-q quantum Share multiplier (default: %d bytes)
-n Print rates in numeric bits per second
elif opt == '-h':
usage()
+ if bwcap == -1:
+ return 0
+
if len(argv):
if argv[0] == "init" or (argv[0] == "on" and len(argv) == 1):
# (Re)initialize