bug 6190: set qos of vif

status 6190: resolved fixed
This commit is contained in:
anthony 2010-09-15 16:20:27 -07:00
parent 6731dc66f1
commit 921fba1ea1

View File

@ -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<String, String>();
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<String, String>();
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);