Deployed 42256cf4 to dev with MkDocs 1.6.1 and mike 2.1.3

This commit is contained in:
github-actions[bot]
2025-07-28 18:30:24 +00:00
parent ed963a9b32
commit 6b4bb25c71
41 changed files with 1187 additions and 3542 deletions
+152 -46
View File
@@ -269,28 +269,6 @@
<span class="md-ellipsis">
About
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
@@ -335,10 +313,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
@@ -351,8 +329,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
CLI
</label>
@@ -576,10 +554,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
@@ -592,8 +570,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Networking
</label>
@@ -744,10 +722,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -760,8 +738,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Services
</label>
@@ -874,10 +852,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
@@ -890,8 +868,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
System
</label>
@@ -993,6 +971,30 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#system-boot" class="md-nav__link">
<span class="md-ellipsis">
System Boot
</span>
</a>
<nav class="md-nav" aria-label="System Boot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#failure-modes" class="md-nav__link">
<span class="md-ellipsis">
Failure Modes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@@ -1262,10 +1264,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
@@ -1278,8 +1280,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Scripting
</label>
@@ -1417,10 +1419,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
@@ -1433,8 +1435,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Developer's Corner
</label>
@@ -1719,6 +1721,30 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#system-boot" class="md-nav__link">
<span class="md-ellipsis">
System Boot
</span>
</a>
<nav class="md-nav" aria-label="System Boot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#failure-modes" class="md-nav__link">
<span class="md-ellipsis">
Failure Modes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@@ -1975,6 +2001,69 @@ virtualized instances.</p>
partition can be selected interactively at boot using the arrow keys. It
is also possible to permanently configure the default partition from
Infix using the <a href="#configuration">Bootloader Configuration</a>.</p>
<h2 id="system-boot">System Boot<a class="headerlink" href="#system-boot" title="Permanent link">&para;</a></h2>
<p>After the system firmware (BIOS or and <a href="./">boot loader</a> start
Linux the following happens. The various failure modes, e.g., missing
password in VPD, are detailed later in this section.</p>
<p><img alt="System boot flowchart" src="../img/fail-secure.svg" /></p>
<ol>
<li>Before mounting <code>/cfg</code> and <code>/var</code> partitions, hosting read-writable
data like <code>startup-config</code> and container images, the system first
checks if a factory reset has been requested by the user, if so it
wipes the contents of these partitions</li>
<li>Linux boots with a device tree which is used for detecting generic
make and model of the device, e.g., number of interfaces. It may
also reference an EEPROM with <a href="../vpd/">Vital Product Data</a>. That is
where the base MAC address and per-device password hash is stored.
(Generic builds use the same MAC address and password)</li>
<li>On every boot the system's <code>factory-config</code> and <code>failure-config</code> are
generated from the YANG<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> models of the current firmware version.
This ensures that a factory reset device can always boot, and that
there is a working fail safe, or rather <em>fail secure</em>, mode</li>
<li>On first power-on, and after a factory reset, the system does not
have a <code>startup-config</code>, in which case <code>factory-config</code> is copied
to <code>startup-config</code> -- if a per-product specific version exists it
is preferred over the generated one</li>
<li>Provided the integrity of the <code>startup-config</code> is OK, a system
service loads and activates the configuration</li>
</ol>
<h3 id="failure-modes">Failure Modes<a class="headerlink" href="#failure-modes" title="Permanent link">&para;</a></h3>
<p>So, what happens if any of the steps above fail?</p>
<p><strong>VPD Fail</strong></p>
<p>The per-device password cannot be read, or is corrupt, so the system
<code>factory-config</code> and <code>failure-config</code> are not generated:</p>
<ol>
<li>First boot, or after factory reset: <code>startup-config</code> cannot be
created or loaded, and <code>failure-config</code> cannot be loaded. The
system ends up in an unrecoverable state, i.e., <strong>RMA<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup> Mode</strong></li>
<li>The system has booted (at least) once with correct VPD and password
and already has a <code>startup-config</code>. Provided the <code>startup-config</code>
is OK (see below), it is loaded and system boots successfully</li>
</ol>
<p>In both cases, external factory reset modes/button will not help, and
in the second case will cause the device to fail on the next boot.</p>
<blockquote>
<p>The second case does not yet have any warning or event that can be
detected from the outside. This is planned for a later release.</p>
</blockquote>
<p><strong>Broken startup-config</strong></p>
<p>If loading <code>startup-config</code> fails for some reason, e.g., invalid JSON
syntax, failed validation against the system's YANG model, or a bug in
the system's <code>confd</code> service, the <em>Fail Secure Mode</em> is triggered and
<code>failure-config</code> is loaded (unless VPD Failure, see above).</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Please see the <a href="../branding/">Branding &amp; Releases</a> document for how to
provide per-product <code>failure-config</code>, or <code>factory-config</code> to suit your
product's preferences.</p>
</div>
<p><em>Fail Secure Mode</em> is a fail-safe mode provided for debugging the
system. The default<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup> creates a setup of isolated interfaces with
communication only to the management CPU, SSH and console login using
the device's factory reset password, IP connectivity only using IPv6
link-local, and device discovery protocols: LLDP, mDNS-SD. The login
and shell prompt are set to <code>failure-c0-ff-ee</code>, the last three octets of
the device's base MAC address.</p>
<h2 id="system-upgrade">System Upgrade<a class="headerlink" href="#system-upgrade" title="Permanent link">&para;</a></h2>
<p>Much of the minutiae of software upgrades is delegated to <a href="https://rauc.io">RAUC</a>,
which offers lots of benefits out-of-the-box:</p>
@@ -2237,6 +2326,23 @@ can funtion reasonably well without a persistent <code>/var</code>, loosing
<li id="fn:1">
<p>See <a href="../upgrade/">Upgrade &amp; Boot Order</a> for more information.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
<li id="fn:2">
<p>YANG is a modeling language from IETF, replacing that used for
SNMP (MIB), used to describe the subsystems and properties of
the system.&#160;<a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">&#8617;</a></p>
</li>
<li id="fn:3">
<p>Return Merchandise Authorization (RMA), i.e., broken beyond repair
by end-user and eligible for return to manufacturer.&#160;<a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text">&#8617;</a></p>
</li>
<li id="fn:4">
<p>Customer specific builds can define their own <code>failure-config</code>.
It may be the same as <code>factory-config</code>, with the hostname set to
<code>failure</code>, or a dedicated configuration that isolates interfaces, or
even disables ports, to ensure that the device does not cause any
security problems on the network. E.g., start forwarding traffic
between previously isolated VLANs.&#160;<a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text">&#8617;</a></p>
</li>
</ol>
</div>