diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 09f0e6851e0..922e2bff7dd 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -1213,7 +1213,7 @@ public class LibvirtVMDef { private String _ipAddr; private String _scriptPath; private NicModel _model; - private Integer _networkRateKBps; + private int _networkRateKBps; private String _virtualPortType; private String _virtualPortInterfaceId; private int _vlanTag = -1; @@ -1224,11 +1224,27 @@ public class LibvirtVMDef { private String _dpdkSourcePort; private String _dpdkExtraLines; private String _interfaceMode; + private String _userIp4Network; + private Integer _userIp4Prefix; public void defBridgeNet(String brName, String targetBrName, String macAddr, NicModel model) { defBridgeNet(brName, targetBrName, macAddr, model, 0); } + public void defUserNet(NicModel model, String macAddr, String ip4Network, Integer ip4Prefix) { + _netType = GuestNetType.USER; + _macAddr = macAddr; + _userIp4Network = ip4Network; + _userIp4Prefix = ip4Prefix; + _model = model; + } + + public void defUserNet(NicModel model, String macAddr) { + _netType = GuestNetType.USER; + _macAddr = macAddr; + _model = model; + } + public void defBridgeNet(String brName, String targetBrName, String macAddr, NicModel model, Integer networkRateKBps) { _netType = GuestNetType.BRIDGE; _sourceName = brName; @@ -1410,6 +1426,7 @@ public class LibvirtVMDef { netBuilder.append("\n"); } + if (_networkName != null) { netBuilder.append("\n"); } @@ -1446,13 +1463,18 @@ public class LibvirtVMDef { netBuilder.append(_dpdkExtraLines); } - if (_netType != GuestNetType.VHOSTUSER) { + if (_netType != GuestNetType.VHOSTUSER && _netType != GuestNetType.USER) { netBuilder.append("\n"); } if (_slot != null) { netBuilder.append(String.format("
\n", _slot)); } + + if (StringUtils.isNotBlank(_userIp4Network) && _userIp4Prefix != null) { + netBuilder.append(String.format("\n", _userIp4Network, _userIp4Prefix)); + } + return netBuilder.toString(); } diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java index 594460e8702..4eb464e4a68 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java @@ -58,7 +58,34 @@ public class LibvirtVMDefTest extends TestCase { } @Test - public void testInterfaceEtehrnet() { + public void testInterfaceTypeUserWithNetwork() { + LibvirtVMDef.InterfaceDef interfaceDef = new LibvirtVMDef.InterfaceDef(); + interfaceDef.defUserNet(LibvirtVMDef.InterfaceDef.NicModel.VIRTIO, "00:11:22:aa:bb:dd", "192.168.100.0", 24); + + String expected = "\n" + + "\n" + + "\n" + + "\n" + + "\n"; + + assertEquals(expected, interfaceDef.toString()); + } + + @Test + public void testInterfaceTypeUserWithoutNetwork() { + LibvirtVMDef.InterfaceDef interfaceDef = new LibvirtVMDef.InterfaceDef(); + interfaceDef.defUserNet(LibvirtVMDef.InterfaceDef.NicModel.VIRTIO, "00:11:22:aa:bb:dd"); + + String expected = "\n" + + "\n" + + "\n" + + "\n"; + + assertEquals(expected, interfaceDef.toString()); + } + + @Test + public void testInterfaceEthernet() { LibvirtVMDef.InterfaceDef ifDef = new LibvirtVMDef.InterfaceDef(); ifDef.defEthernet("targetDeviceName", "00:11:22:aa:bb:dd", LibvirtVMDef.InterfaceDef.NicModel.VIRTIO);