SokolovS Опубликовано 9 апреля, 2010 (изменено) · Жалоба Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети. Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Изменено 9 апреля, 2010 пользователем SokolovS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Koka Опубликовано 9 апреля, 2010 · Жалоба Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Дальше считаешь сколько маков на каждой железке. Исходишь из того что что на конечных железках будет меньше маков чем на корневых. Берешь любой мак и удаляешь его(в смысле из базы) с тех свитчей на которых количество маков больше чем на выбранном ну и т.д. Поподробнее попозже попробую изложить Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 9 апреля, 2010 · Жалоба Исходишь из того что что на конечных железках будет меньше маков чем на корневых. Это условие не всегда верное, т.к. на аплинке могут висеть маки с соседних веток. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Koka Опубликовано 9 апреля, 2010 · Жалоба Исходишь из того что что на конечных железках будет меньше маков чем на корневых.Это условие не всегда верное, т.к. на аплинке могут висеть маки с соседних веток. Откиньте все аплинки(если в порту видим мак шлюза то он аплинк) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 11 апреля, 2010 · Жалоба Т.е. общее количество маков минус кол-во маков на аплинке, это брать за критейрий удаленности от центра. Так? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 11 апреля, 2010 · Жалоба А колец(или случайных петель) у вас типа нет? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
wtyd Опубликовано 11 апреля, 2010 · Жалоба Есть база FDB по всей сети, в виде id-железки, ip-железки, mac, unit, port. Т.е. в базе есть все маки со всех коммутаторов в сети.Вобщем то задача построить по этим данным дерево. Понятно что нужно выбрать корневую точку (id-железки), ну или любую начальную точку. Так же понятно что нужно выбрать какой-то MAC который у всех висит на аплинке, для того чтобы выцепить номер порта на аплинке. Дальше пока не понятно. Возможно кто-то уже подобную задачу решал, расскажите варианты решения. Я уже нашел 2 варианта, но пока оба не очень быстрые. Один из них, самый оптимальный пока, это перебирать все маки с порта и смотреть какой из них не входят в собственную FDB таблицу. Скажите, а зачем это надо ? Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Koka Опубликовано 11 апреля, 2010 · Жалоба А колец(или случайных петель) у вас типа нет?Нет Скажите, а зачем это надо ?Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто. 2 SokolovS 1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip) 2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком) 3. считаем количество маков на свитче не учитывая аплинков и заносим в базу 4. удаляем с аплинков лишние маки 5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном 6. в конце базе останется ip - port - 1 мак след. устройсва 7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz А вообще извращение это =))) Есть же замечательный протокол LLDP, куда проще и точнее Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
6PATyCb Опубликовано 12 апреля, 2010 · Жалоба А тебе ее именно рисовать надо или просто вычислять с какого коммутатора и через какие все идет? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 12 апреля, 2010 · Жалоба Скажите, а зачем это надо ? Просто давным давно, лет 7-8 назад, когда я был молодым и глупым, я тоже захотел прописать на всех коммутаторах все маки статически. Это было связано не только с безопасностью, ещё с другими проблемами, про которые долго рассказывать. Я даже написал программу на перле с интерактивным пользовательским интерфейсом на псевдографике, цветную :-). программа составляла FDB для всех коммутаторов сети, т.е. в базку заносились мутаторы, их топология (какой от которогоподключен) и маки абонов. На выходе получались команды для занесения на мутаторы. Как же хорошо, что хватило мозгов не применить это на практике ... зато на перле писать потренировался :-). Прогу ту я потерял. Мне нужна просто топология, не более :) Никакой статики в FDB мне не нужно! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 12 апреля, 2010 · Жалоба А колец(или случайных петель) у вас типа нет?Нет Скажите, а зачем это надо ?Как я понял Человек хочет построить дерево коммутаторов, что за чем идет и куда воткнуто. 2 SokolovS 1. Снимаем все маки со всех свитчей(получаем базу ip - port - маки за портом, для удобства маки преобразовать в ip) 2. находим аплинки и помечаем их (если в порту вижу мак шлюза считаю его аплинком) 3. считаем количество маков на свитче не учитывая аплинков и заносим в базу 4. удаляем с аплинков лишние маки 5. перебираешь все маки из базы и удаляешь этот мак с тех свитчей где он встречается И на которых количество маков больше чем на выбранном 6. в конце базе останется ip - port - 1 мак след. устройсва 7. Группируем по адресам и наносим на ГИС, по конкретному адресу прорисовываем в graphviz А вообще извращение это =))) Есть же замечательный протокол LLDP, куда проще и точнее Ок. Спс, попробую по данному алгоритму.LLDP конечно клево, но не универсально, BRIDGE-MIB поддерживает любой мало-мальски управляемый L2, а вот LLDP есть далеко не везде, к тому же, какой плюс в нем если снимать данные нужно все равно по SNMP. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 15 апреля, 2010 (изменено) · Жалоба Все получилось, алгоритм я немного оптимизировал. После того как я нашел все другие коммутаторы на которых встречается искомый МАК и откинул те, на которых он висит на аплинке, остаются только его прямые соседи, т.е. все те у кого он на даунлинке. Чтобы упорядочить использую простейший запрос: SELECT COUNT(DISTINCT mac) AS prio FROM global_fdb WHERE mac IN ('neighbor_mac1', 'neighbor_mac2', 'neighbor_mac3'); Получаемое в результате запроса значение и есть приоритет для построения пути. Вторая фишка в том что не нужно забивать в конфиги маки шлюзов для поиска аплинков, можно забивать IP или ID. Сами маки можно взять из той же FDB, только в состоянии SELF а не LEARN. Это облегчает поддержку, когда на шлюз добавляются новые сегменты. Спс за подсказки! Изменено 15 апреля, 2010 пользователем SokolovS Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...