mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Cable profiles and connector/position mapping #11826
Closed
opened 2025-12-29 21:50:19 +01:00 by adam
·
3 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#11826
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 @jeremystretch on GitHub (Nov 11, 2025).
Originally assigned to: @jeremystretch on GitHub.
NetBox version
v4.4.6
Feature type
Data model extension
Proposed functionality
This FR supersedes #20562 and expands upon the core idea it proposes. In conjunction with FR #20564, its goal is to support modeling complex cabling in NetBox. There are two components in play here: cable profiles and connector/position tracking for cable terminations.
Cable termination connector & position
A cable termination represents the association of one end of a cable (A or B) with a particular object (e.g. an interface or console port). This FR would add two new pieces of data to the CableTermination model, to better represent real-world connections:
Cable profile
A cable profile holds the connector/position mapping between A- and B-side terminations. For example, a profile representing a 4x10GE breakout cable would look like this:
(Note that this concept of mapping positions is intentionally very similar to the approach proposed in FR #20564.)
A profile would be assigned to a cable via a ChoiceField on the Cable model. The current intent is for profiles to be declared statically and live in-memory, rather than being customizable: It is expected that a limited number of such real-world profiles exist. However, that may be reconsidered if additional flexibility is needed.
Use case
While NetBox is capable of modeling complex cabling (cables which provide more than two endpoints) to a limited degree, it does not possess sufficient context to accurately trace these connections end-to-end. By associating explicit connector & positioning details with each termination, as well as a mapping profile with the cable itself, NetBox will be able to trace end-to-end paths across complex cables with precision.
Database changes
On the
dcim.Cablemodel, introduce a new optional CharField to associate the cable profile. Cables without a profile assigned will not support complex tracing.One the
dcim.CableTerminationmodel, add two integer fields to track connector and position:(We'll either make these fields nullable or default to
1; whichever is found to work best once the implementation is fleshed out.)External dependencies
N/A
@NSpikings-dB commented on GitHub (Nov 12, 2025):
This proposal looks good to me. Making the mapping customisable, as you’ve mentioned, will be incredibly useful and far more future-proof.
In an example of one of my use cases, it’s not uncommon for us to have a mix of simplex and duplex connectors on a single multicore cable. The exact arrangement and quantities of simplex vs duplex connectors vary on a case by case basis.
In an example below with just 12 cores (simplex in orange and duplex in blue), you can see the level of variation that could easily and quickly be encountered.
As this can be extrapolated to cables with an even higher core count, allowing users to create their own mappings flexibly would allow users to model their facility and infrastructure more accurately.
Customisability would also avoid the risk of missing particular breakout cable types that might not be initially captured, such as MMC-24 to 3x MTP-8, and of course, custom cable splices.
@jeremystretch commented on GitHub (Nov 14, 2025):
@NSpikings-dB the intent of this FR is to better model cables at the interface level; specifically breakout and "shuffle" cables which split fiber pairs in a predictable manner. The use case you cite seems to fall more in the territory of fiber plant management, which is a different topic entirely.
@sleepinggenius2 commented on GitHub (Nov 17, 2025):
I think being able to customize the profiles would really help for a more future-proof solution. We frequently seem to run into proprietary cable configurations from different vendors and being able to model them accurately in NetBox would be extremely helpful. While I can't think of a situation where we have a mix of simplex and duplex terminated cables as demonstrated above, I have seen a variety of different configurations just within MPO cables. For example, our ROADM gear uses MPO-12 and MPO-24 cables, but it uses the middle fibers instead of the outside fibers, like MLR optics do, and thus it cannot use an MPO-8 cable. It also has interfaces to address each fiber, instead of each "lane" created by a pair of fibers, as we see on the MLR side. There is one particular cable that has an MPO-24 connector (16 positions used) on one end with grouped TX and RX that breaks out to 2 x MPO-12 connectors (8 positions used in each) with interleaved TX and RX on the other. This would also be incredibly helpful for documenting console cables, as we have a number of custom ones that we have to create to account for different vendors' specific pinouts when connecting devices to our console servers. By far the most common cable type for us is going to be LC/UPC duplex to 2 x SC/APC simplex for connecting to an OSP fiber panel, so one way or another I would certainly push for that to be available out of the gate.
You mentioned better modeling cables at the interface level, but it's not clear to me how connections get mapped to breakout interfaces in this proposal, especially when sometimes its a single strand per interface or a pair of strands per interface, and the cable would typically terminate on one interface, but each connection/lane on a different interface. For example, Optics0/0/0/0 (QSFP+ (40GE) or QSFP28 (100GE) interface type) for the cable termination and TenGigE0/0/0/0/0-3 for each of the 10GBASE-LR interfaces for the TX/RX fiber pair lane terminations for an ONS-QSFP-4X10-MLR or QSFP-4X10G-LR-S optic in a Cisco NCS device.