- merge changes from HEAD
authorMark Huang <mlhuang@cs.princeton.edu>
Fri, 15 Dec 2006 20:39:53 +0000 (20:39 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Fri, 15 Dec 2006 20:39:53 +0000 (20:39 +0000)
python/bwlimit.py

index cbb3e57..1942bb5 100644 (file)
@@ -46,7 +46,7 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: bwlimit.py,v 1.12 2006/04/24 20:04:13 mlhuang Exp $
+# $Id: bwlimit.py,v 1.14 2006/12/13 21:48:14 faiyaza 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):
@@ -352,6 +355,14 @@ def init(dev, bwcap):
     # 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,8 +508,12 @@ 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 > bwmax: