Versions Compared

Key

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

This page describe how to execute <get> and <edit-config> operations about "target-output-power" XML node via Netconf. There are totally three ways to config power.


Table of Contents

1. Environment Requirement

  • Docker container that runs a Netconf server. Follow the instructions posted How to build and run ODTN Emulators?
  • netconf-console tool that is a simulation tool for Netconf client.
  • "target-output-power" node defined in "openconfig-terminal-device.yang" as the operation target node.
  • Running ONOS instance that is able to configure power through two ways.

Assume that we have started an OpenConfig Cassini Emulator which runs a Netconf server in docker as follows:

Code Block
languagetext
linenumberstrue
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS       PORTS                               NAMES
00d7151855dc20c0298eb652        emulator_openconfig_cassini_2onosproject/oc-cassini:0.21   "./entry.shsh /root/script/pus…"   2 hours ago        9 days ago          Up 20 Up 2 hours                22/tcp, 8080/tcp, 0.0.0.0:1100311002->830/tcp   odtn-emulator_openconfig_cassini_21_1

So we use the command listed below to send RPC request to the container:

Code Block
languagepowershell
netconf-console --host=127.0.0.1 --port=11003 -u admin -p admin --rpc={XML_FILE_NAME}

The root node of "openconfig-platform.yang" is "<components>" and its sublist "<component>" contains "<name>" node as its identity.

Besides, "openconfig-terminal-device.yang" adds node "<optical-channel>" into "<component>" node.

"<target-power-config>" is defined as a child node of "<optical-channel>".

...

  • If you want to get the whole components, the content of XML_FILE_NAME file is:
Code Block
languagexml
linenumberstrue
<get>
  <filter>
    <components xmlns='http://openconfig.net/yang/platform'/>
  </filter>
</get>
  • If you want to get only the "<optical-channel>" of "<component>", the content is:

2 Execute Operations

2.1 ONOS startup and node discovery

This section is the environment for section 2.3 and 2.4.

Firstly, an ONOS instance is started via command "bazel run onos-local -- clean". Secondly, the docker container connects to ONOS via command "onos-netcfg localhost device.json". The content of device.json is:

Code Block
{
  "devices" : {
    "netconf:127.0.0.1:11002" : {
      "basic" : {
        "name":"cassini2",
Code Block
languagexml
linenumberstrue
<get>
  <filter>
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
  "driver":"cassini-ocnos"
      <optical-channel xmlns="http://openconfig.net/yang/terminal-device" />},
      "netconf" : {
        "ip" : "127.0.0.1",
      </component>
  "port"  </components>
  </filter>
</get>

The output is :

Code Block
languagexml
linenumberstrue
collapsetrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:c9220366-76bd-43ba-ad3c-13e1b7014e21">
  <data>
    <components xmlns="http://openconfig.net/yang/platform">: "11002",
        "username" : "root",
        "password" : "root",
        "idle-timeout" : "0"
      <component>}
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe1</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
 }
  }
}

Then, we use "onos localhost" to log into ONOS CLI environment and see if the docker container is detected.

Code Block
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 'logout' to exit ONOS session.

onf@root > devices         <config>
            <frequency>0</frequency>
            <target-output-power>0.0</target-output-power>
            <line-port>oe1</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe2</line-port>
          </config>
        11:54:09
id=netconf:127.0.0.1:11002, available=true, local-status=connected 4m53s 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=cassini2, port=11002, protocol=NETCONF

2.2 Config Power by using ONOS CLI Command "power-config"

An ONOS command is provided to configure the power of line-side ports.

In ONOS CLI environment, the description for command "power-config" is listed:

Code Block
onf@root > help power-config</optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe2</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe3</line-port>
          </config>
      11:56:39
DESCRIPTION
  </optical-channel>
      </component>onos:power-config

    Get/Edit the target-output-power for  <component>specific optical-channel

SYNTAX
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
     onos:power-config [options] operation connection point [value]

ARGUMENTS
     <config>
   operation
         <frequency>0</frequency>
       Netconf Operation including get,  <target-output-power>-10.0</target-output-power>
edit-config, etc.
             <line-port>oe3</line-port>   (required)
        connection  </config>
point
          </optical-channel>
      </component>{DeviceID}/{PortNumber}
      <component>
          <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
(required)
        value
   <config>
            <frequency>194700000</frequency>
     target-output-power value. Unit: dBm

OPTIONS
        <target-output-power>-10.0</target-output-power>-help
            <line-port>oe4</line-port>
    Display this help message
   </config>
     -j, --json
  </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
 Output JSON


This command also supports auto-completion function for each parameter.

Currently, only get and edit-config operations are supported:

Code Block
onf@root > power-config         <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
                <line-port>oe4</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe5</line-port>
          </config>
11:56:43
get        </optical-channel>
     lock </component>
      <component>
     unlock   <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
      get-config    <config>
   copy-config     edit-config    <frequency>194750000</frequency>
  kill-session    close-session   delete-config

2.2.1 Perform <get> Operation

Through power-config command, you can get the power value of any line-side port of any optical device, for example,

Code Block
onf@root > power-config get netconf:127.0.0.1:11002/216    <target-output-power>-10.0</target-output-power>
            <line-port>oe5</line-port>
               </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe6</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical11:56:43
The target-output-power value in port 216 on device netconf:127.0.0.1:11002 is -2.0.


2.2.2 Perform <edit-config> Operation

Through power-config command, you can modify the power value of any line-side port of any optical device, for example,

Code Block
onf@root > power-config edit-config netconf:127.0.0.1:11002/216 -4.0            -channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe6</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
   12:04:11
onf@root > power-config get netconf:127.0.0.1:11002/216           <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe7</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</12:06:01
The target-output-power>
power value in port 216 on device netconf:127.0.0.1:11002 is -4.0.

2.3 Config Power on a single device by using Netconf tool like netconf-console

So we use the command listed below to send RPC request to the container:

Code Block
languagepowershell
netconf-console --host=127.0.0.1 --port=11003 -u admin -p admin --rpc={XML_FILE_NAME}

The root node of "openconfig-platform.yang" is "<components>" and its sublist "<component>" contains "<name>" node as its identity. Besides "openconfig-terminal-device.yang" adds node "<optical-channel>" into "<component>" node. "<target-power-config>" is defined as a child node of "<optical-channel>".

2.3.1 Perform <get> Operation

If you want to get the whole components, the content of get-components is:

Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<get xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <filter xmlns:oc-platform="http://openconfig.net/yang/platform">
    <oc-platform:components/>
  </filter>
</get>


You can take a look at the output of get components here: out-get-components.xml

If you want to get only the "<optical-channel>" of "<component>", the content of get-components-op-channel is:

Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<get xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<filter>
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device" />
      </component>
    </components>
  </filter>
</get>

The output is out-get-components-op-channel:

Code Block
languagexml
linenumberstrue
collapsetrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:c9220366-76bd-43ba-ad3c-13e1b7014e21">
  <data>
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe1</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>0.0</target-output-power>
            <line-port>oe1</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe2</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe2</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe3</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe3</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe4</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe4</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe5</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe5</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe6</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
    <line-port>oe7</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194700000<<config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe8<port>oe6</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000<<frequency>194700000</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe8<port>oe7</line-port>
          </config>
        </optical-channel>

          </component>config>
    </components>
    </data>
</rpc-reply>
  • If you want to get the "<config>" nodes only where the frequency is 0 and the line-port is oe1:
Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<get>
  <filter>
optical-channel>
     <components xmlns="http://openconfig.net/yang/platform"></component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
           <config> <line-port>oe7</line-port>
          </config>
        <line-port>oe1<</lineoptical-port>channel>
      </component>
      <frequency>0</frequency><component>
          </config><optical-channel xmlns="http://openconfig.net/yang/terminal-device">
        </optical-channel>  <config>
      </component>      <frequency>194700000</frequency>
    </components>
  </filter>
</get>

The output is:

Code Block
languagexml
linenumberstrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:190d45b0-29e8-44a7-8b6a-71f87c35f740">
  <data>
    <components xmlns="http://openconfig.net/yang/platform">        <target-output-power>-10.0</target-output-power>
            <line-port>oe8</line-port>
          </config>
        </optical-channel>
      </component>
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>-10.0</target-output-power>
          <config>
  <line-port>oe8</line-port>
          <frequency>0<</frequency>config>
            <target-output-power>-10.0</target-output-power></optical-channel>
      </component>
      <line-port>oe1</line-port>
          </config>
        </optical-channel>
      </component></components>
  </data>
</rpc-reply>

If you want to get the "<config>" nodes only where the frequency is 194750000 and the line-port is oe1, the content of get-config-nodes is:

Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<get xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <filter>
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe1</line-port>
            <frequency>194750000</frequency>
          </config>
        </optical-channel>
      </component>
    </components>
  </filter>
</data>get>
</rpc-reply>

<edit-config> operation

...

get>

The output is is out-get-config-nodes:

Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<edit-config>
  <target><running/></target>
  <config><nc:rpc-reply xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:703f18cc-512f-411c-8b8d-f07a87b4797f">
  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
        <name>oe1/2</name>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>194750000</frequency>
            <target-output-power>0<power>-5.1</target-output-power>
          </config>
        </optical-channel><line-port>oe1</line-port>
      </component>
    </components>config>
  </config>
</edit-config>

The output is:

Code Block
languagexml
linenumberstrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:3b4de76f-74f0-4f06-808d-64320a6c47ed">
  <ok/>
</rpc-reply>

Then we request the "<config>" nodes again to check this operation, where the frequency is 0 and the line-port is oe1. The output is changed:

      </optical-channel>
      </component>
    </components>
  </data>
</nc:rpc-reply>

2.3.2 Perform <edit-config> operation

If you want to change the target-output-power value as 0dBm  instead of the default -5.1 dBm  where "<name>" ID is "oe1/2", the content of file is set-target-output-power :

Code Block
languagexml
linenumberstrue
<?xml version="1.0"?>
<edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <target><running/></target>
  <config>
    <components xmlns="http://openconfig.net/yang/platform">
Code Block
languagexml
linenumberstrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:190d45b0-29e8-44a7-8b6a-71f87c35f740">
  <data>
    <components xmlns="http://openconfig.net/yang/platform">
      <component>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>-10.0</target-output-power>
            <line-port>oe1</line-port>
          </config>
      <component>
  </optical-channel>
      </component>
      <component><name>oe1/2</name>
        <optical-channel xmlns="http://openconfig.net/yang/terminal-device">
          <config>
            <frequency>0</frequency>
            <target-output-power>0.0<power>0</target-output-power>
          </config>
  <line-port>oe1</line-port>      </optical-channel>
      </component>
    </config>components>
        </optical-channel>
      </component>
    </components>
  </data>
</rpc-reply></config>
</edit-config>


The output is:

Code Block
languagexml
linenumberstrue
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:3b4de76f-74f0-4f06-808d-64320a6c47ed">
  <ok/>
</rpc-reply>

Then we request the "<config>" nodes again to check this operation, where the frequency is 194750000 and the line-port is oe1 using  get-config-nodes:

As you the following output illustrates, the target-output-power is changed from -5.1 to 0.