diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index e105bd804..b20df82b7 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -762,6 +762,10 @@ class Interface(ComponentModel, BaseInterface, LinkTermination, PathEndpoint): def is_lag(self): return self.type == InterfaceTypeChoices.TYPE_LAG + @property + def is_bridge(self): + return self.type == InterfaceTypeChoices.TYPE_BRIDGE + @property def link(self): return self.cable or self.wireless_link diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 6697a44cc..f5e71fd23 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1776,6 +1776,14 @@ class InterfaceView(generic.ObjectView): orderable=False ) + # Get bridge interfaces + bridge_interfaces = Interface.objects.restrict(request.user, 'view').filter(bridge=instance) + bridge_interfaces_tables = tables.InterfaceTable( + bridge_interfaces, + exclude=('device', 'parent'), + orderable=False + ) + # Get child interfaces child_interfaces = Interface.objects.restrict(request.user, 'view').filter(parent=instance) child_interfaces_tables = tables.InterfaceTable( @@ -1800,6 +1808,7 @@ class InterfaceView(generic.ObjectView): return { 'ipaddress_table': ipaddress_table, + 'bridge_interfaces_table': bridge_interfaces_tables, 'child_interfaces_table': child_interfaces_tables, 'vlan_table': vlan_table, } diff --git a/netbox/templates/dcim/interface.html b/netbox/templates/dcim/interface.html index 5eaa99c3f..bf1445a1c 100644 --- a/netbox/templates/dcim/interface.html +++ b/netbox/templates/dcim/interface.html @@ -467,6 +467,13 @@ {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %} + {% if object.is_bridge %} +