Tidy up handling of network parameters, don't rely upon config files
Steve Muir [Tue, 8 Nov 2005 00:26:01 +0000 (00:26 +0000)]
to initialise VServer helper objects

python/vserver.py
util-vserver.spec

index 9f1bb09..1aa6caa 100644 (file)
@@ -35,7 +35,7 @@ class VServer:
     INITSCRIPTS = [('/etc/rc.vinit', 'start'),
                    ('/etc/rc.d/rc', '%(runlevel)d')]
 
-    def __init__(self, name, vm_running = False, resources = {}):
+    def __init__(self, name, vm_id, vm_running = False, resources = {}):
 
         self.name = name
         self.config_file = "/etc/vservers/%s.conf" % name
@@ -43,16 +43,21 @@ class VServer:
         if not (os.path.isdir(self.dir) and
                 os.access(self.dir, os.R_OK | os.W_OK | os.X_OK)):
             raise Exception, "no such vserver: " + name
-        self.config = self.__read_config_file("/etc/vservers.conf")
-        self.config.update(self.__read_config_file(self.config_file))
+        self.config = {}
+        for config_file in ["/etc/vservers.conf", self.config_file]:
+            try:
+                self.config.update(self.__read_config_file(config_file))
+            except IOError, ex:
+                if ex.errno != errno.ENOENT:
+                    raise
         self.flags = 0
-        flags = self.config["S_FLAGS"].split(" ")
+        flags = self.config.get("S_FLAGS", "").split(" ")
         if "lock" in flags:
             self.flags |= FLAGS_LOCK
         if "nproc" in flags:
             self.flags |= FLAGS_NPROC
         self.remove_caps = ~vserverimpl.CAP_SAFE;
-        self.ctx = int(self.config["S_CONTEXT"])
+        self.ctx = vm_id
         self.vm_running = vm_running
         self.resources = resources
 
@@ -171,11 +176,12 @@ class VServer:
         ret = vserverimpl.getrlimit(self.ctx,6)
         return ret
 
-    def set_bwlimit(self, eth, limit, cap, minrate, maxrate):
-        if cap == "-1":
-            bwlimit.off(self.ctx,eth)
+    def set_bwlimit(self, share, minrate, maxrate = None, dev = "eth0"):
+
+        if False:
+            bwlimit.off(self.ctx, dev)
         else:
-            bwlimit.on(self.ctx, eth, limit, cap, minrate, maxrate)
+            bwlimit.on(self.ctx, dev, share, minrate, maxrate)
 
     def get_bwlimit(self, eth):
         # not implemented yet
index d528fd7..a108fe7 100644 (file)
@@ -17,7 +17,7 @@
 
 %define name util-vserver
 %define version 0.30.208
-%define release 4.planetlab%{?date:.%{date}}
+%define release 5.planetlab%{?date:.%{date}}
 
 %define _without_dietlibc 1
 %define _without_xalan 1
@@ -377,10 +377,15 @@ done
 
 %files python
 %defattr(0644,root,root)
-%_libdir/python2.3/site-packages/*
+%_libdir/python2.4/site-packages/*
 
 
 %changelog
+* Mon Nov  7 2005 Steve Muir <smuir@cs.princeton.edu>
+- fix file descriptor leak in vduimpl
+- clean up handling of network parameters
+- don't rely upon /etc/vservers/foo.conf to initialise vserver object
+
 * Wed Nov  2 2005 Steve Muir <smuir@cs.princeton.edu>
 - fix Python modules to handling scheduling parameters correctly