Files
infix/dev/scripting/index.html
T

3088 lines
179 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/scripting/">
<link rel="prev" href="../discovery/">
<link rel="next" href="../tunnels/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
<title>Scripting Infix - User's Guide</title>
<link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.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&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<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>
</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="#scripting-infix" 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&#39;s Guide" class="md-header__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../jack.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"/></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">
Scripting Infix
</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"/></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"/></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"/></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"/></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"/></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"/></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"/></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 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></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&#39;s Guide" class="md-nav__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../jack.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 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></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">
About
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../networking/" class="md-nav__link">
<span class="md-ellipsis">
Network Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../system/" class="md-nav__link">
<span class="md-ellipsis">
System Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../management/" class="md-nav__link">
<span class="md-ellipsis">
System Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../upgrade/" class="md-nav__link">
<span class="md-ellipsis">
System Upgrade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../license/" class="md-nav__link">
<span class="md-ellipsis">
Origin & Licensing
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section 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="">
<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_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<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 Edítor
</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 md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" checked>
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="">
<span class="md-ellipsis">
In-Depth
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
In-Depth
</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="../dhcp/" class="md-nav__link">
<span class="md-ellipsis">
DHCP Server
</span>
</a>
</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">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Hardware Info & Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../discovery/" class="md-nav__link">
<span class="md-ellipsis">
Network Discovery
</span>
</a>
</li>
<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">
Scripting Infix
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Scripting Infix
</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="#tips" class="md-nav__link">
<span class="md-ellipsis">
Tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#admin-user-not-authorized" class="md-nav__link">
<span class="md-ellipsis">
Admin User Not Authorized?
</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="#factory-reset" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot" class="md-nav__link">
<span class="md-ellipsis">
System Reboot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#remote-control-of-ethernet-ports" class="md-nav__link">
<span class="md-ellipsis">
Remote Control of Ethernet Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#check-devices-network-connectivity" class="md-nav__link">
<span class="md-ellipsis">
Check Device's Network Connectivity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-upgrade" class="md-nav__link">
<span class="md-ellipsis">
System Upgrade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#controlling-leds-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Controlling LEDs for Production Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reading-power-feed-status-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Reading Power Feed Status for Production Tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#examples-using-ssh-and-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Examples using SSH and sysrepocfg
</span>
</a>
<nav class="md-nav" aria-label="Examples using SSH and sysrepocfg">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#factory-reset-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
System Reboot Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#remote-control-of-ethernet-ports-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Remote Control of Ethernet Ports Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabledisable-dhcpv4-client" class="md-nav__link">
<span class="md-ellipsis">
Enable/Disable DHCPv4 client
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabledisable-ipv6" class="md-nav__link">
<span class="md-ellipsis">
Enable/Disable IPv6
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#change-a-binary-setting" class="md-nav__link">
<span class="md-ellipsis">
Change a Binary Setting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#backup-configuration-using-sysrepocfg-and-scp" class="md-nav__link">
<span class="md-ellipsis">
Backup Configuration Using sysrepocfg And scp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#restore-configuration-using-sysrepocfg-and-sshscp" class="md-nav__link">
<span class="md-ellipsis">
Restore Configuration Using sysrepocfg and ssh/scp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#copy-running-to-startup-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Copy Running to Startup Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-out-hardware-information-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Read Out Hardware Information Using sysrepocfg
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#examples-using-restconf" class="md-nav__link">
<span class="md-ellipsis">
Examples using RESTCONF
</span>
</a>
<nav class="md-nav" aria-label="Examples using RESTCONF">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#factory-reset_1" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot_1" class="md-nav__link">
<span class="md-ellipsis">
System Reboot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time_1" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-hostname" class="md-nav__link">
<span class="md-ellipsis">
Read Hostname
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-hostname" class="md-nav__link">
<span class="md-ellipsis">
Set Hostname
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#copy-running-to-startup" class="md-nav__link">
<span class="md-ellipsis">
Copy Running to Startup
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#miscellaneous" class="md-nav__link">
<span class="md-ellipsis">
Miscellaneous
</span>
</a>
<nav class="md-nav" aria-label="Miscellaneous">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#port-configuration-example-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Port Configuration Example for Production Tests
</span>
</a>
<nav class="md-nav" aria-label="Port Configuration Example for Production Tests">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configuration-at-start" class="md-nav__link">
<span class="md-ellipsis">
Configuration at Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-bridge-and-adding-ports" class="md-nav__link">
<span class="md-ellipsis">
Creating Bridge and Adding Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assign-vlans-to-ports" class="md-nav__link">
<span class="md-ellipsis">
Assign VLANs to Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#connect-cables-and-test" class="md-nav__link">
<span class="md-ellipsis">
Connect Cables and Test
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#add-ip-address-on-switch" class="md-nav__link">
<span class="md-ellipsis">
Add IP Address on Switch
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</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="../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="../syslog/" class="md-nav__link">
<span class="md-ellipsis">
Syslog Support
</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="../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--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="">
<span class="md-ellipsis">
For Developers
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
For Developers
</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 & 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 Architechture
</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>
</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="#tips" class="md-nav__link">
<span class="md-ellipsis">
Tips
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#admin-user-not-authorized" class="md-nav__link">
<span class="md-ellipsis">
Admin User Not Authorized?
</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="#factory-reset" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot" class="md-nav__link">
<span class="md-ellipsis">
System Reboot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#remote-control-of-ethernet-ports" class="md-nav__link">
<span class="md-ellipsis">
Remote Control of Ethernet Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#check-devices-network-connectivity" class="md-nav__link">
<span class="md-ellipsis">
Check Device's Network Connectivity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-upgrade" class="md-nav__link">
<span class="md-ellipsis">
System Upgrade
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#controlling-leds-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Controlling LEDs for Production Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#reading-power-feed-status-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Reading Power Feed Status for Production Tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#examples-using-ssh-and-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Examples using SSH and sysrepocfg
</span>
</a>
<nav class="md-nav" aria-label="Examples using SSH and sysrepocfg">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#factory-reset-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
System Reboot Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#remote-control-of-ethernet-ports-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Remote Control of Ethernet Ports Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabledisable-dhcpv4-client" class="md-nav__link">
<span class="md-ellipsis">
Enable/Disable DHCPv4 client
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabledisable-ipv6" class="md-nav__link">
<span class="md-ellipsis">
Enable/Disable IPv6
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#change-a-binary-setting" class="md-nav__link">
<span class="md-ellipsis">
Change a Binary Setting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#backup-configuration-using-sysrepocfg-and-scp" class="md-nav__link">
<span class="md-ellipsis">
Backup Configuration Using sysrepocfg And scp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#restore-configuration-using-sysrepocfg-and-sshscp" class="md-nav__link">
<span class="md-ellipsis">
Restore Configuration Using sysrepocfg and ssh/scp
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#copy-running-to-startup-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Copy Running to Startup Using sysrepocfg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-out-hardware-information-using-sysrepocfg" class="md-nav__link">
<span class="md-ellipsis">
Read Out Hardware Information Using sysrepocfg
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#examples-using-restconf" class="md-nav__link">
<span class="md-ellipsis">
Examples using RESTCONF
</span>
</a>
<nav class="md-nav" aria-label="Examples using RESTCONF">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#factory-reset_1" class="md-nav__link">
<span class="md-ellipsis">
Factory Reset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#system-reboot_1" class="md-nav__link">
<span class="md-ellipsis">
System Reboot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-date-and-time_1" class="md-nav__link">
<span class="md-ellipsis">
Set Date and Time
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-hostname" class="md-nav__link">
<span class="md-ellipsis">
Read Hostname
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set-hostname" class="md-nav__link">
<span class="md-ellipsis">
Set Hostname
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#copy-running-to-startup" class="md-nav__link">
<span class="md-ellipsis">
Copy Running to Startup
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#miscellaneous" class="md-nav__link">
<span class="md-ellipsis">
Miscellaneous
</span>
</a>
<nav class="md-nav" aria-label="Miscellaneous">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#port-configuration-example-for-production-tests" class="md-nav__link">
<span class="md-ellipsis">
Port Configuration Example for Production Tests
</span>
</a>
<nav class="md-nav" aria-label="Port Configuration Example for Production Tests">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#configuration-at-start" class="md-nav__link">
<span class="md-ellipsis">
Configuration at Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-bridge-and-adding-ports" class="md-nav__link">
<span class="md-ellipsis">
Creating Bridge and Adding Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assign-vlans-to-ports" class="md-nav__link">
<span class="md-ellipsis">
Assign VLANs to Ports
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#connect-cables-and-test" class="md-nav__link">
<span class="md-ellipsis">
Connect Cables and Test
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#add-ip-address-on-switch" class="md-nav__link">
<span class="md-ellipsis">
Add IP Address on Switch
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="scripting-infix">Scripting Infix<a class="headerlink" href="#scripting-infix" title="Permanent link">&para;</a></h1>
<p>In some situations a user cannot, or does not want to, use the NETCONF
API for interacting with Infix. Examples include production tasks and
simpler remote scripting jobs to one or more remote devices.</p>
<p>This document assumes you have the password for the <code>admin</code> user, and
that you can connect to the device. Please see <a href="../discovery/">Finding my Device</a>
for help on locating it.</p>
<p>Furthermore, the example commands shown here that are execute from a PC
to a remote device over SSH, use Linux/UNIX. With advances lately in
both Windows and macOS, many of the user friendly tools previously only
available in Linux are now available there too.</p>
<ul>
<li>The shell prompt for the PC laptop side:</li>
</ul>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>~$
</code></pre></div>
<ul>
<li>The shell prompt when logged in to an Infix device:</li>
</ul>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>admin@example:~$
</code></pre></div>
<blockquote>
<p><strong>Note:</strong> the shell script commands used here are the raw variants
which the CLI usually wraps in a warm and snugly blanket. Meaning
they may change over time, while the CLI wrappers do <em>not</em>. That
being said, please let us know if you find any inconsistencies.</p>
</blockquote>
<h2 id="tips">Tips<a class="headerlink" href="#tips" title="Permanent link">&para;</a></h2>
<ul>
<li>Ensure the <code>admin</code> user does <em>not</em> have <code>clish</code> as login shell</li>
<li>Enable <a href="../system/#ssh-authorized-key">SSH key authentication</a></li>
<li>Deploy same SSH <em>public</em> key to many Infix devices</li>
<li>Secure your <em>private</em> SSH key using, e.g., <code>ssh-agent</code></li>
</ul>
<p>The <code>ssh-keygen</code> command, used to create the private/public key pair,
asks for a passphrase and although this is <em>technically optional</em> it is
highly recommended to set one. For ease of use, in particular when
scripting, use <code>ssh-agent</code> to avoid retyping the passphrase for every
command.</p>
<p>Useful links on SSH, keys, and using <code>ssh-agent</code>:</p>
<ul>
<li>https://en.wikipedia.org/wiki/Ssh-agent</li>
<li>https://www.cyberciti.biz/faq/how-to-use-ssh-agent-for-authentication-on-linux-unix/</li>
<li>https://goteleport.com/blog/how-to-use-ssh-agent-safely/</li>
</ul>
<h2 id="admin-user-not-authorized">Admin User Not Authorized?<a class="headerlink" href="#admin-user-not-authorized" title="Permanent link">&para;</a></h2>
<p>All system services and critical configuration files are owned by the
locked-down <code>root</code> user. It is not possible to activate the <code>root</code> user
account for remote logins. Instead, use <code>admin</code> user and the <code>sudo</code>
command prefix.</p>
<p>Here we are logged in to an example device:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>admin@example:~$ cp /cfg/startup-config.cfg /cfg/backup-config.cfg
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>cp: can&#39;t create &#39;/cfg/backup-config.cfg&#39;: Permission denied
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>admin@example:~$ sudo cp /cfg/startup-config.cfg /cfg/backup-config.cfg
</code></pre></div>
<h2 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">&para;</a></h2>
<p>The following example commands are run from the PC over SSH. The
following is a <em>very brief</em> introduction.</p>
<p>The notation is <code>ssh username@address</code>, where address can be an IPv4 or
IPv6 address, a DNS name, or an mDNS name, e.g. infix.local. In the
case of IPv6: <code>address%interface</code>, where interface differs between
operating systems. On Linux and macOS the interface name is used, but
on Windows the interface index<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> is used.</p>
<p><strong>Logging in to a device</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>~$ ssh admin@fe80::ff:fe00:0%eth0
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>The authenticity of host &#39;fe80::ff:fe00:0%eth0 (fe80::ff:fe00:0%eth0)&#39; can&#39;t be established.
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>ED25519 key fingerprint is SHA256:5/9mw64jhmYyD8MD+SwrsG3RXMBbP48pDe2T8bg14RQ.
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>This key is not known by any other names
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>Warning: Permanently added &#39;fe80::ff:fe00:0%eth0&#39; (ED25519) to the list of known hosts.
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a>admin@fe80::ff:fe00:0%eth0&#39;s password: *****
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a>.-------.
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a>| . . | Infix OS — Immutable.Friendly.Secure
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>|-. v .-| https://kernelkit.org
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a>&#39;-&#39;---&#39;-&#39;
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a>
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a>Run the command &#39;cli&#39; for interactive OAM
</code></pre></div>
<p><strong>Executing a command on a device</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>~$ ssh admin@fe80::ff:fe00:0%eth0 echo hej
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>admin@fe80::ff:fe00:0%eth0&#39;s password: *****
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>hej
</code></pre></div>
<p><strong>Made Easy</strong></p>
<p>Connecting to networked devices using IP addresses is the way many
people are used to. The above example with IPv6 tend to scare off
people, so for the rest of this document we'll use the mDNS name
instead:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>~$ ssh admin@infix.local%eth0
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>The authenticity of host &#39;infix.local%eth0 (infix.local%eth0)&#39; can&#39;t be established.
</code></pre></div>
<h3 id="factory-reset">Factory Reset<a class="headerlink" href="#factory-reset" title="Permanent link">&para;</a></h3>
<p>The command option <code>-y</code> disables any "are you sure?" interaction and
immediately triggers a factory reset and reboot of the device. It is
when the device boots up it erases all writable storage.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>~$ ssh admin@infix.local%eth0 factory -y
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>admin@infix.local%eth0&#39;s password: *****
</code></pre></div>
<h3 id="system-reboot">System Reboot<a class="headerlink" href="#system-reboot" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>~$ ssh admin@infix.local%eth0 reboot
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>admin@infix.local%eth0&#39;s password: *****
</code></pre></div>
<h3 id="set-date-and-time">Set Date and Time<a class="headerlink" href="#set-date-and-time" title="Permanent link">&para;</a></h3>
<p>Devices running Infix may have their system time completely off and this
can cause problems for upgrading and when accessing the web interface
over HTTPS (certificate validation looks at start and end dates).</p>
<p>To set the device's system time, <em>and</em> sync that with the RTC:
use the PCs current time as argument:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>~$ ssh admin@infix.local%eth0 &quot;sudo date -s &#39;2024-03-20 18:14+01:00&#39; &amp;&amp; sudo hwclock -w -u&quot;
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>admin@infix.local%eth0&#39;s password: *****
</code></pre></div>
<blockquote>
<p>The <code>-u</code> option ensures saving system time to the RTC in UTC time.</p>
</blockquote>
<p>Verify that the change took:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>~$ ssh admin@infix.local%eth0 date
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>admin@infix.local%eth0&#39;s password: *****
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a>Wed Mar 20 17:14:47 UTC 2024
</code></pre></div>
<h3 id="remote-control-of-ethernet-ports">Remote Control of Ethernet Ports<a class="headerlink" href="#remote-control-of-ethernet-ports" title="Permanent link">&para;</a></h3>
<p>There are two ways to do it:</p>
<ol>
<li>Change the configuration without saving it to <code>startup-config</code></li>
<li>Change the operational state</li>
</ol>
<p>The first involves sending a NETCONF command/config in XML. The second
we will cover here. We start by querying available interfaces (ports) on
the remote system:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>~$ ssh admin@infix.local%qtap0 ip -br a
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>admin@infix.local%qtap0&#39;s password:
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a>lo UP 127.0.0.1/8 ::1/128
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a>e0 UP fe80::ff:fe00:0/64
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a>e1 UP
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a>e2 UP
<a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a>e3 UP
<a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a>e4 UP
<a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a>e5 UP fe80::ff:fe00:5/64
<a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a>e6 UP fe80::ff:fe00:6/64
<a id="__codelineno-10-11" name="__codelineno-10-11" href="#__codelineno-10-11"></a>e7 UP fe80::ff:fe00:7/64
<a id="__codelineno-10-12" name="__codelineno-10-12" href="#__codelineno-10-12"></a>e8 UP fe80::ff:fe00:8/64
<a id="__codelineno-10-13" name="__codelineno-10-13" href="#__codelineno-10-13"></a>e9 UP 192.168.2.200/24 fe80::ff:fe00:9/64
<a id="__codelineno-10-14" name="__codelineno-10-14" href="#__codelineno-10-14"></a>br0 UP
</code></pre></div>
<p>Here we see a loopback interface (lo), ten Ethernet ports (e0-e9) and a
bridge (br0). From this quick glance we can guess that the ports e1-e4
are bridged (you can verify this with the remote command <code>bridge link</code>)
because they do not have a link-local IPv6 address.</p>
<p>I know it's port e6 that I want to take down:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>~$ ssh admin@infix.local%qtap0 ip link set e6 down
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>admin@infix.local%qtap0&#39;s password:
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a>RTNETLINK answers: Operation not permitted
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>~$ ssh admin@infix.local%qtap0 sudo ip link set e6 down
<a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a>admin@infix.local%qtap0&#39;s password:
</code></pre></div>
<p>Changing the operational link state of a port is a privileged command,
so we have to prefix our command with <code>sudo</code>.</p>
<p>Inspecting the link state again show the port is now down:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>~$ ssh admin@infix.local%qtap0 ip -br a
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>admin@infix.local%qtap0&#39;s password:
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>lo UP 127.0.0.1/8 ::1/128
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>e0 UP fe80::ff:fe00:0/64
<a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a>e1 UP
<a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a>e2 UP
<a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a>e3 UP
<a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a>e4 UP
<a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a>e5 UP fe80::ff:fe00:5/64
<a id="__codelineno-12-10" name="__codelineno-12-10" href="#__codelineno-12-10"></a>e6 DOWN
<a id="__codelineno-12-11" name="__codelineno-12-11" href="#__codelineno-12-11"></a>e7 UP fe80::ff:fe00:7/64
<a id="__codelineno-12-12" name="__codelineno-12-12" href="#__codelineno-12-12"></a>e8 UP fe80::ff:fe00:8/64
<a id="__codelineno-12-13" name="__codelineno-12-13" href="#__codelineno-12-13"></a>e9 UP 192.168.2.200/24 fe80::ff:fe00:9/64
<a id="__codelineno-12-14" name="__codelineno-12-14" href="#__codelineno-12-14"></a>br0 UP
</code></pre></div>
<h3 id="check-devices-network-connectivity">Check Device's Network Connectivity<a class="headerlink" href="#check-devices-network-connectivity" title="Permanent link">&para;</a></h3>
<p>Say you want to perform a [System Upgrade][#system-uprgade] and it just
doesn't work, then you might want to ensure the device actually can
reach the upgrade server.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>~$ ssh admin@infix.local%eth0 ping -c 3 server.local
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>admin@infix.local%qtap0&#39;s password: *****
<a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>PING server.local (192.168.2.42) 56(84) bytes of data.
<a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a>64 bytes from server.local: icmp_seq=1 ttl=64 time=0.201 ms
<a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a>64 bytes from server.local: icmp_seq=2 ttl=64 time=0.432 ms
<a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a>64 bytes from server.local: icmp_seq=3 ttl=64 time=0.427 ms
<a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a>
<a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a>--- server.local ping statistics ---
<a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>3 packets transmitted, 3 received, 0% packet loss, time 2050ms
<a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a>rtt min/avg/max/mdev = 0.201/0.353/0.432/0.107 ms
</code></pre></div>
<p>Here we get a reply, so whatever is the issue with the upgrade was
not hiding behind a connectivity issue at least.</p>
<h3 id="system-upgrade">System Upgrade<a class="headerlink" href="#system-upgrade" title="Permanent link">&para;</a></h3>
<p>The underlying software that handles upgrades is called <a href="https://rauc.io/">RAUC</a>. To
trigger an upgrade you (currently) need an FTP/TFTP or HTTP/HTTPS server
where RAUC can fetch the upgrade from. In this example we use an FTP
server to upgrade the currently inactive "slot":</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>~$ ssh admin@infix.local%eth0 rauc install ftp://server.local/infix-aarch64-24.06.0.pkg
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>admin@infix.local%eth0&#39;s password: *****
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>installing
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> 0% Installing
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> 0% Determining slot states
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> 20% Determining slot states done.
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> 20% Checking bundle
<a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> 20% Verifying signature
<a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> 40% Verifying signature done.
<a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> 40% Checking bundle done.
<a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> 40% Checking manifest contents
<a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> 60% Checking manifest contents done.
<a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> 60% Determining target install group
<a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> 80% Determining target install group done.
<a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a> 80% Updating slots
<a id="__codelineno-14-16" name="__codelineno-14-16" href="#__codelineno-14-16"></a> 80% Checking slot rootfs.1
<a id="__codelineno-14-17" name="__codelineno-14-17" href="#__codelineno-14-17"></a> 90% Checking slot rootfs.1 done.
<a id="__codelineno-14-18" name="__codelineno-14-18" href="#__codelineno-14-18"></a> 90% Copying image to rootfs.1
<a id="__codelineno-14-19" name="__codelineno-14-19" href="#__codelineno-14-19"></a> 99% Copying image to rootfs.1 done.
<a id="__codelineno-14-20" name="__codelineno-14-20" href="#__codelineno-14-20"></a> 99% Updating slots done.
<a id="__codelineno-14-21" name="__codelineno-14-21" href="#__codelineno-14-21"></a>100% Installing done.
<a id="__codelineno-14-22" name="__codelineno-14-22" href="#__codelineno-14-22"></a>idle
<a id="__codelineno-14-23" name="__codelineno-14-23" href="#__codelineno-14-23"></a>Installing `ftp://server.local/infix-aarch64-24.06.0.pkg` succeeded
<a id="__codelineno-14-24" name="__codelineno-14-24" href="#__codelineno-14-24"></a>~$
</code></pre></div>
<p>The inactive slot is now marked active and will be used on the next
boot. To upgrade the partition we booted from, we must first reboot.</p>
<p>For more information, see the <a href="../boot/#system-upgrade">Boot Procedure</a> document.</p>
<p><strong>Alternative:</strong></p>
<p>If you know your device has sufficient storage, eMMC or RAM disk (check
with the remote command <code>df -h</code>), you can also copy the <code>.pkg</code> file to
the device instead of having to set up an FTP/TFTP or HTTP/HTTPS server.</p>
<p>Create an upload directory where <code>admin</code> has write permission:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>~$ ssh admin@infix.local%eth0 &quot;sudo mkdir /var/tmp/upload; sudo chown admin /var/tmp/upload&quot;
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>admin@infix.local%eth0&#39;s password:
</code></pre></div>
<p>Copy the file with secure copy, first we show the nasty IPv6 version of
the command:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>~$ scp infix-aarch64-24.06.0.pkg admin@\[fe80::ff:fe00:0%eth0\]:/var/tmp/upload/
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>admin@fe80::ff:fe00:0%eth0&#39;s password:
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>infix-aarch64-24.06.0.pkg 100% 296 601.4KB/s 00:00
</code></pre></div>
<p>And the upgrade command itself:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>~$ ssh admin@infix.local%eth0 rauc install /var/tmp/upload/infix-aarch64-24.06.0.pkg
<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>admin@infix.local%eth0&#39;s password: *****
<a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a>.
<a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a>.
<a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a>.
</code></pre></div>
<p>Remember to remove the file from the upload directory when you are done,
this can be done before or after the reboot to activate the upgrade. If
you want to upgrade both "slots", then you can of course keep the file
until you are done (provided the upload directory was created on
persistent storage).</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>~$ ssh admin@infix.local%eth0 rm /var/tmp/upload/infix-aarch64-24.06.0.pkg
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>admin@infix.local%eth0&#39;s password: *****
<a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a>~$
</code></pre></div>
<h3 id="controlling-leds-for-production-tests">Controlling LEDs for Production Tests<a class="headerlink" href="#controlling-leds-for-production-tests" title="Permanent link">&para;</a></h3>
<p>As part of production testing, LED verification is often expected to
be performed. Infix uses standard <a href="https://docs.kernel.org/leds/leds-class.html">Linux support for LED
management</a>, where LEDs appear in the file system under
/sys/class/leds and can be controlled using <em>echo</em> command. <code>sudo</code>
privileges are required.</p>
<p>When interacting with LEDs this way, first disable the Infix <em>iitod</em>
daemon to avoid conflicting LED control.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>~$ ssh admin@example.local &#39;initctl stop iitod&#39;
</code></pre></div>
<p>Then run the test, e.g., visually control that a red LED labeled
'LAN' is working.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>~$ ssh admin@example.local &#39;echo none | sudo tee /sys/class/leds/red\:lan/trigger&#39;
<a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>~$ ssh admin@example.local &#39;echo 1 | sudo tee /sys/class/leds/red\:lan/brightness&#39;
</code></pre></div>
<p>To turn off the same LED, run the following commands.</p>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>~$ ssh admin@example.local &#39;echo none | sudo tee /sys/class/leds/red\:lan/trigger&#39;
<a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>~$ ssh admin@example.local &#39;echo 0 | sudo tee /sys/class/leds/red\:lan/brightness&#39;
</code></pre></div>
When done with LED testing, enable Infix <em>iitod</em> daemon again.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>~$ ssh admin@example.local &#39;initctl start iitod&#39;
</code></pre></div>
<h3 id="reading-power-feed-status-for-production-tests">Reading Power Feed Status for Production Tests<a class="headerlink" href="#reading-power-feed-status-for-production-tests" title="Permanent link">&para;</a></h3>
<p>As part of production tests, verification of Power Feed sensors is
often expected to be performed. Infix uses standard <a href="https://docs.kernel.org/power/power_supply_class.html">Linux support for
Power management</a>, where power sources appear in the file system
under /sys/class/power_supply. The following example reads status of
two power supplies named <em>pwr1</em> and <em>pwr2</em>.</p>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>~$ ssh admin@example &#39;cat /sys/class/power_supply/pwr1/online&#39;
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a>1
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a>~$ ssh admin@example &#39;cat /sys/class/power_supply/pwr2/online&#39;
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a>0
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a>~$
</code></pre></div>
Here, only <em>pwr1</em> happened to have power. </p>
<h2 id="examples-using-ssh-and-sysrepocfg">Examples using SSH and sysrepocfg<a class="headerlink" href="#examples-using-ssh-and-sysrepocfg" title="Permanent link">&para;</a></h2>
<p><a href="https://netopeer.liberouter.org/doc/sysrepo/libyang1/html/sysrepocfg.html">sysrepocfg</a> can be used to interact with the YANG models when logged
in to infix. Thus, <em>set config</em>, <em>read config</em>, <em>read status</em> and
<em>RPC</em> can be conducted using sysrepocfg for supported YANG models.
It is possible to make configuration changes by operating on the
<em>startup</em> database.</p>
<p>See <a href="https://netopeer.liberouter.org/doc/sysrepo/libyang1/html/sysrepocfg.html">sysrepocfg</a> for information. Examples below will utilize </p>
<ul>
<li><code>sysrepocfg -I FILE -fjson -d DATABASE</code> to import/write a JSON
formatted configuration file to the specified database.</li>
<li><code>sysrepocfg -E FILE -fjson -d DATABASE</code> to edit/merge JSON formatted
configuration in FILE with the specified database.</li>
<li><code>sysrepocfg -R FILE -fjson</code> to execute remote procedure call (RPC) defined in
FILE (JSON formatted). </li>
<li><code>sysrepocfg -X -fjson -d DATABASE -x xpath</code> to read configuration or
status from specified database.</li>
</ul>
<p>For importing (-I) and editing (-E), <code>-d running</code> is typically used in
examples below. Specify <code>-d startup</code> to apply changes to startup
configuration. Exporting (-X) could operate on configuration (e.g.,
<code>-d running</code>) or status (<code>-d operational</code>).</p>
<p>Some commands require a file as input. In examples below we assume
it been transferred to Infix in advance, e.g. using <code>scp</code> as shown below.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>~$ cat file.json
<a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a>{
<a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a> &quot;ietf-factory-default:factory-reset&quot;: {
<a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a> }
<a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a>}
<a id="__codelineno-24-6" name="__codelineno-24-6" href="#__codelineno-24-6"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-24-7" name="__codelineno-24-7" href="#__codelineno-24-7"></a>~$
</code></pre></div>
<h3 id="factory-reset-using-sysrepocfg">Factory Reset Using sysrepocfg<a class="headerlink" href="#factory-reset-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>~$ cat file.json
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a>{
<a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a> &quot;ietf-factory-default:factory-reset&quot;: {
<a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a> }
<a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a>}
<a id="__codelineno-25-6" name="__codelineno-25-6" href="#__codelineno-25-6"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-25-7" name="__codelineno-25-7" href="#__codelineno-25-7"></a>~$ ssh admin@example.local &#39;sysrepocfg -fjson -R /tmp/file.json&#39;
<a id="__codelineno-25-8" name="__codelineno-25-8" href="#__codelineno-25-8"></a>^C
<a id="__codelineno-25-9" name="__codelineno-25-9" href="#__codelineno-25-9"></a>~$
</code></pre></div>
See <a href="#factory-reset">Factory Reset</a> for another (simpler) alternative.</p>
<p>If it is only wished to copy factory config to running config the
following RPC is available</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>~$ cat file.json
<a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a>{
<a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a> &quot;infix-factory-default:factory-default&quot;: {
<a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a> }
<a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a>}
<a id="__codelineno-26-6" name="__codelineno-26-6" href="#__codelineno-26-6"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-26-7" name="__codelineno-26-7" href="#__codelineno-26-7"></a>~$ ssh admin@example.local &#39;sysrepocfg -fjson -R /tmp/file.json&#39;
<a id="__codelineno-26-8" name="__codelineno-26-8" href="#__codelineno-26-8"></a>^C
<a id="__codelineno-26-9" name="__codelineno-26-9" href="#__codelineno-26-9"></a>~$
</code></pre></div>
<h3 id="system-reboot-using-sysrepocfg">System Reboot Using sysrepocfg<a class="headerlink" href="#system-reboot-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>~$ cat /tmp/file.json
<a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a>{
<a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a> &quot;ietf-system:system-restart&quot;: {
<a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a> }
<a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a>}
<a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a>~$ ssh admin@example.local &#39;sysrepocfg -fjson -R /tmp/file.json&#39;
<a id="__codelineno-27-8" name="__codelineno-27-8" href="#__codelineno-27-8"></a>~$
</code></pre></div>
See <a href="#system-reboot">System Reboot</a> for another (simpler) alternative.</p>
<h3 id="set-date-and-time-using-sysrepocfg">Set Date and Time Using sysrepocfg<a class="headerlink" href="#set-date-and-time-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p><div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>~$ ssh admin@example.local &#39;date&#39;
<a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a>Sun Nov 20 10:20:23 UTC 2005
<a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a>~$ cat file.json
<a id="__codelineno-28-4" name="__codelineno-28-4" href="#__codelineno-28-4"></a>{
<a id="__codelineno-28-5" name="__codelineno-28-5" href="#__codelineno-28-5"></a> &quot;ietf-system:set-current-datetime&quot;: {
<a id="__codelineno-28-6" name="__codelineno-28-6" href="#__codelineno-28-6"></a> &quot;current-datetime&quot;: &quot;2024-04-17T13:48:02-01:00&quot;
<a id="__codelineno-28-7" name="__codelineno-28-7" href="#__codelineno-28-7"></a> }
<a id="__codelineno-28-8" name="__codelineno-28-8" href="#__codelineno-28-8"></a>}
<a id="__codelineno-28-9" name="__codelineno-28-9" href="#__codelineno-28-9"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-28-10" name="__codelineno-28-10" href="#__codelineno-28-10"></a>~$ ssh admin@example.local &#39;sysrepocfg -fjson -R /tmp/file.json&#39;
<a id="__codelineno-28-11" name="__codelineno-28-11" href="#__codelineno-28-11"></a>~$ ssh admin@example.local &#39;date&#39;
<a id="__codelineno-28-12" name="__codelineno-28-12" href="#__codelineno-28-12"></a>Wed Apr 17 14:48:12 UTC 2024
<a id="__codelineno-28-13" name="__codelineno-28-13" href="#__codelineno-28-13"></a>~$
</code></pre></div>
See <a href="#set-date-and-time">Set Date and Time</a> for another (simpler) alternative.</p>
<h3 id="remote-control-of-ethernet-ports-using-sysrepocfg">Remote Control of Ethernet Ports Using sysrepocfg<a class="headerlink" href="#remote-control-of-ethernet-ports-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p>Reading administrative status of interface <em>e0</em> of running configuration.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d running -e report-all -x \&quot;/ietf-interfaces:interfaces/interface[name=&#39;e0&#39;]/enabled\&quot;&#39;
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>{
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a> &quot;ietf-interfaces:interfaces&quot;: {
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a> &quot;interface&quot;: [
<a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a> {
<a id="__codelineno-29-6" name="__codelineno-29-6" href="#__codelineno-29-6"></a> &quot;name&quot;: &quot;e0&quot;,
<a id="__codelineno-29-7" name="__codelineno-29-7" href="#__codelineno-29-7"></a> &quot;enabled&quot;: true
<a id="__codelineno-29-8" name="__codelineno-29-8" href="#__codelineno-29-8"></a> }
<a id="__codelineno-29-9" name="__codelineno-29-9" href="#__codelineno-29-9"></a> ]
<a id="__codelineno-29-10" name="__codelineno-29-10" href="#__codelineno-29-10"></a> }
<a id="__codelineno-29-11" name="__codelineno-29-11" href="#__codelineno-29-11"></a>}
<a id="__codelineno-29-12" name="__codelineno-29-12" href="#__codelineno-29-12"></a>~$
</code></pre></div>
<blockquote>
<p>Note: Without <code>-e report-all</code> argument the line <code>"enabled: true</code>
would not be shown as <code>true</code> is default.</p>
</blockquote>
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>~$ ssh admin@example.local &quot;sysrepocfg -X -fjson -d running -x \&quot;/ietf-interfaces:interfaces/interface[name=&#39;e0&#39;]/enabled\&quot;&quot;
<a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a>{
<a id="__codelineno-30-3" name="__codelineno-30-3" href="#__codelineno-30-3"></a> &quot;ietf-interfaces:interfaces&quot;: {
<a id="__codelineno-30-4" name="__codelineno-30-4" href="#__codelineno-30-4"></a> &quot;interface&quot;: [
<a id="__codelineno-30-5" name="__codelineno-30-5" href="#__codelineno-30-5"></a> {
<a id="__codelineno-30-6" name="__codelineno-30-6" href="#__codelineno-30-6"></a> &quot;name&quot;: &quot;e0&quot;
<a id="__codelineno-30-7" name="__codelineno-30-7" href="#__codelineno-30-7"></a> }
<a id="__codelineno-30-8" name="__codelineno-30-8" href="#__codelineno-30-8"></a> ]
<a id="__codelineno-30-9" name="__codelineno-30-9" href="#__codelineno-30-9"></a> }
<a id="__codelineno-30-10" name="__codelineno-30-10" href="#__codelineno-30-10"></a>}
<a id="__codelineno-30-11" name="__codelineno-30-11" href="#__codelineno-30-11"></a>~$
</code></pre></div>
<p>Setting the administrative status of interface <em>e0</em> of running configuration.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>$ cat file.json
<a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a>{
<a id="__codelineno-31-3" name="__codelineno-31-3" href="#__codelineno-31-3"></a> &quot;ietf-interfaces:interfaces&quot;: {
<a id="__codelineno-31-4" name="__codelineno-31-4" href="#__codelineno-31-4"></a> &quot;interface&quot;: [
<a id="__codelineno-31-5" name="__codelineno-31-5" href="#__codelineno-31-5"></a> {
<a id="__codelineno-31-6" name="__codelineno-31-6" href="#__codelineno-31-6"></a> &quot;name&quot;: &quot;e0&quot;,
<a id="__codelineno-31-7" name="__codelineno-31-7" href="#__codelineno-31-7"></a> &quot;enabled&quot;: false
<a id="__codelineno-31-8" name="__codelineno-31-8" href="#__codelineno-31-8"></a> }
<a id="__codelineno-31-9" name="__codelineno-31-9" href="#__codelineno-31-9"></a> ]
<a id="__codelineno-31-10" name="__codelineno-31-10" href="#__codelineno-31-10"></a> }
<a id="__codelineno-31-11" name="__codelineno-31-11" href="#__codelineno-31-11"></a>}
<a id="__codelineno-31-12" name="__codelineno-31-12" href="#__codelineno-31-12"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-31-13" name="__codelineno-31-13" href="#__codelineno-31-13"></a>~$ ssh admin@example.local &#39;sysrepocfg -E /tmp/file.json -fjson -d running&#39;
<a id="__codelineno-31-14" name="__codelineno-31-14" href="#__codelineno-31-14"></a>~$
</code></pre></div>
<h3 id="enabledisable-dhcpv4-client">Enable/Disable DHCPv4 client<a class="headerlink" href="#enabledisable-dhcpv4-client" title="Permanent link">&para;</a></h3>
<p>Enabling DHCPv4 client on interface <em>e0</em>, with current default options.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>~$ cat /tmp/file.json
<a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a>{
<a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a> &quot;infix-dhcp-client:dhcp-client&quot;: {
<a id="__codelineno-32-4" name="__codelineno-32-4" href="#__codelineno-32-4"></a> &quot;enabled&quot;: true,
<a id="__codelineno-32-5" name="__codelineno-32-5" href="#__codelineno-32-5"></a> &quot;client-if&quot;: [
<a id="__codelineno-32-6" name="__codelineno-32-6" href="#__codelineno-32-6"></a> {
<a id="__codelineno-32-7" name="__codelineno-32-7" href="#__codelineno-32-7"></a> &quot;if-name&quot;: &quot;e0&quot;
<a id="__codelineno-32-8" name="__codelineno-32-8" href="#__codelineno-32-8"></a> }
<a id="__codelineno-32-9" name="__codelineno-32-9" href="#__codelineno-32-9"></a> ]
<a id="__codelineno-32-10" name="__codelineno-32-10" href="#__codelineno-32-10"></a> }
<a id="__codelineno-32-11" name="__codelineno-32-11" href="#__codelineno-32-11"></a>}
<a id="__codelineno-32-12" name="__codelineno-32-12" href="#__codelineno-32-12"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-32-13" name="__codelineno-32-13" href="#__codelineno-32-13"></a>~$ ssh admin@example.local &#39;sysrepocfg -E /tmp/file.json -fjson -d running&#39;
<a id="__codelineno-32-14" name="__codelineno-32-14" href="#__codelineno-32-14"></a>~$
</code></pre></div>
<p>Disabling DHCPv4 client. </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>~$ cat /tmp/file.json
<a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a>{
<a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a> &quot;infix-dhcp-client:dhcp-client&quot;: {
<a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a> &quot;enabled&quot;: false
<a id="__codelineno-33-5" name="__codelineno-33-5" href="#__codelineno-33-5"></a> }
<a id="__codelineno-33-6" name="__codelineno-33-6" href="#__codelineno-33-6"></a>}
<a id="__codelineno-33-7" name="__codelineno-33-7" href="#__codelineno-33-7"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-33-8" name="__codelineno-33-8" href="#__codelineno-33-8"></a>~$ ssh admin@example.local &#39;sysrepocfg -E /tmp/file.json -fjson -d running&#39;
<a id="__codelineno-33-9" name="__codelineno-33-9" href="#__codelineno-33-9"></a>~$
</code></pre></div>
<p>Configuration for client interface <em>e0</em> remains, but does not apply as
DHCPv4 is disabled. </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>admin@example:~$ sysrepocfg -X -fjson -d running -x &quot;/infix-dhcp-client:dhcp-client&quot;
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a>{
<a id="__codelineno-34-3" name="__codelineno-34-3" href="#__codelineno-34-3"></a> &quot;infix-dhcp-client:dhcp-client&quot;: {
<a id="__codelineno-34-4" name="__codelineno-34-4" href="#__codelineno-34-4"></a> &quot;enabled&quot;: false,
<a id="__codelineno-34-5" name="__codelineno-34-5" href="#__codelineno-34-5"></a> &quot;client-if&quot;: [
<a id="__codelineno-34-6" name="__codelineno-34-6" href="#__codelineno-34-6"></a> {
<a id="__codelineno-34-7" name="__codelineno-34-7" href="#__codelineno-34-7"></a> &quot;if-name&quot;: &quot;e0&quot;
<a id="__codelineno-34-8" name="__codelineno-34-8" href="#__codelineno-34-8"></a> }
<a id="__codelineno-34-9" name="__codelineno-34-9" href="#__codelineno-34-9"></a> ]
<a id="__codelineno-34-10" name="__codelineno-34-10" href="#__codelineno-34-10"></a> }
<a id="__codelineno-34-11" name="__codelineno-34-11" href="#__codelineno-34-11"></a>}
<a id="__codelineno-34-12" name="__codelineno-34-12" href="#__codelineno-34-12"></a>admin@example:~$
</code></pre></div>
<p>To fully remove the DHCPv4 client configuration or a specific
<em>client-if</em> with sysrepocfg, one would need to read out the full
configuration, remove relevant parts and read back.</p>
<h3 id="enabledisable-ipv6">Enable/Disable IPv6<a class="headerlink" href="#enabledisable-ipv6" title="Permanent link">&para;</a></h3>
<p>IPv6 is typically enabled on all interfaces by default. The example
below shows IPv4 and IPv6 addresses assigned on <em>e0</em>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>~$ ssh admin@example.local &#39;ip addr show dev e0&#39;
<a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a>2: e0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
<a id="__codelineno-35-3" name="__codelineno-35-3" href="#__codelineno-35-3"></a> link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
<a id="__codelineno-35-4" name="__codelineno-35-4" href="#__codelineno-35-4"></a> inet 10.0.2.15/24 scope global proto dhcp e0
<a id="__codelineno-35-5" name="__codelineno-35-5" href="#__codelineno-35-5"></a> valid_lft forever preferred_lft forever
<a id="__codelineno-35-6" name="__codelineno-35-6" href="#__codelineno-35-6"></a> inet6 fec0::ff:fe00:0/64 scope site dynamic mngtmpaddr proto kernel_ra
<a id="__codelineno-35-7" name="__codelineno-35-7" href="#__codelineno-35-7"></a> valid_lft 86380sec preferred_lft 14380sec
<a id="__codelineno-35-8" name="__codelineno-35-8" href="#__codelineno-35-8"></a> inet6 fe80::ff:fe00:0/64 scope link proto kernel_ll
<a id="__codelineno-35-9" name="__codelineno-35-9" href="#__codelineno-35-9"></a> valid_lft forever preferred_lft forever
<a id="__codelineno-35-10" name="__codelineno-35-10" href="#__codelineno-35-10"></a>~$
</code></pre></div>
<p>IPv6 is enabled/disabled per interface. The example below disables IPv6
on interface <em>e0</em>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>~$ cat /tmp/file.json
<a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a>{
<a id="__codelineno-36-3" name="__codelineno-36-3" href="#__codelineno-36-3"></a> &quot;ietf-interfaces:interfaces&quot;: {
<a id="__codelineno-36-4" name="__codelineno-36-4" href="#__codelineno-36-4"></a> &quot;interface&quot;: [
<a id="__codelineno-36-5" name="__codelineno-36-5" href="#__codelineno-36-5"></a> {
<a id="__codelineno-36-6" name="__codelineno-36-6" href="#__codelineno-36-6"></a> &quot;name&quot;: &quot;e0&quot;,
<a id="__codelineno-36-7" name="__codelineno-36-7" href="#__codelineno-36-7"></a> &quot;ietf-ip:ipv6&quot;: {
<a id="__codelineno-36-8" name="__codelineno-36-8" href="#__codelineno-36-8"></a> &quot;enabled&quot;: false
<a id="__codelineno-36-9" name="__codelineno-36-9" href="#__codelineno-36-9"></a> }
<a id="__codelineno-36-10" name="__codelineno-36-10" href="#__codelineno-36-10"></a> }
<a id="__codelineno-36-11" name="__codelineno-36-11" href="#__codelineno-36-11"></a> ]
<a id="__codelineno-36-12" name="__codelineno-36-12" href="#__codelineno-36-12"></a> }
<a id="__codelineno-36-13" name="__codelineno-36-13" href="#__codelineno-36-13"></a>}
<a id="__codelineno-36-14" name="__codelineno-36-14" href="#__codelineno-36-14"></a>~$ scp file.json admin@example.local:/tmp/file.json
<a id="__codelineno-36-15" name="__codelineno-36-15" href="#__codelineno-36-15"></a>~$ ssh admin@example.local &#39;sysrepocfg -E /tmp/file.json -fjson -d running&#39;
<a id="__codelineno-36-16" name="__codelineno-36-16" href="#__codelineno-36-16"></a>~$ ssh admin@example.local &#39;ip addr show dev e0&#39;
<a id="__codelineno-36-17" name="__codelineno-36-17" href="#__codelineno-36-17"></a>2: e0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
<a id="__codelineno-36-18" name="__codelineno-36-18" href="#__codelineno-36-18"></a> link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
<a id="__codelineno-36-19" name="__codelineno-36-19" href="#__codelineno-36-19"></a> inet 10.0.2.15/24 scope global proto dhcp e0
<a id="__codelineno-36-20" name="__codelineno-36-20" href="#__codelineno-36-20"></a> valid_lft forever preferred_lft forever
<a id="__codelineno-36-21" name="__codelineno-36-21" href="#__codelineno-36-21"></a>~$
</code></pre></div>
<h3 id="change-a-binary-setting">Change a Binary Setting<a class="headerlink" href="#change-a-binary-setting" title="Permanent link">&para;</a></h3>
<p>A YANG <code>binary</code> type setting is Base64 encoded and requires a little bit
more tricks. We take the opportunity to showcase a shell script helper:
<code>/usr/bin/text-editor</code>, which works just like the <code>text-editor</code> command
in the CLI, but this one takes an XPath argument to the binary leaf to
edit.</p>
<p>Stripped down, it looks something like this:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a><span class="k">if</span><span class="w"> </span><span class="nv">tmp</span><span class="o">=</span><span class="k">$(</span>sysrepocfg<span class="w"> </span>-G<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$xpath</span><span class="s2">&quot;</span><span class="k">)</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a><span class="w"> </span><span class="nv">file</span><span class="o">=</span><span class="k">$(</span>mktemp<span class="k">)</span>
<a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a>
<a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$tmp</span><span class="s2">&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>base64<span class="w"> </span>-d<span class="w"> </span>&gt;<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span>
<a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span>edit<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a><span class="w"> </span><span class="nv">tmp</span><span class="o">=</span><span class="k">$(</span>base64<span class="w"> </span>-w0<span class="w"> </span>&lt;<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span><span class="k">)</span>
<a id="__codelineno-37-7" name="__codelineno-37-7" href="#__codelineno-37-7"></a><span class="w"> </span>sysrepocfg<span class="w"> </span>-S<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$xpath</span><span class="s2">&quot;</span><span class="w"> </span>-u<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$tmp</span><span class="s2">&quot;</span>
<a id="__codelineno-37-8" name="__codelineno-37-8" href="#__codelineno-37-8"></a><span class="w"> </span><span class="k">fi</span>
<a id="__codelineno-37-9" name="__codelineno-37-9" href="#__codelineno-37-9"></a>
<a id="__codelineno-37-10" name="__codelineno-37-10" href="#__codelineno-37-10"></a><span class="w"> </span>rm<span class="w"> </span>-f<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span>
<a id="__codelineno-37-11" name="__codelineno-37-11" href="#__codelineno-37-11"></a><span class="k">else</span>
<a id="__codelineno-37-12" name="__codelineno-37-12" href="#__codelineno-37-12"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;Failed to retrieve value for </span><span class="nv">$xpath</span><span class="s2">&quot;</span>
<a id="__codelineno-37-13" name="__codelineno-37-13" href="#__codelineno-37-13"></a><span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<a id="__codelineno-37-14" name="__codelineno-37-14" href="#__codelineno-37-14"></a><span class="k">fi</span>
</code></pre></div>
<p>An example container configuration, with an embedded file that is
mounted to <code>/var/www/index.html</code> can look like this:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a><span class="w"> </span><span class="nt">&quot;infix-containers:containers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a><span class="w"> </span><span class="nt">&quot;container&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-38-3" name="__codelineno-38-3" href="#__codelineno-38-3"></a><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-38-4" name="__codelineno-38-4" href="#__codelineno-38-4"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;web&quot;</span><span class="p">,</span>
<a id="__codelineno-38-5" name="__codelineno-38-5" href="#__codelineno-38-5"></a><span class="w"> </span><span class="nt">&quot;image&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;oci-archive:/lib/oci/curios-httpd-latest.tar.gz&quot;</span><span class="p">,</span>
<a id="__codelineno-38-6" name="__codelineno-38-6" href="#__codelineno-38-6"></a><span class="w"> </span><span class="nt">&quot;hostname&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;web&quot;</span><span class="p">,</span>
<a id="__codelineno-38-7" name="__codelineno-38-7" href="#__codelineno-38-7"></a><span class="w"> </span><span class="nt">&quot;network&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-38-8" name="__codelineno-38-8" href="#__codelineno-38-8"></a><span class="w"> </span><span class="nt">&quot;interface&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-38-9" name="__codelineno-38-9" href="#__codelineno-38-9"></a><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-38-10" name="__codelineno-38-10" href="#__codelineno-38-10"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;veth-sys0&quot;</span>
<a id="__codelineno-38-11" name="__codelineno-38-11" href="#__codelineno-38-11"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-38-12" name="__codelineno-38-12" href="#__codelineno-38-12"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-38-13" name="__codelineno-38-13" href="#__codelineno-38-13"></a><span class="w"> </span><span class="p">},</span>
<a id="__codelineno-38-14" name="__codelineno-38-14" href="#__codelineno-38-14"></a><span class="w"> </span><span class="nt">&quot;mount&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-38-15" name="__codelineno-38-15" href="#__codelineno-38-15"></a><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-38-16" name="__codelineno-38-16" href="#__codelineno-38-16"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;index.html&quot;</span><span class="p">,</span>
<a id="__codelineno-38-17" name="__codelineno-38-17" href="#__codelineno-38-17"></a><span class="w"> </span><span class="nt">&quot;content&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;PCFET0NUWVBFIGh0bWwjibberish.shortened.down==&quot;</span><span class="p">,</span>
<a id="__codelineno-38-18" name="__codelineno-38-18" href="#__codelineno-38-18"></a><span class="w"> </span><span class="nt">&quot;target&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/var/www/index.html&quot;</span>
<a id="__codelineno-38-19" name="__codelineno-38-19" href="#__codelineno-38-19"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-38-20" name="__codelineno-38-20" href="#__codelineno-38-20"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-38-21" name="__codelineno-38-21" href="#__codelineno-38-21"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-38-22" name="__codelineno-38-22" href="#__codelineno-38-22"></a><span class="w"> </span><span class="p">]</span>
<a id="__codelineno-38-23" name="__codelineno-38-23" href="#__codelineno-38-23"></a><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The command to edit this file, and restart the container with the new
contents, look like this:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>admin@infix:~$ cfg edit &quot;/infix-containers:containers/container[name=&#39;web&#39;]/mount[name=&#39;index.html&#39;]/content&quot;
</code></pre></div>
<h3 id="backup-configuration-using-sysrepocfg-and-scp"><a id="backup"></a> Backup Configuration Using sysrepocfg And scp<a class="headerlink" href="#backup-configuration-using-sysrepocfg-and-scp" title="Permanent link">&para;</a></h3>
<p>Displaying running or startup configuration is possible with
<code>sysrepocfg -X</code>, as shown below.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d running&#39;
<a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a>{
<a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a> &quot;ieee802-dot1ab-lldp:lldp&quot;: {
<a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a> &quot;infix-lldp:enabled&quot;: true
<a id="__codelineno-40-5" name="__codelineno-40-5" href="#__codelineno-40-5"></a>...
<a id="__codelineno-40-6" name="__codelineno-40-6" href="#__codelineno-40-6"></a>~$
</code></pre></div>
<p>An example for backing up startup configuration from remote PC.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d startup &gt; /tmp/backup.json&#39;
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>~$ scp admin@example.local:/tmp/backup.json .
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a>~$
</code></pre></div>
<p>Or possibly skip intermediate storage of file
<div class="highlight"><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d startup&#39; &gt; backup.json
<a id="__codelineno-42-2" name="__codelineno-42-2" href="#__codelineno-42-2"></a>~$
</code></pre></div></p>
<p>A final example is to only use <code>scp</code>. This is simpler, but only works to backup the
startup configuration (not running).</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a>~$ scp admin@example.local:/cfg/startup-config.cfg backup.json
<a id="__codelineno-43-2" name="__codelineno-43-2" href="#__codelineno-43-2"></a>~$
</code></pre></div>
<h3 id="restore-configuration-using-sysrepocfg-and-sshscp"><a id="restore"></a> Restore Configuration Using sysrepocfg and ssh/scp<a class="headerlink" href="#restore-configuration-using-sysrepocfg-and-sshscp" title="Permanent link">&para;</a></h3>
<p>To restore a backup configuration to startup, the simplest way is to
use <code>scp</code> and reboot as shown below</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a>~$ scp admin@example.local:/cfg/startup-config.cfg backup.json
<a id="__codelineno-44-2" name="__codelineno-44-2" href="#__codelineno-44-2"></a>~$ ssh admin@example.local &#39;reboot&#39;
<a id="__codelineno-44-3" name="__codelineno-44-3" href="#__codelineno-44-3"></a>Connection to switch.local closed by remote host.
<a id="__codelineno-44-4" name="__codelineno-44-4" href="#__codelineno-44-4"></a>~$
</code></pre></div>
<p>An alternative method to restore a backup configuration is to use the
<code>sysrepocfg -I FILE</code> (import) command.</p>
<p>The example below imports the backup configuration to startup, and
reboots the unit.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a>~$ scp backup.json admin@example.local:/tmp/
<a id="__codelineno-45-2" name="__codelineno-45-2" href="#__codelineno-45-2"></a>~$ ssh admin@example.local &#39;sudo sysrepocfg -I /tmp/backup.json -fjson -d startup&#39;
<a id="__codelineno-45-3" name="__codelineno-45-3" href="#__codelineno-45-3"></a>~$ ssh admin@example.local &#39;reboot&#39;
<a id="__codelineno-45-4" name="__codelineno-45-4" href="#__codelineno-45-4"></a>Connection to switch.local closed by remote host.
<a id="__codelineno-45-5" name="__codelineno-45-5" href="#__codelineno-45-5"></a>~$
</code></pre></div>
<blockquote>
<p>Note: admin login credentials (hash) are stored as part of the
configuration file. When replacing a switch and applying the backed
up configuration from the former switch, the password on the
replacement unit will also change.</p>
</blockquote>
<h3 id="copy-running-to-startup-using-sysrepocfg">Copy Running to Startup Using sysrepocfg<a class="headerlink" href="#copy-running-to-startup-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p>The following command reads out the running config via <code>sysrepocfg -X</code>
and writes the result to the startup configuration.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d running &gt; /cfg/startup-config.cfg&#39;
<a id="__codelineno-46-2" name="__codelineno-46-2" href="#__codelineno-46-2"></a>~$
</code></pre></div>
<p>An alternative is to write it to a temporary file, and use <code>sysrepocfg
-I</code> to import it to startup.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d running &gt; /tmp/running.json&#39;
<a id="__codelineno-47-2" name="__codelineno-47-2" href="#__codelineno-47-2"></a>~$ ssh admin@example.local &#39;sysrepocfg -I /tmp/running.json -fjson -d startup&#39;
<a id="__codelineno-47-3" name="__codelineno-47-3" href="#__codelineno-47-3"></a>~$
</code></pre></div>
<h3 id="read-out-hardware-information-using-sysrepocfg">Read Out Hardware Information Using sysrepocfg<a class="headerlink" href="#read-out-hardware-information-using-sysrepocfg" title="Permanent link">&para;</a></h3>
<p>Infix supports IETF Hardware YANG with augments for ONIE formatted
production data stored in EEPROMs, if available. See Infix <a href="../vpd/">VPD
documentation</a>, as well as <em>ietf-hardware</em> and <em>infix-hardware</em> YANG
models for details.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-48-1" name="__codelineno-48-1" href="#__codelineno-48-1"></a>~$ ssh admin@example.local &#39;sysrepocfg -X -fjson -d operational -x /ietf-hardware:hardware&#39;
<a id="__codelineno-48-2" name="__codelineno-48-2" href="#__codelineno-48-2"></a>{
<a id="__codelineno-48-3" name="__codelineno-48-3" href="#__codelineno-48-3"></a> &quot;ietf-hardware:hardware&quot;: {
<a id="__codelineno-48-4" name="__codelineno-48-4" href="#__codelineno-48-4"></a> &quot;component&quot;: [
<a id="__codelineno-48-5" name="__codelineno-48-5" href="#__codelineno-48-5"></a> {
<a id="__codelineno-48-6" name="__codelineno-48-6" href="#__codelineno-48-6"></a> &quot;name&quot;: &quot;product&quot;,
<a id="__codelineno-48-7" name="__codelineno-48-7" href="#__codelineno-48-7"></a> &quot;class&quot;: &quot;infix-hardware:vpd&quot;,
<a id="__codelineno-48-8" name="__codelineno-48-8" href="#__codelineno-48-8"></a> &quot;serial-num&quot;: &quot;12345&quot;,
<a id="__codelineno-48-9" name="__codelineno-48-9" href="#__codelineno-48-9"></a> &quot;model-name&quot;: &quot;Switch2010&quot;,
<a id="__codelineno-48-10" name="__codelineno-48-10" href="#__codelineno-48-10"></a> &quot;mfg-date&quot;: &quot;2024-01-30T16:42:37+00:00&quot;,
<a id="__codelineno-48-11" name="__codelineno-48-11" href="#__codelineno-48-11"></a> &quot;infix-hardware:vpd-data&quot;: {
<a id="__codelineno-48-12" name="__codelineno-48-12" href="#__codelineno-48-12"></a> &quot;product-name&quot;: &quot;Switch2010&quot;,
<a id="__codelineno-48-13" name="__codelineno-48-13" href="#__codelineno-48-13"></a> &quot;part-number&quot;: &quot;ABC123-001&quot;,
<a id="__codelineno-48-14" name="__codelineno-48-14" href="#__codelineno-48-14"></a> &quot;serial-number&quot;: &quot;007&quot;,
<a id="__codelineno-48-15" name="__codelineno-48-15" href="#__codelineno-48-15"></a> &quot;mac-address&quot;: &quot;00:53:00:01:23:45&quot;,
<a id="__codelineno-48-16" name="__codelineno-48-16" href="#__codelineno-48-16"></a> &quot;manufacture-date&quot;: &quot;01/30/2024 16:42:37&quot;,
<a id="__codelineno-48-17" name="__codelineno-48-17" href="#__codelineno-48-17"></a> &quot;num-macs&quot;: 11,
<a id="__codelineno-48-18" name="__codelineno-48-18" href="#__codelineno-48-18"></a> &quot;manufacturer&quot;: &quot;ACME Production&quot;,
<a id="__codelineno-48-19" name="__codelineno-48-19" href="#__codelineno-48-19"></a> &quot;vendor&quot;: &quot;SanFran Networks&quot;
<a id="__codelineno-48-20" name="__codelineno-48-20" href="#__codelineno-48-20"></a> }
<a id="__codelineno-48-21" name="__codelineno-48-21" href="#__codelineno-48-21"></a> },
<a id="__codelineno-48-22" name="__codelineno-48-22" href="#__codelineno-48-22"></a> {
<a id="__codelineno-48-23" name="__codelineno-48-23" href="#__codelineno-48-23"></a> &quot;name&quot;: &quot;USB&quot;,
<a id="__codelineno-48-24" name="__codelineno-48-24" href="#__codelineno-48-24"></a> &quot;class&quot;: &quot;infix-hardware:usb&quot;,
<a id="__codelineno-48-25" name="__codelineno-48-25" href="#__codelineno-48-25"></a> &quot;state&quot;: {
<a id="__codelineno-48-26" name="__codelineno-48-26" href="#__codelineno-48-26"></a> &quot;admin-state&quot;: &quot;unlocked&quot;,
<a id="__codelineno-48-27" name="__codelineno-48-27" href="#__codelineno-48-27"></a> &quot;oper-state&quot;: &quot;enabled&quot;
<a id="__codelineno-48-28" name="__codelineno-48-28" href="#__codelineno-48-28"></a> }
<a id="__codelineno-48-29" name="__codelineno-48-29" href="#__codelineno-48-29"></a> }
<a id="__codelineno-48-30" name="__codelineno-48-30" href="#__codelineno-48-30"></a> ]
<a id="__codelineno-48-31" name="__codelineno-48-31" href="#__codelineno-48-31"></a> }
<a id="__codelineno-48-32" name="__codelineno-48-32" href="#__codelineno-48-32"></a>}
<a id="__codelineno-48-33" name="__codelineno-48-33" href="#__codelineno-48-33"></a>~$
</code></pre></div>
<h2 id="examples-using-restconf">Examples using RESTCONF<a class="headerlink" href="#examples-using-restconf" title="Permanent link">&para;</a></h2>
<h3 id="factory-reset_1">Factory Reset<a class="headerlink" href="#factory-reset_1" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-49-1" name="__codelineno-49-1" href="#__codelineno-49-1"></a>~$ curl -kX POST -u admin:admin \
<a id="__codelineno-49-2" name="__codelineno-49-2" href="#__codelineno-49-2"></a> -H &quot;Content-Type: application/yang-data+json&quot; \
<a id="__codelineno-49-3" name="__codelineno-49-3" href="#__codelineno-49-3"></a> https://example.local/restconf/operations/ietf-factory-default:factory-reset
<a id="__codelineno-49-4" name="__codelineno-49-4" href="#__codelineno-49-4"></a>curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0
</code></pre></div>
<h3 id="system-reboot_1">System Reboot<a class="headerlink" href="#system-reboot_1" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-50-1" name="__codelineno-50-1" href="#__codelineno-50-1"></a>~$ curl -kX POST -u admin:admin \
<a id="__codelineno-50-2" name="__codelineno-50-2" href="#__codelineno-50-2"></a> -H &quot;Content-Type: application/yang-data+json&quot; \
<a id="__codelineno-50-3" name="__codelineno-50-3" href="#__codelineno-50-3"></a> https://example.local/restconf/operations/ietf-system:system-restart
</code></pre></div>
<h3 id="set-date-and-time_1">Set Date and Time<a class="headerlink" href="#set-date-and-time_1" title="Permanent link">&para;</a></h3>
<p>Here's an example of an RPC that takes input/argument:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-51-1" name="__codelineno-51-1" href="#__codelineno-51-1"></a>~$ curl -kX POST -u admin:admin \
<a id="__codelineno-51-2" name="__codelineno-51-2" href="#__codelineno-51-2"></a> -H &quot;Content-Type: application/yang-data+json&quot; \
<a id="__codelineno-51-3" name="__codelineno-51-3" href="#__codelineno-51-3"></a> -d &#39;{&quot;ietf-system:input&quot;: {&quot;current-datetime&quot;: &quot;2024-04-17T13:48:02-01:00&quot;}}&#39; \
<a id="__codelineno-51-4" name="__codelineno-51-4" href="#__codelineno-51-4"></a> https://example.local/restconf/operations/ietf-system:set-current-datetime
</code></pre></div>
<p>You can verify that the changes took by a remote SSH command:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-52-1" name="__codelineno-52-1" href="#__codelineno-52-1"></a>~$ ssh admin@example.local &#39;date&#39;
<a id="__codelineno-52-2" name="__codelineno-52-2" href="#__codelineno-52-2"></a>Wed Apr 17 14:48:12 UTC 2024
<a id="__codelineno-52-3" name="__codelineno-52-3" href="#__codelineno-52-3"></a>~$
</code></pre></div>
<h3 id="read-hostname">Read Hostname<a class="headerlink" href="#read-hostname" title="Permanent link">&para;</a></h3>
<p>Example of fetching JSON configuration data to stdout:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-53-1" name="__codelineno-53-1" href="#__codelineno-53-1"></a>~$ curl -kX GET -u admin:admin \
<a id="__codelineno-53-2" name="__codelineno-53-2" href="#__codelineno-53-2"></a> -H &#39;Accept: application/yang-data+json&#39; \
<a id="__codelineno-53-3" name="__codelineno-53-3" href="#__codelineno-53-3"></a> https://example.local/restconf/data/ietf-system:system/hostname
<a id="__codelineno-53-4" name="__codelineno-53-4" href="#__codelineno-53-4"></a>{
<a id="__codelineno-53-5" name="__codelineno-53-5" href="#__codelineno-53-5"></a> &quot;ietf-system:system&quot;: {
<a id="__codelineno-53-6" name="__codelineno-53-6" href="#__codelineno-53-6"></a> &quot;hostname&quot;: &quot;foo&quot;
<a id="__codelineno-53-7" name="__codelineno-53-7" href="#__codelineno-53-7"></a> }
<a id="__codelineno-53-8" name="__codelineno-53-8" href="#__codelineno-53-8"></a>}
</code></pre></div>
<h3 id="set-hostname">Set Hostname<a class="headerlink" href="#set-hostname" title="Permanent link">&para;</a></h3>
<p>Example of inline JSON data:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-54-1" name="__codelineno-54-1" href="#__codelineno-54-1"></a>~$ curl -kX PATCH -u admin:admin \
<a id="__codelineno-54-2" name="__codelineno-54-2" href="#__codelineno-54-2"></a> -H &#39;Content-Type: application/yang-data+json&#39; \
<a id="__codelineno-54-3" name="__codelineno-54-3" href="#__codelineno-54-3"></a> -d &#39;{&quot;ietf-system:system&quot;:{&quot;hostname&quot;:&quot;bar&quot;}}&#39; \
<a id="__codelineno-54-4" name="__codelineno-54-4" href="#__codelineno-54-4"></a> https://example.local/restconf/data/ietf-system:system
</code></pre></div>
<h3 id="copy-running-to-startup">Copy Running to Startup<a class="headerlink" href="#copy-running-to-startup" title="Permanent link">&para;</a></h3>
<p>No copy command available yet to copy between datastores, and the
Rousette back-end also does not support "write-through" to the
startup datastore.</p>
<p>To save running-config to startup-config, use the following example to
fetch running to a local file and then update startup with it:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-55-1" name="__codelineno-55-1" href="#__codelineno-55-1"></a>~$ curl -kX GET -u admin:admin -o running-config.json \
<a id="__codelineno-55-2" name="__codelineno-55-2" href="#__codelineno-55-2"></a> -H &#39;Accept: application/yang-data+json&#39; \
<a id="__codelineno-55-3" name="__codelineno-55-3" href="#__codelineno-55-3"></a> https://example.local/restconf/ds/ietf-datastores:running
<a id="__codelineno-55-4" name="__codelineno-55-4" href="#__codelineno-55-4"></a>
<a id="__codelineno-55-5" name="__codelineno-55-5" href="#__codelineno-55-5"></a>~$ curl -kX PUT -u admin:admin -d @running-config.json \
<a id="__codelineno-55-6" name="__codelineno-55-6" href="#__codelineno-55-6"></a> -H &#39;Content-Type: application/yang-data+json&#39; \
<a id="__codelineno-55-7" name="__codelineno-55-7" href="#__codelineno-55-7"></a> https://example.local/restconf/ds/ietf-datastores:startup
</code></pre></div>
<h2 id="miscellaneous">Miscellaneous<a class="headerlink" href="#miscellaneous" title="Permanent link">&para;</a></h2>
<h3 id="port-configuration-example-for-production-tests"><a id="port-test-intro"></a> Port Configuration Example for Production Tests<a class="headerlink" href="#port-configuration-example-for-production-tests" title="Permanent link">&para;</a></h3>
<p>As part of production tests, verification Ethernet ports are expected
to be performed. A common way is to connect a test PC to two ports and
send a <em>ping</em> traversing all ports. This can be achieved by using
VLANs on the switch as described in this section. The resulting
configuration file can be applied to the running configuration of the
produced unit, e.g, use config file restore as described
<a href="#restore">above</a>.</p>
<p>In this example we assume a 10 port switch, with ports e1-e10. </p>
<p>The following VLAN configuration and cable connections will be used:</p>
<table>
<thead>
<tr>
<th style="text-align: left;">VLAN &amp; Ports</th>
<th style="text-align: left;">Connect</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">VLAN 10: e1 &amp; e2</td>
<td style="text-align: left;">e2 &lt;=&gt; e3</td>
</tr>
<tr>
<td style="text-align: left;">VLAN 20: e3 &amp; e4</td>
<td style="text-align: left;">e4 &lt;=&gt; e5</td>
</tr>
<tr>
<td style="text-align: left;">VLAN 30: e5 &amp; e6</td>
<td style="text-align: left;">e6 &lt;=&gt; e7</td>
</tr>
<tr>
<td style="text-align: left;">VLAN 40: e7 &amp; e8</td>
<td style="text-align: left;">e8 &lt;=&gt; e9</td>
</tr>
<tr>
<td style="text-align: left;">VLAN 50: e9 &amp; e10</td>
<td style="text-align: left;"></td>
</tr>
</tbody>
</table>
<p>The test PC is connected to e1 and e10 via different interfaces
(alternatively, two different PCs are used).</p>
<blockquote>
<p>Configuration here is done via console. When configuring remotely
over SSH, remember to keep one IP address (the one used for the SSH
connection)! I.e., set a static IP address first, then perform the
VLAN configuration step."</p>
</blockquote>
<h4 id="configuration-at-start">Configuration at Start<a class="headerlink" href="#configuration-at-start" title="Permanent link">&para;</a></h4>
<p>Starting out, we assume a configuration where all ports are network
interfaces (possibly with IPv6 enabled).</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-56-1" name="__codelineno-56-1" href="#__codelineno-56-1"></a>admin@example:/&gt;<span class="w"> </span>show<span class="w"> </span>interfaces
<a id="__codelineno-56-2" name="__codelineno-56-2" href="#__codelineno-56-2"></a>lo<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:00:00:00:00:00<span class="w"> </span>
<a id="__codelineno-56-3" name="__codelineno-56-3" href="#__codelineno-56-3"></a><span class="w"> </span>ipv4<span class="w"> </span><span class="m">127</span>.0.0.1/8<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-56-4" name="__codelineno-56-4" href="#__codelineno-56-4"></a><span class="w"> </span>ipv6<span class="w"> </span>::1/128<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-56-5" name="__codelineno-56-5" href="#__codelineno-56-5"></a>e1<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-56-6" name="__codelineno-56-6" href="#__codelineno-56-6"></a>e2<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:02<span class="w"> </span>
<a id="__codelineno-56-7" name="__codelineno-56-7" href="#__codelineno-56-7"></a>e3<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:03<span class="w"> </span>
<a id="__codelineno-56-8" name="__codelineno-56-8" href="#__codelineno-56-8"></a>e4<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:04<span class="w"> </span>
<a id="__codelineno-56-9" name="__codelineno-56-9" href="#__codelineno-56-9"></a>e5<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:05<span class="w"> </span>
<a id="__codelineno-56-10" name="__codelineno-56-10" href="#__codelineno-56-10"></a>e6<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:06<span class="w"> </span>
<a id="__codelineno-56-11" name="__codelineno-56-11" href="#__codelineno-56-11"></a>e7<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:07<span class="w"> </span>
<a id="__codelineno-56-12" name="__codelineno-56-12" href="#__codelineno-56-12"></a>e8<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:08<span class="w"> </span>
<a id="__codelineno-56-13" name="__codelineno-56-13" href="#__codelineno-56-13"></a>e9<span class="w"> </span>ethernet<span class="w"> </span>LOWER-DOWN<span class="w"> </span><span class="m">00</span>:53:00:06:11:09<span class="w"> </span>
<a id="__codelineno-56-14" name="__codelineno-56-14" href="#__codelineno-56-14"></a>e10<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:0a<span class="w"> </span>
<a id="__codelineno-56-15" name="__codelineno-56-15" href="#__codelineno-56-15"></a><span class="w"> </span>ipv6<span class="w"> </span>fe80::0053:00ff:fe06:110a/64<span class="w"> </span><span class="o">(</span>link-layer<span class="o">)</span>
<a id="__codelineno-56-16" name="__codelineno-56-16" href="#__codelineno-56-16"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<h4 id="creating-bridge-and-adding-ports">Creating Bridge and Adding Ports<a class="headerlink" href="#creating-bridge-and-adding-ports" title="Permanent link">&para;</a></h4>
<p>The example below uses Infix documentation on <a href="../networking/#bridging">creating bridges</a>. </p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-57-1" name="__codelineno-57-1" href="#__codelineno-57-1"></a>admin@example:/&gt;<span class="w"> </span>configure
<a id="__codelineno-57-2" name="__codelineno-57-2" href="#__codelineno-57-2"></a>admin@example:/config/&gt;<span class="w"> </span>edit<span class="w"> </span>interface<span class="w"> </span>br0
<a id="__codelineno-57-3" name="__codelineno-57-3" href="#__codelineno-57-3"></a>admin@example:/config/interface/br0/&gt;<span class="w"> </span>end
<a id="__codelineno-57-4" name="__codelineno-57-4" href="#__codelineno-57-4"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e1<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-5" name="__codelineno-57-5" href="#__codelineno-57-5"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e2<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-6" name="__codelineno-57-6" href="#__codelineno-57-6"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e3<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-7" name="__codelineno-57-7" href="#__codelineno-57-7"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e4<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-8" name="__codelineno-57-8" href="#__codelineno-57-8"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e5<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-9" name="__codelineno-57-9" href="#__codelineno-57-9"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e6<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-10" name="__codelineno-57-10" href="#__codelineno-57-10"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e7<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-11" name="__codelineno-57-11" href="#__codelineno-57-11"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e8<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-12" name="__codelineno-57-12" href="#__codelineno-57-12"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e9<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-13" name="__codelineno-57-13" href="#__codelineno-57-13"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e10<span class="w"> </span>bridge-port<span class="w"> </span>bridge<span class="w"> </span>br0
<a id="__codelineno-57-14" name="__codelineno-57-14" href="#__codelineno-57-14"></a>admin@example:/config/&gt;<span class="w"> </span>
</code></pre></div>
<p>The interface status can be viewed using "show interface" after
leaving configuration context. If configuration via SSH, first assign
an IP address to br0 before <em>leaving</em> configuration context, e.g.,
<code>set interface br0 ipv6 enabled</code> to get auto-configured IPv6
address. Or skip 'leave' and stay in configuration context until done
with all sections, including the one on <a href="#ip-on-switch">Add IP on
Switch</a>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-58-1" name="__codelineno-58-1" href="#__codelineno-58-1"></a>admin@example:/config/&gt;<span class="w"> </span>leave
<a id="__codelineno-58-2" name="__codelineno-58-2" href="#__codelineno-58-2"></a>admin@example:/&gt;<span class="w"> </span>
<a id="__codelineno-58-3" name="__codelineno-58-3" href="#__codelineno-58-3"></a>admin@example:/&gt;<span class="w"> </span>show<span class="w"> </span>interfaces
<a id="__codelineno-58-4" name="__codelineno-58-4" href="#__codelineno-58-4"></a>INTERFACE<span class="w"> </span>PROTOCOL<span class="w"> </span>STATE<span class="w"> </span>DATA<span class="w"> </span>
<a id="__codelineno-58-5" name="__codelineno-58-5" href="#__codelineno-58-5"></a>br0<span class="w"> </span>bridge<span class="w"> </span>
<a id="__codelineno-58-6" name="__codelineno-58-6" href="#__codelineno-58-6"></a><span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-58-7" name="__codelineno-58-7" href="#__codelineno-58-7"></a><span class="w"> </span>e1<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-8" name="__codelineno-58-8" href="#__codelineno-58-8"></a><span class="w"> </span>e2<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-9" name="__codelineno-58-9" href="#__codelineno-58-9"></a><span class="w"> </span>e3<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-10" name="__codelineno-58-10" href="#__codelineno-58-10"></a><span class="w"> </span>e4<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-11" name="__codelineno-58-11" href="#__codelineno-58-11"></a><span class="w"> </span>e5<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-12" name="__codelineno-58-12" href="#__codelineno-58-12"></a><span class="w"> </span>e6<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-13" name="__codelineno-58-13" href="#__codelineno-58-13"></a><span class="w"> </span>e7<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-14" name="__codelineno-58-14" href="#__codelineno-58-14"></a><span class="w"> </span>e8<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-15" name="__codelineno-58-15" href="#__codelineno-58-15"></a><span class="w"> </span>e9<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>
<a id="__codelineno-58-16" name="__codelineno-58-16" href="#__codelineno-58-16"></a><span class="w"> </span>e10<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>
<a id="__codelineno-58-17" name="__codelineno-58-17" href="#__codelineno-58-17"></a>lo<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:00:00:00:00:00<span class="w"> </span>
<a id="__codelineno-58-18" name="__codelineno-58-18" href="#__codelineno-58-18"></a><span class="w"> </span>ipv4<span class="w"> </span><span class="m">127</span>.0.0.1/8<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-58-19" name="__codelineno-58-19" href="#__codelineno-58-19"></a><span class="w"> </span>ipv6<span class="w"> </span>::1/128<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-58-20" name="__codelineno-58-20" href="#__codelineno-58-20"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<h4 id="assign-vlans-to-ports">Assign VLANs to Ports<a class="headerlink" href="#assign-vlans-to-ports" title="Permanent link">&para;</a></h4>
<p>Then configure VLANs as outlined <a href="#port-test-intro">above</a>:
default VID for ingress (PVID), which is done per port, and egress
mode (untagged), which is done at the bridge level. See Infix
<a href="../networking/#vlan-filtering-bridge">documentation for VLAN bridges</a> for more information.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-59-1" name="__codelineno-59-1" href="#__codelineno-59-1"></a>admin@example:/&gt;<span class="w"> </span>
<a id="__codelineno-59-2" name="__codelineno-59-2" href="#__codelineno-59-2"></a>admin@example:/&gt;<span class="w"> </span>configure
<a id="__codelineno-59-3" name="__codelineno-59-3" href="#__codelineno-59-3"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e1<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">10</span>
<a id="__codelineno-59-4" name="__codelineno-59-4" href="#__codelineno-59-4"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e2<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">10</span>
<a id="__codelineno-59-5" name="__codelineno-59-5" href="#__codelineno-59-5"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e3<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">20</span>
<a id="__codelineno-59-6" name="__codelineno-59-6" href="#__codelineno-59-6"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e4<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">20</span>
<a id="__codelineno-59-7" name="__codelineno-59-7" href="#__codelineno-59-7"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e5<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">30</span>
<a id="__codelineno-59-8" name="__codelineno-59-8" href="#__codelineno-59-8"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e6<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">30</span>
<a id="__codelineno-59-9" name="__codelineno-59-9" href="#__codelineno-59-9"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e7<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">40</span>
<a id="__codelineno-59-10" name="__codelineno-59-10" href="#__codelineno-59-10"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e8<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">40</span>
<a id="__codelineno-59-11" name="__codelineno-59-11" href="#__codelineno-59-11"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e9<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">50</span>
<a id="__codelineno-59-12" name="__codelineno-59-12" href="#__codelineno-59-12"></a>admin@example:/config/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>interface<span class="w"> </span>e10<span class="w"> </span>bridge-port<span class="w"> </span>pvid<span class="w"> </span><span class="m">50</span>
<a id="__codelineno-59-13" name="__codelineno-59-13" href="#__codelineno-59-13"></a>admin@example:/config/&gt;<span class="w"> </span>edit<span class="w"> </span>interface<span class="w"> </span>br0
<a id="__codelineno-59-14" name="__codelineno-59-14" href="#__codelineno-59-14"></a>admin@example:/config/interface/br0/&gt;<span class="w"> </span>edit<span class="w"> </span>bridge<span class="w"> </span>vlans
<a id="__codelineno-59-15" name="__codelineno-59-15" href="#__codelineno-59-15"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">10</span><span class="w"> </span>untagged<span class="w"> </span>e1
<a id="__codelineno-59-16" name="__codelineno-59-16" href="#__codelineno-59-16"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">10</span><span class="w"> </span>untagged<span class="w"> </span>e2
<a id="__codelineno-59-17" name="__codelineno-59-17" href="#__codelineno-59-17"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">20</span><span class="w"> </span>untagged<span class="w"> </span>e3
<a id="__codelineno-59-18" name="__codelineno-59-18" href="#__codelineno-59-18"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">20</span><span class="w"> </span>untagged<span class="w"> </span>e4
<a id="__codelineno-59-19" name="__codelineno-59-19" href="#__codelineno-59-19"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">30</span><span class="w"> </span>untagged<span class="w"> </span>e5
<a id="__codelineno-59-20" name="__codelineno-59-20" href="#__codelineno-59-20"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">30</span><span class="w"> </span>untagged<span class="w"> </span>e6
<a id="__codelineno-59-21" name="__codelineno-59-21" href="#__codelineno-59-21"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">40</span><span class="w"> </span>untagged<span class="w"> </span>e7
<a id="__codelineno-59-22" name="__codelineno-59-22" href="#__codelineno-59-22"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">40</span><span class="w"> </span>untagged<span class="w"> </span>e8
<a id="__codelineno-59-23" name="__codelineno-59-23" href="#__codelineno-59-23"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">50</span><span class="w"> </span>untagged<span class="w"> </span>e9
<a id="__codelineno-59-24" name="__codelineno-59-24" href="#__codelineno-59-24"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">50</span><span class="w"> </span>untagged<span class="w"> </span>e10
<a id="__codelineno-59-25" name="__codelineno-59-25" href="#__codelineno-59-25"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span>leave
<a id="__codelineno-59-26" name="__codelineno-59-26" href="#__codelineno-59-26"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<p>Interface status would now should something like the following</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-60-1" name="__codelineno-60-1" href="#__codelineno-60-1"></a>admin@example:/&gt;<span class="w"> </span>show<span class="w"> </span>interfaces<span class="w"> </span>
<a id="__codelineno-60-2" name="__codelineno-60-2" href="#__codelineno-60-2"></a>INTERFACE<span class="w"> </span>PROTOCOL<span class="w"> </span>STATE<span class="w"> </span>DATA<span class="w"> </span>
<a id="__codelineno-60-3" name="__codelineno-60-3" href="#__codelineno-60-3"></a>br0<span class="w"> </span>bridge<span class="w"> </span>
<a id="__codelineno-60-4" name="__codelineno-60-4" href="#__codelineno-60-4"></a><span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-60-5" name="__codelineno-60-5" href="#__codelineno-60-5"></a><span class="w"> </span>e1<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-60-6" name="__codelineno-60-6" href="#__codelineno-60-6"></a><span class="w"> </span>e2<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-60-7" name="__codelineno-60-7" href="#__codelineno-60-7"></a><span class="w"> </span>e3<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-60-8" name="__codelineno-60-8" href="#__codelineno-60-8"></a><span class="w"> </span>e4<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-60-9" name="__codelineno-60-9" href="#__codelineno-60-9"></a><span class="w"> </span>e5<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-60-10" name="__codelineno-60-10" href="#__codelineno-60-10"></a><span class="w"> </span>e6<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-60-11" name="__codelineno-60-11" href="#__codelineno-60-11"></a><span class="w"> </span>e7<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-60-12" name="__codelineno-60-12" href="#__codelineno-60-12"></a><span class="w"> </span>e8<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-60-13" name="__codelineno-60-13" href="#__codelineno-60-13"></a><span class="w"> </span>e9<span class="w"> </span>bridge<span class="w"> </span>LOWER-DOWN<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-60-14" name="__codelineno-60-14" href="#__codelineno-60-14"></a><span class="w"> </span>e10<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-60-15" name="__codelineno-60-15" href="#__codelineno-60-15"></a>lo<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:00:00:00:00:00<span class="w"> </span>
<a id="__codelineno-60-16" name="__codelineno-60-16" href="#__codelineno-60-16"></a><span class="w"> </span>ipv4<span class="w"> </span><span class="m">127</span>.0.0.1/8<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-60-17" name="__codelineno-60-17" href="#__codelineno-60-17"></a><span class="w"> </span>ipv6<span class="w"> </span>::1/128<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-60-18" name="__codelineno-60-18" href="#__codelineno-60-18"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<h4 id="connect-cables-and-test">Connect Cables and Test<a class="headerlink" href="#connect-cables-and-test" title="Permanent link">&para;</a></h4>
<p>We can now connect the PC to e1 and e10, and the other ports are
patched according to plan <a href="#port-test-intro">above</a>. We should get
link up on all ports.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-61-1" name="__codelineno-61-1" href="#__codelineno-61-1"></a>admin@example:/&gt;<span class="w"> </span>show<span class="w"> </span>interfaces<span class="w"> </span>
<a id="__codelineno-61-2" name="__codelineno-61-2" href="#__codelineno-61-2"></a>INTERFACE<span class="w"> </span>PROTOCOL<span class="w"> </span>STATE<span class="w"> </span>DATA<span class="w"> </span>
<a id="__codelineno-61-3" name="__codelineno-61-3" href="#__codelineno-61-3"></a>br0<span class="w"> </span>bridge<span class="w"> </span>
<a id="__codelineno-61-4" name="__codelineno-61-4" href="#__codelineno-61-4"></a><span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-61-5" name="__codelineno-61-5" href="#__codelineno-61-5"></a><span class="w"> </span>e1<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-61-6" name="__codelineno-61-6" href="#__codelineno-61-6"></a><span class="w"> </span>e2<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-61-7" name="__codelineno-61-7" href="#__codelineno-61-7"></a><span class="w"> </span>e3<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-61-8" name="__codelineno-61-8" href="#__codelineno-61-8"></a><span class="w"> </span>e4<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-61-9" name="__codelineno-61-9" href="#__codelineno-61-9"></a><span class="w"> </span>e5<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-61-10" name="__codelineno-61-10" href="#__codelineno-61-10"></a><span class="w"> </span>e6<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-61-11" name="__codelineno-61-11" href="#__codelineno-61-11"></a><span class="w"> </span>e7<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-61-12" name="__codelineno-61-12" href="#__codelineno-61-12"></a><span class="w"> </span>e8<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-61-13" name="__codelineno-61-13" href="#__codelineno-61-13"></a><span class="w"> </span>e9<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-61-14" name="__codelineno-61-14" href="#__codelineno-61-14"></a><span class="w"> </span>e10<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-61-15" name="__codelineno-61-15" href="#__codelineno-61-15"></a>lo<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:00:00:00:00:00<span class="w"> </span>
<a id="__codelineno-61-16" name="__codelineno-61-16" href="#__codelineno-61-16"></a><span class="w"> </span>ipv4<span class="w"> </span><span class="m">127</span>.0.0.1/8<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-61-17" name="__codelineno-61-17" href="#__codelineno-61-17"></a><span class="w"> </span>ipv6<span class="w"> </span>::1/128<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-61-18" name="__codelineno-61-18" href="#__codelineno-61-18"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<p>Here we use IPv6 ping all hosts (ff02::1) on PC interface eth1 to
check reachability to the other interface of the PC. </p>
<blockquote>
<p>A recommendation is to use network name spaces on PC to ensure
traffic really goes out to switch, instead of being looped
internally. Or use two PCs. </p>
</blockquote>
<div class="highlight"><pre><span></span><code><a id="__codelineno-62-1" name="__codelineno-62-1" href="#__codelineno-62-1"></a>~<span class="w"> </span>$<span class="w"> </span>ping<span class="w"> </span>-L<span class="w"> </span>ff02::1%eth1
<a id="__codelineno-62-2" name="__codelineno-62-2" href="#__codelineno-62-2"></a>PING<span class="w"> </span>ff02::1%eth1<span class="o">(</span>ff02::1%eth1<span class="o">)</span><span class="w"> </span><span class="m">56</span><span class="w"> </span>data<span class="w"> </span>bytes
<a id="__codelineno-62-3" name="__codelineno-62-3" href="#__codelineno-62-3"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.496<span class="w"> </span>ms
<a id="__codelineno-62-4" name="__codelineno-62-4" href="#__codelineno-62-4"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">2</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.514<span class="w"> </span>ms
<a id="__codelineno-62-5" name="__codelineno-62-5" href="#__codelineno-62-5"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">3</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.473<span class="w"> </span>ms
<a id="__codelineno-62-6" name="__codelineno-62-6" href="#__codelineno-62-6"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.736<span class="w"> </span>ms
<a id="__codelineno-62-7" name="__codelineno-62-7" href="#__codelineno-62-7"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">5</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.563<span class="w"> </span>ms
<a id="__codelineno-62-8" name="__codelineno-62-8" href="#__codelineno-62-8"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">6</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.507<span class="w"> </span>ms
<a id="__codelineno-62-9" name="__codelineno-62-9" href="#__codelineno-62-9"></a>^C
<a id="__codelineno-62-10" name="__codelineno-62-10" href="#__codelineno-62-10"></a>---<span class="w"> </span>ff02::1%eth1<span class="w"> </span>ping<span class="w"> </span>statistics<span class="w"> </span>---
<a id="__codelineno-62-11" name="__codelineno-62-11" href="#__codelineno-62-11"></a><span class="m">6</span><span class="w"> </span>packets<span class="w"> </span>transmitted,<span class="w"> </span><span class="m">6</span><span class="w"> </span>received,<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>packet<span class="w"> </span>loss,<span class="w"> </span><span class="nb">time</span><span class="w"> </span>5108ms
<a id="__codelineno-62-12" name="__codelineno-62-12" href="#__codelineno-62-12"></a>rtt<span class="w"> </span>min/avg/max/mdev<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span>.473/0.548/0.736/0.088<span class="w"> </span>ms
<a id="__codelineno-62-13" name="__codelineno-62-13" href="#__codelineno-62-13"></a>~<span class="w"> </span>$
</code></pre></div>
<p>We can verify that traffic goes through the switch by disconnecting
one of the patch cables, e.g., between e4 and e5</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-63-1" name="__codelineno-63-1" href="#__codelineno-63-1"></a>~<span class="w"> </span>$<span class="w"> </span>ping<span class="w"> </span>-L<span class="w"> </span>ff02::1%eth1
<a id="__codelineno-63-2" name="__codelineno-63-2" href="#__codelineno-63-2"></a>PING<span class="w"> </span>ff02::1%eth1<span class="o">(</span>ff02::1%eth1<span class="o">)</span><span class="w"> </span><span class="m">56</span><span class="w"> </span>data<span class="w"> </span>bytes
<a id="__codelineno-63-3" name="__codelineno-63-3" href="#__codelineno-63-3"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.510<span class="w"> </span>ms
<a id="__codelineno-63-4" name="__codelineno-63-4" href="#__codelineno-63-4"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">2</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.448<span class="w"> </span>ms
<a id="__codelineno-63-5" name="__codelineno-63-5" href="#__codelineno-63-5"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">3</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.583<span class="w"> </span>ms
<a id="__codelineno-63-6" name="__codelineno-63-6" href="#__codelineno-63-6"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.515<span class="w"> </span>ms
<a id="__codelineno-63-7" name="__codelineno-63-7" href="#__codelineno-63-7"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">5</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.521<span class="w"> </span>ms
<a id="__codelineno-63-8" name="__codelineno-63-8" href="#__codelineno-63-8"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">6</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.495<span class="w"> </span>ms
<a id="__codelineno-63-9" name="__codelineno-63-9" href="#__codelineno-63-9"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">7</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.743<span class="w"> </span>ms
<a id="__codelineno-63-10" name="__codelineno-63-10" href="#__codelineno-63-10"></a>...<span class="w"> </span>Disconnecting<span class="w"> </span>patch<span class="w"> </span>cable,<span class="w"> </span>thus<span class="w"> </span>losing<span class="w"> </span>packets
<a id="__codelineno-63-11" name="__codelineno-63-11" href="#__codelineno-63-11"></a>...<span class="w"> </span>and<span class="w"> </span>reconnecting<span class="w"> </span>again.<span class="w"> </span>Connectivity<span class="w"> </span>resumes.
<a id="__codelineno-63-12" name="__codelineno-63-12" href="#__codelineno-63-12"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">16</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.961<span class="w"> </span>ms
<a id="__codelineno-63-13" name="__codelineno-63-13" href="#__codelineno-63-13"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">17</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.513<span class="w"> </span>ms
<a id="__codelineno-63-14" name="__codelineno-63-14" href="#__codelineno-63-14"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">18</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.794<span class="w"> </span>ms
<a id="__codelineno-63-15" name="__codelineno-63-15" href="#__codelineno-63-15"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">19</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.755<span class="w"> </span>ms
<a id="__codelineno-63-16" name="__codelineno-63-16" href="#__codelineno-63-16"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">20</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.779<span class="w"> </span>ms
<a id="__codelineno-63-17" name="__codelineno-63-17" href="#__codelineno-63-17"></a>^C
<a id="__codelineno-63-18" name="__codelineno-63-18" href="#__codelineno-63-18"></a>---<span class="w"> </span>ff02::1%eth1<span class="w"> </span>ping<span class="w"> </span>statistics<span class="w"> </span>---
<a id="__codelineno-63-19" name="__codelineno-63-19" href="#__codelineno-63-19"></a><span class="m">20</span><span class="w"> </span>packets<span class="w"> </span>transmitted,<span class="w"> </span><span class="m">12</span><span class="w"> </span>received,<span class="w"> </span><span class="m">40</span>%<span class="w"> </span>packet<span class="w"> </span>loss,<span class="w"> </span><span class="nb">time</span><span class="w"> </span>19432ms
<a id="__codelineno-63-20" name="__codelineno-63-20" href="#__codelineno-63-20"></a>rtt<span class="w"> </span>min/avg/max/mdev<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span>.448/0.634/0.961/0.156<span class="w"> </span>ms
<a id="__codelineno-63-21" name="__codelineno-63-21" href="#__codelineno-63-21"></a>~<span class="w"> </span>$<span class="w"> </span>
</code></pre></div>
<h4 id="add-ip-address-on-switch"><a id="ip-on-switch"></a> Add IP Address on Switch<a class="headerlink" href="#add-ip-address-on-switch" title="Permanent link">&para;</a></h4>
<p>The configuration so far does not provide a means to connect to the
switch management via SSH or NETCONF, as the switch has no IP
address. The example below shows how to add the switch to VLAN 10 (as
used for ports e1 and e2) and enables IPv6.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-64-1" name="__codelineno-64-1" href="#__codelineno-64-1"></a>admin@example:/config/&gt;<span class="w"> </span>edit<span class="w"> </span>interface<span class="w"> </span>vlan10
<a id="__codelineno-64-2" name="__codelineno-64-2" href="#__codelineno-64-2"></a>admin@example:/config/interface/vlan10/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span>lower-layer-if<span class="w"> </span>br0
<a id="__codelineno-64-3" name="__codelineno-64-3" href="#__codelineno-64-3"></a>admin@example:/config/interface/vlan10/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>ipv6<span class="w"> </span>enabled<span class="w"> </span>
<a id="__codelineno-64-4" name="__codelineno-64-4" href="#__codelineno-64-4"></a>admin@example:/config/interface/vlan10/&gt;<span class="w"> </span>show
<a id="__codelineno-64-5" name="__codelineno-64-5" href="#__codelineno-64-5"></a><span class="nb">type</span><span class="w"> </span>vlan<span class="p">;</span>
<a id="__codelineno-64-6" name="__codelineno-64-6" href="#__codelineno-64-6"></a>ipv6<span class="w"> </span><span class="o">{</span>
<a id="__codelineno-64-7" name="__codelineno-64-7" href="#__codelineno-64-7"></a><span class="w"> </span>enabled<span class="w"> </span>true<span class="p">;</span>
<a id="__codelineno-64-8" name="__codelineno-64-8" href="#__codelineno-64-8"></a><span class="o">}</span>
<a id="__codelineno-64-9" name="__codelineno-64-9" href="#__codelineno-64-9"></a>vlan<span class="w"> </span><span class="o">{</span>
<a id="__codelineno-64-10" name="__codelineno-64-10" href="#__codelineno-64-10"></a><span class="w"> </span>tag-type<span class="w"> </span>c-vlan<span class="p">;</span>
<a id="__codelineno-64-11" name="__codelineno-64-11" href="#__codelineno-64-11"></a><span class="w"> </span>id<span class="w"> </span><span class="m">10</span><span class="p">;</span>
<a id="__codelineno-64-12" name="__codelineno-64-12" href="#__codelineno-64-12"></a><span class="w"> </span>lower-layer-if<span class="w"> </span>br0<span class="p">;</span>
<a id="__codelineno-64-13" name="__codelineno-64-13" href="#__codelineno-64-13"></a><span class="o">}</span>
<a id="__codelineno-64-14" name="__codelineno-64-14" href="#__codelineno-64-14"></a>admin@example:/config/interface/vlan10/&gt;<span class="w"> </span>
<a id="__codelineno-64-15" name="__codelineno-64-15" href="#__codelineno-64-15"></a>admin@example:/config/interface/vlan10/&gt;<span class="w"> </span>end
<a id="__codelineno-64-16" name="__codelineno-64-16" href="#__codelineno-64-16"></a>admin@example:/config/&gt;<span class="w"> </span>edit<span class="w"> </span>interface<span class="w"> </span>br0<span class="w"> </span>bridge<span class="w"> </span>vlans<span class="w"> </span>
<a id="__codelineno-64-17" name="__codelineno-64-17" href="#__codelineno-64-17"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span><span class="nb">set</span><span class="w"> </span>vlan<span class="w"> </span><span class="m">10</span><span class="w"> </span>tagged<span class="w"> </span>br0
<a id="__codelineno-64-18" name="__codelineno-64-18" href="#__codelineno-64-18"></a>admin@example:/config/interface/br0/bridge/vlans/&gt;<span class="w"> </span>leave
<a id="__codelineno-64-19" name="__codelineno-64-19" href="#__codelineno-64-19"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<p>Interface <em>vlan10</em> with an auto-configured IPv6 address should appear.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-65-1" name="__codelineno-65-1" href="#__codelineno-65-1"></a>admin@example:/&gt;<span class="w"> </span>show<span class="w"> </span>interfaces
<a id="__codelineno-65-2" name="__codelineno-65-2" href="#__codelineno-65-2"></a>INTERFACE<span class="w"> </span>PROTOCOL<span class="w"> </span>STATE<span class="w"> </span>DATA<span class="w"> </span>
<a id="__codelineno-65-3" name="__codelineno-65-3" href="#__codelineno-65-3"></a>br0<span class="w"> </span>bridge<span class="w"> </span>vlan:10t<span class="w"> </span>
<a id="__codelineno-65-4" name="__codelineno-65-4" href="#__codelineno-65-4"></a><span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-65-5" name="__codelineno-65-5" href="#__codelineno-65-5"></a><span class="w"> </span>e1<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-65-6" name="__codelineno-65-6" href="#__codelineno-65-6"></a><span class="w"> </span>e2<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:10u<span class="w"> </span>pvid:10<span class="w"> </span>
<a id="__codelineno-65-7" name="__codelineno-65-7" href="#__codelineno-65-7"></a><span class="w"> </span>e3<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-65-8" name="__codelineno-65-8" href="#__codelineno-65-8"></a><span class="w"> </span>e4<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:20u<span class="w"> </span>pvid:20<span class="w"> </span>
<a id="__codelineno-65-9" name="__codelineno-65-9" href="#__codelineno-65-9"></a><span class="w"> </span>e5<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-65-10" name="__codelineno-65-10" href="#__codelineno-65-10"></a><span class="w"> </span>e6<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:30u<span class="w"> </span>pvid:30<span class="w"> </span>
<a id="__codelineno-65-11" name="__codelineno-65-11" href="#__codelineno-65-11"></a><span class="w"> </span>e7<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-65-12" name="__codelineno-65-12" href="#__codelineno-65-12"></a><span class="w"> </span>e8<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:40u<span class="w"> </span>pvid:40<span class="w"> </span>
<a id="__codelineno-65-13" name="__codelineno-65-13" href="#__codelineno-65-13"></a><span class="w"> </span>e9<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-65-14" name="__codelineno-65-14" href="#__codelineno-65-14"></a><span class="w"> </span>e10<span class="w"> </span>bridge<span class="w"> </span>FORWARDING<span class="w"> </span>vlan:50u<span class="w"> </span>pvid:50<span class="w"> </span>
<a id="__codelineno-65-15" name="__codelineno-65-15" href="#__codelineno-65-15"></a>lo<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:00:00:00:00:00<span class="w"> </span>
<a id="__codelineno-65-16" name="__codelineno-65-16" href="#__codelineno-65-16"></a><span class="w"> </span>ipv4<span class="w"> </span><span class="m">127</span>.0.0.1/8<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-65-17" name="__codelineno-65-17" href="#__codelineno-65-17"></a><span class="w"> </span>ipv6<span class="w"> </span>::1/128<span class="w"> </span><span class="o">(</span>static<span class="o">)</span>
<a id="__codelineno-65-18" name="__codelineno-65-18" href="#__codelineno-65-18"></a>vlan10<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-65-19" name="__codelineno-65-19" href="#__codelineno-65-19"></a><span class="w"> </span>ipv6<span class="w"> </span>fe80::0053:00ff:fe06:1101/64<span class="w"> </span><span class="o">(</span>link-layer<span class="o">)</span>
<a id="__codelineno-65-20" name="__codelineno-65-20" href="#__codelineno-65-20"></a><span class="w"> </span>br0<span class="w"> </span>ethernet<span class="w"> </span>UP<span class="w"> </span><span class="m">00</span>:53:00:06:11:01<span class="w"> </span>
<a id="__codelineno-65-21" name="__codelineno-65-21" href="#__codelineno-65-21"></a>admin@example:/&gt;<span class="w"> </span>
</code></pre></div>
<p>When pinging "IPv6 all hosts" from the PC, there should be two
responses for every ping, one from the switch and one from the PC
attached to e10.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-66-1" name="__codelineno-66-1" href="#__codelineno-66-1"></a>~<span class="w"> </span>$<span class="w"> </span>ping<span class="w"> </span>-L<span class="w"> </span>ff02::1%eth1
<a id="__codelineno-66-2" name="__codelineno-66-2" href="#__codelineno-66-2"></a>PING<span class="w"> </span>ff02::1%eth1<span class="o">(</span>ff02::1%eth1<span class="o">)</span><span class="w"> </span><span class="m">56</span><span class="w"> </span>data<span class="w"> </span>bytes
<a id="__codelineno-66-3" name="__codelineno-66-3" href="#__codelineno-66-3"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.508<span class="w"> </span>ms
<a id="__codelineno-66-4" name="__codelineno-66-4" href="#__codelineno-66-4"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::0053:00ff:fe06:1101%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.968<span class="w"> </span>ms
<a id="__codelineno-66-5" name="__codelineno-66-5" href="#__codelineno-66-5"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">2</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.866<span class="w"> </span>ms
<a id="__codelineno-66-6" name="__codelineno-66-6" href="#__codelineno-66-6"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::0053:00ff:fe06:1101%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">2</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.867<span class="w"> </span>ms
<a id="__codelineno-66-7" name="__codelineno-66-7" href="#__codelineno-66-7"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::0053:00ff:fe06:1101%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">3</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.467<span class="w"> </span>ms
<a id="__codelineno-66-8" name="__codelineno-66-8" href="#__codelineno-66-8"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">3</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.469<span class="w"> </span>ms
<a id="__codelineno-66-9" name="__codelineno-66-9" href="#__codelineno-66-9"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::488a:a35f:9d41:ac9c%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.452<span class="w"> </span>ms
<a id="__codelineno-66-10" name="__codelineno-66-10" href="#__codelineno-66-10"></a><span class="m">64</span><span class="w"> </span>bytes<span class="w"> </span>from<span class="w"> </span>fe80::0053:00ff:fe06:1101%eth1:<span class="w"> </span><span class="nv">icmp_seq</span><span class="o">=</span><span class="m">4</span><span class="w"> </span><span class="nv">ttl</span><span class="o">=</span><span class="m">64</span><span class="w"> </span><span class="nv">time</span><span class="o">=</span><span class="m">0</span>.453<span class="w"> </span>ms
<a id="__codelineno-66-11" name="__codelineno-66-11" href="#__codelineno-66-11"></a>^C
<a id="__codelineno-66-12" name="__codelineno-66-12" href="#__codelineno-66-12"></a>---<span class="w"> </span>ff02::1%eth1<span class="w"> </span>ping<span class="w"> </span>statistics<span class="w"> </span>---
<a id="__codelineno-66-13" name="__codelineno-66-13" href="#__codelineno-66-13"></a><span class="m">4</span><span class="w"> </span>packets<span class="w"> </span>transmitted,<span class="w"> </span><span class="m">4</span><span class="w"> </span>received,<span class="w"> </span>+4<span class="w"> </span>duplicates,<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>packet<span class="w"> </span>loss,<span class="w"> </span><span class="nb">time</span><span class="w"> </span>3031ms
<a id="__codelineno-66-14" name="__codelineno-66-14" href="#__codelineno-66-14"></a>rtt<span class="w"> </span>min/avg/max/mdev<span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span>.452/0.631/0.968/0.211<span class="w"> </span>ms
<a id="__codelineno-66-15" name="__codelineno-66-15" href="#__codelineno-66-15"></a>~<span class="w"> </span>$<span class="w"> </span>
</code></pre></div>
<p>It should now be possible to access the switch from the PC via SSH (or NETCONF).</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-67-1" name="__codelineno-67-1" href="#__codelineno-67-1"></a>~<span class="w"> </span>$<span class="w"> </span>ssh<span class="w"> </span>admin@fe80::0053:00ff:fe06:1101%eth1
<a id="__codelineno-67-2" name="__codelineno-67-2" href="#__codelineno-67-2"></a>admin@fe80::0053:00ff:fe06:1101%eth1<span class="s1">&#39;s password: </span>
<a id="__codelineno-67-3" name="__codelineno-67-3" href="#__codelineno-67-3"></a><span class="s1">.-------.</span>
<a id="__codelineno-67-4" name="__codelineno-67-4" href="#__codelineno-67-4"></a><span class="s1">| . . | Infix OS — Immutable.Friendly.Secure</span>
<a id="__codelineno-67-5" name="__codelineno-67-5" href="#__codelineno-67-5"></a><span class="s1">|-. v .-| https://kernelkit.org</span>
<a id="__codelineno-67-6" name="__codelineno-67-6" href="#__codelineno-67-6"></a><span class="s1">&#39;</span>-<span class="s1">&#39;---&#39;</span>-<span class="s1">&#39;</span>
<a id="__codelineno-67-7" name="__codelineno-67-7" href="#__codelineno-67-7"></a>
<a id="__codelineno-67-8" name="__codelineno-67-8" href="#__codelineno-67-8"></a><span class="s1">Run the command &#39;</span>cli<span class="err">&#39;</span><span class="w"> </span><span class="k">for</span><span class="w"> </span>interactive<span class="w"> </span>OAM
<a id="__codelineno-67-9" name="__codelineno-67-9" href="#__codelineno-67-9"></a>
<a id="__codelineno-67-10" name="__codelineno-67-10" href="#__codelineno-67-10"></a>admin@example:~$<span class="w"> </span><span class="nb">exit</span>
<a id="__codelineno-67-11" name="__codelineno-67-11" href="#__codelineno-67-11"></a>~<span class="w"> </span>$
</code></pre></div>
<p>See previous sections on <a href="#backup">backup</a> and <a href="#restore">restore</a> of
the created configuration.</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>Press Win-r to bring up the Run dialog, enter <code>cmd.exe</code> and press
enter. Then type in <code>ipconfig /all</code> to list all interfaces, their
status, as well as interface index.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</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 &copy; 2025 The KernelKit Authors
</div>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["toc.follow", "navigation.path", "navigation.instant", "navigation.tracking", "navigation.sections", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.footnote.tooltips"], "search": "../assets/javascripts/workers/search.d50fe291.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.56ea9cef.min.js"></script>
</body>
</html>