You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

This page describes the ODTN Phase1.0 demonstration details which is done at NTT Communication's lab environment, and what is achieved by ODTN Phase1.0 development.

Scope

  • Point to point network
  • Directly connected transponders, or OLS configured out-of-band
  • TAPI NB, OpenConfig SB
  • No optical configuration (Configure only port enable/disable and frame mapping)

Available Devices

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

Available TAPI NBI endpoints 

  • tapi-common
    • get-service-interface-point-details
    • get-service-interface-point-list *
  • tapi-connectivity-service
    • create-connectivity-service
    • delete-connectivity-service
    • get-connectivity-service-details
    • get-connectivity-service-list

* Not working correctly and only one entity will be returned even if there are more than two entities. This limitation is caused by the issue that onos-yang-tool cannot deal with list without keys.
This will be fixed in the near future, please check: https://groups.google.com/a/opennetworking.org/forum/#!topic/odtn-sw/ls-p9JkKnuo


Demo Setup and Scenario for Infinera XT3300


Installation

Install and setup onos as a single-instance.

Setup pair of above available transponders or NETCONF emulators

  • In this demo, confd based NETCONF emulator is used

Demo

Setup onos


$ 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                 1.14.0.SNAPSHOT YANG Compiler and Runtime
*   9 org.onosproject.config               1.14.0.SNAPSHOT Dynamic Configuration
*  10 org.onosproject.configsync           1.14.0.SNAPSHOT Dynamic Configuration Synchronizer
*  11 org.onosproject.faultmanagement      1.14.0.SNAPSHOT Fault Management
*  12 org.onosproject.netconf              1.14.0.SNAPSHOT NETCONF Provider
*  13 org.onosproject.configsync-netconf   1.14.0.SNAPSHOT Dynamic Configuration Synchronizer for NETCONF
*  28 org.onosproject.drivers              1.14.0.SNAPSHOT Default Drivers
*  34 org.onosproject.restconf             1.14.0.SNAPSHOT RESTCONF Application Module
*  57 org.onosproject.protocols.restconfserver 1.14.0.SNAPSHOT RESTCONF Server Module
*  89 org.onosproject.models.tapi          1.14.0.SNAPSHOT ONF Transport API YANG Models
*  90 org.onosproject.models.ietf          1.14.0.SNAPSHOT IETF YANG Models
*  91 org.onosproject.models.openconfig    1.14.0.SNAPSHOT OpenConfig YANG Models
*  92 org.onosproject.models.openconfig-infinera 1.14.0.SNAPSHOT OpenConfig Infinera XT3300 YANG Models
*  93 org.onosproject.odtn-api             1.14.0.SNAPSHOT ODTN API & Utilities Application
*  94 org.onosproject.drivers.netconf      1.14.0.SNAPSHOT Generic NETCONF Drivers
*  95 org.onosproject.drivers.odtn-driver  1.14.0.SNAPSHOT ODTN Driver
*  96 org.onosproject.odtn-service         1.14.0.SNAPSHOT ODTN Service Application


Initially there are no devices/ports/links registered.


onos> devices
onos> ports
onos> links


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


onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <topology xmlns="urn:onf:otcc:yang:tapi-topology">
    <uuid>ab09b19e-c09a-4f0c-8f72-af072b3a8071</uuid>
  </topology>
</context>

Device registration and topology discovery

Register transponder devices using onos-netcfg.

$ cat openconfig-device.json
{
  "devices" : {
    "netconf:172.24.3.5:11001" : {
      "basic" : {
        "driver":"odtn"
      },
      "netconf" : {
        "ip" : "172.24.3.5",
        "port" : "11001",
        "username" : "admin",
        "password" : "admin"
      }
    },
    "netconf:172.24.3.5:11011" : {
      "basic" : {
        "driver":"odtn"
      },
      "netconf" : {
        "ip" : "172.24.3.5",
        "port" : "11011",
        "username" : "admin",
        "password" : "admin"
      }
    },
    "netconf:172.24.3.5:11002" : {
      "basic" : {
        "driver":"infinera-xt3300"
      },
      "netconf" : {
        "ip" : "172.24.3.5",
        "port" : "11002",
        "username" : "admin",
        "password" : "admin"
      }
    },
    "netconf:172.24.3.5:11003" : {
      "basic" : {
        "driver":"infinera-xt3300"
      },
      "netconf" : {
        "ip" : "172.24.3.5",
        "port" : "11003",
        "username" : "admin",
        "password" : "admin"
      }
    }
  }
}
$ onos-netcfg localhost openconfig-device.json


Check the registered devices and ports.

You can see these devices and ports from both ONOS GUI and CLI.


onos> devices
id=netconf:172.24.3.5:11001, available=true, local-status=connected 20s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=odtn, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11001, port=11001, protocol=NETCONF
id=netconf:172.24.3.5:11002, available=true, local-status=connected 20s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=infinera-xt3300, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11002, port=11002, protocol=NETCONF
id=netconf:172.24.3.5:11003, available=true, local-status=connected 20s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=infinera-xt3300, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11003, port=11003, protocol=NETCONF
id=netconf:172.24.3.5:11011, available=true, local-status=connected 20s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=odtn, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11011, port=11011, protocol=NETCONF

onos> ports
id=netconf:172.24.3.5:11001, available=true, local-status=connected 23s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=odtn, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11001, port=11001, protocol=NETCONF
  port=[OPTCHANNEL_1_1_4](41), state=enabled, type=och, speed=1000 , oc-name=OPTCHANNEL_1_1_4, oc-type=oc-opt-types:OPTICAL_CHANNEL, odtn-connection-id=the-only-one, odtn-port-type=line, onos-index=41
  port=[TRANSCEIVER_1_1_4_1](42), state=enabled, type=packet, speed=1000 , oc-name=TRANSCEIVER_1_1_4_1, oc-type=oc-platform-types:TRANSCEIVER, odtn-connection-id=the-only-one, odtn-port-type=client, onos-index=42
id=netconf:172.24.3.5:11002, available=true, local-status=connected 23s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=infinera-xt3300, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11002, port=11002, protocol=NETCONF
  port=[GIGECLIENTCTP.1-A-2-T1](1), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T1, oc-type=GIGECLIENTCTP.1-A-2-T1, odtn-connection-id=connection:1, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T3](3), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T3, oc-type=GIGECLIENTCTP.1-A-2-T3, odtn-connection-id=connection:2, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T5](5), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T5, oc-type=GIGECLIENTCTP.1-A-2-T5, odtn-connection-id=connection:3, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T7](7), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T7, oc-type=GIGECLIENTCTP.1-A-2-T7, odtn-connection-id=connection:4, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T9](9), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T9, oc-type=GIGECLIENTCTP.1-A-2-T9, odtn-connection-id=connection:5, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T11](11), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T11, oc-type=GIGECLIENTCTP.1-A-2-T11, odtn-connection-id=connection:6, odtn-port-type=client
  port=[GIGECLIENTCTP.1-L1-1-1](101), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L1-1-1, oc-type=GIGECLIENTCTP.1-L1-1-1, odtn-connection-id=connection:1, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L2-1-1](102), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L2-1-1, oc-type=GIGECLIENTCTP.1-L2-1-1, odtn-connection-id=connection:2, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L3-1-1](103), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L3-1-1, oc-type=GIGECLIENTCTP.1-L3-1-1, odtn-connection-id=connection:3, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L4-1-1](104), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L4-1-1, oc-type=GIGECLIENTCTP.1-L4-1-1, odtn-connection-id=connection:4, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L5-1-1](105), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L5-1-1, oc-type=GIGECLIENTCTP.1-L5-1-1, odtn-connection-id=connection:5, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L6-1-1](106), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L6-1-1, oc-type=GIGECLIENTCTP.1-L6-1-1, odtn-connection-id=connection:6, odtn-port-type=line
id=netconf:172.24.3.5:11003, available=true, local-status=connected 24s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=infinera-xt3300, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11003, port=11003, protocol=NETCONF
  port=[GIGECLIENTCTP.1-A-2-T1](1), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T1, oc-type=GIGECLIENTCTP.1-A-2-T1, odtn-connection-id=connection:1, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T3](3), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T3, oc-type=GIGECLIENTCTP.1-A-2-T3, odtn-connection-id=connection:2, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T5](5), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T5, oc-type=GIGECLIENTCTP.1-A-2-T5, odtn-connection-id=connection:3, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T7](7), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T7, oc-type=GIGECLIENTCTP.1-A-2-T7, odtn-connection-id=connection:4, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T9](9), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T9, oc-type=GIGECLIENTCTP.1-A-2-T9, odtn-connection-id=connection:5, odtn-port-type=client
  port=[GIGECLIENTCTP.1-A-2-T11](11), state=enabled, type=packet, speed=1000 , oc-name=GIGECLIENTCTP.1-A-2-T11, oc-type=GIGECLIENTCTP.1-A-2-T11, odtn-connection-id=connection:6, odtn-port-type=client
  port=[GIGECLIENTCTP.1-L1-1-1](101), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L1-1-1, oc-type=GIGECLIENTCTP.1-L1-1-1, odtn-connection-id=connection:1, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L2-1-1](102), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L2-1-1, oc-type=GIGECLIENTCTP.1-L2-1-1, odtn-connection-id=connection:2, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L3-1-1](103), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L3-1-1, oc-type=GIGECLIENTCTP.1-L3-1-1, odtn-connection-id=connection:3, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L4-1-1](104), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L4-1-1, oc-type=GIGECLIENTCTP.1-L4-1-1, odtn-connection-id=connection:4, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L5-1-1](105), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L5-1-1, oc-type=GIGECLIENTCTP.1-L5-1-1, odtn-connection-id=connection:5, odtn-port-type=line
  port=[GIGECLIENTCTP.1-L6-1-1](106), state=enabled, type=och, speed=1000 , oc-name=GIGECLIENTCTP.1-L6-1-1, oc-type=GIGECLIENTCTP.1-L6-1-1, odtn-connection-id=connection:6, odtn-port-type=line
id=netconf:172.24.3.5:11011, available=true, local-status=connected 24s ago, role=MASTER, type=SWITCH, mfr=unknown, hw=unknown, sw=unknown, serial=unknown, chassis=0, driver=odtn, ipaddress=172.24.3.5, locType=none, name=netconf:172.24.3.5:11011, port=11011, protocol=NETCONF
  port=[OPTCHANNEL_1_1_4](41), state=enabled, type=och, speed=1000 , oc-name=OPTCHANNEL_1_1_4, oc-type=oc-opt-types:OPTICAL_CHANNEL, odtn-connection-id=the-only-one, odtn-port-type=line, onos-index=41
  port=[TRANSCEIVER_1_1_4_1](42), state=enabled, type=packet, speed=1000 , oc-name=TRANSCEIVER_1_1_4_1, oc-type=oc-platform-types:TRANSCEIVER, odtn-connection-id=the-only-one, odtn-port-type=client, onos-index=42

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.


onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <topology xmlns="urn:onf:otcc:yang:tapi-topology">
    <uuid>ab09b19e-c09a-4f0c-8f72-af072b3a8071</uuid>
    <node>
      <uuid>4b84de46-abd5-4f72-80e5-a4ffdb6253ea</uuid>
      <name>
        <value-name>device-id</value-name>
        <value>netconf:172.24.3.5:11001</value>
      </name>
      <owned-node-edge-point>
        <uuid>41bdf1bb-301f-423e-8d06-2bfac62afa99</uuid>
        <connection-end-point xmlns="urn:onf:otcc:yang:tapi-connectivity">
          <uuid>1cf40f4d-f6f6-4b0e-b7f8-b18291a47c6c</uuid>
          <parent-node-edge-point>
            <owned-node-edge-point-id>41bdf1bb-301f-423e-8d06-2bfac62afa99</owned-node-edge-point-id>
            <node-id>4b84de46-abd5-4f72-80e5-a4ffdb6253ea</node-id>
            <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
          </parent-node-edge-point>
        </connection-end-point>
        <name>
          <value-name>odtn-port-type</value-name>
          <value>line</value>
        </name>
        <name>
          <value-name>odtn-connection-id</value-name>
          <value>the-only-one</value>
        </name>
        <name>
          <value-name>onos-cp</value-name>
          <value>netconf:172.24.3.5:11001/[OPTCHANNEL_1_1_4](41)</value>
        </name>
      </owned-node-edge-point>
    </node>
    ...
  </topology>
  <service-interface-point>
    <uuid>24f02a11-d612-4a80-b838-7400bfbeea6c</uuid>
    <layer-protocol-name>DSR</layer-protocol-name>
    <name>
      <value-name>onos-cp</value-name>
      <value>netconf:172.24.3.5:11001/[TRANSCEIVER_1_1_4_1](42)</value>
    </name>
  </service-interface-point>
  ...
</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.

$ cat openconfig-device-link.json
{
  "links": {
    "netconf:172.24.3.5:11001/41-netconf:172.24.3.5:11011/41": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/101-netconf:172.24.3.5:11003/101": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/102-netconf:172.24.3.5:11003/102": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/103-netconf:172.24.3.5:11003/103": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/104-netconf:172.24.3.5:11003/104": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/105-netconf:172.24.3.5:11003/105": {
      "basic": {
        "type": "DIRECT"
      }
    },
    "netconf:172.24.3.5:11002/106-netconf:172.24.3.5:11003/106": {
      "basic": {
        "type": "DIRECT"
      }
    }
  }
}
$ onos-netcfg localhost openconfig-device-link.json


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


onos> links
src=netconf:172.24.3.5:11001/41, dst=netconf:172.24.3.5:11011/41, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/101, dst=netconf:172.24.3.5:11003/101, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/102, dst=netconf:172.24.3.5:11003/102, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/103, dst=netconf:172.24.3.5:11003/103, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/104, dst=netconf:172.24.3.5:11003/104, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/105, dst=netconf:172.24.3.5:11003/105, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11002/106, dst=netconf:172.24.3.5:11003/106, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/101, dst=netconf:172.24.3.5:11002/101, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/102, dst=netconf:172.24.3.5:11002/102, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/103, dst=netconf:172.24.3.5:11002/103, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/104, dst=netconf:172.24.3.5:11002/104, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/105, dst=netconf:172.24.3.5:11002/105, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11003/106, dst=netconf:172.24.3.5:11002/106, type=DIRECT, state=ACTIVE, expected=false
src=netconf:172.24.3.5:11011/41, dst=netconf:172.24.3.5:11001/41, type=DIRECT, state=ACTIVE, expected=false

onos> odtn-show-tapi-context
<context xmlns="urn:onf:otcc:yang:tapi-common">
  <topology xmlns="urn:onf:otcc:yang:tapi-topology">
    <uuid>ab09b19e-c09a-4f0c-8f72-af072b3a8071</uuid>
    ...
    <link>
      <uuid>e8a61532-a9f4-4570-a09c-696b278dbdd6</uuid>
      <node-edge-point>
        <owned-node-edge-point-id>41bdf1bb-301f-423e-8d06-2bfac62afa99</owned-node-edge-point-id>
        <node-id>4b84de46-abd5-4f72-80e5-a4ffdb6253ea</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </node-edge-point>
      <node-edge-point>
        <owned-node-edge-point-id>2a97e1d8-76b7-404c-9c61-ef24124a1e4f</owned-node-edge-point-id>
        <node-id>65e78268-f183-4223-818d-a975303b6302</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </node-edge-point>
    </link>
    ...
  </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.


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


$ curl -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
{
  "tapi-common:output": {
    "sip": [
      {
        "uuid": "78650c37-2a9b-4512-8619-a372b73bfe37"
      }
    ]
  }
}

# by using jq filter, we can get SIP uuid directly
$ curl -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[][]'
"78650c37-2a9b-4512-8619-a372b73bfe37"


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.


$ cat create-connectivity-service.json
{
    "tapi-connectivity:input":
    {
        "end-point" : [
            {
                "local-id": "foo",
                "service-interface-point": {
                    "service-interface-point-id" : "7b4385cf-8f4a-4161-bf90-d084acb1015f"
                }
            }
            ,
            {
                "local-id": "bar",
                "service-interface-point": {
                    "service-interface-point-id" : "fcc00b2d-ae2c-4add-94c6-5109bf62c9ce"
                }
            }
        ]
    }
}

$ curl -X POST -H Content-Type:application/json -T create-connectivity-service.json http://localhost:8181/onos/restconf/operations/tapi-connectivity:create-connectivity-service | jq
{
  "tapi-connectivity:output": {
    "service": {
      "uuid": "20b8de56-f2c3-46dc-a605-4c36e4482987",
      "end-point": [
        {
          "local-id": "234184e5-b5af-45dd-a27e-6818e96aad87",
          "service-interface-point": {
            "service-interface-point-id": "7b4385cf-8f4a-4161-bf90-d084acb1015f"
          }
        },
        {
          "local-id": "343b8d8a-384f-4af8-9672-fa2eac4d2f7f",
          "service-interface-point": {
            "service-interface-point-id": "fcc00b2d-ae2c-4add-94c6-5109bf62c9ce"
          }
        }
      ],
      "connection": [
        {
          "connection-id": "31733d3a-2527-4473-93df-ae654c93b687"
        }
      ]
    }
  }
}


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

  • New connectivity service you request
  • Top level connection of the connectivity service and its endpoints(CEPs)
  • Lower connections which are needed in order to build top level connection and their endpoints(CEPs)


onos> odtn-show-tapi-context
XML:
<context xmlns="urn:onf:otcc:yang:tapi-common">
  ...
  <connection xmlns="urn:onf:otcc:yang:tapi-connectivity">
    <uuid>31733d3a-2527-4473-93df-ae654c93b687</uuid>
    <connection-end-point>
      <connection-end-point-id>f233e5e1-78a4-452c-a087-0a4a057d8281</connection-end-point-id>
      <owned-node-edge-point-id>fe4e2f4e-6f93-4c29-8547-9695ac8364ff</owned-node-edge-point-id>
      <node-id>c85b5b10-49aa-4c57-a318-aa6ba50dab71</node-id>
      <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
    </connection-end-point>
    <connection-end-point>
      <connection-end-point-id>0b845841-3cb5-4116-a802-98e69d8dfda5</connection-end-point-id>
      <owned-node-edge-point-id>5711ea26-da27-4412-bdde-203416027f6e</owned-node-edge-point-id>
      <node-id>70fbc84d-ed4f-4bb3-9e09-d9dcaab9b4ff</node-id>
      <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
    </connection-end-point>
    <lower-connection>
      <connection-id>0e3d1732-d736-415a-a3bc-e2de60ba89b2</connection-id>
    </lower-connection>
    <lower-connection>
      <connection-id>27f5b9ba-feaa-43e4-a501-0e64924706b8</connection-id>
    </lower-connection>
    <route>
      <local-id>36711d93-c181-4d78-8405-fa39c5d4d189</local-id>
      <connection-end-point>
        <connection-end-point-id>f233e5e1-78a4-452c-a087-0a4a057d8281</connection-end-point-id>
        <owned-node-edge-point-id>fe4e2f4e-6f93-4c29-8547-9695ac8364ff</owned-node-edge-point-id>
        <node-id>c85b5b10-49aa-4c57-a318-aa6ba50dab71</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </connection-end-point>
      <connection-end-point>
        <connection-end-point-id>436d8a4b-5536-47b0-8b2b-c68f1d7be898</connection-end-point-id>
        <owned-node-edge-point-id>966ece6b-2627-4b81-bc10-873bae079852</owned-node-edge-point-id>
        <node-id>c85b5b10-49aa-4c57-a318-aa6ba50dab71</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </connection-end-point>
      <connection-end-point>
        <connection-end-point-id>0b845841-3cb5-4116-a802-98e69d8dfda5</connection-end-point-id>
        <owned-node-edge-point-id>5711ea26-da27-4412-bdde-203416027f6e</owned-node-edge-point-id>
        <node-id>70fbc84d-ed4f-4bb3-9e09-d9dcaab9b4ff</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </connection-end-point>
      <connection-end-point>
        <connection-end-point-id>274a2aca-359e-4592-ba26-dad2b6db1f3c</connection-end-point-id>
        <owned-node-edge-point-id>bf886c96-d911-4fa9-aac8-827d18cb0b87</owned-node-edge-point-id>
        <node-id>70fbc84d-ed4f-4bb3-9e09-d9dcaab9b4ff</node-id>
        <topology-id>ab09b19e-c09a-4f0c-8f72-af072b3a8071</topology-id>
      </connection-end-point>
    </route>
  </connection>
  <connectivity-service xmlns="urn:onf:otcc:yang:tapi-connectivity">
    <uuid>20b8de56-f2c3-46dc-a605-4c36e4482987</uuid>
    <end-point>
      <local-id>234184e5-b5af-45dd-a27e-6818e96aad87</local-id>
      <service-interface-point>
        <service-interface-point-id>7b4385cf-8f4a-4161-bf90-d084acb1015f</service-interface-point-id>
      </service-interface-point>
    </end-point>
    <end-point>
      <local-id>343b8d8a-384f-4af8-9672-fa2eac4d2f7f</local-id>
      <service-interface-point>
        <service-interface-point-id>fcc00b2d-ae2c-4add-94c6-5109bf62c9ce</service-interface-point-id>
      </service-interface-point>
    </end-point>
    <connection>
      <connection-id>31733d3a-2527-4473-93df-ae654c93b687</connection-id>
    </connection>
  </connectivity-service>
</context>


If you check the remote device/emulator's NETCONF log, you can see that the remote device received following edit-config request and updated its running config.


log
-----
<rpc message-id="4" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <edit-config>
    <target>
      <running/>
    </target>
    <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
      <terminal-device xc:operation="merge" xmlns="http://openconfig.net/yang/terminal-device">
        <logical-channels>
          <channel xmlns="http://openconfig.net/yang/terminal-device" xc:operation="merge">
            <index>GIGECLIENTCTP.1-A-2-T1</index>
            <config>
              <index>GIGECLIENTCTP.1-A-2-T1</index>
            </config>
            <logical-channel-assignments>
              <assignment>
                <index>GIGECLIENTCTP.1-A-2-T1</index>
                <config>
                  <assignment-type>LOGICAL_CHANNEL</assignment-type>
                  <logical-channel>GIGECLIENTCTP.1-L1-1-1</logical-channel>
                  <allocation>100</allocation>
                </config>
              </assignment>
            </logical-channel-assignments>
          </channel>
        </logical-channels>
      </terminal-device>
    </config>
  </edit-config>
</rpc>

23-Jul-2018::16:44:26.872 **< sess:53 write:
<rpc-reply message-id="4" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <ok/>
</rpc-reply>

diff of running-config
------------------------
 devices {
     device xt3300_1 {
         config {
             oc-opt-term:terminal-device {
                 logical-channels {
+                    channel GIGECLIENTCTP.1-A-2-T1 {
+                        config {
+                            index GIGECLIENTCTP.1-A-2-T1;
+                        }
+                        logical-channel-assignments {
+                            assignment GIGECLIENTCTP.1-A-2-T1 {
+                                config {
+                                    assignment-type LOGICAL_CHANNEL;
+                                    logical-channel GIGECLIENTCTP.1-L1-1-1;
+                                    allocation 100.0;
+                                }
+                            }
+                        }
+                    }
                 }
             }
         }
     }
 }


You can get the created connectivity service from RESTCONF NBI.


$ curl -X POST -H Content-Type:application/json -T empty-body.json http://localhost:8181/onos/restconf/operations/tapi-connectivity:get-connectivity-service-list | jq
{
  "tapi-connectivity:output": {
    "service": [
      {
        "uuid": "20b8de56-f2c3-46dc-a605-4c36e4482987",
        "end-point": [
          {
            "local-id": "234184e5-b5af-45dd-a27e-6818e96aad87",
            "service-interface-point": {
              "service-interface-point-id": "7b4385cf-8f4a-4161-bf90-d084acb1015f"
            }
          },
          {
            "local-id": "343b8d8a-384f-4af8-9672-fa2eac4d2f7f",
            "service-interface-point": {
              "service-interface-point-id": "fcc00b2d-ae2c-4add-94c6-5109bf62c9ce"
            }
          }
        ],
        "connection": [
          {
            "connection-id": "31733d3a-2527-4473-93df-ae654c93b687"
          }
        ]
      }
    ]
  }
}

Delete TAPI Connectivity Service

Get the connectivity-service uuid you want to delete from RESTCONF NBI, and send delete-connectivity-service request.


$ curl -X POST -H Content-Type:application/json -T empty-body.json http://localhost:8181/onos/restconf/operations/tapi-connectivity:get-connectivity-service-list | jq '.[][][].uuid'
"20b8de56-f2c3-46dc-a605-4c36e4482987"

$ cat delete-connectivity-service.json
{
    "tapi-connectivity:input":
    {
        "service-id-or-name" : "20b8de56-f2c3-46dc-a605-4c36e4482987"
    }
}

$ curl -X POST -H Content-Type:application/json -T delete-connectivity-service.json http://localhost:8181/onos/restconf/operations/tapi-connectivity:delete-connectivity-service | jq
{
  "tapi-connectivity:output": {
    "service": {
      "uuid": "20b8de56-f2c3-46dc-a605-4c36e4482987"
    }
  }
}


If you run "odtn-show-tapi-context" from ONOS CLI,  you can find that all TAPI objects related to the deleted connectivity-service are removed.

Also you can see that the remote device received following edit-config request and updated its running config. The config which has created at the create-connectivity-service request are deleted.


log
-----
<rpc message-id="5" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <edit-config>
    <target>
      <running/>
    </target>
    <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
      <terminal-device xc:operation="merge" xmlns="http://openconfig.net/yang/terminal-device">
        <logical-channels>
          <channel xmlns="http://openconfig.net/yang/terminal-device" xc:operation="delete">
            <index>GIGECLIENTCTP.1-A-2-T1</index>
            <config>
              <index>GIGECLIENTCTP.1-A-2-T1</index>
            </config>
            <logical-channel-assignments>
              <assignment>
                <index>GIGECLIENTCTP.1-A-2-T1</index>
                <config>
                  <assignment-type>LOGICAL_CHANNEL</assignment-type>
                  <logical-channel>GIGECLIENTCTP.1-L1-1-1</logical-channel>
                  <allocation>100</allocation>
                </config>
              </assignment>
            </logical-channel-assignments>
          </channel>
        </logical-channels>
      </terminal-device>
    </config>
  </edit-config>
</rpc>

23-Jul-2018::16:46:59.870 **< sess:53 write:
<rpc-reply message-id="5" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <ok/>
</rpc-reply>


diff
-----
 devices {
     device xt3300_1 {
         config {
             oc-opt-term:terminal-device {
                 logical-channels {
-                    channel GIGECLIENTCTP.1-A-2-T1 {
-                        config {
-                            index GIGECLIENTCTP.1-A-2-T1;
-                        }
-                        logical-channel-assignments {
-                            assignment GIGECLIENTCTP.1-A-2-T1 {
-                                config {
-                                    assignment-type LOGICAL_CHANNEL;
-                                    logical-channel GIGECLIENTCTP.1-L1-1-1;
-                                    allocation 100.0;
-                                }
-                            }
-                        }
-                    }
                 }
             }
         }
     }
 }
  • No labels