/// <summary> /// Gets the vlan details from the switch ignoring the VLANs with no IP Addresses. /// </summary> /// <param name="activityData">a<see cref="IPConfigurationActivityData"/></param> private static void GetVlanDetails(ref NetworkNamingServiceActivityData activityData) { activityData.VirtualLanDetails.Clear(); try { NetworkNamingServiceActivityData activity = activityData; INetworkSwitch networkSwitch = SwitchFactory.Create(IPAddress.Parse(activityData.SwitchIpAddress)); // Fetch the vlan details for primary DHCP Server, second DHCP Server and Linux Server List <VirtualLAN> vlans = networkSwitch.GetAvailableVirtualLans().Where (item => (null != item.IPAddress) && (!string.IsNullOrEmpty(activity.LinuxServerIPAddress) && item.IPAddress.IsInSameSubnet(IPAddress.Parse(activity.LinuxServerIPAddress)) || !string.IsNullOrEmpty(activity.SecondDhcpServerIPAddress) && item.IPAddress.IsInSameSubnet(IPAddress.Parse(activity.SecondDhcpServerIPAddress)) || !string.IsNullOrEmpty(activity.PrimaryDhcpServerIPAddress) && item.IPAddress.IsInSameSubnet(IPAddress.Parse(activity.PrimaryDhcpServerIPAddress)))).ToList(); foreach (VirtualLAN vlan in vlans) { activityData.VirtualLanDetails.Add(vlan.Identifier, vlan.IPAddress.ToString()); } } catch (FormatException) { // Do nothing } catch (Exception) { // Do Nothing } }
/// <summary> /// Configure the switch with the radius server details /// </summary> /// <param name="activityData"><see cref="DotOneXActivityData"/></param> /// <returns>True for successfull configuration, else false.</returns> private static bool ConfigureSwitch(DotOneXActivityData activityData) { INetworkSwitch networkSwitch = SwitchFactory.Create(IPAddress.Parse(activityData.SwitchIp)); networkSwitch.DeConfigureAllRadiusServer(); return(networkSwitch.ConfigureRadiusServer(IPAddress.Parse(activityData.RadiusServerIp), activityData.SharedSecret)); }
private static Task StartProgram(long[] program, long address, INetworkSwitch network) { return(Task.Factory.StartNew( action: () => { var writeQueue = new Queue <long>(); var readQueue = new Queue <long>(); readQueue.Enqueue(address); Console.WriteLine($"Starting: Address={address}"); IntcodeMachine.RunProgram( program: program, write: v => { writeQueue.Enqueue(v); if (writeQueue.Count >= 3) { var target = writeQueue.Dequeue(); var packet = (writeQueue.Dequeue(), writeQueue.Dequeue()); Console.WriteLine($"Sending {packet} to {target}"); network.Send(address, target, packet); } }, input: () => { if (readQueue.Count == 0) { var packet = network.Receive(address); if (packet.HasValue) { Console.WriteLine($"Received {packet} for {address}"); readQueue.Enqueue(packet.Value.x); readQueue.Enqueue(packet.Value.y); } } if (readQueue.Count > 0) { return readQueue.Dequeue(); } else { return -1; } }); }, creationOptions: TaskCreationOptions.LongRunning )); }
/// <summary> /// Initialize an <see cref=" INetworkSwitch"/> object /// </summary> /// <param name="address">IP Address of the Switch</param> /// <returns>Initializes a new instance of <see cref="INetworkSwitch"/> object</returns> public static INetworkSwitch Create(IPAddress address) { SwitchType switchType = GetSwitchType(address); INetworkSwitch networkSwitch = null; switch (switchType) { case SwitchType.HPProCurve: Logger.LogDebug("HP ProCurve Switch instance is created with IP {0}".FormatWith(address.ToString())); networkSwitch = new HPProCurveSwitch(address); break; case SwitchType.Cisco: Logger.LogInfo("Cisco Network Switch is not implemented"); break; case SwitchType.None: Logger.LogInfo("Network Switch manufacturer can't be identified or it is not implemented"); break; } return(networkSwitch); }