mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
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#5406
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 @jaakub on GitHub (Sep 22, 2021).
Originally assigned to: @bctiemann on GitHub.
NetBox version
2.11.12
Feature type
Data model extension
Proposed functionality
Extend the VLAN object to allow documentation of 1:1 VLAN translation (similar to already existing NAT IP functionality within the IP address object). The simplest explanation being VLAN 100 being translated into VLAN 200 and the other way round.
This would require two additional fields within the VLAN object called (TBD):
translation_vlan_grouptranslation_vlan_idThose fields would be used to create a link between two VLAN objects to allow VLANs within the same or different VLAN groups to be linked together (in cases where two different pools are used for internal and external VLANs). Those two new fields would need to be accessible via:
This would require validation that the referenced object exists (especially via CSV and the API). Lastly, it would be great if we could expand the query filters to easily return all translated VLANs using
is_translated. Similar tohas_primary_ip.Within the UI, when editing/creating an object, you'd see an additional section called VLAN Translation, with two fields mentioned earlier. Once again, this is to be discussed and it may not warrant its own specific section and could be added under the already existing VLAN section.
The UI would also need an additional row within the VLAN view to represent the mapping (
Noneif empty). One option is to just show the associated VLAN within that row, and the second option is to also show the VLAN group of the associated VLAN.Option 1:
Internal VLAN View:
External VLAN View:
Option 2 (showing VLAN group of mapped VLAN):
Internal VLAN View:
External VLAN View:
Lastly, the VLAN view (
/ipam/vlans) would need an additional column calledTranslation(TBD), which would show either a green (when the VLAN link is present) or red tick (when the VLAN link isn't present) to easily identify those translated VLANs.Use case
In our scenario shown above, we have two VLAN groups, one for external VLANs, one for internal VLANs. At the moment, we are unable to create external to internal VLAN mapping (1:1) and we need to document those mappings within a spreadsheet. By adding this functionality, we could edit the VLAN object and select another VLAN to create that mapping.
Database changes
Unsure.
External dependencies
N/A
@jeremystretch commented on GitHub (Sep 22, 2021):
Please spend some time detailing the proposed implementation and update your post above. Per the FR template:
@jaakub commented on GitHub (Sep 22, 2021):
I've now added more detail in the FR.
@jeremystretch commented on GitHub (Oct 5, 2021):
I'm not clear on the real-world function being modeled here. How are VLANs being "translated?" From the examples above it looks like you're just correlating VLANs in two different domains.
@jaakub commented on GitHub (Oct 5, 2021):
The real-world function would be a single layer 2 service stretching two independent domains, which use a different VLAN tag for that service. In this case, you can rewrite/translate those tags on a border device connecting those two independent domains together. It is known as VLAN translation, although you could also say it is a VLAN rewrite function. Two references - Cisco and Juniper.
In the below example, we have:
What I'm trying to model in Netbox is exactly the correlation of two VLAN objects belonging to different VLAN groups providing that end to end service. We could achieve a similar result by using custom fields, however, a custom field wouldn't provide that dynamic link/reference to the other involved VLAN object and would not be as easy to track.
Allowing that link in Netbox would allow easier documentation and tracking of VLAN rewrite/mappings. At the moment, we maintain a separate spreadsheet to document that function and we would love to use Netbox as a single source of truth.
@tyler-8 commented on GitHub (Oct 6, 2021):
I like the idea. FWIW - The Aruba CX platform also supports VLAN translation.
Would it not be simpler to just have a single field (like maybe
vlan_translation) that points to a single other VLAN object? I don't know that a translation_group would be necessary, but I definitely see the value of properly linking two VLANs together for translation modeling.@julianze commented on GitHub (Oct 6, 2021):
i like the idea too.
We are using VLAN-Mapping/Translation on our Cisco Catalyst:
https://content.cisco.com/chapter.sjs?uri=/searchable/chapter/content/en/us/td/docs/switches/lan/catalyst9500/software/release/16-9/configuration_guide/lyr2/b_169_lyr2_9500_cg/configuring_vlan_mapping.html.xml&platform=Cisco%20Catalyst%209500%20Series%20Switches
the use case is to "bridge" two vlan together to one l2 broadcast domain.
In example there is a data center switch infrastructure with a separate vlan scope. Then we often bridge a customer vlan from our access network through our backbone to the data center switches.
We don´t have control over the customer vlan id´s and so there could be duplicates over all customer networks.
there´s the point where we have to translate the customer vlan (C-Tag) to our serivce provider vlan (S-Tag) which is then available in the data center for housing or virtualization purposes.
1-to-1 mapping like a fieald with the translated id should be fit most scenarios.
Would it be useful to show interfaces from the translated vlan in the "device-interface"-tab as well?
@jaakub commented on GitHub (Oct 7, 2021):
A single field showing the link between two VLAN objects would be most sufficient, and that's what I'm trying to achieve. I thought displaying a VLAN group of the linked VLAN object might be handy/nice, but it's not necessary - hence the two options. Glad to see others see value in this FR.
@jaakub commented on GitHub (Oct 7, 2021):
Not sure I follow this idea...
@github-actions[bot] commented on GitHub (Dec 7, 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.
@jaakub commented on GitHub (Dec 7, 2021):
It was highlighted (in the Netbox Slack channel), that some vendors and platforms, such as Juniper JUNOS, implement VLAN re-write/translation function on a per-interface basis meaning you can translate 1 VLAN into multiple VLANs, whilst others, such as Cisco NXOS implement it on a per-VLAN basis.
The original idea above was to implement it under the VLAN object, meaning it would be a 1:1 mapping.
One idea to support per-interface VLAN translation (messy, as @DanSheps said, which I agree with), would be to implement a table at the bottom of the interface UI, which would have two columns (old and new VLAN), and one empty row by default. Users could expand that table by additional columns.
From data structure point of view, we would need something like
dcim/interfaces/{id}/vlan_rewriteto return a list, with rows being presented as either list or tuple, or a dictionary.Example case:
I would be interested in hearing ideas from others on how this could be implemented both from a UI and API point of view.
@jcralbino commented on GitHub (Feb 26, 2023):
I would like to see this implemented in a way that we can decouple the concept of the layer 2 end-to-end domain from the vlan object
Currently this is just one use case of several examples where a layer 2 broadcast domain is not tied to the vlan deployed in a switch and associated with the interface of the device
For example:
In this case we want to associate the same layer 2 broadcast domain to two vlan ids existing in different vlan groups
This is the struggle I have faced when trying to model a modern SDN environment in the netbox current structure
@jcralbino commented on GitHub (Feb 26, 2023):
This is one discussion i started to improve the l2 forwarding plane that I believe is relevant to my comment above
https://github.com/netbox-community/netbox/discussions/9418
@jcralbino commented on GitHub (Feb 26, 2023):
Similar issue here about the changes needed for better modelling of layer 2 forwarding planes
https://github.com/netbox-community/netbox/issues/9373
@DanSheps commented on GitHub (Mar 6, 2023):
Just want to point out, NX-OS does it per-interface as well. I am not sure where you got the information that it is per-device but it is not. You do need the VLAN to be VXLAN enabled, however it is do-able on a per-interface basis.
#9373 is not relevant to this issue so it would be best to ignore it (You can bring it up in your discussion, it is just not relevant here)
@tyler-8 commented on GitHub (Oct 20, 2023):
Just wanted to revisit some ideas on how to model this simply and broadly.
If I'm understanding correctly; Aruba, Cisco, and Juniper vendors all do VLAN translation at the interface level - translation isn't global across all interfaces on the device participating in the "local" VLAN; so perhaps the way forward is to make this an interface-object data structure.
We have
tagged_vlansanduntagged_vlan- how do we simply model when any given VLAN is translated across the interface? A JSONField that maps "local" VLAN Object IDs to "remote" VLAN Object IDs, perhaps?For example:
If VLAN 5 (id 1) is used locally on the switch, but I want to translate it to VLAN 10 (id 2) across a trunk interface, the data structure could look like this:
Snippet of interface API output
Alternatively, a new model would have to be created, rough example:
@ITJamie commented on GitHub (Oct 21, 2023):
personally, i think the idea of a separate model
InterfaceVlanTranslationis the better approach and would help a lot when it comes to documenting svlans in future. it could also help for virtual circuits / circuit tracing.though maybe have an option of using id's only instead of having to have two vlan objects...
the reason why I would argue for this is in an isp its normal to handoff a customers vlan on vlan10 for example. it would be great to have an ability to just document it as vlan 10 handoff without having to create 1000's of unique vlan 10's vlan objects.
in a lot of cases we would want to use vlan foreignkeys for both, but in some just a documented integer would be preferred for at least one of the sides of the translation
@jeremystretch commented on GitHub (Sep 25, 2024):
Just reviewing past discussion as this has come up as a candidate FR for NetBox v4.2. Thanks everyone for providing some context.
The biggest sticking for me at this point is whether a translation policy needs to maintain a concrete foreign key relationship to a specific VLAN, or just specify the VLAN ID. It looks like just maintaining the VLAN ID would be sufficient, and would probably allow for a simpler implementation. It would also allow a policy to be reused across multiple devices and domains.
I'm imagining a two-model implementation. Some very hasty pseudo-code:
This would allow for the definition of a policy with multiple one-to-one VID mappings, which can be applied to interfaces arbitrarily.
We would also add a ForeignnKey to the Interface and VMInterface models:
If this approach will substantially satisfy the FR, I think we can tackle this in v4.2.
@ITJamie commented on GitHub (Sep 25, 2024):
I would have thought the local_vid would be a foreignkey to a vlan and the remote_vid would be an integer.
Also im assuming those policies could be linked to a specific device or specific interface (some devices translation is unique to the entire device and some the translation is unique to an interface only)
@tyler-8 commented on GitHub (Sep 26, 2024):
I think the challenge with ForeignKey for the VIDs is that the use cases out there are all slightly different. Some people will create the "remote" VLAN because they own or control that VLAN. Others may have no ownership of the remote VLAN and so don't want to create an entire VLAN object in their NetBox for it.
@bctiemann commented on GitHub (Oct 8, 2024):
The linked PR aims to implement the solution proposed by @jeremystretch. It is still in Draft, and a lot of the ancillary classes (such as forms, filtering, etc) are not fully baked; but I'd like to get this out there so interested parties can play with it and see if it addresses the need or requires further design-level tweaking.