From d177678fd3b9bccaeb4711ebf6dd6a9cba593be0 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 15 Aug 2022 09:06:28 -0600 Subject: [PATCH] Add usermode interfaces to LibvirtVMDef (#184) * Add usermode interfaces to LibvirtVMDef Signed-off-by: Marcus Sorensen * Update plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java Co-authored-by: Suresh Kumar Anaparti * trailingwhitespace * Set model on usermode network, fix NPE in network rate Signed-off-by: Marcus Sorensen Co-authored-by: Suresh Kumar Anaparti Co-authored-by: Daan Hoogland Co-authored-by: Marcus Sorensen --- .../hypervisor/kvm/resource/LibvirtVMDef.java | 26 +++++++++++++++-- .../kvm/resource/LibvirtVMDefTest.java | 29 ++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) 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);