Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 50 additions & 9 deletions scripts/js/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -179,16 +179,57 @@ $(() => {
$("td:eq(0)", row).html(ips.join("<br>"));

// MAC + Vendor field if available
if (data.macVendor && data.macVendor.length > 0) {
$("td:eq(1)", row).html(
utils.escapeHtml(data.hwaddr) + "<br>" + utils.escapeHtml(data.macVendor)
);
}

// Make mock MAC addresses italics and add title
const cell = $("td:eq(1)", row);
if (data.hwaddr.startsWith("ip-")) {
$("td:eq(1)", row).css("font-style", "italic");
$("td:eq(1)", row).attr("title", "Mock MAC address");
// Case 1 - Make mock MAC addresses italics and add title
cell.css("font-style", "italic").attr("title", "Mock MAC address");
} else if (data.hwaddr.includes(":")) {
// Case 2 — MAC-like address
const parts = data.hwaddr.split(":");
const firstOctet = Number.parseInt(parts[0], 16);
// Arithmetic-only flag detection
const isMulticast = firstOctet % 2 === 1; // bit 0
const isLocal = Math.floor(firstOctet / 2) % 2 === 1; // bit 1
// Multicast overrides all SLAP meaning
if (isMulticast) {
// Case 2.1 - Multicast
cell.html(utils.escapeHtml(data.hwaddr) + "<br>Multicast Address");
} else if (isLocal) {
// Case 2.2 - Local SLAP
let slapLabel = null;
// SLAP quadrant resolution (RFC 9542)
const ts = Math.floor(firstOctet / 4) % 4; // bits 2–3 become bits 0–1
switch (ts) {
case 0x0:
slapLabel = "Administratively Assigned (AAI)";
break;
case 0x1:
slapLabel = "Extended Local (ELI)";
break;
case 0x2:
slapLabel = "Reserved";
break;
case 0x3:
slapLabel = "Standard Assigned (SAI)";
break;
default:
// satisfy ESLint
slapLabel = "Unclassified";
break;
}

cell.html(utils.escapeHtml(data.hwaddr) + "<br>Locally Administered");
cell.css("font-style", "italic").attr("title", slapLabel);
} else if (data.macVendor && data.macVendor.length > 0) {
// Case 2.3 - Global address space (U/L = 0)
cell.html(utils.escapeHtml(data.hwaddr) + "<br>" + utils.escapeHtml(data.macVendor));
} else {
// Case 2.4 - Lookup failed
cell.html(utils.escapeHtml(data.hwaddr) + "<br>Global: Unknown");
}
} else {
// Case 3 — Not IP-mock, not MAC-like
cell.css("color", "red").html(utils.escapeHtml(data.hwaddr) + "<br>Unknown Format");
}

// Add delete button
Expand Down