mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
3894 lines
131 KiB
HTML
3894 lines
131 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-restconf/">
|
|
|
|
|
|
<link rel="prev" href="../scripting-netconf/">
|
|
|
|
|
|
<link rel="next" href="../scripting-prod/">
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../assets/images/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.5">
|
|
|
|
|
|
|
|
<title>RESTCONF Scripting - User's Guide</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../extra.css">
|
|
|
|
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<link href="../assets/stylesheets/glightbox.min.css" rel="stylesheet"><script src="../assets/javascripts/glightbox.min.js"></script><style id="glightbox-style">
|
|
html.glightbox-open { overflow: initial; height: 100%; }
|
|
.gslide-title { margin-top: 0px; user-select: text; }
|
|
.gslide-desc { color: #666; user-select: text; }
|
|
.gslide-image img { background: black; }
|
|
.glightbox-clean .gslide-media { -webkit-box-shadow: none; box-shadow: none; }
|
|
.gscrollbar-fixer { padding-right: 15px; }
|
|
.gdesc-inner { font-size: 0.75rem; }
|
|
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color); }
|
|
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color); }
|
|
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color); }
|
|
</style></head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="orange">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#scripting-with-restconf" 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">
|
|
|
|
RESTCONF 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="../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_12">
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_4_12" id="__nav_4_12_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_12_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4_12">
|
|
<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>
|
|
|
|
|
|
|
|
|
|
</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 & 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">
|
|
<a href="../scripting-netconf/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
NETCONF 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">
|
|
|
|
|
|
RESTCONF 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">
|
|
|
|
|
|
RESTCONF 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="#helper-script" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Helper Script
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#http-methods-in-restconf" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
HTTP Methods in RESTCONF
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="HTTP Methods in RESTCONF">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#get-read-data" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
GET - Read Data
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#put-replace-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PUT - Replace Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#patch-mergeupdate-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PATCH - Merge/Update Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post-create-new-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
POST - Create New Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#delete-remove-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DELETE - Remove Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#quick-reference" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Quick Reference
|
|
|
|
</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 & Common Patterns
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Discovery & 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-api-capabilities" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Get API 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-list-all-interfaces-that-are-down" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 2: List all interfaces that are down
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#pattern-3-get-statistics-for-all-interfaces" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 3: Get statistics for all interfaces
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#pattern-4-check-if-interface-exists-before-configuring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 4: Check if interface exists before configuring
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#configuration-operations" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Configuration Operations
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Configuration Operations">
|
|
<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="#update-interface-description" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Update Interface Description
|
|
|
|
</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="#delete-ip-address-from-interface" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Delete IP Address from 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" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Operational Data
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Operational Data">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-configuration" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Configuration
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-operational-state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Operational State
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-statistics" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Statistics
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#list-all-interfaces" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
List 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-state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read OSPF State
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#system-operations-rpcs" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
System Operations (RPCs)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="System Operations (RPCs)">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#factory-reset" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Factory Reset
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#system-reboot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
System Reboot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#set-date-and-time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Set Date and Time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#advanced-examples" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Advanced Examples
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Advanced Examples">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#makefile-for-common-operations" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Makefile for Common Operations
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#monitoring-interface-traffic" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Monitoring Interface Traffic
|
|
|
|
</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-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 & 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 & 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="#helper-script" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Helper Script
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#http-methods-in-restconf" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
HTTP Methods in RESTCONF
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="HTTP Methods in RESTCONF">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#get-read-data" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
GET - Read Data
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#put-replace-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PUT - Replace Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#patch-mergeupdate-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
PATCH - Merge/Update Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#post-create-new-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
POST - Create New Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#delete-remove-resource" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DELETE - Remove Resource
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#quick-reference" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Quick Reference
|
|
|
|
</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 & Common Patterns
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Discovery & 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-api-capabilities" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Get API 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-list-all-interfaces-that-are-down" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 2: List all interfaces that are down
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#pattern-3-get-statistics-for-all-interfaces" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 3: Get statistics for all interfaces
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#pattern-4-check-if-interface-exists-before-configuring" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Pattern 4: Check if interface exists before configuring
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#configuration-operations" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Configuration Operations
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Configuration Operations">
|
|
<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="#update-interface-description" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Update Interface Description
|
|
|
|
</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="#delete-ip-address-from-interface" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Delete IP Address from 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" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Operational Data
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Operational Data">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-configuration" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Configuration
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-operational-state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Operational State
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#read-interface-statistics" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read Interface Statistics
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#list-all-interfaces" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
List 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-state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Read OSPF State
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#system-operations-rpcs" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
System Operations (RPCs)
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="System Operations (RPCs)">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#factory-reset" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Factory Reset
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#system-reboot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
System Reboot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#set-date-and-time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Set Date and Time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#advanced-examples" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Advanced Examples
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Advanced Examples">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#makefile-for-common-operations" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Makefile for Common Operations
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#monitoring-interface-traffic" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Monitoring Interface Traffic
|
|
|
|
</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-restconf">Scripting with RESTCONF<a class="headerlink" href="#scripting-with-restconf" title="Permanent link">¶</a></h1>
|
|
<p>RESTCONF provides a programmatic interface to both configuration and
|
|
operational data over HTTPS. This guide shows practical examples using
|
|
<code>curl</code> to interact with the RESTCONF API.</p>
|
|
<p>All examples use the following conventions:</p>
|
|
<ul>
|
|
<li><strong>Host</strong>: <code>example.local</code> (replace with your device hostname/IP)</li>
|
|
<li><strong>Credentials</strong>: <code>admin:admin</code> (default username:password)</li>
|
|
<li><strong>HTTPS</strong>: Self-signed certificates require <code>-k</code> flag in curl</li>
|
|
</ul>
|
|
<h2 id="helper-script">Helper Script<a class="headerlink" href="#helper-script" title="Permanent link">¶</a></h2>
|
|
<p>To simplify RESTCONF operations, create a <code>curl.sh</code> wrapper script:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="ch">#!/bin/sh</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="c1"># RESTCONF CLI wrapper for curl</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
|
|
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="nv">HOST</span><span class="o">=</span><span class="si">${</span><span class="nv">HOST</span><span class="k">:-</span><span class="nv">infix</span><span class="p">.local</span><span class="si">}</span>
|
|
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="nv">DATASTORE</span><span class="o">=</span>running
|
|
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="nv">AUTH</span><span class="o">=</span>admin:admin
|
|
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>
|
|
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>usage<span class="o">()</span>
|
|
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="o">{</span>
|
|
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span>cat<span class="w"> </span><span class="s"><<EOF >&2</span>
|
|
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="s">Usage: $0 [-v] [-h HOST] [-d DATASTORE] [-u USER:PASS] METHOD XPATH [CURL_ARGS...]</span>
|
|
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>
|
|
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="s">Options:</span>
|
|
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="s"> -h HOST Target host (default: infix.local)</span>
|
|
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="s"> -d DS Datastore: running, operational, startup (default: running)</span>
|
|
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="s"> -u CREDS Credentials as user:pass (default: admin:admin)</span>
|
|
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="s"> -v Verbose mode, use it to display variables and curl command</span>
|
|
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a>
|
|
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="s">Methods: GET, POST, PUT, PATCH, DELETE</span>
|
|
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="s">EOF</span>
|
|
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="o">}</span>
|
|
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a>
|
|
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a>check<span class="o">()</span>
|
|
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="o">{</span>
|
|
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="nv">hint</span><span class="o">=</span><span class="s2">"Note: URL may be missing a module prefix (e.g., ietf-system:system)"</span>
|
|
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="w"> </span><span class="nv">resp</span><span class="o">=</span><span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="w"> </span><span class="nv">url</span><span class="o">=</span><span class="s2">"</span><span class="nv">$2</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a>
|
|
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span>!<span class="w"> </span><span class="nb">command</span><span class="w"> </span>-v<span class="w"> </span>jq<span class="w"> </span>>/dev/null<span class="w"> </span><span class="m">2</span>><span class="p">&</span><span class="m">1</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
|
|
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s2">"%s\n"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$resp</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="w"> </span><span class="k">return</span>
|
|
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="w"> </span><span class="k">fi</span>
|
|
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a>
|
|
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="s2">"</span><span class="nv">$resp</span><span class="s2">"</span><span class="w"> </span><span class="k">in</span>
|
|
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="w"> </span>*<span class="s2">"Syntax error"</span>*<span class="o">)</span>
|
|
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a><span class="w"> </span><span class="nv">path_only</span><span class="o">=</span><span class="s2">"</span><span class="si">${</span><span class="nv">url</span><span class="p">#*//</span><span class="si">}</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a>
|
|
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a><span class="w"> </span><span class="c1"># Check for common URL error(s), e.g., missing module prefix</span>
|
|
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="s2">"</span><span class="nv">$path_only</span><span class="s2">"</span><span class="w"> </span><span class="k">in</span>
|
|
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a><span class="w"> </span>*<span class="s2">":"</span>*<span class="o">)</span>
|
|
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s2">"%s\n"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$resp</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>.
|
|
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a><span class="w"> </span>*<span class="o">)</span>
|
|
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s2">"%s\n"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$resp</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>--arg<span class="w"> </span>hint<span class="w"> </span><span class="s2">"</span><span class="nv">$hint</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a><span class="w"> </span><span class="s1">'.["ietf-restconf:errors"].error[] |= . + {comment: $hint}'</span>
|
|
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a><span class="w"> </span><span class="k">esac</span>
|
|
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a><span class="w"> </span>*<span class="o">)</span>
|
|
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a><span class="w"> </span><span class="nb">printf</span><span class="w"> </span><span class="s2">"%s\n"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$resp</span><span class="s2">"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>.
|
|
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a><span class="w"> </span><span class="k">esac</span>
|
|
<a id="__codelineno-0-54" name="__codelineno-0-54" href="#__codelineno-0-54"></a><span class="o">}</span>
|
|
<a id="__codelineno-0-55" name="__codelineno-0-55" href="#__codelineno-0-55"></a>
|
|
<a id="__codelineno-0-56" name="__codelineno-0-56" href="#__codelineno-0-56"></a><span class="k">while</span><span class="w"> </span><span class="nb">getopts</span><span class="w"> </span><span class="s2">"h:d:u:v"</span><span class="w"> </span>opt<span class="p">;</span><span class="w"> </span><span class="k">do</span>
|
|
<a id="__codelineno-0-57" name="__codelineno-0-57" href="#__codelineno-0-57"></a><span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="nv">$opt</span><span class="w"> </span><span class="k">in</span>
|
|
<a id="__codelineno-0-58" name="__codelineno-0-58" href="#__codelineno-0-58"></a><span class="w"> </span>h<span class="o">)</span><span class="w"> </span><span class="nv">HOST</span><span class="o">=</span><span class="s2">"</span><span class="nv">$OPTARG</span><span class="s2">"</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-59" name="__codelineno-0-59" href="#__codelineno-0-59"></a><span class="w"> </span>d<span class="o">)</span><span class="w"> </span><span class="nv">DATASTORE</span><span class="o">=</span><span class="s2">"</span><span class="nv">$OPTARG</span><span class="s2">"</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-60" name="__codelineno-0-60" href="#__codelineno-0-60"></a><span class="w"> </span>u<span class="o">)</span><span class="w"> </span><span class="nv">AUTH</span><span class="o">=</span><span class="s2">"</span><span class="nv">$OPTARG</span><span class="s2">"</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-61" name="__codelineno-0-61" href="#__codelineno-0-61"></a><span class="w"> </span>v<span class="o">)</span><span class="w"> </span><span class="nv">VERBOSE</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a><span class="w"> </span>*<span class="o">)</span><span class="w"> </span>usage<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a><span class="w"> </span><span class="k">esac</span>
|
|
<a id="__codelineno-0-64" name="__codelineno-0-64" href="#__codelineno-0-64"></a><span class="k">done</span>
|
|
<a id="__codelineno-0-65" name="__codelineno-0-65" href="#__codelineno-0-65"></a><span class="nb">shift</span><span class="w"> </span><span class="k">$((</span><span class="nv">OPTIND</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="k">))</span>
|
|
<a id="__codelineno-0-66" name="__codelineno-0-66" href="#__codelineno-0-66"></a>
|
|
<a id="__codelineno-0-67" name="__codelineno-0-67" href="#__codelineno-0-67"></a><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>-lt<span class="w"> </span><span class="m">2</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-0-68" name="__codelineno-0-68" href="#__codelineno-0-68"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Error: METHOD and XPATH are required"</span><span class="w"> </span>><span class="p">&</span><span class="m">2</span>
|
|
<a id="__codelineno-0-69" name="__codelineno-0-69" href="#__codelineno-0-69"></a><span class="w"> </span>usage<span class="w"> </span><span class="m">1</span>
|
|
<a id="__codelineno-0-70" name="__codelineno-0-70" href="#__codelineno-0-70"></a><span class="k">fi</span>
|
|
<a id="__codelineno-0-71" name="__codelineno-0-71" href="#__codelineno-0-71"></a>
|
|
<a id="__codelineno-0-72" name="__codelineno-0-72" href="#__codelineno-0-72"></a><span class="nv">METHOD</span><span class="o">=</span><span class="nv">$1</span>
|
|
<a id="__codelineno-0-73" name="__codelineno-0-73" href="#__codelineno-0-73"></a><span class="nv">XPATH</span><span class="o">=</span><span class="nv">$2</span>
|
|
<a id="__codelineno-0-74" name="__codelineno-0-74" href="#__codelineno-0-74"></a><span class="nb">shift</span><span class="w"> </span><span class="m">2</span>
|
|
<a id="__codelineno-0-75" name="__codelineno-0-75" href="#__codelineno-0-75"></a>
|
|
<a id="__codelineno-0-76" name="__codelineno-0-76" href="#__codelineno-0-76"></a><span class="c1"># Ensure XPATH starts with /</span>
|
|
<a id="__codelineno-0-77" name="__codelineno-0-77" href="#__codelineno-0-77"></a><span class="k">case</span><span class="w"> </span><span class="s2">"</span><span class="nv">$XPATH</span><span class="s2">"</span><span class="w"> </span><span class="k">in</span>
|
|
<a id="__codelineno-0-78" name="__codelineno-0-78" href="#__codelineno-0-78"></a><span class="w"> </span>/*<span class="o">)</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-79" name="__codelineno-0-79" href="#__codelineno-0-79"></a><span class="w"> </span>*<span class="o">)</span><span class="w"> </span><span class="nv">XPATH</span><span class="o">=</span><span class="s2">"/</span><span class="nv">$XPATH</span><span class="s2">"</span><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-80" name="__codelineno-0-80" href="#__codelineno-0-80"></a><span class="k">esac</span>
|
|
<a id="__codelineno-0-81" name="__codelineno-0-81" href="#__codelineno-0-81"></a>
|
|
<a id="__codelineno-0-82" name="__codelineno-0-82" href="#__codelineno-0-82"></a><span class="k">case</span><span class="w"> </span><span class="s2">"</span><span class="nv">$DATASTORE</span><span class="s2">"</span><span class="w"> </span><span class="k">in</span>
|
|
<a id="__codelineno-0-83" name="__codelineno-0-83" href="#__codelineno-0-83"></a><span class="w"> </span>running<span class="p">|</span>startup<span class="o">)</span>
|
|
<a id="__codelineno-0-84" name="__codelineno-0-84" href="#__codelineno-0-84"></a><span class="w"> </span><span class="nv">URL</span><span class="o">=</span><span class="s2">"https://</span><span class="si">${</span><span class="nv">HOST</span><span class="si">}</span><span class="s2">/restconf/data</span><span class="si">${</span><span class="nv">XPATH</span><span class="si">}</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-85" name="__codelineno-0-85" href="#__codelineno-0-85"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-86" name="__codelineno-0-86" href="#__codelineno-0-86"></a><span class="w"> </span>operational<span class="o">)</span>
|
|
<a id="__codelineno-0-87" name="__codelineno-0-87" href="#__codelineno-0-87"></a><span class="w"> </span><span class="nv">URL</span><span class="o">=</span><span class="s2">"https://</span><span class="si">${</span><span class="nv">HOST</span><span class="si">}</span><span class="s2">/restconf/data</span><span class="si">${</span><span class="nv">XPATH</span><span class="si">}</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-88" name="__codelineno-0-88" href="#__codelineno-0-88"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-89" name="__codelineno-0-89" href="#__codelineno-0-89"></a><span class="w"> </span>*<span class="o">)</span>
|
|
<a id="__codelineno-0-90" name="__codelineno-0-90" href="#__codelineno-0-90"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Error: Invalid datastore '</span><span class="nv">$DATASTORE</span><span class="s2">'. Use: running, operational, or startup"</span><span class="w"> </span>><span class="p">&</span><span class="m">2</span>
|
|
<a id="__codelineno-0-91" name="__codelineno-0-91" href="#__codelineno-0-91"></a><span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
|
|
<a id="__codelineno-0-92" name="__codelineno-0-92" href="#__codelineno-0-92"></a><span class="w"> </span><span class="p">;;</span>
|
|
<a id="__codelineno-0-93" name="__codelineno-0-93" href="#__codelineno-0-93"></a><span class="k">esac</span>
|
|
<a id="__codelineno-0-94" name="__codelineno-0-94" href="#__codelineno-0-94"></a>
|
|
<a id="__codelineno-0-95" name="__codelineno-0-95" href="#__codelineno-0-95"></a><span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="s2">"</span><span class="nv">$VERBOSE</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-0-96" name="__codelineno-0-96" href="#__codelineno-0-96"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"DS : </span><span class="nv">$DATASTORE</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-97" name="__codelineno-0-97" href="#__codelineno-0-97"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"OP : </span><span class="nv">$METHOD</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-98" name="__codelineno-0-98" href="#__codelineno-0-98"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"XPATH : </span><span class="nv">$XPATH</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-99" name="__codelineno-0-99" href="#__codelineno-0-99"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"AUTH : </span><span class="nv">$AUTH</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-100" name="__codelineno-0-100" href="#__codelineno-0-100"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"=> URL : </span><span class="nv">$URL</span><span class="s2">"</span>
|
|
<a id="__codelineno-0-101" name="__codelineno-0-101" href="#__codelineno-0-101"></a><span class="w"> </span><span class="nb">set</span><span class="w"> </span>-x
|
|
<a id="__codelineno-0-102" name="__codelineno-0-102" href="#__codelineno-0-102"></a><span class="k">fi</span>
|
|
<a id="__codelineno-0-103" name="__codelineno-0-103" href="#__codelineno-0-103"></a>
|
|
<a id="__codelineno-0-104" name="__codelineno-0-104" href="#__codelineno-0-104"></a><span class="nv">RESP</span><span class="o">=</span><span class="k">$(</span>/usr/bin/curl<span class="w"> </span>--silent<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-105" name="__codelineno-0-105" href="#__codelineno-0-105"></a><span class="w"> </span>--insecure<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-106" name="__codelineno-0-106" href="#__codelineno-0-106"></a><span class="w"> </span>--user<span class="w"> </span><span class="s2">"</span><span class="si">${</span><span class="nv">AUTH</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-107" name="__codelineno-0-107" href="#__codelineno-0-107"></a><span class="w"> </span>--request<span class="w"> </span><span class="s2">"</span><span class="si">${</span><span class="nv">METHOD</span><span class="si">}</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-108" name="__codelineno-0-108" href="#__codelineno-0-108"></a><span class="w"> </span>--header<span class="w"> </span><span class="s2">"Content-Type: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-109" name="__codelineno-0-109" href="#__codelineno-0-109"></a><span class="w"> </span>--header<span class="w"> </span><span class="s2">"Accept: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-110" name="__codelineno-0-110" href="#__codelineno-0-110"></a><span class="w"> </span><span class="s2">"</span><span class="nv">$@</span><span class="s2">"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-0-111" name="__codelineno-0-111" href="#__codelineno-0-111"></a><span class="w"> </span><span class="s2">"</span><span class="si">${</span><span class="nv">URL</span><span class="si">}</span><span class="s2">"</span><span class="k">)</span>
|
|
<a id="__codelineno-0-112" name="__codelineno-0-112" href="#__codelineno-0-112"></a>
|
|
<a id="__codelineno-0-113" name="__codelineno-0-113" href="#__codelineno-0-113"></a>check<span class="w"> </span><span class="s2">"</span><span class="nv">$RESP</span><span class="s2">"</span><span class="w"> </span><span class="s2">"</span><span class="nv">$URL</span><span class="s2">"</span>
|
|
</code></pre></div>
|
|
<p>Make it executable:</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>chmod<span class="w"> </span>+x<span class="w"> </span>curl.sh
|
|
</code></pre></div>
|
|
<p>This wrapper handles authentication, headers, SSL certificates, and URL
|
|
construction, making commands much cleaner. You can override defaults with
|
|
command-line options or environment variables:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="c1"># Using command-line options</span>
|
|
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="m">192</span>.168.1.10<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>-u<span class="w"> </span>admin:secret<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces
|
|
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>
|
|
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="c1"># Using environment variables</span>
|
|
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a>~$<span class="w"> </span><span class="nv">HOST</span><span class="o">=</span><span class="m">192</span>.168.1.10<span class="w"> </span>./curl.sh<span class="w"> </span>GET<span class="w"> </span>/ietf-system:system
|
|
</code></pre></div>
|
|
<p>The examples below show both raw <code>curl</code> commands and the equivalent using
|
|
<code>curl.sh</code> where applicable.</p>
|
|
<h2 id="http-methods-in-restconf">HTTP Methods in RESTCONF<a class="headerlink" href="#http-methods-in-restconf" title="Permanent link">¶</a></h2>
|
|
<p>RESTCONF uses standard HTTP methods to perform different operations on
|
|
configuration and operational data. Understanding when to use each method is
|
|
crucial for correct and safe operations.</p>
|
|
<h3 id="get-read-data">GET - Read Data<a class="headerlink" href="#get-read-data" title="Permanent link">¶</a></h3>
|
|
<p>Retrieve configuration or operational data without making changes.</p>
|
|
<p><strong>When to use:</strong></p>
|
|
<ul>
|
|
<li>Reading current configuration</li>
|
|
<li>Querying operational state (interface statistics, routing tables, etc.)</li>
|
|
<li>Discovering what exists before making changes</li>
|
|
</ul>
|
|
<p><strong>Characteristics:</strong></p>
|
|
<ul>
|
|
<li>Safe operation (no side effects)</li>
|
|
<li>Can be repeated without consequences</li>
|
|
<li>Works on both configuration and operational datastores</li>
|
|
</ul>
|
|
<p><strong>Example:</strong>
|
|
</p><div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces
|
|
</code></pre></div><p></p>
|
|
<h3 id="put-replace-resource">PUT - Replace Resource<a class="headerlink" href="#put-replace-resource" title="Permanent link">¶</a></h3>
|
|
<div class="admonition danger">
|
|
<p class="admonition-title">Heads-up!</p>
|
|
<p>PUT replaces everything - missing fields will be deleted!</p>
|
|
</div>
|
|
<p>Replace an entire resource with new content.</p>
|
|
<p><strong>When to use:</strong></p>
|
|
<ul>
|
|
<li>Replacing entire datastore (backup/restore scenarios)</li>
|
|
<li>Complete reconfiguration of a container</li>
|
|
<li>When you want to ensure the resource matches exactly what you provide</li>
|
|
</ul>
|
|
<p><strong>Characteristics:</strong></p>
|
|
<ul>
|
|
<li>Replaces all content at the target path</li>
|
|
<li>Any existing data not in the PUT request is <strong>removed</strong></li>
|
|
<li>Requires complete, valid configuration</li>
|
|
<li>Dangerous if you don't include all necessary fields</li>
|
|
</ul>
|
|
<p><strong>Example:</strong>
|
|
</p><div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>PUT<span class="w"> </span>/ietf-system:system<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-system:system":{"hostname":"newhost","contact":"admin@example.com"}}'</span>
|
|
</code></pre></div><p></p>
|
|
<h3 id="patch-mergeupdate-resource">PATCH - Merge/Update Resource<a class="headerlink" href="#patch-mergeupdate-resource" title="Permanent link">¶</a></h3>
|
|
<p>Partially update a resource by merging changes with existing data.</p>
|
|
<p><strong>When to use:</strong></p>
|
|
<ul>
|
|
<li>Modifying specific fields while preserving others</li>
|
|
<li>Working with path-based NACM permissions</li>
|
|
<li>Incremental configuration changes</li>
|
|
<li>Safer alternative to PUT for most use cases</li>
|
|
</ul>
|
|
<p><strong>Characteristics:</strong></p>
|
|
<ul>
|
|
<li>Merges changes with existing configuration</li>
|
|
<li>Only specified fields are modified</li>
|
|
<li>Unspecified fields remain unchanged</li>
|
|
<li>Works with partial data structures</li>
|
|
<li>NACM-friendly (respects path-based permissions)</li>
|
|
</ul>
|
|
<p><strong>Example:</strong>
|
|
</p><div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>PATCH<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-interfaces:interfaces":{"interface":[{"name":"e0","description":"WAN"}]}}'</span>
|
|
</code></pre></div><p></p>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title">Best practice</p>
|
|
<p>Use PATCH instead of PUT for most configuration updates.</p>
|
|
</div>
|
|
<h3 id="post-create-new-resource">POST - Create New Resource<a class="headerlink" href="#post-create-new-resource" title="Permanent link">¶</a></h3>
|
|
<p>Create a new resource within a collection or invoke an RPC.</p>
|
|
<p><strong>When to use:</strong></p>
|
|
<ul>
|
|
<li>Adding new list entries (interfaces, users, routes, etc.)</li>
|
|
<li>Creating resources at specific paths</li>
|
|
<li>Invoking RPC operations (reboot, factory-reset, etc.)</li>
|
|
</ul>
|
|
<p><strong>Characteristics:</strong></p>
|
|
<ul>
|
|
<li>Creates new resources</li>
|
|
<li>For lists: adds a new element</li>
|
|
<li>For RPCs: executes the operation</li>
|
|
<li>Returns error if resource already exists (for configuration)</li>
|
|
</ul>
|
|
<p><strong>Example - Add IP address:</strong>
|
|
</p><div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>POST<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"prefix-length": 32}'</span>
|
|
</code></pre></div><p></p>
|
|
<p><strong>Example - Invoke RPC:</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="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>POST<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Type: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span>https://example.local/restconf/operations/ietf-system:system-restart
|
|
</code></pre></div><p></p>
|
|
<h3 id="delete-remove-resource">DELETE - Remove Resource<a class="headerlink" href="#delete-remove-resource" title="Permanent link">¶</a></h3>
|
|
<p>Delete a resource or configuration element.</p>
|
|
<p><strong>When to use:</strong></p>
|
|
<ul>
|
|
<li>Removing interfaces, routes, users, etc.</li>
|
|
<li>Deleting specific configuration items</li>
|
|
<li>Cleaning up unwanted configuration</li>
|
|
</ul>
|
|
<p><strong>Characteristics:</strong></p>
|
|
<ul>
|
|
<li>Removes the resource completely</li>
|
|
<li>Cannot be undone (except by reconfiguration)</li>
|
|
<li>Returns error if resource doesn't exist</li>
|
|
</ul>
|
|
<p><strong>Example:</strong>
|
|
</p><div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>DELETE<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254
|
|
</code></pre></div><p></p>
|
|
<h3 id="quick-reference">Quick Reference<a class="headerlink" href="#quick-reference" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th><strong>Method</strong></th>
|
|
<th><strong>Use Case</strong></th>
|
|
<th><strong>Safe?</strong></th>
|
|
<th><strong>Idempotent?</strong></th>
|
|
<th><strong>NACM Impact</strong></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>GET</td>
|
|
<td>Read data</td>
|
|
<td>✓</td>
|
|
<td>✓</td>
|
|
<td>Read permissions</td>
|
|
</tr>
|
|
<tr>
|
|
<td>PUT</td>
|
|
<td>Replace entire resource</td>
|
|
<td>✗</td>
|
|
<td>✓</td>
|
|
<td>Full write access needed</td>
|
|
</tr>
|
|
<tr>
|
|
<td>PATCH</td>
|
|
<td>Merge/update fields</td>
|
|
<td>✓</td>
|
|
<td>✓</td>
|
|
<td>Path-specific write</td>
|
|
</tr>
|
|
<tr>
|
|
<td>POST</td>
|
|
<td>Create new/invoke RPC</td>
|
|
<td>✗</td>
|
|
<td>✗</td>
|
|
<td>Create/exec permissions</td>
|
|
</tr>
|
|
<tr>
|
|
<td>DELETE</td>
|
|
<td>Remove resource</td>
|
|
<td>✗</td>
|
|
<td>✓</td>
|
|
<td>Delete permissions</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><strong>Key takeaways:</strong></p>
|
|
<ul>
|
|
<li><strong>Use PATCH for updates</strong> - Safer than PUT, works with NACM</li>
|
|
<li><strong>Use PUT sparingly</strong> - Only when you need complete replacement</li>
|
|
<li><strong>GET is always safe</strong> - Read as much as you need</li>
|
|
<li><strong>POST for creation/RPCs</strong> - Creating new items or executing operations</li>
|
|
<li><strong>DELETE with care</strong> - Cannot be undone</li>
|
|
</ul>
|
|
<h2 id="discovery-common-patterns">Discovery & 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-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][].name'</span>
|
|
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>lo
|
|
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a>e0
|
|
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a>e1
|
|
</code></pre></div>
|
|
<p>This is essential for automation - interface names vary by platform (eth0,
|
|
e1, enp0s3, etc.), so scripts should discover them rather than hardcode.</p>
|
|
<h3 id="get-api-capabilities">Get API Capabilities<a class="headerlink" href="#get-api-capabilities" title="Permanent link">¶</a></h3>
|
|
<p>Discover what YANG modules are available:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>~$<span class="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>GET<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Accept: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="w"> </span>https://example.local/restconf/data/ietf-yang-library:yang-library
|
|
</code></pre></div>
|
|
<p>This returns all supported YANG modules, revisions, and features.</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-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/<span class="w"> </span>-o<span class="w"> </span>backup.json
|
|
</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 IPs and search:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][] | select(.["ietf-ip:ipv4"]["address"][]?.ip == "192.168.1.100") | .name'</span>
|
|
</code></pre></div>
|
|
<h4 id="pattern-2-list-all-interfaces-that-are-down">Pattern 2: List all interfaces that are down<a class="headerlink" href="#pattern-2-list-all-interfaces-that-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>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][] | select(.["oper-status"] == "down") | .name'</span>
|
|
</code></pre></div>
|
|
<h4 id="pattern-3-get-statistics-for-all-interfaces">Pattern 3: Get statistics for all interfaces<a class="headerlink" href="#pattern-3-get-statistics-for-all-interfaces" 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="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][] | "\(.name): RX \(.statistics["in-octets"]) TX \(.statistics["out-octets"])"'</span>
|
|
</code></pre></div>
|
|
<p>Output:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>lo: RX 29320 TX 29320
|
|
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>e0: RX 1847392 TX 892341
|
|
<a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a>e1: RX 0 TX 0
|
|
</code></pre></div>
|
|
<h4 id="pattern-4-check-if-interface-exists-before-configuring">Pattern 4: Check if interface exists before configuring<a class="headerlink" href="#pattern-4-check-if-interface-exists-before-configuring" title="Permanent link">¶</a></h4>
|
|
<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><span class="k">if</span><span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>eth0<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>-q<span class="w"> </span><span class="s2">"ietf-interfaces:interface"</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
|
|
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Interface eth0 exists"</span>
|
|
<a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="w"> </span><span class="k">else</span>
|
|
<a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"Interface eth0 not found"</span>
|
|
<a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="w"> </span><span class="k">fi</span>
|
|
</code></pre></div>
|
|
<h2 id="configuration-operations">Configuration Operations<a class="headerlink" href="#configuration-operations" title="Permanent link">¶</a></h2>
|
|
<h3 id="read-hostname">Read Hostname<a class="headerlink" href="#read-hostname" title="Permanent link">¶</a></h3>
|
|
<p>Example of fetching JSON configuration data:</p>
|
|
<p><strong>Using curl directly:</strong></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>curl<span class="w"> </span>-kX<span class="w"> </span>GET<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Accept: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a><span class="w"> </span>https://example.local/restconf/data/ietf-system:system/hostname
|
|
<a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a><span class="o">{</span>
|
|
<a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a><span class="w"> </span><span class="s2">"ietf-system:system"</span>:<span class="w"> </span><span class="o">{</span>
|
|
<a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="w"> </span><span class="s2">"hostname"</span>:<span class="w"> </span><span class="s2">"foo"</span>
|
|
<a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a><span class="w"> </span><span class="o">}</span>
|
|
<a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a><span class="o">}</span>
|
|
</code></pre></div>
|
|
<p><strong>Using curl.sh:</strong></p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/ietf-system:system/hostname
|
|
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="o">{</span>
|
|
<a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="w"> </span><span class="s2">"ietf-system:system"</span>:<span class="w"> </span><span class="o">{</span>
|
|
<a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="w"> </span><span class="s2">"hostname"</span>:<span class="w"> </span><span class="s2">"foo"</span>
|
|
<a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a><span class="w"> </span><span class="o">}</span>
|
|
<a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a><span class="o">}</span>
|
|
</code></pre></div>
|
|
<h3 id="set-hostname">Set Hostname<a class="headerlink" href="#set-hostname" title="Permanent link">¶</a></h3>
|
|
<p>Example of updating configuration with inline JSON data:</p>
|
|
<p><strong>Using curl directly:</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="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>PATCH<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Content-Type: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-system:system":{"hostname":"bar"}}'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span>https://example.local/restconf/data/ietf-system:system
|
|
</code></pre></div>
|
|
<p><strong>Using curl.sh:</strong></p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>PATCH<span class="w"> </span>/ietf-system:system<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-system:system":{"hostname":"bar"}}'</span>
|
|
</code></pre></div>
|
|
<h3 id="update-interface-description">Update Interface Description<a class="headerlink" href="#update-interface-description" title="Permanent link">¶</a></h3>
|
|
<p>PATCH allows you to modify specific parts of the configuration without
|
|
replacing the entire container. This is particularly useful when working
|
|
with NACM (Network Access Control Model) permissions that grant access to
|
|
specific paths.</p>
|
|
<p><strong>Why use PATCH instead of PUT:</strong></p>
|
|
<ul>
|
|
<li><strong>Partial updates</strong>: Only changes specified fields, preserves others</li>
|
|
<li><strong>NACM-friendly</strong>: Works with path-based access control rules</li>
|
|
<li><strong>Safer</strong>: Reduces risk of accidentally removing unrelated configuration</li>
|
|
</ul>
|
|
<p><strong>Example - Modify an interface description:</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>curl<span class="w"> </span>-kX<span class="w"> </span>PATCH<span class="w"> </span>-u<span class="w"> </span>admin: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>-H<span class="w"> </span><span class="s1">'Content-Type: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-interfaces:interfaces":{"interface":[{"name":"e0","description":"WAN Port"}]}}'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="w"> </span>https://example.local/restconf/data/ietf-interfaces:interfaces
|
|
</code></pre></div>
|
|
<p><strong>Using curl.sh:</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="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>PATCH<span class="w"> </span>/ietf-interfaces:interfaces<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-interfaces:interfaces":{"interface":[{"name":"e0","description":"WAN Port"}]}}'</span>
|
|
</code></pre></div>
|
|
<p><strong>Formatted for readability:</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="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>PATCH<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Content-Type: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{</span>
|
|
<a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="s1"> "ietf-interfaces:interfaces": {</span>
|
|
<a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="s1"> "interface": [</span>
|
|
<a id="__codelineno-23-6" name="__codelineno-23-6" href="#__codelineno-23-6"></a><span class="s1"> {</span>
|
|
<a id="__codelineno-23-7" name="__codelineno-23-7" href="#__codelineno-23-7"></a><span class="s1"> "name": "e0",</span>
|
|
<a id="__codelineno-23-8" name="__codelineno-23-8" href="#__codelineno-23-8"></a><span class="s1"> "description": "WAN Port"</span>
|
|
<a id="__codelineno-23-9" name="__codelineno-23-9" href="#__codelineno-23-9"></a><span class="s1"> }</span>
|
|
<a id="__codelineno-23-10" name="__codelineno-23-10" href="#__codelineno-23-10"></a><span class="s1"> ]</span>
|
|
<a id="__codelineno-23-11" name="__codelineno-23-11" href="#__codelineno-23-11"></a><span class="s1"> }</span>
|
|
<a id="__codelineno-23-12" name="__codelineno-23-12" href="#__codelineno-23-12"></a><span class="s1"> }'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-23-13" name="__codelineno-23-13" href="#__codelineno-23-13"></a><span class="w"> </span>https://example.local/restconf/data/ietf-interfaces:interfaces
|
|
</code></pre></div>
|
|
<p><strong>Key points:</strong></p>
|
|
<ul>
|
|
<li>PATCH URL targets the <strong>container</strong> (<code>/interfaces</code>), not a specific interface</li>
|
|
<li>JSON body includes the full structure with the interface array</li>
|
|
<li>Only specified fields are modified; other interface settings remain unchanged</li>
|
|
<li>The <code>name</code> field identifies which interface to update</li>
|
|
</ul>
|
|
<p><strong>Verify the change:</strong></p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>e0<span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span><span class="s1">'.["ietf-interfaces:interface"][0].description'</span>
|
|
<a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a><span class="s2">"WAN Port"</span>
|
|
</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>Add an IP address to the loopback interface:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>POST<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{ "prefix-length": 32 }'</span>
|
|
</code></pre></div>
|
|
<h3 id="delete-ip-address-from-interface">Delete IP Address from Interface<a class="headerlink" href="#delete-ip-address-from-interface" title="Permanent link">¶</a></h3>
|
|
<p>Remove an IP address from the loopback interface:</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>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>DELETE<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254
|
|
</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>No copy command available yet to copy between datastores, and the
|
|
Rousette back-end also does not support "write-through" to the
|
|
startup datastore.</p>
|
|
<p>To save running-config to startup-config, fetch running to a local file
|
|
and then update startup with it:</p>
|
|
<p><strong>Using curl directly:</strong></p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>~$<span class="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>GET<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span>-o<span class="w"> </span>running-config.json<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-27-2" name="__codelineno-27-2" href="#__codelineno-27-2"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Accept: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-27-3" name="__codelineno-27-3" href="#__codelineno-27-3"></a><span class="w"> </span>https://example.local/restconf/ds/ietf-datastores:running
|
|
<a id="__codelineno-27-4" name="__codelineno-27-4" href="#__codelineno-27-4"></a>
|
|
<a id="__codelineno-27-5" name="__codelineno-27-5" href="#__codelineno-27-5"></a>~$<span class="w"> </span>curl<span class="w"> </span>-kX<span class="w"> </span>PUT<span class="w"> </span>-u<span class="w"> </span>admin:admin<span class="w"> </span>-d<span class="w"> </span>@running-config.json<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-27-6" name="__codelineno-27-6" href="#__codelineno-27-6"></a><span class="w"> </span>-H<span class="w"> </span><span class="s1">'Content-Type: application/yang-data+json'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-27-7" name="__codelineno-27-7" href="#__codelineno-27-7"></a><span class="w"> </span>https://example.local/restconf/ds/ietf-datastores:startup
|
|
</code></pre></div>
|
|
<p><strong>Using curl.sh:</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>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/<span class="w"> </span>-o<span class="w"> </span>running-config.json
|
|
<a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>startup<span class="w"> </span>PUT<span class="w"> </span>/<span class="w"> </span>-d<span class="w"> </span>@running-config.json
|
|
</code></pre></div>
|
|
<h2 id="operational-data">Operational Data<a class="headerlink" href="#operational-data" title="Permanent link">¶</a></h2>
|
|
<h3 id="read-interface-configuration">Read Interface Configuration<a class="headerlink" href="#read-interface-configuration" title="Permanent link">¶</a></h3>
|
|
<p>Get the running configuration for the loopback interface:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo
|
|
</code></pre></div>
|
|
<h3 id="read-interface-operational-state">Read Interface Operational State<a class="headerlink" href="#read-interface-operational-state" title="Permanent link">¶</a></h3>
|
|
<p>Get operational data (state, statistics, etc.) for an interface:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo
|
|
</code></pre></div>
|
|
<p>This includes administrative and operational state, MAC address, MTU, and
|
|
statistics counters.</p>
|
|
<h3 id="read-interface-statistics">Read Interface Statistics<a class="headerlink" href="#read-interface-statistics" title="Permanent link">¶</a></h3>
|
|
<p>Extract specific statistics using <code>jq</code>:</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>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>eth0<span class="w"> </span><span class="m">2</span>>/dev/null<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><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][0]["statistics"]["in-octets"]'</span>
|
|
</code></pre></div>
|
|
<h3 id="list-all-interfaces">List All Interfaces<a class="headerlink" href="#list-all-interfaces" title="Permanent link">¶</a></h3>
|
|
<p>Get operational data for all interfaces:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces: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>Get the IPv4 routing table:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-routing:routing/ribs/rib<span class="o">=</span>ipv4-default
|
|
</code></pre></div>
|
|
<h3 id="read-ospf-state">Read OSPF State<a class="headerlink" href="#read-ospf-state" title="Permanent link">¶</a></h3>
|
|
<p>Get OSPF operational data (neighbors, routes, etc.):</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>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-routing:routing/control-plane-protocols/control-plane-protocol<span class="o">=</span>ietf-ospf:ospfv2,default
|
|
</code></pre></div>
|
|
<p>Or get just the neighbor information:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>~$<span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span>example.local<span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-routing:routing/control-plane-protocols/control-plane-protocol<span class="o">=</span>ietf-ospf:ospfv2,default/ietf-ospf:ospf/areas/area<span class="o">=</span><span class="m">0</span>.0.0.0/interfaces
|
|
</code></pre></div>
|
|
<h2 id="system-operations-rpcs">System Operations (RPCs)<a class="headerlink" href="#system-operations-rpcs" title="Permanent link">¶</a></h2>
|
|
<h3 id="factory-reset">Factory Reset<a class="headerlink" href="#factory-reset" title="Permanent link">¶</a></h3>
|
|
<p>Reset the system to factory defaults:</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>curl<span class="w"> </span>-kX<span class="w"> </span>POST<span class="w"> </span>-u<span class="w"> </span>admin: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>-H<span class="w"> </span><span class="s2">"Content-Type: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-36-3" name="__codelineno-36-3" href="#__codelineno-36-3"></a><span class="w"> </span>https://example.local/restconf/operations/ietf-factory-default:factory-reset
|
|
<a id="__codelineno-36-4" name="__codelineno-36-4" href="#__codelineno-36-4"></a>curl:<span class="w"> </span><span class="o">(</span><span class="m">56</span><span class="o">)</span><span class="w"> </span>OpenSSL<span class="w"> </span>SSL_read:<span class="w"> </span>error:0A000126:SSL<span class="w"> </span>routines::unexpected<span class="w"> </span>eof<span class="w"> </span><span class="k">while</span><span class="w"> </span>reading,<span class="w"> </span>errno<span class="w"> </span><span class="m">0</span>
|
|
</code></pre></div>
|
|
<blockquote>
|
|
<p><strong>Note:</strong> The connection error is expected - the device resets immediately.</p>
|
|
</blockquote>
|
|
<h3 id="system-reboot">System Reboot<a class="headerlink" href="#system-reboot" title="Permanent link">¶</a></h3>
|
|
<p>Reboot the system:</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>curl<span class="w"> </span>-kX<span class="w"> </span>POST<span class="w"> </span>-u<span class="w"> </span>admin: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>-H<span class="w"> </span><span class="s2">"Content-Type: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a><span class="w"> </span>https://example.local/restconf/operations/ietf-system:system-restart
|
|
</code></pre></div>
|
|
<h3 id="set-date-and-time">Set Date and Time<a class="headerlink" href="#set-date-and-time" title="Permanent link">¶</a></h3>
|
|
<p>Example of an RPC that takes input/arguments:</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>curl<span class="w"> </span>-kX<span class="w"> </span>POST<span class="w"> </span>-u<span class="w"> </span>admin: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>-H<span class="w"> </span><span class="s2">"Content-Type: application/yang-data+json"</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-38-3" name="__codelineno-38-3" href="#__codelineno-38-3"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"ietf-system:input": {"current-datetime": "2024-04-17T13:48:02-01:00"}}'</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-38-4" name="__codelineno-38-4" href="#__codelineno-38-4"></a><span class="w"> </span>https://example.local/restconf/operations/ietf-system:set-current-datetime
|
|
</code></pre></div>
|
|
<p>Verify the change with SSH:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>~$<span class="w"> </span>ssh<span class="w"> </span>admin@example.local<span class="w"> </span><span class="s1">'date'</span>
|
|
<a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a>Wed<span class="w"> </span>Apr<span class="w"> </span><span class="m">17</span><span class="w"> </span><span class="m">14</span>:48:12<span class="w"> </span>UTC<span class="w"> </span><span class="m">2024</span>
|
|
</code></pre></div>
|
|
<h2 id="advanced-examples">Advanced Examples<a class="headerlink" href="#advanced-examples" title="Permanent link">¶</a></h2>
|
|
<h3 id="makefile-for-common-operations">Makefile for Common Operations<a class="headerlink" href="#makefile-for-common-operations" title="Permanent link">¶</a></h3>
|
|
<p>Create a <code>Makefile</code> to simplify common operations:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a><span class="nv">HOST</span><span class="w"> </span><span class="o">?=</span><span class="w"> </span>infix.local
|
|
<a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a>
|
|
<a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a><span class="nf">lo-running</span><span class="o">:</span>
|
|
<a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a><span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo
|
|
<a id="__codelineno-40-5" name="__codelineno-40-5" href="#__codelineno-40-5"></a>
|
|
<a id="__codelineno-40-6" name="__codelineno-40-6" href="#__codelineno-40-6"></a><span class="nf">lo-operational</span><span class="o">:</span>
|
|
<a id="__codelineno-40-7" name="__codelineno-40-7" href="#__codelineno-40-7"></a><span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo
|
|
<a id="__codelineno-40-8" name="__codelineno-40-8" href="#__codelineno-40-8"></a>
|
|
<a id="__codelineno-40-9" name="__codelineno-40-9" href="#__codelineno-40-9"></a><span class="nf">lo-add-ip</span><span class="o">:</span>
|
|
<a id="__codelineno-40-10" name="__codelineno-40-10" href="#__codelineno-40-10"></a><span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span>POST<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-40-11" name="__codelineno-40-11" href="#__codelineno-40-11"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-40-12" name="__codelineno-40-12" href="#__codelineno-40-12"></a><span class="w"> </span>-d<span class="w"> </span><span class="s1">'{ "prefix-length": 32 }'</span>
|
|
<a id="__codelineno-40-13" name="__codelineno-40-13" href="#__codelineno-40-13"></a>
|
|
<a id="__codelineno-40-14" name="__codelineno-40-14" href="#__codelineno-40-14"></a><span class="nf">lo-del-ip</span><span class="o">:</span>
|
|
<a id="__codelineno-40-15" name="__codelineno-40-15" href="#__codelineno-40-15"></a><span class="w"> </span>./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span>DELETE<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-40-16" name="__codelineno-40-16" href="#__codelineno-40-16"></a><span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span>lo/ietf-ip:ipv4/address<span class="o">=</span><span class="m">192</span>.168.254.254
|
|
<a id="__codelineno-40-17" name="__codelineno-40-17" href="#__codelineno-40-17"></a>
|
|
<a id="__codelineno-40-18" name="__codelineno-40-18" href="#__codelineno-40-18"></a><span class="nf">%-stats</span><span class="o">:</span>
|
|
<a id="__codelineno-40-19" name="__codelineno-40-19" href="#__codelineno-40-19"></a><span class="w"> </span>@./curl.sh<span class="w"> </span>-h<span class="w"> </span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span>-d<span class="w"> </span>operational<span class="w"> </span>GET<span class="w"> </span>/ietf-interfaces:interfaces/interface<span class="o">=</span><span class="nv">$*</span><span class="w"> </span><span class="m">2</span>>/dev/null<span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-40-20" name="__codelineno-40-20" href="#__codelineno-40-20"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span>-r<span class="w"> </span><span class="s1">'.["ietf-interfaces:interfaces"]["interface"][0]["statistics"]["in-octets"]'</span>
|
|
<a id="__codelineno-40-21" name="__codelineno-40-21" href="#__codelineno-40-21"></a>
|
|
<a id="__codelineno-40-22" name="__codelineno-40-22" href="#__codelineno-40-22"></a><span class="nf">%-monitor</span><span class="o">:</span>
|
|
<a id="__codelineno-40-23" name="__codelineno-40-23" href="#__codelineno-40-23"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span>sleep<span class="w"> </span><span class="m">0</span>.2<span class="p">;</span><span class="w"> </span><span class="k">do</span><span class="w"> </span>make<span class="w"> </span>-s<span class="w"> </span><span class="nv">HOST</span><span class="o">=</span><span class="k">$(</span>HOST<span class="k">)</span><span class="w"> </span><span class="nv">$*</span>-stats<span class="p">;</span><span class="w"> </span><span class="k">done</span><span class="w"> </span><span class="se">\</span>
|
|
<a id="__codelineno-40-24" name="__codelineno-40-24" href="#__codelineno-40-24"></a><span class="w"> </span><span class="p">|</span><span class="w"> </span>ttyplot<span class="w"> </span>-t<span class="w"> </span><span class="s2">"</span><span class="k">$(</span>HOST<span class="k">)</span><span class="s2">:</span><span class="nv">$*</span><span class="s2"> in-octets"</span><span class="w"> </span>-r
|
|
</code></pre></div>
|
|
<p>Usage examples:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a><span class="c1"># Get loopback operational state</span>
|
|
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>~$<span class="w"> </span>make<span class="w"> </span>lo-operational
|
|
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a>
|
|
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a><span class="c1"># Add IP to loopback</span>
|
|
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a>~$<span class="w"> </span>make<span class="w"> </span>lo-add-ip
|
|
<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="c1"># Get eth0 statistics</span>
|
|
<a id="__codelineno-41-8" name="__codelineno-41-8" href="#__codelineno-41-8"></a>~$<span class="w"> </span>make<span class="w"> </span>eth0-stats
|
|
<a id="__codelineno-41-9" name="__codelineno-41-9" href="#__codelineno-41-9"></a>
|
|
<a id="__codelineno-41-10" name="__codelineno-41-10" href="#__codelineno-41-10"></a><span class="c1"># Monitor eth0 traffic in real-time (requires ttyplot)</span>
|
|
<a id="__codelineno-41-11" name="__codelineno-41-11" href="#__codelineno-41-11"></a>~$<span class="w"> </span>make<span class="w"> </span>eth0-monitor
|
|
</code></pre></div>
|
|
<p>You can override the host:</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>make<span class="w"> </span><span class="nv">HOST</span><span class="o">=</span><span class="m">192</span>.168.1.10<span class="w"> </span>lo-operational
|
|
</code></pre></div>
|
|
<h3 id="monitoring-interface-traffic">Monitoring Interface Traffic<a class="headerlink" href="#monitoring-interface-traffic" title="Permanent link">¶</a></h3>
|
|
<p>The <code>%-monitor</code> target demonstrates real-time monitoring by polling
|
|
interface statistics and piping to <code>ttyplot</code> for visualization. Install
|
|
<code>ttyplot</code> with:</p>
|
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a>~$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>ttyplot
|
|
</code></pre></div>
|
|
<p>Then monitor any interface:</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>make<span class="w"> </span>eth0-monitor
|
|
</code></pre></div>
|
|
<p>This creates a live ASCII graph of incoming octets on <code>eth0</code>.</p>
|
|
<h2 id="references">References<a class="headerlink" href="#references" title="Permanent link">¶</a></h2>
|
|
<ul>
|
|
<li><a href="https://datatracker.ietf.org/doc/html/rfc8040">RESTCONF Protocol (RFC 8040)</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/rfc8349">ietf-routing YANG module</a></li>
|
|
<li><a href="https://datatracker.ietf.org/doc/html/rfc7317">ietf-system YANG module</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-2025 The KernelKit Team
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["toc.follow", "navigation.path", "navigation.instant", "navigation.instant.progress", "navigation.tracking", "navigation.indexes", "search.highlight", "search.share", "content.code.copy", "content.code.annotate", "content.footnote.tooltips"], "search": "../assets/javascripts/workers/search.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.79ae519e.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> |