From 36372632dd96d853ee8f74ff805a515ad26949cf Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Sat, 25 Aug 2018 02:12:42 +0200 Subject: [PATCH] doc/user: add protocols vs. platform table A nicely-formatted colorful table of all our daemons and target OS'. Based off & intended to replace / extend https://github.com/FRRouting/frr/wiki/Features-and-Kernel-Support Signed-off-by: David Lamparter --- doc/user/_static/overrides.css | 47 ++++++++++++++ doc/user/_static/overrides.js | 13 ++++ doc/user/conf.py | 1 + doc/user/overview.rst | 108 ++++++++++++++++++++++++++------- 4 files changed, 148 insertions(+), 21 deletions(-) create mode 100644 doc/user/_static/overrides.js diff --git a/doc/user/_static/overrides.css b/doc/user/_static/overrides.css index 0d871c961a..3143f8bb65 100644 --- a/doc/user/_static/overrides.css +++ b/doc/user/_static/overrides.css @@ -6,3 +6,50 @@ div.body { pre { background-color: #e2e2e2; } + +/* styling for the protocols vs. OS table in overview.rst */ +/* first, general bits */ +div.body td.mark { + text-align: center; + border-left: 1px solid #ccc; +} +table.mark th { + text-align: center; +} +table.mark td { + vertical-align: middle; +} +table.mark td[colspan="7"] { + text-align: center; + padding-top: 8pt; + padding-bottom: 2pt; +} +table.mark cite { + font-weight: bold; +} + +/* individual Y/N/... cells */ +td.mark { + width: 4.5em; +} +td.mark span { + display: block; + padding: 3px 1px; + border: 1px dotted #666; + width: 36pt; + margin:auto; +} +span.mark-y { background-color: #77ffaa; } +span.mark-geq { background-color: #aaff77; } +span.mark-cp { background-color: #ffbb55; } +span.mark-n { background-color: #ff8877; } +span.mark-dag { background-color: #ffee99; font-size: 8pt; padding:0px 1px; border-top:0px; } + +/* for the legend below */ +li span.mark { + display: inline-block; + padding: 3px 1px; + border: 1px dotted #666; + width: 36pt; + text-align: center; +} diff --git a/doc/user/_static/overrides.js b/doc/user/_static/overrides.js new file mode 100644 index 0000000000..73bf6123b5 --- /dev/null +++ b/doc/user/_static/overrides.js @@ -0,0 +1,13 @@ +/* special styling for the protocols vs. OS table in overview.rst + * + * unfortunately this can't be done in straight CSS because we're changing + * the styling on the parent. + */ +$(document).ready(function() { + $("span.mark:contains('Y')" ).addClass("mark-y" ).parent("td").addClass("mark"); + $("span.mark:contains('≥')" ).addClass("mark-geq").parent("td").addClass("mark"); + $("span.mark:contains('N')" ).addClass("mark-n" ).parent("td").addClass("mark"); + $("span.mark:contains('CP')").addClass("mark-cp" ).parent("td").addClass("mark"); + $("span.mark:contains('†')" ).addClass("mark-dag").parent("td").addClass("mark"); + $('td.mark').parents('table').addClass("mark").children('colgroup').remove(); +}); diff --git a/doc/user/conf.py b/doc/user/conf.py index 28081bca7d..2231989fe5 100644 --- a/doc/user/conf.py +++ b/doc/user/conf.py @@ -358,6 +358,7 @@ def setup(app): app.add_object_type('clicmd', 'clicmd') # css overrides for HTML theme app.add_stylesheet('overrides.css') + app.add_javascript('overrides.js') # load Pygments lexer for FRR config syntax # # NB: in Pygments 2.2+ this can be done with `load_lexer_from_file`, but we diff --git a/doc/user/overview.rst b/doc/user/overview.rst index 369f17dcba..369514d72d 100644 --- a/doc/user/overview.rst +++ b/doc/user/overview.rst @@ -150,27 +150,93 @@ Recent versions of the following compilers are well tested: .. _supported-protocols: -Supported Protocols & RFCs -========================== - -The following well-known protocols are supported: - -- BGP -- Babel -- EIGRP -- IS-IS -- LDP -- NHRP -- OSPFv2 -- OSPFv3 -- PIM -- RIP -- RIPNG - -The following technologies are supported as well: - -- PBR (Policy Based Routing) -- VNC (Virtual Network Control) +Supported Protocols vs. Platform +================================ + +The following table lists all protocols cross-refrenced to all operating +systems that have at least CI build tests. Note that for features, only +features with system dependencies are included here. + +.. role:: mark + +.. comment - the :mark:`X` pieces mesh with a little bit of JavaScript and + CSS in _static/overrides.{js,css} respectively. The JS code looks at the + presence of the 'Y' 'N' '≥' '†' or 'CP' strings. This seemed to be the + best / least intrusive way of getting a nice table in HTML. The table + will look somewhat shoddy on other sphinx targets like PDF or info (but + should still be readable.) + ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| Daemon / Feature | Linux | OpenBSD | FreeBSD | NetBSD | Solaris | ++==+================================+================+==============+============+============+============+ +| FRR Core | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `zebra` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | VRF | :mark:`≥4.8` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | MPLS | :mark:`≥4.5` | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `pbrd` (Policy Routing) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| WAN / Carrier protocols | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `bgpd` (BGP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | VRF / L3VPN | :mark:`≥4.8` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | +| | | :mark:`†4.3` | | | | | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | EVPN | :mark:`≥4.18` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | +| | | :mark:`†4.9` | | | | | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | VNC (Virtual Network Control) | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | Flowspec | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | :mark:`CP` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `ldpd` (LDP) | :mark:`≥4.5` | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | VPWS / PW | :mark:`N` | :mark:`≥5.8` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | VPLS | :mark:`N` | :mark:`≥5.8` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `nhrpd` (NHRP) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| Link-State Routing | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `ospfd` (OSPFv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | Segment Routing | :mark:`≥4.12` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `ospf6d` (OSPFv3) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `isisd` (IS-IS) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| Distance-Vector Routing | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `ripd` (RIPv2) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `ripngd` (RIPng) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `babeld` (BABEL) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `eigrpd` (EIGRP) | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| Multicast Routing | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| `pimd` (PIM) | :mark:`≥4.18` | :mark:`N` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | SSM (Source Specific) | :mark:`Y` | :mark:`N` | :mark:`Y` | :mark:`Y` | :mark:`Y` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ +| | ASM (Any Source) | :mark:`Y` | :mark:`N` | :mark:`N` | :mark:`N` | :mark:`N` | ++--+--------------------------------+----------------+--------------+------------+------------+------------+ + +The indicators have the following semantics: + +* :mark:`Y` - daemon/feature fully functional +* :mark:`≥X.X` - fully functional with kernel version X.X or newer +* :mark:`†X.X` - restricted functionality or impaired performance with kernel version X.X or newer +* :mark:`CP` - control plane only (i.e. BGP route server / route reflector) +* :mark:`N` - daemon/feature not supported by operating system .. _supported-rfcs: -- 2.39.5