...
This page describes how to generate NETCONF emulator from your own YANG.
1.
...
Download NETCONF emulator boilerplate from here: https://drive.google.com/drive/folders/1Md2zGKBKuIMnhTlYhiVSVhIeU-1fGqK6
Code Block $ ls emulator-oc-xt3300 Dockerfile emulator/ src/
- Download ConfD Basic installer for linux from here: http://www.tail-f.com/confd-basic/
( It's license free, but you need cisco devnet account to download it) Put the installer (confd-basic-X.X.linux.i686.installer.bin) into the boilerplate
Code Block $ ls emulator-oc-xt3300 Dockerfile confd-basic-6.6.linux.i686.installer.bin* emulator/ src/
Open Dockerfile and edit the version of ConfD Basic
Code Block $ cat emulator-oc-xt3300/Dockerfile FROM i386/ubuntu:xenial EXPOSE 830 COPY confd-basic-6.6.linux.i686.installer.bin /opt # Edit here WORKDIR /opt RUN apt update \ && apt install -y openssh-client make \ && ./confd-basic-6.6.linux.i686.installer.bin confd COPY emulator /opt/emulator COPY src /opt/src RUN cd confd && . ./confdrc \ && cd ../emulator && make && ./setup.sh WORKDIR /opt/emulator ENTRYPOINT ["./entry.sh"]
Put your own YANG files into src/yang/
Code Block $ ls emulator-oc-xt3300/src/yang iana-if-type@2016-11-23.yang openconfig-interfaces@2016-05-26.yang openconfig-terminal-device@2016-12-22.yang ietf-interfaces@2014-05-08.yang openconfig-optical-amplifier@2016-03-31.yang openconfig-transport-line-common@2016-03-31.yang ietf-yang-types@2013-07-15.yang openconfig-platform-transceiver@2016-12-22.yang openconfig-transport-types@2016-12-22.yang openconfig-extensions@2015-10-09.yang openconfig-platform-types@2016-06-06.yang openconfig-types@2017-01-13.yang openconfig-if-ethernet@2016-12-22.yang openconfig-platform@2016-06-06.yang put-your-yangs-here
You need to build your own emulator container using yang files above. Execute docker build.
Code Block $ docker build -f Dockerfile -t <your contain tag> .
- Now you are ready to run your own NETCONF emulator. Please exec "docker run"!!
Username / password are set as admin/admin.
If you want to check that your docker instance works correctly and is healthy, you can use NETCONF client emulator like netconf-console command and send "hello" request to emulator.
If emulator responds "hello" message correctly, it works fine! And also you can see the loaded yang models from the <capabilities> in the hello reply message.Code Block $ netconf-console --host=localhost --port=830 -u admin -p admin --hello <?xml version="1.0" encoding="UTF-8"?> <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability> <capability>urn:ietf:params:netconf:base:1.1</capability> <capability>urn:ietf:params:netconf:capability:candidate:1.0</capability> <capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability> <capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability> <capability>urn:ietf:params:netconf:capability:xpath:1.0</capability> <capability>urn:ietf:params:netconf:capability:validate:1.0</capability> <capability>urn:ietf:params:netconf:capability:validate:1.1</capability> <capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability> <capability>urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all-tagged</capability> <capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2016-06-21&module-set-id=206f40597ee8e8d35d0f0e10eebccb9e</capability> <capability>http://tail-f.com/ns/netconf/actions/1.0</capability> <capability>http://tail-f.com/ns/netconf/extensions</capability> <capability>http://openconfig.net/yang/interfaces?module=openconfig-interfaces&revision=2016-05-26</capability> <capability>http://openconfig.net/yang/interfaces/ethernet?module=openconfig-if-ethernet&revision=2016-12-22</capability> <capability>http://openconfig.net/yang/openconfig-ext?module=openconfig-extensions&revision=2015-10-09</capability> <capability>http://openconfig.net/yang/openconfig-types?module=openconfig-types&revision=2017-01-13</capability> <capability>http://openconfig.net/yang/optical-amplfier?module=openconfig-optical-amplifier&revision=2016-03-31</capability> <capability>http://openconfig.net/yang/platform?module=openconfig-platform&revision=2016-06-06</capability> <capability>http://openconfig.net/yang/platform-types?module=openconfig-platform-types&revision=2016-06-06</capability> <capability>http://openconfig.net/yang/platform/transceiver?module=openconfig-platform-transceiver&revision=2016-12-22</capability> <capability>http://openconfig.net/yang/terminal-device?module=openconfig-terminal-device&revision=2016-12-22</capability> <capability>http://openconfig.net/yang/transport-line-common?module=openconfig-transport-line-common&revision=2016-03-31</capability> <capability>http://openconfig.net/yang/transport-types?module=openconfig-transport-types&revision=2016-12-22</capability> <capability>http://tail-f.com/ns/aaa/1.1?module=tailf-aaa&revision=2015-06-16</capability> <capability>http://tail-f.com/ns/common/query?module=tailf-common-query&revision=2017-12-15</capability> <capability>http://tail-f.com/ns/kicker?module=tailf-kicker&revision=2017-09-28</capability> <capability>http://tail-f.com/yang/acm?module=tailf-acm&revision=2013-03-07</capability> <capability>http://tail-f.com/yang/common?module=tailf-common&revision=2018-03-01</capability> <capability>http://tail-f.com/yang/common-monitoring?module=tailf-common-monitoring&revision=2013-06-14</capability> <capability>http://tail-f.com/yang/confd-monitoring?module=tailf-confd-monitoring&revision=2013-06-14</capability> <capability>http://tail-f.com/yang/netconf-monitoring?module=tailf-netconf-monitoring&revision=2016-11-24</capability> <capability>http://tail-f.com/yang/xsd-types?module=tailf-xsd-types&revision=2017-11-20</capability> <capability>urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06&features=crypt-hash-sha-512,crypt-hash-sha-256,crypt-hash-md5</capability> <capability>urn:ietf:params:xml:ns:yang:iana-if-type?module=iana-if-type&revision=2016-11-23</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&revision=2014-05-08&features=pre-provisioning,if-mib,arbitrary-names</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2012-02-22</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&revision=2016-06-21</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15</capability> <capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01</capability> </capabilities> <session-id>32</session-id> </hello>
You can use confd cli by docker-exec as follows:
Code Block $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d2bbbe7d1046 tapi-emulator "./entry.sh" 13 seconds ago Up 11 seconds 0.0.0.0:12031->830/tcp reverent_stonebraker $ docker exec -it d2bb ./cli Welcome to ConfD Basic The CLI may only be used during product development. Commercial use of the CLI is prohibited. You must disable the CLI in confd.conf for production. For more information, visit http://www.tail-f.com. admin connected from 127.0.0.1 using console on d2bbbe7d1046 Confd#
The detailed command and usage of confd-cli, please check the confd official manual.
To test onos device configuration function, you need to setup default configuration of this NETCONF emulator. There are no device specific default configuration, so you need to set the configuration for device interfaces, ports, components, and any other configuration which are assumed to be installed initially. You can use confd-cli or some NETCONF client tool like netconf-console.
You can check the current configuration using confd-cli:Code Block Confd#show running-config aaa authentication users user admin uid 9001 gid 100 password $1$bzzVbo51$qwwplzIooQG4PKiKHmJoS. ssh_keydir /var/confd/homes/admin/.ssh homedir /var/confd/homes/admin ! ...
...
Generate Netconf emulator via Netopeer2 (Commercial license unlimited)
...
1.1 Download NETCONF emulator template via command:
Code Block | ||
---|---|---|
| ||
git clone -b netconf-template https://github.com/opennetworkinglab/ODTN-emulator.git && cd ODTN-emulator/emulator-oc-cassini |
...
Code Block | ||
---|---|---|
| ||
. ├── Dockerfile ├── config │ ├── init-components.xml │ └── init-terminal-device.xml ├── script │ ├── config-power.xml │ ├── get-pip.py │ └── push-data.sh └── yang └── openconfig-odtn ├── iana-if-type.yang ├── ietf-interfaces.yang ├── ietf-yang-types@2013-07-15.yang ├── import-yangs.sh ├── openconfig-alarm-types.yang ├── openconfig-extensions.yang ├── openconfig-if-ethernet.yang ├── openconfig-interfaces.yang ├── openconfig-platform-linecard.yang ├── openconfig-platform-port.yang ├── openconfig-platform-transceiver.yang ├── openconfig-platform-types.yang ├── openconfig-platform.yang ├── openconfig-terminal-device.yang ├── openconfig-transport-line-common.yang ├── openconfig-transport-line-protection.yang ├── openconfig-transport-types.yang ├── openconfig-types.yang └── openconfig-yang-types.yang |
...
1.2 Build your own Dockerfile based on the template
In Dockerfile, The software listed below are installed:
...
You can put all the yang files under directory yang, which will be copied into the docker image.
...
1.3 Load the YANG files in script import-yangs.sh
While building the docker image, script script import-yangs.sh is called to import yang models into Netconf datastore sysrepo as listed.
Code Block | ||||
---|---|---|---|---|
| ||||
################################### Clean the default Yang models defined inside the sysrepo, in case of the conflictions ################################### sysrepoctl --uninstall --module=iana-if-type --revision=2014-05-08 sysrepoctl --uninstall --module=ietf-ip revision=2014-06-16 sysrepoctl --uninstall --module=ietf-interfaces revision=2014-05-08 ################################### Make some changes to skip parsing errors ################################### cd /root/yang/openconfig-odtn # Before importing, you need to remove the last augment block for # "/oc-if:interfaces/oc-if:interface/oc-if:state" in openconfig-platform-transceiver.yang. # Because it will cause parsing errors. # line number between [481, 500] sed -i '481,500d' openconfig-platform-transceiver.yang ################################### Install new yang files about openconfig ################################### sysrepoctl --install --yang=ietf-interfaces.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=iana-if-type.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-extensions.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-types.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-yang-types.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-platform-types.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-transport-types.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-interfaces.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-if-ethernet.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-alarm-types.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-platform.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-platform-linecard.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-platform-port.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-platform-transceiver.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-terminal-device.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-transport-line-common.yang --owner=root:root --permissions=666 sysrepoctl --install --yang=openconfig-transport-line-protection.yang --owner=root:root --permissions=666 |
libyang and and sysrepo are not very stable for YANG, and your own yang files may contains some special statements that cannot be recognized by libyang properly. You need to change some details to make your own yang files available in Netconf server.
After yang module installation, ssh into the docker container using the following command,
Code Block | ||||
---|---|---|---|---|
| ||||
docker exec -it <container_name> /bin/bash |
After ssh into the modules could be listed belowdocker container, you can list modules as follows:
Code Block | ||
---|---|---|
| ||
root@b2d61bf9014f:~# sysrepoctl -l Sysrepo schema directory: /etc/sysrepo/yang/ Sysrepo data directory: /etc/sysrepo/data/ (Do not alter contents of these directories manually) Module Name | Revision | Conformance | Data Owner | Permissions | Submodules | Enabled Features ----------------------------------------------------------------------------------------------------------------------------------------------- ietf-netconf-notifications | 2012-02-06 | Installed | root:root | 666 | | ietf-netconf | 2011-06-01 | Installed | root:root | 666 | | writable-running candidate rollback-on-error validate startup xpath url ietf-netconf-acm | 2018-02-14 | Imported | | | | nc-notifications | 2008-07-14 | Installed | root:root | 666 | | notifications | 2008-07-14 | Installed | root:root | 666 | | turing-machine | 2013-12-27 | Installed | root:root | 666 | | ietf-netconf-with-defaults | 2011-06-01 | Installed | | | | ietf-netconf-monitoring | 2010-10-04 | Installed | root:root | 666 | | ietf-yang-library | 2018-01-17 | Installed | root:root | 666 | | ietf-datastores | 2017-08-17 | Imported | | | | ietf-interfaces | 2018-02-20 | Installed | root:root | 666 | | iana-if-type | 2017-01-19 | Installed | | | | openconfig-extensions | 2017-04-11 | Installed | | | | openconfig-types | 2018-05-05 | Installed | | | | openconfig-yang-types | 2018-04-24 | Installed | | | | openconfig-platform-types | 2018-05-05 | Installed | | | | openconfig-transport-types | 2018-05-16 | Installed | | | | openconfig-alarm-types | 2018-01-16 | Installed | | | | openconfig-interfaces | 2018-04-24 | Installed | root:root | 666 | | openconfig-if-ethernet | 2018-04-10 | Installed | | | | openconfig-platform | 2018-06-03 | Installed | root:root | 666 | | openconfig-platform-port | 2018-01-20 | Installed | | | | openconfig-platform-transceiver | 2018-05-15 | Installed | | | | openconfig-terminal-device | 2017-07-08 | Installed | root:root | 666 | | openconfig-platform-linecard | 2017-08-03 | Installed | | | | openconfig-transport-line-common | 2017-09-08 | Installed | | | | openconfig-transport-line-protection | 2017-09-08 | Installed | root:root | 666 | | |
...
1.4 Start Netconf server in push-data.sh
In push-data.sh, you should put the data into sysrepo, and start Netconf server.
...
There are two ways to push data into sysrepo.:
- sysrepocfg: sysrepocfg is the configuration command about sysrepo, you could push init-components data via command like:
Code Block |
---|
sysrepocfg --import=init-components.xml --format=xml openconfig-platform |
netconf-console
...
: netconf-console is a general Netconf client tool. We can use this command to import config-power XML data:
Code Block |
---|
netconf-console --host 127.0.0.1 --port 830 -u root -p root --rpc=/root/script/config-power.xml |
...
1.5. Testing via netconf-console
sysrepo and Netopeer2 provide some useful tools for Netconf testing, however, ouside the docker container, we still recommend netconf-console. You can find a set of examples here: PowerConfig configuration via ONOS CLI or Netconf. The basic <get> and <merge> <edit-config> operations are executed by the files under directory emulator-test:
...
.
1.6. Notes about modification in yang files under emulator-oc-cassini
directory
You can find some notes about modification in yang files under emulator-oc-cassini yang files here in this link