...
- start ONOS
activate the netconf app :
Code Block onos> app activate org.onosproject.netconf
if you wrote your own driver for your device activate that specific driver (i.e.) :
Code Block onos> app activate org.onosproject.drivers.fujitsu
give ONOS the information to connect to the device and which driver to use for you device in a json file. You need to specify username, password, ip and port. If you wrote a specific driver that has also to be changed form the standard "netconf" one.
Code Block { "devices": { "netconf:<ip>:<port>": { "netconf": { "ip": <ip>, "port": <port>, "username": <username>, "password": <password> }, "basic": { "driver": <driver-name> } } } }
A working example is in $ONOS_ROOT/tools/test/configs/netconf-cfg.json. Change the IP both in the DeviceId at the top and in the devices array. The port number by default on NETCONF is 830, so unless you made any changes to that leave it as is. The device can be accessed also via SSH Key. Just specify the sshkey:<key> in the json file as a key,value pair.
You can also add other information, more than the driver, to the basic device configuration information: "type": "<device-type>", "manufacturer": "<device-manufacturer>","hwVersion": "<hw-version>","swVersion": "<sw-version>".
If you don't specify any driver-name in the basic configuration ONOS will assign the default one. Being the default one very much related to OpenFlow devices. It's suggested to always specify the driver-name with yours or the "netconf" one.upload the configuration you just wrote to the instance of ONOS you are running, in our case localhost:
Code Block <your_machine>~$ curl -X POST -H "content-type:application/json" http://localhost:8181/onos/v1/network/configuration -d @<path_to_your_json_configuration_file> --user onos:rocks
or
Code Block <your_machine>~$ onos-netcfg localhost <path_to_your_json_configuration_file>
Check if the device is present in ONOS:
Code Block onos> devices
should return, among other devices also something like:
Code Block onos> id=netconf:10.1.9.24:830, available=true, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, ipaddress=10.1.9.24, driver=ovs-netconf, name=netconf:10.1.9.24:830
If the device is not present then it could have been and error and you have to check the logs.
for localhost logs
Code Block <your_machine>~$ tl
or for remote logs
Code Block <your_machine>~$ ol <IP Address with ONOS instance>
verify that the logs don't contain NETCONF related exceptions and this warning does not appear:
Code Block WARN | event-dispatch-0 | ListenerRegistry <.....> org.onosproject.netconf.NetconfException: Can't connect to NETCONF device on 10.1.9.24:830
In case the log is present it means that the device was not able to reply on the given IP and Port. Verify Ip and Port in the Json file you posted and retry. If any other exception is present, such as no device name, please read the log and react to it accordingly.
- Once the device is present in ONOS you can interact with it.
Timeouts
The NETCONF controller has 3 timeout parameters which control how the underlying SSH client connects to the remote NETCONF device
- The connect timeout - the length of time in seconds that is allowed for the SSH connection protocol to complete - this is 5 seconds by default
- The reply timeout - the length of time in seconds that is allowed for a reply to a NETCONF command to be returned - this is 5 seconds by default
- The idle timeout - the length of time in seconds that the SSH connection will be automatically closed after if no traffic is detected - this is 300 seconds by default
These 3 parameters are changeable both system wide through the Configuration Service and individually per NETCONF device through the Network Configuration Service.
The system-wide adjustment can be made through the ONOS CLI "cfg get" shows the values and "cfg set" changes the values:
Code Block |
---|
onos> cfg get org.onosproject.netconf.ctl.impl.NetconfControllerImpl
org.onosproject.netconf.ctl.impl.NetconfControllerImpl
name=sshLibrary, type=string, value=apache-mina, defaultValue=apache-mina, description=Ssh Library instead of apache_mina (i.e. ethz-ssh2
name=netconfIdleTimeout, type=integer, value=300, defaultValue=300, description=Time (in seconds) SSH session will close if no traffic seen
name=netconfConnectTimeout, type=integer, value=5, defaultValue=5, description=Time (in seconds) to wait for a NETCONF connect.
name=netconfReplyTimeout, type=integer, value=5, defaultValue=5, description=Time (in seconds) waiting for a NetConf reply
onos>
|
Values for individual devices are settable through the Network Configuration Service. Under the "netconf" grouping the following additional attributes can be optionally added in any order
- "connect-timeout": <int - values below 1 will be ignored>
- "reply-timeout": <int - values below 1 will be ignored>
- "idle-timeout": <int - values below 1 will be ignored>
If individual device settings exist for a device, they will take priority over system wide settings for that device. It is at the creation of the NETCONF session that the values are taken in to account and changing them after that will have no effect on that session. If the session is closed however, and a new session opened, then any new values are taken in to account.
Code Block | ||||
---|---|---|---|---|
| ||||
"devices": {
<device-id>: {
"netconf": {
"username": <user>,
"password": <pw>,
"ip": <ip>,
"port": <port>,
"connect-timeout": 20,
"reply-timeout": 25
},
|
SSH Client
Two different SSH Client libraries are available in ONOS for NETCONF connections - Apache Mina SSH Client and Ganymede SSH Client - Apache Mina is the default library.
Again the client library may be set system wide or individually per device. To set it per device use the following when provisioning the device through the Network Configuration Service.
- "ssh-client": <value - either "ethz-ssh2" or "apache-mina">
Example: Get and Set Controllers.
...