Supports turning off all queuing when the right flag is set.
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 29 Jan 2009 20:34:56 +0000 (20:34 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 29 Jan 2009 20:34:56 +0000 (20:34 +0000)
bwmon.py
net.py
nm.py

index 495fabd..6f5c90e 100644 (file)
--- a/bwmon.py
+++ b/bwmon.py
@@ -662,7 +662,10 @@ def getDefaults(nmdbcopy):
     return status
 
 def allOff():
-   # Get/set special slice IDs
+    """
+    Turn off all slice HTBs
+    """
+    # Get/set special slice IDs
     root_xid = bwlimit.get_xid("root")
     default_xid = bwlimit.get_xid("default")
     kernelhtbs = gethtbs(root_xid, default_xid)
diff --git a/net.py b/net.py
index c74cc95..d2cc7ed 100644 (file)
--- a/net.py
+++ b/net.py
@@ -13,10 +13,17 @@ import sioc, plnet
 # local modules
 import bwlimit, logger, iptables
 
-def GetSlivers(plc, data):
+def GetSlivers(plc, data, config):
     InitInterfaces(plc, data)
-    InitNodeLimit(data)
-    InitI2(plc, data)
+    if 'OVERRIDES' in dir(config):
+        if config.OVERRIDES.get('net_max_rate') != -1:
+            InitNodeLimit(data)
+            InitI2(plc, data)
+        else:
+            logger.log("Slice and node BW Limits disabled.")
+            if len(bwlimit.get()): 
+                logger.verbose("*** DISABLING NODE BW LIMITS ***")
+                bwlimit.stop()
     InitNAT(plc, data)
 
 def InitNodeLimit(data):
@@ -29,8 +36,6 @@ def InitNodeLimit(data):
     for dev in devs:
         macs[sioc.gifhwaddr(dev).lower()] = dev
 
-    # XXX Exempt Internet2 destinations from node bwlimits
-    # bwlimit.exempt_init('Internet2', internet2_ips)
     for network in data['networks']:
         # Get interface name preferably from MAC address, falling
         # back on IP address.
diff --git a/nm.py b/nm.py
index 36d121b..78c7bfa 100755 (executable)
--- a/nm.py
+++ b/nm.py
@@ -50,11 +50,12 @@ if os.path.exists(options.path):
 
 modules = []
 
-def GetSlivers(plc):
+def GetSlivers(plc, config):
     '''Run call backs defined in modules'''
     try: 
         logger.log("Syncing w/ PLC")
         data = plc.GetSlivers()
+        getPLCDefaults(data, config)
     except: 
         logger.log_exc()
         #  XXX So some modules can at least boostrap.
@@ -62,7 +63,7 @@ def GetSlivers(plc):
     if (options.verbose):
         logger.log_slivers(data)
     # Set i2 ip list for nodes in I2 nodegroup.
-    try: net.GetSlivers(plc, data)
+    try: net.GetSlivers(plc, data, config) # TODO - num of args needs to be unified across mods.
     except: logger.log_exc()
     #  All other callback modules
     for module in modules:
@@ -71,6 +72,21 @@ def GetSlivers(plc):
             callback(data)
         except: logger.log_exc()
 
+
+def getPLCDefaults(data, config):
+    '''
+    Get PLC wide defaults from _default system slice.  Adds them to config class.
+    '''
+    for slice in data.get('slivers'): 
+        if slice['name'] == config.PLC_SLICE_PREFIX+"_default":
+            attr_dict = {}
+            for attr in slice.get('attributes'): attr_dict[attr['name']] = attr['value'] 
+            if len(attr_dict):
+                logger.verbose("Found default slice overrides.\n %s" % attr_dict)
+                config.OVERRIDES = attr_dict
+            elif 'OVERRIDES' in dir(config): del config.OVERRIDES
+
+
 def run():
     try:
         if options.daemon: tools.daemon()
@@ -119,7 +135,7 @@ def run():
         while True:
         # Main NM Loop
             logger.verbose('mainloop - nm:getSlivers - period=%d random=%d'%(iperiod,irandom))
-            GetSlivers(plc)
+            GetSlivers(plc, config)
             delay=iperiod + random.randrange(0,irandom)
             logger.verbose('mainloop - sleeping for %d s'%delay)
             time.sleep(delay)