# Clixon Changelog * [5.8.0](#580) Planned: July 2022 * [5.7.0](#570) 17 May 2022 * [5.6.0](#560) 8 March 2022 * [5.5.0](#550) 20 January 2022 * [5.4.0](#540) 30 November 2021 * [5.3.0](#530) 27 September 2021 * [5.2.0](#520) 1 July 2021 * [5.1.0](#510) 15 April 2021 * [5.0.0](#500) 27 February 2021 * [5.0.1](#501) 10 March 2021 * [4.9.0](#490) 18 December 2020 * [4.8.0](#480) 18 October 2020 * [4.7.0](#470) 14 September 2020 * [4.6.0](#460) 14 August 2020 * [4.5.0](#450) 12 May 2020 * [4.4.0](#440) 5 April 2020 * [4.3.0](#430) 1 January 2020 * [4.3.3](#433) * [4.3.2](#432) * [4.3.1](#431) * [4.2.0](#420) 27 October 2019 * [4.1.0](#410) 18 August 2019 * [4.0.0](#400) 13 July 2019 * [4.0.1](#401) * [3.9.0](#390) 21 Feb 2019 * [3.8.0](#380) 6 Nov 2018 * [3.7.0](#370) 22 July 2018 * [3.6.0](#360) 30 April 2018 * [3.6.1](#361) * [3.5.0](#350) 12 February 2018 * [3.4.0](#340) 1 January 2018 * [3.3.3](#333) 25 November 2017 * [3.3.2](#332) Aug 27 2017 * [3.3.1](#331) June 7 2017 ## 5.8.0 Planned: July 2022 ### New features * Clixon SNMP frontend * Support of SNMP for retreiving and setting values via netsnmp using a MIB-YANG mapping defined in RFC6643. * For more details, see [SNMP section of user manual](https://clixon-docs.readthedocs.io/en/latest/snmp.html) * Thanks Siklu for sponshoring * YANG Action (RFC 7950 Section 7.15) * Register action callback with `action_callback_register()`, see main example * Remains: check list keys, validate output * See [Support for "action" statement](https://github.com/clicon/clixon/issues/101) * TEXT syntax parseable for loading files * Previously only supported output * TEXT output format changed (see API changes) * [Documentation](https://clixon-docs.readthedocs.io/en/latest/datastore.html#other-formats) * See [Support performant load_config_file(...) for TEXT format](https://github.com/clicon/clixon/issues/324) ### API changes on existing protocol/config features Users may have to change how they access the system * Augmented XML uses default namespace * Instead of using prefixes for augmented XML, assign the default namespace * This does not change the semantics, but changes the way XML rpefixes are used * Example augmented ipv4 into interface: * Previously: `...` * Now: `...` * TEXT file format changed * With new parsing of TEXT format, the output is changed * Namespace/modulename added to top-level * Leaf-list support: `a [ x y z ]` * List key support: `a x y { ... }` * See compile-time option `TEXT_LIST_KEYS` ### C/CLI-API changes on existing features Developers may need to change their code * Changed C-API for xml translation/print the internal `cxobj` tree data structure to other formats. * Functions are merged, ie removed and replaced with more generic functions * Added `skiptop` parameter, if set only apply to children of a node, skip top node * default is 0 * The new API is as follows, with how to change old functions to new: * `clixon_xml2file()` - Print internal tree as XML to file * `clixon_xml2cbuf()` - Print internal tree as XML to buffer * `clixon_json2file()` - Print internal tree as JSON to file * `clixon_json2cbuf()` - Print internal tree as JSON to buffer * `clixon_cli2file()` - Print internal tree as CLI format to file * `clixon_txt2file()` - Print internal tree as text format to file * As developer, you need to replace the old functions to the new API as follows: * `clicon_xml2file(f, x, l, p)` -> `clixon_xml2file(f, x, l, p, NULL, 0)` * `clicon_xml2file_cb(f, x, l, p, fn)` -> `clixon_xml2file(f, x, l, p, fn, 0)` * `cli_xml2file(x, l, p, fn)` -> `clixon_xml2file(stdout, x, l, p, fn, 0)` * `clicon_xml2cbuf(c, x, l, p, d)` -> `clixon_xml2cbuf(c, x, l, p, d, 0)` * `clicon_xml2str(x)` -> Rewrite using cbufs and `clixon_xml2cbuf()` * `xml2json(f, x, p)` -> `clixon_json2file(f, x, p, NULL, 0)` * `xml2json_cb(f, x, p, fn)` -> `clixon_json2file(f, x, p, fn, 0)` * `xml2json_cbuf(c, x, p)` -> `clixon_json2cbuf(c, x, p, 0)` * `xml2cli(h, f, x, p, fn)` -> `clixon_cli2file(h, f, x, p, fn, 0)` * `cli_xml2txt(x, fn, l)` -> `clixon_txt2file(stdout, x, l, NULL, 0)` * `xml2txt(f, x, l)` -> `clixon_txt2file(f, x, l, NULL, 0)` * `xml2txt_cb(f, x, fn)` -> `clixon_txt2file(f, x, 0, NULL, 0)` ### Minor features * Full RFC 7950 if-feature-expr support (Section 7.20.2) * Previous implementation did not handle nested if-feature expressions * As part of fixing: [YANG if-feature does not support nested boolean expression](https://github.com/clicon/clixon/issues/341) * Added new yacc/lex parser for if-feature-expr string * [Feature Request: Log SSL events](https://github.com/clicon/clixon/issues/331) * Added syslog NOTICE on failed user certs ### Corrected Bugs * Fixed: [YANG if-feature does not support nested boolean expression](https://github.com/clicon/clixon/issues/341) * Fixed: [RPC edit-config payloads are not fully validated](https://github.com/clicon/clixon/issues/337) ## 5.7.0 17 May 2022 The Clixon 5.7 release introduces (long overdue) NETCONF chunked framing as defined in RFC 6242. It also introduces a limited http data service and lots of bugfixes. * Implementation of "chunked framing" according to RFC6242 for Netconf 1.1. * First hello is 1.0 EOM framing, then successing rpc is chunked framing * See * [Netconf framing](https://github.com/clicon/clixon/issues/50), and * [Clixon does not switch to chunked framing after NETCONF 1.1 is negotiated](https://github.com/clicon/clixon/issues/314) * Extended the Restconf implementation with a limited http-data static service * Added two new config options to clixon-config.yang: * `CLICON_HTTP_DATA_PATH` * `CLICON_HTTP_DATA_ROOT` * Added feature http-data to restconf-config.yang and the following option that needs to be true * `enable-http-data` * Added `HTTP_DATA_INTERNAL_REDIRECT` compile-time option for internal redirects to `index.html` * For more info, see [user manual documentation](https://clixon-docs.readthedocs.io/en/latest/restconf.html#http-data) ### API changes on existing protocol/config features Users may have to change how they access the system * CLI * `clixon_cli` reconnects to backend if backend restarts with a warning * Note that edits to the candidate database or locks will be lost * To force the CLI to exit if backend restarts, undef `PROTO_RESTART_RECONNECT` * This is an effect of the fix of [Broken pipe error seen in client (cli) when backend restarts and CLICON_SOCK is recreated](https://github.com/clicon/clixon/issues/312), the CLI behavior on backend restart is changed. * Expansion of YANG leafref type default behavior has changed * In the autocli and handcrafted CLI:s using `expand_dbvar()` the CLI expansion followed the leafrefs to the sources, ie the origin of the leafrefs * Instead leafref expansion now expands according to existing leafrefs by default * Example: * Assume leafref with leafref pointing to source if values: * `abc b` * Existing behavior: expand to: `a, b, c` * New default behavior: expand to: `b` * To keep existing behavior, set `true` * Restconf * Added 404 return without body if neither restconf, data or streams prefix match * Netconf: * Usage of chunked framing * To keep existing end-of-message encoding, set `CLICON_NETCONF_BASE_CAPABILITY` to `0` * Added `clixon_netconf` command-line option `-0` and changed `-H` to `-1` * `-0` means dont send hello, but fix netconf base version to 0 and use EOM framing * `-1` means dont send hello, but fix netconf base version to 1 and use chunked framing * Error message `data-not-unique` changed to return schema nodes instead of XML for RFC7950 compliance * YANG * Instead of removing YANG which is disabled by `if-feature`, replace it with an yang `anydata` node. * See [Adding feature to top level container doesn't work](https://github.com/clicon/clixon/issues/322) * This means XML specified by such YANG is ignored, and it is not an error to access it * Note the similarity with `CLICON_YANG_UNKNOWN_ANYDATA` * New `clixon-config@2022-03-21.yang` revision * Added option: * `CLICON_RESTCONF_API_ROOT` * `CLICON_NETCONF_BASE_CAPABILITY` * `CLICON_HTTP_DATA_PATH` * `CLICON_HTTP_DATA_ROOT` * `CLICON_CLI_EXPAND_LEAFREF` * New `clixon-restconf@2022-03-21.yang` revision * Added option: * `enable-http-data` * Added feature: * `http-data` ### C/CLI-API changes on existing features Developers may need to change their code * Added `nsc` parameter to `xml2xpath()` and ensured the xpath uses prefixes. * Old code: add `NULL` as second parameter * Added `eof` parameter to `clicon_rpc()` and `clicon_rpc1()` and error handling modified ### Minor features * Command-line option: Extended `-l` of all clixon commands with `-l n` which directs logging to `/dev/null` * New: CLI load command for CLI syntax files (not only XML and JSON) * See [provide support for load config of cli format along with json and xml format as save config is supported for all 3 formats](https://github.com/clicon/clixon/issues/320) * New: Do not load clixon-restconf YANG file by default * See [prevent clixon-restconf@2021-05-20.yang module from loading](https://github.com/clicon/clixon/issues/318) * Instead of always loading it, load it to datastore YANGs only if `CLICON_BACKEND_RESTCONF_PROCESS` is `true` * YANG unique: added single descendant node ids as special case * This means that two variants are supported: * unique "a b c", ie multiple direct children * unique "a/b/c", ie single descendants * RFC 7950 Sec 7.8.3 is somewhat unclear * The combination is not supported ### Corrected Bugs * XPath parser: fixed some lexical issues * Some complexities in Section 3.7 Lexical Structure of XPath 1.0 spec as follows * There used to be some cornercases where function-names could not be used as nodes * For example, `node()` is a nodetest, so `/node/` caused an error. * In the grammar these include: axisnames, nodetests, functionnames * The NCNames vs functionnames is now implemented according to the lexical structure section * Fixed: [Keywords containing '-' hyphen are missing from the auto-completion list](https://github.com/clicon/clixon/issues/330) * Fixed by disabling `cligen_preference_mode`. This may have other side effects. * Fixed: [Returning a string while Querying leaf-list for single entry](https://github.com/clicon/clixon/issues/326) * Fixed: A long TLS+HTTP/2 request such as by a browser causing block of other requests. * Fixed: [Error message seen twice in some cases](https://github.com/clicon/clixon/issues/325) * Fixed: [if choice is declared with multiple elements or leaf-list with in a case scope , addition or updation is not happening as expected](https://github.com/clicon/clixon/issues/327) * This includes several choice/case adjustments to follow RFC 7950 Sec 7.9 better * Fixed: HTTP/1 parse error for '/' path * Fixed: YANG if-feature in config file of disables feature did not work, was always on * This does not apply to the datastore, only the config file itself. * Fixed: YANG key list check bad performance * List key check did unique "xpath" lookup instead of direct child traverse * Fixed: YANG unique single schema-nodeid required "canonical" namespace * E.g., `a/b` did not work even if there was default namespace in XML * Disabled xpath optimization for hierarchical list * When `XPATH_LIST_OPTIMIZE` is set, patterns like `y[k='3']` is optimized * But hierarchical lists should not be, ie when `a/y[k='3']` and `a` is a list * Fixed: Removed warning at startup: `No YANG spec for module-set` * Fixed: HTTP/1 multiple write requests in single session appended data between writes, eg PUT+PUT. * Fixed: [Broken pipe error seen in client (cli) when backend restarts and CLICON_SOCK is recreated](https://github.com/clicon/clixon/issues/312) * Fixed: [Xpath API do not support filter data by wildcard](https://github.com/clicon/clixon/issues/313) * Fixed: SEGV in cli show yang ## 5.6.0 8 March 2022 Clixon 5.6 removes the dependency of libevhtp and libevent2 for native HTTP/1 RESTCONF, module-state has been upgraded to RFC8525 and a lot of bugs have been fixed, thanks to the community for all feedback. ### New features * Yang library upgraded from RFC7895 to [RFC 8525](https://datatracker.ietf.org/doc/html/rfc8525) * See [API changes](#API-changes-on-existing-protocol/config-features) for more info * RESTCONF Internal HTTP/1 native parser * Removed dependency of libevhtp/libevent2 * Replace configure option `--disable-evhtp` with `--disable-http1` for disabling HTTP/1 (default enabled) ### API changes on existing protocol/config features Users may have to change how they access the system * Module state upgrade: RFC7895 to RFC8525: * To upgrade to RFC8525: * Set `CLICON_YANG_LIBRARY` to `true` and `CLICON_MODULE_LIBRARY_RFC7895` to `false` * To keep RFC7895: * Set both `CLICON_YANG_LIBRARY` and `CLICON_MODULE_LIBRARY_RFC7895` to `true` * Following RFC8525, the upgrade means that the state-data returned using GET is changed: * Preamble changed from: `...` to: `...` * `module-state-id` changed to `content-id` * `conformance-type` removed * Note that the datastore feature `CLICON_XMLDB_MODSTATE` is backward compatible with RFC8525. * New `clixon-config@2022-02-11.yang` revision * Added option: * `CLICON_LOG_STRING_LIMIT` * `CLICON_YANG_LIBRARY` * Changed default value: * `CLICON_MODULE_LIBRARY_RFC7895` to false * Removed (previosly marked) obsolete options: * `CLICON_RESTCONF_PATH` * `CLICON_RESTCONF_PRETTY` * `CLICON_CLI_GENMODEL` * `CLICON_CLI_GENMODEL_TYPE` * `CLICON_CLI_GENMODEL_COMPLETION` * `CLICON_CLI_AUTOCLI_EXCLUDE` * `CLICON_CLI_MODEL_TREENAME` * RESTCONF replies on the form: `{"data":...}` changed to: `{"ietf-restconf:data":...}` * See [restconf GET json response does not encode top level node with namespace as per rfc #303](https://github.com/clicon/clixon/issues/303) * YANG leafref `require-instance` default changed to `true` * This makes leafref validation stricter * See [statement: require-instance should be true if not present according to rfc7950 Sec 9.9.3](https://github.com/clicon/clixon/issues/302) * Autotools/configure changes * `configure --with-wwwdir=` is removed * Configure option `--disable-evhtp` with `--disable-http1` for disabling HTTP/1 (default enabled) * Command field of `clixon-lib:process-control` RPC reply used CDATA encoding but now uses regular XML encoding ### C/CLI-API changes on existing features * Added RFC7951 parameter to `clixon_json_parse_string()` and `clixon_json_parse_file()` * If set, honor RFC 7951: JSON Encoding of Data Modeled with YANG, eg it requires module name prefixes * If not set, parse as regular JSON ### Minor features * Added: [Strict auto completion for CLI argument expansion #163](https://github.com/clicon/clixon/issues/163) * Added: [Convert int64, uint64 and decimal64 to string in xml to json #310](https://github.com/clicon/clixon/pull/310) * Backend ignore of `SIGPIPE`. This occurs if client quits unexpectedly over the UNIX socket. * This is a timing issue but occurs more frequently in large RESTCONF messages. * Added option: `CLICON_LOG_STRING_LIMIT` configure option * Limit the length of log and debug messages. Some log messages are dependendent on sizes that can be very large, such as packet lengths. This new option constrains the length of all messgaes. By default no limits. ### Corrected Bugs * Fixed: [Validate error when appending module B grouping to module A item use augment statement #308](https://github.com/clicon/clixon/issues/308) * Fixed: [Restconf PATCH method request failed on item defined by submodule #306](https://github.com/clicon/clixon/issues/306) * Fixed: [restconf GET json response does not encode top level node with namespace as per rfc #303](https://github.com/clicon/clixon/issues/303) * Fixed: [statement: require-instance should be true if not present according to rfc7950 Sec 9.9.3](https://github.com/clicon/clixon/issues/302) * See also API changes * Fixed: input RPC validation of YANG `choice`, more specifically, without `case` keyword * Fixed: More than one unknown/extension in combination with augment of extension resulted in extension being skipped. ## 5.5.0 20 January 2022 This release introduces a new autocli design with a clixon-autocli YANG file ### New features * Changed auto-cli design * See [autocli documentation](https://clixon-docs.readthedocs.io/en/latest/cli.html#autocli) for overview * Added new YANG `clixon-autocli.yang` moving all autocli options there * Default rules for module exclusion, list-keywords, edit-modes, treeref-state and completion * Specialized rules for module exclusion and compression * Replaced separate autocli trees with a single `@basemodel` tree by using filter labels * Filter labels are added to the basemodel tree and then filtered out using `@remove: