public NetworkAdapterInfo GetNetworkAdapterInfo() { using (IVirtualSystemSettingData systemSettingData = this._Vm.GetVirtualSystemSettingData()) { using (IEthernetPortAllocationSettingData epasd = EthernetPortAllocationSettingData.GetRelated(systemSettingData).DisposingUnless <IEthernetPortAllocationSettingData>((Func <IEthernetPortAllocationSettingData, bool>)(e => e.Parent == ((IWMICommon)this._AdapterSettingData).Object.Path.Path)).FirstOrDefault <IEthernetPortAllocationSettingData>()) { if (epasd == null) { return new NetworkAdapterInfo() { SwitchPort = new SwitchPortInfo() { Name = string.Empty }, VirtualSwitch = new VirtualSwitchInfo() { Label = string.Empty } } } ; string vsPath = epasd.HostResource == null || epasd.HostResource.Length == 0 ? string.Empty : epasd.HostResource[0]; using (IEthernetSwitchPortVlanSettingData portVlanSettingData = EthernetSwitchPortVlanSettingData.GetRelated(epasd).FirstOrDefault <IEthernetSwitchPortVlanSettingData>()) { using (IEthernetSwitchPort ethernetSwitchPort = EthernetSwitchPort.GetRelated(epasd).FirstOrDefault <IEthernetSwitchPort>()) { using (IVirtualEthernetSwitch virtualEthernetSwitch = VirtualEthernetSwitch.GetAllVirtualEthernetSwitches(this._Host).DisposingUnless <IVirtualEthernetSwitch>((Func <IVirtualEthernetSwitch, bool>)(v => ((IWMICommon)v).Object.Path.Path == vsPath)).FirstOrDefault <IVirtualEthernetSwitch>()) { NetworkAdapterInfo networkAdapterInfo = new NetworkAdapterInfo() { SwitchPort = new SwitchPortInfo(), VirtualSwitch = new VirtualSwitchInfo() }; if (ethernetSwitchPort == null) { if (virtualEthernetSwitch != null) { networkAdapterInfo.SwitchPort.Name = virtualEthernetSwitch.ElementName; networkAdapterInfo.SwitchPort.Guid = virtualEthernetSwitch.Name; } } else { networkAdapterInfo.SwitchPort.Name = ethernetSwitchPort.SystemName; networkAdapterInfo.SwitchPort.Guid = ethernetSwitchPort.Name; } networkAdapterInfo.SwitchPort.AccessVLanId = portVlanSettingData == null ? 0 : (int)portVlanSettingData.AccessVlanId; if (virtualEthernetSwitch != null) { networkAdapterInfo.VirtualSwitch.Label = virtualEthernetSwitch.ElementName; networkAdapterInfo.VirtualSwitch.SwitchUuid = virtualEthernetSwitch.Name; } return(networkAdapterInfo); } } } } } }
public Dictionary <string, IVirtualSwitch> GetAllVirtualSwitchesWithUuid() { Dictionary <string, IVirtualSwitch> dictionary = new Dictionary <string, IVirtualSwitch>(); foreach (IVirtualEthernetSwitch virtualEthernetSwitch in VirtualEthernetSwitch.GetAllVirtualEthernetSwitches(this._Host)) { dictionary.Add(virtualEthernetSwitch.Name, VirtualSwitch.CreateFromVirtualEthernetSwitch(virtualEthernetSwitch, this._Logger)); } return(dictionary); }
public IVirtualEthernetSwitch DefineSystem(IVirtualEthernetSwitchSettingData systemSettings, IEnumerable <IEthernetPortAllocationSettingData> resourceSettings, IVirtualSystemSettingData referenceConfiguration) { using (ManagementBaseObject methodParameters = this._Instance.GetMethodParameters(nameof(DefineSystem))) { methodParameters["SystemSettings"] = (object)((IWMICommon)systemSettings).Object.GetText(TextFormat.WmiDtd20); methodParameters["ResourceSettings"] = (object)resourceSettings.Select <IEthernetPortAllocationSettingData, string>((Func <IEthernetPortAllocationSettingData, string>)(rs => ((IWMICommon)rs).Object.GetText(TextFormat.WmiDtd20))).ToArray <string>(); using (ManagementBaseObject managementBaseObject = this._Instance.InvokeAndWait(nameof(DefineSystem), methodParameters)) return(VirtualEthernetSwitch.CreateFromManagementObject(new ManagementObject((string)managementBaseObject["ResultingSystem"]))); } }
public void ConnectUsingID(string virtualSwitchID) { NIC.tracer.TraceInformation(string.Format("Connecting using ID {0}", (object)virtualSwitchID)); using (VirtualEthernetSwitchManagementService.GetVirtualEthernetSwitchManagementService(this._Host)) { using (IVirtualSystemManagementService managmentService = VirtualSystemManagementService.GetVirtualSystemManagmentService(this._Host)) { using (IVirtualSystemSettingData systemSettingData = this._Vm.GetVirtualSystemSettingData()) { using (IVirtualEthernetSwitch virtualEthernetSwitch = VirtualEthernetSwitch.GetAllVirtualEthernetSwitches(this._Host).DisposingUnless <IVirtualEthernetSwitch>((Func <IVirtualEthernetSwitch, bool>)(v => v.Name == virtualSwitchID)).FirstOrDefault <IVirtualEthernetSwitch>()) { using (IEthernetPortAllocationSettingData allocationSettingData1 = EthernetPortAllocationSettingData.GetRelated(systemSettingData).Where <IEthernetPortAllocationSettingData>((Func <IEthernetPortAllocationSettingData, bool>)(e => e.Parent == ((IWMICommon)this._AdapterSettingData).Object.Path.Path)).FirstOrDefault <IEthernetPortAllocationSettingData>()) { if (allocationSettingData1 == null) { NIC.tracer.TraceInformation(string.Format("Did not find existing Ethernet port allocation setting data for {0}", (object)virtualSwitchID)); using (IEthernetPortAllocationSettingData allocationSettingData2 = EthernetPortAllocationSettingData.GetDefaultEthernetPortAllocationSettingData(this._Host)) { Invariant.ArgumentNotNull((object)allocationSettingData2, "Switch port not found"); Invariant.ArgumentNotNull((object)virtualEthernetSwitch, "Virtual switch '" + virtualSwitchID + "' not found"); allocationSettingData2.Parent = ((IWMICommon)this._AdapterSettingData).Object.Path.Path; NIC.tracer.TraceInformation(string.Format("Switch port parent {0}", (object)allocationSettingData2.Parent)); allocationSettingData2.HostResource = new string[1] { ((IWMICommon)virtualEthernetSwitch).Object.Path.Path }; NIC.tracer.TraceInformation(string.Format("Switch port host resource {0}", (object[])allocationSettingData2.HostResource)); NIC.tracer.TraceInformation(string.Format("Adding resource settings to VM: {0}", (object)((IWMICommon)allocationSettingData2).Object.GetText(TextFormat.WmiDtd20))); managmentService.AddResourceSettings(systemSettingData, new string[1] { ((IWMICommon)allocationSettingData2).Object.GetText(TextFormat.WmiDtd20) }).FirstOrDefault <IResourceAllocationSettingData>().TryDispose(); } } else { NIC.tracer.TraceInformation(string.Format("Found existing Ethernet port allocation setting data for {0}", (object)virtualSwitchID)); allocationSettingData1.EnabledState = (ushort)2; allocationSettingData1.HostResource = new string[1] { ((IWMICommon)virtualEthernetSwitch).Object.Path.Path }; NIC.tracer.TraceInformation(string.Format("Ethernet port allocation setting data for {0} set to {1}", (object)virtualSwitchID, (object)((IEnumerable <string>)allocationSettingData1.HostResource).FirstOrDefault <string>())); NIC.tracer.TraceInformation(string.Format("Modifying resource settings: {0}", (object)((IWMICommon)allocationSettingData1).Object.GetText(TextFormat.WmiDtd20))); managmentService.ModifyResourceSettings(new string[1] { ((IWMICommon)allocationSettingData1).Object.GetText(TextFormat.WmiDtd20) }).ForEach <IResourceAllocationSettingData>((Action <IResourceAllocationSettingData>)(v => v.Dispose())); } } } } } } }
public IVirtualSwitch GetVirtualSwitchByName(string name) { foreach (IVirtualEthernetSwitch virtualEthernetSwitch in VirtualEthernetSwitch.GetAllVirtualEthernetSwitches(this._Host)) { if (string.Equals(virtualEthernetSwitch.ElementName, name, StringComparison.CurrentCultureIgnoreCase)) { return(VirtualSwitch.CreateFromVirtualEthernetSwitch(virtualEthernetSwitch, this._Logger)); } virtualEthernetSwitch.Dispose(); } return((IVirtualSwitch)null); }
public void Connect(string virtualSwitchName) { using (VirtualEthernetSwitchManagementService.GetVirtualEthernetSwitchManagementService(this._Host)) { using (IVirtualSystemManagementService managmentService = VirtualSystemManagementService.GetVirtualSystemManagmentService(this._Host)) { using (IVirtualSystemSettingData systemSettingData = this._Vm.GetVirtualSystemSettingData()) { using (IVirtualEthernetSwitch virtualEthernetSwitch = VirtualEthernetSwitch.GetAllVirtualEthernetSwitches(this._Host).DisposingUnless <IVirtualEthernetSwitch>((Func <IVirtualEthernetSwitch, bool>)(v => v.ElementName == virtualSwitchName)).FirstOrDefault <IVirtualEthernetSwitch>()) { using (IEthernetPortAllocationSettingData allocationSettingData1 = EthernetPortAllocationSettingData.GetRelated(systemSettingData).Where <IEthernetPortAllocationSettingData>((Func <IEthernetPortAllocationSettingData, bool>)(e => e.Parent == ((IWMICommon)this._AdapterSettingData).Object.Path.Path)).FirstOrDefault <IEthernetPortAllocationSettingData>()) { if (allocationSettingData1 == null) { using (IEthernetPortAllocationSettingData allocationSettingData2 = EthernetPortAllocationSettingData.GetDefaultEthernetPortAllocationSettingData(this._Host)) { Invariant.ArgumentNotNull((object)allocationSettingData2, "Switch port not found"); Invariant.ArgumentNotNull((object)virtualEthernetSwitch, "Virtual switch '" + virtualSwitchName + "' not found"); allocationSettingData2.Parent = ((IWMICommon)this._AdapterSettingData).Object.Path.Path; allocationSettingData2.HostResource = new string[1] { ((IWMICommon)virtualEthernetSwitch).Object.Path.Path }; managmentService.AddResourceSettings(systemSettingData, new string[1] { ((IWMICommon)allocationSettingData2).Object.GetText(TextFormat.WmiDtd20) }).FirstOrDefault <IResourceAllocationSettingData>().TryDispose(); } } else { Invariant.ArgumentNotNull((object)virtualEthernetSwitch, "Virtual switch '" + virtualSwitchName + "' not found"); allocationSettingData1.EnabledState = (ushort)2; allocationSettingData1.HostResource = new string[1] { ((IWMICommon)virtualEthernetSwitch).Object.Path.Path }; managmentService.ModifyResourceSettings(new string[1] { ((IWMICommon)allocationSettingData1).Object.GetText(TextFormat.WmiDtd20) }).ForEach <IResourceAllocationSettingData>((Action <IResourceAllocationSettingData>)(v => v.Dispose())); } } } } } } }
protected void AddNicToVm(IVm vm, VirtualNicType nicType, string vswitchName, NicConnectionStatus nicStatus, string nicGuid, int VLan) { using (IVirtualSystemManagementService managmentService = VirtualSystemManagementService.GetVirtualSystemManagmentService(this._Host)) { using (IVirtualEthernetSwitch virtualEthernetSwitch = VirtualEthernetSwitch.Query(this._Host, "ElementName='{0}'", (object)vswitchName).FirstOrDefault <IVirtualEthernetSwitch>()) { if (virtualEthernetSwitch == null) { throw new HyperVException("Virtual Ethernet switch '" + vswitchName + "' not found"); } using (IVirtualSystemSettingData systemSettingData = ((IVmInternals)vm).ComputerSystem.GetVirtualSystemSettingData()) { ICommonEthernetPortSettingData ethernetPortSettingData; if (nicType != VirtualNicType.Legacy) { if (nicType != VirtualNicType.Synthetic) { throw new HyperVException("I don't know about the nic type " + nicType.ToString()); } ethernetPortSettingData = (ICommonEthernetPortSettingData)SyntheticEthernetPortSettingData.GetDefaultSyntheticAdapter(this._Host); ((ISyntheticEthernetPortSettingData)ethernetPortSettingData).VirtualSystemIdentifiers = new string[1] { nicGuid }; ethernetPortSettingData.ElementName = "Synthetic Network Adapter"; } else { ethernetPortSettingData = (ICommonEthernetPortSettingData)EmulatedEthernetPortSettingData.GetDefaultLegacyAdapter(this._Host); ethernetPortSettingData.ElementName = "Legacy Network Adapter"; } using (ethernetPortSettingData) { ethernetPortSettingData.StaticMacAddress = false; using (IResourceAllocationSettingData allocationSettingData1 = managmentService.AddResourceSettings(systemSettingData, new string[1] { ((IWMICommon)ethernetPortSettingData).Object.GetText(TextFormat.WmiDtd20) }).FirstOrDefault <IResourceAllocationSettingData>()) { if (nicStatus != NicConnectionStatus.Connected) { return; } using (IEthernetPortAllocationSettingData allocationSettingData2 = EthernetPortAllocationSettingData.GetDefaultEthernetPortAllocationSettingData(this._Host)) { using (IVirtualSwitch virtualSwitchByName = this.GetVirtualSwitchByName(vswitchName)) { Invariant.ArgumentNotNull((object)allocationSettingData2, "Switch port not found"); Invariant.ArgumentNotNull((object)virtualSwitchByName, "Virtual switch '" + vswitchName + "' not found"); allocationSettingData2.Parent = ((IWMICommon)allocationSettingData1).Object.Path.Path; allocationSettingData2.HostResource = new string[1] { virtualSwitchByName.Object.Path.Path }; managmentService.AddResourceSettings(systemSettingData, new string[1] { ((IWMICommon)allocationSettingData2).Object.GetText(TextFormat.WmiDtd20) }).FirstOrDefault <IResourceAllocationSettingData>().TryDispose(); } } } } } } } }