diff --git a/netbox/templates/virtualization/vminterface.html b/netbox/templates/virtualization/vminterface.html index 0d679680d..8017044a3 100644 --- a/netbox/templates/virtualization/vminterface.html +++ b/netbox/templates/virtualization/vminterface.html @@ -67,6 +67,10 @@ {% trans "Tunnel" %} {{ object.tunnel_termination.tunnel|linkify|placeholder }} + + {% trans "VLAN Translation" %} + {{ object.vlan_translation_policy|linkify|placeholder }} + {% include 'inc/panels/tags.html' %} @@ -100,6 +104,11 @@ {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %} +
+
+ {% include 'inc/panel_table.html' with table=vlan_translation_table heading="VLAN Translation" %} +
+
{% include 'inc/panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %} diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index 400e67385..25755977b 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -362,7 +362,7 @@ class VMInterfaceForm(InterfaceCommonForm, VMComponentForm): model = VMInterface fields = [ 'virtual_machine', 'name', 'parent', 'bridge', 'enabled', 'mac_address', 'mtu', 'description', 'mode', - 'vlan_group', 'untagged_vlan', 'tagged_vlans', 'vrf', 'tags', + 'vlan_group', 'untagged_vlan', 'tagged_vlans', 'vrf', 'tags', 'vlan_translation_policy', ] labels = { 'mode': '802.1Q Mode', diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 0828d3a2a..d2765e1ae 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -16,7 +16,7 @@ from dcim.models import Device from dcim.tables import DeviceTable from extras.views import ObjectConfigContextView from ipam.models import IPAddress -from ipam.tables import InterfaceVLANTable +from ipam.tables import InterfaceVLANTable, InterfaceVLANTranslationTable from netbox.constants import DEFAULT_ACTION_PERMISSIONS from netbox.views import generic from tenancy.views import ObjectContactsView @@ -515,6 +515,11 @@ class VMInterfaceView(generic.ObjectView): exclude=('virtual_machine',), orderable=False ) + vlan_translation_table = InterfaceVLANTranslationTable( + interface=instance, + data=instance.vlan_translation_policy.rules.all() if instance.vlan_translation_policy else [], + orderable=False + ) # Get assigned VLANs and annotate whether each is tagged or untagged vlans = [] @@ -533,6 +538,7 @@ class VMInterfaceView(generic.ObjectView): return { 'child_interfaces_table': child_interfaces_tables, 'vlan_table': vlan_table, + 'vlan_translation_table': vlan_translation_table, }