AddFeatureSettings( string switchName) { ManagementScope scope = new ManagementScope(@"root\virtualization\v2"); string featureId = NetworkingUtilities.GetSwitchFeatureId(NetworkingUtilities.SwitchFeatureType.Bandwidth); using (ManagementObject managementService = NetworkingUtilities.GetEthernetSwitchManagementService(scope)) // // Find the specified switch. // using (ManagementObject ethernetSwitch = NetworkingUtilities.FindEthernetSwitch(switchName, scope)) using (ManagementObject ethernetSwitchSetting = WmiUtilities.GetFirstObjectFromCollection( ethernetSwitch.GetRelated("Msvm_VirtualEthernetSwitchSettingData", "Msvm_SettingsDefineState", null, null, null, null, false, null))) // // Add a new bandwidth setting instance. // using (ManagementObject bandwidthSetting = NetworkingUtilities.GetDefaultFeatureSetting(featureId, scope)) { // // Set the default bandwidth reservation to 10 Mbps. // bandwidthSetting["DefaultFlowReservation"] = 12500000; // in bytes/sec using (ManagementBaseObject inParams = managementService.GetMethodParameters("AddFeatureSettings")) { inParams["AffectedConfiguration"] = ethernetSwitchSetting.Path.Path; inParams["FeatureSettings"] = new string[] { bandwidthSetting.GetText(TextFormat.WmiDtd20) }; using (ManagementBaseObject outParams = managementService.InvokeMethod("AddFeatureSettings", inParams, null)) { WmiUtilities.ValidateOutput(outParams, scope); } } } Console.WriteLine(string.Format(CultureInfo.CurrentCulture, "Successfully added bandwidth feature setting to virtual switch '{0}'.", switchName)); }
AddFeatureSettings( string virtualMachineName, NetworkingUtilities.PortFeatureType featureType) { ManagementScope scope = new ManagementScope(@"root\virtualization\v2"); int connectionsCount = 0; string featureId = NetworkingUtilities.GetPortFeatureId(featureType); using (ManagementObject managementService = WmiUtilities.GetVirtualMachineManagementService(scope)) // // Find the virtual machine whose connections we want to modify. // using (ManagementObject virtualMachine = WmiUtilities.GetVirtualMachine(virtualMachineName, scope)) // // Find all connections for the given virtual machine. // using (ManagementObjectCollection connections = NetworkingUtilities.FindConnections( virtualMachine, scope)) // // Find the default feature setting for the specified feature type (e.g. Security or ACL). // using (ManagementObject defaultFeatureSetting = NetworkingUtilities.GetDefaultFeatureSetting(featureId, scope)) { // // Set the default feature setting's properties, which will differ depending on which type // of feature setting it is. // switch (featureType) { case NetworkingUtilities.PortFeatureType.Security: // // For example, using a security feature setting, we can disallow MAC spoofing. // defaultFeatureSetting["AllowMacSpoofing"] = false; break; case NetworkingUtilities.PortFeatureType.Acl: // // For example, using an ACL feature setting, we can meter an IP range. // // // Action may be 1 - Allow, 2 - Deny, or 3 - Meter. Here we set up a metering ACL. // defaultFeatureSetting["Action"] = 3; // // Direction may be 1 - Incoming or 2 - Outgoing. Here we set up an ACL on Outgoing traffic. // defaultFeatureSetting["Direction"] = 2; // // Applicability may be 1 - Local or 2 - Remote. Here we set up an ACL on the local endpoint. // defaultFeatureSetting["Applicability"] = 1; // // AclType may be 1 - MAC, 2 - IPv4, or 3 - IPv6. Here we set up an IPv4 ACL. // defaultFeatureSetting["AclType"] = 2; defaultFeatureSetting["RemoteAddress"] = "*.*"; defaultFeatureSetting["RemoteAddressPrefixLength"] = 32; break; case NetworkingUtilities.PortFeatureType.Offload: // // For example, using an Offload feature setting, we can enable IOV. // defaultFeatureSetting["IOVOffloadWeight"] = 100; break; default: // // Invalid featureType Argument // throw new ArgumentOutOfRangeException(featureType.ToString()); } string defaultFeatureSettingText = defaultFeatureSetting.GetText(TextFormat.WmiDtd20); connectionsCount = connections.Count; // // Now add the feature setting to each connection. // try { foreach (ManagementObject ethernetConnectionSetting in connections) { using (ManagementBaseObject inParams = managementService.GetMethodParameters("AddFeatureSettings")) { inParams["AffectedConfiguration"] = ethernetConnectionSetting.Path.Path; inParams["FeatureSettings"] = new string[] { defaultFeatureSettingText }; using (ManagementBaseObject outParams = managementService.InvokeMethod("AddFeatureSettings", inParams, null)) { WmiUtilities.ValidateOutput(outParams, scope); } } } } finally { // Dispose of the connections. foreach (ManagementObject ethernetConnectionSetting in connections) { ethernetConnectionSetting.Dispose(); } } } Console.WriteLine(string.Format(CultureInfo.CurrentCulture, "Successfully modified virtual machine '{0}' so that each of its {1} connection(s) " + "has an advanced {2} setting added.", virtualMachineName, connectionsCount, featureType.ToString())); }