Sfoglia il codice sorgente

Clean up interface template

jeremystretch 3 anni fa
parent
commit
42446cb87b
1 ha cambiato i file con 420 aggiunte e 419 eliminazioni
  1. 420 419
      netbox/templates/dcim/interface.html

+ 420 - 419
netbox/templates/dcim/interface.html

@@ -20,436 +20,437 @@
 {% endblock %}
 {% endblock %}
 
 
 {% block content %}
 {% block content %}
-    <div class="row mb-3">
-        <div class="col col-md-6">
-            <div class="card">
-                <h5 class="card-header">
-                    Interface
-                </h5>
-                <div class="card-body">
-                    <table class="table table-hover">
-                        <tr>
-                            <th scope="row">Device</th>
-                            <td>{{ object.device|linkify }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Module</th>
-                            <td>{{ object.module|linkify|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Name</th>
-                            <td>{{ object.name }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Label</th>
-                            <td>{{ object.label|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Type</th>
-                            <td>{{ object.get_type_display }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Speed</th>
-                            <td>{{ object.speed|humanize_speed|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Duplex</th>
-                            <td>{{ object.get_duplex_display }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Enabled</th>
-                            <td>{% checkmark object.enabled %}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Management Only</th>
-                            <td>{% checkmark object.mgmt_only %}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Parent</th>
-                            <td>{{ object.parent|linkify|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Bridge</th>
-                            <td>{{ object.bridge|linkify|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">LAG</th>
-                            <td>{{ object.lag|linkify|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Description</th>
-                            <td>{{ object.description|placeholder }} </td>
-                        </tr>
-                        <tr>
-                            <th scope="row">MTU</th>
-                            <td>{{ object.mtu|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">MAC Address</th>
-                            <td><span class="text-monospace">{{ object.mac_address|placeholder }}</span></td>
-                        </tr>
-                        <tr>
-                            <th scope="row">WWN</th>
-                            <td><span class="text-monospace">{{ object.wwn|placeholder }}</span></td>
-                        </tr>
-                        <tr>
-                            <th scope="row">Transmit power (dBm)</th>
-                            <td>{{ object.tx_power|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">802.1Q Mode</th>
-                            <td>{{ object.get_mode_display|placeholder }}</td>
-                        </tr>
-                        <tr>
-                            <th scope="row">VRF</th>
-                            <td>{{ object.vrf|linkify|placeholder }}</td>
-                        </tr>
-                    </table>
-                </div>
-            </div>
-            {% include 'inc/panels/custom_fields.html' %}
-            {% include 'inc/panels/tags.html' %}
-            {% plugin_left_page object %}
+  <div class="row mb-3">
+    <div class="col col-md-6">
+      <div class="card">
+        <h5 class="card-header">Interface</h5>
+        <div class="card-body">
+          <table class="table table-hover">
+            <tr>
+              <th scope="row">Device</th>
+              <td>{{ object.device|linkify }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Module</th>
+              <td>{{ object.module|linkify|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Name</th>
+              <td>{{ object.name }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Label</th>
+              <td>{{ object.label|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Type</th>
+              <td>{{ object.get_type_display }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Speed/Duplex</th>
+              <td>
+                {{ object.speed|humanize_speed|placeholder }} /
+                {{ object.get_duplex_display|placeholder }}
+              </td>
+            </tr>
+            <tr>
+              <th scope="row">MTU</th>
+              <td>{{ object.mtu|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Enabled</th>
+              <td>{% checkmark object.enabled %}</td>
+            </tr>
+            <tr>
+              <th scope="row">Management Only</th>
+              <td>{% checkmark object.mgmt_only %}</td>
+            </tr>
+            <tr>
+              <th scope="row">Description</th>
+              <td>{{ object.description|placeholder }} </td>
+            </tr>
+            <tr>
+              <th scope="row">802.1Q Mode</th>
+              <td>{{ object.get_mode_display|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Transmit power (dBm)</th>
+              <td>{{ object.tx_power|placeholder }}</td>
+            </tr>
+          </table>
         </div>
         </div>
-        <div class="col col-md-6">
-            {% if not object.is_virtual %}
-                <div class="card">
-                    <h5 class="card-header">
-                        Connection
-                    </h5>
-                    <div class="card-body">
-                    {% if object.mark_connected %}
-                        <div class="text-muted">
-                          <span class="text-success"><i class="mdi mdi-check-bold"></i></span> Marked as Connected
-                        </div>
-                    {% elif object.cable %}
-                        <table class="table table-hover">
-                            {% if object.connected_endpoint.device %}
-                            <tr>
-                                <td colspan="2">
-                                    {% if object.connected_endpoint.enabled %}
-                                        <span class="badge bg-success">Enabled</span>
-                                    {% else %}
-                                        <span class="badge bg-danger">Disabled</span>
-                                    {% endif %}
-                                </td>
-                            </tr>
-                            {% endif %} 
-                            <tr>
-                                <th scope="row">Cable</th>
-                                <td>
-                                    {{ object.cable|linkify }}
-                                    <a href="{% url 'dcim:interface_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
-                                        <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
-                                    </a>
-                                </td>
-                            </tr>
-                            {% if object.connected_endpoint.device %}
-                                {% with iface=object.connected_endpoint %}
-                                    <tr>
-                                        <th scope="row">Device</th>
-                                        <td>{{ iface.device|linkify }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">Name</th>
-                                        <td>{{ iface|linkify:"name" }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">Type</th>
-                                        <td>{{ iface.get_type_display }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">LAG</th>
-                                        <td>{{ iface.lag|linkify|placeholder }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">Description</th>
-                                        <td>{{ iface.description|placeholder }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">MTU</th>
-                                        <td>{{ iface.mtu|placeholder }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">MAC Address</th>
-                                        <td>{{ iface.mac_address|placeholder }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">802.1Q Mode</th>
-                                        <td>{{ iface.get_mode_display }}</td>
-                                    </tr>
-                                {% endwith %}
-                            {% elif object.connected_endpoint.circuit %}
-                                {% with ct=object.connected_endpoint %}
-                                    <tr>
-                                        <th scope="row">Provider</th>
-                                        <td>{{ ct.circuit.provider|linkify }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">Circuit</th>
-                                        <td>{{ ct.circuit|linkify }}</td>
-                                    </tr>
-                                    <tr>
-                                        <th scope="row">Side</th>
-                                        <td>{{ ct.term_side }}</td>
-                                    </tr>
-                                {% endwith %}
-                            {% endif %}
-                            <tr>
-                                <th scope="row">Path Status</th>
-                                <td>
-                                    {% if object.path.is_active %}
-                                        <span class="badge bg-success">Reachable</span>
-                                    {% else %}
-                                        <span class="badge bg-danger">Not Reachable</span>
-                                    {% endif %}
-                                </td>
-                            </tr>
-                        </table>
-                    {% elif object.wireless_link %}
-                        <table class="table table-hover">
-                            <tr>
-                                <th scope="row">Wireless Link</th>
-                                <td>
-                                    {{ object.wireless_link|linkify }}
-                                    <a href="{% url 'dcim:interface_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
-                                        <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
-                                    </a>
-                                </td>
-                            </tr>
-                            {% with peer_interface=object.connected_endpoint %}
-                                <tr>
-                                    <th scope="row">Device</th>
-                                    <td>{{ peer_interface.device|linkify }}</td>
-                                </tr>
-                                <tr>
-                                    <th scope="row">Name</th>
-                                    <td>{{ peer_interface|linkify }}</td>
-                                </tr>
-                                <tr>
-                                    <th scope="row">Type</th>
-                                    <td>{{ peer_interface.get_type_display }}</td>
-                                </tr>
-                            {% endwith %}
-                        </table>
-                    {% else %}
-                        <div class="text-muted">
-                            Not Connected
-                            {% if object.is_wired and perms.dcim.add_cable %}
-                                <div class="dropdown float-end">
-                                    <button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                        <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span> Connect
-                                    </button>
-                                    <ul class="dropdown-menu dropdown-menu-end">
-                                        <li>
-                                            <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='interface' %}?return_url={{ object.get_absolute_url }}">
-                                                Interface
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='front-port' %}?return_url={{ object.get_absolute_url }}">
-                                                Front Port
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='rear-port' %}?return_url={{ object.get_absolute_url }}">
-                                                Rear Port
-                                            </a>
-                                        </li>
-                                        <li>
-                                            <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='circuit-termination' %}?return_url={{ object.get_absolute_url }}">
-                                                Circuit Termination
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </div>
-                            {% elif object.is_wireless and perms.wireless.add_wirelesslink %}
-                                <div class="dropdown float-end">
-                                    <a href="{% url 'wireless:wirelesslink_add' %}?interface_a={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-primary btn-sm">
-                                        <span class="mdi mdi-wifi-plus" aria-hidden="true"></span> Connect
-                                    </a>
-                                </div>
-                            {% endif %}
-                        </div>
-                    {% endif %}
-                    </div>
-                </div>
-            {% endif %}
-            {% if object.is_wireless %}
-                <div class="card">
-                    <h5 class="card-header">Wireless</h5>
-                    <div class="card-body">
-                        {% with peer=object.connected_endpoint %}
-                            <table class="table table-hover">
-                                <thead>
-                                    <tr>
-                                      <th></th>
-                                      <th>Local</th>
-                                      {% if peer %}
-                                          <th>Peer</th>
-                                      {% endif %}
-                                    </tr>
-                                </thead>
-                                <tr>
-                                    <th scope="row">Role</th>
-                                    <td>{{ object.get_rf_role_display|placeholder }}</td>
-                                    {% if peer %}
-                                      <td>{{ peer.get_rf_role_display|placeholder }}</td>
-                                    {% endif %}
-                                </tr>
-                                <tr>
-                                    <th scope="row">Channel</th>
-                                    <td>{{ object.get_rf_channel_display|placeholder }}</td>
-                                    {% if peer %}
-                                        <td{% if peer.rf_channel != object.rf_channel %} class="text-danger"{% endif %}>
-                                          {{ peer.get_rf_channel_display|placeholder }}
-                                        </td>
-                                    {% endif %}
-                                </tr>
-                                <tr>
-                                    <th scope="row">Channel Frequency</th>
-                                    <td>
-                                      {% if object.rf_channel_frequency %}
-                                        {{ object.rf_channel_frequency|simplify_decimal }} MHz
-                                      {% else %}
-                                        <span class="text-muted">&mdash;</span>
-                                      {% endif %}
-                                    </td>
-                                    {% if peer %}
-                                        <td{% if peer.rf_channel_frequency != object.rf_channel_frequency %} class="text-danger"{% endif %}>
-                                          {% if peer.rf_channel_frequency %}
-                                            {{ peer.rf_channel_frequency|simplify_decimal }} MHz
-                                          {% else %}
-                                            <span class="text-muted">&mdash;</span>
-                                          {% endif %}
-                                        </td>
-                                    {% endif %}
-                                </tr>
-                                <tr>
-                                    <th scope="row">Channel Width</th>
-                                    <td>
-                                      {% if object.rf_channel_width %}
-                                        {{ object.rf_channel_width|simplify_decimal }} MHz
-                                      {% else %}
-                                        <span class="text-muted">&mdash;</span>
-                                      {% endif %}
-                                    </td>
-                                    {% if peer %}
-                                        <td{% if peer.rf_channel_width != object.rf_channel_width %} class="text-danger"{% endif %}>
-                                          {% if peer.rf_channel_width %}
-                                            {{ peer.rf_channel_width|simplify_decimal }} MHz
-                                          {% else %}
-                                            <span class="text-muted">&mdash;</span>
-                                          {% endif %}
-                                        </td>
-                                    {% endif %}
-                                </tr>
-                            </table>
-                        {% endwith %}
-                    </div>
-                </div>
-                <div class="card">
-                    <h5 class="card-header">Wireless LANs</h5>
-                    <div class="card-body">
-                        <table class="table table-hover table-headings">
-                            <thead>
-                                <tr>
-                                    <th>Group</th>
-                                    <th>SSID</th>
-                                </tr>
-                            </thead>
-                            <tbody>
-                                {% for wlan in object.wireless_lans.all %}
-                                    <tr>
-                                        <td>
-                                            {% if wlan.group %}
-                                              {{ wlan.group|linkify }}
-                                            {% else %}
-                                              &mdash;
-                                            {% endif %}
-                                        </td>
-                                        <td>{{ wlan|linkify:"ssid" }}</td>
-                                    </tr>
-                                {% empty %}
-                                    <tr>
-                                        <td colspan="3" class="text-muted">None</td>
-                                    </tr>
-                                {% endfor %}
-                            </tbody>
-                        </table>
-                    </div>
-                </div>
-            {% endif %}
-            {% if object.is_lag %}
-                <div class="card">
-                    <h5 class="card-header">LAG Members</h5>
-                    <div class="card-body">
-                        <table class="table table-hover table-headings">
-                            <thead>
-                                <tr>
-                                    <th>Parent</th>
-                                    <th>Interface</th>
-                                    <th>Type</th>
-                                </tr>
-                            </thead>
-                            <tbody>
-                                {% for member in object.member_interfaces.all %}
-                                    <tr>
-                                        <td>{{ member.device|linkify }}</td>
-                                        <td>{{ member|linkify }}</td>
-                                        <td>{{ member.get_type_display }}</td>
-                                    </tr>
-                                {% empty %}
-                                    <tr>
-                                        <td colspan="3" class="text-muted">No member interfaces</td>
-                                    </tr>
-                                {% endfor %}
-                            </tbody>
-                        </table>
-                    </div>
-                </div>
-            {% endif %}
-            {% include 'ipam/inc/panels/fhrp_groups.html' %}
-            {% include 'dcim/inc/panels/inventory_items.html' %}
-            {% plugin_right_page object %}
+      </div>
+      <div class="card">
+        <h5 class="card-header">Related Interfaces</h5>
+        <div class="card-body">
+          <table class="table table-hover">
+            <tr>
+              <th scope="row">Parent</th>
+              <td>{{ object.parent|linkify|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">Bridge</th>
+              <td>{{ object.bridge|linkify|placeholder }}</td>
+            </tr>
+            <tr>
+              <th scope="row">LAG</th>
+              <td>{{ object.lag|linkify|placeholder }}</td>
+            </tr>
+          </table>
         </div>
         </div>
+      </div>
+      {% include 'inc/panels/custom_fields.html' %}
+      {% include 'inc/panels/tags.html' %}
+      {% plugin_left_page object %}
     </div>
     </div>
-    <div class="row mb-3">
-        <div class="col col-md-12">
-            <div class="card">
-                <h5 class="card-header">
-                    IP Addresses
-                </h5>
-                <div class="card-body table-responsive">
-                    {% if ipaddress_table.rows %}
-                        {% render_table ipaddress_table 'inc/table.html' %}
+    <div class="col col-md-6">
+      <div class="card">
+        <h5 class="card-header">Addressing</h5>
+        <div class="card-body">
+          <table class="table table-hover">
+            <tr>
+              <th scope="row">MAC Address</th>
+              <td><span class="text-monospace">{{ object.mac_address|placeholder }}</span></td>
+            </tr>
+            <tr>
+              <th scope="row">WWN</th>
+              <td><span class="text-monospace">{{ object.wwn|placeholder }}</span></td>
+            </tr>
+            <tr>
+              <th scope="row">VRF</th>
+              <td>{{ object.vrf|linkify|placeholder }}</td>
+            </tr>
+          </table>
+        </div>
+      </div>
+      {% if not object.is_virtual %}
+        <div class="card">
+          <h5 class="card-header">Connection</h5>
+          <div class="card-body">
+            {% if object.mark_connected %}
+              <div class="text-muted">
+                <span class="text-success"><i class="mdi mdi-check-bold"></i></span> Marked as Connected
+              </div>
+            {% elif object.cable %}
+              <table class="table table-hover">
+                {% if object.connected_endpoint.device %}
+                  <tr>
+                    <td colspan="2">
+                      {% if object.connected_endpoint.enabled %}
+                        <span class="badge bg-success">Enabled</span>
+                      {% else %}
+                        <span class="badge bg-danger">Disabled</span>
+                      {% endif %}
+                    </td>
+                  </tr>
+                {% endif %}
+                <tr>
+                  <th scope="row">Cable</th>
+                  <td>
+                    {{ object.cable|linkify }}
+                    <a href="{% url 'dcim:interface_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
+                      <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
+                    </a>
+                  </td>
+                </tr>
+                {% if object.connected_endpoint.device %}
+                  {% with iface=object.connected_endpoint %}
+                    <tr>
+                      <th scope="row">Device</th>
+                      <td>{{ iface.device|linkify }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">Name</th>
+                      <td>{{ iface|linkify:"name" }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">Type</th>
+                      <td>{{ iface.get_type_display }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">LAG</th>
+                      <td>{{ iface.lag|linkify|placeholder }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">Description</th>
+                      <td>{{ iface.description|placeholder }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">MTU</th>
+                      <td>{{ iface.mtu|placeholder }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">MAC Address</th>
+                      <td>{{ iface.mac_address|placeholder }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">802.1Q Mode</th>
+                      <td>{{ iface.get_mode_display }}</td>
+                    </tr>
+                  {% endwith %}
+                {% elif object.connected_endpoint.circuit %}
+                  {% with ct=object.connected_endpoint %}
+                    <tr>
+                      <th scope="row">Provider</th>
+                      <td>{{ ct.circuit.provider|linkify }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">Circuit</th>
+                      <td>{{ ct.circuit|linkify }}</td>
+                    </tr>
+                    <tr>
+                      <th scope="row">Side</th>
+                      <td>{{ ct.term_side }}</td>
+                    </tr>
+                  {% endwith %}
+                {% endif %}
+                <tr>
+                  <th scope="row">Path Status</th>
+                  <td>
+                    {% if object.path.is_active %}
+                      <span class="badge bg-success">Reachable</span>
                     {% else %}
                     {% else %}
-                        <div class="text-muted">None</div>
+                      <span class="badge bg-danger">Not Reachable</span>
                     {% endif %}
                     {% endif %}
-                </div>
-                {% if perms.ipam.add_ipaddress %}
-                    <div class="card-footer text-end noprint">
-                        <a href="{% url 'ipam:ipaddress_add' %}?device={{ object.device.pk }}&interface={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
-                            <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add IP Address
+                  </td>
+                </tr>
+              </table>
+            {% elif object.wireless_link %}
+              <table class="table table-hover">
+                <tr>
+                  <th scope="row">Wireless Link</th>
+                  <td>
+                    {{ object.wireless_link|linkify }}
+                    <a href="{% url 'dcim:interface_trace' pk=object.pk %}" class="btn btn-primary btn-sm lh-1" title="Trace">
+                      <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
+                    </a>
+                  </td>
+                </tr>
+                {% with peer_interface=object.connected_endpoint %}
+                  <tr>
+                    <th scope="row">Device</th>
+                    <td>{{ peer_interface.device|linkify }}</td>
+                  </tr>
+                  <tr>
+                    <th scope="row">Name</th>
+                    <td>{{ peer_interface|linkify }}</td>
+                  </tr>
+                  <tr>
+                    <th scope="row">Type</th>
+                    <td>{{ peer_interface.get_type_display }}</td>
+                  </tr>
+                {% endwith %}
+              </table>
+            {% else %}
+              <div class="text-muted">
+                Not Connected
+                {% if object.is_wired and perms.dcim.add_cable %}
+                  <div class="dropdown float-end">
+                    <button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                      <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span> Connect
+                    </button>
+                    <ul class="dropdown-menu dropdown-menu-end">
+                      <li>
+                        <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='interface' %}?return_url={{ object.get_absolute_url }}">
+                          Interface
+                        </a>
+                      </li>
+                      <li>
+                        <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='front-port' %}?return_url={{ object.get_absolute_url }}">
+                          Front Port
                         </a>
                         </a>
-                    </div>
+                      </li>
+                      <li>
+                        <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='rear-port' %}?return_url={{ object.get_absolute_url }}">
+                          Rear Port
+                        </a>
+                      </li>
+                      <li>
+                        <a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=object.pk termination_b_type='circuit-termination' %}?return_url={{ object.get_absolute_url }}">
+                          Circuit Termination
+                        </a>
+                      </li>
+                    </ul>
+                  </div>
+                {% elif object.is_wireless and perms.wireless.add_wirelesslink %}
+                  <div class="dropdown float-end">
+                    <a href="{% url 'wireless:wirelesslink_add' %}?interface_a={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-primary btn-sm">
+                      <span class="mdi mdi-wifi-plus" aria-hidden="true"></span> Connect
+                    </a>
+                  </div>
                 {% endif %}
                 {% endif %}
-            </div>
+              </div>
+            {% endif %}
+          </div>
         </div>
         </div>
-    </div>
-    <div class="row mb-3">
-        <div class="col col-md-12">
-            {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %}
+      {% endif %}
+      {% if object.is_wireless %}
+        <div class="card">
+          <h5 class="card-header">Wireless</h5>
+          <div class="card-body">
+            {% with peer=object.connected_endpoint %}
+              <table class="table table-hover">
+                <thead>
+                  <tr>
+                    <th></th>
+                    <th>Local</th>
+                    {% if peer %}
+                      <th>Peer</th>
+                    {% endif %}
+                  </tr>
+                </thead>
+                <tr>
+                  <th scope="row">Role</th>
+                  <td>{{ object.get_rf_role_display|placeholder }}</td>
+                  {% if peer %}
+                    <td>{{ peer.get_rf_role_display|placeholder }}</td>
+                  {% endif %}
+                </tr>
+                <tr>
+                  <th scope="row">Channel</th>
+                  <td>{{ object.get_rf_channel_display|placeholder }}</td>
+                  {% if peer %}
+                    <td{% if peer.rf_channel != object.rf_channel %} class="text-danger"{% endif %}>
+                      {{ peer.get_rf_channel_display|placeholder }}
+                    </td>
+                  {% endif %}
+                </tr>
+                <tr>
+                  <th scope="row">Channel Frequency</th>
+                  <td>
+                    {% if object.rf_channel_frequency %}
+                      {{ object.rf_channel_frequency|simplify_decimal }} MHz
+                    {% else %}
+                      <span class="text-muted">&mdash;</span>
+                    {% endif %}
+                  </td>
+                  {% if peer %}
+                    <td{% if peer.rf_channel_frequency != object.rf_channel_frequency %} class="text-danger"{% endif %}>
+                      {% if peer.rf_channel_frequency %}
+                        {{ peer.rf_channel_frequency|simplify_decimal }} MHz
+                      {% else %}
+                        <span class="text-muted">&mdash;</span>
+                      {% endif %}
+                    </td>
+                  {% endif %}
+                </tr>
+                <tr>
+                  <th scope="row">Channel Width</th>
+                  <td>
+                    {% if object.rf_channel_width %}
+                      {{ object.rf_channel_width|simplify_decimal }} MHz
+                    {% else %}
+                      <span class="text-muted">&mdash;</span>
+                    {% endif %}
+                  </td>
+                  {% if peer %}
+                    <td{% if peer.rf_channel_width != object.rf_channel_width %} class="text-danger"{% endif %}>
+                      {% if peer.rf_channel_width %}
+                        {{ peer.rf_channel_width|simplify_decimal }} MHz
+                      {% else %}
+                        <span class="text-muted">&mdash;</span>
+                      {% endif %}
+                    </td>
+                  {% endif %}
+                </tr>
+              </table>
+            {% endwith %}
+          </div>
         </div>
         </div>
-    </div>
-    <div class="row mb-3">
-        <div class="col col-md-12">
-            {% include 'inc/panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %}
+        <div class="card">
+          <h5 class="card-header">Wireless LANs</h5>
+          <div class="card-body">
+            <table class="table table-hover table-headings">
+              <thead>
+                <tr>
+                  <th>Group</th>
+                  <th>SSID</th>
+                </tr>
+              </thead>
+              <tbody>
+                {% for wlan in object.wireless_lans.all %}
+                  <tr>
+                    <td>{{ wlan.group|linkify|placeholder }}</td>
+                    <td>{{ wlan|linkify:"ssid" }}</td>
+                  </tr>
+                {% empty %}
+                  <tr>
+                    <td colspan="3" class="text-muted">None</td>
+                  </tr>
+                {% endfor %}
+              </tbody>
+            </table>
+          </div>
+        </div>
+      {% endif %}
+      {% if object.is_lag %}
+        <div class="card">
+          <h5 class="card-header">LAG Members</h5>
+          <div class="card-body">
+            <table class="table table-hover table-headings">
+              <thead>
+                <tr>
+                  <th>Parent</th>
+                  <th>Interface</th>
+                  <th>Type</th>
+                </tr>
+              </thead>
+              <tbody>
+                {% for member in object.member_interfaces.all %}
+                  <tr>
+                    <td>{{ member.device|linkify }}</td>
+                    <td>{{ member|linkify }}</td>
+                    <td>{{ member.get_type_display }}</td>
+                  </tr>
+                {% empty %}
+                  <tr>
+                    <td colspan="3" class="text-muted">No member interfaces</td>
+                  </tr>
+                {% endfor %}
+              </tbody>
+            </table>
+          </div>
         </div>
         </div>
+      {% endif %}
+      {% include 'ipam/inc/panels/fhrp_groups.html' %}
+      {% include 'dcim/inc/panels/inventory_items.html' %}
+      {% plugin_right_page object %}
     </div>
     </div>
-    <div class="row mb-3">
-        <div class="col col-md-12">
-            {% plugin_full_width_page object %}
+  </div>
+  <div class="row mb-3">
+    <div class="col col-md-12">
+      <div class="card">
+        <h5 class="card-header">IP Addresses</h5>
+        <div class="card-body table-responsive">
+          {% if ipaddress_table.rows %}
+            {% render_table ipaddress_table 'inc/table.html' %}
+          {% else %}
+            <div class="text-muted">None</div>
+          {% endif %}
         </div>
         </div>
+        {% if perms.ipam.add_ipaddress %}
+          <div class="card-footer text-end noprint">
+            <a href="{% url 'ipam:ipaddress_add' %}?device={{ object.device.pk }}&interface={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
+              <span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add IP Address
+            </a>
+          </div>
+        {% endif %}
+      </div>
+    </div>
+  </div>
+  <div class="row mb-3">
+    <div class="col col-md-12">
+      {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %}
+    </div>
+  </div>
+  <div class="row mb-3">
+    <div class="col col-md-12">
+      {% include 'inc/panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %}
+    </div>
+  </div>
+  <div class="row mb-3">
+    <div class="col col-md-12">
+      {% plugin_full_width_page object %}
     </div>
     </div>
+  </div>
 {% endblock %}
 {% endblock %}