mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Napalm LLDP port names are splitted by dots (.) #5329
Closed
opened 2025-12-29 19:26:45 +01:00 by adam
·
16 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#5329
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @m2martin on GitHub (Sep 7, 2021).
NetBox version
v3.0.1
Python version
3.9
Steps to Reproduce
port2.5.3)Expected Behavior
LLDP neighbor information is displayed in the corresponding interface row.
Observed Behavior
LLDP neighbor information is not displayed in the interface row.
@m2martin commented on GitHub (Sep 7, 2021):
Despite this is issue is 100% reproducible, it is very hard to setup a functional Netbox/Napalm setup with these interface names if you don't have this kind of hardware. Because of that, I already investigated the cause for this issue.
Interface names returned by Napalm are splitted by dots (.).
27c0e6dd5e/netbox/project-static/src/device/lldp.ts (L20)For
port2.5.3this results iniface = ["port2","5","3"]which will make it impossible fordocument.getElementById(iface)to find the correct element.27c0e6dd5e/netbox/project-static/src/device/lldp.ts (L22)We need to review the reason for
split(".").A Slack discussion led to the point that it may be a cleanup for sub-interfaces which are seperated from the main interface by dots.
As LLDP is a link-layer protocol which does not run on sub-interfaces, these sub-interfaces should never be returned by an LLDP agent.
Ergo, there are two questions:
Btw. Before someone asks why dots inside interface names are necessary: I work a lot with Allied Telesis gear running Allied Ware+ where interfaces are named
port<chassis>.<slot>.<port>@jeremystretch commented on GitHub (Sep 7, 2021):
Yes.
No.
The NAPALM-backed tools provided by NetBox are offered for convenience only. They do not and cannot feasibly accommodate every potential scenario. This particular naming format is so niche and unwieldy that I don't expect the effort required to support it would be worthwhile.
@m2martin commented on GitHub (Sep 7, 2021):
Fully agree.
Niche or not - Why should a 'cleanup helper' in one direction influence the other direction negatively, when as you said, its NAPALM's responsibility to provide valid data?
@jeremystretch commented on GitHub (Sep 7, 2021):
I don't understand your question. NetBox treats dots in the interface name as a separator for subinterfaces. My point is that modifying the logic solely to support this specific use case would be unduly burdensome.
@m2martin commented on GitHub (Sep 7, 2021):
I fully understand your point in terms of support. The main question is why does Netbox have to support sub-interface separation.
As per my understanding this is solely to map invalid Napalm interface names to valid Netbox interface names (no matter the reason). If I'm wrong please correct me.
Please don't get me wrong. I don't want you to support dots under all circumstances. I just want to understand why the use of dots is prohibited for the benefit of the separator.
If an interface name contains dots, then it contains dots.
If an interface name contains dots because its for example an VLAN sub-interface and has to be mapped to the main interface in Netbox, then it's definitly the wrong way. In that case NAPALM should provide valid interface names instead of forcing Netbox to split them.
Background: LLDP is Link-layer, so any VLAN-sub-interface cannot be LLDP-enabled.
For example on Linux:
eth0 can be LLDP-enabled, VLAN-sub-interface eth0.200 cannot. So there is no need for Netbox to strip eth0.200 down to eth0.
As said, I'm not sure about the reason for the split. But if its because of my example above, it's wrong to support it in my opinion.
@jeremystretch commented on GitHub (Sep 7, 2021):
Probably because when the original code was written four years ago, it was deemed necessary to do so. Likely because some platforms/drivers do report as subinterfaces. Removing this logic to fit your use case will probably break someone else's use case.
@m2martin commented on GitHub (Sep 7, 2021):
Yes, I understand that. What do you think about a way which preserves the old behavior but also fulfills other needs?
e.g. in
lldp.ts: aftersplit()This would give precedence to the existing methodology but also fail back to 'full match'. It would also be neccessary in the
lldp.js.But...this is not applicable to the LLDP neighbor interfaces returned by NAPALM. The split() happens on both local and neighbor interfaces :(
I think this is a matter of sink or swim.
@thatmattlove commented on GitHub (Sep 7, 2021):
The exact implementation of your solution would be something along the lines of:
I'm not opposed to this approach, I agree that it provides a fallback mechanism for non-subinterfaces interfaces that do contain a
.character, without introducing a breaking change.I think this could be achieved by abstracting the logic to a separate function to get the element by interface name. For example:
If everyone's good with this approach, I can implement and test it.
@m2martin commented on GitHub (Sep 8, 2021):
Your proposal would resolve the problem finding the correct interface row the NAPALM result is applied to. But it would not resolve the second one (neighbor information).
2a293d5d02/netbox/project-static/src/device/lldp.ts (L37-L40)This code will also strip neighbor port
port2.5.3down toport2and for example neighbor chassis ID (as MAC address)xxxx.yyyy.zzzzdown toxxxx.Before we think about how to mitigate this, let me summarize the facts:
Gi1/0/5.200toGi1/0/5eth0.200toeth0Would it be OK to base the decision on the occurance count of char
.? On subinterfaces, the.count is 1.This could be done just by replacing
split('.')with a ternary.@m2martin commented on GitHub (Sep 29, 2021):
@thatmattlove @jeremystretch I want to kindly ask how we can bring this topic forward.
If my last proposal is acceptable I can open a PR for this. I have it already running in my dev-env.
In case anyone has any better solution or proposal, I'd be happy to implement it.
@jeremystretch commented on GitHub (Oct 5, 2021):
Honestly, I think it's reasonable to draw the line at not supporting interface names which use dots as separators. I understand this doesn't satisfy your use case, however what you're proposing is a considerable amount of extra logic to maintain for a very niche requirement.
@m2martin commented on GitHub (Oct 6, 2021):
I expected this answer and I also can understand it. Currently, for me it's not a must to have it.
But....Is there any way for you to reach out to users to "poll" how much are having LLDP interfaces with dot chars?
I'm simply interested if the root cause we're discussing about is worth it - are there LLDP dot-interfaces in the wild? (Because there shouldn't)
I'm also interested in improving Netbox and this (unfortunately) includes discussions about past implementations, if they were right or wrong. You're already quite certain about my opinion.
@DanSheps commented on GitHub (Oct 13, 2021):
Users are encouraged to vote on items that are tagged as "under review"
@github-actions[bot] commented on GitHub (Dec 13, 2021):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@jeremystretch commented on GitHub (Dec 22, 2021):
Marking this as blocked by #8152. We may be able to come up with a solution if the evaluation logic is moved inside the UI view.
@jeremystretch commented on GitHub (Sep 30, 2022):
Closing this out, to be revisited once NetBox's NAPALM proxy functionality has been moved to a plugin per #10520.