tag = self.get_tag('egre_key')
if not tag:
try:
- key = free_egre_key()
+ key = self.network.free_egre_key()
except:
- # Should handle this case...
- raise Error("ran out of EGRE keys!")
- tag = self.update_tag('egre_key', key, None, 10)
+ raise InvalidRSpec("ran out of EGRE keys!")
+ tag = self.update_tag('egre_key', key, None, 'admin')
return
def turn_on_netns(self):
tag = self.get_tag('netns')
if (not tag) or (tag.value != '1'):
- tag = self.update_tag('netns', '1', None, 10)
+ tag = self.update_tag('netns', '1', None, 'admin')
return
def turn_off_netns(self):
break
else:
newcaps = "CAP_NET_ADMIN," + tag.value
- self.update_tag('capabilities', newcaps, None, 10)
+ self.update_tag('capabilities', newcaps, None, 'admin')
else:
- tag = self.add_tag('capabilities', 'CAP_NET_ADMIN', None, 10)
+ tag = self.add_tag('capabilities', 'CAP_NET_ADMIN', None, 'admin')
return
def remove_cap_net_admin(self):
newcaps.append(cap)
if newcaps:
value = ','.join(newcaps)
- self.update_tag('capabilities', value, None, 10)
+ self.update_tag('capabilities', value, None, 'admin')
else:
tag.delete()
return
class ViniNetwork(Network):
- def __init__(self, api, type = "VINI"):
+ def __init__(self, api, type = "SFA"):
Network.__init__(self, api, type)
self.sitelinks = []
self.nodelinks = []
def updateSliceTags(self):
slice = self.slice
- tag = slice.update_tag('vini_topo', 'manual')
+ tag = slice.update_tag('vini_topo', 'manual', None, 'admin')
slice.assign_egre_key()
slice.turn_on_netns()
slice.add_cap_net_admin()
linkdesc.append(node.get_topo_rspec(link))
if linkdesc:
topo_str = "%s" % linkdesc
- tag = slice.update_tag('topo_rspec', topo_str, node, 10)
+ tag = slice.update_tag('topo_rspec', topo_str, node, 'admin')
- # Update or expire the topo_rspec tags
+ # Expire the un-updated topo_rspec tags
for tag in self.getSliceTags():
if tag.tagname in ['topo_rspec']:
- tag.writable = True
+ if not tag.was_updated():
+ tag.delete()
Network.updateSliceTags(self)
+ """
+ Find a free EGRE key
+ """
+ def free_egre_key(self):
+ used = set()
+ for tag in self.getSliceTags():
+ if tag.tagname == 'egre_key':
+ used.add(int(tag.value))
+
+ for i in range(1, 256):
+ if i not in used:
+ key = i
+ break
+ else:
+ raise KeyError("No more EGRE keys available")
+
+ return str(key)
+
"""
Produce XML directly from the topology specification.
"""
def toxml(self):
xml = XMLBuilder(format = True, tab_step = " ")
with xml.RSpec(type=self.type):
- name = "Public_" + self.type
if self.slice:
- element = xml.network(name=name, slice=self.slice.hrn)
+ element = xml.network(name=self.api.hrn, slice=self.slice.hrn)
else:
- element = xml.network(name=name)
+ element = xml.network(name=self.api.hrn)
with element:
if self.slice: