When I try to display some switches I get a web crash. The switches I managed to reproduce it are all HP and these are the models: 2626-PWR and 2620-24-PoEP.
What those switches have in common is that both are PoE capable, have IP phones attached to them and use lldp, so I think it may be related. This is the lldp info it shows from the switch:
2626-PWR# sh ll i r
LLDP Remote Devices Information
LocalPort | ChassisId PortId PortDescr SysName
--------- + ------------------------- ------ --------- ----------------------
2 | xx.xxx.xx.102 00 ... 1 Polycom SoundPoint ...
14 | xx.xxx.xx.28 00 ... 1 Polycom SoundPoint ...
16 | xx.xxx.xx.214 00 ... 1 Polycom SoundPoint ...
17 | xx.xxx.xx.71 00 ... 1 Polycom SoundPoint ...
18 | xx.xxx.xx.100 00 ... 1 Polycom SoundPoint ...
19 | xx.xxx.xx.106 00 ... 1 Polycom SoundPoint ...
20 | xx.xxx.xx.99 00 ... 1 Polycom SoundPoint ...
21 | xx.xxx.xx.91 00 ... 1 Polycom SoundPoint ...
25 | xxxxxxxxxxxxxxxxx 49 49 CE35
26 | xxxxxxxxxxxxxxxxx 49 49 CE37
2626-PWR# sh ll i r 2
LLDP Remote Device Information Detail
Local Port : 2
ChassisType : network-address
ChassisId : xx.xxx.xx.102
PortType : mac-address
PortId : 00 04 f2 xx xx xx
SysName : Polycom SoundPoint IP 331
System Descr : Polycom;SoundPointIP-SPIP_331;2345-12365-001,1;SIP/4.0.4....
PortDescr : 1
System Capabilities Supported : bridge, telephone
System Capabilities Enabled : bridge, telephone
Remote Management Address
Type : ipv4
Address : xx.xxx.xx.102
MED Information Detail
EndpointClass :Class3
Media Policy Vlan id :0
Media Policy Priority :5
Media Policy Dscp :46
Media Policy Tagged :False
Poe Device Type :PD
Power Requested :37
Power Source :Local & PSE
Power Priority :Unknown
2620-24-PoEP# sh ll i r
LLDP Remote Devices Information
LocalPort | ChassisId PortId PortDescr SysName
--------- + ------------------------- ------ --------- ----------------------
2 | 10.119.20.13 00 ... 1 Polycom SoundPoint ...
6 | 10.119.21.13 00 ... 1 Polycom SoundPoint ...
8 | 10.119.21.69 00 ... 1 Polycom SoundPoint ...
10 | TW2249V00Z eth1
10 | 3c d9 2b 7c 2c fa 3c ... Port 1 CE020-HP
25 | 00 11 0a da fb 80 50 50 CE37
26 | 6c c2 17 c0 e0 e0 9 9 CE39
2620-24-PoEP# sh ll i r 2
LLDP Remote Device Information Detail
Local Port : 2
ChassisType : network-address
ChassisId : xx.xxx.xx.13
PortType : mac-address
PortId : 00 04 f2 xx xx xx
SysName : Polycom SoundPoint IP 331
System Descr : Polycom;SoundPointIP-SPIP_331;2345-12365-001,1;SIP/4.0.4....
PortDescr : 1
Pvid :
System Capabilities Supported : bridge, telephone
System Capabilities Enabled : bridge, telephone
Remote Management Address
Type : ipv4
Address : xx.xxx.xx.13
MED Information Detail
EndpointClass :Class3
Media Policy Vlan id :0
Media Policy Priority :5
Media Policy Dscp :46
Media Policy Tagged :False
Poe Device Type :PD
Power Requested :3.7 W
Power Source :Local & PSE
Power Priority :Unknown
This is the traceback info of the 2626-PWR:
NoReverseMatch: Reverse for 'seeddb-netbox-add-suggestion' with arguments '(u'\x01\nw\x14f',)' and keyword arguments '{}' not found.
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 109, in get_response response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/dist-packages/nav/web/ipdevinfo/views.py", line 319, in ipdev_details processors=[search_form_processor]))
File "/usr/lib/python2.7/dist-packages/django/shortcuts/__init__.py", line 20, in render_to_response return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/lib/python2.7/dist-packages/django/template/loader.py", line 176, in render_to_string return t.render(context_instance)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 140, in render return self._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render return compiled_parent._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render return compiled_parent._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 155, in render return self.render_template(self.template, context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 137, in render_template output = template.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 140, in render return self._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 193, in render nodelist.append(node.render(context))
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 426, in render raise e
NoReverseMatch: Reverse for 'seeddb-netbox-add-suggestion' with arguments '(u'\x01\nw\x14f',)' and keyword arguments '{}' not found.
This is the traceback info of the 2620-24-PoEP:
NoReverseMatch: Reverse for 'seeddb-netbox-add-suggestion' with arguments '(u'\x01\nw\x14\r',)' and keyword arguments '{}' not found.
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 109, in get_response response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/dist-packages/nav/web/ipdevinfo/views.py", line 319, in ipdev_details processors=[search_form_processor]))
File "/usr/lib/python2.7/dist-packages/django/shortcuts/__init__.py", line 20, in render_to_response return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/lib/python2.7/dist-packages/django/template/loader.py", line 176, in render_to_string return t.render(context_instance)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 140, in render return self._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render return compiled_parent._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 123, in render return compiled_parent._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 155, in render return self.render_template(self.template, context)
File "/usr/lib/python2.7/dist-packages/django/template/loader_tags.py", line 137, in render_template output = template.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 140, in render return self._render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 134, in _render return self.nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 193, in render nodelist.append(node.render(context))
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 282, in render return nodelist.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 823, in render bit = self.render_node(node, context)
File "/usr/lib/python2.7/dist-packages/django/template/base.py", line 837, in render_node return node.render(context)
File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 426, in render raise e
NoReverseMatch: Reverse for 'seeddb-netbox-add-suggestion' with arguments '(u'\x01\nw\x14\r',)' and keyword arguments '{}' not found.
Thanks!
It seems your neighboring devices are reported with a binary encoded IP address as either its chassis id or remote name, this case, it's 10.119.20.13. The neighbor record does not, however, indicate that this string is to be interpreted as an IP address, so NAV has stored it as the binary string it received, unchanged.
Unfortunately, the decimal 10 translates to a newline, which is what causes the NoReverseMatch error. Newlines can't be matched by the regexp-based URL configuration in Django, so it fails when attempting to generate a hyperlink to use to add the neighbor device to SeedDB.
It seems the only remedy here is to remember to escape non-printable characters sequences when building URLs, by adding a `urlencode` filter to the value.