Files
infix/dev/networking/index.html
T

4968 lines
172 KiB
HTML

<!DOCTYPE html><html lang="en" class="no-js"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Infix Documentation">
<link rel="canonical" href="https://kernelkit.github.io/infix/dev/networking/">
<link rel="prev" href="../container/">
<link rel="next" href="../firewall/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
<title>Network Configuration - User's Guide</title>
<link rel="stylesheet" href="../assets/stylesheets/main.618322db.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<link href="../assets/stylesheets/glightbox.min.css" rel="stylesheet"><script src="../assets/javascripts/glightbox.min.js"></script><style id="glightbox-style">
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: black; }
.glightbox-clean .gslide-media { -webkit-box-shadow: none; box-shadow: none; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color); }
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color); }
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color); }
</style></head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#network-configuration" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://kernelkit.org/" title="User's Guide" class="md-header__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../logo-plain.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
User's Guide
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Network Configuration
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"></path></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="orange" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"></path></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"></path></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/kernelkit/infix/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"></path></svg>
</div>
<div class="md-source__repository">
kernelkit/infix
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://kernelkit.org/" title="User's Guide" class="md-nav__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../logo-plain.png" alt="logo">
</a>
User's Guide
</label>
<div class="md-nav__source">
<a href="https://github.com/kernelkit/infix/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"></path></svg>
</div>
<div class="md-source__repository">
kernelkit/infix
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
CLI
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
CLI
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cli/introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/configure/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/keybindings/" class="md-nav__link">
<span class="md-ellipsis">
Keybindings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/netcalc/" class="md-nav__link">
<span class="md-ellipsis">
Network Calculator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/tcpdump/" class="md-nav__link">
<span class="md-ellipsis">
Network Monitoring
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/quick/" class="md-nav__link">
<span class="md-ellipsis">
Quickstart Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/text-editor/" class="md-nav__link">
<span class="md-ellipsis">
Text Editor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Upgrading
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../container/" class="md-nav__link">
<span class="md-ellipsis">
Docker Containers
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Networking
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Networking
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Network Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Network Configuration
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#interface-lego" class="md-nav__link">
<span class="md-ellipsis">
Interface LEGO®
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#data-plane" class="md-nav__link">
<span class="md-ellipsis">
Data Plane
</span>
</a>
<nav class="md-nav" aria-label="Data Plane">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#general" class="md-nav__link">
<span class="md-ellipsis">
General
</span>
</a>
<nav class="md-nav" aria-label="General">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fixed-custom-mac" class="md-nav__link">
<span class="md-ellipsis">
Fixed custom MAC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#chassis-mac" class="md-nav__link">
<span class="md-ellipsis">
Chassis MAC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#chassis-mac-with-offset" class="md-nav__link">
<span class="md-ellipsis">
Chassis MAC, with offset
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#bridging" class="md-nav__link">
<span class="md-ellipsis">
Bridging
</span>
</a>
<nav class="md-nav" aria-label="Bridging">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mac-bridge" class="md-nav__link">
<span class="md-ellipsis">
MAC Bridge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#vlan-filtering-bridge" class="md-nav__link">
<span class="md-ellipsis">
VLAN Filtering Bridge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#multicast-filtering-and-snooping" class="md-nav__link">
<span class="md-ellipsis">
Multicast Filtering and Snooping
</span>
</a>
<nav class="md-nav" aria-label="Multicast Filtering and Snooping">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#terminology-abbreviations" class="md-nav__link">
<span class="md-ellipsis">
Terminology &amp; Abbreviations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#forwarding-of-ieee-reserved-group-addresses" class="md-nav__link">
<span class="md-ellipsis">
Forwarding of IEEE Reserved Group Addresses
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#link-aggregation" class="md-nav__link">
<span class="md-ellipsis">
Link Aggregation
</span>
</a>
<nav class="md-nav" aria-label="Link Aggregation">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#basic-configuration" class="md-nav__link">
<span class="md-ellipsis">
Basic Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lacp-configuration" class="md-nav__link">
<span class="md-ellipsis">
LACP Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#link-flapping" class="md-nav__link">
<span class="md-ellipsis">
Link Flapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operational-status-overview" class="md-nav__link">
<span class="md-ellipsis">
Operational Status, Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operational-status-detail" class="md-nav__link">
<span class="md-ellipsis">
Operational Status, Detail
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-switch-uplink-with-lacp" class="md-nav__link">
<span class="md-ellipsis">
Example: Switch Uplink with LACP
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#vlan-interfaces" class="md-nav__link">
<span class="md-ellipsis">
VLAN Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#physical-ethernet-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Physical Ethernet Interfaces
</span>
</a>
<nav class="md-nav" aria-label="Physical Ethernet Interfaces">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ethernet-settings-and-status" class="md-nav__link">
<span class="md-ellipsis">
Ethernet Settings and Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configuring-fixed-speed-and-duplex" class="md-nav__link">
<span class="md-ellipsis">
Configuring fixed speed and duplex
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ethernet-statistics" class="md-nav__link">
<span class="md-ellipsis">
Ethernet statistics
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#veth-pairs" class="md-nav__link">
<span class="md-ellipsis">
VETH Pairs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#management-plane" class="md-nav__link">
<span class="md-ellipsis">
Management Plane
</span>
</a>
<nav class="md-nav" aria-label="Management Plane">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
IPv4 Address Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
IPv6 Address Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#examples" class="md-nav__link">
<span class="md-ellipsis">
Examples
</span>
</a>
<nav class="md-nav" aria-label="Examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#static-and-link-local-ipv4-addresses" class="md-nav__link">
<span class="md-ellipsis">
Static and link-local IPv4 addresses
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#use-of-dhcp-for-ipv4-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
Use of DHCP for IPv4 address assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#use-of-dhcpv6-for-ipv6-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
Use of DHCPv6 for IPv6 address assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#disabling-ipv6-link-local-addresses" class="md-nav__link">
<span class="md-ellipsis">
Disabling IPv6 link-local address(es)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#static-ipv6-address" class="md-nav__link">
<span class="md-ellipsis">
Static IPv6 address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#stateless-auto-configuration-of-global-ipv6-address" class="md-nav__link">
<span class="md-ellipsis">
Stateless Auto-configuration of Global IPv6 Address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#random-link-identifiers-for-ipv6-stateless-autoconfiguration" class="md-nav__link">
<span class="md-ellipsis">
Random Link Identifiers for IPv6 Stateless Autoconfiguration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ipv4-forwarding" class="md-nav__link">
<span class="md-ellipsis">
IPv4 forwarding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-forwarding" class="md-nav__link">
<span class="md-ellipsis">
IPv6 forwarding
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#routing-support" class="md-nav__link">
<span class="md-ellipsis">
Routing support
</span>
</a>
<nav class="md-nav" aria-label="Routing support">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-static-routes" class="md-nav__link">
<span class="md-ellipsis">
IPv4 Static routes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-static-routes" class="md-nav__link">
<span class="md-ellipsis">
IPv6 Static routes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospfv2-routing" class="md-nav__link">
<span class="md-ellipsis">
OSPFv2 Routing
</span>
</a>
<nav class="md-nav" aria-label="OSPFv2 Routing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ospf-area-types" class="md-nav__link">
<span class="md-ellipsis">
OSPF area types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bidirectional-forwarding-detection-bfd" class="md-nav__link">
<span class="md-ellipsis">
Bidirectional Forwarding Detection (BFD)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospf-interface-settings" class="md-nav__link">
<span class="md-ellipsis">
OSPF interface settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospf-global-settings" class="md-nav__link">
<span class="md-ellipsis">
OSPF global settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#debug-ospfv2" class="md-nav__link">
<span class="md-ellipsis">
Debug OSPFv2
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#view-routing-table" class="md-nav__link">
<span class="md-ellipsis">
View routing table
</span>
</a>
<nav class="md-nav" aria-label="View routing table">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-routing-table" class="md-nav__link">
<span class="md-ellipsis">
IPv4 routing table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-routing-table" class="md-nav__link">
<span class="md-ellipsis">
IPv6 routing table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#route-preference" class="md-nav__link">
<span class="md-ellipsis">
Route Preference
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#source-protocol" class="md-nav__link">
<span class="md-ellipsis">
Source protocol
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../firewall/" class="md-nav__link">
<span class="md-ellipsis">
Firewall Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qos/" class="md-nav__link">
<span class="md-ellipsis">
Quality of Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../eth-counters/" class="md-nav__link">
<span class="md-ellipsis">
RMON Counters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tunnels/" class="md-nav__link">
<span class="md-ellipsis">
Tunneling (L2/L3)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../wifi/" class="md-nav__link">
<span class="md-ellipsis">
Wireless LAN (WiFi)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5">
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Services
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Services
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../discovery/" class="md-nav__link">
<span class="md-ellipsis">
Device Discovery
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhcp/" class="md-nav__link">
<span class="md-ellipsis">
DHCP Server
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6">
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
System
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
System
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../boot/" class="md-nav__link">
<span class="md-ellipsis">
Boot Procedure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../system/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Hardware Info &amp; Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../management/" class="md-nav__link">
<span class="md-ellipsis">
Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../syslog/" class="md-nav__link">
<span class="md-ellipsis">
Syslog Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../support/" class="md-nav__link">
<span class="md-ellipsis">
Support Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7">
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Scripting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Scripting
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../scripting/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-sysrepocfg/" class="md-nav__link">
<span class="md-ellipsis">
Legacy Scripting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-prod/" class="md-nav__link">
<span class="md-ellipsis">
Production Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-netconf/" class="md-nav__link">
<span class="md-ellipsis">
With NETCONF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-restconf/" class="md-nav__link">
<span class="md-ellipsis">
With RESTCONF
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8">
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Developer's Corner
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Developer's Corner
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../branding/" class="md-nav__link">
<span class="md-ellipsis">
Branding &amp; Releases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../developers-guide/" class="md-nav__link">
<span class="md-ellipsis">
Developer's Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../override-package/" class="md-nav__link">
<span class="md-ellipsis">
Developing with Buildroot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../netboot/" class="md-nav__link">
<span class="md-ellipsis">
Netboot HowTo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../testing/" class="md-nav__link">
<span class="md-ellipsis">
Regression Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../test-arch/" class="md-nav__link">
<span class="md-ellipsis">
Test System Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../virtual/" class="md-nav__link">
<span class="md-ellipsis">
Virtual Environments
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vpd/" class="md-nav__link">
<span class="md-ellipsis">
Vital Product Data (VPD)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../license/" class="md-nav__link">
<span class="md-ellipsis">
Origin &amp; Licensing
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#interface-lego" class="md-nav__link">
<span class="md-ellipsis">
Interface LEGO®
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#data-plane" class="md-nav__link">
<span class="md-ellipsis">
Data Plane
</span>
</a>
<nav class="md-nav" aria-label="Data Plane">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#general" class="md-nav__link">
<span class="md-ellipsis">
General
</span>
</a>
<nav class="md-nav" aria-label="General">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#fixed-custom-mac" class="md-nav__link">
<span class="md-ellipsis">
Fixed custom MAC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#chassis-mac" class="md-nav__link">
<span class="md-ellipsis">
Chassis MAC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#chassis-mac-with-offset" class="md-nav__link">
<span class="md-ellipsis">
Chassis MAC, with offset
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#bridging" class="md-nav__link">
<span class="md-ellipsis">
Bridging
</span>
</a>
<nav class="md-nav" aria-label="Bridging">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mac-bridge" class="md-nav__link">
<span class="md-ellipsis">
MAC Bridge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#vlan-filtering-bridge" class="md-nav__link">
<span class="md-ellipsis">
VLAN Filtering Bridge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#multicast-filtering-and-snooping" class="md-nav__link">
<span class="md-ellipsis">
Multicast Filtering and Snooping
</span>
</a>
<nav class="md-nav" aria-label="Multicast Filtering and Snooping">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#terminology-abbreviations" class="md-nav__link">
<span class="md-ellipsis">
Terminology &amp; Abbreviations
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#forwarding-of-ieee-reserved-group-addresses" class="md-nav__link">
<span class="md-ellipsis">
Forwarding of IEEE Reserved Group Addresses
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#link-aggregation" class="md-nav__link">
<span class="md-ellipsis">
Link Aggregation
</span>
</a>
<nav class="md-nav" aria-label="Link Aggregation">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#basic-configuration" class="md-nav__link">
<span class="md-ellipsis">
Basic Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lacp-configuration" class="md-nav__link">
<span class="md-ellipsis">
LACP Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#link-flapping" class="md-nav__link">
<span class="md-ellipsis">
Link Flapping
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operational-status-overview" class="md-nav__link">
<span class="md-ellipsis">
Operational Status, Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operational-status-detail" class="md-nav__link">
<span class="md-ellipsis">
Operational Status, Detail
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-switch-uplink-with-lacp" class="md-nav__link">
<span class="md-ellipsis">
Example: Switch Uplink with LACP
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#vlan-interfaces" class="md-nav__link">
<span class="md-ellipsis">
VLAN Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#physical-ethernet-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Physical Ethernet Interfaces
</span>
</a>
<nav class="md-nav" aria-label="Physical Ethernet Interfaces">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ethernet-settings-and-status" class="md-nav__link">
<span class="md-ellipsis">
Ethernet Settings and Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#configuring-fixed-speed-and-duplex" class="md-nav__link">
<span class="md-ellipsis">
Configuring fixed speed and duplex
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ethernet-statistics" class="md-nav__link">
<span class="md-ellipsis">
Ethernet statistics
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#veth-pairs" class="md-nav__link">
<span class="md-ellipsis">
VETH Pairs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#management-plane" class="md-nav__link">
<span class="md-ellipsis">
Management Plane
</span>
</a>
<nav class="md-nav" aria-label="Management Plane">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
IPv4 Address Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
IPv6 Address Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#examples" class="md-nav__link">
<span class="md-ellipsis">
Examples
</span>
</a>
<nav class="md-nav" aria-label="Examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#static-and-link-local-ipv4-addresses" class="md-nav__link">
<span class="md-ellipsis">
Static and link-local IPv4 addresses
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#use-of-dhcp-for-ipv4-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
Use of DHCP for IPv4 address assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#use-of-dhcpv6-for-ipv6-address-assignment" class="md-nav__link">
<span class="md-ellipsis">
Use of DHCPv6 for IPv6 address assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#disabling-ipv6-link-local-addresses" class="md-nav__link">
<span class="md-ellipsis">
Disabling IPv6 link-local address(es)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#static-ipv6-address" class="md-nav__link">
<span class="md-ellipsis">
Static IPv6 address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#stateless-auto-configuration-of-global-ipv6-address" class="md-nav__link">
<span class="md-ellipsis">
Stateless Auto-configuration of Global IPv6 Address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#random-link-identifiers-for-ipv6-stateless-autoconfiguration" class="md-nav__link">
<span class="md-ellipsis">
Random Link Identifiers for IPv6 Stateless Autoconfiguration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ipv4-forwarding" class="md-nav__link">
<span class="md-ellipsis">
IPv4 forwarding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-forwarding" class="md-nav__link">
<span class="md-ellipsis">
IPv6 forwarding
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#routing-support" class="md-nav__link">
<span class="md-ellipsis">
Routing support
</span>
</a>
<nav class="md-nav" aria-label="Routing support">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-static-routes" class="md-nav__link">
<span class="md-ellipsis">
IPv4 Static routes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-static-routes" class="md-nav__link">
<span class="md-ellipsis">
IPv6 Static routes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospfv2-routing" class="md-nav__link">
<span class="md-ellipsis">
OSPFv2 Routing
</span>
</a>
<nav class="md-nav" aria-label="OSPFv2 Routing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ospf-area-types" class="md-nav__link">
<span class="md-ellipsis">
OSPF area types
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bidirectional-forwarding-detection-bfd" class="md-nav__link">
<span class="md-ellipsis">
Bidirectional Forwarding Detection (BFD)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospf-interface-settings" class="md-nav__link">
<span class="md-ellipsis">
OSPF interface settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ospf-global-settings" class="md-nav__link">
<span class="md-ellipsis">
OSPF global settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#debug-ospfv2" class="md-nav__link">
<span class="md-ellipsis">
Debug OSPFv2
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#view-routing-table" class="md-nav__link">
<span class="md-ellipsis">
View routing table
</span>
</a>
<nav class="md-nav" aria-label="View routing table">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ipv4-routing-table" class="md-nav__link">
<span class="md-ellipsis">
IPv4 routing table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ipv6-routing-table" class="md-nav__link">
<span class="md-ellipsis">
IPv6 routing table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#route-preference" class="md-nav__link">
<span class="md-ellipsis">
Route Preference
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#source-protocol" class="md-nav__link">
<span class="md-ellipsis">
Source protocol
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<nav class="md-path" aria-label="Navigation">
<ol class="md-path__list">
<li class="md-path__item">
<a href=".." class="md-path__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-path__item">
<a href="./" class="md-path__link">
<span class="md-ellipsis">
Networking
</span>
</a>
</li>
</ol>
</nav>
<article class="md-content__inner md-typeset">
<h1 id="network-configuration">Network Configuration<a class="headerlink" href="#network-configuration" title="Permanent link"></a></h1>
<p>Infix aims to support all Linux Networking constructs. The YANG models
used to describe the system are chosen to fit well and leverage the
underlying Linux kernel's capabilities. The <a href="https://www.rfc-editor.org/rfc/rfc8343">ietf-interfaces.yang</a>
model forms the base, extended with <a href="https://www.rfc-editor.org/rfc/rfc8344">ietf-ip.yang</a> and other layer-3
IETF models. The layer-2 bridge and aggregate models are defined by
Infix to exploit the unique features not available in IEEE models.</p>
<div class="admonition tip">
<p class="admonition-title">Important</p>
<p>When issuing <code>leave</code> to activate your changes, remember to also save
your settings, <code>copy running-config startup-config</code>. See the <a href="../cli/introduction/">CLI
Introduction</a> for a background.</p>
</div>
<h2 id="interface-lego">Interface LEGO®<a class="headerlink" href="#interface-lego" title="Permanent link"></a></h2>
<p>The network building blocks available in Linux are akin to the popular
LEGO® bricks.</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/lego.svg" data-desc-position="bottom"><img alt="Linux Networking Blocks" src="../img/lego.svg"></a></p>
<p>There are two types of relationships that can link two blocks together:</p>
<ol>
<li><strong>Lower-to-upper</strong>: Visually represented by an extruding square
connected upwards to a square socket. An interface <em>can only have
a single</em> lower-to-upper relationship, i.e., it can be attached to
a single upper interface like a bridge or a LAG. In <code>iproute2</code>
parlance, this corresponds to the interface's <code>master</code> setting</li>
<li><strong>Upper-to-lower</strong>: Visually represented by an extruding semicircle
connected downwards to a semicircle socket. The lower interface in
these relationships <em>accepts multiple</em> upper-to-lower relationships
from different upper blocks. E.g., multiple VLANs and IP address
blocks can be connected to the same lower interface</li>
</ol>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/lego-relations.svg" data-desc-position="bottom"><img alt="Stacking order dependencies" src="../img/lego-relations.svg"></a></p>
<p>An interface may simultaneously have a <em>lower-to-upper</em> relation to some
other interface, and be the target of one or more <em>upper-to-lower</em>
relationships. It is valid, for example, for a physical port to be
attached to a bridge, but also have a VLAN interface stacked on top of
it. In this example, traffic assigned to the VLAN in question would be
diverted to the VLAN interface before entering the bridge, while all
other traffic would be bridged as usual.</p>
<table>
<thead>
<tr>
<th><strong>Type</strong></th>
<th><strong>Yang Model</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>bridge</td>
<td>infix-if-bridge</td>
<td>SW implementation of an IEEE 802.1Q bridge</td>
</tr>
<tr>
<td>ip</td>
<td>ietf-ip, infix-ip</td>
<td>IP address to the subordinate interface</td>
</tr>
<tr>
<td>vlan</td>
<td>infix-if-vlan</td>
<td>Capture all traffic belonging to a specific 802.1Q VID</td>
</tr>
<tr>
<td>lag</td>
<td>infix-if-lag</td>
<td>Link aggregation, static and IEEE 802.3ad (LACP)</td>
</tr>
<tr>
<td>lo</td>
<td>ietf-interfaces</td>
<td>Software loopback interface</td>
</tr>
<tr>
<td>eth</td>
<td>ieee802-ethernet-interface</td>
<td>Physical Ethernet device/port.</td>
</tr>
<tr>
<td></td>
<td>infix-ethernet-interface</td>
<td></td>
</tr>
<tr>
<td>veth</td>
<td>infix-if-veth</td>
<td>Virtual Ethernet pair, typically one end is in a container</td>
</tr>
<tr>
<td><em>common</em></td>
<td>ietf-interfaces,</td>
<td>Properties common to all interface types</td>
</tr>
<tr>
<td></td>
<td>infix-interfaces</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="data-plane">Data Plane<a class="headerlink" href="#data-plane" title="Permanent link"></a></h2>
<p>The blocks you choose, and how you connect them, defines your data plane.
Here we see an example of how to bridge a virtual port with a physical
LAN.</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/dataplane.svg" data-desc-position="bottom"><img alt="Example of a 4-port switch with a link aggregate and a VETH pair to a container" src="../img/dataplane.svg"></a></p>
<p>Depending on the (optional) VLAN filtering of the bridge, the container
may have full or limited connectivity with outside ports, as well as the
internal CPU.</p>
<p>In fact the virtual port connected to the bridge can be member of
several VLANs, with each VLAN being an interface with an IP address
inside the container.</p>
<p>Thanks to Linux, and technologies like switchdev, that allow you to
split a switching fabric into unique (isolated) ports, the full
separation and virtualization of all Ethernet layer properties are
possible to share with a container. Meaning, all the building blocks
used on the left hand side can also be used freely on the right hand
side as well.</p>
<h3 id="general">General<a class="headerlink" href="#general" title="Permanent link"></a></h3>
<p>General interface settings include <code>type</code>, <code>enable</code>, custom MAC address,
and text <code>description</code>. Other settings have their own sections, below.</p>
<p>The <code>type</code> is important to set when configuring devices remotely because
unlike the CLI, a NETCONF or RESTCONF session cannot guess the interface
type for you. The operating system provides an override of the
available interface types.</p>
<p>An <code>enabled</code> interface can be inspected using the operational datastore,
nodes <code>admin-state</code> and <code>oper-state</code> show the status, . Possible values
are listed in the YANG model.</p>
<p>The <code>custom-phys-address</code> can be used to set an interface's MAC address.
This is an extension to the ietf-interfaces YANG model, which defines
<code>phys-address</code> as read-only<sup id="fnref:4"><a class="footnote-ref" href="#fn:4">4</a></sup>. The following shows the different
configuration options.</p>
<p>The <code>description</code> is saved as Linux <code>ifalias</code> on an interface. It is a
free-form string, useful for describing purpose or just adding comments
for remote debugging, e.g., using the operational datastore.</p>
<div class="admonition warning">
<p class="admonition-title">Caution</p>
<p>There is no validation or safety checks performed by the system when
using <code>custom-phys-address</code>. In particular the <code>offset</code> variant can
be dangerous to use -- pay attention to the meaning of bits in the
upper-most octet: local bit, multicast/group, etc.</p>
</div>
<h4 id="fixed-custom-mac">Fixed custom MAC<a class="headerlink" href="#fixed-custom-mac" title="Permanent link"></a></h4>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>admin@example:/config/&gt; edit interface veth0a
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>admin@example:/config/interface/veth0a/&gt; set custom-phys-address static 00:ab:00:11:22:33
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>=&gt; 00:ab:00:11:22:33
</code></pre></div>
<h4 id="chassis-mac">Chassis MAC<a class="headerlink" href="#chassis-mac" title="Permanent link"></a></h4>
<p>Chassis MAC, sometimes also referred to as base MAC. In these two
examples it is <code>00:53:00:c0:ff:ee</code>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>admin@example:/config/&gt; edit interface veth0a
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>admin@example:/config/interface/veth0a/&gt; set custom-phys-address chassis
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>=&gt; 00:53:00:c0:ff:ee
</code></pre></div>
<h4 id="chassis-mac-with-offset">Chassis MAC, with offset<a class="headerlink" href="#chassis-mac-with-offset" title="Permanent link"></a></h4>
<p>When constructing a derived address it is recommended to set the locally
administered bit. Same chassis MAC as before.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>admin@example:/config/&gt; edit interface veth0a
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>admin@example:/config/interface/veth0a/&gt; set custom-phys-address chassis offset 02:00:00:00:00:02
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a>=&gt; 02:53:00:c0:ff:f0
</code></pre></div>
<h3 id="bridging">Bridging<a class="headerlink" href="#bridging" title="Permanent link"></a></h3>
<p>This is the most central part of the system. A bridge is a switch, and
a switch is a bridge. In Linux, setting up a bridge with ports
connected to physical switch fabric, means you manage the actual switch
fabric!</p>
<h4 id="mac-bridge">MAC Bridge<a class="headerlink" href="#mac-bridge" title="Permanent link"></a></h4>
<p>In Infix ports are by default not switch ports, unless the customer
specific factory config sets it up this way. To enable switching, with
offloading if you have a switch chipset, between ports you create a
bridge and then add ports to that bridge. Like this:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>admin@example:/&gt; configure
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>admin@example:/config/interface/br0/&gt; up
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>admin@example:/config/&gt; set interface eth0 bridge-port bridge br0
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>admin@example:/config/&gt; set interface eth1 bridge-port bridge br0
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>admin@example:/config/&gt; leave
</code></pre></div>
<p>Here we add two ports to bridge <code>br0</code>: <code>eth0</code> and <code>eth1</code>.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The CLI has several built-in helpers governed by convention. E.g.,
naming bridges <code>brN</code>, where <code>N</code> is a number, the type is <em>inferred</em>
automatically and unlocks all bridge features. Other conventions are
<code>vethNA</code>, where <code>N</code> is a number and <code>A</code> is a letter ('a' for access
port and 'b' for bridge side is common), and <code>ethN.M</code> for VLAN M on
top of <code>ethN</code>, or <code>dockerN</code> for a IP masquerading container bridge.</p>
<p>Note, this inference only works with the CLI, configuring networking
over NETCONF or RESTCONF requires setting the type explicitly.</p>
</div>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/mac-bridge.svg" data-desc-position="bottom"><img alt="A MAC bridge with two ports" src="../img/mac-bridge.svg"></a></p>
<p>It is possible to create multiple MAC bridges, however, it is
currently<sup id="fnref:5"><a class="footnote-ref" href="#fn:5">5</a></sup> <em>not recommended</em> to use more than one MAC bridge on
products with Marvell LinkStreet switching ASICs. A VLAN filtering
bridge should be used instead.</p>
<h4 id="vlan-filtering-bridge">VLAN Filtering Bridge<a class="headerlink" href="#vlan-filtering-bridge" title="Permanent link"></a></h4>
<p>By default bridges in Linux do not filter based on VLAN tags. This can
be enabled when creating a bridge by adding a port to a VLAN as a tagged
or untagged member. Use the port default VID (PVID) setting to control
VLAN association for traffic ingressing a port untagged (default PVID:
1).</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>admin@example:/config/interface/br0/&gt; up
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>admin@example:/config/&gt; set interface eth0 bridge-port bridge br0
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>admin@example:/config/&gt; set interface eth0 bridge-port pvid 10
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>admin@example:/config/&gt; set interface eth1 bridge-port bridge br0
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>admin@example:/config/&gt; set interface eth1 bridge-port pvid 20
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a>admin@example:/config/interface/br0/&gt; set bridge vlans vlan 10 untagged eth0
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a>admin@example:/config/interface/br0/&gt; set bridge vlans vlan 20 untagged eth1
</code></pre></div>
<p>This sets <code>eth0</code> as an untagged member of VLAN 10 and <code>eth1</code> as an
untagged member of VLAN 20. Switching between these ports is thus
prohibited.</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/vlan-bridge.svg" data-desc-position="bottom"><img alt="A VLAN bridge with two VLANs" src="../img/vlan-bridge.svg"></a></p>
<p>To terminate a VLAN in the switch itself, either for switch management
or for routing, the bridge must become a (tagged) member of the VLAN.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>admin@example:/config/interface/br0/&gt; set bridge vlans vlan 10 tagged br0
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>admin@example:/config/interface/br0/&gt; set bridge vlans vlan 20 tagged br0
</code></pre></div>
<p>To route or to manage via a VLAN, a VLAN interface needs to be created
on top of the bridge, see section <a href="#vlan-interfaces">VLAN Interfaces</a>
below for more on this topic.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>In some use-cases only a single management VLAN on the bridge is used.
For the example above, if the bridge itself is an untagged member only
in VLAN 10, IP addresses can be set directly on the bridge without the
need for dedicated VLAN interfaces on top of the bridge.</p>
</div>
<h4 id="multicast-filtering-and-snooping">Multicast Filtering and Snooping<a class="headerlink" href="#multicast-filtering-and-snooping" title="Permanent link"></a></h4>
<p>Multicast filtering in the bridge is handled by the bridge itself. It
can filter both IP multicast and MAC multicast. For IP multicast it
also supports "snooping", i.e., IGMP and MLD, to automatically reduce
the broadcast effects of multicast. See the next section for a summary
of the <a href="#terminology-abbreviations">terminology used</a>.</p>
<div class="admonition tip">
<p class="admonition-title">Important</p>
<p>Currently there is no way to just enable multicast filtering without
also enabling snooping. This may change in the future, in which case
a <code>filtering</code> enabled setting will be made available along with the
existing <code>snooping</code> setting.</p>
</div>
<p>When creating your bridge you must decide if you need a VLAN filtering
bridge or a plain bridge (see previous section). Multicast filtering is
supported for either, but take note that it must be enabled and set up
per VLAN when VLAN filtering is enabled -- there are no global multicast
settings in this operating mode.</p>
<p>In the following example we have a regular 8-port bridge without VLAN
filtering. We focus on the multicast specific settings:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>admin@example:/&gt; configure
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>admin@example:/config/interface/br0/&gt; set bridge multicast snooping
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a>admin@example:/config/interface/br0/&gt; set ipv4 address 192.168.2.1 prefix-length 24
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a>admin@example:/config/interface/br0/&gt; leave
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a>admin@example:/&gt; copy running-config startup-config
</code></pre></div>
<p>Here we enable snooping and set a static IPv4 address so that the switch
can take part in IGMP querier elections. (MLD querier election
currently not supported.) We can inspect the current state:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>admin@example:/&gt; show ip multicast
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>Multicast Overview
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>Query Interval (default): 125 sec
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>Router Timeout : 255
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a>Fast Leave Ports :
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a>Router Ports :
<a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a>Flood Ports : e0, e1, e2, e3, e4, e5, e6, e7
<a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a>
<a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a>Interface VID Querier State Interval Timeout Ver
<a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a>br0 192.168.2.1 Up 125 None 3
<a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a>
<a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a>Bridge VID Multicast Group Ports
<a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a>br0 224.1.1.1 e3, e2
<a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a>br0 ff02::6a br0
</code></pre></div>
<p>This is a rather small LAN, so our bridge has already become the elected
IGMP querier. We see it is ours because the timeout is <code>None</code>, and we
recognize the IP address the system has detected, as ours. We can also
see two ports that have joined the same IPv4 multicast group, 224.1.1.1,
and one join from the system itself for the IPv6 group ff02::6a.</p>
<p>Now, let us see what happens when we add another bridge, this time with
VLAN filtering enabled. We skip the boring parts about how to move
ports e4-e7 to <code>br1</code> and assign them to VLANs, and again, focus on the
multicast bits only:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>admin@example:/&gt; configure
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>admin@example:/config/&gt; edit interface br1
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>admin@example:/config/interface/br1/&gt; set bridge vlans vlan 1 multicast snooping
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>admin@example:/config/interface/br1/&gt; set bridge vlans vlan 2 multicast snooping
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>admin@example:/config/interface/br1/&gt; leave
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a>admin@example:/&gt; copy running-config startup-config
</code></pre></div>
<p>Let us see what we get:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>admin@example:/&gt; show ip multicast
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>Multicast Overview
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a>Query Interval (default): 125 sec
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a>Router Timeout : 255
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a>Fast Leave Ports : e5
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a>Router Ports : e1, e2, e5, e6, e7
<a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a>Flood Ports : e1, e2, e3, e4, e5, e6, e7, e8
<a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a>
<a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a>Interface VID Querier State Interval Timeout Ver
<a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a>br0 192.168.2.1 Up 125 None 3
<a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a>br1 1 0.0.0.0 Up 125 None 3
<a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a>br1 2 0.0.0.0 Up 125 None 3
<a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a>
<a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a>Bridge VID Multicast Group Ports
<a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a>br0 224.1.1.1 e2
<a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a>br0 ff02::fb br0
<a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a>br0 ff02::6a br0
<a id="__codelineno-9-18" name="__codelineno-9-18" href="#__codelineno-9-18"></a>br0 ff02::1:ff00:0 br0
<a id="__codelineno-9-19" name="__codelineno-9-19" href="#__codelineno-9-19"></a>br1 1 224.1.1.1 e5
<a id="__codelineno-9-20" name="__codelineno-9-20" href="#__codelineno-9-20"></a>br1 2 224.1.1.1 e7
<a id="__codelineno-9-21" name="__codelineno-9-21" href="#__codelineno-9-21"></a>br1 1 ff02::fb br1
<a id="__codelineno-9-22" name="__codelineno-9-22" href="#__codelineno-9-22"></a>br1 1 ff02::1:ff00:0 br1
</code></pre></div>
<p>In this setup we have a lot more going on. Multiple multicast router
ports have been detected, and behind the scenes someone has also added
an IGMP/MLD fast-leave port.</p>
<h5 id="terminology-abbreviations">Terminology &amp; Abbreviations<a class="headerlink" href="#terminology-abbreviations" title="Permanent link"></a></h5>
<ul>
<li><strong>IGMP</strong>: Internet Group Membership Protocol, multicast subscription
for IPv4, for details see <a href="https://www.rfc-editor.org/rfc/rfc3376.html">RFC3376</a></li>
<li><strong>MLD</strong>: Multicast Listener Discovery (Protocol), multicast
subscription for IPv6, for details see <a href="https://www.rfc-editor.org/rfc/rfc3810.html">RFC3810</a></li>
<li><strong>Unknown/Unregistered multicast</strong>: multicast groups that are <em>not</em>
in the multicast forwarding database (MDB)</li>
<li><strong>Known/Registered multicast</strong>: multicast groups that <em>are</em> in the
multicast forwarding database (MDB)</li>
<li><strong>MDB</strong>: the multicast forwarding database, consists of filters for
multicast groups, directing where multicast is allowed to egress. A
filter entry consists of a group and a port list. The bridge filters
with a unique database per VLAN, in the same was as the unicast FDB</li>
<li><strong>Join/Leave</strong>: the terminology used in earlier versions of the two
protocols to subscribe and unsubscribe to a multicast group. For
more information, see <em>Membership Report</em></li>
<li><strong>Membership Report</strong> A membership report is sent by end-devices and
forwarded by switches to the elected querier on the LAN. They
consist of multiple "join" and "leave" operations on groups. They
can also, per group, list which senders to allow or block. Switches
usually only support the group subscription, and even more common
also only support filtering on the MAC level<sup id="fnref:3"><a class="footnote-ref" href="#fn:3">3</a></sup></li>
<li><strong>Querier election</strong>: the process of determining who is the elected
IGMP/MLD querier on a LAN. Lowest numerical IP address wins, the
special address 0.0.0.0 (proxy querier) never wins</li>
<li><strong>Proxy querier</strong>: when no better querier exists on a LAN, one or
more devices can send proxy queries with source address 0.0.0.0 (or
:: for IPv6). See <strong>Query Interval</strong>, below, why this is a good
thing</li>
<li><strong>Query interval</strong>: the time in seconds between two queries from an
IGMP/MLD querier. It is not uncommon that end-devices do not send
their membership reports unless they first hear a query</li>
<li><strong>Fast Leave</strong>: set on a bridge port to ensure multicast is pruned as
quickly as possible when a "leave" membership report is received. In
effect, this option marks the port as directly connected to an
end-device. When not set (default), a query with timeout is first
sent to ensure no unintentional loss of multicast is incurred</li>
<li><strong>Router port</strong>: can be both configured statically and detected at
runtime based on connected devices, usually multicast routers. On
a router port <em>all</em> multicast is forwarded, both known and unknown</li>
<li><strong>Flood port</strong>: set on a bridge port (default: enabled) to ensure
all <em>unknown</em> multicast is forwarded</li>
<li><strong>Router timeout</strong>: the time in seconds until a querier is deemed to
have been lost and another device (switch/router) takes over. In the
tables shown above, a <em>None</em> timeout is declared when the current
device is the active querier</li>
</ul>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The reason why multicast flooding is enabled by default is to ensure
safe co-existence with MAC multicast, which is common in industrial
networks. It also allows end devices that do not know of IGMP/MLD to
communicate over multicast as long as the group they have chosen is
not used by other IGMP/MLD aware devices on the LAN.</p>
<p>As soon as an IGMP/MLD membership report to "join" a group is received
the group is added to the kernel MDB and forwarding to other ports
stop. The only exception to this rule is multicast router ports.</p>
<p>If your MAC multicast forwarding is not working properly, it may be
because an IP multicast group maps to the same MAC address. Please
see <a href="https://www.rfc-editor.org/rfc/rfc1112.html">RFC 1112</a> for details. Use static multicast router
ports, or static multicast MAC filters, to mitigate.</p>
</div>
<h4 id="forwarding-of-ieee-reserved-group-addresses">Forwarding of IEEE Reserved Group Addresses<a class="headerlink" href="#forwarding-of-ieee-reserved-group-addresses" title="Permanent link"></a></h4>
<p>Addresses in the range <code>01:80:C2:00:00:0X</code> are used by various bridge
signaling protocols, and are not forwarded by default. Still, it is
sometimes useful to let the bridge forward such packets, this can be
done by specifying protocol names or the last address <em>nibble</em> as
decimal value <code>0..15</code>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>admin@example:/config/&gt; edit interface br0 bridge
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>admin@example:/config/interface/br0/bridge/&gt; set ieee-group-forward # Tap the ? ley for alternatives
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a> [0..15] List of IEEE link-local protocols to forward, e.g., STP, LLDP
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a> dot1x 802.1X Port-Based Network Access Control.
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a> lacp 802.3 Slow Protocols, e.g., LACP.
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a> lldp 802.1AB Link Layer Discovery Protocol (LLDP).
<a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a> stp Spanning Tree (STP/RSPT/MSTP).
<a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a>admin@example:/config/interface/br0/bridge/&gt; set ieee-group-forward
</code></pre></div>
<p>The following example configures bridge <em>br0</em> to forward LLDP packets.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>admin@example:/config/interface/br0/bridge/&gt; set ieee-group-forward lldp
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>admin@example:/config/interface/br0/bridge/&gt;
</code></pre></div>
<h3 id="link-aggregation">Link Aggregation<a class="headerlink" href="#link-aggregation" title="Permanent link"></a></h3>
<p>A link aggregate, or <em>lag</em>, allows multiple physical interfaces to be
combined into a single logical interface, providing increased bandwidth
(in some cases) and redundancy (primarily). Two modes of qualifying lag
member ports are available:</p>
<ol>
<li><strong>static</strong>: Active members selected based on link status (carrier)</li>
<li><strong>lacp:</strong> IEEE 802.3ad Link Aggregation Control Protocol</li>
</ol>
<p>In LACP mode, LACPDUs are exchanged by the link partners to qualify each
lag member, while in static mode only carrier is used. This additional
exchange in LACP ensures traffic can be forwarded in both directions.</p>
<p>Traffic distribution, for both modes, across the active lag member ports
is determined by the hash policy<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>. It uses an XOR of the source,
destination MAC addresses and the EtherType field. This, IEEE
802.3ad-compliant, algorithm will place all traffic to a particular
network peer on the same link. Meaning there is no increased bandwidth
for communication between two specific devices.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Similar to other interface types, naming your interface <code>lagN</code>, where
<code>N</code> is a number, allows the CLI to automatically infer the interface
type as LAG.</p>
</div>
<h4 id="basic-configuration">Basic Configuration<a class="headerlink" href="#basic-configuration" title="Permanent link"></a></h4>
<p>Creating a link aggregate interface and adding member ports:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>admin@example:/&gt; configure
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>admin@example:/config/&gt; edit interface lag0
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>admin@example:/config/interface/lag0/&gt; set lag mode static
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>admin@example:/config/interface/lag0/&gt; end
<a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a>admin@example:/config/&gt; set interface eth7 lag-port lag lag0
<a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a>admin@example:/config/&gt; set interface eth8 lag-port lag lag0
<a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a>admin@example:/config/&gt; leave
</code></pre></div>
<p>A static lag responds only to link (carrier) changes of member ports.
E.g., in this example egressing traffic is continuously distributed over
the two links until link down on one link is detected, triggering all
traffic to be steered to the sole remaining link.</p>
<h4 id="lacp-configuration">LACP Configuration<a class="headerlink" href="#lacp-configuration" title="Permanent link"></a></h4>
<p>LACP mode provides dynamic negotiation of the link aggregate. Key
settings include:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>admin@example:/&gt; configure
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>admin@example:/config/&gt; edit interface lag0
<a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>admin@example:/config/interface/lag0/&gt; set lag mode lacp
<a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a>admin@example:/config/interface/lag0/&gt; set lag lacp mode passive
<a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a>admin@example:/config/interface/lag0/&gt; set lag lacp rate fast
<a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a>admin@example:/config/interface/lag0/&gt; set lag lacp system-priority 100
</code></pre></div>
<p>LACP mode supports two operational modes:</p>
<ul>
<li><strong>active:</strong> Initiates negotiation by sending LACPDUs (default)</li>
<li><strong>passive:</strong> Waits for peer to initiate negotiation</li>
</ul>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>At least one end of the link must be in active mode for negotiation to occur.</p>
</div>
<p>The LACP rate setting controls protocol timing:</p>
<ul>
<li><strong>slow:</strong> LACPDUs sent every 30 seconds, with 90 second timeout (default)</li>
<li><strong>fast:</strong> LACPDUs sent every second, with 3 second timeout</li>
</ul>
<h4 id="link-flapping">Link Flapping<a class="headerlink" href="#link-flapping" title="Permanent link"></a></h4>
<p>To protect against link flapping, debounce timers can be configured to
delay link qualification. Usually only the <code>up</code> delay is needed:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>admin@example:/config/interface/lag0/lag/link-monitor/&gt; edit debounce
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; set up 500
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; set down 200
</code></pre></div>
<h4 id="operational-status-overview">Operational Status, Overview<a class="headerlink" href="#operational-status-overview" title="Permanent link"></a></h4>
<p>Like other interfaces, link aggregates are also available in the general
interfaces overview in the CLI admin-exec context. Here is the above
static mode aggregate:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> ipv6 ::1/128 (static)
<a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a>.
<a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a>.
<a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a>.
<a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a>lag0 lag UP static: balance-xor, hash: layer2
<a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a>│ ethernet UP 00:a0:85:00:02:00
<a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a>├ eth7 lag ACTIVE
<a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a>└ eth8 lag ACTIVE
</code></pre></div>
<p>Same aggregate, but in LACP mode:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a> ipv6 ::1/128 (static)
<a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a>.
<a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a>.
<a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a>.
<a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a>lag0 lag UP lacp: active, rate: fast (1s), hash: layer2
<a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a>│ ethernet UP 00:a0:85:00:02:00
<a id="__codelineno-16-11" name="__codelineno-16-11" href="#__codelineno-16-11"></a>├ eth7 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
<a id="__codelineno-16-12" name="__codelineno-16-12" href="#__codelineno-16-12"></a>└ eth8 lag ACTIVE active, short_timeout, aggregating, in_sync, collecting, distributing
</code></pre></div>
<h4 id="operational-status-detail">Operational Status, Detail<a class="headerlink" href="#operational-status-detail" title="Permanent link"></a></h4>
<p>In addition to basic status shown in the interface overview, detailed
LAG status can be inspected:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>admin@example:/&gt; show interface lag0
<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>name : lag0
<a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a>index : 25
<a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a>mtu : 1500
<a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a>operational status : up
<a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a>physical address : 00:a0:85:00:02:00
<a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a>lag mode : static
<a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a>lag type : balance-xor
<a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a>lag hash : layer2
<a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a>link debounce up : 0 msec
<a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a>link debounce down : 0 msec
<a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a>ipv4 addresses :
<a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a>ipv6 addresses :
<a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a>in-octets : 0
<a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a>out-octets : 2142
</code></pre></div>
<p>Same aggregate, but in LACP mode:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>admin@example:/&gt; show interface lag0
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>name : lag0
<a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a>index : 24
<a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a>mtu : 1500
<a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a>operational status : up
<a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a>physical address : 00:a0:85:00:02:00
<a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a>lag mode : lacp
<a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a>lag hash : layer2
<a id="__codelineno-18-9" name="__codelineno-18-9" href="#__codelineno-18-9"></a>lacp mode : active
<a id="__codelineno-18-10" name="__codelineno-18-10" href="#__codelineno-18-10"></a>lacp rate : fast (1s)
<a id="__codelineno-18-11" name="__codelineno-18-11" href="#__codelineno-18-11"></a>lacp aggregate id : 1
<a id="__codelineno-18-12" name="__codelineno-18-12" href="#__codelineno-18-12"></a>lacp system priority: 65535
<a id="__codelineno-18-13" name="__codelineno-18-13" href="#__codelineno-18-13"></a>lacp actor key : 9
<a id="__codelineno-18-14" name="__codelineno-18-14" href="#__codelineno-18-14"></a>lacp partner key : 9
<a id="__codelineno-18-15" name="__codelineno-18-15" href="#__codelineno-18-15"></a>lacp partner mac : 00:a0:85:00:03:00
<a id="__codelineno-18-16" name="__codelineno-18-16" href="#__codelineno-18-16"></a>link debounce up : 0 msec
<a id="__codelineno-18-17" name="__codelineno-18-17" href="#__codelineno-18-17"></a>link debounce down : 0 msec
<a id="__codelineno-18-18" name="__codelineno-18-18" href="#__codelineno-18-18"></a>ipv4 addresses :
<a id="__codelineno-18-19" name="__codelineno-18-19" href="#__codelineno-18-19"></a>ipv6 addresses :
<a id="__codelineno-18-20" name="__codelineno-18-20" href="#__codelineno-18-20"></a>in-octets : 100892
<a id="__codelineno-18-21" name="__codelineno-18-21" href="#__codelineno-18-21"></a>out-octets : 111776
</code></pre></div>
<p>Member ports provide additional status information:</p>
<ul>
<li>Link failure counter: number of detected link failures</li>
<li>LACP state flags: various states of LACP negotiation:</li>
<li><code>active</code>: port is actively sending LACPDUs</li>
<li><code>short_timeout</code>: using fast rate (1s) vs. slow rate (30s)</li>
<li><code>aggregating</code>: port is allowed to aggregate in this LAG</li>
<li><code>in_sync</code>: port is synchronized with partner</li>
<li><code>collecting</code>: port is allowed to receive traffic</li>
<li><code>distributing</code>: port is allowed to send traffic</li>
<li><code>defaulted</code>: using default partner info (partner not responding)</li>
<li><code>expired</code>: partner info has expired (no LACPDUs received)</li>
<li>Aggregator ID: unique identifier for this LAG group</li>
<li>Actor state: LACP state flags for this port (local)</li>
<li>Partner state: LACP state flags from the remote port</li>
</ul>
<p>Example member port status:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>admin@example:/&gt; show interface eth7
<a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>name : eth7
<a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a>index : 8
<a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a>mtu : 1500
<a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a>operational status : up
<a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a>physical address : 00:a0:85:00:02:00
<a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a>lag member : lag0
<a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a>lag member state : active
<a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a>lacp aggregate id : 1
<a id="__codelineno-19-10" name="__codelineno-19-10" href="#__codelineno-19-10"></a>lacp actor state : active, short_timeout, aggregating, in_sync, collecting, distributing
<a id="__codelineno-19-11" name="__codelineno-19-11" href="#__codelineno-19-11"></a>lacp partner state : active, short_timeout, aggregating, in_sync, collecting, distributing
<a id="__codelineno-19-12" name="__codelineno-19-12" href="#__codelineno-19-12"></a>link failure count : 0
<a id="__codelineno-19-13" name="__codelineno-19-13" href="#__codelineno-19-13"></a>ipv4 addresses :
<a id="__codelineno-19-14" name="__codelineno-19-14" href="#__codelineno-19-14"></a>ipv6 addresses :
<a id="__codelineno-19-15" name="__codelineno-19-15" href="#__codelineno-19-15"></a>in-octets : 473244
<a id="__codelineno-19-16" name="__codelineno-19-16" href="#__codelineno-19-16"></a>out-octets : 499037
</code></pre></div>
<h4 id="example-switch-uplink-with-lacp">Example: Switch Uplink with LACP<a class="headerlink" href="#example-switch-uplink-with-lacp" title="Permanent link"></a></h4>
<p>LACP mode provides the most robust operation, automatically negotiating
the link aggregate and detecting configuration mismatches.</p>
<p>A common use case is connecting a switch to an upstream device:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>admin@example:/&gt; configure
<a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>admin@example:/config/&gt; edit interface lag0
<a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a>admin@example:/config/interface/lag0/&gt; set lag mode lacp
</code></pre></div>
<p>Enable fast LACP for quicker fail-over:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>admin@example:/config/interface/lag0/&gt; set lag lacp rate fast
</code></pre></div>
<p>Add uplink ports</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>admin@example:/config/interface/lag0/&gt; end
<a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a>admin@example:/config/&gt; set interface eth7 lag-port lag lag0
<a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a>admin@example:/config/&gt; set interface eth8 lag-port lag lag0
</code></pre></div>
<p>Enable protection against "link flapping".</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>admin@example:/config/interface/lag0/&gt; edit lag link-monitor
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a>admin@example:/config/interface/lag0/lag/link-monitor/&gt; edit debounce
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; set up 500
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; set down 200
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; top
</code></pre></div>
<p>Add to bridge for switching</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>admin@example:/config/interface/lag0/lag/link-monitor/debounce/&gt; end
<a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a>admin@example:/config/&gt; set interface lag0 bridge-port bridge br0
<a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a>admin@example:/config/&gt; leave
</code></pre></div>
<h3 id="vlan-interfaces">VLAN Interfaces<a class="headerlink" href="#vlan-interfaces" title="Permanent link"></a></h3>
<p>Creating a VLAN can be done in many ways. This section assumes VLAN
interfaces created atop another Linux interface. E.g., the VLAN
interfaces created on top of the Ethernet interface or bridge in the
picture below.</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/interface-vlan-variants.svg" data-desc-position="bottom"><img alt="VLAN interface on top of Ethernet or Bridge interfaces" src="../img/interface-vlan-variants.svg"></a></p>
<p>A VLAN interface is basically a filtering abstraction. When you run
<code>tcpdump</code> on a VLAN interface you will only see the frames matching the
VLAN ID of the interface, compared to <em>all</em> the VLAN IDs if you run
<code>tcpdump</code> on the lower-layer interface.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>admin@example:/&gt; configure
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a>admin@example:/config/&gt; edit interface eth0.20
<a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a>admin@example:/config/interface/eth0.20/&gt; show
<a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a>type vlan;
<a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a>vlan {
<a id="__codelineno-25-6" name="__codelineno-25-6" href="#__codelineno-25-6"></a> tag-type c-vlan;
<a id="__codelineno-25-7" name="__codelineno-25-7" href="#__codelineno-25-7"></a> id 20;
<a id="__codelineno-25-8" name="__codelineno-25-8" href="#__codelineno-25-8"></a> lower-layer-if eth0;
<a id="__codelineno-25-9" name="__codelineno-25-9" href="#__codelineno-25-9"></a>}
<a id="__codelineno-25-10" name="__codelineno-25-10" href="#__codelineno-25-10"></a>admin@example:/config/interface/eth0.20/&gt; leave
</code></pre></div>
<p>The example below assumes bridge br0 is already created, see <a href="#vlan-filtering-bridge">VLAN
Filtering Bridge</a>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>admin@example:/&gt; configure
<a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a>admin@example:/config/&gt; edit interface vlan10
<a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a>admin@example:/config/interface/vlan10/&gt; set vlan id 10
<a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a>admin@example:/config/interface/vlan10/&gt; set vlan lower-layer-if br0
<a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a>admin@example:/config/interface/vlan10/&gt; leave
</code></pre></div>
<p>As conventions, a VLAN interface for VID 20 on top of an Ethernet
interface <em>eth0</em> is named <em>eth0.20</em>, and a VLAN interface for VID 10 on
top of a bridge interface <em>br0</em> is named <em>vlan10</em>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you name your VLAN interface <code>foo0.N</code> or <code>vlanN</code>, where <code>N</code> is a
number, the CLI infers the interface type automatically.</p>
</div>
<h3 id="physical-ethernet-interfaces">Physical Ethernet Interfaces<a class="headerlink" href="#physical-ethernet-interfaces" title="Permanent link"></a></h3>
<h4 id="ethernet-settings-and-status">Ethernet Settings and Status<a class="headerlink" href="#ethernet-settings-and-status" title="Permanent link"></a></h4>
<p>Physical Ethernet interfaces provide low-level settings for speed/duplex as
well as packet status and <a href="#ethernet-statistics">statistics</a>.</p>
<p>By default, Ethernet interfaces defaults to auto-negotiating
speed/duplex modes, advertising all speed and duplex modes available.
In the example below, the switch would by default auto-negotiate speed
1 Gbit/s on port eth1 and 100 Mbit/s on port eth4, as those are the
highest speeds supported by H1 and H2 respectively.</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ethernet-autoneg.svg" data-desc-position="bottom"><img alt="4-port Gbit/s switch connected to Gbit and Fast Ethernet Hosts" src="../img/ethernet-autoneg.svg"></a></p>
<p>The speed and duplex status for the links can be listed as shown
below, assuming the link operational status is 'up'. </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>admin@example:/&gt; show interface eth1
<a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a>name : eth1
<a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a>index : 2
<a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a>mtu : 1500
<a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a>operational status : up
<a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a>auto-negotiation : on
<a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a>duplex : full
<a id="__codelineno-27-8" name="__codelineno-27-8" href="#__codelineno-27-8"></a>speed : 1000
<a id="__codelineno-27-9" name="__codelineno-27-9" href="#__codelineno-27-9"></a>physical address : 00:53:00:06:11:01
<a id="__codelineno-27-10" name="__codelineno-27-10" href="#__codelineno-27-10"></a>ipv4 addresses :
<a id="__codelineno-27-11" name="__codelineno-27-11" href="#__codelineno-27-11"></a>ipv6 addresses :
<a id="__codelineno-27-12" name="__codelineno-27-12" href="#__codelineno-27-12"></a>in-octets : 75581
<a id="__codelineno-27-13" name="__codelineno-27-13" href="#__codelineno-27-13"></a>out-octets : 43130
<a id="__codelineno-27-14" name="__codelineno-27-14" href="#__codelineno-27-14"></a>...
<a id="__codelineno-27-15" name="__codelineno-27-15" href="#__codelineno-27-15"></a>admin@example:/&gt; show interface eth4
<a id="__codelineno-27-16" name="__codelineno-27-16" href="#__codelineno-27-16"></a>name : eth4
<a id="__codelineno-27-17" name="__codelineno-27-17" href="#__codelineno-27-17"></a>index : 5
<a id="__codelineno-27-18" name="__codelineno-27-18" href="#__codelineno-27-18"></a>mtu : 1500
<a id="__codelineno-27-19" name="__codelineno-27-19" href="#__codelineno-27-19"></a>operational status : up
<a id="__codelineno-27-20" name="__codelineno-27-20" href="#__codelineno-27-20"></a>auto-negotiation : on
<a id="__codelineno-27-21" name="__codelineno-27-21" href="#__codelineno-27-21"></a>duplex : full
<a id="__codelineno-27-22" name="__codelineno-27-22" href="#__codelineno-27-22"></a>speed : 100
<a id="__codelineno-27-23" name="__codelineno-27-23" href="#__codelineno-27-23"></a>physical address : 00:53:00:06:11:04
<a id="__codelineno-27-24" name="__codelineno-27-24" href="#__codelineno-27-24"></a>ipv4 addresses :
<a id="__codelineno-27-25" name="__codelineno-27-25" href="#__codelineno-27-25"></a>ipv6 addresses :
<a id="__codelineno-27-26" name="__codelineno-27-26" href="#__codelineno-27-26"></a>in-octets : 75439
<a id="__codelineno-27-27" name="__codelineno-27-27" href="#__codelineno-27-27"></a>out-octets : 550704
<a id="__codelineno-27-28" name="__codelineno-27-28" href="#__codelineno-27-28"></a>...
<a id="__codelineno-27-29" name="__codelineno-27-29" href="#__codelineno-27-29"></a>admin@example:/&gt;
</code></pre></div>
<h4 id="configuring-fixed-speed-and-duplex">Configuring fixed speed and duplex<a class="headerlink" href="#configuring-fixed-speed-and-duplex" title="Permanent link"></a></h4>
<p>Auto-negotiation of speed/duplex mode is desired in almost all
use-cases, but it is possible to disable auto-negotiation and specify
a fixed speed and duplex mode.</p>
<div class="admonition tip">
<p class="admonition-title">Important</p>
<p>When setting a fixed speed and duplex mode, ensure both sides of the
link have matching configuration. If speed does not match, the link
will not come up. If duplex mode does not match, the result is
reported collisions and/or bad throughput.</p>
</div>
<p>The example below configures port eth3 to fixed speed 100 Mbit/s
half-duplex mode. </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>admin@example:/&gt; configure
<a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a>admin@example:/config/&gt; edit interface eth3 ethernet
<a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a>admin@example:/config/interface/eth3/ethernet/&gt; set speed 0.1
<a id="__codelineno-28-4" name="__codelineno-28-4" href="#__codelineno-28-4"></a>admin@example:/config/interface/eth3/ethernet/&gt; set duplex half
<a id="__codelineno-28-5" name="__codelineno-28-5" href="#__codelineno-28-5"></a>admin@example:/config/interface/eth3/ethernet/&gt; set auto-negotiation enable false
<a id="__codelineno-28-6" name="__codelineno-28-6" href="#__codelineno-28-6"></a>admin@example:/config/interface/eth3/ethernet/&gt; show
<a id="__codelineno-28-7" name="__codelineno-28-7" href="#__codelineno-28-7"></a>auto-negotiation {
<a id="__codelineno-28-8" name="__codelineno-28-8" href="#__codelineno-28-8"></a> enable false;
<a id="__codelineno-28-9" name="__codelineno-28-9" href="#__codelineno-28-9"></a>}
<a id="__codelineno-28-10" name="__codelineno-28-10" href="#__codelineno-28-10"></a>duplex half;
<a id="__codelineno-28-11" name="__codelineno-28-11" href="#__codelineno-28-11"></a>speed 0.1;
<a id="__codelineno-28-12" name="__codelineno-28-12" href="#__codelineno-28-12"></a>admin@example:/config/interface/eth3/ethernet/&gt; leave
<a id="__codelineno-28-13" name="__codelineno-28-13" href="#__codelineno-28-13"></a>admin@example:/&gt;
</code></pre></div>
<p>Speed metric is in Gbit/s. Auto-negotiation needs to be disabled in
order for fixed speed/duplex to apply. Only speeds <code>0.1</code>(100 Mbit/s)
and <code>0.01</code> (10 Mbit/s) can be specified. 1 Gbit/s and higher speeds
require auto-negotiation to be enabled.</p>
<h4 id="ethernet-statistics">Ethernet statistics<a class="headerlink" href="#ethernet-statistics" title="Permanent link"></a></h4>
<p>Ethernet packet statistics<sup id="fnref:6"><a class="footnote-ref" href="#fn:6">6</a></sup> can be listed as shown below.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>admin@example:/&gt; show interface eth1
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>name : eth1
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a>index : 2
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a>mtu : 1500
<a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a>operational status : up
<a id="__codelineno-29-6" name="__codelineno-29-6" href="#__codelineno-29-6"></a>auto-negotiation : on
<a id="__codelineno-29-7" name="__codelineno-29-7" href="#__codelineno-29-7"></a>duplex : full
<a id="__codelineno-29-8" name="__codelineno-29-8" href="#__codelineno-29-8"></a>speed : 1000
<a id="__codelineno-29-9" name="__codelineno-29-9" href="#__codelineno-29-9"></a>physical address : 00:53:00:06:11:0a
<a id="__codelineno-29-10" name="__codelineno-29-10" href="#__codelineno-29-10"></a>ipv4 addresses :
<a id="__codelineno-29-11" name="__codelineno-29-11" href="#__codelineno-29-11"></a>ipv6 addresses :
<a id="__codelineno-29-12" name="__codelineno-29-12" href="#__codelineno-29-12"></a>in-octets : 75581
<a id="__codelineno-29-13" name="__codelineno-29-13" href="#__codelineno-29-13"></a>out-octets : 43130
<a id="__codelineno-29-14" name="__codelineno-29-14" href="#__codelineno-29-14"></a>
<a id="__codelineno-29-15" name="__codelineno-29-15" href="#__codelineno-29-15"></a>eth-in-frames : 434
<a id="__codelineno-29-16" name="__codelineno-29-16" href="#__codelineno-29-16"></a>eth-in-multicast-frames : 296
<a id="__codelineno-29-17" name="__codelineno-29-17" href="#__codelineno-29-17"></a>eth-in-broadcast-frames : 138
<a id="__codelineno-29-18" name="__codelineno-29-18" href="#__codelineno-29-18"></a>eth-in-error-fcs-frames : 0
<a id="__codelineno-29-19" name="__codelineno-29-19" href="#__codelineno-29-19"></a>eth-in-error-oversize-frames : 0
<a id="__codelineno-29-20" name="__codelineno-29-20" href="#__codelineno-29-20"></a>eth-out-frames : 310
<a id="__codelineno-29-21" name="__codelineno-29-21" href="#__codelineno-29-21"></a>eth-out-multicast-frames : 310
<a id="__codelineno-29-22" name="__codelineno-29-22" href="#__codelineno-29-22"></a>eth-out-broadcast-frames : 0
<a id="__codelineno-29-23" name="__codelineno-29-23" href="#__codelineno-29-23"></a>eth-out-good-octets : 76821
<a id="__codelineno-29-24" name="__codelineno-29-24" href="#__codelineno-29-24"></a>eth-in-good-octets : 60598
<a id="__codelineno-29-25" name="__codelineno-29-25" href="#__codelineno-29-25"></a>admin@example:/&gt;
</code></pre></div>
<h3 id="veth-pairs">VETH Pairs<a class="headerlink" href="#veth-pairs" title="Permanent link"></a></h3>
<p>A Virtual Ethernet (VETH) pair is basically a virtual Ethernet cable. A
cable can be "plugged in" to a bridge and the other end can be given to
a <a href="../container/">container</a>, or plugged into another bridge.</p>
<p>The latter example is useful if you have multiple bridges in the system
with different properties (VLAN filtering, IEEE group forwarding, etc.),
but still want some way of communicating between these domains.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>admin@example:/&gt; configure
<a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a>admin@example:/config/&gt; edit interface veth0a
<a id="__codelineno-30-3" name="__codelineno-30-3" href="#__codelineno-30-3"></a>admin@example:/config/interface/veth0a/&gt; set veth peer veth0b
<a id="__codelineno-30-4" name="__codelineno-30-4" href="#__codelineno-30-4"></a>admin@example:/config/interface/veth0a/&gt; end
<a id="__codelineno-30-5" name="__codelineno-30-5" href="#__codelineno-30-5"></a>admin@example:/config/&gt; diff
<a id="__codelineno-30-6" name="__codelineno-30-6" href="#__codelineno-30-6"></a>interfaces {
<a id="__codelineno-30-7" name="__codelineno-30-7" href="#__codelineno-30-7"></a>+ interface veth0a {
<a id="__codelineno-30-8" name="__codelineno-30-8" href="#__codelineno-30-8"></a>+ type veth;
<a id="__codelineno-30-9" name="__codelineno-30-9" href="#__codelineno-30-9"></a>+ veth {
<a id="__codelineno-30-10" name="__codelineno-30-10" href="#__codelineno-30-10"></a>+ peer veth0b;
<a id="__codelineno-30-11" name="__codelineno-30-11" href="#__codelineno-30-11"></a>+ }
<a id="__codelineno-30-12" name="__codelineno-30-12" href="#__codelineno-30-12"></a>+ }
<a id="__codelineno-30-13" name="__codelineno-30-13" href="#__codelineno-30-13"></a>+ interface veth0b {
<a id="__codelineno-30-14" name="__codelineno-30-14" href="#__codelineno-30-14"></a>+ type veth;
<a id="__codelineno-30-15" name="__codelineno-30-15" href="#__codelineno-30-15"></a>+ veth {
<a id="__codelineno-30-16" name="__codelineno-30-16" href="#__codelineno-30-16"></a>+ peer veth0a;
<a id="__codelineno-30-17" name="__codelineno-30-17" href="#__codelineno-30-17"></a>+ }
<a id="__codelineno-30-18" name="__codelineno-30-18" href="#__codelineno-30-18"></a>+ }
<a id="__codelineno-30-19" name="__codelineno-30-19" href="#__codelineno-30-19"></a>}
<a id="__codelineno-30-20" name="__codelineno-30-20" href="#__codelineno-30-20"></a>admin@example:/config/&gt;
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>This is another example of the automatic inference of the interface
type from the name. Any name can be used, but then you have to set
the interface type to <code>veth</code> manually.</p>
</div>
<h2 id="management-plane">Management Plane<a class="headerlink" href="#management-plane" title="Permanent link"></a></h2>
<p>This section details IP Addresses And Other Per-Interface IP settings.</p>
<p>Infix support several network interface types, each can be assigned one
or more IP addresses, both IPv4 and IPv6 are supported. (There is no
concept of a "primary" address.)</p>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-iface-examples.svg" data-desc-position="bottom"><img alt="IP on top of network interface examples" src="../img/ip-iface-examples.svg"></a></p>
<h3 id="ipv4-address-assignment">IPv4 Address Assignment<a class="headerlink" href="#ipv4-address-assignment" title="Permanent link"></a></h3>
<p>Multiple address assignment methods are available:</p>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>Type</strong></th>
<th style="text-align: left;"><strong>Yang Model</strong></th>
<th style="text-align: left;"><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">static</td>
<td style="text-align: left;">ietf-ip</td>
<td style="text-align: left;">Static assignment of IPv4 address, e.g., <em>10.0.1.1/24</em></td>
</tr>
<tr>
<td style="text-align: left;">link-local</td>
<td style="text-align: left;">infix-ip</td>
<td style="text-align: left;">Auto-assignment of IPv4 address in 169.254.x.x/16 range</td>
</tr>
<tr>
<td style="text-align: left;">dhcp</td>
<td style="text-align: left;">infix-dhcp-client</td>
<td style="text-align: left;">Assignment of IPv4 address by DHCP server, e.g., <em>10.0.1.1/24</em></td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The DHCP address method is only available for <em>LAN</em> interfaces
(Ethernet, virtual Ethernet (veth), bridge, link aggregates, etc.)</p>
</div>
<p>Supported DHCP (request) options, configurability (Cfg) and defaults,
are listed below. Configurable options can be disabled on a per client
interface basis, some options, like <code>clientid</code> and option 81, are
possible to set the value of as well.</p>
<table>
<thead>
<tr>
<th><strong>Opt</strong></th>
<th><strong>Name</strong></th>
<th><strong>Cfg</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><code>netmask</code></td>
<td>No</td>
<td>Request IP address and netmask</td>
</tr>
<tr>
<td>3</td>
<td><code>router</code></td>
<td>Yes</td>
<td>Default route(s), see also option 121 and 249</td>
</tr>
<tr>
<td>6</td>
<td><code>dns-server</code></td>
<td>Yes</td>
<td>DNS server(s), static ones take precedence</td>
</tr>
<tr>
<td>12</td>
<td><code>hostname</code></td>
<td>Yes</td>
<td>DHCP cannot set hostname, only for informing server</td>
</tr>
<tr>
<td>15</td>
<td><code>domain</code></td>
<td>Yes</td>
<td>Default domain name, for name resolution</td>
</tr>
<tr>
<td>28</td>
<td><code>broadcast</code></td>
<td>Yes</td>
<td>Broadcast address, calculated if disabled</td>
</tr>
<tr>
<td>42</td>
<td><code>ntp-server</code></td>
<td>Yes</td>
<td>NTP server(s), static ones take precedence</td>
</tr>
<tr>
<td>50</td>
<td><code>address</code></td>
<td>Yes</td>
<td>Request (previously cached) address</td>
</tr>
<tr>
<td>61</td>
<td><code>client-id</code></td>
<td>Yes</td>
<td>Default MAC address (and option 12)</td>
</tr>
<tr>
<td>81</td>
<td><code>fqdn</code></td>
<td>Yes</td>
<td>Similar to option 12, request FQDN update in DNS</td>
</tr>
<tr>
<td>119</td>
<td><code>search</code></td>
<td>Yes</td>
<td>Request domain search list</td>
</tr>
<tr>
<td>121</td>
<td><code>classless-static-route</code></td>
<td>Yes</td>
<td>Classless static routes</td>
</tr>
<tr>
<td>249</td>
<td><code>ms-classless-static-route</code></td>
<td>Yes</td>
<td>Microsoft static route, same as option 121</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>Default:</strong> <code>router</code>, <code>dns-server</code>, <code>domain</code>, <code>broadcast</code>, <code>ntp-server</code>, <code>search</code>,
<code>address</code>, <code>classless-static-route</code>, <code>ms-classless-static-route</code></p>
<p>When configuring a DHCP client, ensure that the NTP client is enabled
for the <code>ntp-server</code> DHCP option to be processed correctly. If the NTP
client is not enabled, any NTP servers provided by the DHCP server will
be ignored. For details on how to enable the NTP client, see the <a href="../system/#ntp-client-configuration">NTP
Client Configuration</a> section.</p>
<div class="admonition tip">
<p class="admonition-title">Important</p>
<p>Per <a href="https://www.rfc-editor.org/rfc/rfc3442">RFC3442</a>, if the DHCP server returns both a Classless Static
Routes option (121) and Router option (3), the DHCP client <em>must</em>
ignore the latter.</p>
</div>
<h3 id="ipv6-address-assignment">IPv6 Address Assignment<a class="headerlink" href="#ipv6-address-assignment" title="Permanent link"></a></h3>
<p>Multiple address assignment methods are available:</p>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>Type</strong></th>
<th style="text-align: left;"><strong>Yang Model</strong></th>
<th style="text-align: left;"><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">static</td>
<td style="text-align: left;">ietf-ip</td>
<td style="text-align: left;">Static assignment of IPv6 address, e.g., <em>2001:db8:0:1::1/64</em></td>
</tr>
<tr>
<td style="text-align: left;">link-local</td>
<td style="text-align: left;">ietf-ip<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></td>
<td style="text-align: left;">(RFC4862) Auto-configured link-local IPv6 address (<em>fe80::0</em> prefix + interface identifier, e.g., <em>fe80::ccd2:82ff:fe52:728b/64</em>)</td>
</tr>
<tr>
<td style="text-align: left;">global auto-conf</td>
<td style="text-align: left;">ietf-ip</td>
<td style="text-align: left;">(RFC4862) Auto-configured (stateless) global IPv6 address (prefix from router + interface identifier, e.g., <em>2001:db8:0:1:ccd2:82ff:fe52:728b/64</em></td>
</tr>
<tr>
<td style="text-align: left;">dhcp</td>
<td style="text-align: left;">infix-dhcpv6-client</td>
<td style="text-align: left;">Assignment of IPv6 address by DHCPv6 server, e.g., <em>2001:db8::42/128</em></td>
</tr>
</tbody>
</table>
<p>Both for <em>link-local</em> and <em>global auto-configuration</em>, it is possible
to auto-configure using a random suffix instead of the interface
identifier.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The DHCPv6 address method is only available for <em>LAN</em> interfaces
(Ethernet, virtual Ethernet (veth), bridge, link aggregates, etc.)</p>
</div>
<p>Supported DHCPv6 (request) options, configurability (Cfg) and defaults,
are listed below. Configurable options can be disabled on a per client
interface basis, some options, like <code>client-id</code> and <code>client-fqdn</code>, are
possible to set the value of as well.</p>
<table>
<thead>
<tr>
<th><strong>Opt</strong></th>
<th><strong>Name</strong></th>
<th><strong>Cfg</strong></th>
<th><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><code>client-id</code></td>
<td>Yes</td>
<td>Client identifier (DUID), auto-generated by default</td>
</tr>
<tr>
<td>2</td>
<td><code>server-id</code></td>
<td>Yes</td>
<td>Server identifier (DUID)</td>
</tr>
<tr>
<td>23</td>
<td><code>dns-server</code></td>
<td>Yes</td>
<td>DNS recursive name servers, static ones take precedence</td>
</tr>
<tr>
<td>24</td>
<td><code>domain-search</code></td>
<td>Yes</td>
<td>Domain search list</td>
</tr>
<tr>
<td>25</td>
<td><code>ia-pd</code></td>
<td>Yes</td>
<td>Prefix delegation for downstream networks</td>
</tr>
<tr>
<td>31</td>
<td><code>sntp-server</code></td>
<td>Yes</td>
<td>Simple Network Time Protocol servers</td>
</tr>
<tr>
<td>32</td>
<td><code>information-refresh-time</code></td>
<td>Yes</td>
<td>Refresh time for stateless DHCPv6</td>
</tr>
<tr>
<td>39</td>
<td><code>client-fqdn</code></td>
<td>Yes</td>
<td>Client FQDN, request DNS update from server</td>
</tr>
<tr>
<td>56</td>
<td><code>ntp-server</code></td>
<td>Yes</td>
<td>NTP time servers, static ones take precedence</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>Default:</strong> <code>dns-server</code>, <code>domain-search</code>, <code>ntp-server</code></p>
<p>DHCPv6 supports both <strong>stateful</strong> (address assignment) and <strong>stateless</strong>
(information-only) modes:</p>
<ul>
<li><strong>Stateful DHCPv6</strong>: The server assigns IPv6 addresses to clients. This is
the default mode when enabling the DHCPv6 client.</li>
<li><strong>Stateless DHCPv6</strong>: Used with SLAAC (Stateless Address Autoconfiguration)
when only configuration information (DNS, NTP, etc.) is needed. Enable with
the <code>information-only</code> setting.</li>
</ul>
<p>When configuring a DHCPv6 client, ensure that the NTP client is enabled
for the <code>ntp-server</code> DHCPv6 option to be processed correctly. If the
NTP client is not enabled, any NTP servers provided by the DHCPv6 server
will be ignored. For details on how to enable the NTP client, see the
<a href="../system/#ntp-client-configuration">NTP Client Configuration</a> section.</p>
<h3 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link"></a></h3>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-switch.svg" data-desc-position="bottom"><img alt="Switch example (eth0 and lo)" src="../img/ip-address-example-switch.svg"></a></p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>To illustrate IP address configuration, the examples below uses a
switch with a single Ethernet interface (eth0) and a loopback
interface (lo). As shown above, these examples assume <em>eth0</em> has an
IPv6 link-local address and <em>lo</em> has static IPv4 and IPv6 addresses by
default.</p>
<h4 id="static-and-link-local-ipv4-addresses">Static and link-local IPv4 addresses<a class="headerlink" href="#static-and-link-local-ipv4-addresses" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-ipv4-static.svg" data-desc-position="bottom"><img alt="Setting static IPv4 (and link-local IPv4)" src="../img/ip-address-example-ipv4-static.svg"></a></p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv4
admin@example:/config/interface/eth0/ipv4/&gt; set address 10.0.1.1 prefix-length 24
admin@example:/config/interface/eth0/ipv4/&gt; set autoconf
admin@example:/config/interface/eth0/ipv4/&gt; diff
+interfaces {
+ interface eth0 {
+ ipv4 {
+ address 10.0.1.1 {
+ prefix-length 24;
+ }
+ autoconf;
+ }
+ }
+}
admin@example:/config/interface/eth0/ipv4/&gt; leave
admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv4 169.254.1.3/16 (random)
ipv4 10.0.1.1/24 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>As shown, the link-local IPv4 address is configured with <code>set autoconf</code>.
The presence of the <code>autoconf</code> container enables IPv4 link-local address
assignment. The resulting address (169.254.1.3/16) is of type <em>random</em>
(<a href="https://www.rfc-editor.org/rfc/rfc8344">ietf-ip.yang</a>).</p>
<p>The IPv4LL client also supports a <code>request-address</code> setting which can be
used to "seed" the client's starting address. If the address is free it
will be used, otherwise it falls back to the default algorithm.</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/interface/eth0/ipv4/&gt; edit autoconf
admin@example:/config/interface/eth0/ipv4/autoconf/&gt; set request-address 169.254.1.2
admin@example:/config/interface/eth0/ipv4/autoconf/&gt; leave
</code></pre></div>
<h4 id="use-of-dhcp-for-ipv4-address-assignment">Use of DHCP for IPv4 address assignment<a class="headerlink" href="#use-of-dhcp-for-ipv4-address-assignment" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-ipv4-dhcp.svg" data-desc-position="bottom"><img alt="Using DHCP for IPv4 address assignment" src="../img/ip-address-example-ipv4-dhcp.svg"></a></p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv4
admin@example:/config/interface/eth0/ipv4/&gt; set dhcp
admin@example:/config/interface/eth0/ipv4/&gt; leave
admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv4 10.1.2.100/24 (dhcp)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>The resulting address (10.1.2.100/24) is of type <em>dhcp</em>.</p>
<p>To configure DHCP client options, such as sending a specific hostname to the
server, you can specify options with values:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>admin@example:/&gt; configure
<a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a>admin@example:/config/&gt; edit interface eth0 ipv4 dhcp
<a id="__codelineno-31-3" name="__codelineno-31-3" href="#__codelineno-31-3"></a>admin@example:/config/interface/eth0/ipv4/dhcp/&gt; set option hostname value myhost
<a id="__codelineno-31-4" name="__codelineno-31-4" href="#__codelineno-31-4"></a>admin@example:/config/interface/eth0/ipv4/dhcp/&gt; show
<a id="__codelineno-31-5" name="__codelineno-31-5" href="#__codelineno-31-5"></a>option hostname {
<a id="__codelineno-31-6" name="__codelineno-31-6" href="#__codelineno-31-6"></a> value myhost;
<a id="__codelineno-31-7" name="__codelineno-31-7" href="#__codelineno-31-7"></a>}
<a id="__codelineno-31-8" name="__codelineno-31-8" href="#__codelineno-31-8"></a>admin@example:/config/interface/eth0/ipv4/dhcp/&gt; leave
<a id="__codelineno-31-9" name="__codelineno-31-9" href="#__codelineno-31-9"></a>admin@example:/&gt;
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The special value <code>auto</code> can be used with the hostname option to
automatically use the configured system hostname.</p>
</div>
<p>Other useful DHCP options include:</p>
<ul>
<li><code>client-id</code> - Send a specific client identifier to the server</li>
<li><code>route-preference</code> - Set the administrative distance for DHCP-learned routes (default: 5)</li>
</ul>
<p>For advanced usage with vendor-specific options, see the YANG model.</p>
<h4 id="use-of-dhcpv6-for-ipv6-address-assignment">Use of DHCPv6 for IPv6 address assignment<a class="headerlink" href="#use-of-dhcpv6-for-ipv6-address-assignment" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="img/ip-address-example-ipv6-dhcp.svg" data-desc-position="bottom"><img alt="Using DHCPv6 for IPv6 address assignment" src="img/ip-address-example-ipv6-dhcp.svg"></a></p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/&gt; set dhcp
admin@example:/config/interface/eth0/ipv6/&gt; leave
admin@example:/&gt; show interface
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8::42/128 (dhcp)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>The resulting address (2001:db8::42/128) is of type <em>dhcp</em>.</p>
<p>To configure DHCPv6 client options, such as requesting prefix delegation
for downstream networks, you can specify options:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>admin@example:/&gt; configure
<a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a>admin@example:/config/&gt; edit interface eth0 ipv6 dhcp
<a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; set option ia-pd
<a id="__codelineno-32-4" name="__codelineno-32-4" href="#__codelineno-32-4"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; set option dns-server
<a id="__codelineno-32-5" name="__codelineno-32-5" href="#__codelineno-32-5"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; show
<a id="__codelineno-32-6" name="__codelineno-32-6" href="#__codelineno-32-6"></a>option dns-server;
<a id="__codelineno-32-7" name="__codelineno-32-7" href="#__codelineno-32-7"></a>option ia-pd;
<a id="__codelineno-32-8" name="__codelineno-32-8" href="#__codelineno-32-8"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; leave
<a id="__codelineno-32-9" name="__codelineno-32-9" href="#__codelineno-32-9"></a>admin@example:/&gt;
</code></pre></div>
<p>For stateless DHCPv6 (used with SLAAC to get only configuration information):</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>admin@example:/&gt; configure
<a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a>admin@example:/config/&gt; edit interface eth0 ipv6 dhcp
<a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; set information-only true
<a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; show
<a id="__codelineno-33-5" name="__codelineno-33-5" href="#__codelineno-33-5"></a>information-only true;
<a id="__codelineno-33-6" name="__codelineno-33-6" href="#__codelineno-33-6"></a>option dns-server;
<a id="__codelineno-33-7" name="__codelineno-33-7" href="#__codelineno-33-7"></a>option domain-search;
<a id="__codelineno-33-8" name="__codelineno-33-8" href="#__codelineno-33-8"></a>admin@example:/config/interface/eth0/ipv6/dhcp/&gt; leave
<a id="__codelineno-33-9" name="__codelineno-33-9" href="#__codelineno-33-9"></a>admin@example:/&gt;
</code></pre></div>
<p>Other useful DHCPv6 options include:</p>
<ul>
<li><code>duid</code> - Set a specific DHCPv6 Unique Identifier (auto-generated by default)</li>
<li><code>client-fqdn</code> - Request the server to update DNS records with client's FQDN</li>
<li><code>route-preference</code> - Set the administrative distance for DHCPv6-learned routes (default: 5)</li>
</ul>
<p>For advanced usage with vendor-specific options, see the YANG model.</p>
<h4 id="disabling-ipv6-link-local-addresses">Disabling IPv6 link-local address(es)<a class="headerlink" href="#disabling-ipv6-link-local-addresses" title="Permanent link"></a></h4>
<p>The (only) way to disable IPv6 link-local addresses is by disabling IPv6
on the interface.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>admin@example:/&gt; configure
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a>admin@example:/config/&gt; edit interface eth0 ipv6
<a id="__codelineno-34-3" name="__codelineno-34-3" href="#__codelineno-34-3"></a>admin@example:/config/interface/eth0/ipv6/&gt; set enabled false
<a id="__codelineno-34-4" name="__codelineno-34-4" href="#__codelineno-34-4"></a>admin@example:/config/interface/eth0/ipv6/&gt; leave
<a id="__codelineno-34-5" name="__codelineno-34-5" href="#__codelineno-34-5"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-34-6" name="__codelineno-34-6" href="#__codelineno-34-6"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-34-7" name="__codelineno-34-7" href="#__codelineno-34-7"></a>eth0 ethernet UP 02:00:00:00:00:00
<a id="__codelineno-34-8" name="__codelineno-34-8" href="#__codelineno-34-8"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-34-9" name="__codelineno-34-9" href="#__codelineno-34-9"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-34-10" name="__codelineno-34-10" href="#__codelineno-34-10"></a> ipv6 ::1/128 (static)
<a id="__codelineno-34-11" name="__codelineno-34-11" href="#__codelineno-34-11"></a>admin@example:/&gt;
</code></pre></div>
<h4 id="static-ipv6-address">Static IPv6 address<a class="headerlink" href="#static-ipv6-address" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-ipv6-static.svg" data-desc-position="bottom"><img alt="Setting static IPv6" src="../img/ip-address-example-ipv6-static.svg"></a></p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/&gt; set address 2001:db8::1 prefix-length 64
admin@example:/config/interface/eth0/ipv6/&gt; leave
admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8::1/64 (static)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<h4 id="stateless-auto-configuration-of-global-ipv6-address">Stateless Auto-configuration of Global IPv6 Address<a class="headerlink" href="#stateless-auto-configuration-of-global-ipv6-address" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-ipv6-auto-global.svg" data-desc-position="bottom"><img alt="Auto-configuration of global IPv6" src="../img/ip-address-example-ipv6-auto-global.svg"></a></p>
<p>Stateless address auto-configuration of global addresses is enabled by
default. The address is formed by concatenating the network prefix
advertised by the router (here 2001:db8:0:1::0/64) and the interface
identifier. The resulting address is of type <em>link-layer</em>, as it is
formed based on the interface identifier (<a href="https://www.rfc-editor.org/rfc/rfc8344">ietf-ip.yang</a>).</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (link-layer)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>Disabling auto-configuration of global IPv6 addresses can be done as shown
below.</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/&gt; set autoconf create-global-addresses false
admin@example:/config/interface/eth0/ipv6/&gt; leave
admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<h4 id="random-link-identifiers-for-ipv6-stateless-autoconfiguration">Random Link Identifiers for IPv6 Stateless Autoconfiguration<a class="headerlink" href="#random-link-identifiers-for-ipv6-stateless-autoconfiguration" title="Permanent link"></a></h4>
<p><a class="glightbox" data-type="image" data-width="100%" data-height="auto" href="../img/ip-address-example-ipv6-auto-global.svg" data-desc-position="bottom"><img alt="Auto-configuration of global IPv6" src="../img/ip-address-example-ipv6-auto-global.svg"></a></p>
<p>By default, the auto-configured link-local and global IPv6 addresses
are formed from a link-identifier based on the MAC address.</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:0:ff:fe00:0/64 (link-layer)
ipv6 fe80::ff:fe00:0/64 (link-layer)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>To avoid revealing identity information in the IPv6 address, it is
possible to specify use of a random identifier (<a href="https://www.rfc-editor.org/rfc/rfc8344">ietf-ip.yang</a> and
<a href="https://www.rfc-editor.org/rfc/rfc8981">RFC8981</a>).</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit interface eth0 ipv6
admin@example:/config/interface/eth0/ipv6/&gt; set autoconf create-temporary-addresses true
admin@example:/config/interface/eth0/ipv6/&gt; leave
admin@example:/&gt; show interfaces
INTERFACE PROTOCOL STATE DATA
eth0 ethernet UP 02:00:00:00:00:00
ipv6 2001:db8:0:1:b705:8374:638e:74a8/64 (random)
ipv6 fe80::ad3d:b274:885a:9ffb/64 (random)
lo ethernet UP 00:00:00:00:00:00
ipv4 127.0.0.1/8 (static)
ipv6 ::1/128 (static)
admin@example:/&gt;
</code></pre></div>
<p>Both the link-local address (fe80::) and the global address (2001:)
have changed type to <em>random</em>.</p>
<h3 id="ipv4-forwarding">IPv4 forwarding<a class="headerlink" href="#ipv4-forwarding" title="Permanent link"></a></h3>
<p>To be able to route (static or dynamic) on the interface it is
required to enable forwarding. This setting controls if packets
received on this interface can be forwarded.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>admin@example:/config/&gt; edit interface eth0
<a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a>admin@example:/config/interface/eth0/&gt; set ipv4 forwarding
<a id="__codelineno-35-3" name="__codelineno-35-3" href="#__codelineno-35-3"></a>admin@example:/config/interface/eth0/&gt; leave
<a id="__codelineno-35-4" name="__codelineno-35-4" href="#__codelineno-35-4"></a>admin@example:/&gt;
</code></pre></div>
<h3 id="ipv6-forwarding">IPv6 forwarding<a class="headerlink" href="#ipv6-forwarding" title="Permanent link"></a></h3>
<p>Due to how the Linux kernel manages IPv6 forwarding, we can not fully
control it per interface via this setting like how IPv4 works. Instead,
IPv6 forwarding is globally enabled when at least one interface enable
forwarding, otherwise it is disabled.</p>
<p>The following table shows the system IPv6 features that the <code>forwarding</code>
setting control when it is <em>Enabled</em> or *Disabled:</p>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>IPv6 Feature</strong></th>
<th style="text-align: left;"><strong>Enabled</strong></th>
<th style="text-align: left;"><strong>Disabled</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">IsRouter set in Neighbour Advertisements</td>
<td style="text-align: left;">Yes</td>
<td style="text-align: left;">No</td>
</tr>
<tr>
<td style="text-align: left;">Transmit Router Solicitations</td>
<td style="text-align: left;">No</td>
<td style="text-align: left;">Yes</td>
</tr>
<tr>
<td style="text-align: left;">Router Advertisements are ignored</td>
<td style="text-align: left;">Yes</td>
<td style="text-align: left;">Yes</td>
</tr>
<tr>
<td style="text-align: left;">Accept Redirects</td>
<td style="text-align: left;">No</td>
<td style="text-align: left;">Yes</td>
</tr>
</tbody>
</table>
<div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>admin@example:/config/&gt; edit interface eth0
<a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a>admin@example:/config/interface/eth0/&gt; set ipv6 forwarding
<a id="__codelineno-36-3" name="__codelineno-36-3" href="#__codelineno-36-3"></a>admin@example:/config/interface/eth0/&gt; leave
<a id="__codelineno-36-4" name="__codelineno-36-4" href="#__codelineno-36-4"></a>admin@example:/&gt;
</code></pre></div>
<h2 id="routing-support">Routing support<a class="headerlink" href="#routing-support" title="Permanent link"></a></h2>
<p>Currently supported YANG models:</p>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>YANG Model</strong></th>
<th style="text-align: left;"><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">ietf-routing</td>
<td style="text-align: left;">Base model for all other models</td>
</tr>
<tr>
<td style="text-align: left;">ietf-ipv4-unicast-routing</td>
<td style="text-align: left;">Static IPv4 unicast routing</td>
</tr>
<tr>
<td style="text-align: left;">ietf-ipv6-unicast-routing</td>
<td style="text-align: left;">Static IPv6 unicast routing</td>
</tr>
<tr>
<td style="text-align: left;">ietf-ospf</td>
<td style="text-align: left;">OSPF routing</td>
</tr>
<tr>
<td style="text-align: left;">infix-routing</td>
<td style="text-align: left;">Infix deviations and extensions</td>
</tr>
</tbody>
</table>
<p>The base model, ietf-routing, is where all the other models hook in. It
is used to set configuration and read operational status (RIB tables) in
the other models.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The standard IETF routing models allows multiple instances, but Infix
currently <em>only support one instance</em> per routing protocol! In the
examples presented here, the instance name <code>default</code> is used.</p>
</div>
<h3 id="ipv4-static-routes">IPv4 Static routes<a class="headerlink" href="#ipv4-static-routes" title="Permanent link"></a></h3>
<p>The standard IETF model for static routes reside under the <code>static</code>
control plane protocol. For our examples we use the instance name
<code>default</code>, you can use any name.</p>
<p>For a route with destination 192.168.200.0/24 via 192.168.1.1:</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit routing control-plane-protocol static name default ipv4
admin@example:/config/routing/…/ipv4/&gt; set route 192.168.200.0/24 next-hop next-hop-address 192.168.1.1
admin@example:/config/routing/…/ipv4/&gt; leave
admin@example:/&gt;
</code></pre></div>
<p>For a "floating" static route with destination 10.0.0.0/16 via a backup
router 192.168.1.1, using the highest possible distance:</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit routing control-plane-protocol static name default ipv4
admin@example:/config/routing/…/ipv4/&gt; set route 10.0.0.0/16 next-hop next-hop-address 192.168.1.1 route-preference 254
admin@example:/config/routing/…/ipv4/&gt; leave
admin@example:/&gt;
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Remember to enable <a href="#ipv4-forwarding">IPv4 forwarding</a> for the
interfaces you want to route between.</p>
</div>
<h3 id="ipv6-static-routes">IPv6 Static routes<a class="headerlink" href="#ipv6-static-routes" title="Permanent link"></a></h3>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit routing control-plane-protocol static name default ipv6
admin@example:/config/routing/…/ipv6/&gt; set route 2001:db8:3c4d:200::/64 next-hop next-hop-address 2001:db8:3c4d:1::1
admin@example:/config/routing/…/ipv6/&gt; leave
admin@example:/&gt;
</code></pre></div>
<h3 id="ospfv2-routing">OSPFv2 Routing<a class="headerlink" href="#ospfv2-routing" title="Permanent link"></a></h3>
<p>The system supports OSPF dynamic routing for IPv4, i.e., OSPFv2. To
enable OSPF and set one active interface in area 0:</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/&gt; edit routing control-plane-protocol ospfv2 name default ospf
admin@example:/config/routing/…/ospf/&gt; set area 0.0.0.0 interface e0 enabled
admin@example:/config/routing/…/ospf/&gt; leave
admin@example:/&gt;
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Remember to enable <a href="#ipv4-forwarding">IPv4 forwarding</a> for all the
interfaces you want to route between.</p>
</div>
<h4 id="ospf-area-types">OSPF area types<a class="headerlink" href="#ospf-area-types" title="Permanent link"></a></h4>
<p>In addition to <em>regular</em> OSPF areas, area types <em>NSSA</em> and <em>Stub</em> are
also supported. To configure an NSSA area with summary routes:</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/&gt; edit routing control-plane-protocol ospfv2 name default ospf
admin@example:/config/routing/…/ospf/&gt; set area 0.0.0.1 area-type nssa-area
admin@example:/config/routing/…/ospf/&gt; set area 0.0.0.1 summary true
admin@example:/config/routing/…/ospf/&gt; leave
admin@example:/&gt;
</code></pre></div>
<h4 id="bidirectional-forwarding-detection-bfd">Bidirectional Forwarding Detection (BFD)<a class="headerlink" href="#bidirectional-forwarding-detection-bfd" title="Permanent link"></a></h4>
<p>It is possible to enable BFD per OSPF interface to speed up detection of
link loss.</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/&gt; edit routing control-plane-protocol ospfv2 name default ospf
admin@example:/config/routing/…/ospf/&gt; set area 0.0.0.0 interface e0 bfd enabled true
admin@example:/config/routing/…/ospf/&gt; leave
admin@example:/&gt;
</code></pre></div>
<h4 id="ospf-interface-settings">OSPF interface settings<a class="headerlink" href="#ospf-interface-settings" title="Permanent link"></a></h4>
<p>We have already seen how to enable OSPF per interface (<em>enabled true</em>)
and BFD for OSPF per interface (<em>bfd enabled true</em>). These and other
OSPF interface settings are done in context of an OSFP area, e.g., <em>area
0.0.0.0</em>. Available commands can be listed using the <code>?</code> mark.</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/routing/…/&gt; edit ospf area 0.0.0.0
admin@example:/config/routing/…/ospf/area/0.0.0.0/&gt; edit interface e0
admin@example:/config/routing/…/ospf/area/0.0.0.0/interface/e0/&gt; set ?
bfd BFD interface configuration.
cost Interface's cost.
dead-interval Interval after which a neighbor is declared down
enabled Enables/disables the OSPF protocol on the interface.
hello-interval Interval between Hello packets (seconds). It must
interface-type Interface type.
passive Enables/disables a passive interface. A passive
retransmit-interval Interval between retransmitting unacknowledged Link
transmit-delay Estimated time needed to transmit Link State Update
admin@example:/config/routing/…/ospf/area/0.0.0.0/interface/e0/&gt; set
</code></pre></div>
<p>For example, setting the OSPF <em>interface type</em> to <em>point-to-point</em> for
an Ethernet interface can be done as follows.</p>
<div class="highlight"><pre><span></span><code>admin@example:/config/routing/…/ospf/area/0.0.0.0/interface/e0/&gt; set interface-type point-to-point
admin@example:/config/routing/…/ospf/area/0.0.0.0/interface/e0/&gt;
</code></pre></div>
<h4 id="ospf-global-settings">OSPF global settings<a class="headerlink" href="#ospf-global-settings" title="Permanent link"></a></h4>
<p>In addition to <em>area</em> and <em>interface</em> specific settings, OSPF provides
global settings for route redistribution and OSPF router identifier.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a>admin@example:/config/&gt; edit routing control-plane-protocol ospfv2 name default ospf
<a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a>admin@example:/config/routing/…/ospf/&gt; set ?
<a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a> area List of OSPF areas.
<a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a> default-route-advertise Distribute default route to network
<a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a> explicit-router-id Defined in RFC 2328. A 32-bit number
<a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a> redistribute Redistribute protocols into OSPF
<a id="__codelineno-37-7" name="__codelineno-37-7" href="#__codelineno-37-7"></a>admin@example:/config/routing/…/ospf/&gt; set
</code></pre></div>
<ul>
<li>Explicit router ID: By default the router will pick an IP address
from one of its OSPF interfaces as OSPF router ID. An explicit ID is
used to get a deterministic behavior, e.g., <code>set explicit-router-id
1.1.1.1</code>.</li>
<li>Redistribution: <code>set redistribute static</code> and <code>set redistribute connected</code>
can be used to include static or connected routes into the OSPF routing
domain. These routes are redistributed as <em>external type-2</em> (E2)
routes.</li>
<li>Advertising default route: An OSPF router can be made to distribute
a default route into the OSPF domain by command <code>set
default-route-advertise enabled</code>. This route is distributed as long
as the router itself has an <em>active</em> default route in its routing
table. By adding command <code>set default-route-advertise always</code> the
router will distribute a default route even when it lacks a default
route. The default route will be distributed as an <em>external type-2</em>
(E2) route.</li>
</ul>
<h4 id="debug-ospfv2">Debug OSPFv2<a class="headerlink" href="#debug-ospfv2" title="Permanent link"></a></h4>
<p>Using NETCONF and the YANG model <em>ietf-routing</em> it is possible to read
the OSPF routing table, neighbors and more, that may be useful for
debugging the OSPFv2 setup. The CLI has various OSPF status commands
such as <code>show ospf neighbor</code>, <code>show ospf interface</code> and <code>show ospf
routes</code>.</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show ospf neighbor
Neighbor ID Pri State Up Time Dead Time Address Interface RXmtL RqstL DBsmL
10.1.1.2 1 Full/- 3h46m59s 30.177s 10.1.1.2 e0:10.1.1.1 0 0 0
10.1.1.3 1 Full/- 3h46m55s 34.665s 10.1.1.3 e1:10.1.1.1 0 0 0
admin@example:/&gt;
</code></pre></div>
<p>For more detailed troubleshooting, OSPF debug logging can be enabled to
capture specific protocol events. Debug messages are written to the
routing log file (<code>/var/log/routing</code>).</p>
<div class="admonition warning">
<p class="admonition-title">Caution</p>
<p>Debug logging significantly increases log output and may impact
performance. Only enable debug categories needed for troubleshooting,
and disable them when done.</p>
</div>
<p>To enable specific OSPF debug categories:</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; edit routing control-plane-protocol ospfv2 name default ospf debug
admin@example:/config/routing/…/ospf/debug/&gt; set bfd true
admin@example:/config/routing/…/ospf/debug/&gt; set nsm true
admin@example:/config/routing/…/ospf/debug/&gt; leave
admin@example:/&gt;
</code></pre></div>
<p>Available debug categories include:</p>
<ul>
<li><code>bfd</code>: BFD (Bidirectional Forwarding Detection) events</li>
<li><code>packet</code>: Detailed packet debugging (all OSPF packets)</li>
<li><code>ism</code>: Interface State Machine events</li>
<li><code>nsm</code>: Neighbor State Machine events</li>
<li><code>default-information</code>: Default route origination</li>
<li><code>nssa</code>: Not-So-Stubby Area events</li>
</ul>
<p>All debug options are disabled by default. Refer to the <code>infix-routing</code>
YANG model for the complete list of available debug options.</p>
<p>To view current debug settings:</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show running-config routing control-plane-protocol
</code></pre></div>
<p>To disable all debug logging, simply delete the debug settings or set
all options back to <code>false</code>:</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; configure
admin@example:/config/&gt; delete routing control-plane-protocol ospfv2 name default ospf debug
admin@example:/config/&gt; leave
admin@example:/&gt;
</code></pre></div>
<h3 id="view-routing-table">View routing table<a class="headerlink" href="#view-routing-table" title="Permanent link"></a></h3>
<p>The routing table can be inspected from the operational datastore, XPath
<code>/routing/ribs</code>, using sysrepocfg, NETCONF/RESTCONF, or using the CLI.</p>
<h4 id="ipv4-routing-table">IPv4 routing table<a class="headerlink" href="#ipv4-routing-table" title="Permanent link"></a></h4>
<p>This CLI example shows the IPv4 routing table with a few connected
routes and some routes learned from OSPF. See the next section for
an explanation of route preferences (PREF).</p>
<p>The <code>&gt;</code> at the start of a line marks a selected route (in the IETF YANG
model referred to as <em>active</em>), if there are more than one route with
the same destination the <code>*</code> marks the next-hop used and installed in
the kernel FIB (the YANG model refers to this as <em>installed</em>).</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show ip route
DESTINATION PREF NEXT-HOP PROTO UPTIME
&gt;* 0.0.0.0/0 110/2 10.0.23.1 ospfv2 4h2m43s
&gt;* 10.0.0.1/32 110/4000 10.0.13.1 ospfv2 4h2m43s
10.0.0.3/32 110/0 lo ospfv2 4h2m57s
&gt;* 10.0.0.3/32 0/0 lo direct 4h2m58s
10.0.13.0/30 110/2000 e5 ospfv2 4h2m57s
&gt;* 10.0.13.0/30 0/0 e5 direct 4h2m58s
10.0.23.0/30 110/1 e6 ospfv2 4h2m57s
&gt;* 10.0.23.0/30 0/0 e6 direct 4h2m58s
192.168.3.0/24 110/1 e2 ospfv2 4h2m57s
&gt;* 192.168.3.0/24 0/0 e2 direct 4h2m58s
admin@example:/&gt;
</code></pre></div>
<h4 id="ipv6-routing-table">IPv6 routing table<a class="headerlink" href="#ipv6-routing-table" title="Permanent link"></a></h4>
<p>This CLI example show the IPv6 routing table.</p>
<div class="highlight"><pre><span></span><code>admin@example:/&gt; show ipv6 route
DESTINATION PREF NEXT-HOP PROTO UPTIME
&gt;* ::/0 1/0 2001:db8:3c4d:50::1 static 0h1m20s
&gt;* 2001:db8:3c4d:50::/64 0/0 e6 direct 0h1m20s
&gt;* 2001:db8:3c4d:200::1/128 0/0 lo direct 0h1m20s
* fe80::/64 0/0 e7 direct 0h1m20s
* fe80::/64 0/0 e6 direct 0h1m20s
* fe80::/64 0/0 e5 direct 0h1m20s
* fe80::/64 0/0 e4 direct 0h1m20s
* fe80::/64 0/0 e3 direct 0h1m20s
* fe80::/64 0/0 e2 direct 0h1m20s
&gt;* fe80::/64 0/0 e1 direct 0h1m20s
admin@example:/&gt;
</code></pre></div>
<h4 id="route-preference">Route Preference<a class="headerlink" href="#route-preference" title="Permanent link"></a></h4>
<p>The operating system leverages FRRouting (<a href="https://frrouting.org/">Frr</a>) as routing engine
for both static and dynamic routing. Even routes injected from a DHCP
client, and IPv4 link-local (IPv4) routes, are injected into Frr to let
it weigh all routes before installing them into the kernel routing table
(sometimes referred to as FIB).</p>
<p>Routes have different weights made up from a <em>distance</em> and a <em>metric</em>.
The kernel routing table only talks about <em>metric</em>, which unfortunately
is <strong>not the same</strong> -- this is one of the reasons why the term <em>route
preference</em> is used instead. It is recommended to use the CLI, or any
of the other previously mentioned YANG based front-ends, to inspect the
routing table.</p>
<p>Default distances used (lower numeric value wins):</p>
<table>
<thead>
<tr>
<th><strong>Distance</strong></th>
<th><strong>Protocol</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>Kernel routes, i.e., connected routes</td>
</tr>
<tr>
<td>1</td>
<td>Static routes</td>
</tr>
<tr>
<td>5</td>
<td>DHCP routes</td>
</tr>
<tr>
<td>110</td>
<td>OSPF</td>
</tr>
<tr>
<td>254</td>
<td>IPv4LL (ZeroConf) device routes</td>
</tr>
<tr>
<td>255</td>
<td>Route will not be used or redistributed</td>
</tr>
</tbody>
</table>
<p>Hence, a route learned from OSPF may be overridden by a static route set
locally. By default, even a route to the same destination, but with a
different next-hop, learned from a DHCP server wins over an OSPF route.</p>
<p>The distance used for static routes and DHCP routes can be changed by
setting a different <em>routing preference</em> value.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The kernel metric is an unsigned 32-bit value, which is read by Frr as
(upper) 8 bits distance and 24 bits metric. But it does not write it
back to the kernel FIB this way, only selected routes are candidates
to be installed in the FIB by Frr.</p>
</div>
<h4 id="source-protocol">Source protocol<a class="headerlink" href="#source-protocol" title="Permanent link"></a></h4>
<p>The source protocol describes the origin of the route.</p>
<table>
<thead>
<tr>
<th style="text-align: left;"><strong>Protocol</strong></th>
<th style="text-align: left;"><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">kernel</td>
<td style="text-align: left;">Added when setting a subnet address on an interface</td>
</tr>
<tr>
<td style="text-align: left;">static</td>
<td style="text-align: left;">User created, learned from DHCP, or IPv4LL</td>
</tr>
<tr>
<td style="text-align: left;">ospfv2</td>
<td style="text-align: left;">Routes learned from OSPFv2</td>
</tr>
</tbody>
</table>
<p>The YANG model <em>ietf-routing</em> support multiple ribs but only two are
currently supported, namely <code>ipv4</code> and <code>ipv6</code>.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p><code>(source MAC XOR destination MAC XOR EtherType) MODULO num_links</code>&nbsp;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"></a></p>
</li>
<li id="fn:2">
<p>Link-local IPv6 addresses are implicitly enabled when enabling
IPv6. IPv6 can be enabled/disabled per interface in the
<a href="https://www.rfc-editor.org/rfc/rfc8344">ietf-ip</a> YANG model.&nbsp;<a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text"></a></p>
</li>
<li id="fn:3">
<p>For example, IPv4 groups are mapped to MAC multicast addresses by
mapping the low-order 23-bits of the IP address in the low-order 23
bits of the Ethernet address 01:00:5E:00:00:00. Meaning, more than
one IP multicast group maps to the same MAC multicast group.&nbsp;<a class="footnote-backref" href="#fnref:3" title="Jump back to footnote 3 in the text"></a></p>
</li>
<li id="fn:4">
<p>A YANG deviation was previously used to make it possible to set
<code>phys-address</code>, but this has been replaced with the more flexible
<code>custom-phys-address</code>.&nbsp;<a class="footnote-backref" href="#fnref:4" title="Jump back to footnote 4 in the text"></a></p>
</li>
<li id="fn:5">
<p>MAC bridges on Marvell Linkstreet devices are currently limited to
a single MAC database, this may be a problem if the same MAC address
appears in different MAC bridges.&nbsp;<a class="footnote-backref" href="#fnref:5" title="Jump back to footnote 5 in the text"></a></p>
</li>
<li id="fn:6">
<p>Ethernet counters are described in <em>ieee802-ethernet-interface.yang</em>
and <em>infix-ethernet-interface.yang</em>. There is a dedicated document on
<a href="../eth-counters/">Ethernet Counters</a> that provide additional details
on the statistics support.&nbsp;<a class="footnote-backref" href="#fnref:6" title="Jump back to footnote 6 in the text"></a></p>
</li>
</ol>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2022-2025 The KernelKit Team
</div>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["toc.follow", "navigation.path", "navigation.instant", "navigation.instant.progress", "navigation.tracking", "navigation.indexes", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.footnote.tooltips"], "search": "../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.e71a0d61.min.js"></script>
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
document$.subscribe(()=>{ lightbox.reload(); });
</script></body></html>