Мда.Задача очень не тривиальна.По сути как я понимаю нужно придумать алгоритм обхода ориентировано графа с повторами и пропусками.В понедельник пойду штурмовать математиков по дискретке пусть предложат<br> решение :) <br>
<br><div><span class="gmail_quote">24.11.07, <b class="gmail_sendername">Kaltashkin Eugene</b> <<a href="mailto:zhecka@gmail.com">zhecka@gmail.com</a>> написал(а):</span><blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
Александр Букреев пишет:<br>>> Идея Андрея была хороша. проверил её на деле, результаты уже есть.<br>>> Но с оговорками.<br>>><br>><br>> Какие получились оговорки?<br>><br>см. предыдущее письмо.
<br>> Идея Андрея хороша, но проходя последовательно по дереву от оконечных<br>> устройств ты никогда не получишь полное дерево, т.к. на практике в<br>> большой сети встречаются ситуации, когда есть пропуски. Т.е
. соседние<br>> коммутаторы не видят друг-друга. Проходя последовательно у вас будет в<br>> этом месте затык. Проходя по всем связям по очереди, у вас просто<br>> построится несколько деревьев. Которые уже можно дособрать вручную...
<br>><br>дособирать вручную проблематично при огромном количестве хостов.<br>>> проблема в том, что корневым устройством может быть любое :)<br>>><br>> Эм. Вам и нужно ЛЮБОЕ устройство. Оно требуется только для вычислений.
<br>> К самой топологии сети оно может не иметь отношения, т.е. не являться<br>> реальным корнем дерева. Проще в качестве него выбрать устройство,<br>> которое видит максимальное количество адресов коммутаторов на
<br>> максимальном количестве портов.<br>><br>оно в итоге вычисляется само собой.<br>> Эм. Поясни, что ты именуешь как private и public в данной задачке...<br>><br>легко. private - порт с единственным подключенным устройством.
<br>public(null) - куча адресов на одном порту.<br>>> select switch,port,count(*) from mactable where status is null group by<br>>> switch,port;<br>>> даёт полный список количества устройств на портах up/downлинков.
<br>>> запрос<br>>> select switch,port,count(*) from mactable where status is null and<br>>> macaddr not in (select macaddr from mactable where switch='<a href="http://10.6.204.21">10.6.204.21</a>'
<br>>> and status = 'private') group by switch,port;<br>>> убирает из этого списка порт с downlinkом.<br>>><br>><br>> Хм. Я тут структурами перла оперировал. Проще в памяти поработать, чем<br>
> мускуль напрягать. ;-)<br>><br>с перлом не совсем проще.<br>когда адресов 8 штук проще, когда 500 уже проблема. count считать<br>приходится таки и исключения.<br><br>> Порядок действий:<br>> - выбираем корневое устройство
<br>> - получаем список: устройство-порт = список устройств на порту<br>> - отбрасываем те связки "устройство-порт" у которых в списке устройств<br>> присутствует корень.<br>> В итоге получили список даунлинков на связках "устройство-порт".
<br>><br>><br>> Дальше начинаем строить связи:<br>> 3 - d9 (однозначная связь), записываем, выкидываем везде d9<br>><br>> После прохода по всем однозначным связям получает картинка:<br>> 2.8: 3<br>>
2.1: 1<br>> Соответственно строим эти связи и все. Полностью все связи получены.<br>><br>это всё понятно. логически и визуально задача решается за пару минут, а<br>когда скажем топология сети неизвестна и картинки нет ? плясать не от чего.
<br>В данном мной примере всего 14 свичей, из них 4 по 24<br>порта(23,26,27,28), и 10 по 50 портов. Реально сейчас свичей 25 штук,<br>через неделю-две будет 29, потом прибавится 3 удалённых офиса и еще 6<br>свичей разных мастей :) и это не предел. просто я не стал сюда включать
<br>глобальную конфигурацию. Иметь полную структурную схему нарисованную<br>руками получается просто нерационально, хоть она и есть, но она<br>устаревает очень быстро. Люди двигаются с места на место. Компы прыгают<br>со свича на свич.
<br>Вотъ такие пироги.<br><br>______________________________________________________________________<br><a href="http://Moscow.pm">Moscow.pm</a> mailing list<br><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org">
http://moscow.pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/moscow-pm">http://mail.pm.org/mailman/listinfo/moscow-pm</a></blockquote></div><br>