Deployed 15d69472 to dev with MkDocs 1.6.1 and mike 2.1.4

This commit is contained in:
github-actions[bot]
2026-03-20 18:18:25 +00:00
parent 6917167281
commit 4f99d73e56
14 changed files with 377 additions and 3930 deletions
+36 -7
View File
@@ -2751,6 +2751,8 @@ them:</p>
XPath: <code>/ietf-system:system/authentication/user/password</code></li>
<li><strong>Default SSH and NETCONF hostkey:</strong> <code>genkey</code> (regenerated at factory reset)
XPath: <code>/ietf-keystore:keystore/asymmetric-keys/asymmetric-key[name='genkey']</code></li>
<li><strong>Default HTTPS certificate:</strong> <code>gencert</code> (self-signed, regenerated at factory reset)
XPath: <code>/ietf-keystore:keystore/asymmetric-keys/asymmetric-key[name='gencert']</code></li>
<li><strong>Hostname format specifiers:</strong><br>
XPath: <code>/ietf-system:system/hostname</code></li>
<li><code>%i</code>: OS ID, from <code>/etc/os-release</code>, from Menuconfig branding</li>
@@ -2890,8 +2892,11 @@ text file without line breaks (<code>-w0</code>):</p>
cause them to be always automatically regenerated after each factory reset.
Keeping the <code>factory-config</code> snippet like this means we can use the same
file on multiple devices, without risking them sharing the same host
keys. Sometimes you may want the same host keys, but that is the easy
use-case and not documented here.</p>
keys or TLS certificates. Sometimes you may want the same keys, but
that is the easy use-case and not documented here.</p>
<p>The <code>genkey</code> entry is the default SSH host key, and <code>gencert</code> is the
default self-signed HTTPS certificate used by the web server (nginx).
Both are regenerated on factory reset when their keys are empty.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="w"> </span><span class="nt">"ietf-keystore:keystore"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="nt">"asymmetric-keys"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="nt">"asymmetric-key"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
@@ -2902,10 +2907,22 @@ use-case and not documented here.</p>
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="nt">"private-key-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ietf-crypto-types:rsa-private-key-format"</span><span class="p">,</span>
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="w"> </span><span class="nt">"cleartext-private-key"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a><span class="w"> </span><span class="nt">"certificates"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gencert"</span><span class="p">,</span>
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="w"> </span><span class="nt">"public-key-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"infix-crypto-types:x509-public-key-format"</span><span class="p">,</span>
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a><span class="w"> </span><span class="nt">"public-key"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
<a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a><span class="w"> </span><span class="nt">"private-key-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"infix-crypto-types:rsa-private-key-format"</span><span class="p">,</span>
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a><span class="w"> </span><span class="nt">"cleartext-private-key"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
<a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a><span class="w"> </span><span class="nt">"certificates"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a><span class="w"> </span><span class="nt">"certificate"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"self-signed"</span><span class="p">,</span><span class="w"> </span><span class="nt">"cert-data"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-21" name="__codelineno-4-21" href="#__codelineno-4-21"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-24" name="__codelineno-4-24" href="#__codelineno-4-24"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-4-25" name="__codelineno-4-25" href="#__codelineno-4-25"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-4-26" name="__codelineno-4-26" href="#__codelineno-4-26"></a><span class="w"> </span><span class="p">},</span>
</code></pre></div>
<h4 id="ietf-netconf-server">IETF NETCONF Server<a class="headerlink" href="#ietf-netconf-server" title="Permanent link"></a></h4>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="w"> </span><span class="nt">"ietf-netconf-server:netconf-server"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
@@ -2955,8 +2972,20 @@ use-case and not documented here.</p>
<a id="__codelineno-6-15" name="__codelineno-6-15" href="#__codelineno-6-15"></a><span class="w"> </span><span class="nt">"port"</span><span class="p">:</span><span class="w"> </span><span class="mi">22</span>
<a id="__codelineno-6-16" name="__codelineno-6-16" href="#__codelineno-6-16"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-6-17" name="__codelineno-6-17" href="#__codelineno-6-17"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-6-18" name="__codelineno-6-18" href="#__codelineno-6-18"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-6-18" name="__codelineno-6-18" href="#__codelineno-6-18"></a><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-6-19" name="__codelineno-6-19" href="#__codelineno-6-19"></a><span class="w"> </span><span class="nt">"infix-services:web"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-6-20" name="__codelineno-6-20" href="#__codelineno-6-20"></a><span class="w"> </span><span class="nt">"certificate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gencert"</span><span class="p">,</span>
<a id="__codelineno-6-21" name="__codelineno-6-21" href="#__codelineno-6-21"></a><span class="w"> </span><span class="nt">"enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<a id="__codelineno-6-22" name="__codelineno-6-22" href="#__codelineno-6-22"></a><span class="w"> </span><span class="nt">"console"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-6-23" name="__codelineno-6-23" href="#__codelineno-6-23"></a><span class="w"> </span><span class="nt">"netbrowse"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-6-24" name="__codelineno-6-24" href="#__codelineno-6-24"></a><span class="w"> </span><span class="nt">"restconf"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-6-25" name="__codelineno-6-25" href="#__codelineno-6-25"></a><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The <code>certificate</code> leaf references an asymmetric key in the keystore
that has an associated certificate. The default <code>gencert</code> entry uses
a self-signed certificate. To use a custom (e.g., CA-signed)
certificate, create a new keystore entry with
<code>x509-public-key-format</code> and point the web <code>certificate</code> leaf to it.</p>
<h2 id="integration">Integration<a class="headerlink" href="#integration" title="Permanent link"></a></h2>
<p>When integrating your software stack with Infix there may be protocols
that want to change system settings like hostname and dynamically set
+31 -36
View File
@@ -2485,15 +2485,14 @@ followed by Enter. Available commands, press <code>?</code> at the prompt:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>admin@host:/config/interface/eth0/&gt; up
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>admin@host:/config/&gt;
</code></pre></div>
<hr>
<blockquote>
<p><strong>Note:</strong> commands in configure context are automatically generated
from the system's YANG models, hence different products likely have a
different set of commands. However, both the <code>ietf-interfaces.yang</code>
and <code>ietf-ip.yang</code> models, for instance, that provide the networking
<p><strong>Note</strong></p>
<p>Commands in configure context are automatically generated from the
system's YANG models, hence different products likely have a different
set of commands. However, both the <code>ietf-interfaces.yang</code> and
<code>ietf-ip.yang</code> models, for instance, that provide the networking
support are common to all systems.</p>
</blockquote>
<hr>
<h2 id="set-ip-address-on-an-interface">Set IP Address on an Interface<a class="headerlink" href="#set-ip-address-on-an-interface" title="Permanent link"></a></h2>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>admin@host:/config/&gt; edit interface eth0
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>admin@host:/config/interface/eth0/&gt;
@@ -2535,12 +2534,11 @@ reboots:</p>
</code></pre></div>
<p>The <code>startup-config</code> can also be inspected with the <code>show</code> command to
verify the changes are saved.</p>
<hr>
<blockquote>
<p><strong>Note:</strong> all commands need to be spelled out, no short forms are
allowed in the CLI. Use the <code>TAB</code> key to make your life easier.</p>
<p><strong>Important</strong></p>
<p>All commands need to be spelled out, no short forms are allowed in the
CLI. Use the <code>TAB</code> key to make your life easier.</p>
</blockquote>
<hr>
<h2 id="changing-hostname">Changing Hostname<a class="headerlink" href="#changing-hostname" title="Permanent link"></a></h2>
<p>Settings like hostname are located in the <code>ietf-system.yang</code> model.
Here is how it can be set.</p>
@@ -2551,35 +2549,33 @@ Here is how it can be set.</p>
</code></pre></div>
<p>Notice how the hostname in the prompt does not change until the change
is committed.</p>
<hr>
<blockquote>
<p><strong>Note:</strong> critical services like syslog, mDNS, LLDP, and similar that
advertise the hostname, are restarted when the hostname is changed.</p>
<p><strong>Note</strong></p>
<p>Critical services like syslog, mDNS, LLDP, and similar that advertise
the hostname, are restarted when the hostname is changed.</p>
</blockquote>
<hr>
<h2 id="changing-password">Changing Password<a class="headerlink" href="#changing-password" title="Permanent link"></a></h2>
<p>User management, including passwords, is also a part of <code>ietf-system</code>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>admin@host:/config/&gt; edit system authentication user admin
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>admin@host:/config/system/authentication/user/admin/&gt; change password
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>New password:
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>Retype password:
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>New password:
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>Retype password:
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>admin@host:/config/system/authentication/user/admin/&gt; leave
</code></pre></div>
<p>The <code>change password</code> command starts an interactive dialogue that asks
for the new password, with a confirmation, and then salts and encrypts
the password with sha512crypt. </p>
the password with sha512crypt.</p>
<p>It is also possible to use the <code>set password ...</code> command. This allows
setting an already hashed password. To manually hash a password, use
the <code>do password encrypt</code> command. This launches the admin-exec command
to hash, and optionally salt, your password. This encrypted string can
then be used with <code>set password ...</code>.</p>
<hr>
<blockquote>
<p><strong>Tip:</strong> if you are having trouble thinking of a password, there is
also <code>do password generate</code>, which generates random but readable
strings using the UNIX command <code>pwgen</code>.</p>
<p><strong>Tip</strong></p>
<p>If you are having trouble thinking of a password, there is also <code>do
password generate</code>, which generates random but readable strings using
the UNIX command <code>pwgen</code>.</p>
</blockquote>
<hr>
<h2 id="ssh-authorized-key">SSH Authorized Key<a class="headerlink" href="#ssh-authorized-key" title="Permanent link"></a></h2>
<p>Logging in remotely with SSH is possible by adding a <em>public key</em> to a
user. Here we add the authorized key to the admin user, multiple keys
@@ -2595,11 +2591,11 @@ remember to verify SSH login and network connectivity before doing so.</p>
<a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a>key-data AAAAB3NzaC1yc2EAAAADAQABAAABgQC8iBL42yeMBioFay7lty1C4ZDTHcHyo739gc91rTTH8SKvAE4g8Rr97KOz/8PFtOObBrE9G21K7d6UBuPqmd0RUF2CkXXN/eN2PBSHJ50YprRFt/z/304bsBYkDdflKlPDjuSmZ/+OMp4pTsq0R0eNFlX9wcwxEzooIb7VPEdvWE7AYoBRUdf41u3KBHuvjGd1M6QYJtbFLQMMTiVe5IUfyVSZ1RCxEyAB9fR9CBhtVheTVsY3iG0fZc9eCEo89ErDgtGUTJK4Hxt5yCNwI88YaVmkE85cNtw8YwubWQL3/tGZHfbbQ0fynfB4kWNloyRHFr7E1kDxuX5+pbv26EqRdcOVGucNn7hnGU6C1+ejLWdBD7vgsoilFrEaBWF41elJEPKDzpszEijQ9gTrrWeYOQ+x++lvmOdssDu4KvGmj2K/MQTL2jJYrMJ7GDzsUu3XikChRL7zNfS2jYYQLzovboUCgqfPUsVba9hqeX3U67GsJo+hy5MG9RSry4+ucHs=;
<a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a>admin@host:/config/system/authentication/user/admin/authorized-key/example@host/&gt; leave
</code></pre></div>
<hr>
<blockquote>
<p><strong>Note:</strong> the <code>ssh-keygen</code> program already base64 encodes the public
key data, so there is no need to use the <code>text-editor</code> command, <code>set</code>
does the job.</p>
<p><strong>Note</strong></p>
<p>The <code>ssh-keygen</code> program already base64 encodes the public key data,
so there is no need to use the <code>text-editor</code> command, <code>set</code> does the
job.</p>
</blockquote>
<hr>
<h2 id="creating-a-veth-pair">Creating a VETH Pair<a class="headerlink" href="#creating-a-veth-pair" title="Permanent link"></a></h2>
@@ -2633,13 +2629,13 @@ world. Here we also add an IPv4 address to one end of the pair.</p>
<a id="__codelineno-10-25" name="__codelineno-10-25" href="#__codelineno-10-25"></a>admin@host:/config/&gt; leave
</code></pre></div>
<p>See the bridging example below for more.</p>
<hr>
<blockquote>
<p><strong>Note:</strong> in the CLI you do not have to create the <code>veth0b</code> interface.
The system <em>infers</em> this for you. When setting up a VETH pair using
NETCONF, however, you must include the <code>veth0b</code> interface.</p>
<p><strong>Tip</strong></p>
<p>In the CLI you do not have to create the <code>veth0b</code> interface. The
system <em>infers</em> this for you. This does not apply when setting up a
VETH pair using NETCONF or RESTCONF, then you must submit a complete
configuration.</p>
</blockquote>
<hr>
<h2 id="creating-a-bridge">Creating a Bridge<a class="headerlink" href="#creating-a-bridge" title="Permanent link"></a></h2>
<p>Building on the previous example, we now create a non-VLAN filtering
bridge (<code>br0</code>) that forwards any, normally link-local, LLDP traffic
@@ -2689,13 +2685,12 @@ between both its bridge ports: <code>eth0</code> and <code>vet0b</code>.</p>
the VETH pair from the previous example) are now bridged. Any traffic
ingressing one port will egress the other. Only reserved IEEE multicast
is filtered, except LLDP frames as shown above.</p>
<hr>
<blockquote>
<p><strong>Note:</strong> the bridge can be named anything, provided the interface
name is not already taken. However, for any name outside the pattern
<code>br[0-9]+</code>, you have to set the interface type manually to <code>bridge</code>.</p>
<p><strong>Important</strong></p>
<p>The bridge can be named anything, provided the interface name is not
already taken. However, for any name outside the pattern <code>br[0-9]+</code>,
you have to set the interface type manually to <code>bridge</code>.</p>
</blockquote>
<hr>
+15 -16
View File
@@ -2369,12 +2369,11 @@ available in any context are:</p>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>admin@host-12-34-56:/&gt; show # Try: Tab or ?
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>admin@host-12-34-56:/&gt; # Try: Tab or ?
</code></pre></div>
<hr>
<blockquote>
<p><strong>Note:</strong> even on an empty command line, you can tap the <code>Tab</code> or <code>?</code> keys.<br>
<p><strong>Tip</strong></p>
<p>Even on an empty command line, you can tap the <code>Tab</code> or <code>?</code> keys.<br>
See <a href="../keybindings/"><code>help keybindings</code></a> for more tips!</p>
</blockquote>
<hr>
<h2 id="key-concepts">Key Concepts<a class="headerlink" href="#key-concepts" title="Permanent link"></a></h2>
<p>The two modes in the CLI are the admin-exec and the configure context.</p>
<p>The top-level context after logging in and starting the CLI is the
@@ -2407,14 +2406,14 @@ and <em>running</em> that can be managed and inspected using the <code>copy</cod
for these are listed below:</p>
<ul>
<li><code>factory-config</code> the default configuration from factory for the
device, i.e., what the system returns to after a <code>factory-reset</code></li>
device, i.e., what the system returns to after a <code>factory-reset</code></li>
<li><code>startup-config</code> created from <code>factory-config</code> at first boot after
factory reset. Loaded as the system configuration on each boot</li>
factory reset. Loaded as the system configuration on each boot</li>
<li><code>running-config</code> what is actively running on the system. If no
changes have been made since boot, it is the same as <code>startup-config</code></li>
changes have been made since boot, it is the same as <code>startup-config</code></li>
<li><code>candidate-config</code> is created from <code>running-config</code> when entering the
configure context. Any changes made here can be discarded (<code>abort</code>,
<code>rollback</code>) or committed (<code>commit</code>, <code>leave</code>) to <code>running-config</code></li>
configure context. Any changes made here can be discarded (<code>abort</code>,
<code>rollback</code>) or committed (<code>commit</code>, <code>leave</code>) to <code>running-config</code></li>
</ul>
<p>Edit the <em>running</em> configuration using the <code>configure</code> command. This
copies <em>running</em> to <em>candidate</em>, a temporary datastore, where changes
@@ -2495,12 +2494,11 @@ store, so the system will use them for consecutive reboots, use the
</tbody>
</table>
<h2 id="example-session">Example Session<a class="headerlink" href="#example-session" title="Permanent link"></a></h2>
<hr>
<blockquote>
<p><strong>Tip</strong></p>
<p>Remember to use the <code>TAB</code> and <code>?</code> keys to speed up your navigation.<br>
See <a href="../keybindings/"><code>help keybindings</code></a> for more tips!</p>
</blockquote>
<hr>
<p>In this example we enter configure context to add an IPv4 address to
interface <code>eth0</code>, then we apply the changes using the <code>leave</code> command.</p>
<p>We inspect the system status to ensure the change took effect. Then we
@@ -2508,8 +2506,8 @@ save the changes for the next reboot.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>admin@host-12-34-56:/&gt; configure
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>admin@host-12-34-56:/config/&gt; edit interface eth0
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>admin@host-12-34-56:/config/interface/eth0/&gt; set ipv4 &lt;TAB&gt;
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a> address autoconf bind-ni-name enabled
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a> forwarding mtu neighbor
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a> address autoconf bind-ni-name dhcp
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a> enabled forwarding mtu neighbor
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a>admin@host-12-34-56:/config/interface/eth0/&gt; set ipv4 address 192.168.2.200 prefix-length 24
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a>admin@host-12-34-56:/config/interface/eth0/&gt; show
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a>type ethernetCsmacd;
@@ -2546,11 +2544,12 @@ change that, e.g., breaks networking, it is trivial to revert back by:</p>
</code></pre></div>
<p>Or restart the device, for example if the change to the configuration
caused you to lose contact with the system (it happens to the best of
us). The system will start up from the last "save gave".</p>
us). The system will start up from the last "save game".</p>
<blockquote>
<p><strong>Tip:</strong> when restoring a backup of a configuration, or having manually
edited a config file, you can validate it using system's YANG models,
it is <em>not</em> applied if validation is successful:</p>
<p><strong>Tip:</strong> Restoring Backups</p>
<p>When restoring a backup of a configuration, or having manually edited
a config file, you can validate it using the system's YANG models, it
is <em>not</em> applied if validation is successful:</p>
<p><code>copy /media/backup/old.cfg running-config validate</code></p>
</blockquote>
+3 -3
View File
@@ -490,7 +490,7 @@
<a href="#what-is-meta" class="md-nav__link">
<span class="md-ellipsis">
What is Meta?
What is Meta
</span>
</a>
@@ -2257,7 +2257,7 @@
<a href="#what-is-meta" class="md-nav__link">
<span class="md-ellipsis">
What is Meta?
What is Meta
</span>
</a>
@@ -2492,7 +2492,7 @@ CLI has several keybindings, most significant first:</p>
</tr>
</tbody>
</table>
<h2 id="what-is-meta">What is Meta?<a class="headerlink" href="#what-is-meta" title="Permanent link"></a></h2>
<h2 id="what-is-meta">What is Meta<a class="headerlink" href="#what-is-meta" title="Permanent link"></a></h2>
<p>The Meta key is called Alt on most modern keyboards. If you have
neither, first tap the Esc key instead of holding down Alt/Meta.</p>
<h2 id="usage">Usage<a class="headerlink" href="#usage" title="Permanent link"></a></h2>
+2 -3
View File
@@ -2320,13 +2320,12 @@ keybindings are really useful to learn!</p>
</tr>
</tbody>
</table>
<hr>
<blockquote>
<p>In <code>configure</code> context the <code>help setting</code> command shows the YANG
<p><strong>Tip:</strong> Online Help</p>
<p>In <code>configure</code> context the <code>help &lt;setting&gt;</code> command shows the YANG
description text for each node and container. To reach the admin
exec help from configure context, e.g., <code>do help text-editor</code></p>
</blockquote>
<hr>
+2 -2
View File
@@ -2262,7 +2262,7 @@ even both.</p>
<p>To install a new software image to the currently <em>inactive</em> partition<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>, we
use the <code>upgrade</code> command and a URI to a ftp/tftp/sftp or http/https server
that hosts the file:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>admin@host:/&gt; upgrade tftp://192.168.122.1/firmware-x86_64-v23.11.pkg
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>admin@example:/&gt; upgrade tftp://192.168.122.1/firmware-x86_64-v23.11.pkg
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>installing
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> 0% Installing
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> 0% Determining slot states
@@ -2283,7 +2283,7 @@ that hosts the file:</p>
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a> 99% Updating slots done.
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a>100% Installing done.
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a>Installing `tftp://192.168.122.1/firmware-x86_64-v23.11.pkg` succeeded
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a>admin@host:/&gt;
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a>admin@example:/&gt;
</code></pre></div>
<p>The secondary partition (<code>rootfs.1</code>) has now been upgraded and will be used as
the <em>active</em> partition on the next boot. Leaving the primary partition, with
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 428 KiB

+69
View File
@@ -1625,6 +1625,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tls-certificates" class="md-nav__link">
<span class="md-ellipsis">
TLS Certificates
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2447,6 +2458,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tls-certificates" class="md-nav__link">
<span class="md-ellipsis">
TLS Certificates
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2645,6 +2667,7 @@ for WiFi and WireGuard key formats.</p>
<p><strong>Asymmetric Keys</strong> — public/private key pairs used for:</p>
<ul>
<li>SSH host authentication (RSA keys)</li>
<li>HTTPS/TLS certificates (X.509 keys)</li>
<li>WireGuard VPN tunnels (X25519 keys)</li>
</ul>
</li>
@@ -2674,6 +2697,11 @@ managed via CLI, NETCONF, or RESTCONF.</p>
<td>RSA</td>
</tr>
<tr>
<td><code>rsa-private-key-format</code> / <code>x509-public-key-format</code></td>
<td>TLS certificates</td>
<td>RSA + X.509</td>
</tr>
<tr>
<td><code>x25519-private-key-format</code> / <code>x25519-public-key-format</code></td>
<td>WireGuard VPN</td>
<td>Curve25519</td>
@@ -2707,6 +2735,46 @@ default host key is automatically generated on first boot and stored in the
keystore with the name <code>genkey</code>.</p>
<p>See <a href="../management/">SSH Management</a> for details on generating and importing
custom SSH host keys.</p>
<h3 id="tls-certificates">TLS Certificates<a class="headerlink" href="#tls-certificates" title="Permanent link"></a></h3>
<p>TLS certificates are used by the web server (nginx) for HTTPS connections.
The default certificate is a self-signed certificate automatically generated
on first boot and stored in the keystore with the name <code>gencert</code>. Like SSH
host keys, the certificate is regenerated on factory reset when its keys are
empty.</p>
<p>The web server's <code>certificate</code> leaf references which keystore entry to use:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">"infix-services:web"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">"certificate"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gencert"</span><span class="p">,</span>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">"enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="p">}</span>
</code></pre></div>
<p>To use a custom (e.g., CA-signed) certificate, create a new asymmetric key
entry with <code>x509-public-key-format</code>, populate it with your certificate and
private key, then point the web <code>certificate</code> leaf to it:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="nt">"ietf-keystore:keystore"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="nt">"asymmetric-keys"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="nt">"asymmetric-key"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my-cert"</span><span class="p">,</span>
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="nt">"public-key-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"infix-crypto-types:x509-public-key-format"</span><span class="p">,</span>
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="nt">"public-key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&lt;base64-encoded-cert&gt;"</span><span class="p">,</span>
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="nt">"private-key-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"infix-crypto-types:rsa-private-key-format"</span><span class="p">,</span>
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="nt">"cleartext-private-key"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&lt;base64-encoded-key&gt;"</span><span class="p">,</span>
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span><span class="nt">"certificates"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a><span class="w"> </span><span class="nt">"certificate"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ca-signed"</span><span class="p">,</span><span class="w"> </span><span class="nt">"cert-data"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&lt;base64-encoded-cert&gt;"</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a><span class="p">}</span>
</code></pre></div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The <code>public-key</code> and <code>cert-data</code> fields contain base64-encoded PEM data
with the <code>-----BEGIN/END-----</code> markers stripped. The system reconstructs
the PEM files when writing them to disk for nginx.</p>
</div>
<h3 id="wireguard-keys">WireGuard Keys<a class="headerlink" href="#wireguard-keys" title="Permanent link"></a></h3>
<p>WireGuard uses X25519 elliptic curve cryptography for key exchange. Each
WireGuard interface requires a public/private key pair stored as an asymmetric
@@ -2762,6 +2830,7 @@ wg-psk octet-string zYr83O4Ykj9i1gN+/aaosJxQx...
<span class="title">Asymmetric Keys</span>
<span class="header">NAME TYPE PUBLIC KEY </span>
genkey rsa MIIBCgKCAQEAnj0YinjhYDgYbEGuh7...
gencert x509 MIIDXTCCAkWgAwIBAgIJAJC1HiIAZA...
wg-tunnel x25519 bN1CwZ1lTP6KsrCwZ1lTP6KsrCwZ1...
</code></pre>
+36
View File
@@ -1630,6 +1630,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#https-certificate" class="md-nav__link">
<span class="md-ellipsis">
HTTPS Certificate
</span>
</a>
</li>
</ul>
@@ -2413,6 +2424,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#https-certificate" class="md-nav__link">
<span class="md-ellipsis">
HTTPS Certificate
</span>
</a>
</li>
</ul>
@@ -2620,6 +2642,7 @@ the unit's neighbors, collected via mDNS (see
<pre class="cli"><code>admin@example:/&gt; <b>configure</b>
admin@example:/config/&gt; <b>edit web</b>
admin@example:/config/web/&gt; <b>help</b>
certificate Reference to asymmetric key in central keystore.
enabled Enable or disable on all web services.
console Web console interface.
netbrowse mDNS Network Browser.
@@ -2665,6 +2688,19 @@ admin@example:/config/web/restconf/&gt; <b>no enabled</b>
admin@example:/config/web/restconf/&gt;
</code></pre>
<h3 id="https-certificate">HTTPS Certificate<a class="headerlink" href="#https-certificate" title="Permanent link"></a></h3>
<p>The Web server uses a TLS certificate from the central
<a href="../keystore/">keystore</a>. By default it uses <code>gencert</code>, a self-signed
certificate that is automatically generated on first boot.</p>
<p>To use a different certificate, e.g., one signed by a CA, first add
it to the keystore as an asymmetric key with <code>x509-public-key-format</code>,
then point the web <code>certificate</code> leaf to it:</p>
<pre class="cli"><code>admin@example:/config/web/&gt; <b>set certificate my-cert</b>
admin@example:/config/web/&gt;
</code></pre>
<p>See <a href="../keystore/#tls-certificates">Keystore</a> for details on managing
TLS certificates.</p>
<h2 id="system-upgrade">System Upgrade<a class="headerlink" href="#system-upgrade" title="Permanent link"></a></h2>
<p>See <a href="../upgrade/">Upgrade &amp; Boot Order</a> for information on upgrading.</p>
File diff suppressed because one or more lines are too long
+50 -50
View File
@@ -2,202 +2,202 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://kernelkit.github.io/infix/dev/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/boot/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/branding/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/bridging/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/container/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/developers-guide/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/dhcp/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/discovery/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/eth-counters/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/ethernet/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/firewall/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/hardware/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/iface/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/ip/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/keystore/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/lag/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/license/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/management/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/nacm/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/netboot/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/networking/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/ntp/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/override-package/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/qos/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/routing/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/scripting-netconf/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/scripting-prod/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/scripting-restconf/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/scripting-sysrepocfg/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/scripting/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/support/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/syslog/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/system/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/test-arch/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/testing/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/tunnels/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/upgrade/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/virtual/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/vpd/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/vpn-wireguard/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/vpn/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/wifi/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/configure/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/introduction/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/keybindings/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/netcalc/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/quick/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/tcpdump/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/text-editor/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
<url>
<loc>https://kernelkit.github.io/infix/dev/cli/upgrade/</loc>
<lastmod>2026-03-19</lastmod>
<lastmod>2026-03-20</lastmod>
</url>
</urlset>
Binary file not shown.
+120 -12
View File
@@ -2198,6 +2198,45 @@
</span>
</a>
<nav class="md-nav" aria-label="Integration to Infix">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#test-mode" class="md-nav__link">
<span class="md-ellipsis">
Test Mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-mode-on-virtual-devices" class="md-nav__link">
<span class="md-ellipsis">
Test Mode on Virtual Devices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-mode-on-physical-devices" class="md-nav__link">
<span class="md-ellipsis">
Test Mode on Physical Devices
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@@ -2417,6 +2456,45 @@
</span>
</a>
<nav class="md-nav" aria-label="Integration to Infix">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#test-mode" class="md-nav__link">
<span class="md-ellipsis">
Test Mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-mode-on-virtual-devices" class="md-nav__link">
<span class="md-ellipsis">
Test Mode on Virtual Devices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#test-mode-on-physical-devices" class="md-nav__link">
<span class="md-ellipsis">
Test Mode on Physical Devices
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
@@ -2704,18 +2782,48 @@ could accept an arbitrary physical topology, run the STP algorithm on
it offline, enable STP on all DUTs, and then verify that the resulting
spanning tree matches the expected one.</p>
<h2 id="integration-to-infix">Integration to Infix<a class="headerlink" href="#integration-to-infix" title="Permanent link"></a></h2>
<p>When the test environment is started with Qeneth, it doesn't use the
base image directly. Instead, it creates a copy and inserts a <code>test-mode</code>
flag into it. During the bootstrap phase, the system checks for the
presence of the test-mode flag (file).</p>
<p>If the flag exists, a 'test-config.cfg' file is generated. In the
following step, the system loads the 'test-config' instead of the
standard <code>startup-config</code> (or <code>factory-config</code>). This configuration
is simple and safe, equivalent to the one used in 'Secure Mode'
(also known as 'failure-config').</p>
<p>Additionally, the configuration enables extra RPCs related to system
restart and configuration overrides, allowing tests to be run even on
systems where the factory configuration may potentially create L2 loops. </p>
<h3 id="test-mode">Test Mode<a class="headerlink" href="#test-mode" title="Permanent link"></a></h3>
<p>Infix supports a <em>test mode</em> that makes devices safe and predictable to
test against. When active, each boot starts from a known-good
<code>test-config</code> (equivalent to the failure/secure config) instead of the
stored startup or factory configuration. This prevents any persistent
configuration from interfering with tests and avoids L2 loops that a
factory config might create. It also enables two extra RPCs used by
Infamy:</p>
<ul>
<li><code>infix-test:test/reset</code> — reload the <code>test-config</code> into the running
datastore (called by <code>env.attach()</code> at the start of each test)</li>
<li><code>infix-test:test/override-startup</code> — boot from the startup datastore
once, instead of the <code>test-config</code> (used by tests that verify
save-and-reboot behaviour)</li>
</ul>
<p>Test mode is activated by the presence of an empty file named
<code>test-mode</code> on the device's <code>aux</code> partition (<code>/mnt/aux/test-mode</code>).</p>
<h3 id="test-mode-on-virtual-devices">Test Mode on Virtual Devices<a class="headerlink" href="#test-mode-on-virtual-devices" title="Permanent link"></a></h3>
<p>When the test environment is started with Qeneth, the <code>inject-test-mode</code>
script (<code>test/inject-test-mode</code>) is run automatically. It copies the
base disk image and writes the <code>test-mode</code> marker into the <code>aux</code>
partition of that copy, which is then used as the Qeneth backing image.</p>
<h3 id="test-mode-on-physical-devices">Test Mode on Physical Devices<a class="headerlink" href="#test-mode-on-physical-devices" title="Permanent link"></a></h3>
<p>For a physical device, log in as <code>root</code> (or <code>admin</code>) and create the
marker file on the <code>aux</code> partition, then reboot:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a># touch /mnt/aux/test-mode
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a># reboot
</code></pre></div>
<p>Alternatively, if you want to prepare the disk image before flashing,
use the <code>inject-test-mode</code> script:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>$ test/inject-test-mode -b infix-&lt;board&gt;.img -o infix-&lt;board&gt;-test.img
</code></pre></div>
<p>Flash <code>infix-&lt;board&gt;-test.img</code> to the device instead of the plain
image. The device will boot into test mode on first power-on.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Test mode persists across reboots until the marker file is removed
(<code>rm /mnt/aux/test-mode</code>). A device in test mode always starts from
the <code>test-config</code>, so any configuration changes are lost on reboot
unless <code>startup_override()</code> is called first (or the marker is removed
and a normal startup config is saved).</p>
</div>
+8 -1
View File
@@ -2658,12 +2658,19 @@ namespace, specify the <code>host</code> <code>TEST_MODE</code>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>$ make TEST_MODE=host test
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>...
</code></pre></div>
<p>This typically used when testing on physical hardware. By default the
<p>This is typically used when testing on physical hardware. By default the
topology will be sourced from <code>/etc/infamy.dot</code>, but this can be
overwritten by setting the <code>TOPOLOGY</code> variable:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>$ make TEST_MODE=host TOPOLOGY=~/my-topology.dot test
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>...
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Important</p>
<p>Physical devices must be put into <em>test mode</em> before running tests.
See <a href="../test-arch/#test-mode">Test Mode</a> in the architecture document
for details. The short version: log in to the device and run
<code>touch /mnt/aux/test-mode &amp;&amp; reboot</code>.</p>
</div>
<h3 id="make-run-devices"><code>make run</code> Devices<a class="headerlink" href="#make-run-devices" title="Permanent link"></a></h3>
<p>Some tests only require a single DUT. These can therefore be run
against an Infix image started from <code>make run</code>. This requires that the