- fix typo
[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
18     for network in data['networks']:
19         # Get interface name preferably from MAC address, falling
20         # back on IP address.
21         if macs.has_key(network['mac'].lower()):
22             dev = macs[network['mac'].lower()]
23         elif ips.has_key(network['ip']):
24             dev = ips[network['ip']]
25         else:
26             logger.log('%s: no such interface with address %s/%s' % (self.name, network['ip'], network['mac']))
27             continue
28
29         # Get current node cap
30         try:
31             old_bwlimit = bwlimit.get_bwcap(dev)
32         except:
33             old_bwlimit = None
34
35         # Get desired node cap
36         if network['bwlimit'] is None or network['bwlimit'] < 0:
37             new_bwlimit = bwlimit.bwmax
38         else:
39             new_bwlimit = network['bwlimit']
40
41         if old_bwlimit != new_bwlimit:
42             # Reinitialize bandwidth limits
43             bwlimit.init(dev, new_bwlimit)
44
45             # XXX This should trigger an rspec refresh in case
46             # some previously invalid sliver bwlimit is now valid
47             # again, or vice-versa.
48
49 def start(options, config):
50     pass