/// <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
            }
        }
Example #2
0
        /// <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));
        }
Example #3
0
        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
                       ));
        }
Example #4
0
        /// <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);
        }