This section provides an overview on the NETCONF protocol implementation in ONOS.
NetconfController.java, implemented by NetconfControllerImpl.java: tracks all the NETCONF devices, serves as a one stop for connecting and obtaining a device and (un)register listeners on device events.
An example of NETCONF infrastructure usage is getting and setting controllers on a device. These operations are defined in an ONOS Behaviour, in our case the NetconfControllerConfig.java, that implements ControllerConfig general behaviour. To do in the Behaviour you are creating the operations on the devices, you need the NetconfController, which you can obtainthorugh the DriverHandler. The NetconfController instance now gives you access to all the device or a single device. Once you have the device you are interested in based upon the deviceId you provide you can get the NetconfSession object to comunicate with the device and do operations on the physical device, getting the configuration in case of the get controllers or setting a pre-built new one for the setControllers. XmlConfigParser.java offers a method to extract the wanted information from an XML configuration received from the device and another method to produce the correct XML to set one or more controller on a specific device.
You can take a look at the acutal implementation of the get and set controllers operation in the NetconfControllerConfig.java class. For an example of other operations that can be implemented the OVSDB infrastructure provides a good starting point.
To call the getControllers and setControllers methods you need to obtain the ControllerConfig Behaviour nad then call on this instance the methods. The set and get commands are implemented, as an example, in DeviceControllersNetconfCommand.java and DeviceSetControllersNetconfCommand.java that provide, in two CLI commands
onos> device-controllers-netconf |
onos> device-setcontrollers-netconf |
To test locally (not on real switches) the NETCONF implementation you need the Mininet machine with of-config installed (link to mininet machine). of-config is wrapper for an openvswitch instance, that uses NETCONF protocol and translates it to OVSDB protocol in order to use that database implementation.
Infrastructure Setup:
activate the netconf app :
onos> app activate org.onosproject.netconf |
specify to ONOS that we are using netconf devices:
$ onos-topo-cfg localhost ~/onos/tools/test/topos/ofc-netconf.json |
There is much room for improvement and testing, this is only a basic skeleton of the infrastructure. The improvement should be focused on extracting the XML out of the NetconfSessionImpl's methods and testing each operation. In the future the XML can be generated through YANG models.