Files
infix/dev/scripting-prod/index.html
T

2427 lines
70 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-prod/">
<link rel="prev" href="../scripting-sysrepocfg/">
<link rel="next" href="../scripting-netconf/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
<title>Production Testing - User's Guide</title>
<link rel="stylesheet" href="../assets/stylesheets/main.618322db.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<link href="../assets/stylesheets/glightbox.min.css" rel="stylesheet"><script src="../assets/javascripts/glightbox.min.js"></script><style id="glightbox-style">
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: black; }
.glightbox-clean .gslide-media { -webkit-box-shadow: none; box-shadow: none; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color); }
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color); }
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color); }
</style></head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#scripting-for-production-tests" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="https://kernelkit.org/" title="User's Guide" class="md-header__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../logo-plain.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
User's Guide
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Production Testing
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"></path></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="orange" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"></path></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"></path></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/kernelkit/infix/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"></path></svg>
</div>
<div class="md-source__repository">
kernelkit/infix
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://kernelkit.org/" title="User's Guide" class="md-nav__button md-logo" aria-label="User's Guide" data-md-component="logo">
<img src="../logo-plain.png" alt="logo">
</a>
User's Guide
</label>
<div class="md-nav__source">
<a href="https://github.com/kernelkit/infix/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"></path></svg>
</div>
<div class="md-source__repository">
kernelkit/infix
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
CLI
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
CLI
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../cli/introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/configure/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/keybindings/" class="md-nav__link">
<span class="md-ellipsis">
Keybindings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/netcalc/" class="md-nav__link">
<span class="md-ellipsis">
Network Calculator
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/tcpdump/" class="md-nav__link">
<span class="md-ellipsis">
Network Monitoring
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/quick/" class="md-nav__link">
<span class="md-ellipsis">
Quickstart Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/text-editor/" class="md-nav__link">
<span class="md-ellipsis">
Text Editor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cli/upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Upgrading
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../container/" class="md-nav__link">
<span class="md-ellipsis">
Docker Containers
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Networking
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Networking
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../networking/" class="md-nav__link">
<span class="md-ellipsis">
Network Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../firewall/" class="md-nav__link">
<span class="md-ellipsis">
Firewall Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qos/" class="md-nav__link">
<span class="md-ellipsis">
Quality of Service
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../eth-counters/" class="md-nav__link">
<span class="md-ellipsis">
RMON Counters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tunnels/" class="md-nav__link">
<span class="md-ellipsis">
Tunneling (L2/L3)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../wifi/" class="md-nav__link">
<span class="md-ellipsis">
Wireless LAN (WiFi)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5">
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Services
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Services
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../discovery/" class="md-nav__link">
<span class="md-ellipsis">
Device Discovery
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhcp/" class="md-nav__link">
<span class="md-ellipsis">
DHCP Server
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6">
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
System
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
System
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../boot/" class="md-nav__link">
<span class="md-ellipsis">
Boot Procedure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../system/" class="md-nav__link">
<span class="md-ellipsis">
Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hardware/" class="md-nav__link">
<span class="md-ellipsis">
Hardware Info &amp; Status
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../management/" class="md-nav__link">
<span class="md-ellipsis">
Management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../syslog/" class="md-nav__link">
<span class="md-ellipsis">
Syslog Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../support/" class="md-nav__link">
<span class="md-ellipsis">
Support Data
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" checked>
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Scripting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Scripting
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../scripting/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-sysrepocfg/" class="md-nav__link">
<span class="md-ellipsis">
Legacy Scripting
</span>
</a>
</li>
<li class="md-nav__item 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">
Production Testing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Production Testing
</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="#vlan-snake" class="md-nav__link">
<span class="md-ellipsis">
VLAN Snake
</span>
</a>
</li>
<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="#set-ip-address" class="md-nav__link">
<span class="md-ellipsis">
Set IP Address
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../scripting-netconf/" class="md-nav__link">
<span class="md-ellipsis">
With NETCONF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-restconf/" class="md-nav__link">
<span class="md-ellipsis">
With RESTCONF
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8">
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Developer's Corner
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Developer's Corner
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../branding/" class="md-nav__link">
<span class="md-ellipsis">
Branding &amp; Releases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../developers-guide/" class="md-nav__link">
<span class="md-ellipsis">
Developer's Guide
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../override-package/" class="md-nav__link">
<span class="md-ellipsis">
Developing with Buildroot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../netboot/" class="md-nav__link">
<span class="md-ellipsis">
Netboot HowTo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../testing/" class="md-nav__link">
<span class="md-ellipsis">
Regression Testing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../test-arch/" class="md-nav__link">
<span class="md-ellipsis">
Test System Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../virtual/" class="md-nav__link">
<span class="md-ellipsis">
Virtual Environments
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vpd/" class="md-nav__link">
<span class="md-ellipsis">
Vital Product Data (VPD)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../license/" class="md-nav__link">
<span class="md-ellipsis">
Origin &amp; Licensing
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#vlan-snake" class="md-nav__link">
<span class="md-ellipsis">
VLAN Snake
</span>
</a>
</li>
<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="#set-ip-address" class="md-nav__link">
<span class="md-ellipsis">
Set IP Address
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<nav class="md-path" aria-label="Navigation">
<ol class="md-path__list">
<li class="md-path__item">
<a href=".." class="md-path__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-path__item">
<a href="../scripting/" class="md-path__link">
<span class="md-ellipsis">
Scripting
</span>
</a>
</li>
</ol>
</nav>
<article class="md-content__inner md-typeset">
<h1 id="scripting-for-production-tests">Scripting for Production Tests<a class="headerlink" href="#scripting-for-production-tests" title="Permanent link"></a></h1>
<p>This document shows how to set up and remotely script devices with a
focus on production testing.</p>
<h2 id="vlan-snake">VLAN Snake<a class="headerlink" href="#vlan-snake" title="Permanent link"></a></h2>
<p>As part of production tests, verification of Ethernet ports is usually
expected. A common way for devices with multiple bridged Ethernet ports
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 <a href="../scripting-sysrepocfg/#restore-configuration">described previously</a>.</p>
<p>In this example we assume a 10 port switch, with ports e1-e10. 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>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<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>
</div>
<h2 id="configuration-at-start">Configuration at Start<a class="headerlink" href="#configuration-at-start" title="Permanent link"></a></h2>
<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-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> ipv6 ::1/128 (static)
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>e1 ethernet LOWER-DOWN 00:53:00:06:11:01
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>e2 ethernet LOWER-DOWN 00:53:00:06:11:02
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>e3 ethernet LOWER-DOWN 00:53:00:06:11:03
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>e4 ethernet LOWER-DOWN 00:53:00:06:11:04
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>e5 ethernet LOWER-DOWN 00:53:00:06:11:05
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a>e6 ethernet LOWER-DOWN 00:53:00:06:11:06
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a>e7 ethernet LOWER-DOWN 00:53:00:06:11:07
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>e8 ethernet LOWER-DOWN 00:53:00:06:11:08
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a>e9 ethernet LOWER-DOWN 00:53:00:06:11:09
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a>e10 ethernet UP 00:53:00:06:11:0a
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a> ipv6 fe80::0053:00ff:fe06:110a/64 (link-layer)
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a>admin@example:/&gt;
</code></pre></div>
<h2 id="creating-bridge-and-adding-ports">Creating Bridge and Adding Ports<a class="headerlink" href="#creating-bridge-and-adding-ports" title="Permanent link"></a></h2>
<p>The following example <a href="../networking/#bridging">creates a bridge</a> and adds all Ethernet ports
to it. On a device with layer-2 offloading (switch fabric), this sets
all ports in the same VLAN. The next section sets up VLAN isolation.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>admin@example:/&gt; configure
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>admin@example:/config/interface/br0/&gt; end
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>admin@example:/config/&gt; set interface e1 bridge-port bridge br0
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>admin@example:/config/&gt; set interface e2 bridge-port bridge br0
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>admin@example:/config/&gt; set interface e3 bridge-port bridge br0
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>admin@example:/config/&gt; set interface e4 bridge-port bridge br0
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>admin@example:/config/&gt; set interface e5 bridge-port bridge br0
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>admin@example:/config/&gt; set interface e6 bridge-port bridge br0
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a>admin@example:/config/&gt; set interface e7 bridge-port bridge br0
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>admin@example:/config/&gt; set interface e8 bridge-port bridge br0
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a>admin@example:/config/&gt; set interface e9 bridge-port bridge br0
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a>admin@example:/config/&gt; set interface e10 bridge-port bridge br0
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a>admin@example:/config/&gt;
</code></pre></div>
<p>The interface status can be viewed using <code>show interfaces</code> after leaving
configuration context. When configuring via SSH, first assign an IP
address to <code>br0</code> <em>before leaving</em> configuration context, e.g.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>admin@example:/config/&gt; set interface br0 ipv6 enabled
</code></pre></div>
<p>This enables IPv6 SLAAC, auto-configured address. Or skip <code>leave</code> and
stay in configuration context until you have completed all the device
setup, including <a href="#set-ip-address">setting IP address</a>.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>admin@example:/config/&gt; leave
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>admin@example:/&gt;
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>br0 bridge
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>│ ethernet UP 00:53:00:06:11:01
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a>├ e1 bridge LOWER-DOWN
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a>├ e2 bridge LOWER-DOWN
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a>├ e3 bridge LOWER-DOWN
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>├ e4 bridge LOWER-DOWN
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a>├ e5 bridge LOWER-DOWN
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a>├ e6 bridge LOWER-DOWN
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a>├ e7 bridge LOWER-DOWN
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a>├ e8 bridge LOWER-DOWN
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a>├ e9 bridge LOWER-DOWN
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a>└ e10 bridge FORWARDING
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a> ipv6 ::1/128 (static)
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a>admin@example:/&gt;
</code></pre></div>
<h2 id="assign-vlans-to-ports">Assign VLANs to Ports<a class="headerlink" href="#assign-vlans-to-ports" title="Permanent link"></a></h2>
<p>Now, configure VLANs as outlined <a href="#vlan-snake">previously</a>: default VID
for ingress (PVID), which is done per port, and egress mode (untagged),
which is done at the bridge level. See the <a href="../networking/#vlan-filtering-bridge">VLAN bridges</a> section for
more information.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>admin@example:/&gt;
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>admin@example:/&gt; configure
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>admin@example:/config/&gt; set interface e1 bridge-port pvid 10
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>admin@example:/config/&gt; set interface e2 bridge-port pvid 10
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>admin@example:/config/&gt; set interface e3 bridge-port pvid 20
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>admin@example:/config/&gt; set interface e4 bridge-port pvid 20
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a>admin@example:/config/&gt; set interface e5 bridge-port pvid 30
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a>admin@example:/config/&gt; set interface e6 bridge-port pvid 30
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a>admin@example:/config/&gt; set interface e7 bridge-port pvid 40
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a>admin@example:/config/&gt; set interface e8 bridge-port pvid 40
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a>admin@example:/config/&gt; set interface e9 bridge-port pvid 50
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a>admin@example:/config/&gt; set interface e10 bridge-port pvid 50
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a>admin@example:/config/&gt; edit interface br0
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a>admin@example:/config/interface/br0/&gt; edit bridge vlans
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 10 untagged e1
<a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 10 untagged e2
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 20 untagged e3
<a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 20 untagged e4
<a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 30 untagged e5
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 30 untagged e6
<a id="__codelineno-4-21" name="__codelineno-4-21" href="#__codelineno-4-21"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 40 untagged e7
<a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 40 untagged e8
<a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 50 untagged e9
<a id="__codelineno-4-24" name="__codelineno-4-24" href="#__codelineno-4-24"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 50 untagged e10
<a id="__codelineno-4-25" name="__codelineno-4-25" href="#__codelineno-4-25"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; leave
<a id="__codelineno-4-26" name="__codelineno-4-26" href="#__codelineno-4-26"></a>admin@example:/&gt;
</code></pre></div>
<p>Interface status would now should something like the following</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>br0 bridge
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a>│ ethernet UP 00:53:00:06:11:01
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a>├ e1 bridge LOWER-DOWN vlan:10u pvid:10
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a>├ e2 bridge LOWER-DOWN vlan:10u pvid:10
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a>├ e3 bridge LOWER-DOWN vlan:20u pvid:20
<a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a>├ e4 bridge LOWER-DOWN vlan:20u pvid:20
<a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a>├ e5 bridge LOWER-DOWN vlan:30u pvid:30
<a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a>├ e6 bridge LOWER-DOWN vlan:30u pvid:30
<a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a>├ e7 bridge LOWER-DOWN vlan:40u pvid:40
<a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a>├ e8 bridge LOWER-DOWN vlan:40u pvid:40
<a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a>├ e9 bridge LOWER-DOWN vlan:50u pvid:50
<a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a>└ e10 bridge FORWARDING vlan:50u pvid:50
<a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-5-17" name="__codelineno-5-17" href="#__codelineno-5-17"></a> ipv6 ::1/128 (static)
<a id="__codelineno-5-18" name="__codelineno-5-18" href="#__codelineno-5-18"></a>admin@example:/&gt;
</code></pre></div>
<h2 id="connect-cables-and-test">Connect Cables and Test<a class="headerlink" href="#connect-cables-and-test" title="Permanent link"></a></h2>
<p>We can now connect the PC to e1 and e10, while the other ports are
patched according to <a href="#vlan-snake">above</a>. We should see link up and
<em>FORWARDING</em> on all ports in the bridge.</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>br0 bridge
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a>│ ethernet UP 00:53:00:06:11:01
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a>├ e1 bridge FORWARDING vlan:10u pvid:10
<a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a>├ e2 bridge FORWARDING vlan:10u pvid:10
<a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a>├ e3 bridge FORWARDING vlan:20u pvid:20
<a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a>├ e4 bridge FORWARDING vlan:20u pvid:20
<a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a>├ e5 bridge FORWARDING vlan:30u pvid:30
<a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a>├ e6 bridge FORWARDING vlan:30u pvid:30
<a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a>├ e7 bridge FORWARDING vlan:40u pvid:40
<a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a>├ e8 bridge FORWARDING vlan:40u pvid:40
<a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a>├ e9 bridge FORWARDING vlan:50u pvid:50
<a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a>└ e10 bridge FORWARDING vlan:50u pvid:50
<a id="__codelineno-6-15" name="__codelineno-6-15" href="#__codelineno-6-15"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-6-16" name="__codelineno-6-16" href="#__codelineno-6-16"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-6-17" name="__codelineno-6-17" href="#__codelineno-6-17"></a> ipv6 ::1/128 (static)
<a id="__codelineno-6-18" name="__codelineno-6-18" href="#__codelineno-6-18"></a>admin@example:/&gt;
</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>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>We recommend using network namespaces (Linux only) on the PC to ensure
that traffic is actually sent out to the switch, rather than being
looped back internally. Alternatively, use two separate PCs.</p>
</div>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>~ $ ping -L ff02::1%eth1
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.496 ms
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.514 ms
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.473 ms
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.736 ms
<a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=5 ttl=64 time=0.563 ms
<a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=6 ttl=64 time=0.507 ms
<a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a>^C
<a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a>--- ff02::1%eth1 ping statistics ---
<a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a>6 packets transmitted, 6 received, 0% packet loss, time 5108ms
<a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a>rtt min/avg/max/mdev = 0.473/0.548/0.736/0.088 ms
<a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a>~ $
</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-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>~ $ ping -L ff02::1%eth1
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.510 ms
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.448 ms
<a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.583 ms
<a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.515 ms
<a id="__codelineno-8-7" name="__codelineno-8-7" href="#__codelineno-8-7"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=5 ttl=64 time=0.521 ms
<a id="__codelineno-8-8" name="__codelineno-8-8" href="#__codelineno-8-8"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=6 ttl=64 time=0.495 ms
<a id="__codelineno-8-9" name="__codelineno-8-9" href="#__codelineno-8-9"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=7 ttl=64 time=0.743 ms
<a id="__codelineno-8-10" name="__codelineno-8-10" href="#__codelineno-8-10"></a>... Disconnecting patch cable, thus losing packets
<a id="__codelineno-8-11" name="__codelineno-8-11" href="#__codelineno-8-11"></a>... and reconnecting again. Connectivity resumes.
<a id="__codelineno-8-12" name="__codelineno-8-12" href="#__codelineno-8-12"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=16 ttl=64 time=0.961 ms
<a id="__codelineno-8-13" name="__codelineno-8-13" href="#__codelineno-8-13"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=17 ttl=64 time=0.513 ms
<a id="__codelineno-8-14" name="__codelineno-8-14" href="#__codelineno-8-14"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=18 ttl=64 time=0.794 ms
<a id="__codelineno-8-15" name="__codelineno-8-15" href="#__codelineno-8-15"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=19 ttl=64 time=0.755 ms
<a id="__codelineno-8-16" name="__codelineno-8-16" href="#__codelineno-8-16"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=20 ttl=64 time=0.779 ms
<a id="__codelineno-8-17" name="__codelineno-8-17" href="#__codelineno-8-17"></a>^C
<a id="__codelineno-8-18" name="__codelineno-8-18" href="#__codelineno-8-18"></a>--- ff02::1%eth1 ping statistics ---
<a id="__codelineno-8-19" name="__codelineno-8-19" href="#__codelineno-8-19"></a>20 packets transmitted, 12 received, 40% packet loss, time 19432ms
<a id="__codelineno-8-20" name="__codelineno-8-20" href="#__codelineno-8-20"></a>rtt min/avg/max/mdev = 0.448/0.634/0.961/0.156 ms
<a id="__codelineno-8-21" name="__codelineno-8-21" href="#__codelineno-8-21"></a>~ $
</code></pre></div>
<h2 id="set-ip-address">Set IP Address<a class="headerlink" href="#set-ip-address" title="Permanent link"></a></h2>
<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-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>admin@example:/config/&gt; edit interface vlan10
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>admin@example:/config/interface/vlan10/&gt; set vlan lower-layer-if br0
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a>admin@example:/config/interface/vlan10/&gt; set ipv6 enabled
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a>admin@example:/config/interface/vlan10/&gt; show
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a>type vlan;
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a>ipv6 {
<a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> enabled true;
<a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a>}
<a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a>vlan {
<a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a> tag-type c-vlan;
<a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a> id 10;
<a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> lower-layer-if br0;
<a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a>}
<a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a>admin@example:/config/interface/vlan10/&gt;
<a id="__codelineno-9-15" name="__codelineno-9-15" href="#__codelineno-9-15"></a>admin@example:/config/interface/vlan10/&gt; end
<a id="__codelineno-9-16" name="__codelineno-9-16" href="#__codelineno-9-16"></a>admin@example:/config/&gt; edit interface br0 bridge vlans
<a id="__codelineno-9-17" name="__codelineno-9-17" href="#__codelineno-9-17"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; set vlan 10 tagged br0
<a id="__codelineno-9-18" name="__codelineno-9-18" href="#__codelineno-9-18"></a>admin@example:/config/interface/br0/bridge/vlans/&gt; leave
<a id="__codelineno-9-19" name="__codelineno-9-19" href="#__codelineno-9-19"></a>admin@example:/&gt;
</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-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>admin@example:/&gt; show interfaces
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>INTERFACE PROTOCOL STATE DATA
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a>br0 bridge vlan:10t
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a>│ ethernet UP 00:53:00:06:11:01
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a>├ e1 bridge FORWARDING vlan:10u pvid:10
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a>├ e2 bridge FORWARDING vlan:10u pvid:10
<a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a>├ e3 bridge FORWARDING vlan:20u pvid:20
<a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a>├ e4 bridge FORWARDING vlan:20u pvid:20
<a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a>├ e5 bridge FORWARDING vlan:30u pvid:30
<a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a>├ e6 bridge FORWARDING vlan:30u pvid:30
<a id="__codelineno-10-11" name="__codelineno-10-11" href="#__codelineno-10-11"></a>├ e7 bridge FORWARDING vlan:40u pvid:40
<a id="__codelineno-10-12" name="__codelineno-10-12" href="#__codelineno-10-12"></a>├ e8 bridge FORWARDING vlan:40u pvid:40
<a id="__codelineno-10-13" name="__codelineno-10-13" href="#__codelineno-10-13"></a>├ e9 bridge FORWARDING vlan:50u pvid:50
<a id="__codelineno-10-14" name="__codelineno-10-14" href="#__codelineno-10-14"></a>└ e10 bridge FORWARDING vlan:50u pvid:50
<a id="__codelineno-10-15" name="__codelineno-10-15" href="#__codelineno-10-15"></a>lo ethernet UP 00:00:00:00:00:00
<a id="__codelineno-10-16" name="__codelineno-10-16" href="#__codelineno-10-16"></a> ipv4 127.0.0.1/8 (static)
<a id="__codelineno-10-17" name="__codelineno-10-17" href="#__codelineno-10-17"></a> ipv6 ::1/128 (static)
<a id="__codelineno-10-18" name="__codelineno-10-18" href="#__codelineno-10-18"></a>vlan10 ethernet UP 00:53:00:06:11:01
<a id="__codelineno-10-19" name="__codelineno-10-19" href="#__codelineno-10-19"></a>│ ipv6 fe80::0053:00ff:fe06:1101/64 (link-layer)
<a id="__codelineno-10-20" name="__codelineno-10-20" href="#__codelineno-10-20"></a>└ br0 ethernet UP 00:53:00:06:11:01
<a id="__codelineno-10-21" name="__codelineno-10-21" href="#__codelineno-10-21"></a>admin@example:/&gt;
</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-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>~ $ ping -L ff02::1%eth1
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>PING ff02::1%eth1(ff02::1%eth1) 56 data bytes
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=1 ttl=64 time=0.508 ms
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=1 ttl=64 time=0.968 ms
<a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=2 ttl=64 time=0.866 ms
<a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a>64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=2 ttl=64 time=0.867 ms
<a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a>64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=3 ttl=64 time=0.467 ms
<a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=3 ttl=64 time=0.469 ms
<a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a>64 bytes from fe80::488a:a35f:9d41:ac9c%eth1: icmp_seq=4 ttl=64 time=0.452 ms
<a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a>64 bytes from fe80::0053:00ff:fe06:1101%eth1: icmp_seq=4 ttl=64 time=0.453 ms
<a id="__codelineno-11-11" name="__codelineno-11-11" href="#__codelineno-11-11"></a>^C
<a id="__codelineno-11-12" name="__codelineno-11-12" href="#__codelineno-11-12"></a>--- ff02::1%eth1 ping statistics ---
<a id="__codelineno-11-13" name="__codelineno-11-13" href="#__codelineno-11-13"></a>4 packets transmitted, 4 received, +4 duplicates, 0% packet loss, time 3031ms
<a id="__codelineno-11-14" name="__codelineno-11-14" href="#__codelineno-11-14"></a>rtt min/avg/max/mdev = 0.452/0.631/0.968/0.211 ms
<a id="__codelineno-11-15" name="__codelineno-11-15" href="#__codelineno-11-15"></a>~ $
</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-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>~ $ ssh admin@fe80::0053:00ff:fe06:1101%eth1
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>admin@fe80::0053:00ff:fe06:1101%eth1's password:
<a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>.-------.
<a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>| . . | Infix OS — Immutable.Friendly.Secure
<a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a>|-. v .-| https://kernelkit.org
<a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a>'-'---'-'
<a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a>
<a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a>Run the command 'cli' for interactive OAM
<a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a>
<a id="__codelineno-12-10" name="__codelineno-12-10" href="#__codelineno-12-10"></a>admin@example:~$ exit
<a id="__codelineno-12-11" name="__codelineno-12-11" href="#__codelineno-12-11"></a>~ $
</code></pre></div>
<p>See previous sections on <a href="../scripting-sysrepocfg/#backup-configuration">backup</a> and <a href="../scripting-sysrepocfg/#restore-configuration">restore</a> of
the created configuration.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright © 2022-2025 The KernelKit Team
</div>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["toc.follow", "navigation.path", "navigation.instant", "navigation.instant.progress", "navigation.tracking", "navigation.indexes", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.footnote.tooltips"], "search": "../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.e71a0d61.min.js"></script>
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
document$.subscribe(()=>{ lightbox.reload(); });
</script></body></html>