# Clixon yang routing example
## Compile and run
```
cd example
make && sudo make install
```
Start backend:
```
clixon_backend -f /usr/local/etc/routing.xml -I
```
Edit cli:
```
clixon_cli -f /usr/local/etc/routing.xml
```
Send netconf command:
```
clixon_netconf -f /usr/local/etc/routing.xml
```
## Setting data example using netconf
```
eth1true9.2.3.424]]>]]>
```
## Getting data using netconf
```
]]>]]>
]]>]]>
]]>]]>
]]>]]>
]]>]]>
]]>]]>
```
## Creating notification
The example has an example notification triggering every 10s. To start a notification
stream in the session, create a subscription:
```
ROUTING]]>]]>
]]>]]>
Routing notification]]>]]>
Routing notification]]>]]>
...
```
This can also be triggered via the CLI:
```
cli> notify
cli> Routing notification
Routing notification
...
```
## Operation data
Clixon implements Yang RPC operations by an extension mechanism. The
extension mechanism enables you to add application-specific
operations. It works by adding user-defined callbacks for added
netconf operations. It is possible to use the extension mechanism
independent of the yang rpc construct, but it is recommended. The example includes an example:
Example:
```
cli> rpc ipv4
```
The example works by creating a netconf rpc call and sending it to the backend: (see the fib_route_rpc() function).
```
ipv4
```
In the backend, a callback is registered (fib_route()) which handles the RPC.
```
static int
fib_route(clicon_handle h,
cxobj *xe, /* Request: */
struct client_entry *ce, /* Client session */
cbuf *cbret, /* Reply eg ... */
void *arg) /* Argument given at register */
{
cprintf(cbret, "");
return 0;
}
int
plugin_init(clicon_handle h)
{
...
backend_rpc_cb_register(h, fib_route, NULL, "fib-route");
...
}
```
## State data
Netconf and restconf GET also returns state data, in contrast to
config data.
In YANG state data is specified with "config false;". In the example, interface-state is state data.
To return state data, you need to write a backend state data callback
with the name "plugin_statedata" where you return an XML tree with
state. This is then merged with config data by the system.
A static example of returning state data is in the example. Note that
a real example would poll or get the interface counters via a system
call, as well as use the "xpath" argument to identify the requested
state data.
## Run as docker container
```
cd docker
# look in README
```