From 921fba1ea12cada18a112f5f0ecf91230c97532a Mon Sep 17 00:00:00 2001 From: anthony Date: Wed, 15 Sep 2010 16:20:27 -0700 Subject: [PATCH] bug 6190: set qos of vif status 6190: resolved fixed --- .../xen/resource/CitrixResourceBase.java | 92 +++++++------------ 1 file changed, 34 insertions(+), 58 deletions(-) diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 229f0a03077..4af59c6a16e 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1317,25 +1317,8 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR if (vifDeviceNum == null) { throw new InternalErrorException("There were no more available slots for a new VIF on router: " + router.getNameLabel(conn)); } - - VIF.Record vifr = new VIF.Record(); - vifr.VM = router; - vifr.device = vifDeviceNum; - vifr.MAC = vifMacAddress; - - if ("untagged".equalsIgnoreCase(vlanId)) { - vifr.network = Network.getByUuid(conn, _host.publicNetwork); - } else { - Network vlanNetwork = enableVlanNetwork(Long.valueOf(vlanId), _host.publicPif); - - if (vlanNetwork == null) { - throw new InternalErrorException("Failed to enable VLAN network with tag: " + vlanId); - } - - vifr.network = vlanNetwork; - } - - correctVif = VIF.create(conn, vifr); + + correctVif = createVIF(conn, router, vifMacAddress, vlanId, 0, vifDeviceNum, true); correctVif.plug(conn); // Add iptables rule for network usage networkUsage(privateIpAddress, "addVif", "eth" + correctVif.getDevice(conn)); @@ -2857,13 +2840,23 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR String msg = "Start VM failed"; return new StartAnswer(cmd, msg); } - - protected void createVIF(Connection conn, VM vm, String mac, String vlanTag, int rate, String devNum, boolean isPub) throws XenAPIException, XmlRpcException, - InternalErrorException { + + protected VIF createVIF(Connection conn, VM vm, String mac, int rate, String devNum, Network network) throws XenAPIException, XmlRpcException, + InternalErrorException { VIF.Record vifr = new VIF.Record(); vifr.VM = vm; vifr.device = devNum; vifr.MAC = mac; + vifr.network = network; + if ( rate == 0 ) rate = 200; + vifr.qosAlgorithmType = "ratelimit"; + vifr.qosAlgorithmParams = new HashMap(); + vifr.qosAlgorithmParams.put("kbps", Integer.toString(rate * 1000)); + return VIF.create(conn, vifr); + } + + protected VIF createVIF(Connection conn, VM vm, String mac, String vlanTag, int rate, String devNum, boolean isPub) throws XenAPIException, XmlRpcException, + InternalErrorException { String nwUuid = (isPub ? _host.publicNetwork : _host.guestNetwork); String pifUuid = (isPub ? _host.publicPif : _host.guestPif); @@ -2877,15 +2870,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR if (vlanNetwork == null) { throw new InternalErrorException("Failed to enable VLAN network with tag: " + vlanTag); } - - vifr.network = vlanNetwork; - if (rate != 0) { - vifr.qosAlgorithmType = "ratelimit"; - vifr.qosAlgorithmParams = new HashMap(); - vifr.qosAlgorithmParams.put("kbps", Integer.toString(rate * 1000)); - } - - VIF.create(conn, vifr); + return createVIF(conn, vm, mac, rate, devNum, vlanNetwork); } protected StopAnswer execute(final StopCommand cmd) { @@ -3187,44 +3172,35 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR cdromVBD.insert(conn, VDI.getByUuid(conn, _host.systemvmisouuid)); /* create VIF0 */ - VIF.Record vifr = new VIF.Record(); - vifr.VM = vm; - vifr.device = "0"; - vifr.MAC = guestMacAddr; + Network network = null; if (VirtualMachineName.isValidConsoleProxyName(vmName) || VirtualMachineName.isValidSecStorageVmName(vmName, null)) { - vifr.network = Network.getByUuid(conn, _host.linkLocalNetwork); - } else - vifr.network = nw0; - VIF.create(conn, vifr); + network = Network.getByUuid(conn, _host.linkLocalNetwork); + } else { + network = nw0; + } + createVIF(conn, vm, guestMacAddr, 0, "0", network); + /* create VIF1 */ /* For routing vm, set its network as link local bridge */ - vifr.VM = vm; - vifr.device = "1"; - vifr.MAC = privateMacAddr; if (VirtualMachineName.isValidRouterName(vmName) && privateIp.startsWith("169.254")) { - vifr.network = Network.getByUuid(conn, _host.linkLocalNetwork); + network = Network.getByUuid(conn, _host.linkLocalNetwork); } else { - vifr.network = Network.getByUuid(conn, _host.privateNetwork); + network = Network.getByUuid(conn, _host.privateNetwork); } - VIF.create(conn, vifr); + createVIF(conn, vm, privateMacAddr, 0, "1", network); + + /* create VIF2 */ if( !publicMacAddr.equalsIgnoreCase("FE:FF:FF:FF:FF:FF") ) { - /* create VIF2 */ - vifr.VM = vm; - vifr.device = "2"; - vifr.MAC = publicMacAddr; - vifr.network = Network.getByUuid(conn, _host.publicNetwork); + network = null; if ("untagged".equalsIgnoreCase(vlanId)) { - vifr.network = Network.getByUuid(conn, _host.publicNetwork); + network = Network.getByUuid(conn, _host.publicNetwork); } else { - Network vlanNetwork = enableVlanNetwork(Long.valueOf(vlanId), _host.publicPif); - - if (vlanNetwork == null) { + network = enableVlanNetwork(Long.valueOf(vlanId), _host.publicPif); + if (network == null) { throw new InternalErrorException("Failed to enable VLAN network with tag: " + vlanId); - } - - vifr.network = vlanNetwork; + } } - VIF.create(conn, vifr); + createVIF(conn, vm, publicMacAddr, 0, "2", network); } /* set up PV dom argument */ String pvargs = vm.getPVArgs(conn);