private static TelnetConnection Connect(OLT olt) { TelnetConnection tc = null; if (olt == OLT.Kotliarskia) { tc = new TelnetConnection(kotlIP, port); } else if (olt == OLT.Zavodskia) { tc = new TelnetConnection(zavIP, port); } return(tc); }
private static void ConfigureEthernetPort(TelnetConnection tc) { Console.WriteLine("Configure Ethernet Port!"); // заходим на ethernet порт tc.WriteLine("pon-onu-mng gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber + ":" + slotNumber); 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()); }
/// <summary> /// Возвращает данные он незагистрированных ONU елси они есть /// </summary> /// <param name="tc"></param> /// <returns></returns> private static string ShowUncfgONU(TelnetConnection tc) { // показаь незарегистрированые ONU tc.WriteLine("show gpon onu uncfg"); // условие при котором ONU не надо регистрировать var output = tc.Read(); if (output.Contains("No related information to show")) { Console.WriteLine("There are nothing to configure now!"); Console.ReadKey(true); return(null); } return(output); }
private static void ConfigureOpticalPort(TelnetConnection tc, Protocol protocol) { Console.WriteLine("Configure Optical Port!"); // заходим на оптический порт tc.WriteLine("interface gpon-onu_" + oltNumber + "/" + shelfNumber + "/" + ponNumber + ":" + slotNumber); Console.Write(tc.Read()); //настраиваем влан на оптический порт if (protocol == Protocol.PPPoE) { tc.WriteLine("service-port 1 user-vlan " + vlan + " vlan " + vlan); } else if (protocol == Protocol.IPoE) { tc.WriteLine("service-port 1 user-vlan " + vlan + " svlan " + svlan); } Console.Write(tc.Read()); tc.WriteLine("exit"); Console.Write(tc.Read()); }
private static void ParseOutput(string output, TelnetConnection tc, OLT olt, Protocol protocol) { if (output != null) { // ловим отупут сервера и парсим только инфомрацию о местонахождении ONU и ее серийный номер var parseOutput = output.Split(new char[] { ' ', '-' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < parseOutput.Length; i++) { if (parseOutput[i].StartsWith("onu_")) { gponInfo = parseOutput[i]; // номер олт, платы, пона слота дял ону } // серийный номер ону if (parseOutput[i].StartsWith("ZTEGC") || parseOutput[i].StartsWith("MONU") || parseOutput[i].StartsWith("GPON")) { sn = parseOutput[i]; } } Console.WriteLine(gponInfo); // парсим информацию об ONU на номер олт, платы, пона в отдельности var 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"); // снимаем ограничение на ввода для терминала var showGponOnuState = "show gpon onu state gpon-olt_" + oltNumber + "/" + shelfNumber + "/" + ponNumber; tc.WriteLine(showGponOnuState); // получаем информацию о кол-ве ону и о налчиии свободных слотов на поне output = tc.Read(); Console.Write(output); //Console.Write(tc.Read()); Console.WriteLine("Введiть номер слота на який треба зареєструвати ОНУ:"); slotNumber = Convert.ToInt32(Console.ReadLine()); if (protocol == Protocol.IPoE) { if (slotNumber > 128 || slotNumber < 1) { Console.WriteLine("Діапазон IPoE: 1 - 128 слоти, ви вибрали " + slotNumber + ". Спробуйте ще раз."); slotNumber = 0; } } if (slotNumber != 0) { Console.Write("Номер ОЛТ: "); Console.Write(oltNumber); Console.WriteLine(); Console.Write("Номер плати: "); Console.Write(shelfNumber); Console.WriteLine(); Console.Write("Номер пону: "); Console.Write(ponNumber); Console.WriteLine(); Console.Write("Номер онушки: "); Console.Write(slotNumber); Console.WriteLine(); } } }
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); } }