Versions Compared

Key

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

...

Available models

  • OpenConfig model
    • Each vendor support different OpenConfig model, please check detailed version from here: https://wiki.onosproject.org/display/ODTN/Available+OpenConfig+models+and+versions+for+phase+1
  • TAPI model
    • v2.0.2

...

Setup pair of above available transponders or NETCONF emulators

Demo

Setup onos


Code Block
# Append odtn-service to variable $ONOS_APPS
$export ONOS_APPS=odtn-service,$ONOS_APPS




$ ok clean
...

$ onos localhost
Welcome to Open Network Operating System (ONOS)!
     ____  _  ______  ____     
    / __ \/ |/ / __ \/ __/   
   / /_/ /    / /_/ /\ \     
   \____/_/|_/\____/___/     

Documentation: wiki.onosproject.org
Tutorials:     tutorials.onosproject.org
Mailing lists: lists.onosproject.org

Come help out! Find out how at: contribute.onosproject.org

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown ONOS.

onos> apps -a -s
*   8 org.onosproject.yang                 2.1.0.SNAPSHOT YANG Compiler and Runtime
*   9 org.onosproject.config               2.1.0.SNAPSHOT Dynamic Configuration
*  10 org.onosproject.configsync           2.1.0.SNAPSHOT Dynamic Configuration Synchronizer
*  11 org.onosproject.faultmanagement      2.1.0.SNAPSHOT Fault Management
*  12 org.onosproject.netconf              2.1.0.SNAPSHOT NETCONF Provider
*  13 org.onosproject.configsync-netconf   2.1.0.SNAPSHOT Dynamic Configuration Synchronizer for NETCONF
*  21 org.onosproject.restsb               2.1.0.SNAPSHOT REST Provider
*  27 org.onosproject.drivers              2.1.0.SNAPSHOT Default Drivers
*  34 org.onosproject.restconf             2.1.0.SNAPSHOT RESTCONF Application Module
*  39 org.onosproject.optical-model        2.1.0.SNAPSHOT Optical Network Model
*  40 org.onosproject.drivers.optical      2.1.0.SNAPSHOT Basic Optical Drivers
*  42 org.onosproject.proxyarp             2.1.0.SNAPSHOT Proxy ARP/NDP
*  44 org.onosproject.hostprovider         2.1.0.SNAPSHOT Host Location Provider
*  45 org.onosproject.lldpprovider         2.1.0.SNAPSHOT LLDP Link Provider
*  46 org.onosproject.openflow-base        2.1.0.SNAPSHOT OpenFlow Base Provider
*  47 org.onosproject.openflow             2.1.0.SNAPSHOT OpenFlow Provider Suite
*  57 org.onosproject.protocols.restconfserver 2.1.0.SNAPSHOT RESTCONF Server Module
*  61 org.onosproject.pathpainter          2.1.0.SNAPSHOT Path Visualization
*  88 org.onosproject.models.tapi          2.1.0.SNAPSHOT ONF Transport API YANG Models
*  89 org.onosproject.models.ietf          2.1.0.SNAPSHOT IETF YANG Models
*  90 org.onosproject.models.openconfig    2.1.0.SNAPSHOT OpenConfig YANG Models
*  91 org.onosproject.models.openconfig-infinera 2.1.0.SNAPSHOT OpenConfig Infinera XT3300 YANG Models
*  92 org.onosproject.models.openconfig-odtn 2.1.0.SNAPSHOT OpenConfig RD v0.3 YANG Models
*  93 org.onosproject.odtn-api             2.1.0.SNAPSHOT ODTN API & Utilities Application
*  94 org.onosproject.drivers.netconf      2.1.0.SNAPSHOT Generic NETCONF Drivers
*  95 org.onosproject.drivers.odtn-driver  2.1.0.SNAPSHOT ODTN Driver
*  96 org.onosproject.odtn-service         2.1.0.SNAPSHOT ODTN Service Application
* 177 org.onosproject.mobility             2.1.0.SNAPSHOT Host Mobility

...

In DCS store, only TAPI context and topology are initially set. We can see the TAPI model state in DCS by using the following command:


Code Block
onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <connectivity-context xmlns="urn:onf:otcc:yang:tapi-connectivity"/>
  <topology-context xmlns="urn:onf:otcc:yang:tapi-topology">
    <topology>
      <uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</uuid>
    </topology>
  </topology-context>
</context>

Because there is no device and link in ONOS topology, the TAPI context shows nothing except topology uuid.

Setup Emulator

xt-3300 emulator

To setup OpenConfig emulator, all you have to do is to download and setup emulator image(https://drive.google.com/drive/folders/1Md2zGKBKuIMnhTlYhiVSVhIeU-1fGqK6),

...

Code Block
$ cat docker-compose.yml 
version: '2'
services:
  openconfig_xt3300_1:
    build: ./emulator-oc-xt3300
    ports:
      - "11002:830"
  openconfig_xt3300_2:
    build: ./emulator-oc-xt3300
    ports:
      - "11003:830"


$ docker-compose up -d

If you want to check that the docker instance works correctly, you can use netconf-console command and send "hello" request to emulator. netconf-console need to be installed, please google that.

Once docker containers are started, the default user is root. So you need to use useradd and passwd to create user admin.

Cassini emulator

The building of xt-3300 emulator is a little complex. We suggest you use Cassini emulator. All subsequent sections are based on Cassini emulators.

To run two emulators as mentioned above, you can just run the commands listed below:

Code Block
languagebash
docker pull onosproject/oc-cassini:0.2
docker run -it -d --name openconfig_cassini_1 -p 11002:830 onosproject/oc-cassini:0.2
docker run -it -d --name openconfig_cassini_2 -p 11003:830 onosproject/oc-cassini:0.2


Checking if the emulator works correctly

If you want to check that the docker instance works correctly, you can use netconf-console command and send "hello" request to emulator. netconf-console need to be installed, please google that.

Code Block
$ netconf-console --host=127.0.0.1 --port=11002 -u root -p root --hello
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:capabilities>
Code Block
$ netconf-console --host=127.0.0.1 --port=11002 -u admin -p admin --hello
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <nc:capabilities>
    <nc:capability>urn:ietf:params:netconf:base:1.0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:base:1.1<0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:candidatebase:1.1</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:writable-running:1.0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:confirmed-commitcandidate:1.0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:confirmedrollback-on-commiterror:1.1<0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:xpathvalidate:1.0<1</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:validatestartup:1.0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:validateurl:1.1<0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:rollback-on-errorxpath:1.0</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&amp;also-supported=report-all-tagged<,report-all-tagged,trim,explicit</nc:capability>
    <nc:capability>urn:ietf:params:netconf:capability:yang-librarynotification:1.0?revision=2016-06-21&amp;module-set-id=206f40597ee8e8d35d0f0e10eebccb9e<0</nc:capability>
    <nc:capability>http://tail-f.com/ns/netconf/actions/capability>urn:ietf:params:netconf:capability:interleave:1.0</nc:capability>
    <nc:capability>http://tail-f.com/ns/netconf/extensions</nc:capability>
    <nc:capability>http://openconfig.net/yang/interfaces?module=openconfig-interfaces&amp;capability>urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-0508-26<05</nc:capability>
    <nc:capability>http://openconfig.net/yang/interfaces/ethernet?module=openconfig-if-ethernet&amp;revision=2016-12-22<:capability>urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20</nc:capability>
    <nc:capability>http://openconfig.net/yang/openconfig-ext?module=openconfig-extensions&amp;revision=2015-10-09<:capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15</nc:capability>
    <nc:capability>http://openconfig.net/yang/openconfig:capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=openconfigietf-yang-types&amp;revision=20172013-0107-13<15</nc:capability>
    <nc:capability>http://openconfig.net/yang/optical-amplfier?module=openconfig-optical-amplifier&amp;revision=2016-03-31<capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2018-01-17&module-set-id=32</nc:capability>
    <nc:capability>http://openconfig.net/yang/platform?module=openconfig-platform&amp;revision=2016-06-06<:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14</nc:capability>
    <nc:capability>http://openconfig.net/yang/platform-typescapability>urn:ietf:params:xml:ns:netconf:base:1.0?module=openconfigietf-platform-typesnetconf&amp;revision=2016-06-06</nc:capability>
    <nc:capability>http://openconfig.net/yang/platform/transceiver?module=openconfig-platform-transceiver&amp;revision=2016-12-22<2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpath</nc:capability>
    <nc:capability>http://openconfig.net/yang/terminal-device:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=openconfigietf-terminalnetconf-devicenotifications&amp;revision=20162012-1202-22<06</nc:capability>
    <nc:capability>http://openconfig.net/yang/transport-line-common?module=openconfig-transport-line-common&amp;revision=2016-03-31<:capability>urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14</nc:capability>
    <nc:capability>http://openconfig.net/yang/transport-typescapability>urn:ietf:params:xml:ns:netmod:notification?module=openconfignc-transport-typesnotifications&amp;revision=20162008-1207-22<14</nc:capability>
    <nc:capability>http://tail-fexample.com/ns/aaa/1.1net/turing-machine?module=tailfturing-aaamachine&amp;revision=20152013-0612-16<27</nc:capability>
    <nc:capability>http://tail-f.com/ns/common/query?module=tailf-common-query&amp;revision=2017-12-15<capability>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01</nc:capability>
    <nc:capability>http://tail-f.com/ns/kicker?module=tailf-kicker&amp;revision=2017-09-28<capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04</nc:capability>
    <nc:capability>urn:capability>http://tail-f.com/yang/acm?module=tailf-acm&amp;revision=2013-03-07<ietf:params:xml:ns:yang:iana-if-type?module=iana-if-type&revision=2017-01-19</nc:capability>
    <nc:capability>http://tail-fopenconfig.comnet/yang/commonopenconfig-ext?module=tailfopenconfig-commonextensions&amp;revision=20182017-0304-01<11</nc:capability>
    <nc:capability>http://tail-fopenconfig.comnet/yang/commonopenconfig-monitoringtypes?module=tailfopenconfig-common-monitoringtypes&amp;revision=20132018-0605-14<05</nc:capability>
    <nc:capability>http://tail-fopenconfig.comnet/yang/confd-monitoringtypes/yang?module=tailfopenconfig-confdyang-monitoringtypes&amp;revision=20132018-0604-14<24</nc:capability>
    <nc:capability>http://tail-fopenconfig.comnet/yang/netconfplatform-monitoringtypes?module=tailfopenconfig-netconfplatform-monitoringtypes&amp;revision=20162018-1105-24<05</nc:capability>
    <nc:capability>http://tail-fopenconfig.comnet/yang/xsdtransport-types?module=tailfopenconfig-xsdtransport-types&amp;revision=20172018-1105-20<16</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:iana-crypt-hashcapability>http://openconfig.net/yang/alarms/types?module=ianaopenconfig-cryptalarm-hashtypes&amp;revision=2014-08-06&amp;features=crypt-hash-sha-512,crypt-hash-sha-256,crypt-hash-md5<2018-01-16</nc:capability>
    <nc:capability>http://openconfig.net/yang/interfaces?module=openconfig-interfaces&revision=2018-04-24</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:iana-if-typecapability>http://openconfig.net/yang/interfaces/ethernet?module=ianaopenconfig-if-typeethernet&amp;revision=20162018-1104-23<10</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-inet-typescapability>http://openconfig.net/yang/platform?module=ietfopenconfig-inet-typesplatform&amp;revision=20132018-0706-15<03</nc:capability>
    <nc: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>http://openconfig.net/yang/platform/port?module=openconfig-platform-port&revision=2018-01-20</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-acmcapability>http://openconfig.net/yang/platform/transceiver?module=ietfopenconfig-netconfplatform-acmtransceiver&amp;revision=20122018-0205-22<15</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoringcapability>http://openconfig.net/yang/terminal-device?module=ietfopenconfig-netconfterminal-monitoringdevice&amp;revision=20102017-1007-04<08</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-notificationscapability>http://openconfig.net/yang/platform/linecard?module=ietfopenconfig-netconfplatform-notificationslinecard&amp;revision=20122017-0208-06<03</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;revision=2016-06-21<capability>http://openconfig.net/yang/transport-line-common?module=openconfig-transport-line-common&revision=2017-09-08</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;revision=2013-07-15<capability>http://openconfig.net/yang/optical-transport-line-protection?module=openconfig-transport-line-protection&revision=2017-09-08</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;revision=2011-06-01</nc:capability>
    <nc:capability>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;revision=2011-06-01</nc:capability>
  </nc:capabilities>
</nc:hello>

...

if you are running both ONOS and the transponders on you local machine you can simply use a provided file:the file downloaded from github.

Code Block
onos-netcfg localhost $ONOS_ROOT/apps/odtn/api/src/test/resources/openconfig-devices.json
wget https://raw.githubusercontent.com/opennetworkinglab/ODTN-emulator/master/topo/without-tapi/device.json
onos-netcfg localhost device.json

The content of the device.json is:Please replace "10.1.8.124" by your host's IP address.

Code Block
$ cat openconfig-device.json
{
  "devices" : {
    "netconf:10127.10.80.1241:11002" : {
      "basic" : {
        "name":"cassini2",
        "driver":"infineracassini-xt3300ocnos"
      },
      "netconf" : {
        "ip" : "10127.10.80.1241",
        "port" : "11002",
        "username" : "adminroot",
        "password" : "adminroot",
        "idle-timeout" : "0"
      }
    },
    "netconf:10127.10.80.1241:11003" : {
      "basic" : {
        "name":"cassini1",
        "driver":"infineracassini-xt3300ocnos"
      },
      "netconf" : {
        "ip" : "10127.10.80.1241",
        "port" : "11003",
        "username" : "adminroot",
        "password" : "root",
        "idle-timeout" : "admin0"
      }
    }
  }
}
$ onos-netcfg localhost openconfig-device.json


Check the registered devices and ports.

You can see these devices and ports from both ONOS GUI and CLIas below:

Image Added

Also, you can see the details on ONOS CLI as listed. Each Cassini emulator has 16 client-side ports and 16 line-side ports.


Code Block
collapsetrue
onf@root >onos> devices
id=netconf:10127.10.80.1241:11002, available=true, local-status=connected 8s18s ago, role=MASTER, type=TERMINAL_DEVICE, mfr=InfineraEDGECORE, hw=XT-3300Cassini, sw=unknownOcNOS, serial=unknown, chassis=01, driver=infineracassini-xt3300ocnos, ipaddress=10127.10.80.1241, locType=none, name=netconf:10.1.8.124:11002cassini2, port=11002, protocol=NETCONF
id=netconf:10127.10.80.1241:11003, available=true, local-status=connected 8s18s ago, role=MASTER, type=TERMINAL_DEVICE, mfr=InfineraEDGECORE, hw=XT-3300Cassini, sw=unknownOcNOS, serial=unknown, chassis=01, driver=infineracassini-xt3300ocnos, ipaddress=10127.10.80.1241, locType=none, name=netconf:10.1.8.124:11003cassini1, port=11003, protocol=NETCO

onos>NETCONF
onf@root > ports
id=netconf:10127.10.80.1241:11002, available=true, local-status=connected 12s22s ago, role=MASTER, type=TERMINAL_DEVICE, mfr=InfineraEDGECORE, hw=XT-3300Cassini, sw=unknownOcNOS, serial=unknown, chassis=01, driver=infineracassini-xt3300ocnos, ipaddress=10127.10.80.1241, locType=none, name=netconf:10.1.8.124:11002cassini2, port=11002, protocol=NETCONF
  port=[GIGECLIENTCTP.1-A-2-T1](1)101, state=enabled, type=packet, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-A-2-T1channel=10101, oc-typename=GIGECLIENTCTP.1-A-2-T1xe1/1, odtn-connection-id=connection:1, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T3](3),, onos-index=101
port=102, state=enabled, type=packet, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-A-2-T3channel=10201, oc-typename=GIGECLIENTCTP.1-A-2-T3xe2/1, odtn-connection-id=connection:2, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T5](5), onos-index=102
port=103, state=enabled, type=packet, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-A-2-T5channel=10301, oc-typename=GIGECLIENTCTP.1-A-2-T5xe3/1, odtn-connection-id=connection:3, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T7](7), onos-index=103
port=104, state=enabled, type=packet, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T7logical-channel=10401, oc-typename=GIGECLIENTCTP.1-A-2-T7,xe4/1, odtn-connection-id=connection:4, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T9](9), onos-index=104
port=105, state=enabled, type=packet, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T9logical-channel=10501, oc-typename=GIGECLIENTCTP.1-A-2-T9xe5/1, odtn-connection-id=connection:5, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T11](11), onos-index=105
port=106, state=enabled, type=packet, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T11logical-channel=10601, oc-typename=GIGECLIENTCTP.1-A-2-T11xe6/1, odtn-connection-id=connection:6, odtn-port-type=client
  port=[GIGECLIENTCTP.1-L1-1-1](101), onos-index=106
port=107, state=enabled, type=ochpacket, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-L1-1-1channel=10701, oc-type=GIGECLIENTCTP.1-L1-1-1name=xe7/1, odtn-connection-id=connection:17, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L2-1-1](102)=client, onos-index=107
port=108, state=enabled, type=ochpacket, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L2-1-1logical-channel=10801, oc-type=GIGECLIENTCTP.1-L2-1-name=xe8/1, odtn-connection-id=connection:28, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L3-1-1](103)client, onos-index=108
port=109, state=enabled, type=ochpacket, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-L3-1-1channel=10901, oc-typename=GIGECLIENTCTP.1-L3-1-1xe9/1, odtn-connection-id=connection:39, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L4-1-1](104)client, onos-index=109
port=110, state=enabled, type=ochpacket, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L4-1-1logical-channel=11001, oc-typename=GIGECLIENTCTP.1-L4-1-1xe10/1, odtn-connection-id=connection:410, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L5-1-1](105)client, onos-index=110
port=111, state=enabled, type=ochpacket, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L5-1-1logical-channel=11101, oc-typename=GIGECLIENTCTP.1-L5-1-1xe11/1, odtn-connection-id=connection:511, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L6-1-1](106)client, onos-index=111
port=112, state=enabled, type=packet, speed=100000 , oc-logical-channel=11201, oc-name=xe12/1, odtn-connection-id=connection:12, odtn-port-type=client, onos-index=112
port=113, state=enabled, type=ochpacket, speed=1000100000 , oc-logical-name=GIGECLIENTCTP.1-L6-1-1channel=11301, oc-typename=GIGECLIENTCTP.1-L6-1-1xe13/1, odtn-connection-id=connection:613, odtn-port-type=line
id=netconf:10.1.8.124:11003, available=true, local-status=connected 12s ago, role=MASTERclient, onos-index=113
port=114, state=enabled, type=TERMINAL_DEVICEpacket, mfrspeed=Infinera100000 , hw=XT-3300, sw=unknown, serial=unknown, chassis=0, driver=infinera-xt3300, ipaddress=10.1.8.124, locType=none, name=netconf:10.1.8.124:11003, port=11003, protocol=NETCONF
  port=[GIGECLIENTCTP.1-A-2-T1](1)oc-logical-channel=11401, oc-name=xe14/1, odtn-connection-id=connection:14, odtn-port-type=client, onos-index=114
port=115, state=enabled, type=packet, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T1logical-channel=11501, oc-typename=GIGECLIENTCTP.1-A-2-T1xe15/1, odtn-connection-id=connection:115, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T3](3), onos-index=115
port=116, state=enabled, type=packet, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T3logical-channel=11601, oc-typename=GIGECLIENTCTP.1-A-2-T3xe16/1, odtn-connection-id=connection:216, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T5](5), onos-index=116
port=201, state=enabled, type=packetoch, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T5lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20101, oc-typename=GIGECLIENTCTP.1-A-2-T5oe1/1, odtn-connection-id=connection:31, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T7](7),line, onos-index=201, signalType=ODU4, tunable=true
port=202, state=enabled, type=packetoch, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T7lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20102, oc-type=GIGECLIENTCTP.1-A-2-T7name=oe1/2, odtn-connection-id=connection:42, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T9](9)=line, onos-index=202, signalType=ODU4, tunable=true
port=203, state=enabled, type=packetoch, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T9, oc-type=GIGECLIENTCTP.1-A-2-T9lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20201, oc-name=oe2/1, odtn-connection-id=connection:53, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T11](11)line, onos-index=203, signalType=ODU4, tunable=true
port=204, state=enabled, type=packetoch, speed=1000100000 , oc-name=GIGECLIENTCTP.1-A-2-T11lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20202, oc-type=GIGECLIENTCTP.1-A-2-T11name=oe2/2, odtn-connection-id=connection:64, odtn-port-type=client
  port=[GIGECLIENTCTP.1-L1-1-1](101)line, onos-index=204, signalType=ODU4, tunable=true
port=205, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L1-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20301, oc-typename=GIGECLIENTCTP.1-L1-1-1oe3/1, odtn-connection-id=connection:15, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L2-1-1](102), onos-index=205, signalType=ODU4, tunable=true
port=206, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L2-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20302, oc-type=GIGECLIENTCTP.1-L2-1-1name=oe3/2, odtn-connection-id=connection:26, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L3-1-1](103), onos-index=206, signalType=ODU4, tunable=true
port=207, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L3-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20401, oc-typename=GIGECLIENTCTP.1-L3-1-1oe4/1, odtn-connection-id=connection:37, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L4-1-1](104), onos-index=207, signalType=ODU4, tunable=true
port=208, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L4-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20402, oc-type=GIGECLIENTCTP.1-L4-1-1name=oe4/2, odtn-connection-id=connection:48, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L5-1-1](105), onos-index=208, signalType=ODU4, tunable=true
port=209, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L5-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20501, oc-typename=GIGECLIENTCTP.1-L5-1-1oe5/1, odtn-connection-id=connection:59, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L6-1-1](106), onos-index=209, signalType=ODU4, tunable=true
port=210, state=enabled, type=och, speed=1000100000 , oc-name=GIGECLIENTCTP.1-L6-1-1lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20502, oc-type=GIGECLIENTCTP.1-L6-1-1name=oe5/2, odtn-connection-id=connection:610, odtn-port-type=line

At the same time, device event and port event kick the topology discovery process.

Topology discovery process requests NETCONF "get" and gets the device config and operational state, then it generates TAPI Node/NEP/SIP corresponding to devices and their ports.

After device registration and discovery, we can see the TAPI topology state updated.

Code Block
onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <service-interface-point>
    <uuid>86d7bcb3-43c5-4dbd-800e-026731e8d585</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11002/[GIGECLIENTCTP.1-A-2-T7](7)</value>
    </name>
  </service-interface-point>
  <service-interface-point>
    <uuid>c59b459d-34d3-4281-b02f-54339fe89cf8</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11002/[GIGECLIENTCTP.1-A-2-T9](9)</value>
    </name>
  </service-interface-point>
  <service-interface-point>
    <uuid>b1272233-2682-4af3-954b-7c02ee085628</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11002/[GIGECLIENTCTP.1-A-2-T5](5)</value>
    </name>
  </service-interface-point>
  <service-interface-point>
    <uuid>c47fe15e-a3ee-4ea2-87f9-f79b7e5b0c0b</uuid>
    <layer-protocol-name>PHOTONIC_MEDIA</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11003/[GIGECLIENTCTP.1-L6-1-1](106)</value>
    </name>
  </service-interface-point>
  <topology-context xmlns="urn:onf:otcc:yang:tapi-topology">
    <topology>
      <node>
        <owned-node-edge-point>
          <mapped-service-interface-point>
            <service-interface-point-uuid>395390ca-4bef-4de3-bc97-68227600c5b1</service-interface-point-uuid>
          </mapped-service-interface-point>
          <cep-list xmlns="urn:onf:otcc:yang:tapi-connectivity">
            <connection-end-point>
              <parent-node-edge-point>
                <node-edge-point-uuid>745eb44d-6308-4dc9-aac9-6609fcc91741</node-edge-point-uuid>
                <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
                <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>
              </parent-node-edge-point>
              <uuid>aeefa738-acf7-4e72-b55e-7b0987df7428</uuid>
            </connection-end-point>
          </cep-list>
...
      </node>
    </topology>
  </topology-context>
  <service-interface-point>
    <uuid>2bf713b6-d53b-4631-be34-4a93ac58b58a</uuid>
    <layer-protocol-name>PHOTONIC_MEDIA</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11003/[GIGECLIENTCTP.1-L4-1-1](104)</value>
    </name>
  </service-interface-point>
  <service-interface-point>
    <uuid>00b3b767-bdb3-449c-8d18-c89e1d6e2cee</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11003/[GIGECLIENTCTP.1-A-2-T3](3)</value>
    </name>
  </service-interface-point>
...
  <service-interface-point>
    <uuid>9eaffa1f-653b-4f05-b759-ff18c98f65c6</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:10.1.8.124:11002/[GIGECLIENTCTP.1-A-2-T3](3)</value>
    </name>
  </service-interface-point>
</context>

Currently, we don't have any link discovery feature, so we also need to register links between devices.

...

, onos-index=210, signalType=ODU4, tunable=true
port=211, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20601, oc-name=oe6/1, odtn-connection-id=connection:11, odtn-port-type=line, onos-index=211, signalType=ODU4, tunable=true
port=212, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20602, oc-name=oe6/2, odtn-connection-id=connection:12, odtn-port-type=line, onos-index=212, signalType=ODU4, tunable=true
port=213, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20701, oc-name=oe7/1, odtn-connection-id=connection:13, odtn-port-type=line, onos-index=213, signalType=ODU4, tunable=true
port=214, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20702, oc-name=oe7/2, odtn-connection-id=connection:14, odtn-port-type=line, onos-index=214, signalType=ODU4, tunable=true
port=215, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20801, oc-name=oe8/1, odtn-connection-id=connection:15, odtn-port-type=line, onos-index=215, signalType=ODU4, tunable=true
port=216, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20802, oc-name=oe8/2, odtn-connection-id=connection:16, odtn-port-type=line, onos-index=216, signalType=ODU4, tunable=true
id=netconf:127.0.0.1:11003, available=true, local-status=connected 22s ago, role=MASTER, type=TERMINAL_DEVICE, mfr=EDGECORE, hw=Cassini, sw=OcNOS, serial=, chassis=1, driver=cassini-ocnos, ipaddress=127.0.0.1, locType=none, name=cassini1, port=11003, protocol=NETCONF
port=101, state=enabled, type=packet, speed=100000 , oc-logical-channel=10101, oc-name=xe1/1, odtn-connection-id=connection:1, odtn-port-type=client, onos-index=101
port=102, state=enabled, type=packet, speed=100000 , oc-logical-channel=10201, oc-name=xe2/1, odtn-connection-id=connection:2, odtn-port-type=client, onos-index=102
port=103, state=enabled, type=packet, speed=100000 , oc-logical-channel=10301, oc-name=xe3/1, odtn-connection-id=connection:3, odtn-port-type=client, onos-index=103
port=104, state=enabled, type=packet, speed=100000 , oc-logical-channel=10401, oc-name=xe4/1, odtn-connection-id=connection:4, odtn-port-type=client, onos-index=104
port=105, state=enabled, type=packet, speed=100000 , oc-logical-channel=10501, oc-name=xe5/1, odtn-connection-id=connection:5, odtn-port-type=client, onos-index=105
port=106, state=enabled, type=packet, speed=100000 , oc-logical-channel=10601, oc-name=xe6/1, odtn-connection-id=connection:6, odtn-port-type=client, onos-index=106
port=107, state=enabled, type=packet, speed=100000 , oc-logical-channel=10701, oc-name=xe7/1, odtn-connection-id=connection:7, odtn-port-type=client, onos-index=107
port=108, state=enabled, type=packet, speed=100000 , oc-logical-channel=10801, oc-name=xe8/1, odtn-connection-id=connection:8, odtn-port-type=client, onos-index=108
port=109, state=enabled, type=packet, speed=100000 , oc-logical-channel=10901, oc-name=xe9/1, odtn-connection-id=connection:9, odtn-port-type=client, onos-index=109
port=110, state=enabled, type=packet, speed=100000 , oc-logical-channel=11001, oc-name=xe10/1, odtn-connection-id=connection:10, odtn-port-type=client, onos-index=110
port=111, state=enabled, type=packet, speed=100000 , oc-logical-channel=11101, oc-name=xe11/1, odtn-connection-id=connection:11, odtn-port-type=client, onos-index=111
port=112, state=enabled, type=packet, speed=100000 , oc-logical-channel=11201, oc-name=xe12/1, odtn-connection-id=connection:12, odtn-port-type=client, onos-index=112
port=113, state=enabled, type=packet, speed=100000 , oc-logical-channel=11301, oc-name=xe13/1, odtn-connection-id=connection:13, odtn-port-type=client, onos-index=113
port=114, state=enabled, type=packet, speed=100000 , oc-logical-channel=11401, oc-name=xe14/1, odtn-connection-id=connection:14, odtn-port-type=client, onos-index=114
port=115, state=enabled, type=packet, speed=100000 , oc-logical-channel=11501, oc-name=xe15/1, odtn-connection-id=connection:15, odtn-port-type=client, onos-index=115
port=116, state=enabled, type=packet, speed=100000 , oc-logical-channel=11601, oc-name=xe16/1, odtn-connection-id=connection:16, odtn-port-type=client, onos-index=116
port=201, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20101, oc-name=oe1/1, odtn-connection-id=connection:1, odtn-port-type=line, onos-index=201, signalType=ODU4, tunable=true
port=202, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20102, oc-name=oe1/2, odtn-connection-id=connection:2, odtn-port-type=line, onos-index=202, signalType=ODU4, tunable=true
port=203, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20201, oc-name=oe2/1, odtn-connection-id=connection:3, odtn-port-type=line, onos-index=203, signalType=ODU4, tunable=true
port=204, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20202, oc-name=oe2/2, odtn-connection-id=connection:4, odtn-port-type=line, onos-index=204, signalType=ODU4, tunable=true
port=205, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20301, oc-name=oe3/1, odtn-connection-id=connection:5, odtn-port-type=line, onos-index=205, signalType=ODU4, tunable=true
port=206, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20302, oc-name=oe3/2, odtn-connection-id=connection:6, odtn-port-type=line, onos-index=206, signalType=ODU4, tunable=true
port=207, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20401, oc-name=oe4/1, odtn-connection-id=connection:7, odtn-port-type=line, onos-index=207, signalType=ODU4, tunable=true
port=208, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20402, oc-name=oe4/2, odtn-connection-id=connection:8, odtn-port-type=line, onos-index=208, signalType=ODU4, tunable=true
port=209, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20501, oc-name=oe5/1, odtn-connection-id=connection:9, odtn-port-type=line, onos-index=209, signalType=ODU4, tunable=true
port=210, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20502, oc-name=oe5/2, odtn-connection-id=connection:10, odtn-port-type=line, onos-index=210, signalType=ODU4, tunable=true
port=211, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20601, oc-name=oe6/1, odtn-connection-id=connection:11, odtn-port-type=line, onos-index=211, signalType=ODU4, tunable=true
port=212, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20602, oc-name=oe6/2, odtn-connection-id=connection:12, odtn-port-type=line, onos-index=212, signalType=ODU4, tunable=true
port=213, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20701, oc-name=oe7/1, odtn-connection-id=connection:13, odtn-port-type=line, onos-index=213, signalType=ODU4, tunable=true
port=214, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20702, oc-name=oe7/2, odtn-connection-id=connection:14, odtn-port-type=line, onos-index=214, signalType=ODU4, tunable=true
port=215, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20801, oc-name=oe8/1, odtn-connection-id=connection:15, odtn-port-type=line, onos-index=215, signalType=ODU4, tunable=true
port=216, state=enabled, type=och, speed=100000 , lambda={"channelSpacing":"CHL_50GHZ","gridType":"DWDM","slotGranularity":4,"spacingMultiplier":1}, oc-logical-channel=20802, oc-name=oe8/2, odtn-connection-id=connection:16, odtn-port-type=line, onos-index=216, signalType=ODU4, tunable=true


At the same time, device event and port event kick the topology discovery process.

Topology discovery process requests NETCONF <get> and gets the device config and operational state, then it generates TAPI Node/NEP/SIP corresponding to devices and their ports.

After device registration and discovery, we can see the TAPI topology state updated: <service-interface-point> and <topology-context> are filled.


Code Block
onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <service-interface-point>
    <uuid>5b05bb43-bd95-449f-a4ac-011b43f9d078</uuid>
    <layer-protocol-name>PHOTONIC_MEDIA</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:127.0.0.1:11002/209</value>
    </name>
  </service-interface-point>
....
  <topology-context
Code Block
$ cat openconfig-device-link.json
{
  "links": {
    "netconf:10.128.200.1:11000/201-netconf:10.128.200.1:11001/201": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    },
    "netconf:10.128.200.1:11000/202-netconf:10.128.200.1:11001/202": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    },
    "netconf:10.128.200.1:11000/203-netconf:10.128.200.1:11001/203": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    },
    "netconf:10.128.200.1:11000/204-netconf:10.128.200.1:11001/204": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    },
    "netconf:10.128.200.1:11000/205-netconf:10.128.200.1:11001/205": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    },
    "netconf:10.128.200.1:11000/206-netconf:10.128.200.1:11001/206": {
      "basic": {
        "type": "OPTICAL",
        "metric": 1,
        "durable": true,
        "bidirectional": true
      }
    }
  }
}
$ onos-netcfg localhost openconfig-device-link.json

After that, we can find that links are registered and TAPI link are also set in DCS.

Image Removed

Code Block
onos> links
src=netconf:10.1.8.124:11002/101, dst=netconf:10.1.8.124:11003/101, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11002/102, dst=netconf:10.1.8.124:11003/102, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11002/103, dst=netconf:10.1.8.124:11003/103, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11002/104, dst=netconf:10.1.8.124:11003/104, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11002/105, dst=netconf:10.1.8.124:11003/105, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11002/106, dst=netconf:10.1.8.124:11003/106, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/101, dst=netconf:10.1.8.124:11002/101, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/102, dst=netconf:10.1.8.124:11002/102, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/103, dst=netconf:10.1.8.124:11002/103, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/104, dst=netconf:10.1.8.124:11002/104, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/105, dst=netconf:10.1.8.124:11002/105, type=DIRECT, state=ACTIVE, expected=false
src=netconf:10.1.8.124:11003/106, dst=netconf:10.1.8.124:11002/106, type=DIRECT, state=ACTIVE, expected=false

onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-commontopology">
  <service-interface-point>
    ...<topology>
      </node><node>
      <link>
        <node  <owned-node-edge-point>
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>
<cep-list xmlns="urn:onf:otcc:yang:tapi-connectivity">
            <topology<connection-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>end-point>
          <node-edge-point-uuid>5cfa12d9-0891-4408-8a1f-924791c99b20</    <parent-node-edge-point-uuid>point>
......
        </node-edge-point>node>
        <uuid>c57c5c6c-ad6a-40aa-a229-d87bf79f0fc2</uuid><node>
        <node<owned-node-edge-point>
          <node<mapped-uuid>21c8368aservice-6e5d-4ada-82b7-d61c96375644</node-uuid>
interface-point>
            <topology<service-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>c812a83e-9da4-40f4-9af9-8a56d153acc0</node-edgeinterface-point-uuid>d525468e-f833-4604-b186-29752e76075b</service-interface-point-uuid>
        </node-edge-point>
      </link>
      <link>
        <node-edge-point>mapped-service-interface-point>
......
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-<uuid>29c557c2-3c5a-4ec2-bc90-21d823f66229</uuid>
    </topology>
      <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>222857c5-c046-469f-bc00-004f2e3edc89</node-edge-point-uuid>
        </node-edge-point>
        <uuid>449eba6c-8287-4563-8b3b-2d04f6e78bcc</uuid></topology-context>


Currently, we don't have any link discovery feature, so we also need to register links between devices.

Temporary, all optical channels are represented as different links, and all optical channel endpoints are dealt with as ConnectPoint in onos. It might not be ideal and we should re-consider how to map TAPI topology models and onos models.

You can use the link file downloaded from github as below:

Code Block
wget https://raw.githubusercontent.com/opennetworkinglab/ODTN-emulator/master/topo/without-tapi/link.json
onos-netcfg localhost link.json

The content of this link json is:

Code Block
$ cat link.json
{
  "links": {
    "netconf:127.0.0.1:11002/201-netconf:127.0.0.1:11003/201": {
        <node-edge-point>"basic": {
        "type":  <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>
"OPTICAL",
        "metric": 1,
    <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
    "durable": true,
     <node-edge-point-uuid>4aab4e92-c33a-40a4-b4ed-ab109b2c1426</node-edge-point-uuid>   "bidirectional": true
      }
  </node-edge-point>
  },
    </link>"netconf:127.0.0.1:11002/202-netconf:127.0.0.1:11003/202": {
      "basic": <link>{
        <node-edge-point>"type": "OPTICAL",
          <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>"metric": 1,
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>"durable": true,
          <node-edge-point-uuid>a2550979-a641-46fd-925d-52630cf0d8d4</node-edge-point-uuid>"bidirectional": true
        </node-edge-point>}
    },
    <uuid>cec3e6e0-5318-439f-820a-d2cf9e685a59</uuid>"netconf:127.0.0.1:11002/203-netconf:127.0.0.1:11003/203": {
        <node-edge-point>"basic": {
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>"type": "OPTICAL",
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>"metric": 1,
        "durable":  <node-edge-point-uuid>d5221c04-a9ee-4784-b81a-a8e183763443</node-edge-point-uuid>
true,
         </node-edge-point>"bidirectional": true
      </link>}
    },
    <link>"netconf:127.0.0.1:11002/204-netconf:127.0.0.1:11003/204": {
        <node-edge-point>"basic": {
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>"type": "OPTICAL",
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>"metric": 1,
          <node-edge-point-uuid>222857c5-c046-469f-bc00-004f2e3edc89</node-edge-point-uuid>"durable": true,
        </node-edge-point>"bidirectional": true
        <uuid>6b3c5d66-1f9c-43be-8fe6-b0dc4c0e9489</uuid>}
    },
    <node-edge-point>"netconf:127.0.0.1:11002/205-netconf:127.0.0.1:11003/205": {
          <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>"basic": {
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>"type": "OPTICAL",
          <node-edge-point-uuid>4aab4e92-c33a-40a4-b4ed-ab109b2c1426</node-edge-point-uuid>"metric": 1,
        </node-edge-point>
"durable": true,
         </link>"bidirectional": true
      <uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</uuid>
      <link>}
    },
    "netconf:127.0.0.1:11002/206-netconf:127.0.0.1:11003/206": {
        <node-edge-point>"basic": {
          <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>
  "type": "OPTICAL",
        <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>"metric": 1,
        "durable":  <node-edge-point-uuid>a2550979-a641-46fd-925d-52630cf0d8d4</node-edge-point-uuid>
true,
         </node-edge-point>
"bidirectional": true
      }
     <uuid>36bac593-0aed-4851-a3a4-7437dad523a4</uuid>
}
  }
}


After that, we can find that links are registered and TAPI link are also set in DCS.

Image Added


Code Block
onf@root > links        <node-edge-point>
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
            <node-edge-point-uuid>d5221c04-a9ee-4784-b81a-a8e183763443</node-edge-point-uuid>
        </node-edge-point>
      </link>
      <link>
        <node-edge-point>
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>e5f95400-befe-42d9-bf81-d046238f090f</node-edge-point-uuid>
        </node-edge-point>
        <uuid>58fc9a55-486a-436c-a74a-f06e5a4cb13b</uuid>
        <node-edge-point>
          <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>53a00f05-c9b4-4507-953e-f155f2d7d7a3</node-edge-point-uuid>
        </node-edge-point>
      </link>
      <link>
        <node-edge-point>
          <node-uuid>21c8368a-6e5d-4ada-82b7-d61c96375644</node-uuid>
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>d40c89dc-001c-40b1-b853-79db8b795280</node-edge-point-uuid>
        </node-edge-point>
        <uuid>97cb3ce7-0e79-40b2-ba1b-f7c4ae1d8ae1</uuid>
        <node-edge-point>
          <node-uuid>a0190d62-609e-4f11-bf24-f35000dbea53</node-uuid>
          <topology-uuid>c4b7a7fb-32b9-4f11-a146-1b7df7f59839</topology-uuid>
          <node-edge-point-uuid>e5919ecd-af3a-40ea-be80-f2b81384cfbd</node-edge-point-uuid>
        </node-edge-point>
      </link>
      <node>
    ...
  </topology>
  ...
</context>

All devices and links which needs for this demonstration are already registered, now we have following TAPI topology in DCS and we can use this stored topology and TAPI connectivity-service NBI
to request end-to-end path request.

Image Removed

We can also get the TAPI ServiceInterfacePoint via RESTCONF NBI.  (There is an limitation, please check Available TAPI NBI endpoints)

Code Block
# The content of empty-body.json is just {}. 
$ curl -u onos:rocks -X POST -H Content-Type:application/json -T empty-body.json http://localhost:8181/onos/restconf/operations/tapi-common:get-service-interface-point-list | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1188  100  1184  100     4  16120     54 --:--:-- --:--:-- --:--:-- 16219
{
  "tapi-common:output": {
    "sip": [
      {
        "uuid": "395390ca-4bef-4de3-bc97-68227600c5b1"
      },
      {
        "uuid": "9943d5bb-2e1c-4f93-ac0a-600ea58d592a"
      },
      {
        "uuid": "ce443998-7a66-45d0-84ff-1af16302ed0e"
      },
      {
        "uuid": "b8f7dba8-5fc3-4e6b-8c44-95eea70f3beb"
      },
      {
        "uuid": "5fec5868-0c19-4a93-829c-85b798252fc6"
      },
...{ "uuid": "242e874e-d9f4-4b59-b946-24e39f568e64" } ] } } # by using jq filter, we can get SIP uuid directly $ curl -u onos:rocks -X POST -H Content-Type:application/json -T empty-body.json http://localhost:8181/onos/restconf/operations/tapi-common:get-service-interface-point-list | jq '.[].sip[][]' "395390ca-4bef-4de3-bc97-68227600c5b1" "9943d5bb-2e1c-4f93-ac0a-600ea58d592a" "ce443998-7a66-45d0-84ff-1af16302ed0e" "b8f7dba8-5fc3-4e6b-8c44-95eea70f3beb" "5fec5868-0c19-4a93-829c-85b798252fc6" "c47fe15e-a3ee-4ea2-87f9-f79b7e5b0c0b" "170ec740-69c0-4c05-9fd4-7135ff222218" "eb024224-71ac-4b31-aed8-9ed2d0a1c6ee" "2bf713b6-d53b-4631-be34-4a93ac58b58a" "94b1f5ef-cbe5-47c6-8546-3014429cb740" "ef2508a2-1eef-4ed1-bcc0-480fe6869c28" "00b3b767-bdb3-449c-8d18-c89e1d6e2cee" "3de90438-8d5c-4632-a047-dfb149cf68ec" "cbc18d0b-039d-4c3d-9887-953a443debc4" "b1272233-2682-4af3-954b-7c02ee085628" "0839e097-2f9a-4d35-93a5-67b80e677b03" "c59b459d-34d3-4281-b02f-54339fe89cf8" "9eaffa1f-653b-4f05-b759-ff18c98f65c6" "f76f96c0-ef92-4d9d-b862-c5f2bb1caff8" "bef525ee-c8db-48cf-bad9-d4ee8d7ee046" "86d7bcb3-43c5-4dbd-800e-026731e8d585" "94af236d-8de9-4fcf-b770-5a1b96f69c7f" "d71eabcf-fc5e-40b8-b990-23d939387dfb" "242e874e-d9f4-4b59-b946-24e39f568e64"

Since devices/links registration and TAPI topology creation are done, we are ready to request path creation to ONOS/ODTN.

Create TAPI Connectivity Service

Send create-connectivity-service request to onos via RESTCONF NBI.

17:25:21
src=netconf:127.0.0.1:11002/201, dst=netconf:127.0.0.1:11003/201, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11002/202, dst=netconf:127.0.0.1:11003/202, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11002/203, dst=netconf:127.0.0.1:11003/203, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11002/204, dst=netconf:127.0.0.1:11003/204, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11002/205, dst=netconf:127.0.0.1:11003/205, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11002/206, dst=netconf:127.0.0.1:11003/206, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/201, dst=netconf:127.0.0.1:11002/201, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/202, dst=netconf:127.0.0.1:11002/202, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/203, dst=netconf:127.0.0.1:11002/203, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/204, dst=netconf:127.0.0.1:11002/204, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/205, dst=netconf:127.0.0.1:11002/205, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true
src=netconf:127.0.0.1:11003/206, dst=netconf:127.0.0.1:11002/206, type=OPTICAL, state=ACTIVE, durable=true, metric=1.0, expected=true

onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <service-interface-point>
    ...
  <topology>
      <link>
        <node-edge-point>
          <node-uuid>d136bb1e-bad5-4cb3-bc94-e10831691ad3</node-uuid>
          <topology-uuid>29c557c2-3c5a-4ec2-bc90-21d823f66229</topology-uuid>
          <node-edge-point-uuid>ac02a247-d940-42f5-9b1b-c548cd4b86ff</node-edge-point-uuid>
        </node-edge-point>
        <uuid>65b2f0c1-8cd2-424e-96de-7e1da2de2cc1</uuid>
        <node-edge-point>
          <node-uuid>f6e8a2f4-4824-4702-beaf-4b48a4b3bf1f</node-uuid>
          <topology-uuid>29c557c2-3c5a-4ec2-bc90-21d823f66229</topology-uuid>
          <node-edge-point-uuid>206aec84-31e4-4337-b5fa-8558ed774804</node-edge-point-uuid>
        </node-edge-point>
      </link>
    ...
      <node>
    ...
  </topology>
  ...
</context>


All devices and links which needs for this demonstration are already registered, now we have following TAPI topology in DCS and we can use this stored topology and TAPI connectivity-service NBI
to request end-to-end path request.

Image Added


We can also get the TAPI ServiceInterfacePoint via RESTCONF NBI.  (There is a limitation, please check Available TAPI NBI endpoints)


Code Block
# The content of empty-body.json is just {}. 
$ curl -u onos:rocks -X POST -H Content-Type:application/json -T empty-body.json http://localhost:8181/onos/restconf/operations/tapi-common:get-service-interface-point-list | jq

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    
Code Block
# These two service-interface-point-id should be client port (value-name: onos-cp)
$ cat create-connectivity-service.json
{
    "tapi-connectivity:input":
    {
        "end-point" : [
            {
                "local-id": "foo",
                "service-interface-point": {
                    "service-interface-point-uuid" : "7b4385cf-8f4a-4161-bf90-d084acb1015f"
                }
            }
            ,
            {
                "local-id": "bar",
                "service-interface-point": {
                    "service-interface-point-uuid" : "fcc00b2d-ae2c-4add-94c6-5109bf62c9ce"
       Dload  Upload   Total   Spent }
   Left  Speed
100  3107  100  3104 }
 100     3  ]
15411    }
}

$ curl -u onos:rocks -X POST -H Content-Type:application/json -T create-connectivity-service.json http://localhost:8181/onos/restconf/operations/tapi-connectivity:create-connectivity-service | jq 14 --:--:-- --:--:-- --:--:-- 15366
{
  "tapi-connectivitycommon:output": {
    "servicesip": [
      {
        "uuid": "20b8de5601836dcd-f2c37ceb-46dc4c76-a6059900-4c36e44829873b8a8a44256b",
      "end-point": [
  
      },
      {
          "local-iduuid": "234184e57ecae6a4-b5afc2a0-45dd4586-a27e948a-6818e96aad877ea1cec9a24c",
      },
     "service-interface-point": {
            "service-interface-point-id"uuid": "7b4385cfcccf1c8f-8f4ab953-4161416f-bf90a57b-d084acb1015fe94eeb70da90"
          }
        },
        {
          "local-iduuid": "343b8d8a59fbbd3b-384f5e03-4af84d20-9672bfb6-fa2eac4d2f7f187d441726cb",
      },
     "service-interface-point": {
            "service-interface-point-id"uuid": "fcc00b2de60f4cd0-ae2cb705-4add4b48-94c6-5109bf62c9ce"
926b-0be47a163b5b"
      },
      {
       }
 "uuid": "f04614ae-1395-408e-990b-b0dc49ce6fc6"
      },
      ],{
        "connectionuuid": [
"e73eb4a2-dcda-41ac-8073-126beebcbe9e"
      },
      {
          "connection-iduuid": "31733d3a4ddf0ae9-2527ca55-44734e2f-93df9c2c-ae654c93b68770e50ebe76f4"
        },
......
      ]
    }
  }
}}
}


Since devices/links registration and TAPI topology creation are done, we are ready to request path creation to ONOS/ODTN.

Create TAPI Connectivity Service

Send create-connectivity-service request to onos via RESTCONF NBI.


Code Block
# Create client-side service


Checking the TAPI context, you can see following objects are created:

...