Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This page describes how to generate NETCONF emulator from your own YANG.

1.

...

  1. Download NETCONF emulator boilerplate from here: https://drive.google.com/drive/folders/1Md2zGKBKuIMnhTlYhiVSVhIeU-1fGqK6

    Code Block
    $ ls emulator-oc-xt3300
    Dockerfile  emulator/   src/
  2. 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)
  3. 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/
  4. 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"]
  5. 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
  6. 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> . 
  7. Now you are ready to run your own NETCONF emulator. Please exec "docker run"!!
  8. Username / password are set as admin/admin. 

  9. 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&amp;also-supported=report-all-tagged</capability>
        <capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2016-06-21&amp;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&amp;revision=2016-05-26</capability>
        <capability>http://openconfig.net/yang/interfaces/ethernet?module=openconfig-if-ethernet&amp;revision=2016-12-22</capability>
        <capability>http://openconfig.net/yang/openconfig-ext?module=openconfig-extensions&amp;revision=2015-10-09</capability>
        <capability>http://openconfig.net/yang/openconfig-types?module=openconfig-types&amp;revision=2017-01-13</capability>
        <capability>http://openconfig.net/yang/optical-amplfier?module=openconfig-optical-amplifier&amp;revision=2016-03-31</capability>
        <capability>http://openconfig.net/yang/platform?module=openconfig-platform&amp;revision=2016-06-06</capability>
        <capability>http://openconfig.net/yang/platform-types?module=openconfig-platform-types&amp;revision=2016-06-06</capability>
        <capability>http://openconfig.net/yang/platform/transceiver?module=openconfig-platform-transceiver&amp;revision=2016-12-22</capability>
        <capability>http://openconfig.net/yang/terminal-device?module=openconfig-terminal-device&amp;revision=2016-12-22</capability>
        <capability>http://openconfig.net/yang/transport-line-common?module=openconfig-transport-line-common&amp;revision=2016-03-31</capability>
        <capability>http://openconfig.net/yang/transport-types?module=openconfig-transport-types&amp;revision=2016-12-22</capability>
        <capability>http://tail-f.com/ns/aaa/1.1?module=tailf-aaa&amp;revision=2015-06-16</capability>
        <capability>http://tail-f.com/ns/common/query?module=tailf-common-query&amp;revision=2017-12-15</capability>
        <capability>http://tail-f.com/ns/kicker?module=tailf-kicker&amp;revision=2017-09-28</capability>
        <capability>http://tail-f.com/yang/acm?module=tailf-acm&amp;revision=2013-03-07</capability>
        <capability>http://tail-f.com/yang/common?module=tailf-common&amp;revision=2018-03-01</capability>
        <capability>http://tail-f.com/yang/common-monitoring?module=tailf-common-monitoring&amp;revision=2013-06-14</capability>
        <capability>http://tail-f.com/yang/confd-monitoring?module=tailf-confd-monitoring&amp;revision=2013-06-14</capability>
        <capability>http://tail-f.com/yang/netconf-monitoring?module=tailf-netconf-monitoring&amp;revision=2016-11-24</capability>
        <capability>http://tail-f.com/yang/xsd-types?module=tailf-xsd-types&amp;revision=2017-11-20</capability>
        <capability>urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&amp;revision=2014-08-06&amp;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&amp;revision=2016-11-23</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;revision=2013-07-15</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&amp;revision=2014-05-08&amp;features=pre-provisioning,if-mib,arbitrary-names</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&amp;revision=2012-02-22</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&amp;revision=2012-02-06</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;revision=2016-06-21</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;revision=2013-07-15</capability>
        <capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;revision=2011-06-01</capability>
        <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;revision=2011-06-01</capability>
      </capabilities>
      <session-id>32</session-id>
    </hello>
  10. 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.

  11. 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
languagebash
git clone -b netconf-template https://github.com/opennetworkinglab/ODTN-emulator.git && cd ODTN-emulator/emulator-oc-cassini

...

Code Block
linenumberstrue
.
├── 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 import-yangs.sh is called to import yang models into Netconf datastore sysrepo as listed.

...

Code Block
linenumberstrue
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.

...