X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plnode%2Fbwlimit_lxc.py;h=94178b0521469f8efa9022e04860eda29bcec578;hb=6a4be94bef2ccf385c1ccc95a19900072203f9d8;hp=d58234cc943e9a30834070bd7d2a1a9a51feca24;hpb=d5f6df5e6626fa7e148cdc254bb1aa65aed73b4a;p=plnode-utils.git diff --git a/plnode/bwlimit_lxc.py b/plnode/bwlimit_lxc.py index d58234c..94178b0 100644 --- a/plnode/bwlimit_lxc.py +++ b/plnode/bwlimit_lxc.py @@ -1,7 +1,7 @@ -#!/usr/bin/python +#!/usr/bin/python3 # # This file is under git as plnode-utils/bwlimit_lxc.py -# +# # Bandwidth limit module for PlanetLab nodes. The intent is to use the # Hierarchical Token Bucket (HTB) queueing discipline (qdisc) to allow # slices to fairly share access to available node bandwidth. We @@ -184,13 +184,15 @@ def get_tc_rate(s): Parses an integer or a tc rate string (e.g., 1.5mbit) into bits/second """ - if type(s) == int: + if isinstance(s, int): return s + if isinstance(s, float): + return int(s) m = re.match(r"([0-9.]+)(\D*)", s) if m is None: return -1 suffix = m.group(2).lower() - if suffixes.has_key(suffix): + if suffix in suffixes: return int(float(m.group(1)) * suffixes[suffix]) else: return -1 @@ -251,11 +253,11 @@ def get_bwcap(dev = dev): state = tc("-d class show dev %s" % dev) base_re = re.compile(r"class htb 1:10 parent 1:1 .*ceil ([^ ]+) .*") - base_classes = filter(None, map(base_re.match, state)) + base_classes = [_f for _f in map(base_re.match, state) if _f] if not base_classes: return -1 if len(base_classes) > 1: - raise Exception, "unable to get current bwcap" + raise Exception("unable to get current bwcap") return get_tc_rate(base_classes[0].group(1)) @@ -312,7 +314,7 @@ def run(cmd, input = None): output = None if fileobj.close() is None: return output - except Exception, e: + except Exception as e: pass return None @@ -381,7 +383,7 @@ def init(dev = dev, bwcap = bwmax): 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). + # 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)) @@ -436,7 +438,7 @@ def get(xid = None, dev = dev): # Sent 6851486 bytes 49244 pkt (dropped 0, overlimits 0 requeues 0) # ... # class htb 1:2000 parent 1:20 leaf 2000: prio 0 quantum 8000 rate 8bit ceil 1000Mbit ... - # Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) + # Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) # ... for line in tc("-s -d class show dev %s" % dev): # Rate parameter line @@ -460,7 +462,7 @@ def get(xid = None, dev = dev): # Slice ID id = int(params.group(1), 16) & 0x0FFF; - if rates.has_key(id): + if id in rates: rate = rates[id] else: rate = {'id': id} @@ -497,9 +499,9 @@ def get(xid = None, dev = dev): # Keep parsing until we get everything if rate is not None and \ - rate.has_key('min') and rate.has_key('minexempt') and \ - rate.has_key('max') and rate.has_key('maxexempt') and \ - rate.has_key('bytes') and rate.has_key('exemptbytes'): + 'min' in rate and 'minexempt' in rate and \ + 'max' in rate and 'maxexempt' in rate and \ + 'bytes' in rate and 'exemptbytes' in rate: params = (rate['id'], rate['share'], rate['min'], rate['max'], rate['minexempt'], rate['maxexempt'], @@ -516,7 +518,9 @@ def get(xid = None, dev = dev): return ret -def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None): +def on(xid, dev=dev, share=None, + minrate=None, maxrate=None, + minexemptrate=None, maxexemptrate=None): """ Apply specified bandwidth limit to the specified slice xid """ @@ -599,16 +603,18 @@ def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptra (dev, xid, default_minor | xid)) -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) +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 # are seen from this slice, they will be classified into the default # class 1:1FFF. -def off(xid, dev = dev): +def off(xid, dev=dev): """ Remove class associated with specified slice xid. If further packets are seen from this slice, they will be classified into the @@ -646,8 +652,8 @@ def exempt_init(group_name, node_ips): def usage(): bwcap_description = format_tc_rate(get_bwcap()) - - print """ + + print(""" Usage: %s [OPTION]... [COMMAND] [ARGUMENT]... @@ -671,9 +677,9 @@ Commands: Get all bandwidth parameters for all slices get slice Get bandwidth parameters for the specified slice -""" % (sys.argv[0], dev, bwcap_description, quantum) +""" % (sys.argv[0], dev, bwcap_description, quantum)) sys.exit(1) - + def main(): global dev, quantum, verbose @@ -734,17 +740,17 @@ def main(): # Orphaned (not associated with a slice) class slice = "%d?" % xid if numeric: - print "%s %d %d %d %d %d %d %d" % \ + print("%s %d %d %d %d %d %d %d" % \ (slice, share, minrate, maxrate, minexemptrate, maxexemptrate, - bytes, exemptbytes) + bytes, exemptbytes)) else: - print "%s %d %s %s %s %s %s %s" % \ + print("%s %d %s %s %s %s %s %s" % \ (slice, share, format_tc_rate(minrate), format_tc_rate(maxrate), format_tc_rate(minexemptrate), format_tc_rate(maxexemptrate), - format_bytes(bytes), format_bytes(exemptbytes)) + format_bytes(bytes), format_bytes(exemptbytes))) elif len(argv) >= 2: # slice, ...