[NETCONF-845] Support of namespace for referred yang-identity values Created: 20/Dec/21  Updated: 30/Jun/23  Resolved: 11/Jan/23

Status: Resolved
Project: netconf
Component/s: restconf-nb
Affects Version/s: None
Fix Version/s: None

Type: Task Priority: Medium
Reporter: Martin Skorupski Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File foo-retest.yang     File karaf.log    
Issue Links:
Duplicate
duplicates YANGTOOLS-1473 XML/JSON YangInstanceIdentifier codec... Resolved
Relates
relates to YANGTOOLS-1427 Do not fallback to toString() in Unio... Resolved

 Description   

Greetings from O-RAN-SC

Story:
We use OpenDaylight as O-RAN O1-Controller for RESTCONF to NETCONF translation and vice versa within ONAP/CCSDK.

For O-RAN Architecture and Specification validation a yang module for Performance Monitoring Job management was developed:

Please see https://gerrit.o-ran-sc.org/r/gitweb?p=scp/oam/modeling.git;a=blob;f=data-model/yang/working/o-ran-sc/o-ran-du/o-ran-sc-du-hello-world.yang;h=74351c8b6a58e817f90694fc874ead39f304ea74;hb=HEAD#l775 the list of measurement counters which should be reported.

Each counter is identified withing the yang module as yang-identity.  

Finding:
When sending a PM-Job creation for a certain monitoring point (resource, object class) for the counter 'user-equipment-average-throughput-uplink' via RESTCONF ...

### @name setPerformanceMeasurementJobs
PUT {{baseUrl}}/rests/data/network-topology:network-topology/topology=topology-netconf/node={{node}}/yang-ext:mount/o-ran-sc-du-hello-world:network-function/performance-measurement-jobs=pm-1
Authorization: Basic {{username}} {{password}}
Accept: {{accept}}Content-Type: {{accept}}


{ "performance-measurement-jobs": { "id": "pm-1", "administrative-state": "unlocked", "user-label": "pm", "job-tag": "my-job-tag", "performance-metrics": [ "/o-ran-sc-du-hello-world:network-function/o-ran-sc-du-hello-world:distributed-unit-functions[o-ran-sc-du-hello-world:id='O-DU-1211']/o-ran-sc-du-hello-world:cell[o-ran-sc-du-hello-world:id='cell-1']/o-ran-sc-du-hello-world:supported-measurements[o-ran-sc-du-hello-world:performance-measurement-type='user-equipment-average-throughput-uplink']/o-ran-sc-du-hello-world:supported-snssai-subcounter-instances[o-ran-sc-du-hello-world:slice-differentiator='1'][o-ran-sc-du-hello-world:slice-service-type='1']" ], "granularity-period": 30, "stream-target": "stream-1" } }

see [o-ran-sc-du-hello-world:performance-measurement-type='user-equipment-average-throughput-uplink']

 

... the converted namespace of the counter is not according to RFC7950.

299208-2021-12-19T13:02:09,912 | TRACE | globalWorkerGroup-3-1 | NetconfDeviceCommunicator        | 281 - org.opendaylight.netconf.sal-netconf-connector - 2.0.11 | Finished sending request <rpc message-id="m-30" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
299209-    <edit-config>
299210-        <target>
299211-            <candidate/>
299212-        </target>
299213-        <error-option>rollback-on-error</error-option>
299214-        <config>
299215-            <network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
299216-                <performance-measurement-jobs xmlns:op="urn:ietf:params:xml:ns:netconf:base:1.0" op:operation="replace">
299217-                    <id>pm-1</id>
299218-                    <user-label>pm</user-label>
299219-                    <stream-target>stream-1</stream-target>
299220-                    <administrative-state>unlocked</administrative-state>
299221-                    <job-tag>my-job-tag</job-tag>
299222-                    <granularity-period>30</granularity-period>
299223:                    <performance-metrics xmlns:a="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">/a:network-function/a:distributed-unit-functions[a:id='O-DU-1211']/a:cell[a:id='cell-1']/a:supported-measurements[a:performance-measurement-type='(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user-equipment-average-throughput-uplink']/a:supported-snssai-subcounter-instances[a:slice-differentiator='1'][a:slice-service-type='1']</performance-metrics>
299224-                </performance-measurement-jobs>
299225-            </network-function>
299226-        </config>
299227-    </edit-config>
299228-</rpc>

Instead of  ...

[a:performance-measurement-type*='(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user*-equipment-average-throughput-uplink'] 

the expectation is ...

 [a:performance-measurement-type*='a:user*-equipment-average-throughput-uplink']

Attached the karaf.log file - command:

grep -arni -A5 -B15 metrics karaf.log

 

Opendaylight 
https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/opendaylight/15.1.0/opendaylight-15.1.0.tar.gz
 
Karaf features:

opendaylight-user@root>feature:list -i | grep conf
odl-netconf-util                                                │ 2.0.11           │          │ Started │ odl-netconf-2.0.11                                              │ odl-netconf-util
odl-netconf-netty-util                                          │ 2.0.11           │          │ Started │ odl-netconf-netty-util-2.0.11                                   │ OpenDaylight :: Netconf :: Netty Util
odl-netconf-client                                              │ 2.0.11           │          │ Started │ odl-netconf-client-2.0.11                                       │ odl-netconf-client
odl-netconf-callhome-ssh                                        │ 2.0.11           │          │ Started │ odl-netconf-callhome-ssh                                        │ OpenDaylight :: Netconf Connector :: Netconf Call
odl-netconf-connector                                           │ 2.0.11           │          │ Started │ odl-netconf-2.0.11                                              │ OpenDaylight :: Netconf Connector :: Netconf Conn
odl-netconf-connector-all                                       │ 2.0.11           │ x        │ Started │ odl-netconf-connector-all                                       │ OpenDaylight :: Netconf Connector :: All
config                                                          │ 4.3.3            │          │ Started │ standard-4.3.3                                                  │ Provide OSGi ConfigAdmin support
pax-jdbc-config                                                 │ 1.5.0            │          │ Started │ org.ops4j.pax.jdbc-1.5.0                                        │ Provides JDBC Config support
odl-netconf-ssh                                                 │ 2.0.11           │          │ Started │ odl-netconf-ssh                                                 │ OpenDaylight :: Netconf Connector :: SSH
odl-aaa-netconf-plugin                                          │ 2.0.11           │          │ Started │ odl-aaa-netconf-plugin                                          │ OpenDaylight :: AAA :: ODL NETCONF Plugin
odl-netconf-tcp                                                 │ 2.0.11           │          │ Started │ odl-netconf-tcp                                                 │ OpenDaylight :: Netconf Connector :: TCP
odl-restconf-common                                             │ 2.0.11           │          │ Started │ odl-netconf-2.0.11                                              │ OpenDaylight :: Restconf :: Common
odl-netconf-impl                                                │ 2.0.11           │          │ Started │ odl-netconf-impl-2.0.11                                         │ OpenDaylight :: Netconf :: Impl
odl-netconf-notifications-api                                   │ 2.0.11           │          │ Started │ odl-netconf-notifications-api                                   │ OpenDaylight :: Netconf :: Notification :: Api
odl-netconf-api                                                 │ 2.0.11           │          │ Started │ odl-netconf-2.0.11                                              │ OpenDaylight :: Netconf :: API
odl-restconf-nb-rfc8040                                         │ 2.0.11           │ x        │ Started │ odl-restconf-nb-rfc8040-2.0.11                                  │ OpenDaylight :: Restconf :: NB :: RFC8040
odl-netconf-topology                                            │ 2.0.11           │          │ Started │ odl-netconf-topology                                            │ OpenDaylight :: Netconf Topology :: Netconf Conne
odl-netconf-notifications-impl                                  │ 2.0.11           │          │ Started │ odl-netconf-notifications-impl-2.0.11                           │ OpenDaylight :: Netconf :: Monitoring :: Impl
odl-controller-exp-netty-config                                 │ 4.0.7            │          │ Started │ odl-controller-exp-netty-config                                 │ OpenDaylight :: Controller :: Experimental :: Net
odl-netconf-mapping-api                                         │ 2.0.11           │          │ Started │ odl-netconf-mapping-api                                         │ OpenDaylight :: Netconf :: Mapping API



 Comments   
Comment by Martin Skorupski [ 20/Dec/21 ]

Sorry, I have trouble to set the "affected version field" -> Phosphorus-SR1
Note: logs above are from Phosphorus-SR1, just for information, we saw the behavior also in Silicon-SR1

Comment by Robert Varga [ 12/Jul/22 ]

So "(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user" is the result of yang.common.QName.toString(). This is not appropriate encoding, but I suspect that somewhere in the pipeline we are just giving up and using toString() to encode the identity.
This might be related to YANGTOOLS-1427 and that is leading codec integration. I think netconf-4.0.0 may expose a flaw here.
demx8as6 can you repro/test bleeding-edge patches around this issue?

Comment by Martin Skorupski [ 13/Jul/22 ]

Hi Robert,

as a starting point I retested with ODL 16.0.0 from
https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/opendaylight/16.0.0/opendaylight-16.0.0.tar.gz.

The result is the same as above.

            <network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
                <performance-measurement-jobs xmlns:op="urn:ietf:params:xml:ns:netconf:base:1.0" op:operation="replace">
                    <id>pm-1</id>
                    <user-label>pm</user-label>
                    <stream-target>stream-1</stream-target>
                    <administrative-state>unlocked</administrative-state>
                    <job-tag>my-job-tag</job-tag>
                    <granularity-period>30</granularity-period>
                    <performance-metrics xmlns:a="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">/a:network-function/a:distributed-unit-functions[a:id='O-DU-1211']/a:cell[a:id='cell-1']/a:supported-measurements[a:performance-measurement-type='(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user-equipment-average-throughput-uplink']/a:supported-snssai-subcounter-instances[a:slice-differentiator='1'][a:slice-service-type='1']</performance-metrics>
                </performance-measurement-jobs>
            </network-function>

-  ... measurement-type='(urn:o-ran-sc:yang:o-ran-sc-du-hello-world?revision=2021-11-23)user-equipment-average-throughput-uplink'] ...

Could you please give me some instructions which Patches I should inject and also a bit how?

Thanks!

Comment by Martin Skorupski [ 13/Jul/22 ]

For debugging and module test - I simplified the original yang. 

foo-retest.yang 

Comment by Robert Varga [ 11/Jan/23 ]

This is a manifestation of YANGTOOLS-1473, really: identity is not being encoded properly.

Comment by Martin Skorupski [ 30/Jun/23 ]

Many thanks works like a charm!

2023-06-30T14:37:19,417 | TRACE | globalWorkerGroup-3-12 | NetconfDeviceCommunicator        | 358 - org.opendaylight.netconf.sal-netconf-connector - 5.0.6 | RemoteDeviceId[name=O-DU-1122, address=/10.20.11.118:830]: Matched request: <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-34">
    <edit-config>
        <target>
            <candidate/>
        </target>
        <error-option>rollback-on-error</error-option>
        <config>
            <network-function xmlns="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">
                <performance-measurement-jobs xmlns:op="urn:ietf:params:xml:ns:netconf:base:1.0" op:operation="replace">
                    <id>pm-1</id>
                    <user-label>pm</user-label>
                    <stream-target>stream-1</stream-target>
                    <administrative-state>unlocked</administrative-state>
                    <job-tag>my-job-tag</job-tag>
                    <granularity-period>30</granularity-period>
                    <performance-metrics xmlns:a="urn:o-ran-sc:yang:o-ran-sc-du-hello-world">/a:network-function/a:distributed-unit-functions[a:id='O-DU-1211']/a:cell[a:id='cell-1']/a:supported-measurements[a:performance-measurement-type='{*}a:user-equipment-average-throughput-uplink{*}']/a:supported-snssai-subcounter-instances[a:slice-differentiator='1'][a:slice-service-type='1']</performance-metrics>
                </performance-measurement-jobs>
            </network-function>
        </config>
    </edit-config>
</rpc>

Generated at Wed Feb 07 20:16:03 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.