No such variable self.name. Changed it to network['hostname'].
[nodemanager.git] / net.py
1 """network configuration"""
2
3 import sioc
4 import bwlimit
5 import logger
6
7 def GetSlivers(data):
8     # query running network interfaces
9     devs = sioc.gifconf()
10     ips = dict(zip(devs.values(), devs.keys()))
11     macs = {}
12     for dev in devs:
13         macs[sioc.gifhwaddr(dev).lower()] = dev
14
15     # XXX Exempt Internet2 destinations from node bwlimits
16     # bwlimit.exempt_init('Internet2', internet2_ips)
17     for network in data['networks']:
18         # Get interface name preferably from MAC address, falling
19         # back on IP address.
20         if macs.has_key(network['mac']):
21             dev = macs[network['mac'].lower()]
22         elif ips.has_key(network['ip']):
23             dev = ips[network['ip']]
24         else:
25             logger.log('%s: no such interface with address %s/%s' % (network['hostname'], network['ip'], network['mac']))
26             continue
27
28         # Get current node cap
29         try:
30             old_bwlimit = bwlimit.get_bwcap(dev)
31         except:
32             old_bwlimit = None
33
34         # Get desired node cap
35         if network['bwlimit'] is None or network['bwlimit'] < 0:
36             new_bwlimit = bwlimit.bwmax
37         else:
38             new_bwlimit = network['bwlimit']
39
40         if old_bwlimit != new_bwlimit:
41             # Reinitialize bandwidth limits
42             bwlimit.init(dev, new_bwlimit)
43
44             # XXX This should trigger an rspec refresh in case
45             # some previously invalid sliver bwlimit is now valid
46             # again, or vice-versa.
47
48 def start(options, config):
49     pass