nocproject.org
04:24
dvolodin, пояснить можешь почему не строиться линк между Juniper и Cisco catalist по LLDP? Друг друга видят корректно
 
04:24
что скрипты выдают с обеих сторон?
 
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, какие еще необходимы условия для построения линка?
 
04:36
remote chassis id и report_port с обоих сторон
04:36
remote
 
04:38
remote_port как видно 'Gi 0/5' 'Gi0/5'
04:38
В этом дело?
04:40
в инвертори имя интерфейса с пробелом, а по LLDP циска отдает без пробела
04:41
dvolodin, статус  Feedback  в 
NOC-952?
04:41
Что означет?
 
04:45
ss_: нужна обратная связь от открывшего заявку - ну там работает или нет и всё такое
 
04:46
обновиться чтоль и проверить?
 
04:46
ну да... или вручную изменённые файлы накатить
 
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
05:03
Что же не так?
05:12
05:13
dvolodin, посмотришь?
05:19
 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'
 
05:22
zi_rus, это мак порта
 
05:23
ss_, но на сколько я знаю алгоритм, он работает по chassis_id
05:23
если это не так то только Он тебе поможет
05:25
у меня сеть на этих МЕ-шках но ллдп мы не используем так что ничего не смогу проверить
 
05:26
zi_rus,  chassis_id    что за сущность?
 
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
 
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
как быть?
 
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
на нем надо смотреть
 
05:38
zi_rus, какой chassis_id должен он показать?
 
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
по честному, не через скрипт
 
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
 
05:45
все вывалил
05:45
похоже китаец гонет
05:46
думаю, без костыля не обойтись
05:47
ss_, зарепорть хуавею баг :)
 
05:49
zi_rus, ты скажи что должен вывалить, костыль придумаю
 
05:51
китаец должен возвращать chassis_id, а он возращает port id
 
05:54
Chassis ID     :0022-565b-ce85    должен быть  00:22:56:5B:CE:80 ? правильно?
05:55
05:57
zi_rus, помоему это баг в скрипте get_chassis_id
05:57
на циско
05:57
он выдает только 1 мак, а должен диапазон
 
05:58
ss_, посмотри на циске stp, что написано в bridge_id
05:58
просто sh spanning tree
 
05:58
No spanning tree instance exists.
05:59
там его нет
 
05:59
ну создай какой-нибудь влан
 
05:59
на своих можешь глянуть?
 
05:59
zi_rus, один мак везде?
 
05:59
я хочу чтобы ты сам увидел что  со скриптом все в порядке
05:59
да
05:59
один
06:00
rep/stp/udld
 
06:00
есть вообщем мысль по костылю
 
06:00
хотя udld по серийнику работает
 
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
но когда они ипсравят
 
06:02
zi_rus, да ладно, этож хуявей
 
06:03
проще, заигнорить chassis_id и построить связь по system_name
 
06:03
не знаю, ты же решил костыль делать
 
06:04
zi_rus, ну чтобы игнорить  chassis_id то нужно понимать как работает алгоритм построения линка
06:05
еще не работает построение линком между джуниперами и хуявеяви
 
06:05
тогда ты зна кого спрашивать, все эти алгоритмы написаны одним человеком
06:05
здесь
 
06:05
<ss_> dvolodin, какие еще необходимы условия для построения линка?
06:05
<dvolodin> remote chassis id и report_port с обоих сторон
06:05
<dvolodin> remote
 
06:25
совпадение с обоих концов
06:26
кстати, напрашивается у нас метод ManagedObject.get_interface(name)
06:26
с нормализацией имени по профилю
 
06:30
dvolodin, т.е. проблема с кривой реализаций протоколов может уйти?
 
06:31
да нет
06:31
это так, красотизм
06:31
нужно чтобы совпадали объекты и интерфейсы с обоих сторон
06:31
Huawei, вот,  description вообще шлет
 
06:31
ss_, а не проше ли написать get_chassis_id и не изобретать костыли?
 
06:32
ApmeM_Skripnik, для какой железки:?
 
06:33
у тебя ведь хуавей и джунипер, на одном из профилей этот скрипт отсутствует или неправильно выдает информацию.
06:33
вот для этого профиля и писать/править
 
06:35
ApmeM_Skripnik, на обоих нормально они работают
 
06:35
 ss_: get_chassis_id на твоем каталисте что возвращает? Особенно тебя интересует поле MAC
06:37
если вернет диапазон, в который входит мак 5-го порта, тогда из вывода хуавея НОК должен определить соседа и проблему надо искать дальше
06:37
в именах портов
 
06:38
mikevlz, для каталистов возвращается один мак
 
06:38
тогда ой
06:39
значит надо, чтоб get_chassis_id возвращал и остальные для каталистов
 
06:40
<ss_> zi_rus, помоему это баг в скрипте get_chassis_id
06:40
<ss_> на циско
06:40
<ss_> он выдает только 1 мак, а должен диапазон
 
06:40
на самом деле я думаю вполне достаточно находить мак в базе, тут говорили что такая база ведется
 
06:40
вот про это тебе иговорят
 
06:40
база ведется, если включена
 
06:41
сделать обязательным условием для дискавери и всего делов
 
06:42
<mikevlz>, а snmp_ifindex участвует в построении линков?
 
06:45
нет. Для lldp по-крайней мере нет такой функции. Ремотпорт может найти по маку и по имени.
06:45
но всегда можно такую функцию дописать
06:45
тогда станет искать
 
06:48
<mikevlz>, у меня есть проблема с алкателем. он по ллдп отдает не имя порта, а ifindex
06:50
использование snmp_ifindex решило бы проблему
 
06:52
тут надо выполнить два маленьких условия
 
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
 
06:53
1 - убедиться, что все соседи всех алкателей отдают в get_interfaces еще и ifindex, который пишется в базу
06:53
2 - дописать поиск remote port по ifindex
06:54
ss_: bt.
 
06:54
ss_:  nocpro
06:54
=)
06:55
issue делай вот шо имею в виду
 
06:55
ApmeM_Skripnik, джиниперы по LLDP тоже индекс отдают
06:55
надо реквест фичу писать
06:55
mikevlz, неосилю
06:55
давай лучше костыль
 
06:55
осиливай
06:55
иначе будет только у тебя костыль
06:56
а так - может попадет в основную ветку
 
06:56
<mikevlz>, наверное я не правильно обьяснил - у меня только алкател отдает вместо порта ifindex. соседи отдают алкателю информацию коректно
 
06:56
ss_ закинешь шаблонов ?
 
06:56
mikevlz, чтобы написать ису надо сформулировать что не рабоает, а я не знаю точного алгоритма и из-за чего это не пашет
 
06:56
и не будут толпы гулять с вопросом "а чо у меню хуавей с циской по ллдп не нюхаются?"
 
06:57
ApmeM_Skripnik: мммм. На ком исполняется поиск нейборов?
 
06:58
ApmeM_Skripnik: то есть что-то в духе: "Если запустить на алкателе get_lldp_neighbors, то он, собака, в ответе скажет, что на порту ifindex он нашел соседа длинка с портом portname"
 
06:59
причем с еджкорами 3510 отдельная беда. там порт вообще выдается в непонятном виде
06:59
<mikevlz>, давай я покажу вывод с алкателя и с соседа. тогда станет понятно
 
07:00
ApmeM_Skripnik: то-есть, если я правильно понял, спрашиваем у длинка/эджкора кто у них соседи - они отвечают: алкатель какой-то, порт его - Ifindex
07:00
показывай
07:01
ss_: чтобы понять, как работает поиск соседей надо залезть в исходники: Inv/discovery/jobs/link_discovery.py и lldp_discovery.py
 
07:01
mikevlz, джунипер + хуявей
07:01
mikevlz, спасибо глянем
 
07:02
кстати циска замечательно себе видит хуавей по ллдп
 
07:02
ss_: ты уже определись. Кто там с хуавеем рядом. Всю дорогу мы говорим, что для циски в ид возвращается только один мак, а нюхаются у нас джуниппер с хуавеем
 
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,
 
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
 
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
похоже индекс интерфейса
 
07:04
ufir, индекс, точно я проверял вчера
07:04
нужно чтоб при поиске линком испольхзовались еще сопоставление индек-имя интерфейса
 
07:04
т.е. надо сначала ifindex выдаргивать
 
07:05
ApmeM_Skripnik: решение чуть проще. get_interfaces для алкателя возвращает ifindex портов?
 
07:05
ufir, в интерфейс инвертори уже есть
 
07:05
нет, он возвращает 1/25
 
07:05
не-не-не... Скрипт кроме имени МОЖЕТ возвращать еще и индекс порта
07:06
просто грязным хаком это обходить не стОит
 
07:06
какой параметр за это отвечает?
07:06
snmp_ifindex,
 
07:06
выполни на алкателе get_interfaces
 
07:08
если возвращает, то надо будет дописать get_interface_by_ifindex в lldp_discovery.py
 
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'],
 
07:09
ApmeM_Skripnik:  тот самый snmp_ifindex
 
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, оно?
 
07:09
ага... возвращает
07:10
значит должно в базу писаться, а значит для алкателя надо допиливать
07:10
lldp_discovery
07:10
ss_: не-а, не сделаю :/
 
07:10
еще момент - в базу он их не пишет
 
07:11
ApmeM_Skripnik: как проверил?
 
07:11
1. визуально - посмотрел в inventory - interfaces
07:11
2. посмотрел в монге
07:12
хотя в логах имеется информация что snmp_ifindex найден
 
07:13
в веб-морде нет поля для ифиндекса вообще. В монге поле зовется ifindex, а не snmp_ifindex
07:13
лучше в шелле попробуй
 
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 еще выведи
 
07:16
[<SubInterface: 6850-u24x 1/22>]
07:16
>>> s1[0].ifindex
07:16
1022
07:16
>>>
 
07:17
вот
07:17
видишь, есть в базе индекс...
07:19
значит делай issue, что длинки и эджкоры видят порт алкателя в lldp как locla(7), при этом порт идентифицируется по ifindex
 
07:19
понял, а я его смотрел в noc.interfaces
 
07:20
не, если глянуть интерфейс SAE, то видно в какую модель должно запихнуться
 
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
и как с ним работать?
 
07:23
а вот хрен его знает... порт алкателя 17-й?
 
07:24
с remote_chassis_id_subtype  какие варианты бывают?
 
07:24
из разряда догадок :)
 
07:24
кстати да, 17-й
07:25
вот удиви меня - откуда догадка?
 
07:28
я конечно наивный албанский дурачок, но разве 0х31 это не 1? %)
07:29
получается просто строка 1-0-1-7, убираем минусы - получаем 1017, только тип порта неверный, это опять ифиндекс, а не портнэйм
07:29
кататак
 
07:31
вот как тут обойтись без мата?????
07:31
 0х31 - кто бы мог подумать ???
 
07:32
у каждого свой lldp с блек джеком и шлюхами
 
07:32
0х31 - имелось в виду что 31 шестнадцатиричное соотвествует коду цифры 1
07:33
а так да... индусам-программистам надо вешать перед носом плакат с надписью "не пей и не кури!"
 
07:34
поздно... это уже на генном уровне.
07:35
осталось придумать что с этим счастьем теперь делать.
 
07:36
ApmeM_Skripnik, тихонько напевает "А мы сделаем свои костыли с "блек джеком и шлюхами""
07:36
))))
 
07:40
подобное лечится подобным... есть у кого индуская трава?
 
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   кто скажет какие бывают?
 
07:49
subtypo'в 7, если память мне не изменяет
07:49
смотри LLDP-MIB
 
07:51
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 порта
 
07:57
dvolodin, линки нарисовать тогда должен?
 
07:58
в share/mibs/LLDP-MIB.mib
07:58
ss_: погоди, я не вижу общей картины
 
07:58
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, смотришь? Еще вопрос есть
 
08:10
может кто подскажет - как вот такую хрень '31-30-31-37' определить?
08:11
жаль <_4ePTeHok> редко появляется
 
08:18
все сбегают
08:18
)
 
08:22
неуловимый dvolodin
 
08:22
Dmitry11, может ты подскажешь
08:22
?
 
08:23
я не могу до сих пор с новой тушенкой разобраться.
 
08:23
фиг с этотой тушенко
08:23
й
 
08:23
Часть функциональности попросту отсутствует, или непонятно как делать
 
08:23
скажи почему линк не рисует
 
08:23
Нет данных
08:24
С обеих сторон должны бвть данные
 
08:25
ну так там разные имена интерфейсов.
 
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',
 
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'}]}]
 
08:28
Судя по всему, lldp_discovery смотрит только на get_chassis_id
 
08:29
должен по 'remote_chassis_id_subtype': работать
 
08:29
и не смотрит на MAC адрес интерфейса
 
08:30
похоже на то
08:30
а get_chassis_id  должен давать один мак или диапазон маков включая маки интерфейсоф?
 
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
 
08:33
тем более, что в inv/discovery/jobs/lldp_discovery.py ошибка
08:34
В строке 62
08:34
потому как MAC Address - это 3-й subtype, а не 4-й
08:34
Потому оно и не работает
 
08:35
Dmitry11, о как, а как исправить?
 
08:35
<Dmitry11>, а с патчем для длинка что-то решилось?
 
08:35
исправь на 3.
08:35
ApmeM_Skripnik: Я не могу прогнать тесты :(
08:35
Тушенка не работает
 
08:36
Без тестов никаких коммитов в SA не делаю
08:36
Все дружно ждем dvolodin'а
 
08:38
Dmitry11, не нарисовал линки
 
08:38
должно отдискаверить сначала
 
08:38
перезапустил на обоих железках
 
08:39
а get_chassis_id так и отдает один мак?
 
08:40
тогда и не нарисует
 
08:44
 get_chassis_id надо перепиливать я так понимаю
08:44
вопрос правильно ли будет если он будет возвращать все маки
 
08:44
да.
08:44
нет. он должен вернуть первый и последний мак
08:45
т.е. диапазон. "от" и "до"
 
08:45
Это я и думал
08:45
а вертает не то
08:46
sa/profiles/Cisco/IOS/get_chassis_id.py   сдесь видно что для 4000/4500   7600  и прочего диапазон
 
08:54
По идее оно смотрит и MAC адреса интерфейсов. Но, опять же повторюсь, из-за бага в lldp_discovery.py оно не работает
 
09:28
Dmitry11: а что с тестами? у меня одна проблема - заливка их в репо, а локально - работает: ./noc test --beef-filter=Zyxel.ZyNOS noc.stop
09:28
как-то так, например
 
09:31
проверь у себя на всякий случай
09:32
если трейсы вылезут - надо искать - или реально поломанная тушёнка, либо косяк в механизме работы тестов
 
09:33
У меня %./noc test --beef-filter=DLink.DxS noc.stop
09:33
начал какого-то тестировать прпофиль Dlink.DxS_Cisco_CLI
 
09:33
Dmitry11, баг исправляется             3: self.get_remote_port_by_mac,   # macAddress(3)
09:33
так?
 
09:36
Dmitry11: ну так он тоже под фильтр попадает, получается так
 
09:36
попробуй так, например: ./noc test --beef-filter=DLink.DxS.get_chassis_id noc.stop
 
09:37
DLink.DxS.get_chassis_id проходит
09:37
но иногда нужно протестировать весь профиль. Особенно, если я хочу исправить тушенку
 
09:38
ну да... надо посмотреть, может фильтр регэкспы умеет
09:40
не, там оказывается просто startswith используется
09:41
о, вот так: ./noc test --beef-filter=DLink.DxS. noc.stop
 
09:41
$%^$^%
09:45
Все дружно ждем dvolodin'а
 
09:53
таки да, я поторопился... есть там баги с тестами, так что ждём
09:54
например DLink.DxS_Cisco_CLI.get_version - у меня такое же при тесте Zyxel.ZyNOS.get_interfaces...
09:56
откуда-то там появляется u перед некоторыми строками
 
09:57
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)'}
 
10:04
Все дружно ждем dvolodin'а
 
10:04
опять же для DLink.DxS, например, отрабатывают нормально тесты - в чём фокус?
10:07
Dmitry11: в последнее время наблюдается тенденция "делай сам, если хочешь, чтобы это было сделано" (ни в коем случае не наезд, просто мне так кажется)
 
10:07
Да я бы сделал, но права коммита у меня нету
 
10:07
и в этом есть и минусы, и свои плюсы тоже
 
10:08
Я могу коммитить только в часть каталогов. dvolodin хочет держать руку на пульсе
 
10:08
lexus-omsk, каждый творец своего нока
 
10:10
Когда создавался NOC, было по-моему три разработчика. Из них остался только dvolodin. Кроме него никто не знает "потроха". Я же охватил только маленький кусочек.
 
10:10
ну в общем-то правильно делает :) нам открыта лишь небольшая часть замысла
 
10:13
10:18
Особенно нужны документописатели, потому как документация совершенно не отражает текущее состояние дел
10:18
Плюс порог вхождения очень высок
 
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
 
10:27
Ну, человек должен как минимум знать python, django и т.п.
 
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   выдает маки все от железа и последний от интерфейса
 
10:29
я не уверен, что нужно мучать get_chassis_id. Оно само достает информацию из get_interfaces. get_chassis_id сделан для тех профилей, которые не умеют выдавать MAC адреса на интерфейсах
10:29
Но это нужно уточнить у dvolodin'а
 
10:29
Dmitry11, а по другому я не знаю как делать
 
10:30
Все дружно ждем dvolodin'а
 
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'}
 
10:45
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
 
10:46
Dmitry11, 2950 3400 нет
10:46
там нет такой команды
10:47
можно так посмотреть на них show int | include bia
 
10:47
Логика выдачи MAC адресов у других вендоров может быть совсем другой
 
10:47
другие и не трогаем
10:47
только каталисты
 
10:49
У тех же роутеров совсем другой алгоритм выдаси MAC адресов. Поэтому забей на get_chassis_id
10:49
Оно должно смтреть MAC адреса на интерфейсах
 
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'}]}]
 
10:56
у  'Kan-ME3400' в базе есть интерфейс Gi 0/5?
 
11:01
<mikevlz>, если в базе у subinterfaces имеется значение ifindex оно должно отображаться в веб-е?
 
11:01
Kan-ME3400   в ноке был записан как Kan_ME3400
 
11:02
не уверен, но врядли это существенно
 
11:22
вообщем линков так и нет
11:23
у кого есть мысли кроме ждем володина?
 
11:24
))) ждем mikevlz, может он что интересного скажет.
11:24
если бы знать как, то можно было бы парсить вывод discovery
 
11:30
вообщем я сдаюсь
11:31
а хотел еще джинипер
 
11:47
ss_: хотя вроде в lldp_discovery.py все правильно
 
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, подсобишь?
 
11:58
ss_. у себя тоже нашел пару железок которые не не находят линки между собой. хотя с другими соседями все в порядке. в частности длинк 3200 и еджкор 3510
 
11:58
щаз на пастебин вывод запилю чтоб чат не засирать
 
11:58
и такая же ситуация как у тебя. вроде все нормально а не работает.
11:59
вот и думаю, может тут remote_port_subtype, remote_chassis_id_subtype, remote_capabilities как-то замешаны?
 
11:59
не находит линк между парой железок?
 
11:59
ApmeM_Skripnik, тут особая магия
 
12:00
под парой подразумевается железка и сосед
 
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
 
 
12:06
ss_: 2 линка между ними?
 
12:06
mikevlz, да
12:07
"id первого объекта  как узнать то?
12:07
а все в веб морде по ссылкам нашел
 
12:08
ну например, так...
 
12:08
>>> o1 = PendingLinkCheck.objects.filter(local_object="14")
12:08
>>> o2 = PendingLinkCheck.objects.filter(local_object="712")
12:08
>>> o1,o2
12:08
([], [])
 
12:09
нифига в базу не добавило?
 
12:09
mikevlz, непойму
12:10
может просто как то не так работает?
12:10
o1,o2 либо там масив
 
12:10
о1 и о2 массивы, т.к. используется фильтр
 
12:11
>>> o2.count()
12:11
0
 
12:11
эт нормально
12:11
тогда смотри логи дискавери. Оно пишет, что и как происходит...
 
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, что это значит?
 
12:19
это значит, что в базе есть две записи. Первая запись  - о линке по lldp от S5300_ATS-CATS_SW1 с порта GigabitEthernet0/0/22 до Kan-ME3400 в порт Gi 0/10
 
12:19
во всей базе всего два линка?
12:19
на карте нет этих линков
 
12:19
второе - по аналогии расшифруй. проблема в том, что скорее всего интерфейсы S5300_ATS-CATS_SW1 в базе имеют не такие имена
12:20
это еще не линки. Это кандидаты
 
12:20
а
12:20
mikevlz, подскажи как через шел найти
12:20
в вебе имена совпадают
 
12:20
думаю, что нужно тупо сделать приложение, которое будет показывать, как создаются линки
 
12:20
почитай в блогах, я общий ход дискавери линков расписывал
 
12:20
Т.е. две панели. На них два устройства
 
12:21
для каждого из этих устройств пишется, по каким критериям выбрало "соседа"
12:21
Чтобы можно было посмотреть
 
12:21
12:22
12:22
осталось полирнуть и закоммитить
 
12:22
А заодно выбрать вручную, как соединяются эти две железки
12:23
ну как-то так
12:23
т.е. выбираем две железки, по порту на них. И смотрим, что на discovery говорит для этих портов
 
12:23
по сути это морда к Pending Link Check "подтвердить этот линк"
12:23
нет
12:24
вручную залинковать можно из инвентори
 
12:25
mikevlz, я читал блог
12:27
в Inventory->Interfaces у ME3400 name Gi 0/xx
12:28
Inventory->Interfaces у S5300 name GigabitEthernet0/0/xx
12:30
не уловимый)))
 
12:32
dvolodin, можут ты можешь?
12:32
 
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
 
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  как запусить и куда ставить? В коерь распаковывать?
 
12:43
в inv/apps распаковать, постапдейт. рефрешнуть веб-морду
 
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, что не так?
 
12:48
раскомментируй там импорт PendingLinkCheck
12:48
в views.py
 
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
 
12:50
закомментируй назад =)
 
12:51
NameError: name 'PendingLinkCheck' is not defined
12:51
post-update: : sync-perm failed
12:51
пиля ромашка)
 
12:51
эт понятно....
12:51
в inv/models/__init__.py есть импорт этой модели?
 
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
нет
 
12:52
добавь туда from noc.inv.models.pendinglinkcheck import PendingLinkCheck
12:53
Дима наверное смотрит на это и тихо негодует %)
 
12:53
mikevlz, отчего?
12:54
прошло
 
12:54
ты с обновлением как справляться будешь?
 
12:54
mikevlz, что с ними?
 
12:55
если закоммитят что-то в файлы, которые ты правил, придется вручную резолвить изменения
 
12:55
знаю, не раз уже делал так)
 
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 пустой
 
13:05
он не видит локальный интерфейс, потому и не резолвит линк
 
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>]    Тут в сторону хуявея или циски копать?
 
13:05
в сторону МЕ3400. У нее же нет интерфейса?
 
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
не в этом вся проблема?
 
13:11
все остальное вроде показывает что должно быть
13:11
пиля, шли вторые сутки
 
13:14
руками бы быстрее прописал
 
13:15
zi_rus, руками не итнересно
13:16
еееееее
13:16
ура ЗАРАБОТАЛООООО
 
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
 
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
линка с циской
 
13:19
ну еще одну строку добавь
13:19
чтоб 1-ку определяло как имя порта
 
13:20
mikevlz, эм
13:20
пример
 
13:20
Надо править не циску, а lldp_discovery.py
 
13:20
сам добавил InterfaceName,
13:21
еще одну фигню добавь, чтоб индекс имела 1
 
13:21
и еденицу в случае чего приравнивать?
13:25
get_lldp_neighbors  костыль на костыле
 
13:26
дык железо разное, каждый вендор пилит как умеет
 
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
 
13:26
Надо сделать приложение, где можно будет посмотреть, по каим причинам не создаются линки
 
13:26
незнаю нужно сейчас илин нет
13:27
как линки удалить попробую без костылей  с реплейсом
 
13:27
сделай еще один тип remote_port_subtype, который будет соответствовать единице
13:27
в инвентори-интерфейсы щелкни по значку Линк - оно разлинкует
 
13:27
mikevlz, "ТУТ ЧТО ПИСАТЬ НЕЗНАЮ": 1,
13:28
13:28
будем пилить джинимер/алкатель
13:29
следуюущие
13:31
там index порта возвращается
13:32
mikevlz, "ТУТ ЧТО ПИСАТЬ НЕЗНАЮ": 1,
13:34
все без костылей находит
 
13:34
Dmitry11: как ты увидишь причину?
13:34
да и сама постановка задачи странна
13:35
почему не обнаружился линк между X и Y
13:35
:)
 
13:35
постанова нормальна
13:35
два окна. В каждом - железка
13:35
Выбираем в каждом окне интерфейс
13:35
Смотрим, по каким критериям NOC может создать линк.
13:36
Т.е. куски скриптов get_spannong_tree, get_lldp_neighbors и т.п., что именно относится к выбранным интерфейсам
 
13:51
вот и убежал dvolodin
 
13:55
Dmitry11, поможещь допилить huawei + cisco?
13:55
линки рисовать
 
13:56
я тушенку нормально протестировать не могу
13:56
без тушенки я править скрипты не буду
13:56
Уже осталось всего пара вещей, мешающих нормальной работе с тушенкой
13:56
Вроде уже почти все победил
 
13:59
Dmitry11, я не сегодня) на сегодня хватит. Начал колым делать, динамик надо перемотать и восстановить подвес для свина
14:00
Dmitry11, get_chassis_id необходим для дисковери?
14:00
на juniper его далать как то не логично
 
14:01
не логично
14:01
да
14:01
get_chassis_id используется в основном для свичей
 
14:01
Dmitry11, а он необходим для построения карт?
 
14:02
а как джинипер с коммутаторм можно слинковать?
 
14:03
т.е. тех железяк, которые не умеют gat_interfaces и т.п.
14:03
по MAC, ARP, LLDP
 
14:03
ээээээ
14:03
не вводи в заблуждение
 
14:03
LLDP в общемсделал но есть нюанс
14:04
mikevlz, ?
 
14:04
get_discovery_id нужен для того чтоб собрать таблицу соответствия MO <-> chassis_id/topology_id
14:04
свич или не свич - ему пофигу
14:05
в тех джобах, что я смотрел, remote_object определяется исключительно через discovry_id
 
14:05
Надо dvolodin'а сюда выдернуть хотя-бы на пол-дня
 
14:05
а стоп
14:05
кажись я гоню
14:05
разговор про chassis_id
14:06
он ща не играет рояля, нужен был в основном для старой топологии, вроде
14:06
ну и мож инвентаризацию кто захочет сделать
 
14:06
играет роль, для поиска по MAC или LLDP, когда на другом конце линка свич 2-го уровня
 
14:07
mikevlz, Dmitry11 какие скрипты нужны для рисования линков по lldp на juniper
 
14:08
get_interfaces и get_lldp_neighbors
14:08
Если удаленное устройство - свич 2-го уровня, то get_chassis_id
14:09
И get_mac_addresss_table на удаленном свиче и get_arp на juniper
 
14:10
удаленное устройство S5300 хуявей
 
14:10
Поэтому я и говорю, надо приложение, которое покажет, какие скрипты отработали, и что выдали
 
14:14
get_discovery_id требует скрипты get_fqdn и get_chassis_id
14:14
хотябы один из двух
 
14:15
 get_chassis_id ээ как бы его на juniper замутить?
 
14:17
открой кошкин скрипт и посмори
14:17
копипаста рулит
14:17
будь индусом :)
 
14:19
mikevlz|3, я на джинипере команд мало знаю) какую вводиь чтоб маки увидить на интерфейсах?
 
14:23
у меня нет джуниперов
 
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
 
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
 
14:30
да..
14:30
а это обязательно ?
 
14:31
ну в get_chassis_id вроде диапазон
14:31
или можно как то по другому?
 
14:33
а задача-то какая - получить список сортированных маков ?
 
14:33
нет диапазон маков принадлежащих железке
 
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
 
14:36
это на MX480
14:37
на других МХ должно быть так же
 
14:38
у меня тоже работает
14:38
надо скрипт запилить)
14:51
начало есть
14:51
надо распарсить
 
14:59
На роутерах могут быть MAC адреса из разных диапазонов
 
14:59
В той же OS.FreeBSD, если всунуть карточки разных вендоров
14:59
Поэтому get_chassis_id только для свичей L2
 
15:00
Dmitry11, лучше скажи ка прибавить к 78:19:f7:07:20:00 + 1984
 
15:00
А для L2+ и выше - get_interfaces
15:00
ss_: get_interfaces используй
 
15:01
Dmitry11, есть он
15:01
работает
 
15:01
тогда зачем тебе get_chassis_id ?
 
15:01
Dmitry11, линк не рисуется
 
15:02
Значит нужно понять, почему он не рисуется
 
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 видно
 
15:03
а у тебя на huawei есть порт 511 ?
 
15:04
это порт джинипер это индекс
 
15:05
Dmitry11: чтоб джоб понял, кто у него на другом конце сидит, он должен отрезолвить соседа по маку. Поэтому на джуне надо get_chassis_id
 
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
 
15:06
5300 же говорит, что сосед известен по маку, мак такой-то
 
15:06
mikevlz|2, говорит но линк не строит
 
15:06
это MAC не шасси, а интерфейса
 
15:07
Dmitry11, значит надо чтоб все маки интерфейсов были chassis_id?
 
15:07
19:09:14] <ss_> Chassis type   :macAddress
15:07
[19:09:14] <ss_> Chassis ID     :5c5e-ab08-10c0
 
15:07
А Juniper.GUNOS.get_interfaces выдает "snmp_ifindex"
15:08
Всего-то надо по этому ifindex найти интерфейс
 
15:08
\хе
15:08
нифига
15:08
джоб должен сначала узнать кто сосед в базе МО
 
15:09
Что, кстати, сделано в fm/classifier/__init__.py в функции fixup_ifindex()
 
15:09
джоб сделает поиск в базе DiscoverId по маку, нифига не найдет
 
15:09
MAC должен вернуть get_interfaces
 
15:09
потому что нет get_chassis_id для джунипера
15:09
ёпт
15:10
почитай код джоба
 
15:10
Т.е. искать не только по MAC адресам get_chassis_id, но и по MAC адресам, возвращаемым get_interfaces
 
15:10
Так это не ко мне, а к dvolodin'у
 
15:10
затык будет именно на поиске remote_object
 
15:10
в базу ни одного каднидадта не попало
 
15:11
не найдется remote_object - не будет кандидата. Нет кандидата - нет линка
 
15:11
Я ему в личке уже написал, чтобы он исправил lldp_discovery
 
15:11
до поиска интерфейса не дойдет
 
15:11
Там кучу всего исправлять надо
 
15:11
Dmitry11, кто бы занялся причесыванием
 
15:12
Как минимум 4 issue по lldp_discovery
 
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
 
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)
 
15:15
ёпт
15:15
НЕ ДОЙДЕТ до порта
 
15:15
А в функцию et_remote_port_by_name() вызов fixup_ifindex(), имя интерфейса - число больше тысячи
 
15:15
надо сначала объект определить remote_object по маку
 
15:16
А для этого lldp_discovery должна искать MAC адрес не только те, которые возвращаются get_chassis_id, но и те, которые возвращаются get_interfaces
 
15:16
Dmitry11,  get_remote_port_by_name() где?
 
15:17
inv/discovery/jobs/lldp_discovery.py
 
15:17
ss_: link_discovery.py еще посмотри. Там тоже функции есть веселые
 
15:19
Dmitry11,      def get_remote_port_by_name(self, object, port):
15:19
        return object.profile.convert_interface_name(port)
15:19
  не пойму как добавить
 
15:19
Надо приложение, где можно выбрать две железки, и посмотреть, как между ними происходит связь
 
15:19
вон, HaLVeR-а надо озадачить
 
15:19
ss_: if int(port) > 1001:
 
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
так?
 
15:21
значит нужно workaround делать для железок. Т.е. костыль в lldp_discovery.py
15:22
типа так. Но не заработает. там еще нужно импортировать нужные классы
 
15:22
Dmitry11, подскажи какие
15:22
поробуем
15:22
скоро на работе жить буду )))
 
15:23
Если мы узнали, что за железкак у нас на другом конце, то мы знаем ее профиль SA, соответственно можем конвертить интерфейс, как нам вздумается
15:23
ss_: Завтра попробую достучаться до dvolodin'а
 
15:24
Dmitry11, скажи хотябы про классы какие подгрузить
 
15:35
Dmitry11, лог дискавери посмотреть хочешь?
 
15:35
я в нем ничего не понимаю
 
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>
 
15:36
Поэтому и предлагаю сделать приложение, в котором можно тестировать нахлждение связей между двумя объектами
 
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, т.е. они вроде как видят друг друга но каких то условий не хватает
 
15:39
надо приложение, в котором можно отобразить более детальную информацию. цветами подсветить ошибочные условия и совпадающие условия
 
17:39
привет.
17:39
есть кто?
 
    Share this page
    Share this page: