예제 #1
0
        public EthernetFrame RandomEthernetFrame(SwitchEngine switchEngine)
        {
            Random rand = new Random();

            var ethernetHostsShuffeld = new List <EthernetHost>(EthernetHosts.ToArray <EthernetHost>());

            ethernetHostsShuffeld.Shuffle();
            var sourceHost        = ethernetHostsShuffeld[0];
            var possibleDestHosts = EthernetHosts.Where(e => e.vlan == sourceHost.vlan && e != sourceHost).ToList();

            possibleDestHosts.Shuffle();
            var destHost = possibleDestHosts[0];

            //sourceHost.vlan

            int?vlan = null;

            if (sourceHost.AttachedToPort.IsVlanTagged(sourceHost.vlan))
            {
                vlan = sourceHost.vlan;
            }

            return(new EthernetFrame(sourceHost, destHost.MAC,
                                     vlan,
                                     ContentsToUse[rand.Next(ContentsToUse.Count())]));
        }
예제 #2
0
        public static void RandomizeSwitchPortsVlan(SwitchEngine switchEngine)
        {
            int        numOfUntaggedPorts = switchEngine.Count - 3;
            List <int> vlansNum           = new List <int>();
            var        rand = new Random();

            for (int i = 1; i < (numOfUntaggedPorts * 3); i += 3)
            {
                vlansNum.Add(rand.Next(i, i + 3) * 10);
            }

            var freePorts = new List <SwitchPort>();

            switchEngine.ToList().ForEach(i => freePorts.Add(i));

            freePorts.Shuffle();
            var a = 0;

            foreach (var n in vlansNum)
            {
                freePorts[a].Untagged.Clear();
                freePorts[a].Untagged.Add(n);
                a++;
            }
            var b = 0;

            foreach (var n in vlansNum)
            {
                freePorts[a].Untagged.Clear();
                freePorts[a].Untagged.Add(n);
                a++;
                b++;
                if (b == 2)
                {
                    break;
                }
            }
            freePorts[switchEngine.Count - 2].Untagged.Clear();
            freePorts[switchEngine.Count - 2].Tagged.Clear();
            foreach (var n in vlansNum)
            {
                freePorts[switchEngine.Count - 2].Tagged.Add(n);
            }
            b = 0;
            freePorts[switchEngine.Count - 1].Untagged.Clear();
            freePorts[switchEngine.Count - 1].Untagged.Add(vlansNum[0]);
            foreach (var n in vlansNum)
            {
                if (vlansNum[0] != n)
                {
                    freePorts[switchEngine.Count - 1].Tagged.Add(n);
                }
                b++;
                if (b == 2)
                {
                    break;
                }
            }
        }
예제 #3
0
        public MainWindow(InstanceSettings settings)
        {
            InitializeComponent();

            switchEngine = new SwitchEngine(6);
            if (settings.UseVLAN)
            {
                GameEngine.RandomizeSwitchPortsVlan(switchEngine);
            }
            gameEngine = new GameEngine(switchEngine);

            switchEngine[0].AttachToGrid(mainGrid, 10, 10, settings.UseVLAN);
            switchEngine[1].AttachToGrid(mainGrid, 10, 180, settings.UseVLAN);
            switchEngine[2].AttachToGrid(mainGrid, 10, 350, settings.UseVLAN);
            switchEngine[3].AttachToGrid(mainGrid, 600, 10, settings.UseVLAN);
            switchEngine[4].AttachToGrid(mainGrid, 600, 180, settings.UseVLAN);
            switchEngine[5].AttachToGrid(mainGrid, 600, 350, settings.UseVLAN);

            this.Title += $" {Assembly.GetEntryAssembly().GetName().Version}";
        }
예제 #4
0
 public GameEngine(SwitchEngine switchEngine /*, InstanceSettings instanceSettings*/)
 {
     SwitchEngine = switchEngine;
     //InstanceSettings = instanceSettings;
     this.PopuplateEthernetHosts();
 }