Files
luci/jsapi/LuCI.uci.html
2026-02-22 16:19:14 +00:00

3 lines
66 KiB
HTML

<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.png"><link type="text/css" rel="stylesheet" href="extra.css"><title>Class: uci</title><!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="fallback-dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">LuCI Documentation</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-JsonRpcHowTo.html">Using JSON RPC daemon</a></div><div class="sidebar-section-children"><a href="tutorial-Modules.html">Modules</a></div><div class="sidebar-section-children"><a href="tutorial-ThemesHowTo.html">Making Themes</a></div><div class="sidebar-section-children"><a href="tutorial-i18n.html">Internationalisation - i18n</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.module_cbi.html">cbi</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.html">LuCI</a></div><div class="sidebar-section-children"><a href="LuCI.baseclass.html">baseclass</a></div><div class="sidebar-section-children"><a href="LuCI.dom.html">dom</a></div><div class="sidebar-section-children"><a href="LuCI.form.html">form</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractSection.html">AbstractSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractValue.html">AbstractValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Button.html">Button</a></div><div class="sidebar-section-children"><a href="LuCI.form.DirectoryPicker.html">DirectoryPicker</a></div><div class="sidebar-section-children"><a href="LuCI.form.DummyValue.html">DummyValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.form.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.form.Flag.html">Flag</a></div><div class="sidebar-section-children"><a href="LuCI.form.GridSection.html">GridSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.HiddenValue.html">HiddenValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.JSONMap.html">JSONMap</a></div><div class="sidebar-section-children"><a href="LuCI.form.ListValue.html">ListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Map.html">Map</a></div><div class="sidebar-section-children"><a href="LuCI.form.MultiValue.html">MultiValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.NamedSection.html">NamedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.RangeSliderValue.html">RangeSliderValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.RichListValue.html">RichListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.SectionValue.html">SectionValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TableSection.html">TableSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.TextValue.html">TextValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TypedSection.html">TypedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.Value.html">Value</a></div><div class="sidebar-section-children"><a href="LuCI.fs.html">fs</a></div><div class="sidebar-section-children"><a href="LuCI.headers.html">headers</a></div><div class="sidebar-section-children"><a href="LuCI.network.html">network</a></div><div class="sidebar-section-children"><a href="LuCI.network.Device.html">Device</a></div><div class="sidebar-section-children"><a href="LuCI.network.Hosts.html">Hosts</a></div><div class="sidebar-section-children"><a href="LuCI.network.Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiDevice.html">WifiDevice</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiNetwork.html">WifiNetwork</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiVlan.html">WifiVlan</a></div><div class="sidebar-section-children"><a href="LuCI.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.request.html">request</a></div><div class="sidebar-section-children"><a href="LuCI.request.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.response.html">response</a></div><div class="sidebar-section-children"><a href="LuCI.rpc.html">rpc</a></div><div class="sidebar-section-children"><a href="LuCI.session.html">session</a></div><div class="sidebar-section-children"><a href="LuCI.uci.html">uci</a></div><div class="sidebar-section-children"><a href="LuCI.ui.html">ui</a></div><div class="sidebar-section-children"><a href="LuCI.ui.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Checkbox.html">Checkbox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.ComboButton.html">ComboButton</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Combobox.html">Combobox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Dropdown.html">Dropdown</a></div><div class="sidebar-section-children"><a href="LuCI.ui.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.ui.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Hiddenfield.html">Hiddenfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.RangeSlider.html">RangeSlider</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Select.html">Select</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textarea.html">Textarea</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textfield.html">Textfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.changes.html">changes</a></div><div class="sidebar-section-children"><a href="LuCI.ui.menu.html">menu</a></div><div class="sidebar-section-children"><a href="LuCI.ui.tabs.html">tabs</a></div><div class="sidebar-section-children"><a href="LuCI.validation.html">validation</a></div><div class="sidebar-section-children"><a href="LuCI.validation.Validator.html">Validator</a></div><div class="sidebar-section-children"><a href="LuCI.validation.ValidatorFactory.html">ValidatorFactory</a></div><div class="sidebar-section-children"><a href="LuCI.view.html">view</a></div><div class="sidebar-section-children"><a href="LuCI.xhr.html">xhr</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-String.html">String</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="github-home navbar-item"><a id="" href="https://github.com/openwrt/luci" target="">GitHub Project Page</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="uci-title" class="has-anchor"><span class="ancestors"><a href="LuCI.html">LuCI</a>.</span> uci</h1><div class="class-description"><p>The <code>LuCI.uci</code> class utilizes <a href="LuCI.rpc.html"><code>LuCI.rpc</code></a> to declare low level remote UCI <code>ubus</code> procedures and implements a local caching and data manipulation layer on top to allow for synchronous operations on UCI configuration data.</p></div></header><article><div class="container-overview"><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line19">line 19</a></li></ul></dd></div></dl></div><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="add"><span class="type-signature"></span>add<span class="signature">(conf, type, name<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Adds a new section of the given type to the given configuration, optionally named according to the given name.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to add the section to.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The type of the section to add.</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The name of the section to add. If the name is omitted, an anonymous section will be added instead.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line295">line 295</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the section ID of the newly added section which is equivalent to the given name for non-anonymous sections.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="apply"><span class="type-signature"></span>apply<span class="signature">(timeout<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;number>}</span></h3><div class="description"><p>Instructs the remote <code>ubus</code> UCI api to commit all saved changes with rollback protection and attempts to confirm the pending commit operation to cancel the rollback timer.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>timeout</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">10</td><td class="description last"><p>Override the confirmation timeout after which a rollback is triggered.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line991">line 991</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a promise resolving/rejecting with the <code>ubus</code> RPC status code.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;number></span></dd></dl></div><h3 class="name has-anchor" id="changes"><span class="type-signature"></span>changes<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;Object.&lt;string, Array.&lt;<a href="LuCI.uci.html#.ChangeRecord">LuCI.uci.ChangeRecord</a>>>>}</span></h3><div class="description"><p>Fetches uncommitted UCI changes from the remote <code>ubus</code> RPC api.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line1071">line 1071</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a promise resolving to an object containing the configuration names as keys and arrays of related change records as values.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;Object.&lt;string, Array.&lt;<a href="LuCI.uci.html#.ChangeRecord">LuCI.uci.ChangeRecord</a>>>></span></dd></dl></div><h3 class="name has-anchor" id="clone"><span class="type-signature"></span>clone<span class="signature">(conf, type, srcsid, put_next<span class="signature-attributes">opt</span>, name<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Clones an existing section of the given type to the given configuration, optionally named according to the given name.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration into which to clone the section.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The type of the section to clone.</p></td></tr><tr><td class="name"><code>srcsid</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The source section id to clone.</p></td></tr><tr><td class="name"><code>put_next</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Whether to put the cloned item next (true) or last (false: default).</p></td></tr><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The name of the new cloned section. If the name is omitted, an anonymous section will be created instead.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line335">line 335</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the section ID of the newly cloned section which is equivalent to the given name for non-anonymous sections.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="createSID"><span class="type-signature"></span>createSID<span class="signature">(conf)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Generates a new, unique section ID for the given configuration.</p><p>Note that the generated ID is temporary, it will get replaced by an identifier in the form <code>cfgXXXXXX</code> once the configuration is saved by the remote <code>ubus</code> UCI api.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration to generate the new section ID for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line109">line 109</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>A newly generated, unique section ID in the form <code>newXXXXXX</code> where <code>X</code> denotes a hexadecimal digit.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="get"><span class="type-signature"></span>get<span class="signature">(conf, sid, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {null|string|Array.&lt;string>|<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>}</span></h3><div class="description"><p>Gets the value of the given option within the specified section of the given configuration or the entire section object if the option name is omitted.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to read the value from.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name or ID of the section to read.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The option name to read the value from. If the option name is omitted or <code>null</code>, the entire section is returned instead.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line514">line 514</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns a string containing the option value in case of a plain UCI option.</li><li>Returns an array of strings containing the option values in case of <code>option</code> pointing to an UCI list.</li><li>Returns a <a href="LuCI.uci.html#.SectionObject"><code>section object</code></a> if the <code>option</code> argument has been omitted or is <code>null</code>.</li><li>Returns <code>null</code> if the config, section or option has not been found or if the corresponding configuration is not loaded.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">null</span> |<wbr> <span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span> |<wbr> <span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.<wbr>uci.<wbr>SectionObject</a></span></dd></dl></div><h3 class="name has-anchor" id="get_bool"><span class="type-signature"></span>get_bool<span class="signature">(conf, type, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>A special case of <code>get</code> that always returns either <code>true</code> or <code>false</code>.</p><p>Many configuration files contain boolean settings, such as <code>enabled</code> or <code>advanced_mode</code>, where there is no consistent definition for the values. This function allows users to enter any of the values <code>&quot;yes&quot;</code>, <code>&quot;on&quot;</code>, <code>&quot;true&quot;</code>, <code>&quot;enabled&quot;</code> or <code>1</code> in their config files and we return the expected boolean result.</p><p>Character case is not significant, so for example, any of &quot;YES&quot;, &quot;Yes&quot; or &quot;yes&quot; will be interpreted as a <code>true</code> value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to read.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The section type to read.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The option name from which to read the value. If the option name is omitted or <code>null</code>, the value <code>false</code> is returned.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line748">line 748</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns boolean <code>true</code> if the configuration value is defined and looks like a true value, otherwise returns <code>false</code>.</li></ul><p>See the <a href="https://openwrt.org/docs/guide-developer/config-scripting#reading_booleans">Developers Guide</a> for more.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="get_first"><span class="type-signature"></span>get_first<span class="signature">(conf, type<span class="signature-attributes">opt</span>, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {null|string|Array.&lt;string>|<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>}</span></h3><div class="description"><p>Gets the value of the given option or the entire section object of the first found section of the specified type or the first found section of the entire configuration if no type is specified.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to read the value from.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first section of the entire config is read, otherwise the first section matching the given type.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The option name to read the value from. If the option name is omitted or <code>null</code>, the entire section is returned instead.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line706">line 706</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns a string containing the option value in case of a plain UCI option.</li><li>Returns an array of strings containing the option values in case of <code>option</code> pointing to an UCI list.</li><li>Returns a <a href="LuCI.uci.html#.SectionObject"><code>section object</code></a> if the <code>option</code> argument has been omitted or is <code>null</code>.</li><li>Returns <code>null</code> if the config, section or option has not been found or if the corresponding configuration is not loaded.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">null</span> |<wbr> <span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span> |<wbr> <span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.<wbr>uci.<wbr>SectionObject</a></span></dd></dl></div><h3 class="name has-anchor" id="load"><span class="type-signature"></span>load<span class="signature">(packages)</span><span class="type-signature"> &rarr; {Promise.&lt;Array.&lt;string>>}</span></h3><div class="description"><p>Loads the given UCI configurations from the remote <code>ubus</code> api.</p><p>Loaded configurations are cached and only loaded once. Subsequent load operations of the same configurations will return the cached data.</p><p>To force reloading a configuration, it has to be unloaded with <a href="LuCI.uci.html#unload"><code>uci.unload()</code></a> first.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>packages</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span></td><td class="description last"><p>The name of the configuration or an array of configuration names to load.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line231">line 231</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a promise resolving to the names of the configurations that have been successfully loaded.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;Array.&lt;string>></span></dd></dl></div><h3 class="name has-anchor" id="move"><span class="type-signature"></span>move<span class="signature">(conf, sid1, sid2<span class="signature-attributes">opt</span>, after<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Move the first specified section within the given configuration before or after the second specified section.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The configuration to move the section within.</p></td></tr><tr><td class="name"><code>sid1</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The ID of the section to move within the configuration.</p></td></tr><tr><td class="name"><code>sid2</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>The ID of the target section for the move operation. If the <code>after</code> argument is <code>false</code> or not specified, the section named by <code>sid1</code> will be moved before this target section, if the <code>after</code> argument is <code>true</code>, the <code>sid1</code> section will be moved after this section.</p><p>When the <code>sid2</code> argument is <code>null</code>, the section specified by <code>sid1</code> is moved to the end of the configuration.</p></td></tr><tr><td class="name"><code>after</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>When <code>true</code>, the section <code>sid1</code> is moved after the section <code>sid2</code>, when <code>false</code>, the section <code>sid1</code> is moved before <code>sid2</code>.</p><p>If <code>sid2</code> is null, then this parameter has no effect and the section <code>sid1</code> is moved to the end of the configuration instead.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line846">line 846</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns <code>true</code> when the section was successfully moved, or <code>false</code> when either the section specified by <code>sid1</code> or by <code>sid2</code> is not found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="remove"><span class="type-signature"></span>remove<span class="signature">(conf, sid)</span></h3><div class="description"><p>Removes the section with the given ID from the given configuration.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the configuration to remove the section from.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The ID of the section to remove.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line367">line 367</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="resolveSID"><span class="type-signature"></span>resolveSID<span class="signature">(conf, sid)</span><span class="type-signature"> &rarr; {string|null}</span></h3><div class="description"><p>Resolves a given section ID in extended notation to the internal section ID value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration to resolve the section ID for.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The section ID to resolve. If the ID is in the form <code>@typename[#]</code>, it will get resolved to an internal anonymous ID in the forms <code>cfgXXXXXX</code>/<code>newXXXXXX</code> or to the name of a section in case it points to a named section. When the given ID is not in extended notation, it will be returned as-is.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line140">line 140</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resolved section ID or the original given ID if it was not in extended notation. Returns <code>null</code> when an extended ID could not be resolved to existing section ID.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="save"><span class="type-signature"></span>save<span class="signature">()</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h3><div class="description"><p>Submits all local configuration changes to the remove <code>ubus</code> api, adds, removes and reorders remote sections as needed and reloads all loaded configurations to resynchronize the local state with the remote configuration values.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line902">line 902</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a promise resolving to an array of configuration names which have been reloaded by the save operation.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;string></span></dd></dl></div><h3 class="name has-anchor" id="sections"><span class="type-signature"></span>sections<span class="signature">(conf, type<span class="signature-attributes">opt</span>, cb<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Array.&lt;<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>>}</span></h3><div class="description"><p>Enumerates the sections of the given configuration, optionally filtered by type.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to enumerate the sections for.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Enumerate only sections of the given type. If omitted, enumerate all sections.</p></td></tr><tr><td class="name"><code>cb</code></td><td class="type"><span class="param-type"><a href="LuCI.uci.html#.sections">LuCI.<wbr>uci.<wbr>sections</a></span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>An optional callback to invoke for each enumerated section.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line455">line 455</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a sorted array of the section objects within the given configuration, filtered by type, if a type has been specified.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;<a href="LuCI.uci.html#.SectionObject">LuCI.uci.SectionObject</a>></span></dd></dl></div><h3 class="name has-anchor" id="set"><span class="type-signature"></span>set<span class="signature">(conf, sid, opt, val)</span></h3><div class="description"><p>Sets the value of the given option within the specified section of the given configuration.</p><p>If either config, section or option is null, or if <code>option</code> begins with a dot, the function will do nothing.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the configuration to set the option value in.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name or ID of the section to set the option value in.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The option name to set the value for.</p></td></tr><tr><td class="name"><code>val</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span></td><td class="description last"><p>The option value to set. If the value is <code>null</code> or an empty string, the option will be removed, otherwise it will be set or overwritten with the given value.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line599">line 599</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="set_first"><span class="type-signature"></span>set_first<span class="signature">(conf, type<span class="signature-attributes">opt</span>, opt, val)</span><span class="type-signature"> &rarr; {null}</span></h3><div class="description"><p>Sets the value of the given option within the first found section of the given configuration matching the specified type or within the first section of the entire config when no type has is specified.</p><p>If either config, type or option is null, or if <code>option</code> begins with a dot, the function will do nothing.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to set the option value in.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first section of the entire config is written to, otherwise the first section matching the given type is used.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The option name to set the value for.</p></td></tr><tr><td class="name"><code>val</code></td><td class="type"><span class="param-type">null</span> |<wbr> <span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span></td><td class="attributes"></td><td class="description last"><p>The option value to set. If the value is <code>null</code> or an empty string, the option will be removed, otherwise it will be set or overwritten with the given value.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line780">line 780</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="unload"><span class="type-signature"></span>unload<span class="signature">(packages)</span></h3><div class="description"><p>Unloads the given UCI configurations from the local cache.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>packages</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span></td><td class="description last"><p>The name of the configuration or an array of configuration names to unload.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line263">line 263</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="unset"><span class="type-signature"></span>unset<span class="signature">(conf, sid, opt)</span><span class="type-signature"> &rarr; {null}</span></h3><div class="description"><p>Remove the given option within the specified section of the given configuration.</p><p>This function is a convenience wrapper around <code>uci.set(config, section, option, null)</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the configuration to remove the option from.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name or ID of the section to remove the option from.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the option to remove.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line675">line 675</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="unset_first"><span class="type-signature"></span>unset_first<span class="signature">(conf, type<span class="signature-attributes">opt</span>, opt)</span><span class="type-signature"> &rarr; {null}</span></h3><div class="description"><p>Removes the given option within the first found section of the given configuration matching the specified type or within the first section of the entire config when no type has is specified.</p><p>This function is a convenience wrapper around <code>uci.set_first(config, type, option, null)</code>.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>conf</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name of the configuration to set the option value in.</p></td></tr><tr><td class="name"><code>type</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The type of the first section to find. If it is <code>null</code>, the first section of the entire config is written to, otherwise the first section matching the given type is used.</p></td></tr><tr><td class="name"><code>opt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The option name to set the value for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line811">line 811</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">null</span></dd></dl></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id=".ChangeRecord">ChangeRecord</h3><div class="description"><p>An UCI change record is a plain array containing the change operation name as first element, the affected section ID as second argument and an optional third and fourth argument whose meanings depend on the operation.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>operation</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The operation name - may be one of <code>add</code>, <code>set</code>, <code>remove</code>, <code>order</code>, <code>list-add</code>, <code>list-del</code> or <code>rename</code>.</p></td></tr><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The section ID targeted by the operation.</p></td></tr><tr><td class="name"><code>parameter</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The meaning of the third element depends on the operation.</p><ul><li>For <code>add</code> it is type of the section that has been added</li><li>For <code>set</code> it either is the option name if a fourth element exists, or the type of a named section which has been added when the change entry only contains three elements.</li><li>For <code>remove</code> it contains the name of the option that has been removed.</li><li>For <code>order</code> it specifies the new sort index of the section.</li><li>For <code>list-add</code> it contains the name of the list option a new value has been added to.</li><li>For <code>list-del</code> it contains the name of the list option a value has been removed from.</li><li>For <code>rename</code> it contains the name of the option that has been renamed if a fourth element exists, else it contains the new name a section has been renamed to if the change entry only contains three elements.</li></ul></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The meaning of the fourth element depends on the operation.</p><ul><li>For <code>set</code> it is the value an option has been set to.</li><li>For <code>list-add</code> it is the new value that has been added to a list option.</li><li>For <code>rename</code> it is the new name of an option that has been renamed.</li></ul></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line1020">line 1020</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".SectionObject">SectionObject</h3><div class="description"><p>A section object represents the options and their corresponding values enclosed within a configuration section, as well as some additional meta data such as sort indexes and internal ID.</p><p>Any internal metadata fields are prefixed with a dot which isn't an allowed character for normal option names.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Object.&lt;string, (boolean|number|string|Array.&lt;string>)></span></li></ul></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>".anonymous"</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last"><p>The <code>.anonymous</code> property specifies whether the configuration is anonymous (<code>true</code>) or named (<code>false</code>).</p></td></tr><tr><td class="name"><code>".index"</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The <code>.index</code> property specifies the sort order of the section.</p></td></tr><tr><td class="name"><code>".name"</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The <code>.name</code> property holds the name of the section object. It may be either an anonymous ID in the form <code>cfgXXXXXX</code> or <code>newXXXXXX</code> with <code>X</code> being a hexadecimal digit or a string holding the name of the section.</p></td></tr><tr><td class="name"><code>".type"</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The <code>.type</code> property contains the type of the corresponding uci section.</p></td></tr><tr><td class="name"><code>*</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.&lt;string></span></td><td class="description last"><p>A section object may contain an arbitrary number of further properties representing the uci option enclosed in the section.</p><p>All option property names will be in the form <code>[A-Za-z0-9_]+</code> and either contain a string value or an array of strings, in case the underlying option is an UCI list.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line386">line 386</a></li></ul></dd></div></dl><h3 class="name has-anchor" id=".sections"><span class="type-signature"></span>sections<span class="signature">(section, sid)</span></h3><div class="description"><p>The sections callback is invoked for each section found within the given configuration and receives the section object and its associated name as arguments.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section</code></td><td class="type"><span class="param-type"><a href="LuCI.uci.html#.SectionObject">LuCI.<wbr>uci.<wbr>SectionObject</a></span></td><td class="description last"><p>The section object.</p></td></tr><tr><td class="name"><code>sid</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name or ID of the section.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="uci.js.html">uci.js</a>, <a href="uci.js.html#line423">line 423</a></li></ul></dd></div></dl></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">LuCI Documentation</a><div class="mobile-nav-links"><div class="github-home navbar-item"><a id="" href="https://github.com/openwrt/luci" target="">GitHub Project Page</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-JsonRpcHowTo.html">Using JSON RPC daemon</a></div><div class="sidebar-section-children"><a href="tutorial-Modules.html">Modules</a></div><div class="sidebar-section-children"><a href="tutorial-ThemesHowTo.html">Making Themes</a></div><div class="sidebar-section-children"><a href="tutorial-i18n.html">Internationalisation - i18n</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.module_cbi.html">cbi</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.html">LuCI</a></div><div class="sidebar-section-children"><a href="LuCI.baseclass.html">baseclass</a></div><div class="sidebar-section-children"><a href="LuCI.dom.html">dom</a></div><div class="sidebar-section-children"><a href="LuCI.form.html">form</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractSection.html">AbstractSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractValue.html">AbstractValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Button.html">Button</a></div><div class="sidebar-section-children"><a href="LuCI.form.DirectoryPicker.html">DirectoryPicker</a></div><div class="sidebar-section-children"><a href="LuCI.form.DummyValue.html">DummyValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.form.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.form.Flag.html">Flag</a></div><div class="sidebar-section-children"><a href="LuCI.form.GridSection.html">GridSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.HiddenValue.html">HiddenValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.JSONMap.html">JSONMap</a></div><div class="sidebar-section-children"><a href="LuCI.form.ListValue.html">ListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Map.html">Map</a></div><div class="sidebar-section-children"><a href="LuCI.form.MultiValue.html">MultiValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.NamedSection.html">NamedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.RangeSliderValue.html">RangeSliderValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.RichListValue.html">RichListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.SectionValue.html">SectionValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TableSection.html">TableSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.TextValue.html">TextValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TypedSection.html">TypedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.Value.html">Value</a></div><div class="sidebar-section-children"><a href="LuCI.fs.html">fs</a></div><div class="sidebar-section-children"><a href="LuCI.headers.html">headers</a></div><div class="sidebar-section-children"><a href="LuCI.network.html">network</a></div><div class="sidebar-section-children"><a href="LuCI.network.Device.html">Device</a></div><div class="sidebar-section-children"><a href="LuCI.network.Hosts.html">Hosts</a></div><div class="sidebar-section-children"><a href="LuCI.network.Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiDevice.html">WifiDevice</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiNetwork.html">WifiNetwork</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiVlan.html">WifiVlan</a></div><div class="sidebar-section-children"><a href="LuCI.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.request.html">request</a></div><div class="sidebar-section-children"><a href="LuCI.request.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.response.html">response</a></div><div class="sidebar-section-children"><a href="LuCI.rpc.html">rpc</a></div><div class="sidebar-section-children"><a href="LuCI.session.html">session</a></div><div class="sidebar-section-children"><a href="LuCI.uci.html">uci</a></div><div class="sidebar-section-children"><a href="LuCI.ui.html">ui</a></div><div class="sidebar-section-children"><a href="LuCI.ui.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Checkbox.html">Checkbox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.ComboButton.html">ComboButton</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Combobox.html">Combobox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Dropdown.html">Dropdown</a></div><div class="sidebar-section-children"><a href="LuCI.ui.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.ui.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Hiddenfield.html">Hiddenfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.RangeSlider.html">RangeSlider</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Select.html">Select</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textarea.html">Textarea</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textfield.html">Textfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.changes.html">changes</a></div><div class="sidebar-section-children"><a href="LuCI.ui.menu.html">menu</a></div><div class="sidebar-section-children"><a href="LuCI.ui.tabs.html">tabs</a></div><div class="sidebar-section-children"><a href="LuCI.validation.html">validation</a></div><div class="sidebar-section-children"><a href="LuCI.validation.Validator.html">Validator</a></div><div class="sidebar-section-children"><a href="LuCI.validation.ValidatorFactory.html">ValidatorFactory</a></div><div class="sidebar-section-children"><a href="LuCI.view.html">view</a></div><div class="sidebar-section-children"><a href="LuCI.xhr.html">xhr</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-String.html">String</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>