Moti Asayag has uploaded a new change for review. Change subject: core: Add Network Filtering rules to VMs (#809814) ......................................................................
core: Add Network Filtering rules to VMs (#809814) https://bugzilla.redhat.com/809814 The patch introduces the Network Filtering feature. The feature is enabled for 3.2 compatible cluster level. If the feature is enabled, the engine dictates libvirt via VDSM to add a network filter rule to prevent VM mac spoofing. Feature page: http://wiki.ovirt.org/wiki/Features/Design/Network/NetworkFiltering Change-Id: I5776ea730ef1733fe4f9efe852c07053573dc5ba Signed-off-by: Moti Asayag <masa...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugUnplugVmNicCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/HotPlugUnplgNicVDSParameters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NetworkFilters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java 7 files changed, 65 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/56/7356/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java index 5cc2eea..762b397 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java @@ -92,7 +92,7 @@ } else { return runVdsCommand(VDSCommandType.HotPlugNic, new HotPlugUnplgNicVDSParameters(vmDynamic.getrun_on_vds().getValue(), - vmDynamic.getId(), + getVm(), getParameters().getInterface(), vmDevice)).getSucceeded(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugUnplugVmNicCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugUnplugVmNicCommand.java index a7dc221..f0d8132 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugUnplugVmNicCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugUnplugVmNicCommand.java @@ -58,7 +58,7 @@ if (VmHandler.isHotPlugNicAllowedForVmStatus(getVm().getstatus())) { runVdsCommand(getParameters().getAction().getCommandType(), new HotPlugUnplgNicVDSParameters(getVm().getrun_on_vds().getValue(), - getVm().getId(), + getVm(), DbFacade.getInstance().getVmNetworkInterfaceDAO().get(getParameters().getNicId()), vmDevice)); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/HotPlugUnplgNicVDSParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/HotPlugUnplgNicVDSParameters.java index 1f01599..6beec74 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/HotPlugUnplgNicVDSParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/HotPlugUnplgNicVDSParameters.java @@ -1,20 +1,24 @@ package org.ovirt.engine.core.common.vdscommands; +import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; public class HotPlugUnplgNicVDSParameters extends VdsIdVDSCommandParametersBase { private final Guid vmId; private final VmNetworkInterface nic; private final VmDevice vmDevice; + private final Version clusterVersion; - public HotPlugUnplgNicVDSParameters(Guid vdsId, Guid vmId, VmNetworkInterface nic, VmDevice vmDevice) { + public HotPlugUnplgNicVDSParameters(Guid vdsId, VM vm, VmNetworkInterface nic, VmDevice vmDevice) { super(vdsId); - this.vmId = vmId; + this.vmId = vm.getId(); this.nic = nic; this.vmDevice = vmDevice; + this.clusterVersion = vm.getvds_group_compatibility_version(); } public Guid getVmId() { @@ -29,4 +33,8 @@ return vmDevice; } + public Version getClusterVersion(){ + return clusterVersion; + } + } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java index 270fb21..6e9c0cb 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugNicVDSCommand.java @@ -42,6 +42,8 @@ if (vmDevice.getBootOrder() > 0) { map.add("bootOrder", String.valueOf(vmDevice.getBootOrder())); } + VmInfoBuilder.addNetworkFiltersToNic(map, getParameters().getClusterVersion()); + return map; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NetworkFilters.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NetworkFilters.java new file mode 100644 index 0000000..2ff4a9e --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/NetworkFilters.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +/** + * The network filters defined by VDSM to be applied for the VM network interfaces. + */ +public enum NetworkFilters { + VDSM_NO_MAC_SPOOFING("vdsm-no-mac-spoofing"); + + private String filterName; + + private NetworkFilters(String filterName) { + this.filterName = filterName; + } + + public String getFilterName() { + return filterName; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 17d8f88..b6cd092 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -142,6 +142,7 @@ public static final String nic_type = "nicModel"; public static final String portMirroring = "portMirroring"; public static final String bridge = "bridge"; + public static final String FILTERS = "filters"; public static final String num_of_monitors = "spiceMonitors"; public static final String num_of_cpus = "smp"; public static final String cores_per_socket = "smpCoresPerSocket"; diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index fb10e46..a6e56e1 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -30,6 +30,7 @@ import org.ovirt.engine.core.common.utils.VmDeviceCommonUtils; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStringUtils; import org.ovirt.engine.core.vdsbroker.xmlrpc.XmlRpcStruct; @@ -317,22 +318,38 @@ if (ifaceType == VmInterfaceType.rtl8139_pv) { if (!useRtl8139_pv) { if (vm.getHasAgent()) { - addNetworkInterfaceProperties(struct, vmInterface, vmDevice, VmInterfaceType.pv.name()); + addNetworkInterfaceProperties(struct, + vmInterface, + vmDevice, + VmInterfaceType.pv.name(), + vm.getvds_group_compatibility_version()); } else { - addNetworkInterfaceProperties(struct, vmInterface, vmDevice, VmInterfaceType.rtl8139.name()); + addNetworkInterfaceProperties(struct, + vmInterface, + vmDevice, + VmInterfaceType.rtl8139.name(), + vm.getvds_group_compatibility_version()); } } else { - addNetworkInterfaceProperties(struct, vmInterface, vmDevice, VmInterfaceType.pv.name()); + addNetworkInterfaceProperties(struct, + vmInterface, + vmDevice, + VmInterfaceType.pv.name(), + vm.getvds_group_compatibility_version()); // Doual Mode: in this case we have to insert 2 interfaces with the same entries except nicModel XmlRpcStruct rtl8139Struct = new XmlRpcStruct(); addNetworkInterfaceProperties(rtl8139Struct, vmInterface, vmDevice, - VmInterfaceType.rtl8139.name()); + VmInterfaceType.rtl8139.name(), vm.getvds_group_compatibility_version()); devices.add(rtl8139Struct); } } else { - addNetworkInterfaceProperties(struct, vmInterface, vmDevice, ifaceType.toString()); + addNetworkInterfaceProperties(struct, + vmInterface, + vmDevice, + ifaceType.toString(), + vm.getvds_group_compatibility_version()); } devices.add(struct); addToManagedDevices(vmDevice); @@ -461,7 +478,7 @@ private static void addNetworkInterfaceProperties(XmlRpcStruct struct, VmNetworkInterface vmInterface, VmDevice vmDevice, - String nicModel) { + String nicModel, Version clusterVersion) { struct.add(VdsProperties.Type, vmDevice.getType()); struct.add(VdsProperties.Device, vmDevice.getDevice()); struct.add(VdsProperties.network, vmInterface.getNetworkName()); @@ -476,6 +493,15 @@ networks.add(vmInterface.getNetworkName()); struct.add(VdsProperties.portMirroring, networks); } + + addNetworkFiltersToNic(struct, clusterVersion); + } + + public static void addNetworkFiltersToNic(XmlRpcStruct struct, Version clusterVersion) { + if (Config.<Boolean> GetValue(ConfigValues.EnableMACAntiSpoofingFilterRules, clusterVersion.getValue())) { + List<String> filters = Collections.singletonList(NetworkFilters.VDSM_NO_MAC_SPOOFING.getFilterName()); + struct.add(VdsProperties.FILTERS, filters); + } } private static void addFloppyDetails(VmDevice vmDevice, XmlRpcStruct struct) { -- To view, visit http://gerrit.ovirt.org/7356 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5776ea730ef1733fe4f9efe852c07053573dc5ba Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <masa...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches