diff --git a/netbox/circuits/forms/model_forms.py b/netbox/circuits/forms/model_forms.py
index f514c9104..60a16d7f5 100644
--- a/netbox/circuits/forms/model_forms.py
+++ b/netbox/circuits/forms/model_forms.py
@@ -303,11 +303,15 @@ class VirtualCircuitTerminationForm(NetBoxModelForm):
selector=True,
query_params={
'kind': 'virtual',
+ 'virtual_circuit_termination_id': 'null',
+ },
+ context={
+ 'parent': 'device',
}
)
fieldsets = (
- FieldSet('virtual_circuit', 'role', 'description', 'tags', 'interface'),
+ FieldSet('virtual_circuit', 'role', 'interface', 'description', 'tags'),
)
class Meta:
diff --git a/netbox/circuits/models/virtual_circuits.py b/netbox/circuits/models/virtual_circuits.py
index ab43839d6..ced68c105 100644
--- a/netbox/circuits/models/virtual_circuits.py
+++ b/netbox/circuits/models/virtual_circuits.py
@@ -156,3 +156,9 @@ class VirtualCircuitTermination(
return self.virtual_circuit.terminations.filter(
role=VirtualCircuitTerminationRoleChoices.ROLE_HUB
)
+
+ def clean(self):
+ super().clean()
+
+ if self.interface and not self.interface.is_virtual:
+ raise ValidationError("Virtual circuits may be terminated only to virtual interfaces.")
diff --git a/netbox/templates/circuits/virtualcircuittermination.html b/netbox/templates/circuits/virtualcircuittermination.html
index 0219e25bf..c08e3c604 100644
--- a/netbox/templates/circuits/virtualcircuittermination.html
+++ b/netbox/templates/circuits/virtualcircuittermination.html
@@ -20,6 +20,7 @@
+
{% trans "Provider" %} |
@@ -44,10 +45,31 @@
{% include 'inc/panels/tags.html' %}
+ {% include 'inc/panels/custom_fields.html' %}
{% plugin_left_page object %}
- {% include 'inc/panels/custom_fields.html' %}
+
+
+
+
+ {% trans "Device" %} |
+ {{ object.interface.device|linkify }} |
+
+
+ {% trans "Interface" %} |
+ {{ object.interface|linkify }} |
+
+
+ {% trans "Type" %} |
+ {{ object.interface.get_type_display }} |
+
+
+ {% trans "Description" %} |
+ {{ object.interface.description|placeholder }} |
+
+
+
{% plugin_right_page object %}