Beispiel #1
0
        private static void RegisterOnu(OLT olt, Protocol protocol)
        {
            // создать новое телнет подключение в зависиости от заданой ОЛТ
            TelnetConnection tc = Connect(olt);

            // залогиниться и показать ответ сервера
            Console.Write(tc.Login(login, password, timeout));
            Console.Write(tc.Read());

            var output = ShowUncfgONU(tc);

            if (output != null)
            {
                ParseOutput(output, tc, olt, protocol);
                if (slotNumber != 0)
                {
                    SetVlan(olt, protocol);
                    ConfigureOnuProfile(tc);
                    ConfigureOpticalPort(tc, protocol);
                    ConfigureEthernetPort(tc);
                    CheckConfiguration(tc);
                }
            }
            Console.ReadKey(true);
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            string login;  // переменная для логина
            string input;  // переменная дял клиентского ввода
            string output; // переменная дял данных получаемых с сервера
            string sn;     // переменная для серийного номера ONU
            string gponInfo;

            int oltNumber   = 0;    // номер олт
            int shelfNumber = 0;    // номер платы на олт
            int ponNumber   = 0;    // номер пона на олт интерфейсе
            int onuNumber   = 0;    // номер слота для ону на поне
            int vlan        = 1000; // vlan по умолчанию

            // Создание нового телнет соеденения по адресу "10.10.110.115" на порту номер "23"
            TelnetConnection tc = new TelnetConnection("10.10.110.115", 23);

            // залогиниться используя логин "admin", пароль "admin", с таймаутом в 100 мс
            // и показать ответ сервера
            login = tc.Login("admin", "admin", 300);
            Console.Write(login);
            Console.Write(tc.Read());

            // показаь незарегистрированые ONU
            tc.WriteLine("show gpon onu uncfg");

            // условие при котором ONU не надо регистрировать
            output = tc.Read();
            if (output.Contains("No related information to show"))
            {
                Console.WriteLine("There are nothing to configure now!");
                Console.ReadKey(true);
            }
            else
            {
                // ловим отупут сервера и парсим только инфомрацию о местонахождении ONU и ее серийный номер
                String[] parseOutput = output.Split(new char[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries);
                gponInfo = parseOutput[7]; // номер олт, платы, пона слота дял ону
                sn       = parseOutput[8]; // серийный номер ону

                Console.WriteLine(gponInfo);

                // парсим информацию об ONU на номер олт, платы, пона в отдельности
                String[] parseGponInfo = gponInfo.Split(new char[] { '/', '_', ':' }, StringSplitOptions.RemoveEmptyEntries);
                // приводим String к int

                oltNumber   = Int32.Parse(parseGponInfo[1]); // номера олт в числовом формате
                shelfNumber = Int32.Parse(parseGponInfo[2]); // номера платы в числовом формате
                ponNumber   = Int32.Parse(parseGponInfo[3]); // номер пона в числовом формате

                tc.WriteLine("terminal length 0");           // снимаем ограничение на ввода для терминала

                String showGponOnuState = "show gpon onu state gpon-olt_" + oltNumber + "/"
                                          + shelfNumber + "/" + ponNumber;
                String gponOnu = "gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber;

                tc.WriteLine(showGponOnuState); // получаем информацию о кол-ве ону и о налчиии свободных слотов на поне
                output = tc.Read();
                // Console.Write(output);

                // выбираем из всего вывода только занятых номера слотов на поне
                MatchCollection match = Regex.Matches(output, @":(\d+)");
                // обьявляем временные переменные которые помогут нам осуществить преобразование типов
                String delta = "";
                int    num   = 0;
                // создаем лист который будет содержать в себе информацию о занятых слотах на поне
                var slotList = new List <int>();

                // выбираем необходимые данные согласно регулярному выржанию заданному выше,
                // записвыаем каждый занятый слот на поне как отдельный елемент списка
                // int test = 0;
                foreach (Match m in match)
                {
                    delta += m.Groups[1];
                    num    = Int32.Parse(delta);
                    slotList.Add(num);
                    delta = "";
                    num   = 0;

                    // Console.WriteLine(slotList[test]);
                    // test++;
                }

                // создаем лист для записи свободных слотов на поне
                var  freeSlotList = new List <int>();
                bool freeSlotFlag = false;

                // перебираем лист со всеми отображаемые слотами
                for (int i = 0; i < slotList.Count; i++)
                {
                    // создаем вспомгательную переменную для записи разницы между проверяемым занятым  слотом и последующим занятым слотом
                    int temp = 0;

                    // првоерка чтобы при записи разницы в переменную temp не выйти за границу листа
                    if (i < slotList.Count - 1)
                    {
                        temp = slotList[i + 1] - slotList[i];
                    }

                    // записываем в лист свободных слотов свободные слоты согласно разницы
                    if (temp > 1)
                    {
                        for (int j = 1; j < temp; j++)
                        {
                            freeSlotList.Add(slotList[i] + j);
                            freeSlotFlag = true;
                        }
                    }
                }
                // если пустых слотово нет записываем onuNumber следующий после последнего если он меньеше 128
                if (freeSlotFlag == false)
                {
                    if (slotList.Count + 1 < 128)
                    {
                        onuNumber = slotList.Count + 1;
                    }
                    // если следующий равен 128 то предупреждаем об этом
                    else if (slotList.Count + 1 == 128)
                    {
                        onuNumber = slotList.Count + 1;
                        Console.WriteLine("Warning! This is the last slot on PON!");
                    }
                    // если следующий больше 128 сворачиваем регистрацию и сообщаем об этом
                    else
                    {
                        Console.WriteLine("Alert! This PON is full!");
                        tc.WriteLine("exit");
                    }
                }
                // записываем пустой слот в onuNumber
                else if (freeSlotFlag == true)
                {
                    onuNumber = freeSlotList[0];
                }

                /*
                 * for (int i = 0; i < freeSlotList.Count; i++) {
                 *   Console.WriteLine(freeSlotList[i]);
                 * }*/

                vlan = 1000 + (ponNumber * (shelfNumber - 1));
                Console.WriteLine(onuNumber);
                Console.WriteLine(oltNumber);
                Console.WriteLine(shelfNumber);
                Console.WriteLine(ponNumber);
                Console.WriteLine(vlan);

                // влючаем configure terminal
                tc.WriteLine("Configure terminal");
                Console.Write(tc.Read());


                // заходим на необходимый интерфейс
                tc.WriteLine("interface gpon-olt_" + oltNumber + "/" + shelfNumber + "/" + ponNumber);
                tc.WriteLine("onu " + onuNumber + " type universal sn " + sn); // регистририуем ону на слоте как универсальную
                Console.Write(tc.Read());

                // ставим скорость до 500 мб
                tc.WriteLine("onu " + onuNumber + " profile line 500m");
                Console.Write(tc.Read());

                // ставим профель по стандарту
                tc.WriteLine("onu " + onuNumber + " profile remote standart");
                Console.Write(tc.Read());

                tc.WriteLine("exit");
                Console.Write(tc.Read());

                // Настройка оптичиеского порта

                // заходим на оптический порт
                tc.WriteLine("interface gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber + ":" + onuNumber);
                Console.Write(tc.Read());

                //настраиваем влан на оптический порт
                tc.WriteLine("switchport vlan " + vlan + " tag");
                Console.Write(tc.Read());

                tc.WriteLine("exit");
                Console.Write(tc.Read());

                // Настройка ethernet порта

                // заходим на ethernet порт
                tc.WriteLine("pon-onu-mng gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber + ":" + onuNumber);
                Console.Write(tc.Read());

                // настраиваем  влан на ethernet порт
                tc.WriteLine("vlan port eth_0/1 mode tag vlan " + vlan);
                Console.Write(tc.Read());

                tc.WriteLine("exit");
                Console.Write(tc.Read());

                // првоеряем ли все настроено как надо
                tc.WriteLine("show running-config interface gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber + ":" + onuNumber);
                Console.Write(tc.Read());

                Console.ReadKey(true);
            }
        }