import vserver
import os
-dryrun=0
-setup_link_cmd="/usr/share/vini/setup-egre-link"
-teardown_link_cmd="/usr/share/vini/teardown-egre-link"
+dryrun = 0
+vinidir = "/usr/share/vini/"
+setup_link_cmd = vinidir + "setup-egre-link"
+teardown_link_cmd = vinidir + "teardown-egre-link"
+setup_nat_cmd = vinidir + "setup-nat"
+teardown_nat_cmd = vinidir + "teardown-nat"
ifaces = {}
old_ifaces = {}
Called for all active virtual link interfaces, so they won't be cleaned up.
"""
def refresh_virtual_link(nodeid, key):
- try:
- name = "d%sx%s" % (key, nodeid)
+ name = "d%sx%s" % (key, nodeid)
+ if name in old_ifaces:
del old_ifaces[name]
- except:
- pass
+ return
+
+
+"""
+Check for existence of interface natx<key>
+"""
+def nat_exists(key):
+ name = "natx%s" % key
+ if name in ifaces:
+ return True
+ else:
+ return False
+
+
+"""
+Create a NAT interface inside the sliver.
+"""
+def setup_nat(slice, myid, key):
+ logger.log("%s: Set up NAT" % slice)
+ run(setup_nat_cmd + " %s %s %s" % (slice, myid, key))
+ return
+
+
+"""
+Tear down the NAT interface identified by key
+"""
+def teardown_nat(key):
+ logger.log("topo: Tear down NAT %s" % key)
+ run(teardown_nat_cmd + " %s" % key)
+ return
+
+
+"""
+Called for all active NAT interfaces, so they won't be cleaned up.
+"""
+def refresh_nat(key):
+ name = "natx%s" % (key)
+ if name in old_ifaces:
+ del old_ifaces[name]
+ return
"""
from the slice).
"""
def clean_up_old_virtual_links():
- pattern = "d(.*)x(.*)"
+ pattern1 = "d(.*)x(.*)"
+ pattern2 = "natx(.*)"
for iface in old_ifaces:
- m = re.match(pattern, iface)
+ m = re.match(pattern1, iface)
if m:
key = int(m.group(1))
node = int(m.group(2))
teardown_virtual_link(key, node)
+ m = re.match(pattern2, iface)
+ if m:
+ key = int(m.group(1))
+ teardown_nat(key)
+ return
+
"""
Not the safest thing to do, probably should use pickle() or something.
logger.log("%s: virtual link to node %s exists" % (slice, nodeid))
refresh_virtual_link(nodeid, key)
+ if not nat_exists(key):
+ setup_nat(slice, myid, key)
+ else:
+ logger.log("%s: NAT exists" % slice)
+ refresh_nat(key)
+
+
"""
Write /etc/vservers/<slicename>/spaces/net
"""