X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=python%2Fbwlimit.py;h=6892089cccd5d19bd547eda0c0a486ab20690dee;hb=da4283f4995283be5020e58eaf7fb02d014a07da;hp=5f35fe8ca3c5fb69e0623066b00c320922a65af8;hpb=5d96a99f6b8514fbfd6fdc585ba7cdba96873acd;p=util-vserver.git diff --git a/python/bwlimit.py b/python/bwlimit.py index 5f35fe8..6892089 100644 --- a/python/bwlimit.py +++ b/python/bwlimit.py @@ -46,7 +46,7 @@ # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # -# $Id: bwlimit.py,v 1.11 2006/03/15 16:41:21 smuir Exp $ +# $Id: bwlimit.py,v 1.15 2007/02/07 04:21:11 mlhuang Exp $ # import sys, os, re, getopt @@ -303,14 +303,17 @@ def tc(cmd): return run(TC + " " + cmd) -def init(dev, bwcap): +def init(dev = dev, bwcap = bwmax): """ (Re)initialize the bandwidth limits on this node """ - # load the module used to manage exempt classes + # Load the module used to manage exempt classes run("/sbin/modprobe ip_set_iphash") + # Save current settings + paramslist = get(None, dev) + # Delete root qdisc 1: if it exists. This will also automatically # delete any child classes. for line in tc("qdisc show dev %s" % dev): @@ -346,12 +349,23 @@ def init(dev, bwcap): # by root end up here and are capped at the node bandwidth # cap. on(root_xid, dev, share = root_share) - file("/proc/sys/vnet/root_class", "w").write("%d" % ((1 << 16) | default_minor | root_xid)) + try: + file("/proc/sys/vnet/root_class", "w").write("%d" % ((1 << 16) | default_minor | root_xid)) + except: + pass # Set up the default class. Packets that fail classification end # up here. on(default_xid, dev, share = default_share) + # Restore old settings + for (xid, share, + minrate, maxrate, + minexemptrate, maxexemptrate, + bytes, exemptbytes) in paramslist: + if xid not in (root_xid, default_xid): + on(xid, dev, share, minrate, maxrate, minexemptrate, maxexemptrate) + def get(xid = None, dev = dev): """ @@ -497,12 +511,20 @@ def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptra maxexemptrate = get_tc_rate(maxexemptrate) # Sanity checks + if maxrate < bwmin: + maxrate = bwmin if maxrate > bwcap: maxrate = bwcap + if minrate < bwmin: + minrate = bwmin if minrate > maxrate: minrate = maxrate + if maxexemptrate < bwmin: + maxexemptrate = bwmin if maxexemptrate > bwmax: maxexemptrate = bwmax + if minexemptrate < bwmin: + minexemptrate = bwmin if minexemptrate > maxexemptrate: minexemptrate = maxexemptrate