feat: standards audit + form factors reference

- Migration 100: adds `description` column to standards (plain-language
  DE·EN for non-technical colleagues), fills all 63 standards incl.
  complete 200G tier (SR4/DR4/FR4/LR4/ER4/CR4), copper DAC variants,
  PON family (GPON/XG-PON1/NG-PON2/25G-PON), 1.6T emerging standard

- Migration 101: new form_factors table — 20 entries covering SFP family
  (SFP→SFP112), QSFP family (QSFP+→QSFP-DD800), OSFP family (OSFP→OSFP224),
  CFP family, legacy XFP/CXP with full_name, speed, channels, status,
  supersedes chain, and bilingual plain-language descriptions

- GET /api/form-factors — new endpoint, returns all form factors with
  transceiver_count join
- GET /api/form-factors/:name — single form factor detail

Dashboard Standards tab:
  - DB description shown as subtitle in standards table rows
  - Full DE + EN description in standard detail panel
  - New Form Factors grid section with status badges, speed, channel info,
    family color coding, supersedes chain
  - openFormFactorDetail() panel with full specs + transceiver link
  - Search extended to match description + notes fields
This commit is contained in:
Rene Fichtmueller 2026-04-25 20:58:45 +02:00
parent ff4bc34930
commit bfb43809a8
5 changed files with 777 additions and 6 deletions

View File

@ -33,6 +33,7 @@ import { stockRouter } from "./routes/stock";
import { priceComparisonRouter } from "./routes/price-comparison"; import { priceComparisonRouter } from "./routes/price-comparison";
import { selflearningRouter } from "./routes/selflearning"; import { selflearningRouter } from "./routes/selflearning";
import { internalDemandRouter } from "./routes/internal-demand"; import { internalDemandRouter } from "./routes/internal-demand";
import { formFactorsRouter } from "./routes/form-factors";
const app = express(); const app = express();
@ -94,6 +95,8 @@ app.use("/api/review", reviewRouter);
app.use("/api/stock", stockRouter); app.use("/api/stock", stockRouter);
app.use("/api/price-comparison", priceComparisonRouter); app.use("/api/price-comparison", priceComparisonRouter);
app.use("/api/selflearning", selflearningRouter); app.use("/api/selflearning", selflearningRouter);
// Form Factors reference
app.use("/api/form-factors", formFactorsRouter);
// Internal-only — restricted to localhost / LAN by the router itself // Internal-only — restricted to localhost / LAN by the router itself
app.use("/api/internal/demand", internalDemandRouter); app.use("/api/internal/demand", internalDemandRouter);

View File

@ -0,0 +1,73 @@
/**
* Form Factors API
*
* Routes:
* GET /api/form-factors All form factors with descriptions
* GET /api/form-factors/:name Single form factor by name (e.g. QSFP28)
*/
import { Router, Request, Response } from "express";
import { pool } from "../db/client";
export const formFactorsRouter = Router();
// GET /api/form-factors
formFactorsRouter.get("/", async (_req: Request, res: Response) => {
try {
const { rows } = await pool.query(`
SELECT
ff.*,
COUNT(t.id)::int AS transceiver_count
FROM form_factors ff
LEFT JOIN transceivers t ON t.form_factor = ff.name
GROUP BY ff.id
ORDER BY
CASE ff.status
WHEN 'current' THEN 1
WHEN 'emerging' THEN 2
WHEN 'legacy' THEN 3
WHEN 'obsolete' THEN 4
ELSE 5
END,
ff.max_speed_gbps DESC NULLS LAST,
ff.name
`);
res.json({ success: true, data: rows, total: rows.length });
} catch (err) {
console.error("GET /api/form-factors error:", err);
res.status(500).json({ success: false, error: "Internal server error" });
}
});
// GET /api/form-factors/:name
formFactorsRouter.get("/:name", async (req: Request, res: Response) => {
try {
const { rows } = await pool.query(`
SELECT
ff.*,
COUNT(t.id)::int AS transceiver_count,
COALESCE(
json_agg(DISTINCT jsonb_build_object(
'id', t.id,
'part_number', t.part_number,
'speed_gbps', t.speed_gbps,
'fiber_type', t.fiber_type,
'reach_label', t.reach_label
)) FILTER (WHERE t.id IS NOT NULL),
'[]'
) AS sample_transceivers
FROM form_factors ff
LEFT JOIN transceivers t ON t.form_factor = ff.name
WHERE LOWER(ff.name) = LOWER($1)
GROUP BY ff.id
`, [req.params.name]);
if (!rows.length) {
return res.status(404).json({ success: false, error: "Form factor not found" });
}
res.json({ success: true, data: rows[0] });
} catch (err) {
console.error(`GET /api/form-factors/${req.params.name} error:`, err);
res.status(500).json({ success: false, error: "Internal server error" });
}
});

View File

@ -1145,7 +1145,7 @@
<div class="table-wrap"> <div class="table-wrap">
<table> <table>
<thead><tr> <thead><tr>
<th>Standard Name</th><th>Speed</th><th>Form Factor(s)</th> <th style="min-width:160px">Standard Name</th><th>Speed</th><th>Form Factor(s)</th>
<th>Max Reach</th><th>Fiber</th><th>Wavelength</th> <th>Max Reach</th><th>Fiber</th><th>Wavelength</th>
<th>IEEE Ref</th><th>Body · Year</th><th>Status</th><th>Transceivers</th> <th>IEEE Ref</th><th>Body · Year</th><th>Status</th><th>Transceivers</th>
</tr></thead> </tr></thead>
@ -1153,6 +1153,28 @@
</table> </table>
</div> </div>
</div> </div>
<!-- Form Factors Reference -->
<div style="margin-top:1.5rem">
<div style="display:flex;align-items:center;gap:0.75rem;margin-bottom:0.75rem;flex-wrap:wrap">
<h3 style="font-size:0.95rem;font-weight:700;color:var(--text-bright);margin:0">Modul-Bauformen (Form Factors)</h3>
<span style="font-size:0.72rem;color:var(--text-dim);background:var(--surface3);padding:2px 8px;border-radius:6px">Erklärung für nicht-technische Kolleg:innen</span>
<select id="ff-family-filter" onchange="filterFormFactors()"
style="margin-left:auto;padding:6px 10px;border:1px solid var(--border);border-radius:8px;background:var(--bg2);color:var(--text);font-size:0.8rem">
<option value="">Alle Familien</option>
<option value="SFP family">SFP-Familie</option>
<option value="QSFP family">QSFP-Familie</option>
<option value="OSFP family">OSFP-Familie</option>
<option value="CFP family">CFP-Familie</option>
<option value="legacy">Legacy</option>
</select>
</div>
<div id="ff-grid" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:0.75rem">
<div class="card" style="padding:1rem;text-align:center;color:var(--text-dim);font-size:0.85rem" id="ff-loading">
<span class="loading pulse">Lade Bauformen…</span>
</div>
</div>
</div>
</div> </div>
<!-- SWITCHES --> <!-- SWITCHES -->
@ -4593,6 +4615,7 @@ document.addEventListener('click', function(e) {
// ── STANDARDS TAB ──────────────────────────────────────────────────────────── // ── STANDARDS TAB ────────────────────────────────────────────────────────────
var _allStandards = []; var _allStandards = [];
var _allFormFactors = [];
async function loadStandardsList() { async function loadStandardsList() {
var tbody = el('std-table'); var tbody = el('std-table');
@ -4620,11 +4643,139 @@ async function loadStandardsList() {
}).catch(function() {}); }).catch(function() {});
if (_allStandards.length === 0) { if (_allStandards.length === 0) {
tbody.innerHTML = '<tr><td colspan="7" class="loading pulse">Loading…</td></tr>'; tbody.innerHTML = '<tr><td colspan="10" class="loading pulse">Loading…</td></tr>';
var data = await api('/api/standards').catch(function() { return {}; }); var data = await api('/api/standards').catch(function() { return {}; });
_allStandards = data.data || []; _allStandards = data.data || [];
} }
filterStandardsTable(); filterStandardsTable();
// Also load form factors (lazy)
if (_allFormFactors.length === 0) loadFormFactors();
}
async function loadFormFactors() {
if (_allFormFactors.length > 0) { renderFormFactors(); return; }
var data = await api('/api/form-factors').catch(function() { return {}; });
_allFormFactors = data.data || [];
renderFormFactors();
}
function filterFormFactors() {
var family = el('ff-family-filter') ? el('ff-family-filter').value : '';
var filtered = family
? _allFormFactors.filter(function(f) { return (f.family || '') === family; })
: _allFormFactors;
renderFormFactors(filtered);
}
function renderFormFactors(items) {
var grid = el('ff-grid');
if (!grid) return;
var list = items || _allFormFactors;
if (!list.length) {
grid.innerHTML = '<div class="card" style="padding:1rem;color:var(--text-dim);font-size:0.85rem;grid-column:1/-1">Keine Bauformen geladen.</div>';
return;
}
var statusColors = { current: '#2d6a4f', emerging: '#e6a800', legacy: '#888', obsolete: '#c1121f' };
var statusLabels = { current: 'Aktuell', emerging: 'Neu/Emerging', legacy: 'Legacy', obsolete: 'Veraltet' };
var familyColors = { 'SFP family': '#0ea5e9', 'QSFP family': '#6366f1', 'OSFP family': '#FF8100', 'CFP family': '#2d6a4f', 'legacy': '#888' };
grid.innerHTML = list.map(function(f) {
var sCl = statusColors[f.status] || '#888';
var fCl = familyColors[f.family] || '#888';
var sLbl = statusLabels[f.status] || f.status || '';
var maxSpd = f.max_speed_gbps >= 1000 ? (f.max_speed_gbps/1000) + 'T' : (f.max_speed_gbps || '?') + 'G';
// Description: show first part (DE) if bilingual
var descFull = f.description || '';
var descDE = descFull.split('//')[0].trim();
var descEN = descFull.includes('//') ? descFull.split('//')[1].trim() : '';
var supersedes = Array.isArray(f.supersedes) ? f.supersedes.filter(Boolean) : [];
return '<div class="card" style="padding:1rem;display:flex;flex-direction:column;gap:0.5rem;cursor:pointer" onclick="openFormFactorDetail(\'' + esc(f.name) + '\')">'
// Header row
+ '<div style="display:flex;align-items:flex-start;gap:0.5rem;flex-wrap:wrap">'
+ '<span style="font-size:1rem;font-weight:700;color:var(--text-bright)">' + esc(f.name) + '</span>'
+ '<span style="background:' + fCl + '22;color:' + fCl + ';padding:1px 7px;border-radius:6px;font-size:0.68rem;font-weight:600;margin-left:auto">' + esc(f.family || '') + '</span>'
+ '</div>'
// Full name + speed badge
+ '<div style="display:flex;align-items:center;gap:0.4rem;flex-wrap:wrap">'
+ '<span style="font-size:0.75rem;color:var(--text-dim)">' + esc(f.full_name || '') + '</span>'
+ '<span style="background:' + sCl + '22;color:' + sCl + ';padding:1px 6px;border-radius:5px;font-size:0.65rem;font-weight:600;margin-left:auto">' + esc(sLbl) + '</span>'
+ '</div>'
// Speed + channels
+ '<div style="display:flex;gap:0.5rem;align-items:center">'
+ '<span style="font-size:0.85rem;font-weight:700;color:' + fCl + '">' + maxSpd + '</span>'
+ (f.channels ? '<span style="font-size:0.72rem;color:var(--text-dim)">' + f.channels + ' Kanal' + (f.channels > 1 ? 'e' : '') + '</span>' : '')
+ (f.channel_rate_gbps ? '<span style="font-size:0.72rem;color:var(--text-dim)">je ' + f.channel_rate_gbps + 'G</span>' : '')
+ (f.year_introduced ? '<span style="font-size:0.68rem;color:var(--text-dim);margin-left:auto">seit ' + f.year_introduced + '</span>' : '')
+ '</div>'
// Description (DE)
+ (descDE ? '<div style="font-size:0.78rem;color:var(--text);line-height:1.55;border-top:1px solid var(--border);padding-top:0.5rem">' + esc(descDE) + '</div>' : '')
// Supersedes
+ (supersedes.length ? '<div style="font-size:0.68rem;color:var(--text-dim)">Ersetzt: ' + supersedes.map(function(s) { return '<code style="font-size:0.7rem;color:var(--cyan)">' + esc(s) + '</code>'; }).join(', ') + '</div>' : '')
+ (f.transceiver_count > 0 ? '<div style="font-size:0.7rem;color:var(--accent);font-weight:600">' + f.transceiver_count + ' Transceiver in Datenbank</div>' : '')
+ '</div>';
}).join('');
}
function openFormFactorDetail(name) {
var f = _allFormFactors.find(function(x) { return x.name === name; });
if (!f) return;
var fCl = { 'SFP family': '#0ea5e9', 'QSFP family': '#6366f1', 'OSFP family': '#FF8100', 'CFP family': '#2d6a4f', 'legacy': '#888' }[f.family] || '#888';
var descFull = f.description || '';
var descDE = descFull.split('//')[0].trim();
var descEN = descFull.includes('//') ? descFull.split('//')[1].trim() : '';
var maxSpd = f.max_speed_gbps >= 1000 ? (f.max_speed_gbps/1000) + 'T' : (f.max_speed_gbps || '?') + 'G';
var supersedes = Array.isArray(f.supersedes) ? f.supersedes.filter(Boolean) : [];
var h = '';
h += '<div style="display:flex;align-items:center;gap:0.75rem;flex-wrap:wrap;margin-bottom:0.75rem">';
h += '<span style="font-size:1.2rem;font-weight:700;color:var(--text-bright)">' + esc(f.name) + '</span>';
h += '<span style="font-size:0.8rem;color:var(--text-dim)">' + esc(f.full_name || '') + '</span>';
h += '</div>';
// Plain-language description
if (descDE) {
h += '<div class="card" style="padding:1rem;border-left:3px solid ' + fCl + ';margin-bottom:1rem">';
h += '<div style="font-size:0.72rem;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-dim);margin-bottom:0.5rem">Was ist das?</div>';
h += '<div style="font-size:0.83rem;color:var(--text);line-height:1.6">' + esc(descDE) + '</div>';
if (descEN) {
h += '<div style="font-size:0.75rem;color:var(--text-dim);margin-top:0.5rem;border-top:1px solid var(--border);padding-top:0.5rem;font-style:italic">' + esc(descEN) + '</div>';
}
h += '</div>';
}
// Specs grid
var statusLabels = { current: 'Aktuell', emerging: 'Neu / Emerging', legacy: 'Legacy', obsolete: 'Veraltet / Obsolete' };
var specs = [
['Max. Geschwindigkeit', maxSpd],
['Kanäle', f.channels ? f.channels + ' × ' + (f.channel_rate_gbps || '?') + 'G' : '—'],
['Familie', f.family || '—'],
['Status', statusLabels[f.status] || f.status || '—'],
['Hot-swap', f.hot_swap ? 'Ja — im laufenden Betrieb tauschbar' : 'Nein'],
['Stecker (typisch)', f.connector_type || '—'],
['Auf dem Markt seit', f.year_introduced ? String(f.year_introduced) : '—'],
['Ersetzt durch', f.superseded_by || '—'],
['Größe (B×T)', (f.physical_width_mm && f.physical_height_mm) ? f.physical_width_mm + 'mm × ' + f.physical_height_mm + 'mm' : '—']
];
h += '<div style="display:grid;grid-template-columns:1fr 1fr;gap:0.5rem;margin-bottom:1rem">';
specs.forEach(function(sp) {
if (!sp[1] || sp[1] === '—') return;
h += '<div style="background:var(--surface3);padding:0.5rem 0.75rem;border-radius:8px">'
+ '<div style="font-size:0.65rem;color:var(--text-dim);margin-bottom:2px">' + esc(sp[0]) + '</div>'
+ '<div style="font-size:0.78rem;font-weight:600;color:var(--text-bright)">' + esc(String(sp[1])) + '</div>'
+ '</div>';
});
h += '</div>';
if (supersedes.length) {
h += '<div style="margin-bottom:1rem"><div style="font-size:0.72rem;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-dim);margin-bottom:0.4rem">Ersetzt diese Bauform(en):</div>';
h += '<div style="display:flex;gap:0.4rem;flex-wrap:wrap">';
supersedes.forEach(function(s) { h += '<span class="b b-blue" style="font-size:0.78rem">' + esc(s) + '</span>'; });
h += '</div></div>';
}
if (f.transceiver_count > 0) {
h += '<button class="btn" style="background:' + fCl + ';color:#fff;font-size:0.8rem" '
+ 'onclick="goToTab(\'transceivers\');el(\'tx-search\').value=\'' + esc(f.name) + '\';searchTransceivers();closePanel()">'
+ 'Transceiver mit ' + esc(f.name) + ' anzeigen →</button>';
}
if (f.notes) {
h += '<div class="card" style="margin-top:0.75rem;padding:0.75rem;font-size:0.75rem;color:var(--text-dim);line-height:1.55"><strong style="color:var(--text)">Technische Hinweise:</strong> ' + esc(f.notes) + '</div>';
}
openPanel(f.name + ' — Modul-Bauform', h);
} }
function filterStandardsTable() { function filterStandardsTable() {
@ -4637,7 +4788,9 @@ function filterStandardsTable() {
var matchQ = !q || (s.name || '').toLowerCase().includes(q) var matchQ = !q || (s.name || '').toLowerCase().includes(q)
|| (s.ieee_reference || '').toLowerCase().includes(q) || (s.ieee_reference || '').toLowerCase().includes(q)
|| ffStr.toLowerCase().includes(q) || ffStr.toLowerCase().includes(q)
|| (s.speed || '').toLowerCase().includes(q); || (s.speed || '').toLowerCase().includes(q)
|| (s.description || '').toLowerCase().includes(q)
|| (s.notes || '').toLowerCase().includes(q);
var matchS = !speed || String(s.speed_gbps) === speed; var matchS = !speed || String(s.speed_gbps) === speed;
return matchQ && matchS; return matchQ && matchS;
}); });
@ -4662,8 +4815,15 @@ function filterStandardsTable() {
? '<span style="background:' + sCl + '22;color:' + sCl + ';padding:1px 7px;border-radius:8px;font-size:0.68rem;font-weight:600">' + esc(s.status) + '</span>' ? '<span style="background:' + sCl + '22;color:' + sCl + ';padding:1px 7px;border-radius:8px;font-size:0.68rem;font-weight:600">' + esc(s.status) + '</span>'
: '<span style="color:var(--text-dim)"></span>'; : '<span style="color:var(--text-dim)"></span>';
var sidx = _allStandards.indexOf(s); var sidx = _allStandards.indexOf(s);
// Show description (DE part before //) as subtitle
var descFull = s.description || '';
var descDE = descFull.split('//')[0].trim();
// Shorten to ~80 chars for table
var descShort = descDE.length > 85 ? descDE.slice(0, 82) + '…' : descDE;
var nameCell = '<div style="font-weight:700;color:var(--text-bright);line-height:1.2">' + esc(s.name || '—') + '</div>'
+ (descShort ? '<div style="font-size:0.68rem;color:var(--text-dim);margin-top:2px;line-height:1.35;max-width:28ch;white-space:normal">' + esc(descShort) + '</div>' : '');
return '<tr style="cursor:pointer" onclick="openStandardDetail(' + sidx + ')">' return '<tr style="cursor:pointer" onclick="openStandardDetail(' + sidx + ')">'
+ '<td style="font-weight:700;color:var(--text-bright);min-width:120px">' + esc(s.name || '—') + '</td>' + '<td style="min-width:180px;padding-top:5px;padding-bottom:5px">' + nameCell + '</td>'
+ '<td><span style="background:' + col + '22;color:' + col + ';padding:2px 8px;border-radius:8px;font-weight:700;font-size:0.8rem;white-space:nowrap">' + (s.speed_gbps || '—') + 'G</span></td>' + '<td><span style="background:' + col + '22;color:' + col + ';padding:2px 8px;border-radius:8px;font-weight:700;font-size:0.8rem;white-space:nowrap">' + (s.speed_gbps || '—') + 'G</span></td>'
+ '<td style="min-width:100px">' + (ffBadges || '<span style="color:var(--text-dim)"></span>') + '</td>' + '<td style="min-width:100px">' + (ffBadges || '<span style="color:var(--text-dim)"></span>') + '</td>'
+ '<td style="white-space:nowrap">' + esc(s.max_reach_label || '—') + '</td>' + '<td style="white-space:nowrap">' + esc(s.max_reach_label || '—') + '</td>'
@ -4797,6 +4957,10 @@ async function openStandardDetail(idx) {
var speedColors = { 1600: '#7c3aed', 800: '#c1121f', 400: '#FF8100', 200: '#e6a800', 100: '#2d6a4f', 40: '#4287f5', 25: '#0ea5e9', 10: '#888', 1: '#555' }; var speedColors = { 1600: '#7c3aed', 800: '#c1121f', 400: '#FF8100', 200: '#e6a800', 100: '#2d6a4f', 40: '#4287f5', 25: '#0ea5e9', 10: '#888', 1: '#555' };
var col = speedColors[spd] || '#888'; var col = speedColors[spd] || '#888';
var ffs = Array.isArray(s.form_factors) ? s.form_factors : [s.form_factors || '']; var ffs = Array.isArray(s.form_factors) ? s.form_factors : [s.form_factors || ''];
// Prefer DB description if available, fall back to generated explanation
var dbDescFull = s.description || '';
var dbDescDE = dbDescFull.split('//')[0].trim();
var dbDescEN = dbDescFull.includes('//') ? dbDescFull.split('//')[1].trim() : '';
var explained = genStdPlainExplanation(s); var explained = genStdPlainExplanation(s);
var useCases = STD_USE_CASES[spd] || STD_USE_CASES[10]; var useCases = STD_USE_CASES[spd] || STD_USE_CASES[10];
@ -4815,10 +4979,17 @@ async function openStandardDetail(idx) {
h += '<div style="font-size:0.82rem;color:#FF8100;font-weight:600">' + esc(explained.headline) + '</div>'; h += '<div style="font-size:0.82rem;color:#FF8100;font-weight:600">' + esc(explained.headline) + '</div>';
h += '</div>'; h += '</div>';
// Plain-language explanation // Plain-language explanation — DB description preferred, generated as fallback
h += '<div class="card" style="margin-bottom:1rem;padding:1rem;border-left:3px solid ' + col + '">'; h += '<div class="card" style="margin-bottom:1rem;padding:1rem;border-left:3px solid ' + col + '">';
h += '<div style="font-size:0.72rem;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-dim);margin-bottom:0.6rem">Was ist das?</div>'; h += '<div style="font-size:0.72rem;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-dim);margin-bottom:0.6rem">Was ist das?</div>';
if (dbDescDE) {
h += '<div style="font-size:0.83rem;color:var(--text);line-height:1.65">' + esc(dbDescDE) + '</div>';
if (dbDescEN) {
h += '<div style="font-size:0.75rem;color:var(--text-dim);margin-top:0.6rem;border-top:1px solid var(--border);padding-top:0.5rem;font-style:italic">' + esc(dbDescEN) + '</div>';
}
} else {
h += '<div style="font-size:0.83rem;color:var(--text);line-height:1.65">' + explained.body + '</div>'; h += '<div style="font-size:0.83rem;color:var(--text);line-height:1.65">' + explained.body + '</div>';
}
h += '</div>'; h += '</div>';
// Key specs grid // Key specs grid

View File

@ -0,0 +1,277 @@
-- Migration 100: Plain-Language Descriptions + Missing Standards
-- ─────────────────────────────────────────────────────────────────────────────
-- 1. Adds `description` column (TEXT) to the standards table
-- — written for non-technical colleagues, bilingual (DE · EN)
-- 2. Updates all 40 existing standards with plain-language descriptions
-- 3. Inserts all missing standards (200G tier, PON, copper/DAC, extended-reach)
--
-- Total after migration: ~70+ standards covering 1G → 1.6T
-- ─────────────────────────────────────────────────────────────────────────────
-- Step 1: Add description column
ALTER TABLE standards
ADD COLUMN IF NOT EXISTS description TEXT;
-- ─────────────────────────────────────────────────────────────────────────────
-- Step 2: Update existing standards with plain-language descriptions
-- ─────────────────────────────────────────────────────────────────────────────
-- 1G Standards
UPDATE standards SET description = 'Kurzstrecken-Gigabit über Multi-Mode-Glasfaser. Reichweite bis 550m — typisch in Bürogebäuden und Campus-Netzwerken. Der meistgenutzte 1G-Glasfaser-Standard weltweit. // Short-reach Gigabit Ethernet over multi-mode fiber. Up to 550m — the dominant 1G fiber standard for office buildings and campus networks.' WHERE name = '1000BASE-SX';
UPDATE standards SET description = 'Langstrecken-Gigabit über Einzel-Modus-Glasfaser (SMF). Reichweite bis 10km — verbindet Gebäude, Stockwerke oder Standorte. Der Standard für GbE auf größeren Geländen. // Long-reach Gigabit Ethernet over single-mode fiber. Up to 10km — connects buildings, floors, or remote sites across a campus.' WHERE name = '1000BASE-LX';
UPDATE standards SET description = 'Wie 1000BASE-LX, aber formal für Zugangsnetzwerke definiert (EFM-Standard für Richtfunk/FTTH). Identische Hardware, nur andere formale Spezifikation. // Same as LX but formally defined for access networks (EFM). Identical hardware, different formal scope — used in FTTx access deployments.' WHERE name = '1000BASE-LX10';
UPDATE standards SET description = 'BiDi-Gigabit: Senden und Empfangen über eine einzige Glasfaser. Halbiert den Glasfaserbedarf bei FTTH-Netzwerken. Die Hin- und Rückrichtung nutzen verschiedene Wellenlängen (1310/1490nm). // Bidirectional Gigabit over a single fiber strand using two wavelengths. Halves fiber costs — one cable instead of two. Standard for fiber-to-the-home (FTTH) last-mile.' WHERE name = '1000BASE-BX10';
UPDATE standards SET description = '10G-PON: Passives optisches Netzwerk mit 10 Gbit/s, das ISPs für Hochgeschwindigkeits-Breitband (z.B. 1-Gbit-Heimanschlüsse) nutzen. Upstream und Downstream sind symmetrisch 10G. // 10G symmetric passive optical network — used by ISPs to deliver 1G+ broadband to homes and businesses. Both upload and download run at 10G.' WHERE name = 'XGS-PON';
-- 10G Standards
UPDATE standards SET description = 'Kurzstrecken-10-Gigabit über Multi-Mode-Glasfaser. Reichweite 100300m — der Standard für Server-Anbindungen im Rechenzentrum. Läuft auf günstigem OM3/OM4-Kabel. // Short-reach 10G over multi-mode fiber. 100300m — the backbone of server-to-switch connections in data centers. Uses affordable OM3/OM4 cable.' WHERE name = '10GBASE-SR';
UPDATE standards SET description = 'Langstrecken-10-Gigabit über Einzel-Modus-Glasfaser. Reichweite 10km — verbindet verschiedene Gebäude oder Etagen. Der häufigste Weitverbindungs-10G-Standard. // Long-reach 10G over single-mode fiber. Up to 10km — connects separate buildings or data halls. The most common long-distance 10G interface.' WHERE name = '10GBASE-LR';
UPDATE standards SET description = 'Erweiterte Reichweite: 10-Gigabit über 40km Einzel-Modus-Glasfaser. Für Metro-Strecken und Campus-Verbindungen, wo 10km nicht ausreichen. // Extended-reach 10G over single-mode fiber. Up to 40km — used for metro links, inter-campus connections, and multi-building deployments.' WHERE name = '10GBASE-ER';
UPDATE standards SET description = 'Herstellerstandard (kein offizieller IEEE-Standard): 10-Gigabit über 80km Glasfaser. Für Stadtverbindungen und Fernstrecken ohne Signalverstärker. // Vendor de-facto standard: 10G over 80km single-mode fiber. Used for city-scale links and long-haul connections where amplifiers are unavailable.' WHERE name = '10GBASE-ZR';
UPDATE standards SET description = 'Speziell für ältere Multi-Mode-Glasfaser (OM1/OM2) entwickelt. Reichweite 220m — ermöglicht 10G-Upgrade ohne Austausch der vorhandenen Legacy-Verkabelung. // Designed for legacy OM1/OM2 multi-mode fiber. 220m reach — enables 10G upgrades without replacing existing cable infrastructure.' WHERE name = '10GBASE-LRM';
UPDATE standards SET description = '10-Gigabit über Standard-Kupferkabel (Cat6A). Reichweite 100m — ermöglicht 10G-Speeds mit vorhandener Kupferverkabelung. Höherer Stromverbrauch als Glasfaser-Optionen. // 10G Ethernet over copper cable (Cat6A). Up to 100m — enables 10G speeds using existing copper infrastructure. Higher power than fiber options.' WHERE name = '10GBASE-T';
-- 25G Standards
UPDATE standards SET description = 'Kurzstrecken-25-Gigabit über Multi-Mode-Glasfaser. Reichweite 70100m — seit 2017 der Standardanschluss für Server-Netzwerkkarten im Rechenzentrum. Löst 10G als ToR-Standard ab. // Short-reach 25G over multi-mode fiber. 70100m — the dominant server NIC uplink standard since 2017. Replaced 10G as the default top-of-rack server connection.' WHERE name = '25GBASE-SR';
UPDATE standards SET description = 'Langstrecken-25-Gigabit über Einzel-Modus-Glasfaser. Reichweite 10km — für 25G-Verbindungen über größere Distanzen als OM4 erlaubt. // Long-reach 25G over single-mode fiber. Up to 10km — used where servers need longer fiber runs than the MMF-based SR variant allows.' WHERE name = '25GBASE-LR';
UPDATE standards SET description = 'Erweiterte Reichweite: 25-Gigabit über 40km Einzel-Modus-Glasfaser. Für 25G-Strecken über mehrere Gebäude oder Metro-Distanzen. // Extended-reach 25G over single-mode fiber. Up to 40km — for 25G links spanning multiple buildings or metro distances.' WHERE name = '25GBASE-ER';
-- 40G Standards
UPDATE standards SET description = '40-Gigabit mit 4 parallelen Glasfaser-Kanälen (8-Faser-MPO-Kabel). Reichweite 100150m — war der Standard für 40G-Verbindungen im Rechenzentrum, heute durch 100G abgelöst. // 40G over 4 parallel fiber lanes (8-fiber MPO cable). 100150m — was the dominant 40G data center standard, now largely replaced by 100G.' WHERE name = '40GBASE-SR4';
UPDATE standards SET description = '40-Gigabit mit 4 WDM-Wellenlängen über eine Glasfaserleitung. Reichweite 10km — verbindet Gebäude mit normalem LC-Duplex-Stecker. Günstig weil kein Parallelkabel nötig. // 40G using 4 WDM wavelengths over a single fiber pair. Up to 10km — connects buildings with a standard duplex LC cable. Cost-effective long-reach 40G.' WHERE name = '40GBASE-LR4';
UPDATE standards SET description = 'Erweiterte Reichweite: 40-Gigabit über 40km Einzel-Modus-Glasfaser. Für 40G-Strecken jenseits der LR4-Reichweite. // Extended-reach 40G over single-mode fiber. Up to 40km — for 40G links beyond the 10km LR4 range.' WHERE name = '40GBASE-ER4';
UPDATE standards SET description = 'Paralleloptik-40G über 4 einzelne Einzel-Modus-Fasern (8-Faser-MPO, 10km). Ähnlich wie SR4, aber für SMF statt MMF — bei Systemen die SMF-MPO-Kabel nutzen. // Parallel 40G over 4 single-mode fibers (8-fiber MPO). Like SR4 but for single-mode — used in systems that require SMF with MPO connectors.' WHERE name = '40GBASE-PLR4';
-- 100G Standards
UPDATE standards SET description = 'Kurzstrecken-100-Gigabit mit 4 parallelen Glasfaser-Kanälen (je 25G). Reichweite 70100m — der Standard für Server- und Spine-Verbindungen in modernen Hyperscale-Rechenzentren. // Short-reach 100G using 4 parallel 25G fiber lanes. 70100m — the dominant 100G standard for server and spine connections in modern hyperscale data centers.' WHERE name = '100GBASE-SR4';
UPDATE standards SET description = 'Langstrecken-100-Gigabit mit 4 WDM-Wellenlängen (je 25G). Reichweite 10km — verbindet Rechenzentrumsgebäude. Häufigste Langstrecken-100G-Schnittstelle weltweit. // Long-reach 100G using 4 WDM wavelengths at 25G each. Up to 10km — connects data hall buildings. The most widely deployed long-distance 100G interface globally.' WHERE name = '100GBASE-LR4';
UPDATE standards SET description = 'Erweiterte Reichweite: 100-Gigabit über 40km Einzel-Modus-Glasfaser (4 WDM-Kanäle). Für 100G-Strecken jenseits der LR4-Reichweite, z.B. zwischen weit entfernten Standorten. // Extended-reach 100G over 40km single-mode fiber (4 WDM channels). For 100G links beyond LR4 range, e.g. between distant sites.' WHERE name = '100GBASE-ER4';
UPDATE standards SET description = 'Mittlere Reichweite: 100-Gigabit mit einem einzigen Laserstrahl (Single-Lambda). Reichweite 2km — einfacheres Design als LR4 (ein Laser statt vier), günstiger für mittlere Distanzen. // Medium-reach 100G using a single laser wavelength. Up to 2km — simpler design than LR4 (one laser instead of four), cost-effective for medium distances.' WHERE name = '100GBASE-FR';
UPDATE standards SET description = 'Paralleloptik-100G über 4 parallele Einzel-Modus-Fasern (MPO-Stecker). Reichweite 500m — kostengünstiges Design für 100G innerhalb eines Geländes. // Parallel 100G over 4 single-mode fibers with MPO connector. Up to 500m — cost-effective 100G design for intra-campus connections.' WHERE name = '100GBASE-DR';
UPDATE standards SET description = 'Langstrecken-100G mit einem einzigen Laser (Single-Lambda). Reichweite 10km über SMF — modernere, einfachere Alternative zu LR4 für neue Deployments. // Long-reach 100G using a single high-speed laser. Up to 10km over SMF — a simpler, more modern alternative to LR4 for new deployments.' WHERE name = '100GBASE-LR';
UPDATE standards SET description = 'Mittlere Reichweite: 100-Gigabit mit 4 groben WDM-Wellenlängen. Reichweite 2km — günstiger als LR4 für kurze bis mittlere Strecken dank einfacherer Laser-Technologie. // 100G using 4 coarse WDM wavelengths. Up to 2km — lower cost than LR4 for short-to-medium distances thanks to simpler laser technology.' WHERE name = '100GBASE-CWDM4';
UPDATE standards SET description = 'Paralleloptik-100G über 4 einzelne SMF-Fasern (MPO-12-Kabel). Reichweite 500m — kostengünstige 100G-Option für Gebäude-interne Verbindungen. // Parallel single-mode 100G over 4 SMF fibers (MPO-12 cable). Up to 500m — cost-effective 100G option for intra-building connections.' WHERE name = '100GBASE-PSM4';
UPDATE standards SET description = 'Kohärente Langstrecken-100G-Übertragung bis 1000km+ (mit EDFA-Verstärkern). Nutzt komplexe Modulationsverfahren wie bei Mobilfunk — für Telko-Backbone-Netze und Trans-Kontinent-Strecken. // Coherent 100G for metro and long-haul networks. Works up to 1000km+ with amplification — carrier-grade for telecom backbone and trans-continental links.' WHERE name = '100G-ZR(OIF)';
UPDATE standards SET description = 'Abstimmbares (tunable) 100G-Modul für DWDM-Netzwerke. Die Wellenlänge kann auf jeden ITU-T-Kanal eingestellt werden — ein Modultyp deckt alle WDM-Netzwerk-Slots ab und vereinfacht das Ersatzteilmanagement. // Tunable 100G module for DWDM networks. Wavelength is adjustable to any ITU-T channel — one module type covers all WDM slots, simplifying spares inventory.' WHERE name = '100G DWDM Tunable';
-- 400G Standards
UPDATE standards SET description = 'Kurzstrecken-400G mit 4 parallelen MMF-Kanälen (4×100G, SWDM4). Reichweite 150m — nutzt Multi-Mode-Glasfaser für 400G in Rechenzentren. // Short-reach 400G using 4 WDM lanes over multi-mode fiber (SWDM4 technique). Up to 150m — enables 400G over standard OM4 multi-mode cabling.' WHERE name = '400GBASE-SR4.2';
UPDATE standards SET description = '400-Gigabit mit 8 parallelen MMF-Kanälen. Reichweite 100m — benötigt 16-Faser-MPO-Kabel. Für sehr dichte 400G-Kurzstrecken-Verbindungen. // 400G using 8 parallel multi-mode fiber lanes. Up to 100m — requires 16-fiber MPO cable. For high-density 400G short-reach connections.' WHERE name = '400GBASE-SR8';
UPDATE standards SET description = 'Paralleloptik-400G über 4 parallele SMF-Fasern (MPO-12). Reichweite 500m — für 400G innerhalb eines Hyperscale-Geländes oder zwischen benachbarten Gebäuden. // Parallel 400G over 4 single-mode fibers (MPO-12 cable). Up to 500m — used for intra-campus 400G in hyperscale environments.' WHERE name = '400GBASE-DR4';
UPDATE standards SET description = 'Mittlere Reichweite: 400-Gigabit mit 4 WDM-Wellenlängen (je 100G). Reichweite 2km — kostengünstige 400G-Option für mittlere Distanzen mit LC-Duplex-Stecker. // Medium-reach 400G using 4 WDM wavelengths (100G each). Up to 2km — cost-effective 400G with standard LC duplex connector.' WHERE name = '400GBASE-FR4';
UPDATE standards SET description = 'Langstrecken-400G mit 4 WDM-Wellenlängen (je 100G). Reichweite 10km — Standard für 400G zwischen Gebäuden und Rechenzentrumsstandorten. // Long-reach 400G using 4 WDM wavelengths (100G each). Up to 10km — the standard for 400G inter-building and inter-site connections.' WHERE name = '400GBASE-LR4';
UPDATE standards SET description = 'Kohärente Langstrecken-400G bis 1000km+ (pluggable). Das erste weit verbreitete vollständig steckbare kohärente Modul — revolutionierte das Telko-Netz indem DWDM-Transponder in kleinen QSFP-DD-Gehäusen möglich wurden. // Coherent 400G up to 1000km+ (fully pluggable). The first widely deployed pluggable coherent module — revolutionized telecom by fitting DWDM transponder capability into a QSFP-DD package.' WHERE name = '400G-ZR(OIF)';
UPDATE standards SET description = 'Erweiterte kohärente 400G-Übertragung mit höherer Sendeleistung. Längere Reichweite als ZR — für Metro- und Regional-Netze. Kompatibel mit ZR-Geräten aber höhere Anforderungen an den Empfänger. // Enhanced coherent 400G with higher transmit power. Longer reach than ZR — for metro and regional networks. Compatible with ZR equipment but with higher receiver demands.' WHERE name = '400G-ZR+(OIF)';
UPDATE standards SET description = 'Abstimmbares (tunable) 400G-Modul für DWDM-Netze. Einstellbare Wellenlänge auf jeden ITU-T-Kanal — für Carrier und Service Provider die flexibles WDM-Netzwerkdesign brauchen. // Tunable 400G module for DWDM networks. Adjustable to any ITU-T channel — for carriers and service providers needing flexible WDM network design.' WHERE name = '400G DWDM Tunable';
-- 800G Standards
UPDATE standards SET description = 'Kurzstrecken-800-Gigabit mit 8 parallelen MMF-Kanälen. Reichweite 50m — der neue Standard für AI/ML-Cluster-Verbindungen der nächsten Generation. Benötigt 16-Faser-MPO-Kabel. // Short-reach 800G using 8 parallel multi-mode fiber lanes. Up to 50m — next-generation AI/ML cluster interconnect. Requires 16-fiber MPO cable.' WHERE name = '800GBASE-SR8';
UPDATE standards SET description = '800-Gigabit mit 8 parallelen SMF-Fasern (MPO-16). Reichweite 500m — Hyperscale-Campus-Verbindungen der nächsten Generation. Zwei Module zusammen entsprechen 1.6T Kapazität. // 800G using 8 parallel single-mode fibers (MPO-16 cable). Up to 500m — next-generation hyperscale campus connectivity. Two modules together equal 1.6T capacity.' WHERE name = '800GBASE-DR8';
UPDATE standards SET description = 'Langstrecken-800G mit 4 WDM-Wellenlängen (je 200G, PAM4). Reichweite 10km — aufkommender Standard für 800G zwischen Gebäuden. Noch in früher Marktdurchdringung. // Long-reach 800G using 4 WDM wavelengths (200G each, PAM4). Up to 10km — emerging standard for 800G inter-building links. Still early in market adoption.' WHERE name = '800GBASE-LR4';
UPDATE standards SET description = 'Kohärente Langstrecken-800G bis 1000km+ (pluggable). Das leistungsfähigste steckbare kohärente Modul heute — für Telko-Backbone und Ultra-High-Capacity-WDM-Netze. // Coherent 800G up to 1000km+ (fully pluggable). The highest-capacity pluggable coherent module available today — for telecom backbone and ultra-high-capacity WDM networks.' WHERE name = '800G-ZR(OIF)';
-- ─────────────────────────────────────────────────────────────────────────────
-- Step 3: Insert missing standards
-- ─────────────────────────────────────────────────────────────────────────────
INSERT INTO standards (name, ieee_reference, body, speed, speed_gbps, form_factors, max_reach_meters, max_reach_label, fiber_type, wavelength, status, year_ratified, notes, description)
VALUES
-- ── 1G (copper + extended reach) ─────────────────────────────────────────────
('1000BASE-T',
'IEEE 802.3ab', 'IEEE', '1G', 1,
'{RJ45}', 100, '100m',
'copper', NULL,
'ratified', 1999,
'4-pair Cat5e/Cat6 copper, 1000Mbps. The universal desktop and IP phone standard.',
'Gigabit-Ethernet über Standard-Kupferkabel (Cat5e/Cat6). Reichweite 100m — der universelle Standard für PCs, Drucker, IP-Telefone und IoT-Geräte. Kein Glasfaser nötig. // Gigabit Ethernet over standard copper cable (Cat5e/Cat6). Up to 100m — the universal standard for desktop PCs, printers, IP phones, and IoT devices. No fiber required.'),
('1000BASE-ZX',
NULL, 'de_facto', '1G', 1,
'{SFP}', 80000, '80km',
'SMF', '1550nm',
'ratified', 2003,
'Vendor de facto, 1550nm DFB, 80km SMF. For metropolitan and inter-city 1G links.',
'Ultra-Langstrecken-Gigabit über 80km Einzel-Modus-Glasfaser (Herstellerstandard). Für Stadtverbindungen und Metro-Netze wo 10G noch zu teuer ist. // Ultra-long-reach Gigabit over 80km single-mode fiber (vendor de-facto). For city-scale metro links and long-haul connections where 10G is still cost-prohibitive.'),
-- ── 10G (ultra short reach) ───────────────────────────────────────────────────
('10GBASE-USR',
NULL, 'MSA', '10G', 10,
'{SFP+,XFP}', 2, '2m',
'MMF', '850nm',
'ratified', 2010,
'Ultra short reach, backplane and board-to-board applications. 2m OM3.',
'Ultra-Kurzstrecken-10G: nur 2 Meter Reichweite. Für Verbindungen innerhalb eines Switch-Chassis oder zwischen direkt nebeneinander stehenden Geräten (Backplane-Optik). // Ultra-short-reach 10G: only 2 meters. Used inside switch chassis or between co-located devices (backplane optical connections).'),
-- ── 25G (copper) ─────────────────────────────────────────────────────────────
('25GBASE-CR',
'IEEE 802.3by', 'IEEE', '25G', 25,
'{SFP28}', 5, '5m',
'copper', NULL,
'ratified', 2016,
'Direct attach copper (DAC), 25G, up to 5m. Cheapest 25G option for same-rack connections.',
'25G über Kupfer-Twinax-Kabel (DAC). Reichweite bis 5m — die günstigste 25G-Option für Verbindungen zwischen Geräten im selben Rack. Kein Transceiver nötig, Kabel steckt direkt ein. // 25G direct attach copper (DAC cable). Up to 5m — the cheapest 25G option for same-rack device connections. No transceiver needed, the cable plugs directly in.'),
-- ── 40G (copper) ─────────────────────────────────────────────────────────────
('40GBASE-CR4',
'IEEE 802.3ba', 'IEEE', '40G', 40,
'{QSFP+}', 7, '7m',
'copper', NULL,
'ratified', 2010,
'4-lane copper twinax DAC, 40G, up to 7m. Standard for short-range 40G within rack or between adjacent racks.',
'40G über 4-Kanal-Kupfer-Twinax-Kabel (DAC). Reichweite bis 7m — die günstigste Option für kurze 40G-Verbindungen im oder zwischen benachbarten Racks. // 40G over 4-lane copper twinax cable (DAC). Up to 7m — the cheapest option for short 40G connections within or between adjacent racks.'),
-- ── 100G (copper + parallel legacy) ──────────────────────────────────────────
('100GBASE-CR4',
'IEEE 802.3bj', 'IEEE', '100G', 100,
'{QSFP28}', 5, '5m',
'copper', NULL,
'ratified', 2014,
'4-lane copper twinax DAC/AEC, 100G. Low-cost ToR server connections.',
'100G über 4-Kanal-Kupfer-Twinax-Kabel (DAC/AEC). Reichweite bis 5m — die günstigste Option für 100G-Serveranschlüsse am Top-of-Rack-Switch. // 100G over 4-lane copper twinax cable (DAC/AEC). Up to 5m — the lowest-cost option for 100G top-of-rack server connections.'),
('100GBASE-SR10',
'IEEE 802.3ba', 'IEEE', '100G', 100,
'{CFP,CXP}', 150, '150m',
'MMF', '850nm',
'ratified', 2010,
'Early 100G design using 10×10G parallel lanes, 24-fiber MPO. Now legacy — replaced by SR4 and QSFP28.',
'Frühe 100G-Technik mit 10 parallelen 10G-Kanälen (24-Faser-MPO). Heute veraltet — wurde durch 100GBASE-SR4 und QSFP28 abgelöst. Noch in einigen älteren Installationen zu finden. // Early 100G design using 10 parallel 10G lanes (24-fiber MPO cable). Now legacy — replaced by SR4 and QSFP28. Still found in older installations.'),
-- ── 200G tier (completely missing) ───────────────────────────────────────────
('200GBASE-SR4',
'IEEE 802.3cd', 'IEEE', '200G', 200,
'{QSFP56,QSFP-DD}', 100, '100m',
'MMF', '850nm',
'ratified', 2018,
'4x50G parallel MMF (850nm), 100m OM4, 75m OM3. High-density 200G data center fabric.',
'Kurzstrecken-200G mit 4 parallelen MMF-Kanälen (je 50G). Reichweite 100m auf OM4 — für Hochdichte-200G-Verbindungen in Hyperscale-Rechenzentren. Doppelte Dichte gegenüber 100G-SR4. // Short-reach 200G using 4 parallel 50G MMF lanes. Up to 100m on OM4 — for high-density 200G in hyperscale data centers. Double the density of 100G SR4.'),
('200GBASE-DR4',
'IEEE 802.3cn', 'IEEE', '200G', 200,
'{QSFP56,QSFP-DD}', 500, '500m',
'SMF', '1310nm',
'ratified', 2019,
'4x50G parallel SMF, MPO-12, 500m. Hyperscale campus 200G connectivity.',
'Paralleloptik-200G über 4 SMF-Fasern (MPO-12-Kabel). Reichweite 500m — für 200G-Verbindungen auf Hyperscale-Geländen wo mehr als 100m nötig sind. // Parallel 200G over 4 single-mode fibers (MPO-12 cable). Up to 500m — for 200G connections on hyperscale campuses requiring more than the 100m MMF range.'),
('200GBASE-FR4',
'IEEE 802.3cn', 'IEEE', '200G', 200,
'{QSFP56,QSFP-DD}', 2000, '2km',
'SMF', '1310nm',
'ratified', 2019,
'4x50G WDM over single SMF pair (LC duplex), 2km. Cost-effective medium-reach 200G.',
'Mittlere Reichweite: 200G mit 4 WDM-Wellenlängen (je 50G). Reichweite 2km mit normalem LC-Duplex-Stecker — kostengünstige 200G-Option für mittlere Distanzen. // Medium-reach 200G using 4 WDM wavelengths (50G each). Up to 2km with standard LC duplex connector — cost-effective 200G for medium distances.'),
('200GBASE-LR4',
'IEEE 802.3cn', 'IEEE', '200G', 200,
'{QSFP56,QSFP-DD}', 10000, '10km',
'SMF', '1310nm',
'ratified', 2019,
'4x50G LAN-WDM over SMF, 10km LC duplex. Standard long-reach 200G inter-building interface.',
'Langstrecken-200G mit 4 WDM-Wellenlängen (je 50G). Reichweite 10km — Standard für 200G zwischen Gebäuden und Rechenzentrumsstandorten. LC-Duplex-Stecker wie bei 100G-LR4. // Long-reach 200G using 4 WDM wavelengths (50G each). Up to 10km — standard for 200G inter-building and inter-site connections. Same LC duplex connector as 100G LR4.'),
('200GBASE-ER4',
'IEEE 802.3cn', 'IEEE', '200G', 200,
'{QSFP56,QSFP-DD}', 40000, '40km',
'SMF', '1310nm',
'ratified', 2020,
'4x50G WDM, 40km extended reach SMF. For 200G metro and long-haul applications.',
'Erweiterte Reichweite: 200G mit 4 WDM-Wellenlängen über 40km SMF. Für 200G-Metro-Verbindungen zwischen weit entfernten Standorten. // Extended-reach 200G using 4 WDM wavelengths over 40km SMF. For 200G metro and long-haul links between distant sites.'),
('200GBASE-CR4',
'IEEE 802.3cd', 'IEEE', '200G', 200,
'{QSFP56}', 3, '3m',
'copper', NULL,
'ratified', 2018,
'4x50G copper twinax DAC, 200G short-reach. Low-cost option for adjacent 200G rack connections.',
'200G über 4-Kanal-Kupfer-Twinax-Kabel (DAC). Reichweite bis 3m — die günstigste Option für kurze 200G-Verbindungen innerhalb und zwischen benachbarten Racks. // 200G over 4-lane copper twinax cable (DAC). Up to 3m — the lowest-cost option for short 200G connections within and between adjacent racks.'),
-- ── 400G (extended reach) ─────────────────────────────────────────────────────
('400GBASE-ER8',
'IEEE 802.3cn', 'IEEE', '400G', 400,
'{QSFP-DD,OSFP}', 40000, '40km',
'SMF', '1310nm',
'ratified', 2019,
'8x50G LAN-WDM over SMF, 40km. Fills the gap between LR4 (10km) and ZR (100km+).',
'Erweiterte Reichweite: 400G mit 8 WDM-Wellenlängen über 40km SMF. Füllt die Lücke zwischen LR4 (10km) und ZR (100km+) — für 400G-Metro-Verbindungen zwischen entfernten Standorten. // Extended-reach 400G using 8 WDM wavelengths over 40km SMF. Fills the gap between LR4 (10km) and ZR (100km+) — for 400G metro links between distant sites.'),
('400GBASE-CR8',
'IEEE 802.3bs', 'IEEE', '400G', 400,
'{QSFP-DD,OSFP}', 3, '3m',
'copper', NULL,
'ratified', 2017,
'8-lane copper twinax DAC, 400G, up to 3m. Low-cost option for 400G within rack.',
'400G über 8-Kanal-Kupfer-Twinax-Kabel (DAC). Reichweite bis 3m — die günstigste Option für kurze 400G-Verbindungen innerhalb eines Racks. // 400G over 8-lane copper twinax cable (DAC). Up to 3m — the lowest-cost option for short 400G connections within a single rack.'),
-- ── 800G (emerging) ───────────────────────────────────────────────────────────
('800GBASE-FR4',
'IEEE 802.3df', 'IEEE', '800G', 800,
'{OSFP,QSFP-DD800}', 2000, '2km',
'SMF', '1310nm',
'draft', 2024,
'4x200G WDM (PAM4), 2km SMF LC duplex. Emerging medium-reach 800G standard.',
'In Entwicklung: 800G mit 4 WDM-Wellenlängen (je 200G, PAM4). Reichweite 2km — für zukünftige 800G-Verbindungen auf Geländen und zwischen Gebäuden. Noch nicht weit verbreitet. // Emerging: 800G using 4 WDM wavelengths (200G each, PAM4). Up to 2km — for future 800G campus and inter-building connections. Not yet widely deployed.'),
('800GBASE-LR8',
'IEEE 802.3df', 'IEEE', '800G', 800,
'{OSFP,QSFP-DD800}', 10000, '10km',
'SMF', '1310nm',
'draft', 2024,
'8x100G LAN-WDM (PAM4), 10km SMF. Next-gen long-reach 800G for inter-building links.',
'In Entwicklung: 800G mit 8 WDM-Wellenlängen (je 100G, PAM4). Reichweite 10km — zukünftiger Standard für 800G zwischen Gebäuden. Markteinführung für 2025/2026 erwartet. // Emerging: 800G using 8 WDM wavelengths (100G each, PAM4). Up to 10km — future standard for 800G inter-building links. Market entry expected 2025/2026.'),
('800GBASE-CR8',
'IEEE 802.3df', 'IEEE', '800G', 800,
'{OSFP,QSFP-DD800}', 3, '3m',
'copper', NULL,
'draft', 2024,
'8-lane copper twinax, 800G DAC. For AI/ML cluster GPU-to-switch connections in same rack.',
'800G über 8-Kanal-Kupfer-Twinax (DAC). Reichweite bis 3m — für AI/ML-Cluster-Verbindungen von GPU-Servern zum Top-of-Rack-Switch im selben Rack. // 800G over 8-lane copper twinax (DAC cable). Up to 3m — for AI/ML cluster connections from GPU servers to top-of-rack switches in the same rack.'),
-- ── PON / Access Standards ────────────────────────────────────────────────────
('GPON',
'ITU-T G.984', 'MSA', '2.5G', 2.5,
'{SFP}', 20000, '20km',
'SMF', '1490nm',
'ratified', 2003,
'Gigabit PON: 2.488Gbps down / 1.244Gbps up over passive fiber tree. Worldwide dominant FTTH standard.',
'Gigabit Passives Optisches Netzwerk — die weltweit meistgenutzte Technologie für Glasfaser-Heimanschlüsse (FTTH). Verteilt bis zu 2.5 Gbit/s ohne aktive Netzwerkelemente (keine Switches nötig) an bis zu 128 Haushalte über eine einzige Glasfaser. // Gigabit Passive Optical Network — the world''s most common fiber broadband technology. Delivers up to 2.5Gbps to 128 homes over a single fiber without active network elements (no switches needed en route).'),
('XG-PON1',
'ITU-T G.987', 'MSA', '10G', 10,
'{SFP+}', 20000, '20km',
'SMF', '1577nm',
'ratified', 2010,
'10G downstream / 2.5G upstream PON. Asymmetric upgrade path from GPON without changing fiber plant.',
'10G-PON mit asymmetrischen Geschwindigkeiten: 10 Gbit/s Download, 2.5 Gbit/s Upload. Upgrade-Pfad von GPON ohne neue Glasfaser zu legen — ISPs können auf 10G aufrüsten indem sie nur die End-Geräte tauschen. // Asymmetric 10G PON: 10Gbps downstream, 2.5Gbps upstream. Upgrade path from GPON without replacing fiber — ISPs can upgrade to 10G by changing only the endpoints.'),
('NG-PON2',
'ITU-T G.989', 'MSA', '40G', 40,
'{SFP28,QSFP+}', 40000, '40km',
'SMF', '1596nm',
'ratified', 2015,
'Next-Gen PON2: 4 wavelengths × 10G = 40Gbps aggregate. Multiple operators can share fiber. Enterprise and 5G fronthaul.',
'Nächste Generation PON: 4 Wellenlängen × 10G = 40 Gbit/s Gesamt-Kapazität. Mehrere Internet-Anbieter können dieselbe Glasfaser teilen. Wird für 5G-Fronthaul und Unternehmens-Glasfaser eingesetzt. // Next-Generation PON: 4 wavelengths × 10G = 40Gbps aggregate capacity. Multiple operators can share the same fiber. Used for 5G fronthaul and enterprise fiber deployments.'),
('25G-PON',
'ITU-T G.9804', 'MSA', '25G', 25,
'{SFP28}', 20000, '20km',
'SMF', '1340nm',
'draft', 2023,
'Emerging 25G symmetric PON for ultra-broadband and 5G fronthaul. Ratification expected 2024.',
'Aufkommender Standard: 25G symmetrisches Glasfasernetzwerk für Ultra-Breitband und 5G-Fronthaul. Für ISPs die Gigabit-Klasse Breitbanddienste der nächsten Generation anbieten wollen. Ratifizierung 2024 erwartet. // Emerging standard: 25G symmetric passive optical network for next-generation broadband and 5G fronthaul. For ISPs planning multi-gigabit residential and enterprise fiber services. Ratification expected 2024.'),
-- ── 1.6T (emerging next-generation) ──────────────────────────────────────────
('1.6TBASE-DR16',
'IEEE 802.3dj', 'IEEE', '1.6T', 1600,
'{OSFP224}', 500, '500m',
'SMF', '1310nm',
'draft', 2025,
'16x100G parallel SMF (MPO-32), 500m. Emerging 1.6T standard for AI/ML GPU cluster interconnects.',
'In Entwicklung: 1.6 Terabit/s mit 16 parallelen SMF-Kanälen (je 100G). Reichweite 500m — der kommende Standard für AI/ML-GPU-Cluster-Verbindungen der übernächsten Generation. Voraussichtliche Ratifizierung 2025/2026. // Emerging: 1.6 Terabit/s using 16 parallel SMF channels (100G each). Up to 500m — the next-next-generation standard for AI/ML GPU cluster interconnects. Ratification expected 2025/2026.')
ON CONFLICT (name) DO UPDATE SET
description = EXCLUDED.description,
max_reach_label = COALESCE(EXCLUDED.max_reach_label, standards.max_reach_label),
notes = COALESCE(EXCLUDED.notes, standards.notes);

View File

@ -0,0 +1,247 @@
-- Migration 101: Form Factors Reference Table
-- ─────────────────────────────────────────────────────────────────────────────
-- Comprehensive form factor reference with plain-language descriptions,
-- physical dimensions, max speeds, and connector types.
--
-- Covers all 20 form factors in the transceivers table + additional modern ones
-- ─────────────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS form_factors (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL UNIQUE, -- e.g. "QSFP28"
full_name TEXT NOT NULL, -- e.g. "Quad Small Form-factor Pluggable 28"
short_name TEXT, -- e.g. "QSFP28" (alias/marketing name)
generation TEXT, -- e.g. "4th generation SFP family"
family TEXT, -- e.g. "SFP family" | "QSFP family" | "CFP family" | "legacy"
max_speed_gbps NUMERIC, -- maximum electrical interface speed
channels INTEGER, -- number of electrical channels (lanes)
channel_rate_gbps NUMERIC, -- per-channel speed in Gbps
physical_width_mm NUMERIC, -- width in mm
physical_height_mm NUMERIC, -- height (depth) in mm
hot_swap BOOLEAN DEFAULT TRUE, -- supports hot-swap / hot-pluggable
connector_type TEXT, -- typical fiber connector, e.g. "LC duplex", "MPO-12", "varies"
year_introduced INTEGER, -- year first modules appeared on market
supersedes TEXT[] DEFAULT '{}', -- form factors this one replaces
superseded_by TEXT, -- newer form factor that replaces this one
status TEXT DEFAULT 'current' CHECK (status IN ('current','legacy','emerging','obsolete')),
description TEXT, -- plain-language explanation (DE · EN)
notes TEXT, -- technical notes
url TEXT, -- standard/MSA spec URL
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_form_factors_family ON form_factors (family);
CREATE INDEX IF NOT EXISTS idx_form_factors_max_speed ON form_factors (max_speed_gbps DESC);
CREATE INDEX IF NOT EXISTS idx_form_factors_status ON form_factors (status);
-- ─────────────────────────────────────────────────────────────────────────────
-- Insert all known form factors
-- ─────────────────────────────────────────────────────────────────────────────
INSERT INTO form_factors (name, full_name, family, generation, max_speed_gbps, channels, channel_rate_gbps, physical_width_mm, physical_height_mm, hot_swap, connector_type, year_introduced, supersedes, superseded_by, status, description, notes, url)
VALUES
-- ─────────────────────────────
-- SFP Family
-- ─────────────────────────────
('SFP',
'Small Form-factor Pluggable',
'SFP family', '1st generation',
1, 1, 1.0625, 13.4, 56.5, TRUE, 'LC duplex', 2000,
'{}', 'SFP+', 'legacy',
'Das Original-Netzwerkmodul — der "USB-Stick" der Netzwerktechnik. Klein, steckbar, für 1G-Verbindungen. Läuft in fast jedem Switch und Router. Zwei Varianten: für Glasfaser (mit Kabel) oder Kupfer (SFP-T, kein Kabel nötig). // The original "thumb drive" of networking. Small, hot-swappable, 1G. Runs in virtually every switch and router ever made. Available for fiber (requires cable) or copper (SFP-T, RJ45 socket).',
'LC Duplex fiber or RJ45 (SFP-T). Defined by SFF Committee SFF-8472.',
'https://www.snia.org/technology-communities/sff'),
('SFP+',
'Small Form-factor Pluggable Plus',
'SFP family', '2nd generation',
10, 1, 10.3125, 13.4, 56.5, TRUE, 'LC duplex', 2006,
'{SFP,XFP}', 'SFP28', 'current',
'Die 10G-Version des klassischen SFP. Gleiche physische Größe und gleicher Slot wie das Original-SFP — einfaches Upgrade auf 10G ohne neuen Switch. Der meistverkaufte Transceiver-Typ weltweit. // The 10G evolution of the original SFP. Same physical size and slot as the original — direct upgrade to 10G without changing the switch. The world''s best-selling transceiver form factor.',
'Backward compatible slot with SFP (1G). IEEE 802.3ae. SFF-8431.',
'https://www.snia.org/technology-communities/sff'),
('SFP28',
'Small Form-factor Pluggable 28 (25G)',
'SFP family', '3rd generation',
25, 1, 25.78125, 13.4, 56.5, TRUE, 'LC duplex', 2016,
'{SFP+}', 'SFP56', 'current',
'25G in der SFP-Gehäusegröße. Der Standardanschluss für Server-Netzwerkkarten seit 2017. Läuft im selben physischen Slot wie SFP+ — Switch-Ports können je nach Bedarf 10G oder 25G module aufnehmen. // 25G in the standard SFP housing. The default server NIC connection since 2017. Fits the same physical slot as SFP+ — switch ports can accept either 10G or 25G modules depending on need.',
'IEEE 802.3by. Same mechanical cage as SFP/SFP+. Dominant server uplink form factor.',
'https://www.snia.org/technology-communities/sff'),
('SFP56',
'Small Form-factor Pluggable 56 (50G)',
'SFP family', '4th generation',
50, 1, 53.125, 13.4, 56.5, TRUE, 'LC duplex', 2020,
'{SFP28}', 'SFP112', 'current',
'50G in SFP-Größe, mit PAM4-Signaltechnik. Für Netzwerke die 50G pro Port benötigen ohne auf größere Module wechseln zu müssen. Noch nicht weit verbreitet — SFP28 (25G) und QSFP28 (100G) dominieren. // 50G in SFP size using PAM4 signaling. For networks needing 50G per port without switching to larger modules. Not yet widely deployed — SFP28 (25G) and QSFP28 (100G) dominate.',
'PAM4 modulation. IEEE 802.3cd. Backward compatible cage with SFP/SFP+/SFP28.',
'https://www.snia.org/technology-communities/sff'),
('SFP112',
'Small Form-factor Pluggable 112 (100G)',
'SFP family', '5th generation',
100, 1, 112.0, 13.4, 56.5, TRUE, 'LC duplex', 2022,
'{SFP56}', NULL, 'emerging',
'100G im kleinen SFP-Gehäuse — noch höhere Dichte als SFP56. Für zukünftige High-Density-100G-Deployments wo möglichst viele Ports auf kleinem Raum benötigt werden. Noch in früher Markteinführungsphase. // 100G in the small SFP housing — even higher density than SFP56. For future high-density 100G deployments where maximum port count matters. Still in early market adoption.',
'PAM4, 112Gbps per lane. Next evolution after SFP56. Target for 2024+ deployments.',
'https://www.snia.org/technology-communities/sff'),
('SFP56-DD',
'Small Form-factor Pluggable 56 Double Density (100G)',
'SFP family', 'double density variant',
100, 2, 53.125, 13.4, 56.5, TRUE, 'LC duplex', 2021,
'{SFP28}', NULL, 'current',
'Doppelte Dichte: Zwei 50G-Kanäle im SFP-Gehäuse = 100G total. Die Elektroanschlüsse sind breiter als SFP56 (8 statt 4 Pins). Für hohe 100G-Portdichte ohne QSFP-Module. // Double density: two 50G lanes in SFP housing = 100G total. Wider electrical connector than SFP56 (8 vs 4 pins). For high 100G port density without needing QSFP modules.',
'2x25G electrical interface. Backward slot-compatible with SFP56 in many switches.',
'https://www.snia.org/technology-communities/sff'),
-- ─────────────────────────────
-- XFP (legacy)
-- ─────────────────────────────
('XFP',
'10 Gigabit Small Form Factor Pluggable',
'legacy', 'XFP generation',
10, 1, 10.3125, 18.8, 65.0, TRUE, 'LC duplex', 2002,
'{}', 'SFP+', 'legacy',
'Älteres 10G-Modul, deutlich größer als SFP+. War der erste weit verbreitete 10G-Standard, wurde aber vollständig durch SFP+ ersetzt da SFP+ kleiner, günstiger und effizienter ist. Noch in sehr alten Switches zu finden. // Older 10G module, significantly larger than SFP+. Was the first widely deployed 10G standard but completely replaced by SFP+, which is smaller, cheaper, and more efficient. Still found in very old switches.',
'XFP MSA. 300-pin interface. Largely obsolete since ~2012.',
'https://www.xfpmsa.org'),
-- ─────────────────────────────
-- QSFP Family
-- ─────────────────────────────
('QSFP+',
'Quad Small Form-factor Pluggable Plus (40G)',
'QSFP family', '1st generation QSFP',
40, 4, 10.3125, 18.4, 72.4, TRUE, 'MPO-12 or LC duplex', 2010,
'{}', 'QSFP28', 'legacy',
'4 Kanäle à 10G = 40G total. Deutlich kompakter als 4 einzelne SFP+-Module — ein QSFP+-Port im Switch entspricht 4 SFP+-Ports. War der 40G-Standard der Rechenzentren, heute durch 100G abgelöst. // 4 channels × 10G = 40G total. Much more compact than 4 individual SFP+ modules — one QSFP+ port equals 4 SFP+ ports. Was the 40G data center standard, now largely replaced by 100G.',
'IEEE 802.3ba. MPO-12 for SR4, LC duplex for LR4. Compatible with QSFP28 slots in many switches.',
'https://www.snia.org/technology-communities/sff'),
('QSFP28',
'Quad Small Form-factor Pluggable 28 (100G)',
'QSFP family', '2nd generation QSFP',
100, 4, 25.78125, 18.4, 72.4, TRUE, 'varies (MPO-12 or LC duplex)', 2015,
'{QSFP+}', 'QSFP56', 'current',
'Der 100G-Standard. 4 Kanäle à 25G = 100G total. Seit 2016 der dominante Transceiver-Typ in modernen Rechenzentren — die große Mehrheit aller 100G-Verbindungen verwendet QSFP28. Läuft oft auch in QSFP-DD-Slots. // The 100G standard. 4 channels × 25G = 100G total. The dominant transceiver type in modern data centers since 2016 — the vast majority of 100G connections use QSFP28. Often also runs in QSFP-DD slots.',
'IEEE 802.3bm. Mechanically compatible with QSFP+. The most widely deployed 100G form factor.',
'https://www.snia.org/technology-communities/sff'),
('QSFP56',
'Quad Small Form-factor Pluggable 56 (200G)',
'QSFP family', '3rd generation QSFP',
200, 4, 53.125, 18.4, 72.4, TRUE, 'varies (MPO or LC)', 2018,
'{QSFP28}', 'QSFP-DD', 'current',
'4 Kanäle à 50G = 200G total (PAM4-Signal). Doppelte Kapazität von QSFP28 im selben Gehäuse. Für Netzwerke die von 100G auf 200G wechseln ohne neue Switch-Hardware zu kaufen. // 4 channels × 50G = 200G total (PAM4 signaling). Double the capacity of QSFP28 in the same housing. For networks upgrading from 100G to 200G without buying new switch hardware.',
'IEEE 802.3cd. PAM4 modulation. Mechanically compatible with QSFP28/QSFP+ slots.',
'https://www.snia.org/technology-communities/sff'),
('QSFP112',
'Quad Small Form-factor Pluggable 112 (400G)',
'QSFP family', '4th generation QSFP',
400, 4, 112.0, 18.4, 72.4, TRUE, 'varies', 2021,
'{QSFP56}', NULL, 'current',
'4 Kanäle à 100G = 400G total (PAM4). Gleiche Gehäusegröße wie QSFP28 aber 4x die Kapazität. Für Rechenzentren die 400G bei maximaler Port-Dichte benötigen. // 4 channels × 100G = 400G total (PAM4). Same housing as QSFP28 but 4× the capacity. For data centers needing 400G at maximum port density.',
'IEEE 802.3bs subset. PAM4. High thermal demands within standard QSFP envelope.',
'https://www.snia.org/technology-communities/sff'),
('QSFP-DD',
'Quad Small Form-factor Pluggable Double Density (400G/800G)',
'QSFP family', 'double density QSFP',
400, 8, 53.125, 18.4, 89.4, TRUE, 'varies (MPO-12/16 or LC)', 2019,
'{QSFP28,QSFP56}', 'QSFP-DD800', 'current',
'Doppelte Dichte: 8 Kanäle statt 4, für 400G (8×50G) oder mit neueren Chips 800G (8×100G). Rückwärtskompatibel — QSFP-DD-Slots können auch QSFP28-Module aufnehmen. Der wichtigste Hochgeschwindigkeitsstandard aktuell. // Double density: 8 channels instead of 4, enabling 400G (8×50G) or with newer chips 800G (8×100G). Backward compatible — QSFP-DD slots also accept QSFP28 modules. Currently the most important high-speed form factor.',
'QSFP-DD MSA. Backward compatible with QSFP28/QSFP56. Dominant 400G standard alongside OSFP.',
'https://www.qsfp-dd.com'),
('QSFP-DD800',
'Quad Small Form-factor Pluggable Double Density 800 (800G)',
'QSFP family', 'double density 800G',
800, 8, 112.0, 18.4, 89.4, TRUE, 'varies', 2022,
'{QSFP-DD}', NULL, 'current',
'Die 800G-Version des QSFP-DD. 8 Kanäle à 100G = 800G total (PAM4). Für AI/ML-Cluster der neuesten Generation und Hyperscale-Netzwerke die 800G-Verbindungen benötigen. // The 800G version of QSFP-DD. 8 channels × 100G = 800G total (PAM4). For latest-generation AI/ML clusters and hyperscale networks requiring 800G connections.',
'QSFP-DD MSA v5.0+. 8×112Gbps PAM4. Higher power envelope than standard QSFP-DD.',
'https://www.qsfp-dd.com'),
-- ─────────────────────────────
-- OSFP Family
-- ─────────────────────────────
('OSFP',
'Octal Small Form-factor Pluggable (400G/800G)',
'OSFP family', '1st generation OSFP',
800, 8, 112.0, 22.58, 100.4, TRUE, 'varies (MPO or LC)', 2019,
'{}', 'OSFP112', 'current',
'Etwas größer als QSFP-DD, dafür besser gekühlt. 8 Kanäle für 400G (8×50G) oder 800G (8×100G). Bevorzugt von Cisco und einigen anderen Herstellern. Bietet mehr thermischen Spielraum für leistungsstarke Kohärenz-Module. // Slightly larger than QSFP-DD but better cooled. 8 channels for 400G (8×50G) or 800G (8×100G). Preferred by Cisco and some other vendors. Provides more thermal headroom for high-power coherent modules.',
'OSFP MSA. 22.58mm wide vs 18.4mm for QSFP-DD. Better thermal management for coherent optics.',
'https://osfpmsa.org'),
('OSFP112',
'Octal Small Form-factor Pluggable 112 (800G/1.6T)',
'OSFP family', '2nd generation OSFP',
1600, 8, 224.0, 22.58, 107.8, TRUE, 'MPO-16 or varies', 2023,
'{OSFP}', 'OSFP224', 'emerging',
'Nächste Generation OSFP für 800G (8×100G) und zukünftige 1.6T-Anwendungen (8×200G). Für AI/ML-Cluster der übernächsten Generation. Noch in früher Markteinführungsphase. // Next-generation OSFP for 800G (8×100G) and future 1.6T applications (8×200G). For the next-next-generation of AI/ML clusters. Still in early market adoption.',
'OSFP MSA v2.0+. 224Gbps per lane target. Key form factor for 1.6T AI/ML networks.',
'https://osfpmsa.org'),
('OSFP224',
'Octal Small Form-factor Pluggable 224 (1.6T)',
'OSFP family', '3rd generation OSFP (emerging)',
1600, 8, 224.0, 22.58, 107.8, TRUE, 'MPO-32 or varies', 2024,
'{OSFP112}', NULL, 'emerging',
'Der kommende Standard für 1.6 Terabit/s: 8 Kanäle à 200G = 1.6T total. Für zukünftige AI/ML-GPU-Cluster-Verbindungen (z.B. NVIDIA NVLink 5.0 Skala). Markteinführung ab 2025/2026 erwartet. // The upcoming 1.6T standard: 8 channels × 200G = 1.6T total. For future AI/ML GPU cluster connections (e.g. NVIDIA scale-out AI networks). Market entry expected 2025/2026.',
'OSFP MSA target. 224Gbps PAM4 per lane. Primary target for next-gen AI networking.',
'https://osfpmsa.org'),
-- ─────────────────────────────
-- CFP Family (coherent / 100G legacy)
-- ─────────────────────────────
('CFP',
'C Form-factor Pluggable (100G, large)',
'CFP family', '1st generation CFP',
100, 10, 10.3125, 82.0, 144.75, TRUE, 'LC duplex or MPO', 2010,
'{}', 'CFP2', 'legacy',
'Das erste 100G-Modulformat — groß wie ein Taschenbuch, für early-100G-WDM-Anwendungen. Heute veraltet und durch kleinere CFP2/CFP4 oder QSFP28 ersetzt. Noch in älteren Telko- und Transport-Geräten zu finden. // The first 100G module format — about the size of a small book, used for early 100G WDM applications. Now obsolete, replaced by smaller CFP2/CFP4 or QSFP28. Still found in older telecom and transport equipment.',
'CFP MSA. 82mm wide. Largely obsolete since ~2014. Very high power consumption.',
'https://www.cfp-msa.org'),
('CFP2',
'C Form-factor Pluggable 2 (100G/200G, medium)',
'CFP family', '2nd generation CFP',
200, 4, 25.78125, 41.5, 107.0, TRUE, 'LC duplex or MPO', 2013,
'{CFP}', 'CFP4', 'current',
'Halb so groß wie CFP, doppelte Portdichte. Für 100G und 200G kohärente WDM-Anwendungen in Telekommunikationsnetzen. Weit verbreitet für langreichweitige koherente Verbindungen. // Half the size of CFP, double the port density. Used for 100G and 200G coherent WDM applications in telecom networks. Widely used for long-haul coherent links.',
'CFP2 MSA. 41.5mm wide. Dominant coherent form factor for carrier transport equipment.',
'https://www.cfp-msa.org'),
('CFP4',
'C Form-factor Pluggable 4 (100G, small)',
'CFP family', '4th generation CFP',
100, 4, 25.78125, 21.5, 107.0, TRUE, 'LC duplex', 2014,
'{CFP2}', NULL, 'current',
'Ein Viertel der Größe des Original-CFP. Gleiche Portdichte wie QSFP28, aber bevorzugt für kohärente/abstimmbare WDM-Anwendungen die mehr Platz für optische Komponenten benötigen. // Quarter the size of original CFP. Same port density as QSFP28 but preferred for coherent/tunable WDM applications requiring more space for optical components.',
'CFP4 MSA. 21.5mm wide. Popular for tunable DWDM 100G.',
'https://www.cfp-msa.org'),
-- ─────────────────────────────
-- CXP (obsolete)
-- ─────────────────────────────
('CXP',
'C Form-factor 10×10G (100G, parallel, legacy)',
'legacy', 'CXP generation',
100, 12, 10.3125, 45.0, 101.0, TRUE, 'MPO-24', 2010,
'{}', 'QSFP28', 'obsolete',
'Frühes 100G-Modul mit 10 parallelen 10G-Kanälen (24-Faser-MPO). Sehr kurze Produktionsphase — wurde schnell durch QSFP28 abgelöst. Praktisch nicht mehr im Einsatz. // Early 100G module using 10 parallel 10G channels (24-fiber MPO). Very short production lifetime — quickly replaced by QSFP28. Practically no longer in active use.',
'CXP MSA. 12 lanes, 10 used for data. Replaced by QSFP28 before becoming mainstream.',
NULL)
ON CONFLICT (name) DO UPDATE SET
description = EXCLUDED.description,
full_name = EXCLUDED.full_name,
max_speed_gbps = EXCLUDED.max_speed_gbps,
status = EXCLUDED.status,
notes = COALESCE(EXCLUDED.notes, form_factors.notes);