예제 #1
0
        private static void startReadingCommands(NetworkNode node)
        {
            while (true)
            {
                Console.WriteLine("Oczekiwanie na polecenie");
                Console.WriteLine("R - kanał rozmówny rsoh");
                Console.WriteLine("M - kanał rozmówny msoh");

                string command = Console.ReadLine();

                if (command.Equals("R"))
                {
                    string args = takeArgs();
                    node.AddRsohContent(args);

                }
                else if (command.Equals("M"))
                {
                    string args = takeArgs();
                    node.AddMsohContent(args);
                }
                else
                {
                    Console.WriteLine("Nie odnaleziono polecenia");
                    continue;
                }
            }
        }
예제 #2
0
        private static void startReadingCommands(NetworkNode node)
        {
            while (true)
            {
                Console.WriteLine("Oczekiwanie na polecenie");
                Console.WriteLine("R - kanał rozmówny rsoh");
                Console.WriteLine("M - kanał rozmówny msoh");

                string command = Console.ReadLine();

                if (command.Equals("R"))
                {
                    string args = takeArgs();
                    node.AddRsohContent(args);
                }
                else if (command.Equals("M"))
                {
                    string args = takeArgs();
                    node.AddMsohContent(args);
                }
                else
                {
                    Console.WriteLine("Nie odnaleziono polecenia");
                    continue;
                }
            }
        }
예제 #3
0
        public NetworkNode configureNode()
        {
            List <NodeInput>  ports          = new List <NodeInput>();
            string            nodeName       = null;
            string            nodeType       = null;
            ManagementPort    managementPort = null;
            NetworkNodeSender sender         = null;

            while (configReader.Read())
            {
                if (configReader.IsStartElement())
                {
                    if (configReader.NodeType == XmlNodeType.Element)
                    {
                        if (configReader.Name == "port")
                        {
                            int    portNumber = int.Parse(configReader.GetAttribute("local"));
                            int    tcp        = int.Parse(configReader.GetAttribute("tcp"));
                            string stm        = configReader.GetAttribute("stm");

                            ports.Add(new NodeInput(tcp, portNumber, StmLevelExt.GetContainer(stm)));
                        }
                        else if (configReader.Name == "cloud-server")
                        {
                            int tcp = int.Parse(configReader.GetAttribute("tcp"));
                            sender = new NetworkNodeSender(tcp);
                        }
                        else if (configReader.Name == "managment-port")
                        {
                            int portNumber = int.Parse(configReader.GetAttribute("number"));
                            managementPort = new ManagementPort(portNumber);
                        }
                        else if (configReader.Name == "node" && configReader.IsStartElement())
                        {
                            nodeName = configReader.GetAttribute("name");
                            nodeType = configReader.GetAttribute("type");
                        }
                    }
                }
            }

            SynchronousPhysicalInterface spi = new SynchronousPhysicalInterface(ports, sender, nodeName);
            TransportTerminalFunction    ttf = new TransportTerminalFunction(spi, getMode(nodeType));
            HigherOrderPathConnection    hpc = new HigherOrderPathConnection(ttf);
            NetworkNode node = new NetworkNode(hpc, ttf, nodeName);

            ManagementCenter managementCenter = new ManagementCenter(managementPort, node);

            managementPort.SetManagementCenter(managementCenter);
            managementPort.StartListening();
            foreach (NodeInput input in ports)
            {
                input.SetUpServer(10000, 10);
                input.StartListening();
            }

            return(node);
        }
        public NetworkNode configureNode()
        {
            List<NodeInput> ports = new List<NodeInput>();
            string nodeName = null;
            string nodeType = null;
            ManagementPort managementPort = null;
            NetworkNodeSender sender = null;
            while (configReader.Read())
            {
                if (configReader.IsStartElement())
                {
                    if (configReader.NodeType == XmlNodeType.Element)
                    {
                        if (configReader.Name == "port")
                        {
                            int portNumber = int.Parse(configReader.GetAttribute("local"));
                            int tcp = int.Parse(configReader.GetAttribute("tcp"));
                            string stm = configReader.GetAttribute("stm");

                            ports.Add(new NodeInput(tcp, portNumber, StmLevelExt.GetContainer(stm)));
                        }
                        else if (configReader.Name == "cloud-server")
                        {
                            int tcp = int.Parse(configReader.GetAttribute("tcp"));
                            sender = new NetworkNodeSender(tcp);
                        }
                        else if (configReader.Name == "managment-port")
                        {
                            int portNumber = int.Parse(configReader.GetAttribute("number"));
                            managementPort = new ManagementPort(portNumber);
                        }
                        else if (configReader.Name == "node" && configReader.IsStartElement())
                        {
                            nodeName = configReader.GetAttribute("name");
                            nodeType = configReader.GetAttribute("type");
                        }
                    }

                }
            }

            SynchronousPhysicalInterface spi = new SynchronousPhysicalInterface(ports, sender, nodeName);
            TransportTerminalFunction ttf = new TransportTerminalFunction(spi, getMode(nodeType));
            HigherOrderPathConnection hpc = new HigherOrderPathConnection(ttf);
            NetworkNode node = new NetworkNode(hpc, ttf, nodeName);

            ManagementCenter managementCenter = new ManagementCenter(managementPort,node);
            managementPort.SetManagementCenter(managementCenter);
            managementPort.StartListening();
            foreach (NodeInput input in ports)
            {
                input.SetUpServer(10000, 10);
                input.StartListening();
            }

            return node;
        }
예제 #5
0
        static void Main(string[] args)
        {
            String id = args[0];
            NetworkNodeSetupProcess setUpProcess = new NetworkNodeSetupProcess("..\\..\\..\\Configs\\NetworkNode\\nodeConfig" + id + ".xml");
            NetworkNode             node         = setUpProcess.startNodeProcess();

            Console.WriteLine("Start emulation");
            startReadingCommands(node);
        }
예제 #6
0
        public void StartConnections(NetworkNode networkNode)
        {
            commutation_field = new ComutationField(port_maps);
            management_agent  = new ManagementAgent(networkNode);
            main_socket.Connect(new IPEndPoint(cloud_addr, cloud_port));


            int[]          arr  = { 0 };
            NetworkMessage init = new NetworkMessage(0, IPAddress.Loopback, 123, IPAddress.Loopback, 123, arr, 80, node_name);

            Send(main_socket, init.GetBytes());

            ListenForMessages();
        }
예제 #7
0
        public void testFindCloudSocketAndPort1()
        {
            //Jakies dane do pakietu
            string    inscription      = "Mam malo wody";
            short     portNumber       = 2;
            IPAddress IP_Source        = IPAddress.Parse("192.168.0.1");
            IPAddress IP_Destination   = IPAddress.Parse("192.168.0.10");
            short     packageNumber    = 5;
            short     frequency        = 2;
            short     band             = 4;
            short     usableInfoLength = (short)inscription.Length;

            //adres socketa z chmury
            short     cloudSocketPort      = 1;
            IPAddress cloudSocketIPAddress = IPAddress.Parse("127.0.10.12");

            //stworzenie nowego pakietu
            Package P = new Package(inscription, portNumber, IP_Destination.ToString(), IP_Source.ToString(),
                                    usableInfoLength, packageNumber, frequency, band);

            //Nowy wpis do tablicy komutacji pakietow, zawierajacy czestotliwosc z powyzszego pakietu
            CommutationTableRow row = new CommutationTableRow(frequency, cloudSocketPort, frequency, portNumber);

            Assert.IsNotNull(row);

            NetworkNode node = new NetworkNode();

            Assert.IsNotNull(node.borderNodeCommutationTable);
            Assert.IsNotNull(node.commutationTable);
            Assert.IsNotNull(node.eonTable);

            //dodanie do tablicy komutacji pakietow wezla sieciowego nowego rzedu
            node.commutationTable.Table.Add(row);

            //wyodrebnienie adresu IP socketa chmury i portu tego socketa
            var tuple = node.determineFrequencyAndPort(P.toBytes());

            //sprawdzenie, czy sie zgadzaja
            Assert.AreEqual(tuple.Item1, frequency);
            Assert.AreEqual(tuple.Item2, portNumber);
        }
예제 #8
0
        /// <summary>
        /// Start function creating new NetworkNode object and then return it to Main.
        /// </summary>
        /// <param name="FilePath"></param>
        /// <returns>NetworkNode</returns>
        public NetworkNode Start(string FilePath)
        {
            NetworkNode nn = new NetworkNode();

            ViewOnScreen("Node is running!");
            try
            {
                config        = NetworkNodeConfiguration.ParseConfiguration(FilePath);
                Console.Title = config.NodeName;

                nn.node_name       = config.NodeName;
                nn.management_port = config.ManagementPort;
                nn.management_addr = config.ManagementAddress;
                nn.cloud_addr      = config.CloudAddress;
                nn.cloud_port      = config.CloudPort;
                nn.port_maps       = config.port_maps;
            }
            catch (FileNotFoundException e)
            {
                ViewOnScreen(e.Message);
            }
            return(nn);
        }
예제 #9
0
        public async static Task Main(string[] args)
        {
            //Create networknode object and read its parameters.
            NetworkNode networkNode = new NetworkNode();

            #region Start by .bat
            try
            {
                await Task.Run(() => networkNode = networkNode.Start(args[0]));

                //await Task.Run(() => networkNode = networkNode.Start($"..\\..\\..\\..\\Configs\\NetworkConfig1.txt"));
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine(e.Message);
            }

            Task.Run(() => networkNode.ReconfigMpls());
            await Task.Run(() => networkNode.StartConnections(networkNode));

            Console.ReadLine();
            #endregion
        }
예제 #10
0
        public NetworkMessage HandleMessage(NetworkMessage message)
        {
            if (message.labels.Count == 0)
            {
                int temp_label = mpls.mplsBorderList.Find(x => x.dst.Equals(message.dst) & x.transport_layer_port == message.transport_layer_port).label;
                if (temp_label == 0)
                {
                    NetworkNode.ViewOnScreen("There is no MPLS tunnel to IP: " + message.dst.ToString());
                    message.labels.Add(temp_label);
                    return(message);
                }
                else
                {
                    message.labels.Add(temp_label);
                    NetworkNode.ViewOnScreen("GAVE MPLS LABEL: " + message.labels[0]);
                }
            }

            while (true)
            {
                //ViewOnScreen("Message: " + message.GetDiagnosticString());
                MplsForwardEntry mpls_entry = mpls.mplsForwardList.Find(x => x.label == message.labels[message.labels.Count - 1] &
                                                                        x.inc_port == message.dst_port &
                                                                        x.last_idx == message.last_idx);
                switch (mpls_entry.op)
                {
                case operation.ADD:
                    message.labels.Add(mpls_entry.out_label);
                    message.src_port = mpls_entry.out_port;
                    message.dst_port = port_maps.Find(x => x.src == message.src_port).dst;
                    NetworkNode.ViewOnScreen("LABEL ADDED: " + mpls_entry.out_label);
                    message.last_idx = mpls_entry.idx;
                    //NetworkNode.ViewOnScreen("ACTUAL LABELS: " + string.Join(" ", message.labels));
                    return(message);

                case operation.SWAP:
                    message.src_port = mpls_entry.out_port;
                    NetworkNode.ViewOnScreen("LABEL SWAP: " + message.labels[message.labels.Count - 1] + " -> " + mpls_entry.out_label);
                    //NetworkNode.ViewOnScreen("ACTUAL LABELS: " + string.Join(" ", message.labels));
                    message.labels[message.labels.Count - 1] = mpls_entry.out_label;
                    message.last_idx = mpls_entry.idx;
                    if (message.src_port != 0)
                    {
                        message.dst_port = port_maps.Find(x => x.src == message.src_port).dst;
                        return(message);
                    }
                    else
                    {
                        break;
                    }

                case operation.POP:
                    NetworkNode.ViewOnScreen("LABBEL POPPED: " + message.labels[message.labels.Count - 1]);
                    //NetworkNode.ViewOnScreen("ACTUAL LABELS: " + string.Join(" ", message.labels));
                    message.labels.RemoveAt(message.labels.Count - 1);
                    message.src_port = mpls_entry.out_port;
                    message.last_idx = mpls_entry.idx;

                    if (message.labels.Count == 0)
                    {
                        MplsBorderEntry mpls_border_entry = mpls.mplsBorderList.Find(x => x.dst.Equals(message.dst));
                        message.src_port = mpls_border_entry.out_port;
                        message.dst_port = port_maps.Find(x => x.src == message.src_port).dst;
                        return(message);
                    }
                    break;
                }
            }
        }
예제 #11
0
        public void CreateConnect(string addressConnectIP, string key, CancellationToken cancellationToken = default(CancellationToken))
        {
            Socket socket        = null;
            Socket listenerAgent = null;
            Socket agentSending  = null;


            try
            {
                byte[] bytes = new Byte[128];



                string numberOfRouter = key.Substring(0, 1);

                //Sklejenie czesci wspolnej klucza dla socketu OUT oraz indeksu
                string settingsString = numberOfRouter + "Agent";

                IPAddress ipAddress =
                    ipAddress = IPAddress.Parse(OperationConfiguration.getSetting(settingsString, mySettings));
                IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

                // Create a TCP/IP socket.
                listenerAgent = new Socket(ipAddress.AddressFamily,
                                           SocketType.Stream, ProtocolType.Tcp);

                if (!listenerAgent.IsBound)
                {
                    //zabindowanie na sokecie punktu koncowego
                    listenerAgent.Bind(localEndPoint);
                    listenerAgent.Listen(100);
                }
                int milliseconds = 100;
                //Nasluchujemy bez przerwy
                while (Last)
                {
                    if (Listening)
                    {
                        //Dodanie socketu do listy socketow OUT
                        agentSending = sS.ConnectToEndPoint(addressConnectIP);


                        Thread.Sleep(milliseconds);

                        SendingNodeIsUpMessage(agentSending, OperationConfiguration.getSetting(settingsString, mySettings), Int16.Parse(numberOfRouter));



                        //oczekiwanie na polaczenie
                        socket = listenerAgent.Accept();

                        SendingKeepAliveMessage(OperationConfiguration.getSetting(settingsString, mySettings), agentSending);

                        Listening = false;

                        /* LingerOption myOpts = new LingerOption(true, 1);
                         * socketClient.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, myOpts);
                         * socketClient.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, false);
                         * socketClient.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);*/

                        Console.WriteLine("Connect on port  " + NetworkNode.takingAddresListenerSocket(socket));
                        byte[] msg;


                        if (socket.Connected)
                        {
                            //Oczekiwanie w petli na przyjscie danych
                            while (true)
                            {
                                string from = string.Empty;
                                //Odebranie tablicy bajtow na obslugiwanym w watku sluchaczu

                                msg = sl.ProcessRecivedBytes3(socket);
                                NMSPackage package       = new NMSPackage();
                                string     usableMessage = NMSPackage.extractUsableMessage(msg, NMSPackage.extractUsableInfoLength(msg));
                                Console.WriteLine(usableMessage);
                                fillingTable(usableMessage, agentSending, settingsString);
                                // Package.extractHowManyPackages(msg);
                                // listByte.Add(msg);

                                //Wykonuje jezeli nadal zestawione jest polaczenie

                                if (msg == null)
                                {
                                    //Rozpoczynamy proces nowego polaczenia

                                    break;
                                }
                            }
                        }
                    }
                    ConsoleKeyInfo cki;
                    while (true)
                    {
                        cki = Console.ReadKey();
                        if (cki.Key == ConsoleKey.Escape)
                        {
                            break;
                        }
                    }
                }
            }
            catch (SocketException se)
            {
                Console.WriteLine($"Socket Exception: {se}");
            }
            finally
            {
                // StopListening();
            }
            if (socket == null)
            {
            }
        }
        public ManagementAgent(NetworkNode _networkNode)
        {
            network_node = _networkNode;

            ConnectManagementSystem();
        }
예제 #13
0
        public static void Main(string[] args)
        {
            NetworkNode nd = new NetworkNode();

            nd.Run();
        }
예제 #14
0
        public void testCheckAvailability()
        {
            //Jakies dane do pakietu
            string    inscription      = "Mam malo wody";
            short     portNumber       = 2;
            IPAddress IP_Source        = IPAddress.Parse("192.168.0.1");
            IPAddress IP_Destination   = IPAddress.Parse("192.168.0.10");
            short     packageNumber    = 5;
            short     frequency        = 2;
            short     band             = 4;
            short     usableInfoLength = (short)inscription.Length;

            //stworzenie nowego pakietu
            Package P = new Package(inscription, portNumber, IP_Destination.ToString(), IP_Source.ToString(),
                                    usableInfoLength, packageNumber, frequency, band);

            //nowy rzad wejsciowy tablicy
            EONTableRowIN rowIn = new EONTableRowIN(frequency, band);

            NetworkNode node = new NetworkNode();

            //Wpisanie w tablice EONową węzła
            node.eonTable.addRow(rowIn);

            //Wartosci powinny byc te same
            Assert.AreEqual(node.eonTable.TableIN[0].busyFrequency, frequency);
            Assert.AreEqual(node.eonTable.TableIN[0].busyBandIN, band);

            //Powinno byc zajete
            Assert.IsFalse(node.eonTable.CheckAvailability(frequency, band, "in"));

            //Powinno byc zajete
            Assert.IsFalse(node.eonTable.CheckAvailability(rowIn));

            //Powinno byc wolne
            Assert.IsTrue(node.eonTable.CheckAvailability(frequency, band, "out"));

            //Powinno sie zazebic troche i zgrzytnac
            Assert.IsFalse(node.eonTable.CheckAvailability(1, 3, "in"));

            //Nie powinny sie pokrywac
            Assert.IsTrue(node.eonTable.CheckAvailability(0, 2, "in"));

            //====================================================================================
            //nowy rzad wyjsciowy tablicy
            EONTableRowOut rowOut = new EONTableRowOut(frequency, band);

            //dodanie rzedu do tablicy
            node.eonTable.addRow(rowOut);

            //Wartosci powinny byc te same
            Assert.AreEqual(node.eonTable.TableOut[0].busyFrequency, rowOut.busyFrequency);
            Assert.AreEqual(node.eonTable.TableOut[0].busyBandOUT, rowOut.busyBandOUT);

            //powinno byc zajete
            Assert.IsFalse(node.eonTable.CheckAvailability(rowOut));

            //Powinno byc zajete
            Assert.IsFalse(node.eonTable.CheckAvailability(frequency, band, "out"));

            //Powinno sie zazebic troche i zgrzytnac
            Assert.IsFalse(node.eonTable.CheckAvailability(1, 3, "out"));

            //Nie powinny sie pokrywac
            Assert.IsTrue(node.eonTable.CheckAvailability(0, 2, "out"));
        }