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

3912 lines
139 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-netconf/">
<link rel="prev" href="../scripting-sysrepocfg/">
<link rel="next" href="../scripting-restconf/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
<title>NETCONF Scripting - User's Guide</title>
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
<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-with-netconf" 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://www.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">
NETCONF Scripting
</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://www.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">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../iface/" class="md-nav__link">
<span class="md-ellipsis">
Common Settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bridging/" class="md-nav__link">
<span class="md-ellipsis">
Bridging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lag/" class="md-nav__link">
<span class="md-ellipsis">
Link Aggregation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ethernet/" class="md-nav__link">
<span class="md-ellipsis">
Ethernet Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vlan/" class="md-nav__link">
<span class="md-ellipsis">
VLAN Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ip/" class="md-nav__link">
<span class="md-ellipsis">
IP Addressing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../routing/" class="md-nav__link">
<span class="md-ellipsis">
Routing
</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 md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_13">
<label class="md-nav__link" for="__nav_4_13" id="__nav_4_13_label" tabindex="0">
<span class="md-ellipsis">
VPN Tunnels
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_13_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_13">
<span class="md-nav__icon md-icon"></span>
VPN Tunnels
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a href="../vpn/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vpn-wireguard/" class="md-nav__link">
<span class="md-ellipsis">
WireGuard
</span>
</a>
</li>
</ul>
</nav>
</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>
<li class="md-nav__item">
<a href="../ntp/" class="md-nav__link">
<span class="md-ellipsis">
NTP Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ptp/" class="md-nav__link">
<span class="md-ellipsis">
PTP (IEEE 1588/802.1AS)
</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="../nacm/" class="md-nav__link">
<span class="md-ellipsis">
Access Control (NACM)
</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="../keystore/" class="md-nav__link">
<span class="md-ellipsis">
Keystore
</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">
NETCONF Scripting
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
NETCONF Scripting
</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="#netconf-vs-restconf" class="md-nav__link">
<span class="md-ellipsis">
NETCONF vs RESTCONF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#quick-start-with-netopeer2-cli" class="md-nav__link">
<span class="md-ellipsis">
Quick Start with netopeer2-cli
</span>
</a>
<nav class="md-nav" aria-label="Quick Start with netopeer2-cli">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#basic-operations-in-netopeer2-cli" class="md-nav__link">
<span class="md-ellipsis">
Basic Operations in netopeer2-cli
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#discovery-common-patterns" class="md-nav__link">
<span class="md-ellipsis">
Discovery &amp; Common Patterns
</span>
</a>
<nav class="md-nav" aria-label="Discovery &amp; Common Patterns">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#discovering-available-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Discovering Available Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-all-yang-capabilities" class="md-nav__link">
<span class="md-ellipsis">
Get All YANG Capabilities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-entire-running-configuration" class="md-nav__link">
<span class="md-ellipsis">
Get Entire Running Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-workflow-patterns" class="md-nav__link">
<span class="md-ellipsis">
Common Workflow Patterns
</span>
</a>
<nav class="md-nav" aria-label="Common Workflow Patterns">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pattern-1-find-interface-by-ip-address" class="md-nav__link">
<span class="md-ellipsis">
Pattern 1: Find interface by IP address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pattern-2-check-which-interfaces-are-down" class="md-nav__link">
<span class="md-ellipsis">
Pattern 2: Check which interfaces are down
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pattern-3-get-interface-statistics-for-monitoring" class="md-nav__link">
<span class="md-ellipsis">
Pattern 3: Get interface statistics for monitoring
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#scripting-with-netconf-client" class="md-nav__link">
<span class="md-ellipsis">
Scripting with netconf-client
</span>
</a>
<nav class="md-nav" aria-label="Scripting with netconf-client">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installation" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#basic-usage" class="md-nav__link">
<span class="md-ellipsis">
Basic Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#python-api" class="md-nav__link">
<span class="md-ellipsis">
Python API
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuration-examples" class="md-nav__link">
<span class="md-ellipsis">
Configuration Examples
</span>
</a>
<nav class="md-nav" aria-label="Configuration Examples">
<ul class="md-nav__list">
<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="#add-ip-address-to-interface" class="md-nav__link">
<span class="md-ellipsis">
Add IP Address to Interface
</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="#operational-data-examples" class="md-nav__link">
<span class="md-ellipsis">
Operational Data Examples
</span>
</a>
<nav class="md-nav" aria-label="Operational Data Examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#read-interface-state" class="md-nav__link">
<span class="md-ellipsis">
Read Interface State
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-all-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Read All Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-routing-table" class="md-nav__link">
<span class="md-ellipsis">
Read Routing Table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-ospf-neighbors" class="md-nav__link">
<span class="md-ellipsis">
Read OSPF Neighbors
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#advanced-scripting" class="md-nav__link">
<span class="md-ellipsis">
Advanced Scripting
</span>
</a>
<nav class="md-nav" aria-label="Advanced Scripting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#python-script-backup-configuration" class="md-nav__link">
<span class="md-ellipsis">
Python Script: Backup Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#python-script-monitor-interface-statistics" class="md-nav__link">
<span class="md-ellipsis">
Python Script: Monitor Interface Statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#shell-script-batch-configuration" class="md-nav__link">
<span class="md-ellipsis">
Shell Script: Batch Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#other-netconf-tools" class="md-nav__link">
<span class="md-ellipsis">
Other NETCONF Tools
</span>
</a>
<nav class="md-nav" aria-label="Other NETCONF Tools">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ncclient-python" class="md-nav__link">
<span class="md-ellipsis">
ncclient (Python)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ansible" class="md-nav__link">
<span class="md-ellipsis">
Ansible
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cisco-tools" class="md-nav__link">
<span class="md-ellipsis">
Cisco Tools
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
<nav class="md-nav" aria-label="Troubleshooting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#enable-netconf-debugging" class="md-nav__link">
<span class="md-ellipsis">
Enable NETCONF Debugging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-issues" class="md-nav__link">
<span class="md-ellipsis">
Common Issues
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#references" class="md-nav__link">
<span class="md-ellipsis">
References
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../scripting-restconf/" class="md-nav__link">
<span class="md-ellipsis">
RESTCONF Scripting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scripting-prod/" class="md-nav__link">
<span class="md-ellipsis">
Production Testing
</span>
</a>
</li>
</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="#netconf-vs-restconf" class="md-nav__link">
<span class="md-ellipsis">
NETCONF vs RESTCONF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#quick-start-with-netopeer2-cli" class="md-nav__link">
<span class="md-ellipsis">
Quick Start with netopeer2-cli
</span>
</a>
<nav class="md-nav" aria-label="Quick Start with netopeer2-cli">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#basic-operations-in-netopeer2-cli" class="md-nav__link">
<span class="md-ellipsis">
Basic Operations in netopeer2-cli
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#discovery-common-patterns" class="md-nav__link">
<span class="md-ellipsis">
Discovery &amp; Common Patterns
</span>
</a>
<nav class="md-nav" aria-label="Discovery &amp; Common Patterns">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#discovering-available-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Discovering Available Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-all-yang-capabilities" class="md-nav__link">
<span class="md-ellipsis">
Get All YANG Capabilities
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#get-entire-running-configuration" class="md-nav__link">
<span class="md-ellipsis">
Get Entire Running Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-workflow-patterns" class="md-nav__link">
<span class="md-ellipsis">
Common Workflow Patterns
</span>
</a>
<nav class="md-nav" aria-label="Common Workflow Patterns">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#pattern-1-find-interface-by-ip-address" class="md-nav__link">
<span class="md-ellipsis">
Pattern 1: Find interface by IP address
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pattern-2-check-which-interfaces-are-down" class="md-nav__link">
<span class="md-ellipsis">
Pattern 2: Check which interfaces are down
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pattern-3-get-interface-statistics-for-monitoring" class="md-nav__link">
<span class="md-ellipsis">
Pattern 3: Get interface statistics for monitoring
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#scripting-with-netconf-client" class="md-nav__link">
<span class="md-ellipsis">
Scripting with netconf-client
</span>
</a>
<nav class="md-nav" aria-label="Scripting with netconf-client">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installation" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#basic-usage" class="md-nav__link">
<span class="md-ellipsis">
Basic Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#python-api" class="md-nav__link">
<span class="md-ellipsis">
Python API
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuration-examples" class="md-nav__link">
<span class="md-ellipsis">
Configuration Examples
</span>
</a>
<nav class="md-nav" aria-label="Configuration Examples">
<ul class="md-nav__list">
<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="#add-ip-address-to-interface" class="md-nav__link">
<span class="md-ellipsis">
Add IP Address to Interface
</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="#operational-data-examples" class="md-nav__link">
<span class="md-ellipsis">
Operational Data Examples
</span>
</a>
<nav class="md-nav" aria-label="Operational Data Examples">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#read-interface-state" class="md-nav__link">
<span class="md-ellipsis">
Read Interface State
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-all-interfaces" class="md-nav__link">
<span class="md-ellipsis">
Read All Interfaces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-routing-table" class="md-nav__link">
<span class="md-ellipsis">
Read Routing Table
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#read-ospf-neighbors" class="md-nav__link">
<span class="md-ellipsis">
Read OSPF Neighbors
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#advanced-scripting" class="md-nav__link">
<span class="md-ellipsis">
Advanced Scripting
</span>
</a>
<nav class="md-nav" aria-label="Advanced Scripting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#python-script-backup-configuration" class="md-nav__link">
<span class="md-ellipsis">
Python Script: Backup Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#python-script-monitor-interface-statistics" class="md-nav__link">
<span class="md-ellipsis">
Python Script: Monitor Interface Statistics
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#shell-script-batch-configuration" class="md-nav__link">
<span class="md-ellipsis">
Shell Script: Batch Configuration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#other-netconf-tools" class="md-nav__link">
<span class="md-ellipsis">
Other NETCONF Tools
</span>
</a>
<nav class="md-nav" aria-label="Other NETCONF Tools">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ncclient-python" class="md-nav__link">
<span class="md-ellipsis">
ncclient (Python)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ansible" class="md-nav__link">
<span class="md-ellipsis">
Ansible
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cisco-tools" class="md-nav__link">
<span class="md-ellipsis">
Cisco Tools
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
<nav class="md-nav" aria-label="Troubleshooting">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#enable-netconf-debugging" class="md-nav__link">
<span class="md-ellipsis">
Enable NETCONF Debugging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#common-issues" class="md-nav__link">
<span class="md-ellipsis">
Common Issues
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#references" class="md-nav__link">
<span class="md-ellipsis">
References
</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-with-netconf">Scripting with NETCONF<a class="headerlink" href="#scripting-with-netconf" title="Permanent link"></a></h1>
<p>NETCONF (Network Configuration Protocol) provides a standardized mechanism for
managing network devices using XML-based RPC operations over SSH (port 830).
This guide shows practical examples for interacting with Infix using NETCONF.</p>
<p>NETCONF offers robust capabilities for network automation:</p>
<ul>
<li><strong>Transactional operations</strong>: Validate before commit, rollback on error</li>
<li><strong>Fine-grained locking</strong>: Prevent concurrent configuration conflicts</li>
<li><strong>Structured data</strong>: XML with YANG schema validation</li>
<li><strong>Standardized operations</strong>: Get, edit-config, copy-config, etc.</li>
</ul>
<h2 id="netconf-vs-restconf">NETCONF vs RESTCONF<a class="headerlink" href="#netconf-vs-restconf" title="Permanent link"></a></h2>
<p>Both protocols use the same YANG data models, but differ in approach:</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>NETCONF</th>
<th>RESTCONF</th>
</tr>
</thead>
<tbody>
<tr>
<td>Transport</td>
<td>SSH</td>
<td>HTTPS</td>
</tr>
<tr>
<td>Encoding</td>
<td>XML</td>
<td>JSON/XML</td>
</tr>
<tr>
<td>Operations</td>
<td>RPC-based</td>
<td>REST/HTTP methods</td>
</tr>
<tr>
<td>Best for</td>
<td>Automation scripts</td>
<td>Web integration, simple queries</td>
</tr>
</tbody>
</table>
<p>Choose NETCONF when you need:</p>
<ul>
<li>Transactional configuration changes</li>
<li>Configuration validation before commit</li>
<li>Locking to prevent concurrent changes</li>
<li>Integration with existing NETCONF tooling</li>
</ul>
<p>Choose RESTCONF for:</p>
<ul>
<li>Simple queries and updates</li>
<li>Web-based applications</li>
<li>When you prefer JSON over XML</li>
<li>RESTful API patterns</li>
</ul>
<h2 id="quick-start-with-netopeer2-cli">Quick Start with netopeer2-cli<a class="headerlink" href="#quick-start-with-netopeer2-cli" title="Permanent link"></a></h2>
<p><code>netopeer2-cli</code> is an interactive NETCONF client, useful for learning and
testing. Install it:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>~$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>netopeer2-cli
</code></pre></div>
<p>Connect to your Infix device:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>~$<span class="w"> </span>netopeer2-cli
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>&gt;<span class="w"> </span>connect<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--login<span class="w"> </span>admin
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>admin@example.local<span class="w"> </span>password:
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>&gt;<span class="w"> </span>status
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>Current<span class="w"> </span>NETCONF<span class="w"> </span>session:
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span>ID<span class="w"> </span>:<span class="w"> </span><span class="m">1</span>
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span>Host<span class="w"> </span>:<span class="w"> </span>example.local
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span>Port<span class="w"> </span>:<span class="w"> </span><span class="m">830</span>
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span>Transport<span class="w"> </span>:<span class="w"> </span>SSH
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span>Capabilities:<span class="w"> </span><span class="m">35</span>
</code></pre></div>
<h3 id="basic-operations-in-netopeer2-cli">Basic Operations in netopeer2-cli<a class="headerlink" href="#basic-operations-in-netopeer2-cli" title="Permanent link"></a></h3>
<p><strong>Get entire configuration:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>&gt; get-config --source running
</code></pre></div>
<p><strong>Get specific subtree (hostname):</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>&gt; get-config --source running --filter-xpath /system/hostname
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>&lt;data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> &lt;system xmlns="urn:ietf:params:xml:ns:yang:ietf-system"&gt;
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> &lt;hostname&gt;example&lt;/hostname&gt;
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> &lt;/system&gt;
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>&lt;/data&gt;
</code></pre></div>
<p><strong>Get operational state:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>&gt; get --filter-xpath /interfaces
</code></pre></div>
<p><strong>Edit configuration:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>&gt; edit-config --target candidate --config=/tmp/config.xml
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>&gt; commit
</code></pre></div>
<p><strong>Disconnect:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>&gt; disconnect
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>&gt; quit
</code></pre></div>
<h2 id="discovery-common-patterns">Discovery &amp; Common Patterns<a class="headerlink" href="#discovery-common-patterns" title="Permanent link"></a></h2>
<p>Before working with specific configuration items, you often need to discover
what exists on the system. This section shows common discovery patterns and
practical workflows.</p>
<h3 id="discovering-available-interfaces">Discovering Available Interfaces<a class="headerlink" href="#discovering-available-interfaces" title="Permanent link"></a></h3>
<p><strong>List all interface names:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"1"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="nt">&lt;get&gt;</span>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span><span class="nt">&lt;filter</span><span class="w"> </span><span class="na">type=</span><span class="s">"subtree"</span><span class="nt">&gt;</span>
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="w"> </span><span class="nt">&lt;interfaces</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-interfaces"</span><span class="nt">&gt;</span>
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="w"> </span><span class="nt">&lt;interface&gt;</span>
<a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="w"> </span><span class="nt">&lt;name/&gt;</span>
<a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a><span class="w"> </span><span class="nt">&lt;/interface&gt;</span>
<a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a><span class="w"> </span><span class="nt">&lt;/interfaces&gt;</span>
<a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a><span class="w"> </span><span class="nt">&lt;/filter&gt;</span>
<a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a><span class="w"> </span><span class="nt">&lt;/get&gt;</span>
<a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p>Using netopeer2-cli:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>&gt; get --filter-xpath /interfaces/interface/name
</code></pre></div>
<p>This returns all interface names, useful for iterating through interfaces
in scripts.</p>
<h3 id="get-all-yang-capabilities">Get All YANG Capabilities<a class="headerlink" href="#get-all-yang-capabilities" title="Permanent link"></a></h3>
<p>Discover which YANG modules and features are available:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>&gt; status
</code></pre></div>
<p>Or programmatically via the <code>&lt;hello&gt;</code> message capabilities received during
connection establishment.</p>
<h3 id="get-entire-running-configuration">Get Entire Running Configuration<a class="headerlink" href="#get-entire-running-configuration" title="Permanent link"></a></h3>
<p>Useful for exploration or backup:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"2"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="w"> </span><span class="nt">&lt;get-config&gt;</span>
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="w"> </span><span class="nt">&lt;source&gt;</span>
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a><span class="w"> </span><span class="nt">&lt;running/&gt;</span>
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a><span class="w"> </span><span class="nt">&lt;/source&gt;</span>
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a><span class="w"> </span><span class="nt">&lt;/get-config&gt;</span>
<a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p>Using netopeer2-cli:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>&gt; get-config --source running
</code></pre></div>
<h3 id="common-workflow-patterns">Common Workflow Patterns<a class="headerlink" href="#common-workflow-patterns" title="Permanent link"></a></h3>
<h4 id="pattern-1-find-interface-by-ip-address">Pattern 1: Find interface by IP address<a class="headerlink" href="#pattern-1-find-interface-by-ip-address" title="Permanent link"></a></h4>
<p>Get all interfaces with their IPs, then filter:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>&gt; get --filter-xpath /interfaces
</code></pre></div>
<p>Parse the XML output to find which interface has the desired IP.</p>
<h4 id="pattern-2-check-which-interfaces-are-down">Pattern 2: Check which interfaces are down<a class="headerlink" href="#pattern-2-check-which-interfaces-are-down" title="Permanent link"></a></h4>
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>&gt; get --filter-xpath /interfaces/interface/oper-status
</code></pre></div>
<p>Look for interfaces with <code>&lt;oper-status&gt;down&lt;/oper-status&gt;</code>.</p>
<h4 id="pattern-3-get-interface-statistics-for-monitoring">Pattern 3: Get interface statistics for monitoring<a class="headerlink" href="#pattern-3-get-interface-statistics-for-monitoring" title="Permanent link"></a></h4>
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"3"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="w"> </span><span class="nt">&lt;get&gt;</span>
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="w"> </span><span class="nt">&lt;filter</span><span class="w"> </span><span class="na">type=</span><span class="s">"subtree"</span><span class="nt">&gt;</span>
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a><span class="w"> </span><span class="nt">&lt;interfaces</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-interfaces"</span><span class="nt">&gt;</span>
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a><span class="w"> </span><span class="nt">&lt;interface&gt;</span>
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="w"> </span><span class="nt">&lt;statistics/&gt;</span>
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a><span class="w"> </span><span class="nt">&lt;/interface&gt;</span>
<a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a><span class="w"> </span><span class="nt">&lt;/interfaces&gt;</span>
<a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a><span class="w"> </span><span class="nt">&lt;/filter&gt;</span>
<a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a><span class="w"> </span><span class="nt">&lt;/get&gt;</span>
<a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p>Returns in-octets, out-octets, in-errors, out-errors for all interfaces.</p>
<h2 id="scripting-with-netconf-client">Scripting with netconf-client<a class="headerlink" href="#scripting-with-netconf-client" title="Permanent link"></a></h2>
<p><a href="https://github.com/wires-se/netconf-client">netconf-client</a> is a lightweight
Python-based NETCONF client designed for scripting and automation.</p>
<h3 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link"></a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>~$<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>netconf-client
</code></pre></div>
<p>Or clone and install from source:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>~$<span class="w"> </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/wires-se/netconf-client.git
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>~$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>netconf-client
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>~$<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>.
</code></pre></div>
<h3 id="basic-usage">Basic Usage<a class="headerlink" href="#basic-usage" title="Permanent link"></a></h3>
<p>The client provides a simple command-line interface:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span>--password<span class="w"> </span>admin<span class="w"> </span>&lt;operation&gt;
</code></pre></div>
<p>Common operations:</p>
<ul>
<li><code>get-config</code> - Retrieve configuration</li>
<li><code>edit-config</code> - Modify configuration</li>
<li><code>get</code> - Retrieve operational state</li>
<li><code>copy-config</code> - Copy between datastores</li>
<li><code>lock/unlock</code> - Lock datastores</li>
<li><code>commit</code> - Commit candidate configuration</li>
</ul>
<h3 id="python-api">Python API<a class="headerlink" href="#python-api" title="Permanent link"></a></h3>
<p>You can also use netconf-client as a Python library:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">netconf_client.client</span><span class="w"> </span><span class="kn">import</span> <span class="n">NetconfClient</span>
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>
<a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="c1"># Connect</span>
<a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="n">client</span> <span class="o">=</span> <span class="n">NetconfClient</span><span class="p">(</span>
<a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a> <span class="n">host</span><span class="o">=</span><span class="s1">'example.local'</span><span class="p">,</span>
<a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a> <span class="n">username</span><span class="o">=</span><span class="s1">'admin'</span><span class="p">,</span>
<a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a> <span class="n">password</span><span class="o">=</span><span class="s1">'admin'</span>
<a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a><span class="p">)</span>
<a id="__codelineno-18-9" name="__codelineno-18-9" href="#__codelineno-18-9"></a>
<a id="__codelineno-18-10" name="__codelineno-18-10" href="#__codelineno-18-10"></a><span class="c1"># Get configuration</span>
<a id="__codelineno-18-11" name="__codelineno-18-11" href="#__codelineno-18-11"></a><span class="n">config</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_config</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="s1">'running'</span><span class="p">)</span>
<a id="__codelineno-18-12" name="__codelineno-18-12" href="#__codelineno-18-12"></a><span class="nb">print</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
<a id="__codelineno-18-13" name="__codelineno-18-13" href="#__codelineno-18-13"></a>
<a id="__codelineno-18-14" name="__codelineno-18-14" href="#__codelineno-18-14"></a><span class="c1"># Edit configuration</span>
<a id="__codelineno-18-15" name="__codelineno-18-15" href="#__codelineno-18-15"></a><span class="n">xml_config</span> <span class="o">=</span> <span class="s2">"""</span>
<a id="__codelineno-18-16" name="__codelineno-18-16" href="#__codelineno-18-16"></a><span class="s2">&lt;config&gt;</span>
<a id="__codelineno-18-17" name="__codelineno-18-17" href="#__codelineno-18-17"></a><span class="s2"> &lt;system xmlns="urn:ietf:params:xml:ns:yang:ietf-system"&gt;</span>
<a id="__codelineno-18-18" name="__codelineno-18-18" href="#__codelineno-18-18"></a><span class="s2"> &lt;hostname&gt;newhostname&lt;/hostname&gt;</span>
<a id="__codelineno-18-19" name="__codelineno-18-19" href="#__codelineno-18-19"></a><span class="s2"> &lt;/system&gt;</span>
<a id="__codelineno-18-20" name="__codelineno-18-20" href="#__codelineno-18-20"></a><span class="s2">&lt;/config&gt;</span>
<a id="__codelineno-18-21" name="__codelineno-18-21" href="#__codelineno-18-21"></a><span class="s2">"""</span>
<a id="__codelineno-18-22" name="__codelineno-18-22" href="#__codelineno-18-22"></a><span class="n">client</span><span class="o">.</span><span class="n">edit_config</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="s1">'candidate'</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="n">xml_config</span><span class="p">)</span>
<a id="__codelineno-18-23" name="__codelineno-18-23" href="#__codelineno-18-23"></a><span class="n">client</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<a id="__codelineno-18-24" name="__codelineno-18-24" href="#__codelineno-18-24"></a>
<a id="__codelineno-18-25" name="__codelineno-18-25" href="#__codelineno-18-25"></a><span class="c1"># Close connection</span>
<a id="__codelineno-18-26" name="__codelineno-18-26" href="#__codelineno-18-26"></a><span class="n">client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</code></pre></div>
<h2 id="configuration-examples">Configuration Examples<a class="headerlink" href="#configuration-examples" title="Permanent link"></a></h2>
<h3 id="read-hostname">Read Hostname<a class="headerlink" href="#read-hostname" title="Permanent link"></a></h3>
<p><strong>XML request:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"1"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="w"> </span><span class="nt">&lt;get-config&gt;</span>
<a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="w"> </span><span class="nt">&lt;source&gt;</span>
<a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span><span class="nt">&lt;running/&gt;</span>
<a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="w"> </span><span class="nt">&lt;/source&gt;</span>
<a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="w"> </span><span class="nt">&lt;filter</span><span class="w"> </span><span class="na">type=</span><span class="s">"subtree"</span><span class="nt">&gt;</span>
<a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a><span class="w"> </span><span class="nt">&lt;system</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-system"</span><span class="nt">&gt;</span>
<a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a><span class="w"> </span><span class="nt">&lt;hostname/&gt;</span>
<a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a><span class="w"> </span><span class="nt">&lt;/system&gt;</span>
<a id="__codelineno-19-10" name="__codelineno-19-10" href="#__codelineno-19-10"></a><span class="w"> </span><span class="nt">&lt;/filter&gt;</span>
<a id="__codelineno-19-11" name="__codelineno-19-11" href="#__codelineno-19-11"></a><span class="w"> </span><span class="nt">&lt;/get-config&gt;</span>
<a id="__codelineno-19-12" name="__codelineno-19-12" href="#__codelineno-19-12"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p><strong>Using netopeer2-cli:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>&gt; get-config --source running --filter-xpath /system/hostname
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a><span class="w"> </span>get-config<span class="w"> </span>--source<span class="w"> </span>running<span class="w"> </span>--xpath<span class="w"> </span>/system/hostname
</code></pre></div>
<p><strong>Response:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="nt">&lt;rpc-reply</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"1"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a><span class="w"> </span><span class="nt">&lt;data&gt;</span>
<a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a><span class="w"> </span><span class="nt">&lt;system</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-system"</span><span class="nt">&gt;</span>
<a id="__codelineno-22-4" name="__codelineno-22-4" href="#__codelineno-22-4"></a><span class="w"> </span><span class="nt">&lt;hostname&gt;</span>example<span class="nt">&lt;/hostname&gt;</span>
<a id="__codelineno-22-5" name="__codelineno-22-5" href="#__codelineno-22-5"></a><span class="w"> </span><span class="nt">&lt;/system&gt;</span>
<a id="__codelineno-22-6" name="__codelineno-22-6" href="#__codelineno-22-6"></a><span class="w"> </span><span class="nt">&lt;/data&gt;</span>
<a id="__codelineno-22-7" name="__codelineno-22-7" href="#__codelineno-22-7"></a><span class="nt">&lt;/rpc-reply&gt;</span>
</code></pre></div>
<h3 id="set-hostname">Set Hostname<a class="headerlink" href="#set-hostname" title="Permanent link"></a></h3>
<p><strong>XML request:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"2"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="w"> </span><span class="nt">&lt;edit-config&gt;</span>
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a><span class="w"> </span><span class="nt">&lt;target&gt;</span>
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="w"> </span><span class="nt">&lt;candidate/&gt;</span>
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="w"> </span><span class="nt">&lt;/target&gt;</span>
<a id="__codelineno-23-6" name="__codelineno-23-6" href="#__codelineno-23-6"></a><span class="w"> </span><span class="nt">&lt;config&gt;</span>
<a id="__codelineno-23-7" name="__codelineno-23-7" href="#__codelineno-23-7"></a><span class="w"> </span><span class="nt">&lt;system</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-system"</span><span class="nt">&gt;</span>
<a id="__codelineno-23-8" name="__codelineno-23-8" href="#__codelineno-23-8"></a><span class="w"> </span><span class="nt">&lt;hostname&gt;</span>newhostname<span class="nt">&lt;/hostname&gt;</span>
<a id="__codelineno-23-9" name="__codelineno-23-9" href="#__codelineno-23-9"></a><span class="w"> </span><span class="nt">&lt;/system&gt;</span>
<a id="__codelineno-23-10" name="__codelineno-23-10" href="#__codelineno-23-10"></a><span class="w"> </span><span class="nt">&lt;/config&gt;</span>
<a id="__codelineno-23-11" name="__codelineno-23-11" href="#__codelineno-23-11"></a><span class="w"> </span><span class="nt">&lt;/edit-config&gt;</span>
<a id="__codelineno-23-12" name="__codelineno-23-12" href="#__codelineno-23-12"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p><strong>Using netopeer2-cli:</strong></p>
<p>Save the config to <code>/tmp/hostname.xml</code>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="nt">&lt;config&gt;</span>
<a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="w"> </span><span class="nt">&lt;system</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-system"</span><span class="nt">&gt;</span>
<a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a><span class="w"> </span><span class="nt">&lt;hostname&gt;</span>newhostname<span class="nt">&lt;/hostname&gt;</span>
<a id="__codelineno-24-4" name="__codelineno-24-4" href="#__codelineno-24-4"></a><span class="w"> </span><span class="nt">&lt;/system&gt;</span>
<a id="__codelineno-24-5" name="__codelineno-24-5" href="#__codelineno-24-5"></a><span class="nt">&lt;/config&gt;</span>
</code></pre></div>
<p>Then apply:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>&gt; edit-config --target candidate --config=/tmp/hostname.xml
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a>&gt; commit
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>~$<span class="w"> </span>cat<span class="w"> </span>&gt;<span class="w"> </span>hostname.xml<span class="w"> </span><span class="s">&lt;&lt;EOF</span>
<a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="s">&lt;config&gt;</span>
<a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a><span class="s"> &lt;system xmlns="urn:ietf:params:xml:ns:yang:ietf-system"&gt;</span>
<a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a><span class="s"> &lt;hostname&gt;newhostname&lt;/hostname&gt;</span>
<a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a><span class="s"> &lt;/system&gt;</span>
<a id="__codelineno-26-6" name="__codelineno-26-6" href="#__codelineno-26-6"></a><span class="s">&lt;/config&gt;</span>
<a id="__codelineno-26-7" name="__codelineno-26-7" href="#__codelineno-26-7"></a><span class="s">EOF</span>
<a id="__codelineno-26-8" name="__codelineno-26-8" href="#__codelineno-26-8"></a>
<a id="__codelineno-26-9" name="__codelineno-26-9" href="#__codelineno-26-9"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-26-10" name="__codelineno-26-10" href="#__codelineno-26-10"></a><span class="w"> </span>edit-config<span class="w"> </span>--target<span class="w"> </span>candidate<span class="w"> </span>--config<span class="w"> </span>hostname.xml
<a id="__codelineno-26-11" name="__codelineno-26-11" href="#__codelineno-26-11"></a>
<a id="__codelineno-26-12" name="__codelineno-26-12" href="#__codelineno-26-12"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span>commit
</code></pre></div>
<h3 id="add-ip-address-to-interface">Add IP Address to Interface<a class="headerlink" href="#add-ip-address-to-interface" title="Permanent link"></a></h3>
<p>Save the config to <code>ip-config.xml</code>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a><span class="nt">&lt;config&gt;</span>
<a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="w"> </span><span class="nt">&lt;interfaces</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-interfaces"</span><span class="nt">&gt;</span>
<a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a><span class="w"> </span><span class="nt">&lt;interface&gt;</span>
<a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a><span class="w"> </span><span class="nt">&lt;name&gt;</span>eth0<span class="nt">&lt;/name&gt;</span>
<a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a><span class="w"> </span><span class="nt">&lt;ipv4</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-ip"</span><span class="nt">&gt;</span>
<a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a><span class="w"> </span><span class="nt">&lt;address&gt;</span>
<a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a><span class="w"> </span><span class="nt">&lt;ip&gt;</span>192.168.1.100<span class="nt">&lt;/ip&gt;</span>
<a id="__codelineno-27-8" name="__codelineno-27-8" href="#__codelineno-27-8"></a><span class="w"> </span><span class="nt">&lt;prefix-length&gt;</span>24<span class="nt">&lt;/prefix-length&gt;</span>
<a id="__codelineno-27-9" name="__codelineno-27-9" href="#__codelineno-27-9"></a><span class="w"> </span><span class="nt">&lt;/address&gt;</span>
<a id="__codelineno-27-10" name="__codelineno-27-10" href="#__codelineno-27-10"></a><span class="w"> </span><span class="nt">&lt;/ipv4&gt;</span>
<a id="__codelineno-27-11" name="__codelineno-27-11" href="#__codelineno-27-11"></a><span class="w"> </span><span class="nt">&lt;/interface&gt;</span>
<a id="__codelineno-27-12" name="__codelineno-27-12" href="#__codelineno-27-12"></a><span class="w"> </span><span class="nt">&lt;/interfaces&gt;</span>
<a id="__codelineno-27-13" name="__codelineno-27-13" href="#__codelineno-27-13"></a><span class="nt">&lt;/config&gt;</span>
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a><span class="w"> </span>edit-config<span class="w"> </span>--target<span class="w"> </span>candidate<span class="w"> </span>--config<span class="w"> </span>ip-config.xml
<a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span>commit
</code></pre></div>
<h3 id="copy-running-to-startup">Copy Running to Startup<a class="headerlink" href="#copy-running-to-startup" title="Permanent link"></a></h3>
<p><strong>XML request:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"3"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a><span class="w"> </span><span class="nt">&lt;copy-config&gt;</span>
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a><span class="w"> </span><span class="nt">&lt;source&gt;</span>
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a><span class="w"> </span><span class="nt">&lt;running/&gt;</span>
<a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a><span class="w"> </span><span class="nt">&lt;/source&gt;</span>
<a id="__codelineno-29-6" name="__codelineno-29-6" href="#__codelineno-29-6"></a><span class="w"> </span><span class="nt">&lt;target&gt;</span>
<a id="__codelineno-29-7" name="__codelineno-29-7" href="#__codelineno-29-7"></a><span class="w"> </span><span class="nt">&lt;startup/&gt;</span>
<a id="__codelineno-29-8" name="__codelineno-29-8" href="#__codelineno-29-8"></a><span class="w"> </span><span class="nt">&lt;/target&gt;</span>
<a id="__codelineno-29-9" name="__codelineno-29-9" href="#__codelineno-29-9"></a><span class="w"> </span><span class="nt">&lt;/copy-config&gt;</span>
<a id="__codelineno-29-10" name="__codelineno-29-10" href="#__codelineno-29-10"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p><strong>Using netopeer2-cli:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>&gt; copy-config --source running --target startup
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a><span class="w"> </span>copy-config<span class="w"> </span>--source<span class="w"> </span>running<span class="w"> </span>--target<span class="w"> </span>startup
</code></pre></div>
<h2 id="operational-data-examples">Operational Data Examples<a class="headerlink" href="#operational-data-examples" title="Permanent link"></a></h2>
<h3 id="read-interface-state">Read Interface State<a class="headerlink" href="#read-interface-state" title="Permanent link"></a></h3>
<p><strong>XML request:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a><span class="nt">&lt;rpc</span><span class="w"> </span><span class="na">message-id=</span><span class="s">"4"</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:netconf:base:1.0"</span><span class="nt">&gt;</span>
<a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a><span class="w"> </span><span class="nt">&lt;get&gt;</span>
<a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a><span class="w"> </span><span class="nt">&lt;filter</span><span class="w"> </span><span class="na">type=</span><span class="s">"subtree"</span><span class="nt">&gt;</span>
<a id="__codelineno-32-4" name="__codelineno-32-4" href="#__codelineno-32-4"></a><span class="w"> </span><span class="nt">&lt;interfaces</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">"urn:ietf:params:xml:ns:yang:ietf-interfaces"</span><span class="nt">&gt;</span>
<a id="__codelineno-32-5" name="__codelineno-32-5" href="#__codelineno-32-5"></a><span class="w"> </span><span class="nt">&lt;interface&gt;</span>
<a id="__codelineno-32-6" name="__codelineno-32-6" href="#__codelineno-32-6"></a><span class="w"> </span><span class="nt">&lt;name&gt;</span>eth0<span class="nt">&lt;/name&gt;</span>
<a id="__codelineno-32-7" name="__codelineno-32-7" href="#__codelineno-32-7"></a><span class="w"> </span><span class="nt">&lt;/interface&gt;</span>
<a id="__codelineno-32-8" name="__codelineno-32-8" href="#__codelineno-32-8"></a><span class="w"> </span><span class="nt">&lt;/interfaces&gt;</span>
<a id="__codelineno-32-9" name="__codelineno-32-9" href="#__codelineno-32-9"></a><span class="w"> </span><span class="nt">&lt;/filter&gt;</span>
<a id="__codelineno-32-10" name="__codelineno-32-10" href="#__codelineno-32-10"></a><span class="w"> </span><span class="nt">&lt;/get&gt;</span>
<a id="__codelineno-32-11" name="__codelineno-32-11" href="#__codelineno-32-11"></a><span class="nt">&lt;/rpc&gt;</span>
</code></pre></div>
<p><strong>Using netopeer2-cli:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>&gt; get --filter-xpath /interfaces/interface[name='eth0']
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a><span class="w"> </span>get<span class="w"> </span>--xpath<span class="w"> </span><span class="s2">"/interfaces/interface[name='eth0']"</span>
</code></pre></div>
<p>This returns operational state including admin/oper status, statistics,
MAC address, MTU, and IP addresses.</p>
<h3 id="read-all-interfaces">Read All Interfaces<a class="headerlink" href="#read-all-interfaces" title="Permanent link"></a></h3>
<p><strong>Using netopeer2-cli:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>&gt; get --filter-xpath /interfaces
</code></pre></div>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a><span class="w"> </span>get<span class="w"> </span>--xpath<span class="w"> </span>/interfaces
</code></pre></div>
<h3 id="read-routing-table">Read Routing Table<a class="headerlink" href="#read-routing-table" title="Permanent link"></a></h3>
<p><strong>Using netconf-client:</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a><span class="w"> </span>get<span class="w"> </span>--xpath<span class="w"> </span><span class="s2">"/routing/ribs/rib[name='ipv4-default']"</span>
</code></pre></div>
<h3 id="read-ospf-neighbors">Read OSPF Neighbors<a class="headerlink" href="#read-ospf-neighbors" title="Permanent link"></a></h3>
<p><strong>Using netconf-client:</strong></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>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a><span class="w"> </span>get<span class="w"> </span>--xpath<span class="w"> </span><span class="s2">"/routing/control-plane-protocols/control-plane-protocol[type='ietf-ospf:ospfv2'][name='default']/ietf-ospf:ospf"</span>
</code></pre></div>
<h2 id="advanced-scripting">Advanced Scripting<a class="headerlink" href="#advanced-scripting" title="Permanent link"></a></h2>
<h3 id="python-script-backup-configuration">Python Script: Backup Configuration<a class="headerlink" href="#python-script-backup-configuration" title="Permanent link"></a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a><span class="ch">#!/usr/bin/env python3</span>
<a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">netconf_client.client</span><span class="w"> </span><span class="kn">import</span> <span class="n">NetconfClient</span>
<a id="__codelineno-39-3" name="__codelineno-39-3" href="#__codelineno-39-3"></a><span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span>
<a id="__codelineno-39-4" name="__codelineno-39-4" href="#__codelineno-39-4"></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<a id="__codelineno-39-5" name="__codelineno-39-5" href="#__codelineno-39-5"></a>
<a id="__codelineno-39-6" name="__codelineno-39-6" href="#__codelineno-39-6"></a><span class="k">def</span><span class="w"> </span><span class="nf">backup_config</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">output_file</span><span class="p">):</span>
<a id="__codelineno-39-7" name="__codelineno-39-7" href="#__codelineno-39-7"></a> <span class="k">try</span><span class="p">:</span>
<a id="__codelineno-39-8" name="__codelineno-39-8" href="#__codelineno-39-8"></a> <span class="c1"># Connect</span>
<a id="__codelineno-39-9" name="__codelineno-39-9" href="#__codelineno-39-9"></a> <span class="n">client</span> <span class="o">=</span> <span class="n">NetconfClient</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="n">host</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="n">user</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
<a id="__codelineno-39-10" name="__codelineno-39-10" href="#__codelineno-39-10"></a>
<a id="__codelineno-39-11" name="__codelineno-39-11" href="#__codelineno-39-11"></a> <span class="c1"># Get running config</span>
<a id="__codelineno-39-12" name="__codelineno-39-12" href="#__codelineno-39-12"></a> <span class="n">config</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_config</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="s1">'running'</span><span class="p">)</span>
<a id="__codelineno-39-13" name="__codelineno-39-13" href="#__codelineno-39-13"></a>
<a id="__codelineno-39-14" name="__codelineno-39-14" href="#__codelineno-39-14"></a> <span class="c1"># Save to file with timestamp</span>
<a id="__codelineno-39-15" name="__codelineno-39-15" href="#__codelineno-39-15"></a> <span class="n">timestamp</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y%m</span><span class="si">%d</span><span class="s1">-%H%M%S'</span><span class="p">)</span>
<a id="__codelineno-39-16" name="__codelineno-39-16" href="#__codelineno-39-16"></a> <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">output_file</span><span class="si">}</span><span class="s2">-</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">.xml"</span>
<a id="__codelineno-39-17" name="__codelineno-39-17" href="#__codelineno-39-17"></a>
<a id="__codelineno-39-18" name="__codelineno-39-18" href="#__codelineno-39-18"></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<a id="__codelineno-39-19" name="__codelineno-39-19" href="#__codelineno-39-19"></a> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
<a id="__codelineno-39-20" name="__codelineno-39-20" href="#__codelineno-39-20"></a>
<a id="__codelineno-39-21" name="__codelineno-39-21" href="#__codelineno-39-21"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Configuration backed up to </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<a id="__codelineno-39-22" name="__codelineno-39-22" href="#__codelineno-39-22"></a>
<a id="__codelineno-39-23" name="__codelineno-39-23" href="#__codelineno-39-23"></a> <span class="n">client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<a id="__codelineno-39-24" name="__codelineno-39-24" href="#__codelineno-39-24"></a> <span class="k">return</span> <span class="mi">0</span>
<a id="__codelineno-39-25" name="__codelineno-39-25" href="#__codelineno-39-25"></a>
<a id="__codelineno-39-26" name="__codelineno-39-26" href="#__codelineno-39-26"></a> <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<a id="__codelineno-39-27" name="__codelineno-39-27" href="#__codelineno-39-27"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="p">)</span>
<a id="__codelineno-39-28" name="__codelineno-39-28" href="#__codelineno-39-28"></a> <span class="k">return</span> <span class="mi">1</span>
<a id="__codelineno-39-29" name="__codelineno-39-29" href="#__codelineno-39-29"></a>
<a id="__codelineno-39-30" name="__codelineno-39-30" href="#__codelineno-39-30"></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<a id="__codelineno-39-31" name="__codelineno-39-31" href="#__codelineno-39-31"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">5</span><span class="p">:</span>
<a id="__codelineno-39-32" name="__codelineno-39-32" href="#__codelineno-39-32"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Usage: </span><span class="si">{</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> &lt;host&gt; &lt;user&gt; &lt;password&gt; &lt;output_prefix&gt;"</span><span class="p">)</span>
<a id="__codelineno-39-33" name="__codelineno-39-33" href="#__codelineno-39-33"></a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<a id="__codelineno-39-34" name="__codelineno-39-34" href="#__codelineno-39-34"></a>
<a id="__codelineno-39-35" name="__codelineno-39-35" href="#__codelineno-39-35"></a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">backup_config</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">4</span><span class="p">]))</span>
</code></pre></div>
<p>Usage:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a>~$<span class="w"> </span>chmod<span class="w"> </span>+x<span class="w"> </span>backup.py
<a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a>~$<span class="w"> </span>./backup.py<span class="w"> </span>example.local<span class="w"> </span>admin<span class="w"> </span>admin<span class="w"> </span>config-backup
<a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a>Configuration<span class="w"> </span>backed<span class="w"> </span>up<span class="w"> </span>to<span class="w"> </span>config-backup-20250102-143022.xml
</code></pre></div>
<h3 id="python-script-monitor-interface-statistics">Python Script: Monitor Interface Statistics<a class="headerlink" href="#python-script-monitor-interface-statistics" title="Permanent link"></a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a><span class="ch">#!/usr/bin/env python3</span>
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a><span class="kn">from</span><span class="w"> </span><span class="nn">netconf_client.client</span><span class="w"> </span><span class="kn">import</span> <span class="n">NetconfClient</span>
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a><span class="kn">import</span><span class="w"> </span><span class="nn">xml.etree.ElementTree</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ET</span>
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a><span class="kn">import</span><span class="w"> </span><span class="nn">time</span>
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<a id="__codelineno-41-6" name="__codelineno-41-6" href="#__codelineno-41-6"></a>
<a id="__codelineno-41-7" name="__codelineno-41-7" href="#__codelineno-41-7"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_interface_stats</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">interface</span><span class="p">):</span>
<a id="__codelineno-41-8" name="__codelineno-41-8" href="#__codelineno-41-8"></a><span class="w"> </span><span class="sd">"""Get interface statistics"""</span>
<a id="__codelineno-41-9" name="__codelineno-41-9" href="#__codelineno-41-9"></a> <span class="n">xpath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"/interfaces/interface[name='</span><span class="si">{</span><span class="n">interface</span><span class="si">}</span><span class="s2">']/statistics"</span>
<a id="__codelineno-41-10" name="__codelineno-41-10" href="#__codelineno-41-10"></a> <span class="n">data</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">filter_xpath</span><span class="o">=</span><span class="n">xpath</span><span class="p">)</span>
<a id="__codelineno-41-11" name="__codelineno-41-11" href="#__codelineno-41-11"></a>
<a id="__codelineno-41-12" name="__codelineno-41-12" href="#__codelineno-41-12"></a> <span class="c1"># Parse XML to extract counters</span>
<a id="__codelineno-41-13" name="__codelineno-41-13" href="#__codelineno-41-13"></a> <span class="n">root</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-41-14" name="__codelineno-41-14" href="#__codelineno-41-14"></a> <span class="n">ns</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'if'</span><span class="p">:</span> <span class="s1">'urn:ietf:params:xml:ns:yang:ietf-interfaces'</span><span class="p">}</span>
<a id="__codelineno-41-15" name="__codelineno-41-15" href="#__codelineno-41-15"></a>
<a id="__codelineno-41-16" name="__codelineno-41-16" href="#__codelineno-41-16"></a> <span class="n">stats</span> <span class="o">=</span> <span class="p">{}</span>
<a id="__codelineno-41-17" name="__codelineno-41-17" href="#__codelineno-41-17"></a> <span class="k">for</span> <span class="n">stat</span> <span class="ow">in</span> <span class="n">root</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s1">'.//if:statistics/*'</span><span class="p">,</span> <span class="n">ns</span><span class="p">):</span>
<a id="__codelineno-41-18" name="__codelineno-41-18" href="#__codelineno-41-18"></a> <span class="n">stats</span><span class="p">[</span><span class="n">stat</span><span class="o">.</span><span class="n">tag</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'}'</span><span class="p">)[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">stat</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<a id="__codelineno-41-19" name="__codelineno-41-19" href="#__codelineno-41-19"></a>
<a id="__codelineno-41-20" name="__codelineno-41-20" href="#__codelineno-41-20"></a> <span class="k">return</span> <span class="n">stats</span>
<a id="__codelineno-41-21" name="__codelineno-41-21" href="#__codelineno-41-21"></a>
<a id="__codelineno-41-22" name="__codelineno-41-22" href="#__codelineno-41-22"></a><span class="k">def</span><span class="w"> </span><span class="nf">monitor_interface</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">user</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">interface</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
<a id="__codelineno-41-23" name="__codelineno-41-23" href="#__codelineno-41-23"></a><span class="w"> </span><span class="sd">"""Monitor interface statistics"""</span>
<a id="__codelineno-41-24" name="__codelineno-41-24" href="#__codelineno-41-24"></a> <span class="n">client</span> <span class="o">=</span> <span class="n">NetconfClient</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="n">host</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="n">user</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
<a id="__codelineno-41-25" name="__codelineno-41-25" href="#__codelineno-41-25"></a>
<a id="__codelineno-41-26" name="__codelineno-41-26" href="#__codelineno-41-26"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Monitoring </span><span class="si">{</span><span class="n">interface</span><span class="si">}</span><span class="s2"> on </span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2"> (Ctrl-C to stop)"</span><span class="p">)</span>
<a id="__codelineno-41-27" name="__codelineno-41-27" href="#__codelineno-41-27"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="s1">'Time'</span><span class="si">:</span><span class="s2">&lt;20</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">'RX Packets'</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">'TX Packets'</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">'RX Bytes'</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">'TX Bytes'</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<a id="__codelineno-41-28" name="__codelineno-41-28" href="#__codelineno-41-28"></a> <span class="nb">print</span><span class="p">(</span><span class="s2">"-"</span> <span class="o">*</span> <span class="mi">80</span><span class="p">)</span>
<a id="__codelineno-41-29" name="__codelineno-41-29" href="#__codelineno-41-29"></a>
<a id="__codelineno-41-30" name="__codelineno-41-30" href="#__codelineno-41-30"></a> <span class="k">try</span><span class="p">:</span>
<a id="__codelineno-41-31" name="__codelineno-41-31" href="#__codelineno-41-31"></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<a id="__codelineno-41-32" name="__codelineno-41-32" href="#__codelineno-41-32"></a> <span class="n">stats</span> <span class="o">=</span> <span class="n">get_interface_stats</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">interface</span><span class="p">)</span>
<a id="__codelineno-41-33" name="__codelineno-41-33" href="#__codelineno-41-33"></a> <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">'%Y-%m-</span><span class="si">%d</span><span class="s1"> %H:%M:%S'</span><span class="p">)</span>
<a id="__codelineno-41-34" name="__codelineno-41-34" href="#__codelineno-41-34"></a>
<a id="__codelineno-41-35" name="__codelineno-41-35" href="#__codelineno-41-35"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">timestamp</span><span class="si">:</span><span class="s2">&lt;20</span><span class="si">}</span><span class="s2"> "</span>
<a id="__codelineno-41-36" name="__codelineno-41-36" href="#__codelineno-41-36"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'in-unicast-pkts'</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> "</span>
<a id="__codelineno-41-37" name="__codelineno-41-37" href="#__codelineno-41-37"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'out-unicast-pkts'</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> "</span>
<a id="__codelineno-41-38" name="__codelineno-41-38" href="#__codelineno-41-38"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'in-octets'</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2"> "</span>
<a id="__codelineno-41-39" name="__codelineno-41-39" href="#__codelineno-41-39"></a> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">stats</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'out-octets'</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="si">:</span><span class="s2">&lt;15</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
<a id="__codelineno-41-40" name="__codelineno-41-40" href="#__codelineno-41-40"></a>
<a id="__codelineno-41-41" name="__codelineno-41-41" href="#__codelineno-41-41"></a> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
<a id="__codelineno-41-42" name="__codelineno-41-42" href="#__codelineno-41-42"></a>
<a id="__codelineno-41-43" name="__codelineno-41-43" href="#__codelineno-41-43"></a> <span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
<a id="__codelineno-41-44" name="__codelineno-41-44" href="#__codelineno-41-44"></a> <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Monitoring stopped"</span><span class="p">)</span>
<a id="__codelineno-41-45" name="__codelineno-41-45" href="#__codelineno-41-45"></a> <span class="k">finally</span><span class="p">:</span>
<a id="__codelineno-41-46" name="__codelineno-41-46" href="#__codelineno-41-46"></a> <span class="n">client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<a id="__codelineno-41-47" name="__codelineno-41-47" href="#__codelineno-41-47"></a>
<a id="__codelineno-41-48" name="__codelineno-41-48" href="#__codelineno-41-48"></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<a id="__codelineno-41-49" name="__codelineno-41-49" href="#__codelineno-41-49"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">:</span>
<a id="__codelineno-41-50" name="__codelineno-41-50" href="#__codelineno-41-50"></a> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Usage: </span><span class="si">{</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2"> &lt;host&gt; &lt;user&gt; &lt;password&gt; &lt;interface&gt; [interval]"</span><span class="p">)</span>
<a id="__codelineno-41-51" name="__codelineno-41-51" href="#__codelineno-41-51"></a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<a id="__codelineno-41-52" name="__codelineno-41-52" href="#__codelineno-41-52"></a>
<a id="__codelineno-41-53" name="__codelineno-41-53" href="#__codelineno-41-53"></a> <span class="n">interval</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">5</span> <span class="k">else</span> <span class="mi">5</span>
<a id="__codelineno-41-54" name="__codelineno-41-54" href="#__codelineno-41-54"></a> <span class="n">monitor_interface</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">interval</span><span class="p">)</span>
</code></pre></div>
<p>Usage:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a>~$<span class="w"> </span>chmod<span class="w"> </span>+x<span class="w"> </span>monitor.py
<a id="__codelineno-42-2" name="__codelineno-42-2" href="#__codelineno-42-2"></a>~$<span class="w"> </span>./monitor.py<span class="w"> </span>example.local<span class="w"> </span>admin<span class="w"> </span>admin<span class="w"> </span>eth0<span class="w"> </span><span class="m">2</span>
<a id="__codelineno-42-3" name="__codelineno-42-3" href="#__codelineno-42-3"></a>Monitoring<span class="w"> </span>eth0<span class="w"> </span>on<span class="w"> </span>example.local<span class="w"> </span><span class="o">(</span>Ctrl-C<span class="w"> </span>to<span class="w"> </span>stop<span class="o">)</span>
<a id="__codelineno-42-4" name="__codelineno-42-4" href="#__codelineno-42-4"></a>Time<span class="w"> </span>RX<span class="w"> </span>Packets<span class="w"> </span>TX<span class="w"> </span>Packets<span class="w"> </span>RX<span class="w"> </span>Bytes<span class="w"> </span>TX<span class="w"> </span>Bytes
<a id="__codelineno-42-5" name="__codelineno-42-5" href="#__codelineno-42-5"></a>--------------------------------------------------------------------------------
<a id="__codelineno-42-6" name="__codelineno-42-6" href="#__codelineno-42-6"></a><span class="m">2025</span>-01-02<span class="w"> </span><span class="m">14</span>:35:10<span class="w"> </span><span class="m">12453</span><span class="w"> </span><span class="m">8932</span><span class="w"> </span><span class="m">1847392</span><span class="w"> </span><span class="m">892341</span>
<a id="__codelineno-42-7" name="__codelineno-42-7" href="#__codelineno-42-7"></a><span class="m">2025</span>-01-02<span class="w"> </span><span class="m">14</span>:35:12<span class="w"> </span><span class="m">12489</span><span class="w"> </span><span class="m">8967</span><span class="w"> </span><span class="m">1851204</span><span class="w"> </span><span class="m">895673</span>
<a id="__codelineno-42-8" name="__codelineno-42-8" href="#__codelineno-42-8"></a>...
</code></pre></div>
<h3 id="shell-script-batch-configuration">Shell Script: Batch Configuration<a class="headerlink" href="#shell-script-batch-configuration" title="Permanent link"></a></h3>
<div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a><span class="ch">#!/bin/bash</span>
<a id="__codelineno-43-2" name="__codelineno-43-2" href="#__codelineno-43-2"></a><span class="c1"># Apply configuration to multiple devices</span>
<a id="__codelineno-43-3" name="__codelineno-43-3" href="#__codelineno-43-3"></a>
<a id="__codelineno-43-4" name="__codelineno-43-4" href="#__codelineno-43-4"></a><span class="nv">DEVICES</span><span class="o">=</span><span class="s2">"device1.local device2.local device3.local"</span>
<a id="__codelineno-43-5" name="__codelineno-43-5" href="#__codelineno-43-5"></a><span class="nv">USER</span><span class="o">=</span><span class="s2">"admin"</span>
<a id="__codelineno-43-6" name="__codelineno-43-6" href="#__codelineno-43-6"></a><span class="nv">PASSWORD</span><span class="o">=</span><span class="s2">"admin"</span>
<a id="__codelineno-43-7" name="__codelineno-43-7" href="#__codelineno-43-7"></a><span class="nv">CONFIG_FILE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span>
<a id="__codelineno-43-8" name="__codelineno-43-8" href="#__codelineno-43-8"></a>
<a id="__codelineno-43-9" name="__codelineno-43-9" href="#__codelineno-43-9"></a><span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span>-z<span class="w"> </span><span class="s2">"</span><span class="nv">$CONFIG_FILE</span><span class="s2">"</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<a id="__codelineno-43-10" name="__codelineno-43-10" href="#__codelineno-43-10"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Usage: </span><span class="nv">$0</span><span class="s2"> &lt;config.xml&gt;"</span>
<a id="__codelineno-43-11" name="__codelineno-43-11" href="#__codelineno-43-11"></a><span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<a id="__codelineno-43-12" name="__codelineno-43-12" href="#__codelineno-43-12"></a><span class="k">fi</span>
<a id="__codelineno-43-13" name="__codelineno-43-13" href="#__codelineno-43-13"></a>
<a id="__codelineno-43-14" name="__codelineno-43-14" href="#__codelineno-43-14"></a><span class="k">for</span><span class="w"> </span>device<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nv">$DEVICES</span><span class="p">;</span><span class="w"> </span><span class="k">do</span>
<a id="__codelineno-43-15" name="__codelineno-43-15" href="#__codelineno-43-15"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Configuring </span><span class="nv">$device</span><span class="s2">..."</span>
<a id="__codelineno-43-16" name="__codelineno-43-16" href="#__codelineno-43-16"></a>
<a id="__codelineno-43-17" name="__codelineno-43-17" href="#__codelineno-43-17"></a><span class="w"> </span><span class="c1"># Edit candidate</span>
<a id="__codelineno-43-18" name="__codelineno-43-18" href="#__codelineno-43-18"></a><span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span><span class="s2">"</span><span class="nv">$device</span><span class="s2">"</span><span class="w"> </span>--user<span class="w"> </span><span class="s2">"</span><span class="nv">$USER</span><span class="s2">"</span><span class="w"> </span>--password<span class="w"> </span><span class="s2">"</span><span class="nv">$PASSWORD</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
<a id="__codelineno-43-19" name="__codelineno-43-19" href="#__codelineno-43-19"></a><span class="w"> </span>edit-config<span class="w"> </span>--target<span class="w"> </span>candidate<span class="w"> </span>--config<span class="w"> </span><span class="s2">"</span><span class="nv">$CONFIG_FILE</span><span class="s2">"</span>
<a id="__codelineno-43-20" name="__codelineno-43-20" href="#__codelineno-43-20"></a>
<a id="__codelineno-43-21" name="__codelineno-43-21" href="#__codelineno-43-21"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="nv">$?</span><span class="w"> </span>-eq<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<a id="__codelineno-43-22" name="__codelineno-43-22" href="#__codelineno-43-22"></a><span class="w"> </span><span class="c1"># Commit if edit succeeded</span>
<a id="__codelineno-43-23" name="__codelineno-43-23" href="#__codelineno-43-23"></a><span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span><span class="s2">"</span><span class="nv">$device</span><span class="s2">"</span><span class="w"> </span>--user<span class="w"> </span><span class="s2">"</span><span class="nv">$USER</span><span class="s2">"</span><span class="w"> </span>--password<span class="w"> </span><span class="s2">"</span><span class="nv">$PASSWORD</span><span class="s2">"</span><span class="w"> </span>commit
<a id="__codelineno-43-24" name="__codelineno-43-24" href="#__codelineno-43-24"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">" ✓ </span><span class="nv">$device</span><span class="s2"> configured successfully"</span>
<a id="__codelineno-43-25" name="__codelineno-43-25" href="#__codelineno-43-25"></a><span class="w"> </span><span class="k">else</span>
<a id="__codelineno-43-26" name="__codelineno-43-26" href="#__codelineno-43-26"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">" ✗ </span><span class="nv">$device</span><span class="s2"> configuration failed"</span>
<a id="__codelineno-43-27" name="__codelineno-43-27" href="#__codelineno-43-27"></a><span class="w"> </span><span class="k">fi</span>
<a id="__codelineno-43-28" name="__codelineno-43-28" href="#__codelineno-43-28"></a><span class="k">done</span>
</code></pre></div>
<h2 id="other-netconf-tools">Other NETCONF Tools<a class="headerlink" href="#other-netconf-tools" title="Permanent link"></a></h2>
<h3 id="ncclient-python">ncclient (Python)<a class="headerlink" href="#ncclient-python" title="Permanent link"></a></h3>
<p>Popular Python library for NETCONF:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a>~$<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>ncclient
</code></pre></div>
<p>Example:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">ncclient</span><span class="w"> </span><span class="kn">import</span> <span class="n">manager</span>
<a id="__codelineno-45-2" name="__codelineno-45-2" href="#__codelineno-45-2"></a>
<a id="__codelineno-45-3" name="__codelineno-45-3" href="#__codelineno-45-3"></a><span class="k">with</span> <span class="n">manager</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s1">'example.local'</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">830</span><span class="p">,</span>
<a id="__codelineno-45-4" name="__codelineno-45-4" href="#__codelineno-45-4"></a> <span class="n">username</span><span class="o">=</span><span class="s1">'admin'</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="s1">'admin'</span><span class="p">,</span>
<a id="__codelineno-45-5" name="__codelineno-45-5" href="#__codelineno-45-5"></a> <span class="n">hostkey_verify</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">as</span> <span class="n">m</span><span class="p">:</span>
<a id="__codelineno-45-6" name="__codelineno-45-6" href="#__codelineno-45-6"></a> <span class="c1"># Get config</span>
<a id="__codelineno-45-7" name="__codelineno-45-7" href="#__codelineno-45-7"></a> <span class="n">c</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">get_config</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="s1">'running'</span><span class="p">)</span>
<a id="__codelineno-45-8" name="__codelineno-45-8" href="#__codelineno-45-8"></a> <span class="nb">print</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</code></pre></div>
<h3 id="ansible">Ansible<a class="headerlink" href="#ansible" title="Permanent link"></a></h3>
<p>Ansible includes NETCONF modules for automation:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Get interface config</span>
<a id="__codelineno-46-2" name="__codelineno-46-2" href="#__codelineno-46-2"></a><span class="w"> </span><span class="nt">netconf_get</span><span class="p">:</span>
<a id="__codelineno-46-3" name="__codelineno-46-3" href="#__codelineno-46-3"></a><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">running</span>
<a id="__codelineno-46-4" name="__codelineno-46-4" href="#__codelineno-46-4"></a><span class="w"> </span><span class="nt">filter</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">&lt;interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"/&gt;</span>
</code></pre></div>
<h3 id="cisco-tools">Cisco Tools<a class="headerlink" href="#cisco-tools" title="Permanent link"></a></h3>
<ul>
<li><strong>NSO (Network Services Orchestrator)</strong>: Enterprise orchestration platform</li>
<li><strong>YANG Suite</strong>: Web-based YANG exploration and testing tool</li>
<li><strong>Cisco pyATS</strong>: Network test automation</li>
</ul>
<h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link"></a></h2>
<h3 id="enable-netconf-debugging">Enable NETCONF Debugging<a class="headerlink" href="#enable-netconf-debugging" title="Permanent link"></a></h3>
<p>For netconf-client, use verbose mode:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a>~$<span class="w"> </span>netconf-client<span class="w"> </span>--host<span class="w"> </span>example.local<span class="w"> </span>--user<span class="w"> </span>admin<span class="w"> </span>--verbose<span class="w"> </span>get-config
</code></pre></div>
<p>For netopeer2-cli, enable debug output:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-48-1" name="__codelineno-48-1" href="#__codelineno-48-1"></a>&gt; debug 1
<a id="__codelineno-48-2" name="__codelineno-48-2" href="#__codelineno-48-2"></a>&gt; get-config --source running
</code></pre></div>
<h3 id="common-issues">Common Issues<a class="headerlink" href="#common-issues" title="Permanent link"></a></h3>
<p><strong>Connection refused:</strong></p>
<ul>
<li>Verify SSH is running on port 830: <code>ssh -p 830 admin@example.local</code></li>
<li>Check firewall rules</li>
</ul>
<p><strong>Authentication failed:</strong></p>
<ul>
<li>Verify credentials</li>
<li>Check user has NETCONF access permissions</li>
</ul>
<p><strong>Operation not supported:</strong></p>
<ul>
<li>Verify NETCONF capability: <code>netopeer2-cli</code><code>status</code> → check capabilities</li>
<li>Some operations require specific YANG modules</li>
</ul>
<h2 id="references">References<a class="headerlink" href="#references" title="Permanent link"></a></h2>
<ul>
<li><a href="https://datatracker.ietf.org/doc/html/rfc6241">NETCONF Protocol (RFC 6241)</a></li>
<li><a href="https://github.com/wires-se/netconf-client">netconf-client on GitHub</a></li>
<li><a href="https://github.com/CESNET/netopeer2">netopeer2 Documentation</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc7950">YANG Data Modeling Language (RFC 7950)</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8343">ietf-interfaces YANG module</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc7317">ietf-system YANG module</a></li>
<li><a href="https://ncclient.readthedocs.io/">ncclient Documentation</a></li>
</ul>
</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-2026 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.2c215733.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.d7400e89.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>