Modify check for parent Interface to support different parentable interfaces (patch available) #1389

Closed
opened 2026-04-06 00:31:28 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @uedvt359 on 8/26/2025

NetBox version

v4.3.6

Feature type

Other

Proposed functionality

I would like to ask for the following patch to be applied upstream: d86d94f184 - happy to open a PR for it.

Currently, only virtual interfaces can have a parent interface. This modification would allow this check to be easily extended out-of-tree. The proposed patch is minimally invasive. I'd be happy to also submit a second patch, implementing our use case of partitioned ports, if there is interest.

Use case

We are already patching dcim.constants to add some additional interface types we need. We would like to now add a new type, "partition", to properly document partitioned ports (splitting the four lanes of a 40/100G QSFP+/28 into four separate ports, with a breakout cable).

In addition to the submitted patch, here is how our custom interface patch (not submitted here, but would if you want): 5c173d93ed

This would look like this, using our ExtremeNetworks 7720 as an example:

Image

The first port, "12:1", is the master port, which can either be 100G, or split into four 25G ports, as is done here. Hence, it has three sub-ports, "12:2" to "12:4" which have "12:1" as their parent.

This is how this port looks on the switch's CLI:

# a port with four partitions (physically, a single QSFP+ 40G module in the QSFP28 slot):
12:1                          (0003)              E     A      10G    FULL 
12:2                          vlanMApublic1       E     A      10G    FULL 
12:3                          vlanMApublic1       E     A      10G    FULL 
12:4                          vlanMApublic1       E     A      10G    FULL 

# a not partitioned port (note how :2 to :4 are "not present", all four lanes go to a single logical port):
13:1                          (0038)              E     A      100G   FULL 
13:2                                              E     NP                              
13:3                                              E     NP                              
13:4                                              E     NP                              

This solution has the following benefits over previously suggested workarounds:

  • it allows to connect a Cable to the proper partition instead of using a multi-ended cable on the master partition
  • It allows us to correctly set the Interface Type to the proper value (it's a single QSFP* slot with a single QSFP* module, not four SFP* slots/modules)

Database changes

none.

External dependencies

none.

*Originally created by @uedvt359 on 8/26/2025* ### NetBox version v4.3.6 ### Feature type Other ### Proposed functionality I would like to ask for the following patch to be applied upstream: https://github.com/uedvt359/netbox/commit/d86d94f1841aa2981a1397f07310a214ff25cc60 - happy to open a PR for it. Currently, only virtual interfaces can have a parent interface. This modification would allow this check to be easily extended out-of-tree. The proposed patch is minimally invasive. I'd be happy to also submit a second patch, implementing our use case of partitioned ports, if there is interest. ### Use case We are already patching `dcim.constants` to add some additional interface types we need. We would like to now add a new type, "partition", to properly document partitioned ports (splitting the four lanes of a 40/100G QSFP+/28 into four separate ports, with a breakout cable). In addition to the submitted patch, here is how our custom interface patch (not submitted here, but would if you want): https://github.com/netbox-community/netbox/commit/5c173d93eda4a24568941a31192108034b2e7b83 This would look like this, using our ExtremeNetworks 7720 as an example: <img width="901" height="268" alt="Image" src="https://github.com/user-attachments/assets/8b668c1b-88b1-40a1-849e-fef244eb54d2" /> The first port, "12:1", is the master port, which can either be 100G, or split into four 25G ports, as is done here. Hence, it has three sub-ports, "12:2" to "12:4" which have "12:1" as their parent. This is how this port looks on the switch's CLI: ``` # a port with four partitions (physically, a single QSFP+ 40G module in the QSFP28 slot): 12:1 (0003) E A 10G FULL 12:2 vlanMApublic1 E A 10G FULL 12:3 vlanMApublic1 E A 10G FULL 12:4 vlanMApublic1 E A 10G FULL # a not partitioned port (note how :2 to :4 are "not present", all four lanes go to a single logical port): 13:1 (0038) E A 100G FULL 13:2 E NP 13:3 E NP 13:4 E NP ``` This solution has the following benefits over previously suggested workarounds: * it allows to connect a Cable to the proper partition instead of using a multi-ended cable on the master partition * It allows us to correctly set the Interface Type to the proper value (it's a single QSFP\* slot with a single QSFP\* module, not four SFP\* slots/modules) ### Database changes none. ### External dependencies none.
MrUnknownDE added the type: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: feature labels 2026-04-06 00:32:08 +02:00
Sign in to join this conversation.
No Label type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/netbox#1389