public void Listener()
        {
            Task.Run(async() =>
            {
                using var updClient = udp;
                while (true)
                {
                    var result = await updClient.ReceiveAsync();
                    try
                    {
                        byte[] resultBytes = result.Buffer;
                        Package package    = Package.fromBytes(resultBytes);
                        if (package.isManagementMessage())
                        {
                            ManagementMessage message = Package.ReceiveManagementMessage(package);

                            if (message.isRoutingTableRequest())
                            {
                                Logs.LogsReceiveRoutingTableRequest(message);
                                String routeTable       = gtJSONAnswer(message);
                                ManagementAnswer answer = ManagementAnswer.RouterAnswer(routeTable);
                                byte[] package1         = Package.RoutingTables(answer).toBytes();
                                Logs.LogsSendRoutingTable(message);
                                udp.Send(package1, package1.Length, message.getRequesterEndPoint());
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Logs.LogsManagementException(e);
                    }
                }
            });
        }
Example #2
0
        public static Dictionary <int, NHLFE.NHFLERow> setRoutingTables(ManagementAnswer answer)
        {
            Dictionary <int, NHLFE.NHFLERow> ComutationList = new Dictionary <int, NHLFE.NHFLERow>();

            String jsonFile = answer.answer;

            NHLFE.NHFLETableModel TableModel = JsonSerializer.Deserialize <NHLFE.NHFLETableModel>(jsonFile);
            ComutationList = new Dictionary <int, NHLFE.NHFLERow>();

            try
            {
                foreach (NHLFE.NHFLEEntry element in TableModel.NHLFEEntries)
                {
                    ComutationList.Add(element.id, new NHLFE.NHFLERow(element.port_in, element.label_in, element.port_out, element.label_out, element.StackPtr, element.method, element.next_id));
                }
            }
            catch (Exception e)
            { Console.WriteLine(e); }

            return(ComutationList);
        }
Example #3
0
        public void listener()
        {
            Task.Run(async() =>
            {
                using (var updClient = udp)
                {
                    while (true)
                    {
                        var result      = await updClient.ReceiveAsync();
                        Package package = Package.fromBytes(result.Buffer);

                        if (package.isRoutingCommunication() && nhfletable_set == false)
                        {
                            ManagementAnswer answer1 = Package.ReceiveRoutingTables(package);

                            ComutationList = NHLFE.setRoutingTables(answer1);
                            nhfletable_set = true;
                            Logs.LogsReceiveRoutingTable(Name);
                        }

                        if (package.isMPLS())
                        {
                            if (nhfletable_set)
                            {
                                MPLSPackage MPLSpackage = Package.ReceiveMPLSPackage(package);
                                Console.WriteLine($"otrzymany TTL: {MPLSpackage.GetTTL()}");
                                MPLSpackage.decrementTTL();
                                if (MPLSpackage.GetTTL() > 0)
                                {
                                    Logs.LogsRouterReceivePackage(MPLSpackage, Name);
                                    var InPort = MPLSpackage.GetPort();
                                    int label  = MPLSpackage.GetLastLabel();
                                    int row_id = get_nhfle_row_id(InPort, label);
                                    if (row_id > -1)
                                    {
                                        switch (ComutationList[row_id].method)
                                        {
                                        case "swap":
                                            MPLSpackage.swap(ComutationList[row_id].label_out, ComutationList[row_id].port_out);
                                            break;

                                        case "push":
                                            push(ComutationList[row_id], MPLSpackage);
                                            break;

                                        case "pop":
                                            pop(ComutationList[row_id], MPLSpackage);
                                            break;
                                        }
                                        Console.WriteLine($"wysyƂany TTL: {MPLSpackage.GetTTL()}");
                                        Package package1 = Package.MPLSPackage_(MPLSpackage);
                                        Logs.LogsRouterSendPackage(MPLSpackage, Name);
                                        udp.Send(package1.toBytes(), package1.toBytes().Length, CableCloudEndPoint);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Podana etykieta jest niepoprawna");
                                    }

                                    //Thread.Sleep(1000);
                                }
                            }
                        }
                        else if (package.isTerminateOrder())
                        {
                            Environment.Exit(0);
                        }
                    }
                }
            });
        }