What is the datastore used in FRINX ODL ?

ODL uses a custom in memory database which is part of MD-SAL and it is a very fast storage for YANG modeled data. It also supports persistance and clustered deployments.

Some documentation could be found here: https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Architecture:DOM_DataStore:Transactions

and here: http://www.industry-academia.org/download/ODL-Yang-Data-Store.pdf

Are service instances stored in the UniConfig layer of FRINX ?

Only the „outputs“ of a service are stored and managed by uniconfig (e.g. service generates bgp config for 10 devices, which is pushed into uniconfig). The services themselves are responsible for managing their configuration/operational state and rely on the same datastore to store configuration or operational data.

How does FRINX deal with model changes ?

Adding a new unit for existing model in runtime is possible. Adding both a unit + models into the system is also possible at runtime. Currently, we only allow openconfig models to participate in uniconfig, so if there are some other models, configuration of the system has to be changed in uniconfig to allow those namespaces as well.

Does FRINX provide auto rollback on all affected devices, when a transaction fails on one or more devices ?

Yes, all onboarded devices have full rollback implemented. But it is also possible to disable auto-rollback in uniconfig, so that successfully configured devices will keep their configuration.

Is it possible to show the differences between the actual device configuration and the operational datastore while synchronizing configuration into FRINX ?

Yes, it is possible. To achieve this follow these steps:
    1. sync (update operational)

    1. show diff

    1. drop the changes from device by replacing operational with config

Is any NETCONF device fully supported, or must OpenConfig be mapped to netconf as well ?

You can either use the native device models (via UniConfig native) or use the existing translation units between OpenConfig and vendor models.

Are the libraries that are used to access the Config Data Store model driven ?

ODL has a DataBroker interface and a concept of InstanceIdentifier. Those are the model driven APIs for data access.

More info: https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Concepts

How would an access to the configuration data store look like in code ?

A: Just to demonstrate API, in this example InterfaceConfigurations is read from CONF DS and put back to CONF DS.

1ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
2InstanceIdentifier`<InterfaceConfigurations>` iid = InstanceIdentifier.create(InterfaceConfigurations.class);
3InterfaceConfigurations ifcConfig = xrNodeReadTx.read(LogicalDatastoreType.CONFIGURATION, iid).checkedGet();
4rwTx.put(LogicalDatastoreType.CONFIGURATION, iid, ifcConfig);

B: In this example InterfaceConfigurations is read from OPER DS.

1ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
2InstanceIdentifier`<InterfaceConfigurations>` iid = InstanceIdentifier.create(InterfaceConfigurations.class);
3InterfaceConfigurations ifcConfig = xrNodeReadTx.read(LogicalDatastoreType.OPERATIONAL, iid).checkedGet();

Is it possible in FRINX to run transaction on two disjunct sets of devices simultaneously ?

It is on condition that the transactions configure disjunct sets of devices.

What access control measures does FRINX offer ?

FRINX ODL supports local authentification, password authentification, public key authentification Token authentification, RADIUS based authentification and subtree based authentification via AAA Shiro project.

How does FRINX report problems with device interaction ?

If a device can not be reached during a UniConfig transaction (after FRINX ODL trying reestablishing the connection) a timeout will occur and the cause for the transaction failure will be reported.

Is it possible to backup configuration ?

FRINX distribution contains project called DAEXIM which allows you to export data in json format from data store and import it back.

Is it possible to enforce policies over configuration changes ?

All customer specific validations and policy enforcements can be implemented in layers above UniConfig

In which languages are the libraries to access FRINX written ?

FRINX ODL is written in JAVA and Kotlin which can use data objects generated from YANG:

RESTful API (RESTCONF) and NETCONF can be used with language that implements REST (Pyhton).

Does FRINX/ODL detect if a cluster node is down on its own or does it rely on a high availability framework ?

FRINX ODL detects node failures in a cluster.

How often will FRINX integrate new ODL versions ?

FRINX integrates major ODL versions with the focus on new customer features and we also integrate bug fixes from ODL upstream to FRINX releases

Is it possible for FRINX to report problems to a network monitoring system ?

FRINX ODL can send NETCONF notifications from web sockets on Northbound API

Is it possible to do additional logging on the logging provided by Karaf ?

Yes it is. Each component supports different verbocity levels of logging (ERROR, WARN, INFO, DEBUG, TRACE).

Where do I find the status of the device and where do I find error messages, when mounting does not work ?

To get status of the mounting process for all devices in the system, issue following request (it will show status as well as last connect attempt cause):

CLI devices

NETCONF devices



What does mounting exactly do ?

Mounting a device serves the following purpose. First, open IO session (and keep it open). Then expose a mount-point in ODL (that means, device can be managed over REST or internal API). Finally, collect any „units“ for that particular device and use the code when communicating with the device.

Why I can not mount Junos device on Uniconfig ?

If mounting Junos devices is not possible and Uniconfig gives response :

2020-03-23 03:26:07,174 ERROR [default-pool-5-2] (org.opendaylight.netconf.sal.connect.netconf.NetconfDevice) - RemoteDevice{junos}: Initialization in sal failed, disconnecting from device
java.lang.IllegalStateException: Cannot build Netconf device schema context.
at org.opendaylight.netconf.cache.impl.utils.NetconfSchemaContextFactory.buildSchemaContext(NetconfSchemaContextFactory.java:64)
at org.opendaylight.netconf.cache.model.SchemaRepositoryRefs.buildSchemaContext(SchemaRepositoryRefs.java:68)
at org.opendaylight.netconf.sal.connect.netconf.NetconfDevice$SchemaSetup.run(NetconfDevice.java:515)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: There are not any sources left for building of schema context.
at org.opendaylight.netconf.cache.impl.utils.NetconfSchemaContextFactory.setUpSchema(NetconfSchemaContextFactory.java:114)
at org.opendaylight.netconf.cache.impl.utils.NetconfSchemaContextFactory.buildSchemaContext(NetconfSchemaContextFactory.java:61)
... 10 more

It is necessary to set up on Junos device netconf session compliant to RFC and Yang schemas (rfc-compliant, yang-compliant)

> configure
# set system services netconf rfc-compliant
# set system services netconf yang-compliant
# commit