OSDN Git Service

added definition for model type of a network interface
authorTaizo ITO <taizo@karesansui-project.info>
Fri, 9 Jul 2010 02:15:59 +0000 (11:15 +0900)
committerTaizo ITO <taizo@karesansui-project.info>
Fri, 9 Jul 2010 02:15:59 +0000 (11:15 +0900)
karesansui/lib/virt/config.py
karesansui/lib/virt/virt.py

index b2cd7f4..6ae9966 100644 (file)
@@ -295,8 +295,8 @@ class ConfigParam:
                 return arr["path"]
         return None
 
-    def add_interface(self, mac, type, bridge, script, target=None):
-        self.interfaces.append( {"mac": mac, "type": type, "bridge": bridge, "script": script, "target": target} )
+    def add_interface(self, mac, type, bridge, script, target=None, model=None):
+        self.interfaces.append( {"mac": mac, "type": type, "bridge": bridge, "script": script, "target": target, "model": model} )
 
     def delete_interface(self, mac):
         for arr in self.interfaces:
@@ -444,7 +444,10 @@ class ConfigParam:
             target = XMLXpath(document,'/domain/devices/interface[%i]/target/@dev' % n)
             if target != None:
                 target = str(target)
-            self.add_interface(str(mac), str(type), str(name), script, target)
+            model = XMLXpath(document,'/domain/devices/interface[%i]/model/@type' % n)
+            if model != None:
+                model = str(model)
+            self.add_interface(str(mac), str(type), str(name), script, target, model=model)
 
         self.disks = []
         disk_num = XMLXpathNum(document,'/domain/devices/disk')
@@ -1083,6 +1086,10 @@ class XMLConfigGenerator(XMLGenerator):
                 target_n = doc.createElement("target")
                 target_n.setAttribute("dev", interface["target"])
                 interface_n.appendChild(target_n)
+            if interface["model"] != None:
+                model_n = doc.createElement("model")
+                model_n.setAttribute("type", interface["model"])
+                interface_n.appendChild(model_n)
             devs_elem.appendChild(interface_n)
         
         self.domain.appendChild(devs_elem)
index f698d0d..2a260e8 100644 (file)
@@ -750,8 +750,11 @@ class KaresansuiVirtConnection:
         param.set_memory(str(ram) + 'm')
         param.set_vnc_keymap(keymap)
 
-
-
+        # definition for a network interface
+        if type == "kvm":
+            model = "virtio"
+        else:
+            model = None
         for _format in self.interface_format:
             if _format['name'][0:5] == 'xenbr':
                 script = "vif-bridge"
@@ -760,9 +763,9 @@ class KaresansuiVirtConnection:
 
             if mac is None:
                 mac = GenMAC()
-                param.add_interface(mac,"bridge",_format['name'],script)
+                param.add_interface(mac,"bridge",_format['name'],script,model=model)
             else:
-                param.add_interface(mac.lower(),"bridge",_format['name'],script)
+                param.add_interface(mac.lower(),"bridge",_format['name'],script,model=model)
                 mac = None
 
         param.set_vnc_port(vnc)
@@ -1110,15 +1113,20 @@ class KaresansuiVirtConnection:
         pool_dir = self.get_storage_pool_targetpath(pool)
         disk = "%s/%s/images/%s.img" % (pool_dir, name, name)
 
+        # definition for a network interface
         src_interfaces = param.interfaces
         param.interfaces = []
         for ifs in src_interfaces:
             script = ifs['script']
+            try:
+                model = ifs['model']
+            except:
+                model = None
             if mac is None:
                 mac = GenMAC()
-                param.add_interface(mac,"bridge",ifs['bridge'],script)
+                param.add_interface(mac,"bridge",ifs['bridge'],script,model=model)
             else:
-                param.add_interface(mac.lower(),"bridge",ifs['bridge'],script)
+                param.add_interface(mac.lower(),"bridge",ifs['bridge'],script,model=model)
                 mac = None
 
         if uuid is None:
@@ -3534,7 +3542,7 @@ class KaresansuiVirtGuest:
 
         sync_config_generator(param, self.get_domain_name())
 
-    def append_interface(self,mac,bridge=None,network=None):
+    def append_interface(self,mac,bridge=None,network=None,model=None):
 
         from karesansui.lib.virt.config import ConfigParam
         param = ConfigParam(self.get_domain_name())
@@ -3553,10 +3561,12 @@ class KaresansuiVirtGuest:
 
         if bridge[0:5] == 'xenbr':
             script = "vif-bridge"
+            model  = None
         else:
             script = None
+            model  = "virtio"
         mac = mac.lower()
-        param.add_interface(mac,"bridge",bridge,script)
+        param.add_interface(mac,"bridge",bridge,script,model=model)
 
         try:
             from karesansui.lib.virt.config import XMLInterfaceConfigGenerator