About Forum Blogs NOC Docs Downloads KB Issues Code CI Registration

nocproject.org

#nocproject.org at irc.freenode.net log.
Back to nocproject.org Back to IRC log index
Date: 21.02.2013
ss_ #
04:24
dvolodin, пояснить можешь почему не строиться линк между Juniper и Cisco catalist по LLDP? Друг друга видят корректно
dvolodin #
04:24
что скрипты выдают с обеих сторон?
ss_ #
04:27
секунду, дебагом {'local_interface': 'GigabitEthernet0/0/23',
04:27
'neighbors': [{'remote_capabilities': 4,
04:27
'remote_chassis_id': '00:22:56:5B:CE:85',
04:27
'remote_chassis_id_subtype': 4,
04:27
'remote_port': 'Gi0/5',
04:27
'remote_port_subtype': 1,
04:27
'remote_system_name': 'Kan-ME3400'}]}]
04:27
это на Huawei S5300 видиться сиська
04:28
{'local_interface': 'Gi 0/5',
04:28
'neighbors': [{'remote_capabilities': 4,
04:28
'remote_chassis_id': '00:25:9E:98:14:20',
04:28
'remote_chassis_id_subtype': 4,
04:28
'remote_port': 'GigabitEthernet0/0/23',
04:28
'remote_port_subtype': 5,
04:28
'remote_system_name': 'S5300_ATS-CATS_SW1'}]},
04:28
вот на каталисте 3400
04:34
dvolodin, какие еще необходимы условия для построения линка?
dvolodin #
04:36
remote chassis id и report_port с обоих сторон
04:36
remote
ss_ #
04:38
remote_port как видно 'Gi 0/5' 'Gi0/5'
04:38
В этом дело?
04:40
в инвертори имя интерфейса с пробелом, а по LLDP циска отдает без пробела
04:41
dvolodin, статус Feedback в NOC-952?
04:41
Что означет?
lexus-omsk #
04:45
ss_: нужна обратная связь от открывшего заявку - ну там работает или нет и всё такое
ss_ #
04:46
обновиться чтоль и проверить?
lexus-omsk #
04:46
ну да... или вручную изменённые файлы накатить
ss_ #
04:47
сделал ход конем на хуявее
04:47
{'local_interface': 'GigabitEthernet0/0/23',
04:47
'neighbors': [{'remote_capabilities': 4,
04:47
'remote_chassis_id': '00:22:56:5B:CE:85',
04:47
'remote_chassis_id_subtype': 4,
04:47
'remote_port': 'Gi 0/5',
04:47
'remote_port_subtype': 1,
04:47
'remote_system_name': 'Kan-ME3400'}]}]
04:47
'Gi 0/5'
04:47
#FOR CISCO
04:47
n["remote_system_name"] = n["remote_system_name"].replace(".cisco.com","")
04:47
n["remote_port"] = n["remote_port"].replace("Gi0","Gi 0")
04:47
#END CISCO
04:52
remote chassis id в данном случае MAC
04:53
в инвертори интерфейс они совпадают
04:53
имена портов теперь тоже
04:53
где линки?
04:54
s5300
04:54
{'local_interface': 'GigabitEthernet0/0/23',
04:54
'neighbors': [{'remote_capabilities': 4,
04:54
'remote_chassis_id': '00:22:56:5B:CE:85',
04:54
'remote_chassis_id_subtype': 4,
04:54
'remote_port': 'Gi 0/5',
04:54
'remote_port_subtype': 1,
04:54
'remote_system_name': 'Kan-ME3400'}]}]
04:54
me3400
04:54
{'local_interface': 'Gi 0/5',
04:54
'neighbors': [{'remote_capabilities': 4,
04:54
'remote_chassis_id': '00:25:9E:98:14:20',
04:54
'remote_chassis_id_subtype': 4,
04:54
'remote_port': 'GigabitEthernet0/0/23',
04:54
'remote_port_subtype': 5,
04:54
'remote_system_name': 'S5300_ATS-CATS_SW1'}]},
05:03
вот get_interfaces с обоих железок http://pastebin.com/DhRW1zgB
05:03
Что же не так?
05:12
http://pastebin.com/Lx8dgFdv вот все чего должно хватать
05:13
dvolodin, посмотришь?
05:19
zi_rus может ты поможешь?
zi_rus #
05:19
с чем?
ss_ #
05:19
http://pastebin.com/Lx8dgFdv а линка нет(
zi_rus #
05:20
даже не знаю
05:22
ss_, так смотри
05:22
get_chassis_id Kan_ME3400
05:22
00:22:56:5B:CE:80
05:22
а китай видит
05:22
'remote_chassis_id': '00:22:56:5B:CE:85'
ss_ #
05:22
zi_rus, это мак порта
zi_rus #
05:23
ss_, но на сколько я знаю алгоритм, он работает по chassis_id
05:23
если это не так то только Он тебе поможет
05:25
у меня сеть на этих МЕ-шках но ллдп мы не используем так что ничего не смогу проверить
ss_ #
05:26
zi_rus, chassis_id что за сущность?
zi_rus #
05:29
ну, опять же, на сколько я знаю (не я же писал алгоритм), это мак которым светит эта железка в разных протоколах, например в REP
05:30
Base ethernet MAC Address : 68:BD:AB:AA:16:80 - это chassis id
05:30
а репе он светит как
05:30
Bridge MAC: 68bd.abaa.1680
ss_ #
05:30
а в ивертори на каждом интерфейсе свой мак
05:30
на 3400
05:31
hg resolve sa/profiles/Juniper/JUNOS/get_lldp_neighbors.py
05:31
merging sa/profiles/Juniper/JUNOS/get_lldp_neighbors.py
05:31
This Vim was not compiled with the diff feature.
05:31
merging sa/profiles/Juniper/JUNOS/get_lldp_neighbors.py failed!
05:31
как быть?
zi_rus #
05:32
в стп он тоже как id используется
05:33
а в ллдп не знаю как оно выглядит и как задуман сам алгоритм
05:36
ss_, а как на циске выглядит вывод команды про ллдп?
05:36
просто длинк возвращает
05:37
Chassis ID : 00-21-91-A7-0A-00
05:37
и
05:37
Port ID : 00-21-91-A7-0A-FF
05:37
а у этого свича так и есть
05:37
MAC Address : 00-21-91-A7-0A-00
05:37
хотя наоборот
05:38
это хуавей мутит чего-то
05:38
это он chassis_id не тот показывает
05:38
на нем надо смотреть
ss_ #
05:38
zi_rus, какой chassis_id должен он показать?
zi_rus #
05:39
тот который циска возвращает по get_chassis_id
05:39
он говорит что за портом у него 'remote_chassis_id': '00:22:56:5B:CE:85'
05:40
а дожен быть 00:22:56:5B:CE:80
05:40
выполни команду на хуавее, что он покажет?
05:40
по честному, не через скрипт
ss_ #
05:41
zi_rus, секунду
05:42
GigabitEthernet0/0/23 has 1 neighbors:
05:42
Neighbor index : 1
05:42
Chassis type :macAddress
05:42
Chassis ID :0022-565b-ce85
05:42
Port ID type :interfaceAlias
05:42
Port ID :Gi0/5
05:42
Port description :link to S5300 gi0/0/23
05:42
System name :Kan-ME3400.cisco.com
05:42
System description :Cisco IOS Software, ME340x Software (ME340x-METROIPACCESSK9-M), Version 12.2(46)SE, RELEASE SOFTWARE (fc2)
05:42
Copyright (c) 1986-2008 by Cisco Systems, Inc.
05:42
Compiled Thu 21-Aug-08 17:27 by nachen
05:42
System capabilities supported :bridge router
05:42
System capabilities enabled :bridge
05:43
Expired time :110s
05:43
Port VLAN ID(PVID) :1
05:43
Protocol identity :
05:43
Auto-negotiation supported :Yes
05:43
Auto-negotiation enabled :Yes
05:43
OperMau :speed(1000)/duplex(Full)
05:43
Power port class :PD
05:43
PSE power supported :No
05:43
PSE power enabled :No
05:43
PSE pairs control ability:No
05:43
Power pairs :Unknown
05:43
Port power classification:Unknown
05:43
Link aggregation supported:No
05:43
Link aggregation enabled :No
05:43
Aggregation port ID :0
05:43
Maximum frame Size :0
05:43
MED Device information
05:43
Device class :Network Connectivity
05:43
HardwareRev :ME-3400G-12CS-D (PowerPC405):C0
05:43
FirmwareRev :NA
05:43
SoftwareRev :12.2(46)SE
05:43
SerialNum :NA
05:43
Manufacturer name :Cisco Systems, Inc.
05:43
Model name :ME-3400G-12CS-D
05:43
Asset tracking identifier :NA
05:43
Media policy type :Voice
05:43
Unknown Policy :Unknown
05:43
VLAN tagged :No
05:44
Media policy VlanID :0
05:44
Media policy L2 priority :0
05:44
Media policy Dscp :0
05:44
Power Type :PSE
05:44
PoE PSE power source :Unknown
05:44
Port PSE Priority :Unknown
05:44
Port Available power value:0
05:44
Location format :Civic Address LCI
05:44
Location information:what(DHCP server) country()
05:44
Ca type Ca value
05:44
GigabitEthernet0/0/24 has 0 neighbors
bsod_ #
05:45
http://pastebin.com/ оставлю это здесь
zi_rus #
05:45
все вывалил
05:45
похоже китаец гонет
05:46
думаю, без костыля не обойтись
05:47
ss_, зарепорть хуавею баг :)
ss_ #
05:49
zi_rus, ты скажи что должен вывалить, костыль придумаю
zi_rus #
05:51
китаец должен возвращать chassis_id, а он возращает port id
ss_ #
05:54
Chassis ID :0022-565b-ce85 должен быть 00:22:56:5B:CE:80 ? правильно?
05:55
NOC-952 подтвердил
05:57
zi_rus, помоему это баг в скрипте get_chassis_id
05:57
на циско
05:57
он выдает только 1 мак, а должен диапазон
zi_rus #
05:58
ss_, посмотри на циске stp, что написано в bridge_id
05:58
просто sh spanning tree
ss_ #
05:58
No spanning tree instance exists.
05:59
там его нет
zi_rus #
05:59
ну создай какой-нибудь влан
ss_ #
05:59
на своих можешь глянуть?
zi_rus #
05:59
на моих как надо
ss_ #
05:59
zi_rus, один мак везде?
zi_rus #
05:59
я хочу чтобы ты сам увидел что со скриптом все в порядке
05:59
да
05:59
один
06:00
rep/stp/udld
ss_ #
06:00
есть вообщем мысль по костылю
zi_rus #
06:00
хотя udld по серийнику работает
ss_ #
06:00
осилю или нет не факт, если кто поможет сейчас начну
06:02
берем Chassis ID :0022-565b-ce85 берем Port ID :Gi0/5 выбираем 5 и отнимаем последнюю цифру из мака если в System description :Cisco IOS Software находим
06:02
как такие костыли?
06:02
баг репорт хуявею писать конечно можно
06:02
но когда они ипсравят
zi_rus #
06:02
по моему дико
ss_ #
06:02
zi_rus, да ладно, этож хуявей
zi_rus #
06:03
проще, заигнорить chassis_id и построить связь по system_name
ss_ #
06:03
zi_rus, как?
zi_rus #
06:03
не знаю, ты же решил костыль делать
ss_ #
06:04
zi_rus, ну чтобы игнорить chassis_id то нужно понимать как работает алгоритм построения линка
06:05
еще не работает построение линком между джуниперами и хуявеяви
zi_rus #
06:05
тогда ты зна кого спрашивать, все эти алгоритмы написаны одним человеком
06:05
здесь
ss_ #
06:05
<ss_> dvolodin, какие еще необходимы условия для построения линка?
06:05
<dvolodin> remote chassis id и report_port с обоих сторон
06:05
<dvolodin> remote
dvolodin #
06:25
совпадение с обоих концов
06:26
кстати, напрашивается у нас метод ManagedObject.get_interface(name)
06:26
с нормализацией имени по профилю
ss_ #
06:30
dvolodin, т.е. проблема с кривой реализаций протоколов может уйти?
dvolodin #
06:31
да нет
06:31
это так, красотизм
06:31
нужно чтобы совпадали объекты и интерфейсы с обоих сторон
06:31
Huawei, вот, description вообще шлет
ApmeM_Skripnik #
06:31
ss_, а не проше ли написать get_chassis_id и не изобретать костыли?
ss_ #
06:32
ApmeM_Skripnik, для какой железки:?
ApmeM_Skripnik #
06:33
у тебя ведь хуавей и джунипер, на одном из профилей этот скрипт отсутствует или неправильно выдает информацию.
06:33
вот для этого профиля и писать/править
ss_ #
06:35
ApmeM_Skripnik, на обоих нормально они работают
mikevlz #
06:35
ss_: get_chassis_id на твоем каталисте что возвращает? Особенно тебя интересует поле MAC
06:37
если вернет диапазон, в который входит мак 5-го порта, тогда из вывода хуавея НОК должен определить соседа и проблему надо искать дальше
06:37
в именах портов
zi_rus #
06:38
mikevlz, для каталистов возвращается один мак
mikevlz #
06:38
тогда ой
06:39
значит надо, чтоб get_chassis_id возвращал и остальные для каталистов
ss_ #
06:40
<ss_> zi_rus, помоему это баг в скрипте get_chassis_id
06:40
<ss_> на циско
06:40
<ss_> он выдает только 1 мак, а должен диапазон
zi_rus #
06:40
на самом деле я думаю вполне достаточно находить мак в базе, тут говорили что такая база ведется
ApmeM_Skripnik #
06:40
вот про это тебе иговорят
mikevlz #
06:40
база ведется, если включена
zi_rus #
06:41
сделать обязательным условием для дискавери и всего делов
ApmeM_Skripnik #
06:42
<mikevlz>, а snmp_ifindex участвует в построении линков?
mikevlz #
06:45
нет. Для lldp по-крайней мере нет такой функции. Ремотпорт может найти по маку и по имени.
06:45
но всегда можно такую функцию дописать
06:45
тогда станет искать
ApmeM_Skripnik #
06:48
<mikevlz>, у меня есть проблема с алкателем. он по ллдп отдает не имя порта, а ifindex
06:50
использование snmp_ifindex решило бы проблему
mikevlz #
06:52
тут надо выполнить два маленьких условия
ss_ #
06:52
я до сих пор считаю что get_chassis_id должен возвращать все маки которые есть на циске, например каждый интефейс имеет свой уникальный мак
06:52
т.е. {'first_chassis_mac': '00:22:56:5B:CE:80',
06:52
'last_chassis_mac': '00:22:56:5B:CE:80'}
06:53
last_chassis_mac = first_chassis_mac + 16 Gigabit Ethernet interfaces
mikevlz #
06:53
1 - убедиться, что все соседи всех алкателей отдают в get_interfaces еще и ifindex, который пишется в базу
06:53
2 - дописать поиск remote port по ifindex
06:54
ss_: bt.
ss_ #
06:54
mikevlz, усь?
mikevlz #
06:54
ss_: nocpro
06:54
=)
06:55
issue делай вот шо имею в виду
ss_ #
06:55
ApmeM_Skripnik, джиниперы по LLDP тоже индекс отдают
06:55
надо реквест фичу писать
06:55
mikevlz, неосилю
06:55
давай лучше костыль
mikevlz #
06:55
осиливай
06:55
иначе будет только у тебя костыль
06:56
а так - может попадет в основную ветку
ApmeM_Skripnik #
06:56
<mikevlz>, наверное я не правильно обьяснил - у меня только алкател отдает вместо порта ifindex. соседи отдают алкателю информацию коректно
ufir #
06:56
ss_ закинешь шаблонов ?
ss_ #
06:56
mikevlz, чтобы написать ису надо сформулировать что не рабоает, а я не знаю точного алгоритма и из-за чего это не пашет
mikevlz #
06:56
и не будут толпы гулять с вопросом "а чо у меню хуавей с циской по ллдп не нюхаются?"
ss_ #
06:56
ufir, ща
mikevlz #
06:57
ApmeM_Skripnik: мммм. На ком исполняется поиск нейборов?
ApmeM_Skripnik #
06:58
еджкор и длинк
mikevlz #
06:58
ApmeM_Skripnik: то есть что-то в духе: "Если запустить на алкателе get_lldp_neighbors, то он, собака, в ответе скажет, что на порту ifindex он нашел соседа длинка с портом portname"
ApmeM_Skripnik #
06:59
причем с еджкорами 3510 отдельная беда. там порт вообще выдается в непонятном виде
06:59
<mikevlz>, давай я покажу вывод с алкателя и с соседа. тогда станет понятно
mikevlz #
07:00
ApmeM_Skripnik: то-есть, если я правильно понял, спрашиваем у длинка/эджкора кто у них соседи - они отвечают: алкатель какой-то, порт его - Ifindex
07:00
показывай
07:01
ss_: чтобы понять, как работает поиск соседей надо залезть в исходники: Inv/discovery/jobs/link_discovery.py и lldp_discovery.py
ss_ #
07:01
mikevlz, джунипер + хуявей
07:01
mikevlz, спасибо глянем
ufir #
07:02
кстати циска замечательно себе видит хуавей по ллдп
mikevlz #
07:02
ss_: ты уже определись. Кто там с хуавеем рядом. Всю дорогу мы говорим, что для циски в ид возвращается только один мак, а нюхаются у нас джуниппер с хуавеем
ufir #
07:02
только странно
ApmeM_Skripnik #
07:02
и так имеем вывод с алкателя,
07:02
{'local_interface': '1/25',
07:02
'neighbors': [{'remote_capabilities': 22,
07:02
'remote_chassis_id': '00:21:91:C7:D6:F7',
07:02
'remote_chassis_id_subtype': 4,
07:02
'remote_port': 'TenGigabitEthernet 1/1',
07:02
'remote_port_subtype': 5,
ss_ #
07:02
ufir, и у меня
ApmeM_Skripnik #
07:02
'remote_system_name': 'DGS3610'}]}]
07:03
и вывод с его соседа, 3610-26G
07:03
{'local_interface': 'Te 1/1',
07:03
'neighbors': [{'remote_capabilities': 20,
07:03
'remote_chassis_id': '00:E0:B1:88:7A:B8',
07:03
'remote_chassis_id_subtype': 4,
07:03
'remote_port': '1025',
07:03
'remote_port_subtype': 7,
07:03
'remote_system_name': 'Alcatel6850'}]}]
07:03
т.е. сосед видит порт как 'remote_port': '1025', вместо 1/25
ufir #
07:03
cs02#sh lldp neighbors
07:03
Device ID Local Intf Hold-time Capability Port ID
07:03
jsw02-yla-laz Gi1/0/47 120 B,R 536
07:03
Quidway Gi1/0/45 120 B Ethernet0/0/24
07:03
жунипер тоже
07:03
похоже индекс интерфейса
ss_ #
07:04
ufir, индекс, точно я проверял вчера
07:04
нужно чтоб при поиске линком испольхзовались еще сопоставление индек-имя интерфейса
ufir #
07:04
т.е. надо сначала ifindex выдаргивать
mikevlz #
07:05
ApmeM_Skripnik: решение чуть проще. get_interfaces для алкателя возвращает ifindex портов?
ss_ #
07:05
ufir, в интерфейс инвертори уже есть
ApmeM_Skripnik #
07:05
нет, он возвращает 1/25
mikevlz #
07:05
не-не-не... Скрипт кроме имени МОЖЕТ возвращать еще и индекс порта
07:06
просто грязным хаком это обходить не стОит
ApmeM_Skripnik #
07:06
какой параметр за это отвечает?
07:06
snmp_ifindex,
mikevlz #
07:06
выполни на алкателе get_interfaces
ApmeM_Skripnik #
07:08
выполнил
mikevlz #
07:08
если возвращает, то надо будет дописать get_interface_by_ifindex в lldp_discovery.py
ApmeM_Skripnik #
07:08
что искать?
ss_ #
07:08
mikevlz, сделаешь?
ApmeM_Skripnik #
07:09
вот часть вывода
07:09
{'admin_status': False,
07:09
'enabled_protocols': ['LLDP'],
07:09
'mac': '00:E0:B1:88:7A:CF',
07:09
'name': '1/22',
07:09
'oper_status': False,
07:09
'subinterfaces': [{'admin_status': True,
07:09
'description': '',
07:09
'enabled_afi': ['BRIDGE'],
mikevlz #
07:09
ApmeM_Skripnik: тот самый snmp_ifindex
ApmeM_Skripnik #
07:09
'is_bridge': True,
07:09
'mac': '00:E0:B1:88:7A:CF',
07:09
'name': '1/22',
07:09
'oper_status': True,
07:09
'snmp_ifindex': 1022,
07:09
'untagged_vlan': 1}],
07:09
'type': 'physical'},
07:09
'snmp_ifindex': 1022, оно?
mikevlz #
07:09
ага... возвращает
07:10
значит должно в базу писаться, а значит для алкателя надо допиливать
07:10
lldp_discovery
07:10
ss_: не-а, не сделаю :/
ApmeM_Skripnik #
07:10
еще момент - в базу он их не пишет
mikevlz #
07:11
ApmeM_Skripnik: как проверил?
ss_ #
07:11
ufir, куда слать
ApmeM_Skripnik #
07:11
1. визуально - посмотрел в inventory - interfaces
07:11
2. посмотрел в монге
07:12
хотя в логах имеется информация что snmp_ifindex найден
mikevlz #
07:13
в веб-морде нет поля для ифиндекса вообще. В монге поле зовется ifindex, а не snmp_ifindex
07:13
лучше в шелле попробуй
ApmeM_Skripnik #
07:14
что именно?
mikevlz #
07:15
from noc.inv.models import *
07:15
s1 = SubInterface.objects.filter(name='1/22',mac='00:E0:B1:88:7A:CF')
07:15
s1
07:16
если получишь непустой массив, то s1[0].ifindex еще выведи
ApmeM_Skripnik #
07:16
[<SubInterface: 6850-u24x 1/22>]
07:16
>>> s1[0].ifindex
07:16
1022
07:16
>>>
mikevlz #
07:17
вот
07:17
видишь, есть в базе индекс...
07:19
значит делай issue, что длинки и эджкоры видят порт алкателя в lldp как locla(7), при этом порт идентифицируется по ifindex
ApmeM_Skripnik #
07:19
понял, а я его смотрел в noc.interfaces
mikevlz #
07:20
не, если глянуть интерфейс SAE, то видно в какую модель должно запихнуться
ApmeM_Skripnik #
07:22
тогда еще один вопрос, для закрытия тему. еджкоры 3510 видят алкатель вот так
07:22
[{'local_interface': 'Eth 1/9',
07:22
'neighbors': [{'remote_capabilities': 20,
07:22
'remote_chassis_id': '00:E0:B1:88:7A:B8',
07:22
'remote_chassis_id_subtype': 4,
07:22
'remote_port': '31-30-31-37',
07:22
'remote_port_subtype': 5,
07:22
'remote_system_name': 'Alcatel6850'}]}]
07:23
'remote_port': '31-30-31-37' - вот это собственно о чем?
07:23
и как с ним работать?
mikevlz #
07:23
а вот хрен его знает... порт алкателя 17-й?
ss_ #
07:24
с remote_chassis_id_subtype какие варианты бывают?
mikevlz #
07:24
из разряда догадок :)
ApmeM_Skripnik #
07:24
кстати да, 17-й
07:25
вот удиви меня - откуда догадка?
mikevlz #
07:28
я конечно наивный албанский дурачок, но разве 0х31 это не 1? %)
07:29
получается просто строка 1-0-1-7, убираем минусы - получаем 1017, только тип порта неверный, это опять ифиндекс, а не портнэйм
07:29
кататак
ApmeM_Skripnik #
07:31
вот как тут обойтись без мата?????
07:31
0х31 - кто бы мог подумать ???
ss_ #
07:32
у каждого свой lldp с блек джеком и шлюхами
mikevlz #
07:32
0х31 - имелось в виду что 31 шестнадцатиричное соотвествует коду цифры 1
07:33
а так да... индусам-программистам надо вешать перед носом плакат с надписью "не пей и не кури!"
ApmeM_Skripnik #
07:34
поздно... это уже на генном уровне.
07:35
осталось придумать что с этим счастьем теперь делать.
ss_ #
07:36
ApmeM_Skripnik, тихонько напевает "А мы сделаем свои костыли с "блек джеком и шлюхами""
07:36
))))
ApmeM_Skripnik #
07:40
подобное лечится подобным... есть у кого индуская трава?
ss_ #
07:42
>>> s1 = SubInterface.objects.filter(mac='00:22:56:5B:CE:81')
07:42
>>> s1
07:42
[<SubInterface: Kan_ME3400 Gi 0/1>]
07:42
>>> s1 = SubInterface.objects.filter(mac='00:22:56:5B:CE:85')
07:42
>>> s1
07:42
[<SubInterface: Kan_ME3400 Gi 0/5>]
07:48
remote_chassis_id_subtype кто скажет какие бывают?
dvolodin #
07:49
subtypo'в 7, если память мне не изменяет
07:49
смотри LLDP-MIB
ss_ #
07:51
http://www.ieee802.org/1/files/public/MIBs/LLDP-MIB-200505060000Z.txt нашел тут The enumeration 'macAddress(3) и The enumeration 'networkAddress(4)'
07:53
dvolodin, если поменять в sa/profiles/Huawei/VRP/get_lldp_neighbors.py n = {"remote_chassis_id_subtype": 4} на n = {"remote_chassis_id_subtype": 3}
07:54
не будет ли это указанием тому что приходит от железки не get_chassis_id а mac порта
dvolodin #
07:57
ну да
ss_ #
07:57
dvolodin, линки нарисовать тогда должен?
dvolodin #
07:58
в share/mibs/LLDP-MIB.mib
07:58
ss_: погоди, я не вижу общей картины
ss_ #
07:58
dvolodin, http://pastebin.com/Lx8dgFdv вот она
07:59
единсвенно сейчас на 5300 {'local_interface': 'GigabitEthernet0/0/23',
07:59
'neighbors': [{'remote_capabilities': 0,
07:59
'remote_chassis_id': '00:22:56:5B:CE:85',
07:59
'remote_chassis_id_subtype': 3,
07:59
'remote_port': 'Gi 0/5',
07:59
'remote_port_subtype': 1,
07:59
'remote_system_name': 'Kan-ME3400'}]}]
07:59
'remote_chassis_id_subtype': 3
08:02
dvolodin, смотришь? Еще вопрос есть
ApmeM_Skripnik #
08:10
может кто подскажет - как вот такую хрень '31-30-31-37' определить?
08:11
жаль <_4ePTeHok> редко появляется
ss_ #
08:18
все сбегают
08:18
)
Dmitry11 #
08:22
неуловимый dvolodin
ss_ #
08:22
Dmitry11, может ты подскажешь
08:22
?
Dmitry11 #
08:23
я не могу до сих пор с новой тушенкой разобраться.
ss_ #
08:23
фиг с этотой тушенко
08:23
й
Dmitry11 #
08:23
Часть функциональности попросту отсутствует, или непонятно как делать
ss_ #
08:23
скажи почему линк не рисует
Dmitry11 #
08:23
Нет данных
08:24
С обеих сторон должны бвть данные
ss_ #
08:24
http://pastebin.com/Lx8dgFdv
08:24
вот они
Dmitry11 #
08:25
ну так там разные имена интерфейсов.
ss_ #
08:25
как?
Dmitry11 #
08:27
точнее не то
08:27
У тебя
08:27
./noc debug-script get_chassis_id Kan_ME3400   {'first_chassis_mac': '00:22:56:5B:CE:80',  'last_chassis_mac': '00:22:56:5B:CE:80'}
08:28
а MAC адрес интерфейса - 'mac': '00:22:56:5B:CE:85',
ss_ #
08:28
я знаю это
08:28
сделал так {'local_interface': 'GigabitEthernet0/0/23',
08:28
'neighbors': [{'remote_capabilities': 0,
08:28
'remote_chassis_id': '00:22:56:5B:CE:85',
08:28
'remote_chassis_id_subtype': 3,
08:28
'remote_port': 'Gi 0/5',
08:28
'remote_port_subtype': 1,
08:28
'remote_system_name': 'Kan-ME3400'}]}]
Dmitry11 #
08:28
Судя по всему, lldp_discovery смотрит только на get_chassis_id
ss_ #
08:29
должен по 'remote_chassis_id_subtype': работать
Dmitry11 #
08:29
и не смотрит на MAC адрес интерфейса
ss_ #
08:30
похоже на то
08:30
а get_chassis_id должен давать один мак или диапазон маков включая маки интерфейсоф?
Dmitry11 #
08:31
диапазон, конечно
ss_ #
08:31
пиля
08:31
{'first_chassis_mac': '00:22:56:5B:CE:80',
08:31
'last_chassis_mac': '00:22:56:5B:CE:80'}
08:32
отдал а должен был last_chassis_maс + count интерфесов
08:32
sa/profiles/Cisco/IOS/get_chassis_id.py
Dmitry11 #
08:33
тем более, что в inv/discovery/jobs/lldp_discovery.py ошибка
08:34
В строке 62
08:34
потому как MAC Address - это 3-й subtype, а не 4-й
08:34
Потому оно и не работает
ss_ #
08:35
Dmitry11, о как, а как исправить?
ApmeM_Skripnik #
08:35
<Dmitry11>, а с патчем для длинка что-то решилось?
Dmitry11 #
08:35
исправь на 3.
08:35
ApmeM_Skripnik: Я не могу прогнать тесты :(
08:35
Тушенка не работает
ApmeM_Skripnik #
08:36
жаль. будем ждать
Dmitry11 #
08:36
Без тестов никаких коммитов в SA не делаю
08:36
Все дружно ждем dvolodin'а
ss_ #
08:38
Dmitry11, не нарисовал линки
Dmitry11 #
08:38
должно отдискаверить сначала
ss_ #
08:38
перезапустил на обоих железках
ApmeM_Skripnik #
08:39
а get_chassis_id так и отдает один мак?
ss_ #
08:40
да
ApmeM_Skripnik #
08:40
тогда и не нарисует
ss_ #
08:44
get_chassis_id надо перепиливать я так понимаю
08:44
вопрос правильно ли будет если он будет возвращать все маки
ApmeM_Skripnik #
08:44
да.
08:44
нет. он должен вернуть первый и последний мак
08:45
т.е. диапазон. "от" и "до"
ss_ #
08:45
Это я и думал
08:45
а вертает не то
08:46
sa/profiles/Cisco/IOS/get_chassis_id.py сдесь видно что для 4000/4500 7600 и прочего диапазон
Dmitry11 #
08:54
По идее оно смотрит и MAC адреса интерфейсов. Но, опять же повторюсь, из-за бага в lldp_discovery.py оно не работает
lexus-omsk #
09:28
Dmitry11: а что с тестами? у меня одна проблема - заливка их в репо, а локально - работает: ./noc test --beef-filter=Zyxel.ZyNOS noc.stop
09:28
как-то так, например
Dmitry11 #
09:29
точно работает?
lexus-omsk #
09:31
проверь у себя на всякий случай
09:32
если трейсы вылезут - надо искать - или реально поломанная тушёнка, либо косяк в механизме работы тестов
Dmitry11 #
09:33
У меня %./noc test --beef-filter=DLink.DxS noc.stop
09:33
начал какого-то тестировать прпофиль Dlink.DxS_Cisco_CLI
ss_ #
09:33
Dmitry11, баг исправляется 3: self.get_remote_port_by_mac, # macAddress(3)
09:33
так?
lexus-omsk #
09:36
Dmitry11: ну так он тоже под фильтр попадает, получается так
Dmitry11 #
09:36
ss_: по идее так
lexus-omsk #
09:36
попробуй так, например: ./noc test --beef-filter=DLink.DxS.get_chassis_id noc.stop
Dmitry11 #
09:37
DLink.DxS.get_chassis_id проходит
09:37
но иногда нужно протестировать весь профиль. Особенно, если я хочу исправить тушенку
lexus-omsk #
09:38
ну да... надо посмотреть, может фильтр регэкспы умеет
09:40
не, там оказывается просто startswith используется
09:41
о, вот так: ./noc test --beef-filter=DLink.DxS. noc.stop
Dmitry11 #
09:41
$%^$^%
09:45
Все дружно ждем dvolodin'а
lexus-omsk #
09:53
таки да, я поторопился... есть там баги с тестами, так что ждём
09:54
например DLink.DxS_Cisco_CLI.get_version - у меня такое же при тесте Zyxel.ZyNOS.get_interfaces...
09:56
откуда-то там появляется u перед некоторыми строками
ss_ #
09:57
lexus-omsk, юникод?
lexus-omsk #
09:58
да, но почему так выборочно?
10:00
точнее даже наоборот:
10:00
new_result = {'platform': 'DGS-3610-26G', 'vendor': 'DLink', 'version': '10.3(5T16),'}
10:00
old_result = {u'platform': 'DGS-3610-26G', u'vendor': 'DLink', u'version': '10.3(5T16)'}
10:03
в старой тушёнке: result={'platform': 'DGS-3610-26G', 'vendor': 'DLink', 'version': '10.3(5T16)'}
Dmitry11 #
10:04
Все дружно ждем dvolodin'а
lexus-omsk #
10:04
опять же для DLink.DxS, например, отрабатывают нормально тесты - в чём фокус?
10:07
Dmitry11: в последнее время наблюдается тенденция "делай сам, если хочешь, чтобы это было сделано" (ни в коем случае не наезд, просто мне так кажется)
Dmitry11 #
10:07
Да я бы сделал, но права коммита у меня нету
lexus-omsk #
10:07
и в этом есть и минусы, и свои плюсы тоже
Dmitry11 #
10:08
Я могу коммитить только в часть каталогов. dvolodin хочет держать руку на пульсе
ss_ #
10:08
lexus-omsk, каждый творец своего нока
Dmitry11 #
10:10
Когда создавался NOC, было по-моему три разработчика. Из них остался только dvolodin. Кроме него никто не знает "потроха". Я же охватил только маленький кусочек.
lexus-omsk #
10:10
ну в общем-то правильно делает :) нам открыта лишь небольшая часть замысла
Dmitry11 #
10:13
Кроме того, если смотреть http://kb.nocproject.org/display/SITE/DevTeam то вакансий очень много
10:18
Особенно нужны документописатели, потому как документация совершенно не отражает текущее состояние дел
10:18
Плюс порог вхождения очень высок
ss_ #
10:26
Dmitry11, что за порог вхождения?
10:26
{'first_chassis_mac': '00:22:56:5B:CE:80',
10:26
'last_chassis_mac': '00:22:56:5B:CE:90'}
10:26
cisco catalist me3400
Dmitry11 #
10:27
Ну, человек должен как минимум знать python, django и т.п.
ss_ #
10:27
## Catalyst 2960/3560/3750/3120 on IOS SE
10:27
## Catalyst 2950 on IOS EA
10:27
##
10:27
rx_small_cat = re.compile(r"^Base ethernet MAC Address\s*:\s*(?P<id>\S+)",
10:27
re.IGNORECASE | re.MULTILINE)
10:27
rx_mac = re.compile(r"\s+Hardware is EtherSVI|Gigabit Ethernet, address is (?P<mac>\S+)", re.IGNORECASE | re.MULTILINE)
10:27
@NOCScript.match(version__regex=r"SE|EA")
10:27
def execute_small_cat(self):
10:27
v = self.cli("show version")
10:27
match = self.re_search(self.rx_small_cat, v)
10:27
first_mac = match.group("id")
10:27
#cisco new
10:27
v2 = self.cli("show int | include bia")
10:27
for l in v2.splitlines():
10:27
match = self.rx_mac.search(l)
10:27
if match:
10:27
if match.group("mac")!= first_mac:
10:27
last_mac = match.group("mac")
10:27
if not last_mac:
10:27
last_mac = first_mac
10:27
return {
10:27
"first_chassis_mac": first_mac,
10:27
"last_chassis_mac": last_mac
10:27
}
10:28
Dmitry11, джанго не умею) питон на поверхносном уровен
10:28
Cisco.IOS.get_chassis_id выдает маки все от железа и последний от интерфейса
Dmitry11 #
10:29
я не уверен, что нужно мучать get_chassis_id. Оно само достает информацию из get_interfaces. get_chassis_id сделан для тех профилей, которые не умеют выдавать MAC адреса на интерфейсах
10:29
Но это нужно уточнить у dvolodin'а
ss_ #
10:29
Dmitry11, а по другому я не знаю как делать
Dmitry11 #
10:30
Все дружно ждем dvolodin'а
ss_ #
10:30
толку уже спрашивал
10:30
с каталисты 2950 {'first_chassis_mac': '00:12:D9:40:B5:40',
10:30
'last_chassis_mac': '00:12:D9:40:B5:5A'}
zi_rus #
10:45
Dmitry11, ну, я не знаю ни питона (хоть и написал на нем штук пять скиптов под свои нужды), ни джанги, это не мешает пользоваться ноком
Dmitry11 #
10:45
каталист сам выдает свои MAC адреса
10:45
Вот пример вывода шеститонника
10:46
6509_switch#show catalyst6000 chassis-mac-addresses
10:46
chassis MAC addresses: 1024 addresses from 0005.7497.4900 to 0005.7497.4cff
ss_ #
10:46
Dmitry11, 2950 3400 нет
10:46
там нет такой команды
10:47
можно так посмотреть на них show int | include bia
Dmitry11 #
10:47
Логика выдачи MAC адресов у других вендоров может быть совсем другой
ss_ #
10:47
другие и не трогаем
10:47
только каталисты
Dmitry11 #
10:49
У тех же роутеров совсем другой алгоритм выдаси MAC адресов. Поэтому забей на get_chassis_id
10:49
Оно должно смтреть MAC адреса на интерфейсах
ss_ #
10:49
должно и согласно них рисовать линки
10:49
а не рисует
10:49
2 день уже бъюсь
10:50
дебаг дать?
10:53
./noc debug-script get_lldp_neighbors S5300_ATS-CATS_SW1 {'local_interface': 'GigabitEthernet0/0/23',
10:53
'neighbors': [{'remote_capabilities': 0,
10:53
'remote_chassis_id': '00:22:56:5B:CE:85',
10:53
'remote_chassis_id_subtype': 4,
10:53
'remote_port': 'Gi 0/5',
10:53
'remote_port_subtype': 1,
10:53
'remote_system_name': 'Kan-ME3400'}]}]
ApmeM_Skripnik #
10:56
у 'Kan-ME3400' в базе есть интерфейс Gi 0/5?
ss_ #
11:01
я болван
ApmeM_Skripnik #
11:01
<mikevlz>, если в базе у subinterfaces имеется значение ifindex оно должно отображаться в веб-е?
ss_ #
11:01
Kan-ME3400 в ноке был записан как Kan_ME3400
ApmeM_Skripnik #
11:02
не уверен, но врядли это существенно
ss_ #
11:22
вообщем линков так и нет
11:23
у кого есть мысли кроме ждем володина?
ApmeM_Skripnik #
11:24
))) ждем mikevlz, может он что интересного скажет.
11:24
если бы знать как, то можно было бы парсить вывод discovery
ss_ #
11:30
вообщем я сдаюсь
11:31
а хотел еще джинипер
Dmitry11 #
11:47
ss_: хотя вроде в lldp_discovery.py все правильно
ss_ #
11:50
3: self.get_remote_port_by_mac, # macAddress(3)
11:50
4: self.get_neighbor_by_mac, # macAddress(4)
11:50
5: self.get_remote_port_by_name, # interfaceName(5)
11:50
7: self.get_remote_port_by_name # local(7)
11:50
так сделал
11:57
mikevlz, подсобишь?
mikevlz #
11:58
вопрошай
ApmeM_Skripnik #
11:58
ss_. у себя тоже нашел пару железок которые не не находят линки между собой. хотя с другими соседями все в порядке. в частности длинк 3200 и еджкор 3510
ss_ #
11:58
щаз на пастебин вывод запилю чтоб чат не засирать
ApmeM_Skripnik #
11:58
и такая же ситуация как у тебя. вроде все нормально а не работает.
11:59
вот и думаю, может тут remote_port_subtype, remote_chassis_id_subtype, remote_capabilities как-то замешаны?
mikevlz #
11:59
не находит линк между парой железок?
ss_ #
11:59
ApmeM_Skripnik, тут особая магия
ApmeM_Skripnik #
12:00
под парой подразумевается железка и сосед
mikevlz #
12:03
from noc.inv.models.pendinglinkcheck import *
12:03
o1 = PendingLinkCheck.objects.filter(local_object="id первого объекта")
12:03
o2 = PendingLinkCheck.objects.filter(local_object="id второго объекта")
12:03
o1,o2
12:03
ss_ #
12:04
mikevlz, http://pastebin.com/xG7MynGK если нужно еще что напиши
mikevlz #
12:06
ss_: 2 линка между ними?
ss_ #
12:06
mikevlz, да
12:07
"id первого объекта как узнать то?
12:07
а все в веб морде по ссылкам нашел
mikevlz #
12:08
ну например, так...
ss_ #
12:08
>>> o1 = PendingLinkCheck.objects.filter(local_object="14")
12:08
>>> o2 = PendingLinkCheck.objects.filter(local_object="712")
12:08
>>> o1,o2
12:08
([], [])
mikevlz #
12:09
нифига в базу не добавило?
ss_ #
12:09
mikevlz, непойму
12:10
может просто как то не так работает?
12:10
o1,o2 либо там масив
mikevlz #
12:10
о1 и о2 массивы, т.к. используется фильтр
ss_ #
12:11
>>> o2.count()
12:11
0
mikevlz #
12:11
эт нормально
12:11
тогда смотри логи дискавери. Оно пишет, что и как происходит...
ss_ #
12:16
o1 = PendingLinkCheck.objects.all()
12:16
>>> o1
12:16
[<PendingLinkCheck: lldp:S5300_ATS-CATS_SW1:GigabitEthernet0/0/22:Kan-ME3400:Gi 0/10>, <PendingLinkCheck: lldp:S5300_ATS-CATS_SW1:GigabitEthernet0/0/23:Kan-ME3400:Gi 0/5>]
12:17
mikevlz, что это значит?
mikevlz #
12:19
это значит, что в базе есть две записи. Первая запись - о линке по lldp от S5300_ATS-CATS_SW1 с порта GigabitEthernet0/0/22 до Kan-ME3400 в порт Gi 0/10
ss_ #
12:19
во всей базе всего два линка?
12:19
на карте нет этих линков
mikevlz #
12:19
второе - по аналогии расшифруй. проблема в том, что скорее всего интерфейсы S5300_ATS-CATS_SW1 в базе имеют не такие имена
12:20
это еще не линки. Это кандидаты
ss_ #
12:20
а
12:20
mikevlz, подскажи как через шел найти
12:20
в вебе имена совпадают
Dmitry11 #
12:20
думаю, что нужно тупо сделать приложение, которое будет показывать, как создаются линки
mikevlz #
12:20
почитай в блогах, я общий ход дискавери линков расписывал
Dmitry11 #
12:20
Т.е. две панели. На них два устройства
ss_ #
12:21
mikevlz, пруф?
Dmitry11 #
12:21
для каждого из этих устройств пишется, по каким критериям выбрало "соседа"
12:21
Чтобы можно было посмотреть
mikevlz #
12:21
http://kb.nocproject.org/pages/viewpage.action?pageId=7766259
12:22
Dmitry11: NOC-949
12:22
осталось полирнуть и закоммитить
Dmitry11 #
12:22
А заодно выбрать вручную, как соединяются эти две железки
12:23
ну как-то так
12:23
т.е. выбираем две железки, по порту на них. И смотрим, что на discovery говорит для этих портов
mikevlz #
12:23
по сути это морда к Pending Link Check "подтвердить этот линк"
12:23
нет
12:24
вручную залинковать можно из инвентори
ss_ #
12:25
mikevlz, я читал блог
12:27
в Inventory->Interfaces у ME3400 name Gi 0/xx
12:28
Inventory->Interfaces у S5300 name GigabitEthernet0/0/xx
12:30
не уловимый)))
dvolodin #
12:31
трудноуловимый
ss_ #
12:32
dvolodin, можут ты можешь?
12:32
dvolodin, http://pastebin.com/xG7MynGK
dvolodin #
12:32
чего я можут?
ss_ #
12:33
>>> from noc.inv.models.pendinglinkcheck import *
12:33
>>> o1 = PendingLinkCheck.objects.all()
12:33
>>> o1
12:33
[<PendingLinkCheck: lldp:S5300_ATS-CATS_SW1:GigabitEthernet0/0/22:Kan-ME3400:Gi 0/10>, <PendingLinkCheck: lldp:S5300_ATS-CATS_SW1:GigabitEthernet0/0/23:Kan-ME3400:Gi 0/5>]
12:33
>>>
12:33
чтож линк то не рисует?
12:39
dvolodin, mikevlz log http://pastebin.com/7uFz77cb
dvolodin #
12:39
и?
ss_ #
12:39
2013-02-21 16:18:54,843 [inv.discovery: lldp_discovery(S5300_ATS-CATS_SW1)] Link candidate found: GigabitEthernet0/0/23 -> Kan-ME3400:None
12:40
ну что ему не хватает?
12:42
mikevlz, NOC-949 как запусить и куда ставить? В коерь распаковывать?
mikevlz #
12:43
в inv/apps распаковать, постапдейт. рефрешнуть веб-морду
ss_ #
12:44
Traceback (most recent call last):
12:44
File "manage.py", line 34, in <module>
12:44
import noc.urls
12:44
File "/opt/noc/urls.py", line 15, in <module>
12:44
site.autodiscover()
12:44
File "/opt/noc/lib/app/site.py", line 447, in autodiscover
12:44
{}, {}, "*")
12:44
File "/opt/noc/inv/apps/pendinglink/views.py", line 16, in <module>
12:44
class PendingLinkCheckApplication(ExtDocApplication):
12:44
File "/opt/noc/inv/apps/pendinglink/views.py", line 22, in PendingLinkCheckApplication
12:44
model = PendingLinkCheck
12:45
NameError: name 'PendingLinkCheck' is not defined
12:45
post-update: : sync-perm failed
12:45
Terminating
12:47
mikevlz, что не так?
mikevlz #
12:48
раскомментируй там импорт PendingLinkCheck
12:48
в views.py
ss_ #
12:48
Traceback (most recent call last):
12:48
File "manage.py", line 34, in <module>
12:48
import noc.urls
12:48
File "/opt/noc/urls.py", line 15, in <module>
12:48
site.autodiscover()
12:48
File "/opt/noc/lib/app/site.py", line 447, in autodiscover
12:48
{}, {}, "*")
12:48
File "/opt/noc/inv/apps/pendinglink/views.py", line 12, in <module>
12:49
from noc.inv.models import PendingLinkCheck
12:49
ImportError: cannot import name PendingLinkCheck
mikevlz #
12:50
закомментируй назад =)
ss_ #
12:51
NameError: name 'PendingLinkCheck' is not defined
12:51
post-update: : sync-perm failed
12:51
пиля ромашка)
mikevlz #
12:51
эт понятно....
12:51
в inv/models/__init__.py есть импорт этой модели?
ss_ #
12:52
## Python modules
12:52
import re
12:52
import datetime
12:52
## NOC modules
12:52
from noc.lib.nosql import *
12:52
from noc.sa.models import ManagedObject, ManagedObjectSelector
12:52
нет
mikevlz #
12:52
добавь туда from noc.inv.models.pendinglinkcheck import PendingLinkCheck
12:53
Дима наверное смотрит на это и тихо негодует %)
ss_ #
12:53
mikevlz, отчего?
12:54
прошло
mikevlz #
12:54
ты с обновлением как справляться будешь?
ss_ #
12:54
mikevlz, что с ними?
mikevlz #
12:55
если закоммитят что-то в файлы, которые ты правил, придется вручную резолвить изменения
ss_ #
12:55
знаю, не раз уже делал так)
mikevlz #
12:56
ну тогда я спокоен
ss_ #
12:56
2013-02-23 16:46:49.582000
12:56
12:56
Kan-ME3400
12:56
12:56
12:56
12:56
S5300_ATS-CATS_SW1
12:56
12:56
GigabitEthernet0/0/23
12:56
12:56
lldp
12:56
12:57
local interface пустой
mikevlz #
13:05
он не видит локальный интерфейс, потому и не резолвит линк
ss_ #
13:05
mikevlz, [<PendingLinkCheck: lldp:Kan-ME3400:None:S5300_ATS-CATS_SW1:GigabitEthernet0/0/22>, <PendingLinkCheck: lldp:Kan-ME3400:None:S5300_ATS-CATS_SW1:GigabitEthernet0/0/23>] Тут в сторону хуявея или циски копать?
mikevlz #
13:05
в сторону МЕ3400. У нее же нет интерфейса?
ss_ #
13:08
mikevlz, дебаг говорит есть
13:08
{'local_interface': 'Gi 0/5',
13:08
'neighbors': [{'remote_capabilities': 4,
13:08
'remote_chassis_id': '00:25:9E:98:14:20',
13:08
'remote_chassis_id_subtype': 4,
13:08
'remote_port': 'GigabitEthernet0/0/23',
13:08
'remote_port_subtype': 5,
13:08
'remote_system_name': 'S5300_ATS-CATS_SW1'}]},
13:09
{'local_interface': 'GigabitEthernet0/0/23',
13:09
'neighbors': [{'remote_capabilities': 0,
13:09
'remote_chassis_id': '00:22:56:5B:CE:85',
13:09
'remote_chassis_id_subtype': 4,
13:09
'remote_port': 'Gi 0/5',
13:09
'remote_port_subtype': 1,
13:09
'remote_system_name': 'Kan-ME3400'}]}]
13:10
'remote_port_subtype': 1
13:10
'remote_port_subtype': 5,
13:10
не в этом вся проблема?
mikevlz #
13:11
хз
ss_ #
13:11
все остальное вроде показывает что должно быть
13:11
пиля, шли вторые сутки
zi_rus #
13:14
руками бы быстрее прописал
ss_ #
13:15
zi_rus, руками не итнересно
13:16
еееееее
13:16
ура ЗАРАБОТАЛООООО
Dmitry11 #
13:16
ss_: в этом
13:16
def get_remote_port(self, object, remote_port, remote_port_subtype):
13:16
f = {
13:16
3: self.get_remote_port_by_mac, # macAddress(3)
13:16
5: self.get_remote_port_by_name, # interfaceName(5)
13:16
7: self.get_remote_port_by_name # local(7)
13:16
}.get(remote_port_subtype)
13:16
Нигде нету упоминания про 'remote_port_subtype': 1
ss_ #
13:16
Dmitry11, уже понял
13:17
но сиська отдает GigabitEthernet0/0/23 has 1 neighbors:
13:17
Neighbor index : 1
13:17
Chassis type :macAddress
13:17
Chassis ID :0022-565b-ce85
13:17
Port ID type :interfaceAlias
13:17
Port ID type :interfaceAlias
13:18
interfaceAlias
13:18
сделал так n["remote_port_subtype"] = {
13:18
"interfaceAlias": 5,
13:18
"macAddress": 3,
13:18
"interfaceName": 5,
13:18
"local": 7
13:19
иначе валилось lldp на s5300 при обнаружении линка
13:19
линка с циской
mikevlz #
13:19
ну еще одну строку добавь
13:19
чтоб 1-ку определяло как имя порта
ss_ #
13:20
mikevlz, эм
13:20
пример
Dmitry11 #
13:20
Надо править не циску, а lldp_discovery.py
mikevlz #
13:20
сам добавил InterfaceName,
13:21
еще одну фигню добавь, чтоб индекс имела 1
ss_ #
13:21
и еденицу в случае чего приравнивать?
13:25
get_lldp_neighbors костыль на костыле
mikevlz #
13:26
дык железо разное, каждый вендор пилит как умеет
ss_ #
13:26
в том то и дело
13:26
там еще знаешь что сделал? #FOR CISCO
13:26
n["remote_system_name"] = n["remote_system_name"].replace(".cisco.com","")
13:26
n["remote_port"] = n["remote_port"].replace("Gi0","Gi 0")
13:26
#END CISCO
Dmitry11 #
13:26
Надо сделать приложение, где можно будет посмотреть, по каим причинам не создаются линки
ss_ #
13:26
незнаю нужно сейчас илин нет
13:27
как линки удалить попробую без костылей с реплейсом
mikevlz #
13:27
сделай еще один тип remote_port_subtype, который будет соответствовать единице
13:27
в инвентори-интерфейсы щелкни по значку Линк - оно разлинкует
ss_ #
13:27
mikevlz, "ТУТ ЧТО ПИСАТЬ НЕЗНАЮ": 1,
13:28
NOC-883 тут потом исправлю
13:28
будем пилить джинимер/алкатель
13:29
следуюущие
13:31
там index порта возвращается
13:32
mikevlz, "ТУТ ЧТО ПИСАТЬ НЕЗНАЮ": 1,
13:34
все без костылей находит
dvolodin #
13:34
Dmitry11: как ты увидишь причину?
13:34
да и сама постановка задачи странна
13:35
почему не обнаружился линк между X и Y
13:35
:)
Dmitry11 #
13:35
постанова нормальна
13:35
два окна. В каждом - железка
13:35
Выбираем в каждом окне интерфейс
13:35
Смотрим, по каким критериям NOC может создать линк.
13:36
Т.е. куски скриптов get_spannong_tree, get_lldp_neighbors и т.п., что именно относится к выбранным интерфейсам
ss_ #
13:37
mikevlz, fe
Dmitry11 #
13:51
вот и убежал dvolodin
ss_ #
13:55
Dmitry11, поможещь допилить huawei + cisco?
13:55
линки рисовать
Dmitry11 #
13:55
не помогу
ss_ #
13:55
почему?
Dmitry11 #
13:56
я тушенку нормально протестировать не могу
13:56
без тушенки я править скрипты не буду
13:56
Уже осталось всего пара вещей, мешающих нормальной работе с тушенкой
13:56
Вроде уже почти все победил
ss_ #
13:59
Dmitry11, я не сегодня) на сегодня хватит. Начал колым делать, динамик надо перемотать и восстановить подвес для свина
14:00
Dmitry11, get_chassis_id необходим для дисковери?
14:00
на juniper его далать как то не логично
Dmitry11 #
14:01
не логично
14:01
да
14:01
get_chassis_id используется в основном для свичей
ss_ #
14:01
Dmitry11, а он необходим для построения карт?
Dmitry11 #
14:02
да
ss_ #
14:02
пиля
Dmitry11 #
14:02
но для свичей
ss_ #
14:02
а как джинипер с коммутаторм можно слинковать?
Dmitry11 #
14:03
т.е. тех железяк, которые не умеют gat_interfaces и т.п.
14:03
по MAC, ARP, LLDP
mikevlz #
14:03
ээээээ
14:03
не вводи в заблуждение
ss_ #
14:03
LLDP в общемсделал но есть нюанс
14:04
mikevlz, ?
mikevlz #
14:04
get_discovery_id нужен для того чтоб собрать таблицу соответствия MO <-> chassis_id/topology_id
14:04
свич или не свич - ему пофигу
14:05
в тех джобах, что я смотрел, remote_object определяется исключительно через discovry_id
Dmitry11 #
14:05
Надо dvolodin'а сюда выдернуть хотя-бы на пол-дня
mikevlz #
14:05
а стоп
14:05
кажись я гоню
14:05
разговор про chassis_id
14:06
он ща не играет рояля, нужен был в основном для старой топологии, вроде
14:06
ну и мож инвентаризацию кто захочет сделать
Dmitry11 #
14:06
играет роль, для поиска по MAC или LLDP, когда на другом конце линка свич 2-го уровня
ss_ #
14:07
mikevlz, Dmitry11 какие скрипты нужны для рисования линков по lldp на juniper
Dmitry11 #
14:08
get_interfaces и get_lldp_neighbors
14:08
Если удаленное устройство - свич 2-го уровня, то get_chassis_id
14:09
И get_mac_addresss_table на удаленном свиче и get_arp на juniper
ss_ #
14:10
удаленное устройство S5300 хуявей
Dmitry11 #
14:10
Поэтому я и говорю, надо приложение, которое покажет, какие скрипты отработали, и что выдали
mikevlz #
14:14
get_discovery_id требует скрипты get_fqdn и get_chassis_id
14:14
хотябы один из двух
ss_ #
14:15
get_chassis_id ээ как бы его на juniper замутить?
mikevlz|3 #
14:17
открой кошкин скрипт и посмори
14:17
копипаста рулит
14:17
будь индусом :)
ss_ #
14:19
mikevlz|3, я на джинипере команд мало знаю) какую вводиь чтоб маки увидить на интерфейсах?
mikevlz|3 #
14:23
у меня нет джуниперов
ufir #
14:27
show interfaces xe* | match "Hardware address"
14:27
вместо xe можно писать любые
14:28
вот пример
14:28
{master}
14:28
km@jnr01-yla-pet> show interfaces * | match "Hardware address"
14:28
Current address: 78:19:f7:07:26:72, Hardware address: 78:19:f7:07:26:72
14:28
Current address: 78:19:f7:07:26:73, Hardware address: 78:19:f7:07:26:73
14:28
Current address: 78:19:f7:07:26:74, Hardware address: 78:19:f7:07:26:74
14:28
Current address: 78:19:f7:07:26:75, Hardware address: 78:19:f7:07:26:75
14:28
Current address: 78:19:f7:07:26:76, Hardware address: 78:19:f7:07:26:76
ss_ #
14:29
ufir, а маки не попорядку
14:29
Current address: 5c:5e:ab:08:10:90, Hardware address: 5c:5e:ab:08:10:90
14:29
Current address: 5c:5e:ab:08:10:a8, Hardware address: 5c:5e:ab:08:10:a8
14:29
Current address: 5c:5e:ab:08:10:11, Hardware address: 5c:5e:ab:08:10:11
ufir #
14:30
да..
14:30
а это обязательно ?
ss_ #
14:31
ну в get_chassis_id вроде диапазон
14:31
или можно как то по другому?
ufir #
14:33
а задача-то какая - получить список сортированных маков ?
ss_ #
14:33
нет диапазон маков принадлежащих железке
ufir #
14:35
km@jnr01-yla-pet> show chassis mac-addresses
14:35
MAC address information:
14:35
Public base address 78:19:f7:07:20:00
14:35
Public count 1984
14:35
Private base address 78:19:f7:07:27:c0
14:35
Private count 64
ss_ #
14:36
о
14:36
круто
ufir #
14:36
это на MX480
14:37
на других МХ должно быть так же
ss_ #
14:38
у меня тоже работает
14:38
надо скрипт запилить)
14:51
начало есть
14:51
надо распарсить
Dmitry11 #
14:59
На роутерах могут быть MAC адреса из разных диапазонов
ufir #
14:59
(С) КО
Dmitry11 #
14:59
В той же OS.FreeBSD, если всунуть карточки разных вендоров
14:59
Поэтому get_chassis_id только для свичей L2
ss_ #
15:00
Dmitry11, лучше скажи ка прибавить к 78:19:f7:07:20:00 + 1984
Dmitry11 #
15:00
А для L2+ и выше - get_interfaces
15:00
ss_: get_interfaces используй
ss_ #
15:01
Dmitry11, есть он
15:01
работает
Dmitry11 #
15:01
тогда зачем тебе get_chassis_id ?
ss_ #
15:01
Dmitry11, линк не рисуется
Dmitry11 #
15:02
Значит нужно понять, почему он не рисуется
ss_ #
15:02
кто бы помог
15:02
я знаю одно, что джинипер отдает линк хитро
15:03
<S5300_ATS-CATS_SW2>dis lldp neighbor interface XGigabitEthernet 0/1/1
15:03
XGigabitEthernet0/1/1 has 1 neighbors:
15:03
Neighbor index : 1
15:03
Chassis type :macAddress
15:03
Chassis ID :5c5e-ab08-10c0
15:03
Port ID type :local
15:03
Port ID :511
15:03
Port description :Huawei_S5300_AG6
15:03
System name :MX80_Kanash
15:03
System description :Juniper Networks, Inc. mx80 , version 10.4R7.5 Build date: 2011-09-08 06:06:42 UTC
15:03
System capabilities supported :bridge router
15:03
System capabilities enabled :bridge router
15:03
Expired time :112s
15:03
Port ID Port ID type
15:03
это его так с 5300 видно
Dmitry11 #
15:03
а у тебя на huawei есть порт 511 ?
ss_ #
15:04
нет
Dmitry11 #
15:04
ой. На Juniper
ss_ #
15:04
это порт джинипер это индекс
mikevlz|3 #
15:05
Dmitry11: чтоб джоб понял, кто у него на другом конце сидит, он должен отрезолвить соседа по маку. Поэтому на джуне надо get_chassis_id
ss_ #
15:05
X80_Kanash> show interfaces xe-0/0/3
15:05
Physical interface: xe-0/0/3, Enabled, Physical link is Up
15:05
Interface index: 145, SNMP ifIndex: 511
15:05
Description: Huawei_S5300_AG6
15:06
ifIndex: 511
Dmitry11 #
15:06
О!
mikevlz|3 #
15:06
5300 же говорит, что сосед известен по маку, мак такой-то
ss_ #
15:06
mikevlz|2, говорит но линк не строит
Dmitry11 #
15:06
это MAC не шасси, а интерфейса
ss_ #
15:07
Dmitry11, значит надо чтоб все маки интерфейсов были chassis_id?
mikevlz|3 #
15:07
19:09:14] <ss_> Chassis type :macAddress
15:07
[19:09:14] <ss_> Chassis ID :5c5e-ab08-10c0
Dmitry11 #
15:07
А Juniper.GUNOS.get_interfaces выдает "snmp_ifindex"
15:08
Всего-то надо по этому ifindex найти интерфейс
mikevlz|3 #
15:08
\хе
15:08
нифига
15:08
джоб должен сначала узнать кто сосед в базе МО
Dmitry11 #
15:09
Что, кстати, сделано в fm/classifier/__init__.py в функции fixup_ifindex()
mikevlz|3 #
15:09
джоб сделает поиск в базе DiscoverId по маку, нифига не найдет
Dmitry11 #
15:09
MAC должен вернуть get_interfaces
mikevlz|3 #
15:09
потому что нет get_chassis_id для джунипера
15:09
ёпт
15:10
почитай код джоба
Dmitry11 #
15:10
Т.е. искать не только по MAC адресам get_chassis_id, но и по MAC адресам, возвращаемым get_interfaces
mikevlz|3 #
15:10
lldp_discovery
Dmitry11 #
15:10
Так это не ко мне, а к dvolodin'у
mikevlz|3 #
15:10
затык будет именно на поиске remote_object
ss_ #
15:10
в базу ни одного каднидадта не попало
mikevlz|3 #
15:11
не найдется remote_object - не будет кандидата. Нет кандидата - нет линка
Dmitry11 #
15:11
Я ему в личке уже написал, чтобы он исправил lldp_discovery
mikevlz|3 #
15:11
до поиска интерфейса не дойдет
Dmitry11 #
15:11
Там кучу всего исправлять надо
ss_ #
15:11
Dmitry11, кто бы занялся причесыванием
Dmitry11 #
15:12
Как минимум 4 issue по lldp_discovery
ss_ #
15:13
Dmitry11, рядом с 62 строкой # Find by id
15:13
f = {
15:13
3: self.get_neighbor_by_mac, # macAddress(3)
15:13
4: self.get_neighbor_by_mac, # macAddress(4)
15:13
5: self.get_neighbor_by_ip, # networkAddress(5)
15:13
7: self.get_neighbor_by_local # local(7)
15:13
}.get(chassis_subtype)
15:13
File: inv/discovery/jobs/lldp_discovery.py
Dmitry11 #
15:13
Нет. Не то
15:13
Жто я ложанулся
15:13
Надо добавить в get_remote_port(self, object, remote_port, remote_port_subtype):
15:14
1: self.get_remote_port_by_name, # interfaceAlias(1)
mikevlz|3 #
15:15
ёпт
15:15
НЕ ДОЙДЕТ до порта
Dmitry11 #
15:15
А в функцию et_remote_port_by_name() вызов fixup_ifindex(), имя интерфейса - число больше тысячи
mikevlz|3 #
15:15
надо сначала объект определить remote_object по маку
Dmitry11 #
15:16
А для этого lldp_discovery должна искать MAC адрес не только те, которые возвращаются get_chassis_id, но и те, которые возвращаются get_interfaces
ss_ #
15:16
Dmitry11, get_remote_port_by_name() где?
Dmitry11 #
15:17
inv/discovery/jobs/lldp_discovery.py
mikevlz|3 #
15:17
ss_: link_discovery.py еще посмотри. Там тоже функции есть веселые
ss_ #
15:19
Dmitry11, def get_remote_port_by_name(self, object, port):
15:19
return object.profile.convert_interface_name(port)
15:19
не пойму как добавить
mikevlz|3 #
15:19
Dmitry11: убедил
Dmitry11 #
15:19
Надо приложение, где можно выбрать две железки, и посмотреть, как между ними происходит связь
mikevlz|3 #
15:19
вон, HaLVeR-а надо озадачить
Dmitry11 #
15:19
ss_: if int(port) > 1001:
ss_ #
15:20
Dmitry11, джунипер с 500 отдает
15:21
def get_remote_port_by_name(self, object, port):
15:21
if int(port) > 501: ###NEW
15:21
fixup_ifindex()
15:21
return object.profile.convert_interface_name(port)
15:21
так?
Dmitry11 #
15:21
значит нужно workaround делать для железок. Т.е. костыль в lldp_discovery.py
15:22
типа так. Но не заработает. там еще нужно импортировать нужные классы
ss_ #
15:22
Dmitry11, подскажи какие
15:22
поробуем
15:22
скоро на работе жить буду )))
Dmitry11 #
15:23
Если мы узнали, что за железкак у нас на другом конце, то мы знаем ее профиль SA, соответственно можем конвертить интерфейс, как нам вздумается
15:23
ss_: Завтра попробую достучаться до dvolodin'а
ss_ #
15:24
Dmitry11, скажи хотябы про классы какие подгрузить
Dmitry11 #
15:24
да я не знаю сам
ss_ #
15:35
Dmitry11, лог дискавери посмотреть хочешь?
Dmitry11 #
15:35
я в нем ничего не понимаю
ss_ #
15:36
2013-02-21 19:39:16,795 [inv.discovery] Running job lldp_discovery(MX80_Kanash)
15:36
2013-02-21 19:39:19,497 [inv.discovery: lldp_discovery(MX80_Kanash)] get_neighbor(00:25:9E:97:CF:18, 4) -> S5300_ATS-VOST_SW1
15:36
object = <ManagedObject: MX80_Kanash>
15:36
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]
15:36
object = <ManagedObject: MX80_Kanash>
Dmitry11 #
15:36
Поэтому и предлагаю сделать приложение, в котором можно тестировать нахлждение связей между двумя объектами
ss_ #
15:36
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]
15:36
{'object': <ManagedObject: MX80_Kanash>,
15:36
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]}
15:38
2013-02-21 19:36:27,202 [inv.discovery: lldp_discovery(MX80_Kanash)] get_neighbor(00:25:9E:97:CF:18, 4) -> S5300_ATS-VOST_SW1
15:38
object = <ManagedObject: MX80_Kanash>
15:38
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]
15:38
object = <ManagedObject: MX80_Kanash>
15:38
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]
15:38
{'object': <ManagedObject: MX80_Kanash>,
15:38
'remote_system_name': 'S5300_ATS-CATS_SW2'}]}]}
15:38
2013-02-21 19:33:10,476 [inv.discovery: lldp_discovery(S5300_ATS-CATS_SW2)] get_neighbor(4C:B1:6C:34:7C:44, 4) -> 33-30LetPob27p2
15:38
object = <ManagedObject: S5300_ATS-CATS_SW2>
15:38
'remote_system_name': 'MX80_Kanash'}]}]
15:38
object = <ManagedObject: S5300_ATS-CATS_SW2>
15:38
'remote_system_name': 'MX80_Kanash'}]}]
15:38
{'object': <ManagedObject: S5300_ATS-CATS_SW2>,
15:38
'remote_system_name': 'MX80_Kanash'}]}]}
15:38
Dmitry11, т.е. они вроде как видят друг друга но каких то условий не хватает
Dmitry11 #
15:39
надо приложение, в котором можно отобразить более детальную информацию. цветами подсветить ошибочные условия и совпадающие условия
ss_ #
15:40
Надо
15:42
домой
MindGames #
17:39
привет.
17:39
есть кто?
Tweet
Share this page
Share this page: Tweet