-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/16461/
-----------------------------------------------------------

(Updated Feb. 19, 2014, 2:26 a.m.)


Review request for cloudstack, Wei Zhou and Wido den Hollander.


Changes
-------

Merge with master


Bugs: CLOUDSTACK-5642
    https://issues.apache.org/jira/browse/CLOUDSTACK-5642


Repository: cloudstack-git


Description
-------

Libvirt supports direct attachment of the guest VM's network to a physical 
interface.
But I found the following code may cause some problem, when the nic interface 
type is direct
If type is direct , then this nic will be ignore.

                String type = nic.getAttribute("type");
                String mac = getAttrValue("mac", "address", nic);
                String dev = getAttrValue("target", "dev", nic);
                String model = getAttrValue("model", "type", nic);
                InterfaceDef def = new InterfaceDef();
                NodeList bandwidth = nic.getElementsByTagName("bandwidth");
                Integer networkRateKBps = 0;
                if ((bandwidth != null) && (bandwidth.getLength() != 0)) {
                    Integer inbound = Integer.valueOf(getAttrValue("inbound", 
"average", (Element)bandwidth.item(0)));
                    Integer outbound = Integer.valueOf(getAttrValue("outbound", 
"average", (Element)bandwidth.item(0)));
                    if (inbound == outbound)
                        networkRateKBps = inbound;
                }
                if (type.equalsIgnoreCase("network")) {
                    String network = getAttrValue("source", "network", nic);
                    def.defPrivateNet(network, dev, mac, 
nicModel.valueOf(model.toUpperCase()), networkRateKBps);
                } else if (type.equalsIgnoreCase("bridge")) {
                    String bridge = getAttrValue("source", "bridge", nic);
                    def.defBridgeNet(bridge, dev, mac, 
nicModel.valueOf(model.toUpperCase()), networkRateKBps);
                } else if (type.equalsIgnoreCase("ethernet")) {
                    String scriptPath = getAttrValue("script", "path", nic);
                    def.defEthernet(dev, mac, 
nicModel.valueOf(model.toUpperCase()), scriptPath, networkRateKBps);
                }
                interfaces.add(def); 


Diffs (updated)
-----

  
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java
 127f648 
  
plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java
 PRE-CREATION 

Diff: https://reviews.apache.org/r/16461/diff/


Testing
-------

I add a unit test LibvirtDomainXMLParserTest in test directory , and add a 
direct nic type domain xml for test

<domain type='kvm' id='10'>
<name>ubuntu</name>
 <uuid>77919cf3-b2a7-994f-5f3c-0a91fb9bcbe8</uuid>
<memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='rhel6.4.0'>hvm</type>
 <boot dev='hd'/>
 </os> <features>
   <acpi/>
   <apic/>
  <pae/>
 </features>
 <clock offset='utc'/>
 <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
 <on_crash>restart</on_crash>
 <devices>
 <emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
 <source file='/var/lib/libvirt/images/ubuntu-vm.qcow2'/>
 <target dev='hdb' bus='ide'/>
  <alias name='ide0-0-1'/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
 <controller type='usb' index='0'>
  <alias name='usb0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
  <alias name='ide0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='direct'>
 <mac address='52:54:00:e1:82:a0'/>
<source dev='eth0' mode='vepa'/>
 <target dev='macvtap0'/>
 <alias name='net0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>
<serial type='pty'>
<source path='/dev/pts/4'/>
 <target port='0'/>
 <alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/4'>
  <source path='/dev/pts/4'/>
  <target type='serial' port='0'/>
  <alias name='serial0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
  <listen type='address' address='127.0.0.1'/>
</graphics>
<sound model='ich6'>
  <alias name='sound0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
 <video>
  <model type='cirrus' vram='9216' heads='1'/>
  <alias name='video0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
 </video>
 <memballoon model='virtio'>
<alias name='balloon0'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
 </memballoon>
</devices>
 <seclabel type='none'/>
 </domain>


Thanks,

Howie YU

Reply via email to