From 038b3a3a2ad91f67f074ba05a35d800c3dac2c07 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Sat, 2 May 2026 21:13:13 +0300 Subject: feat(swap-circinus): add incremental RST-to-MyST swap mechanism MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backport of the swap mechanism from feat/incremental-myst-swap onto the circinus release branch. Built directly on top of origin/circinus, so the underlying RST tree is circinus's (not current's). Mechanism: - scripts/import_myst.py — import md from myst/* with md- prefix - scripts/swap_sources.py — rename md-{name}.md → {name}.md before Sphinx builds, restore after; writes _build/_swap_state.json and _build/_swap_exclude.txt - docs/Makefile — html/dirhtml/pdf/livehtml all run swap → build → trap restore; explicit `swap` and `restore` targets too - docs/conf.py — MyST extensions enabled; swap exclude_patterns loader; _prefer_webp builder hook so html prefers webp over png Content (all from origin/myst/circinus): - 253 md-prefixed pages alongside each {name}.rst counterpart - 1 plain MyST-only page kept at canonical name (docs/copyright.md, no .rst counterpart) - 182 .webp images added (circinus release previously had only PNG/JPG; this PR brings webp into circinus alongside the originals) - docs/_swap.txt populated with all 253 stems → MyST is served by default; revert a page by removing its stem from _swap.txt 🤖 Generated by [robots](https://vyos.io) --- docs/configuration/interfaces/md-bonding.md | 753 +++++++++++++++ docs/configuration/interfaces/md-bridge.md | 431 +++++++++ docs/configuration/interfaces/md-dummy.md | 87 ++ docs/configuration/interfaces/md-ethernet.md | 515 ++++++++++ docs/configuration/interfaces/md-geneve.md | 105 ++ docs/configuration/interfaces/md-index.md | 26 + docs/configuration/interfaces/md-l2tpv3.md | 170 ++++ docs/configuration/interfaces/md-loopback.md | 67 ++ docs/configuration/interfaces/md-macsec.md | 319 ++++++ .../interfaces/md-openvpn-examples.md | 855 +++++++++++++++++ docs/configuration/interfaces/md-openvpn.md | 614 ++++++++++++ docs/configuration/interfaces/md-pppoe.md | 419 ++++++++ .../configuration/interfaces/md-pseudo-ethernet.md | 52 + docs/configuration/interfaces/md-sstp-client.md | 170 ++++ docs/configuration/interfaces/md-tunnel.md | 304 ++++++ .../interfaces/md-virtual-ethernet.md | 119 +++ docs/configuration/interfaces/md-vti.md | 53 + docs/configuration/interfaces/md-vxlan.md | 373 ++++++++ docs/configuration/interfaces/md-wireguard.md | 441 +++++++++ docs/configuration/interfaces/md-wireless.md | 1012 ++++++++++++++++++++ docs/configuration/interfaces/md-wwan.md | 355 +++++++ 21 files changed, 7240 insertions(+) create mode 100644 docs/configuration/interfaces/md-bonding.md create mode 100644 docs/configuration/interfaces/md-bridge.md create mode 100644 docs/configuration/interfaces/md-dummy.md create mode 100644 docs/configuration/interfaces/md-ethernet.md create mode 100644 docs/configuration/interfaces/md-geneve.md create mode 100644 docs/configuration/interfaces/md-index.md create mode 100644 docs/configuration/interfaces/md-l2tpv3.md create mode 100644 docs/configuration/interfaces/md-loopback.md create mode 100644 docs/configuration/interfaces/md-macsec.md create mode 100644 docs/configuration/interfaces/md-openvpn-examples.md create mode 100644 docs/configuration/interfaces/md-openvpn.md create mode 100644 docs/configuration/interfaces/md-pppoe.md create mode 100644 docs/configuration/interfaces/md-pseudo-ethernet.md create mode 100644 docs/configuration/interfaces/md-sstp-client.md create mode 100644 docs/configuration/interfaces/md-tunnel.md create mode 100644 docs/configuration/interfaces/md-virtual-ethernet.md create mode 100644 docs/configuration/interfaces/md-vti.md create mode 100644 docs/configuration/interfaces/md-vxlan.md create mode 100644 docs/configuration/interfaces/md-wireguard.md create mode 100644 docs/configuration/interfaces/md-wireless.md create mode 100644 docs/configuration/interfaces/md-wwan.md (limited to 'docs/configuration/interfaces') diff --git a/docs/configuration/interfaces/md-bonding.md b/docs/configuration/interfaces/md-bonding.md new file mode 100644 index 00000000..4538b145 --- /dev/null +++ b/docs/configuration/interfaces/md-bonding.md @@ -0,0 +1,753 @@ +--- +lastproofread: '2025-12-09' +--- + +(bond-interface)= + +# Bond / link aggregation + +A **bonding interface** aggregates multiple network interfaces into a single +logical interface (referred to as a bond, {abbr}`LAG (Link Aggregation Group)`, +EtherChannel, or port-channel). + +The behavior of a bonding interface depends on the selected mode. Modes provide +either fault tolerance or a combination of load balancing and fault tolerance. +Additionally, the bonding interface can be configured for link integrity +monitoring. + +## Configuration + +### Common interface configuration + +```{eval-rst} +.. cmdincludemd:: /_include/interface-common-with-dhcp.txt + :var0: bonding + :var1: bond0 +``` + +### Member interfaces + +```{eval-rst} +.. cfgcmd:: set interfaces bonding member interface + + **Add an interface to the bonding group.** + + **Example:** + + To configure eth0 and eth1 as members of the bonding interface bond0, execute + the following commands: +``` + +```none +set interfaces bonding bond0 member interface eth0 +set interfaces bonding bond0 member interface eth1 +``` + +### Bond modes + +```{eval-rst} +.. cfgcmd:: set interfaces bonding mode <802.3ad | active-backup | + broadcast | round-robin | transmit-load-balance | adaptive-load-balance | + xor-hash> + + **Configure the bonding mode on the interface. The default mode is** + ``802.3ad``. + + The available modes are: + + * ``802.3ad`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - IEEE 802.3ad Dynamic Link Aggregation. Groups only member interfaces with + the same speed (e.g., 1 Gbps) and duplex settings. Member interfaces with + different speed and duplex settings are not included in the active bond. + + Provides load balancing and fault tolerance. Uses the {abbr}`LACP (Link + Aggregation Control Protocol)` to negotiate the bond with the switch. + * - **Traffic distribution:** + - Traffic is distributed according to the **transmit hash policy** + (default: XOR). + + The bonding driver applies an XOR operation to specific packet header fields, + generating a hash value that maps to a particular member interface. This + ensures the same network flow is consistently transmitted over the same member + interface. + + The transmit hash policy is configured via the ``hash-policy`` option. + * - **Failover:** + - If a member interface fails, the hash is recalculated to distribute + traffic among the remaining active member interfaces. + + .. note:: Not all transmit hash policies comply with 802.3ad, particularly + section 43.2.4. Using a non-compliant policy may result in out-of-order + packet delivery. + + * ``active-backup`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Provides fault tolerance. Only one member interface is active at a time. + Other member interfaces remain in a standby mode. + * - **Traffic distribution:** + - All traffic (incoming and outgoing) is routed via one active member interface. + * - **Failover:** + - If the designated member interface fails, all traffic is routed to + another member interface. The bonding driver sends a Gratuitous ARP + to update the peer's MAC address table, linking the bond's MAC address + to another physical port. + + * ``broadcast`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Provides maximum fault tolerance by duplicating traffic. + * - **Traffic distribution:** + - Every packet is duplicated and transmitted on **all** member interfaces. + * - **Failover:** + - Traffic flow is not interrupted as long as at least one member interface + remains active. + + * ``round-robin`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Provides load balancing and fault tolerance. + * - **Traffic distribution:** + - Packets are transmitted in sequential order across the member interfaces + (e.g., packet 1 > interface A, packet 2 > interface B, etc.). + * - **Failover:** + - If a member interface fails, the sequence skips the failed interface and + continues with the remaining active members. + + * ``transmit-load-balance`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Provides adaptive transmit load balancing and fault tolerance. + * - **Traffic distribution:** + - **Outgoing:** Distributed across all active member interfaces based on + the current load. + + **Incoming:** Received by a designated member interface (active receiver). + * - **Failover:** + - If the active receiver fails, another member interface takes over as the new + active receiver. + + * ``adaptive-load-balance`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Provides adaptive transmit load balancing identical to + ``transmit-load-balance``, receive load balancing for IPv4 traffic, and fault + tolerance for both incoming and outgoing traffic. + * - **Traffic distribution:** + - **Outgoing:** Identical to ``transmit-load-balance``. + + **Incoming:** Distributed based on ARP manipulation. For both local and remote + connections, the bonding driver intercepts ARP traffic and changes the source + MAC address to the MAC address of the least loaded member interface. + + All traffic from that peer is then routed to the chosen member interface. + * - **Failover:** + - If a member interface's state changes (fails, recovers, is added, or excluded), + the traffic is redistributed among all active member interfaces. + + * ``xor-hash``: Provides load balancing and fault tolerance based on a hash formula. + Distributes traffic and handles failover identically to ``802.3ad``, but operates + without the {abbr}`LACP (Link Aggregation Control Protocol)`. +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding min-links <0-16> + + **Configure how many member interfaces must be active (in the link-up state) to + mark the bonding interface UP (carrier asserted).** + + This command applies only when the bonding interface is configured in 802.3ad + mode and functions like the Cisco EtherChannel min-links feature. It ensures + that a bonding interface is marked UP (carrier asserted) only when a specified + number of member interfaces are active (in the link-up state). This helps + guarantee a minimum level of bandwidth for higher-level services (such as + clustering) relying on the bonding interface. + + The default value is 0. This marks the bonding interface UP (carrier asserted) + whenever an active LACP aggregator exists, regardless of the number of member + interfaces in that aggregator. + + .. note:: In 802.3ad mode, a bond cannot be active without at least one active + member interface. Therefore, setting min-links to 0 or 1 has the same result: + the bonding interface is marked UP (carrier asserted). +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding lacp-rate + + **Configure the rate at which the bonding interface requests its link + partner to send** {abbr}`LACPDUs (Link Aggregation Control Protocol Data + Units)` **in 802.3ad mode.** + + This command applies only when the bonding interface is configured in + 802.3ad mode. + + The following options are available: + + * **slow (default):** Requests the link partner to transmit LACPDUs every 30 seconds. + + * **fast:** Requests the link partner to transmit LACPDUs every 1 second. + +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding system-mac + + **Configure a specific MAC address for the bonding interface.** + + This sets the 802.3ad system MAC address, which is used for {abbr}`LACPDU (Link + Aggregation Control Protocol Data Unit)` exchanges with the link partner. + You can assign a fixed MAC address or generate a random one for these + {abbr}`LACPDU (Link Aggregation Control Protocol Data Unit)` exchanges. + +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding hash-policy + + **Configure which transmit hash policy to use for distributing traffic across + member interfaces.** + + The following policies are available: + + * ``layer2`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Routes all traffic destined for a specific network peer through the same + member interface. The policy is 802.3ad-compliant. + * - **Hash inputs:** + - Source MAC address, destination MAC address, and Ethernet packet type ID. + * - **Formula:** + - .. code-block:: none + + hash = source MAC address XOR destination MAC address XOR packet type ID + member interface number = hash modulo member interface count + + * ``layer2+3`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Similar to ``layer2``, routes all traffic destined for a specific network + peer through the same member interface and is IEEE 802.3ad-compliant. Uses + both Layer 2 and Layer 3 information to provide a more balanced traffic distribution. + * - **Hash inputs:** + - * Source MAC address, destination MAC address, and Ethernet packet type ID. + * Source IP address, destination IP address. IPv6 addresses are first hashed + using ``IPv6_addr_hash``. + * - **Formula:** + - .. code-block:: none + + hash = source MAC address XOR destination MAC address XOR packet type ID + hash = hash XOR source IP address XOR destination IP address + hash = hash XOR (hash RSHIFT 16) + hash = hash XOR (hash RSHIFT 8) + member interface number = hash modulo member interface count + + For non-IP traffic, the formula is the same as for ``layer2``. + + * ``layer3+4`` + + .. list-table:: + :widths: 20 80 + + * - **Description:** + - Routes different connections (flows) destined for a specific network peer + through multiple member interfaces, but ensures each individual flow is + routed through only one member interface. + + .. note:: This policy is not fully 802.3ad-compliant. When a single TCP + or UDP flow contains both fragmented and unfragmented packets, the + algorithm may distribute them across different member interfaces. This + may result in out-of-order packet delivery, violating the 802.3ad standard. + * - **Hash inputs:** + - * Source port, destination port (if available). + * Source IP address, destination IP address. IPv6 addresses are first hashed + using ``IPv6_addr_hash``. + * - **Formula:** + - .. code-block:: none + + hash = source port, destination port (as in the header) + hash = hash XOR source IP address XOR destination IP address + hash = hash XOR (hash RSHIFT 16) + hash = hash XOR (hash RSHIFT 8) + member interface number = hash modulo member interface count + + For fragmented TCP or UDP packets and all other IPv4 and IPv6 traffic, the + source and destination port information is omitted. + + For non-IP traffic, the formula is the same as for ``layer2``. +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding primary + + **Configure the primary member interface in the bond.** + + The primary member interface remains active as long as it is operational; + alternative member interfaces are used only if it fails. + + Use this configuration when a specific member interface is preferred, + such as one with higher throughput. + + This command applies only to ``active-backup``, ``transmit-load-balance``, and + ``adaptive-load-balance`` modes. +``` + +```{eval-rst} +.. cfgcmd:: set interfaces bonding arp-monitor interval