Module eco.uci

UCI (Unified Configuration Interface) bindings.

This module provides bindings to OpenWrt's libuci.

The main entry point is cursor, which creates a cursor object used to load, query and modify UCI configuration.

Functions

cursor ([confdir[, savedir]]) Create a UCI cursor.

Class cursor

cursor:close () Close the cursor and free underlying libuci context.
cursor:unload (package) Unload a previously loaded package.
cursor:load (package) Load a UCI package.
cursor:get (package[, section[, option]]) Get a UCI value.
cursor:get_all (package[, section[, option]]) Get a UCI value, returning full section tables.
cursor:add (package, type) Add a new section.
cursor:set (package[, section[, option[, value]]]) Set a package/section/option.
cursor:rename (package[, section[, option[, value]]]) Rename a section or option.
cursor:save (package) Save a package.
cursor:delete (package[, section[, option]]) Delete a section or option.
cursor:commit (package) Commit a package (write changes).
cursor:revert (package[, section[, option]]) Revert changes.
cursor:reorder (package[, section[, index]]) Reorder a section by index.
cursor:foreach (package[, type], cb) Iterate sections and call a callback.
cursor:each (package[, type]) Get an iterator over sections.
cursor:get_confdir () Get current configuration directory.
cursor:set_confdir (dir) Set configuration directory.
cursor:get_savedir () Get current save directory.
cursor:set_savedir (dir) Set save directory.
cursor:list_configs () List available config files.


Functions

cursor ([confdir[, savedir]])

Create a UCI cursor.

Call forms:

  • uci.cursor() (use default dirs)
  • uci.cursor(confdir)
  • uci.cursor(confdir, savedir)

Parameters:

  • confdir string Configuration directory. (optional)
  • savedir string Save directory. (optional)

Returns:

    cursor c

Usage:

    local uci = require 'eco.uci'
    local c = uci.cursor('/etc/config')
    local ip = c:get('network', 'lan', 'ipaddr')

Class cursor

UCI cursor returned by uci.cursor.

The cursor is a userdata; it supports explicit cursor:close and is also finalized on GC. In Lua 5.4 it additionally supports to-be-closed variables via the __close metamethod.

cursor:close ()
Close the cursor and free underlying libuci context.
cursor:unload (package)
Unload a previously loaded package.

Parameters:

  • package string Package name.

Returns:

    boolean ok true on success, false if not loaded.

Or

  1. boolean false
  2. string err
cursor:load (package)
Load a UCI package.

This first unloads any previously loaded package with the same name.

Parameters:

  • package string Package name (e.g. 'network').

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:get (package[, section[, option]])
Get a UCI value.

Accepted call forms:

  • c:get('p.s.o')
  • c:get('p', 's') (returns section type, name)
  • c:get('p', 's', 'o')

Return values:

  • option: string value, or a list table for list options
  • section: type, name (two strings)
  • package: a table of sections

On error: returns nil, err.

Parameters:

  • package string Package name or combined path.
  • section string Section name (or anonymous ref, e.g. '@type[0]'). (optional)
  • option string Option name. (optional)

Returns:

    any value

Or

  1. nil
  2. string err
cursor:get_all (package[, section[, option]])

Get a UCI value, returning full section tables.

Similar to cursor:get, but when pointing to a section it returns a table containing:

  • ['.anonymous'] boolean
  • ['.type'] string
  • ['.name'] string
  • ['.index'] integer (when available)
  • plus all options under their option names

Parameters:

  • package string Package name or combined path.
  • section string Section name (or anonymous ref, e.g. '@type[0]'). (optional)
  • option string Option name. (optional)

Returns:

    any value

Or

  1. nil
  2. string err
cursor:add (package, type)
Add a new section.

Parameters:

Returns:

    string sid Section identifier (name).

Or

  1. nil
  2. string err
cursor:set (package[, section[, option[, value]]])

Set a package/section/option.

Accepted call forms:

  • c:set('p.s.o=v') or c:set('p.s=v')
  • c:set('p', 's', 'o', 'v')
  • c:set('p', 's', 'v') (sets section type?)
  • c:set('p', 's', 'o', {'v1', 'v2'}) (list option)

Parameters:

  • package string Package name or combined path.
  • section string Section name. (optional)
  • option string Option name. (optional)
  • value any Value (string) or list table. (optional)

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:rename (package[, section[, option[, value]]])
Rename a section or option.

Accepted call forms match cursor:set (without list values).

Parameters:

  • package string Package name or combined path.
  • section string Section name. (optional)
  • option string Option name. (optional)
  • value string New name. (optional)

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:save (package)
Save a package.

Parameters:

  • package string Package name.

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:delete (package[, section[, option]])

Delete a section or option.

Accepted call forms:

  • c:delete('p.s.o') / c:delete('p.s')
  • c:delete('p', 's') / c:delete('p', 's', 'o')

Parameters:

  • package string Package name or combined path.
  • section string Section name. (optional)
  • option string Option name. (optional)

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:commit (package)
Commit a package (write changes).

Parameters:

  • package string Package name.

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:revert (package[, section[, option]])
Revert changes.

This can revert a whole package or a specific section/option.

Parameters:

  • package string Package name or combined path.
  • section string Section name (or anonymous ref). (optional)
  • option string Option name. (optional)

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:reorder (package[, section[, index]])
Reorder a section by index.

Parameters:

  • package string Package name or combined path.
  • section string Section name. (optional)
  • index integer New position (0-based). (optional)

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:foreach (package[, type], cb)
Iterate sections and call a callback.

The callback is invoked as cb(section_table). Return false from the callback to stop iteration early.

Parameters:

  • package string Package name.
  • type string Filter by section type (or nil for all types). (optional)
  • cb function Callback.

Returns:

    boolean ok true if iteration ran, false otherwise.

Usage:

    local c = uci.cursor()
    
    c:foeach('network', function(s)
        print(s['.type'], s['.name'])
    end)
    
    c:foeach('network', 'interface', function(s)
        print(s['.name'])
    end)
cursor:each (package[, type])
Get an iterator over sections.

Parameters:

  • package string Package name.
  • type string Filter by section type. (optional)

Returns:

    function iter Iterator function yielding section tables.

Or

    nil If package does not exist.

Usage:

    local c = uci.cursor()
    for s in c:each('network') do
        print(s['.type'], s['.name'])
    end
cursor:get_confdir ()
Get current configuration directory.

Returns:

    string dir
cursor:set_confdir (dir)
Set configuration directory.

Parameters:

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:get_savedir ()
Get current save directory.

Returns:

    string dir
cursor:set_savedir (dir)
Set save directory.

Parameters:

Returns:

    boolean ok

Or

  1. boolean false
  2. string err
cursor:list_configs ()
List available config files.

Returns:

    table configs Array of config file names.

Or

  1. nil On failure.
  2. string err Error message.
generated by LDoc 1.5.0 Last updated 2026-04-09 14:48:22