mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Allow assigning of VLAN(s) to device ports #113
Closed
opened 2025-12-29 15:33:31 +01:00 by adam
·
12 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
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#113
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 @justinhippen on GitHub (Jun 30, 2016).
It would be nice to be able to assign VLANs allocated to the device's site to it's ports
@ryanmerolle commented on GitHub (Jun 30, 2016):
This would then have to be able to assign native/untagged vlans along with allowed/tagged vlans. This could get complicated, but is possible.
For those Cisco focused individuals, voice vlans would just be classified as a allowed/tagged vlans, and access ports would be assigned untagged/ native vlans.
@cstueckrath commented on GitHub (Jul 20, 2016):
an interface would be either an access port (untagged vlan defaults to 1, but can be changed) or a trunk port. The trunk vlans might be configurable by either an "all" radio button or a text field, where you can enter ranges similar to this: [1-16], [20-26], 58, [65-70], 99, 901, 903, 919, 4095
the information on the interface could be displayed like this:
Tagging: enabled PVID: 1 VLANs:1-16 20-26 58 65-70 99 901 903 919 4095
@specialcircumstances commented on GitHub (Nov 6, 2016):
Just a thought, but it could be useful to maintain a record of VLANs associated (i.e. active) on a device. I guess a join table linking VLANs to Devices would be the way, or perhaps to interfaces, and the device count known through ORM.
That said, on consideration, it would be useful to have them seperate, and that could help with assigning VLANs to ports (as the list to select from could be the VLANs active on the device). I guess you'd need two join tables, one for VLANs-Devices and one for VLANS-Ports, but I think that would support many operations fairly neatly.
I could see this being useful when assigning IPs to devices that are dot1q connected, and also for the whole IP address assignment process, as once the VLAN is assigned to the port, the list of prefixes will be fairly short (drop-down box-able).
I will be happy to help out if you like (also being a net eng who has learnt python and django!) - but that will need to wait a couple of weeks!
@Beiriz commented on GitHub (Dec 23, 2016):
This is very important for our PPPOE hubs. We use several VLANs linked to BRIDGES. They serve to aggregate customers by geographical areas and to facilitate the relocation of IP blocks between these equipments.Thank you :)
@InsaneSplash commented on GitHub (Jan 17, 2017):
I'd be interested in being able to assign a VLAN to a port, especially when one separates traffic on a port ie, voice and data or the customer requires multiple services over a single connection.
@lampwins commented on GitHub (Mar 13, 2017):
This is really blocking my use of netbox as a source of truth. I want to be able to provision devices based on what is in netbox and later to do compliance checks. VLAN port assignments are a crucial part of this.
@InsaneSplash commented on GitHub (Mar 22, 2017):
What I have done to get around this is to create new vlan interfaces prefixed by the physical port and as a type Other. This allows me to see which port the vlan is attached to. Maybe oneday when we can link a vlan to a port, I will then modify the data in the Database using the current format to determine what goes where.
sfp1.vlan10@jeremystretch commented on GitHub (Mar 23, 2017):
We'll need to nail down the data model before any progress can be made on this. I'm open to suggestions. How would you define a relationship between an
Interfaceand one or moreVLANs?@specialcircumstances commented on GitHub (Mar 23, 2017):
Here's one way to approach it without massive join tables...
Interface has foreign lookup to VLAN Group.
Interface has two additional attributes, native VLAN and VLAN Filter list.
Native VLAN is an integer (0-4095). It can be valid or not based on if the VLAN is active in the VLAN Group. A "null" could be not set.
VLAN filter list could be of the normal sort of format e.g. "2,3,4,5-17,32-100,54". Any VLAN in the VLAN Group and matching the filter would be active on the Interface.
Not great, OK. Bad idea.
Option 2, with join tables. Probably closer to realistic.
Interface has foreign lookup to VLAN Group, Interface rather than device because for example, a router could have trunk links to multiple VLAN domains, or a switch might have some form of internal partitioning (e.g. Cisco VDC). I guess there could be a default VLAN Group for the device, and if not otherwise set/overidden the VLAN Group on an interface would be the VLAN Group of the device.
Join table stores intersection between active VLANs and Interfaces. Guess it could get large though.
Interface would need a typing field I think, e.g. Routing (e.g. L3), Access (L2 Untagged), Tagged. VLAN association should probably be limited to 1 VLAN for Routing and Access, but many for Tagged. Some consideration here perhaps for the concept of native VLANS.
The model could be extended to MPLS or VXLAN VNI, or any other tagging technology, if the VLAN models were rewritten to a more generic Tagging type, with VLANs being just one sort of Tagged item (perhaps set by the Tagged Group they are a member of).
@lampwins commented on GitHub (Jun 10, 2017):
My idea for this model is to allow a "VLAN Configuration" on a per interface level. Each
dcim.Interfacewill have a 1-to-1 relationship to the newInterfaceVLANConfigurationmodel. This model contains an attribute for thenative_vlanand avlan_membersattribute which is a many-to-many relationship toipam.VLAN.In the UI, the user adds this
InterfaceVLANConfigurationmodel to an interface by clicking a new button next to the rest. They filter the vlans like today, by site/vlan group. They are allowed to add multiple vlans to the vlan members section though (I am not sure they is any sort of similar functionality in the UI today?).At this point though, I am not sure if this new model should live in dcim or ipam for the purposes of where/how to define the API endpoints for this?
@jeremystretch thoughts on this? I am more than happy to work this out and submit a WIP PR if we can agree on the model.
@candlerb commented on GitHub (Sep 20, 2017):
If you just want to keep a track of VLAN membership on a port, as a workaround you could create an interface of type "virtual" for each enabled VLAN.
GigabitEthernet0/1type 1000BASE-TGigabitEthernet0/1.100type VirtualGigabitEthernet0/1.101type VirtualThis is after all how you would model a router with separate layer 3 subinterfaces, or a virtual machine which has different IP addresses on eth0.100 and eth0.101. It would however get tedious for many VLANs on many ports.
There is no explicit link from a virtual interface to its parent (apart from a physical interface to parent LAG), so it is only implied from the naming.
There's not a simple way I can see to record that GigabitEthernet0/1 is untagged vlan 200.
@awerner commented on GitHub (Sep 27, 2017):
@candlerb, as you already mentioned, your workaround is unfortunately only feasible if the number of VLANs assigned to an interface is relatively low.
My use case is a number of 48 port switches with about 80-100 different VLANs configured on some of its ports, so were talking thousands of interfaces (on a single switch) here....
A good way of displaying the VLANs mapped to a port is therefore also quite important, I like the idea of having an indented collapsible view.