310 lines
12 KiB
Markdown
310 lines
12 KiB
Markdown
# Clixon Changelog
|
|
|
|
## 3.3.3 (Upcoming)
|
|
|
|
Thanks to Matthew Smith, Joe Loeliger at Netgate; Fredrik Pettai at
|
|
SUNET for support, requests, debugging, bugfixes and proposed solutions.
|
|
|
|
### Known issues
|
|
* None yet
|
|
|
|
### Major changes:
|
|
* Performance improvements
|
|
* Added xml hash lookup instead of linear search for better performance of large lists. To disable, undefine XML_CHILD_HASH in clixon_custom.h
|
|
* Netconf client was limited to 8K byte messages. New limit is 2^32 bytes.
|
|
|
|
* XML and YANG-based configuration file.
|
|
* New configuration files have .xml suffix, old have .conf. Old config files till work for backward compatibility.
|
|
* The yang model is yang/clixon-config.yang.
|
|
* A migration utility is clixon_cli -x to print new format, eg:
|
|
```
|
|
clixon_cli -f /usr/local/etc/routing.conf -1x
|
|
```
|
|
|
|
* Introducing backend daemon startup modes.
|
|
* The flags -IRCr are replaced with command-line option -s <mode>
|
|
* You use the -s to select the mode: `clixon_backend ... -s running`
|
|
* You may also add a default method in the configuration file: `<CLICON_STARTUP_MODE>init</CLICON_STARTUP_MODE>`
|
|
* The option CLICON_USE_STARTUP_CONFIG is obsoleted by "startup" mode
|
|
* -I replace with -s "init" (or use of CLICON_STARTUP_MODE option)
|
|
* -CIr replace with -s "running"
|
|
* (no-option) replace with -s "none"
|
|
* Backward compatibility is enabled by defining BACKEND_STARTUP_BACKWARD_COMPAT in include/clixon_custom.h
|
|
|
|
* Extra XML has been added along with the new startup modes. Requested by Netgate.
|
|
* You can add extra XML with the -c option to the backend daemon on startup:
|
|
```
|
|
clixon_backend ... -c extra.xml
|
|
```
|
|
* You can also add extra XML by programming the plugin_reset() in the backend
|
|
plugin. The example application shows how.
|
|
|
|
* Clixon can now be compiled and run on Apple Darwin. Thanks SUNET.
|
|
|
|
### Minor changes:
|
|
* Fixed DESTDIR make install/uninstall and break immediately on errors
|
|
* Disabled key-value datastore. Enable with --with-keyvalue
|
|
* Removed mandatory requirements for BACKEND, NETCONF, RESTCONF and CLI dirs.
|
|
|
|
* Restconf: http cookie sent as attribute in rpc restconf_post operations to backend.
|
|
* Added option CLICON_CLISPEC_FILE as complement to CLICON_CLISPEC_DIR to
|
|
specify single CLI specification file, not only directory containing files.
|
|
|
|
* Replaced the following cli_ functions with their original cligen_functions:
|
|
cli_exiting, cli_set_exiting, cli_comment,
|
|
cli_set_comment, cli_tree_add, cli_tree_active,
|
|
cli_tree_active_set, cli_tree.
|
|
|
|
* Added a format parameter to clicon_rpc_generate_error() and changed error
|
|
printouts for backend errors, such as commit and validate. (Thanks netgate).
|
|
Example of the new format:
|
|
|
|
```
|
|
> commit
|
|
Sep 27 18:11:58: Commit failed. Edit and try again or discard changes:
|
|
protocol invalid-value Missing mandatory variable: type
|
|
```
|
|
|
|
* Added event_poll function.
|
|
|
|
* Support for non-line scrolling in CLI, eg wrap lines. Thanks to Jon Loeliger for proposed solution. Set with:
|
|
CLICON_CLI_LINESCROLLING 0
|
|
|
|
### Corrected Bugs
|
|
* Added floating point and negative number support to JSON
|
|
* When user callbacks such as statedata() call returns -1, clixon_backend no
|
|
longer silently exits. Instead a log is printed and an RPC error is returned.
|
|
Cred to Matt, netgate for pointing this out.
|
|
|
|
## 3.3.2 (Aug 27 2017)
|
|
|
|
### Known issues
|
|
* Please use text datastore, key-value datastore no up-to-date
|
|
* leafref occuring within lists: cli expansion does not work
|
|
|
|
### Major changes:
|
|
* Added support for YANG anyxml.
|
|
|
|
* Changed top-level netconf get-config and get to return `<data>` instead of `<data><config>` to comply to the RFC.
|
|
* If you use direct netconf get or get-config calls, you may need to handle the return XML differently.
|
|
* RESTCONF and CLI is not affected.
|
|
* Example:
|
|
|
|
```
|
|
Query:
|
|
<rpc><get/></rpc>
|
|
New reply:
|
|
<rpc-reply>
|
|
<data>
|
|
<a/> # Example data model
|
|
</data>
|
|
</rpc-reply>
|
|
|
|
Old reply:
|
|
<rpc-reply>
|
|
<data>
|
|
<config> # Removed
|
|
<a/>
|
|
</config> # Removed
|
|
</data>
|
|
</rpc-reply>
|
|
```
|
|
|
|
* Added support for yang presence and no-presence containers. Previous default was "presence".
|
|
* Empty containers will be removed unless you have used the "presence" yang declaration.
|
|
* Example YANG without presence:
|
|
|
|
```
|
|
container
|
|
nopresence {
|
|
leaf j {
|
|
type string;
|
|
}
|
|
}
|
|
```
|
|
|
|
If you submit "nopresence" without a leaf, it will automatically be removed:
|
|
|
|
```
|
|
<nopresence/> # removed
|
|
<nopresence> # not removed
|
|
<j>hello</j>
|
|
</nopresence>
|
|
```
|
|
|
|
* Added YANG RPC support for netconf, restconf and CLI. With example rpc documentation and testcase. This replaces the previous "downcall" mechanism.
|
|
* This means you can make netconf/restconf rpc calls
|
|
* However you need to register an RPC backend callback using the backend_rpc_cb_register() function. See documentation and example for more details.
|
|
* Example, the following YANG RPC definition enables you to run a netconf rpc.
|
|
```
|
|
YANG:
|
|
rpc myrpc {
|
|
input {
|
|
leaf name {
|
|
type string;
|
|
}
|
|
}
|
|
}
|
|
NETCONF:
|
|
<rpc><myrpc><name>hello</name><rpc>
|
|
RESTCONF:
|
|
curl -sS -X POST -d {"input":{"name":"hello"}} http://localhost/restconf/operations/myroute'
|
|
```
|
|
|
|
* Enhanced leafref functionality:
|
|
* Validation for leafref forward and backward references;
|
|
* CLI completion for generated cli leafrefs for both absolute and relative paths.
|
|
* Example, relative path:
|
|
|
|
```
|
|
leaf ifname {
|
|
type leafref {
|
|
path "../../interface/name";
|
|
}
|
|
}
|
|
```
|
|
|
|
* Added state data: Netconf `<get>` operation, new backend plugin callback: "plugin_statedata()" for retreiving state data.
|
|
* You can use netconf: `<rpc><get/></rpc>` and it will return both config and state data.
|
|
* Restconf GET will return state data also, if defined.
|
|
* You need to define state data in a backend callback. See the example and documentation for more details.
|
|
|
|
### Minor Changes
|
|
* Added xpath support for predicate: current(), eg /interface[name=current()/../name]
|
|
* Added prefix parsing of xpath, allowing eg /p:x/p:y, but prefix ignored.
|
|
* Corrected Yang union CLI generation and type validation. Recursive unions did not work.
|
|
* Corrected Yang pattern type escaping problem, ie '\.' did not work properly. This requires update of cligen as well.
|
|
* Compliance with RFC: Rename yang xpath to schema_nodeid and syntaxnode to datanode.
|
|
* Main yang module (CLICON_YANG_MODULE_MAIN or -y) can be an absolute file name.
|
|
* Removed 'margin' parameter of yang_print().
|
|
* Extended example with ietf-routing (not only ietf-ip) for rpc operations.
|
|
* Added yang dir with ietf-netconf and clixon-config yang specs for internal usage.
|
|
* Fixed bug where cli set of leaf-list were doubled, eg cli set foo -> foofoo
|
|
* Restricted yang (sub)module file match to match RFC6020 exactly
|
|
* Generic map_str2int generic mapping tables
|
|
* Removed vector return values from xmldb_get()
|
|
* Generalized yang type resolution to all included (sub)modules not just the topmost
|
|
|
|
## 3.3.1 (June 7 2017)
|
|
|
|
* Fixed yang leafref cli completion for absolute paths.
|
|
|
|
* Removed non-standard api_path extension from the internal netconf protocol so that the internal netconf is now fully standard.
|
|
|
|
* Strings in xmldb_put not properly encoded, eg eth/0 became eth.00000
|
|
|
|
## 3.3.0 (May 2017)
|
|
|
|
* Datastore text module is now default.
|
|
|
|
* Refined netconf "none" semantics in tests and text datastore
|
|
|
|
* Moved apps/dbctrl to datastore/
|
|
|
|
* Added connect/disconnect/getopt/setopt and handle to xmldb API
|
|
|
|
* Added datastore 'text'
|
|
|
|
* Configure (autoconf) changes
|
|
Removed libcurl dependency
|
|
Disable restconf (and fastcgi) with configure --disable-restconf
|
|
Disable keyvalue datastore (and qdbm) with configure --disable-keyvalue
|
|
|
|
* Created xmldb plugin api
|
|
Moved qdbm, chunk and xmldb to datastore keyvalue directories
|
|
Removed all other clixon dependency on chunk code
|
|
|
|
* cli_copy_config added as generic cli command
|
|
* cli_show_config added as generic cli command
|
|
Replace all show_confv*() and show_conf*() with cli_show_config()
|
|
Example: replace:
|
|
show_confv_as_json("candidate","/sender");
|
|
with:
|
|
cli_show_config("candidate","json","/sender");
|
|
* Alternative yang spec option -y added to all applications
|
|
* Many clicon special string functions have been removed
|
|
* The netconf support has been extended with lock/unlock
|
|
* clicon_rpc_call() has been removed and should be replaced by extending the
|
|
internal netconf protocol.
|
|
See downcall() function in example/routing_cli.c and
|
|
routing_downcall() in example/routing_backend.c
|
|
* Replace clicon_rpc_xmlput with clicon_rpc_edit_config
|
|
* Removed xmldb daemon. All xmldb acceses is made backend daemon.
|
|
No direct accesses by clients to xmldb API.
|
|
Instead use the rpc calls in clixon_proto_client.[ch]
|
|
In clients (eg cli/netconf) replace xmldb_get() in client code with
|
|
clicon_rpc_get_config().
|
|
pIf you use the vector arguments of xmldb_get(), replace as follows:
|
|
xmldb_get(h, db, api_path, &xt, &xvec, &xlen);
|
|
with
|
|
clicon_rpc_get_config(h, dbstr, api_path, &xt);
|
|
xpath_vec(xt, api_path, &xvec, &xlen)
|
|
|
|
* clicon_rpc_change() is replaced with clicon_rpc_edit_config().
|
|
Note modify argument 5:
|
|
clicon_rpc_change(h, db, op, apipath, "value")
|
|
to:
|
|
clicon_rpc_edit_config(h, db, op, apipath, `"<config>value</config>"`)
|
|
|
|
* xmdlb_put_xkey() and xmldb_put_tree() have been folded into xmldb_put()
|
|
Replace xmldb_put_xkey with xmldb_put as follows:
|
|
xmldb_put_xkey(h, "candidate", cbuf_get(cb), str, OP_REPLACE);
|
|
with
|
|
clicon_xml_parse(&xml, `"<config>%s</config>"`, str);
|
|
xmldb_put(h, "candidate", OP_REPLACE, cbuf_get(cb), xml);
|
|
xml_free(xml);
|
|
|
|
* Change internal protocol from clicon_proto.h to netconf.
|
|
This means that the internal protocol defined in clixon_proto.[ch] is removed
|
|
|
|
* Netconf startup configuration support. Set CLICON_USE_STARTUP_CONFIG to 1 to
|
|
enable. Eg, if backend_main is started with -CIr startup will be copied to
|
|
running.
|
|
|
|
* Added ".." as valid step in xpath
|
|
|
|
* Use restconf format for internal xmldb keys. Eg /a/b=3,4
|
|
|
|
* List keys with special characters RFC 3986 encoded.
|
|
|
|
* Replaced cli expand functions with single to multiple args
|
|
This change is _not_ backward compatible
|
|
This effects all calls to expand_dbvar() or user-defined
|
|
expand callbacks
|
|
|
|
* Replaced cli callback functions with single arg to multiple args
|
|
This change is _not_ backward compatible.
|
|
You are affected if you
|
|
(1) use system callbacks (i.e. in clixon_cli_api.h)
|
|
(2) write your own cli callbacks
|
|
|
|
If you use cli callbacks, you need to rewrite cli callbacks from eg:
|
|
`load("Comment") <filename:string>,load_config_file("filename replace");`
|
|
to:
|
|
`load("Comment") <filename:string>,load_config_file("filename", "replace");`
|
|
|
|
If you write your own, you need to change the callback signature from;
|
|
```
|
|
int cli_callback(clicon_handle h, cvec *vars, cg_var *arg)
|
|
```
|
|
to:
|
|
```
|
|
int cli_callback(clicon_handle h, cvec *vars, cvec *argv)
|
|
```
|
|
and rewrite the code to handle argv instead of arg.
|
|
These are the system functions affected:
|
|
cli_set, cli_merge, cli_del, cli_debug_backend, cli_set_mode,
|
|
cli_start_shell, cli_quit, cli_commit, cli_validate, compare_dbs,
|
|
load_config_file, save_config_file, delete_all, discard_changes, cli_notify,
|
|
show_yang, show_conf_xpath
|
|
|
|
* Added --with-cligen and --with-qdbm configure options
|
|
* Added union type check for non-cli (eg xml) input
|
|
* Empty yang type. Relaxed yang types for unions, eg two strings with different length.
|
|
|
|
## (Dec 2016)
|
|
* Dual license: both GPLv3 and APLv2
|
|
|
|
## (Feb 2016)
|
|
* Forked new clixon repository from clicon
|
|
|