Upgrade yang-library schema in sal-netconf-connector 44/93044/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 14 Oct 2020 10:26:44 +0000 (12:26 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 14 Oct 2020 13:39:48 +0000 (13:39 +0000)
Upgrade the schema used for determining the model set present
on the device. We will end up interpreting RFC7895 as RFC8525, which
is just fine.

JIRA: NETCONF-725
Change-Id: If74baa5476f84d511b7c28278cfc54749fb698b1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
features/netconf/odl-netconf-api/pom.xml
features/netconf/odl-netconf-api/src/main/feature/feature.xml
netconf/sal-netconf-connector/pom.xml
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/LibraryModulesSchemas.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java

index 32074d441df94d2f1ec7f99f61d0d4d48124dc00..84485a9da249b2016b2b0f3cde71705140ad2df9 100644 (file)
@@ -64,7 +64,7 @@
         </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>odl-mdsal-model-rfc7895</artifactId>
+            <artifactId>odl-mdsal-model-rfc8342</artifactId>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.mdsal.model</groupId>
-            <artifactId>odl-mdsal-model-rfc8342</artifactId>
-            <type>xml</type>
-            <classifier>features</classifier>
-        </dependency>
 
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
index b8d98e6b0a8e4f6459715defca99457d17017ebd..c982459620f5039ea453cb5d4e1ed083f284ebb8 100644 (file)
@@ -10,8 +10,7 @@
     <feature name="odl-netconf-api" version="${project.version}">
         <feature version="[7,8)">odl-netty-4</feature>
         <feature version="[5,6)">odl-yangtools-parser-api</feature>
-        <feature version="[6,7)">odl-mdsal-model-rfc7895</feature>
-        <feature version="[6,7)">odl-mdsal-model-rfc8525</feature>
         <feature version="[6,7)">odl-mdsal-model-rfc8342</feature>
+        <feature version="[6,7)">odl-mdsal-model-rfc8525</feature>
     </feature>
 </features>
index 1ebc5f497f2268b8ba82c9bf7af96df586ad925d..e26e3952a1386e79fddb756280b34cd595417e10 100644 (file)
@@ -37,7 +37,7 @@
     </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
-      <artifactId>rfc7895</artifactId>
+      <artifactId>rfc8525</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
index 6e1ea35dab5e02470d31647b90fad3b7d25c2329..80ba6b1c4aaf2d733fdd05f5e02cba2ca48358c9 100644 (file)
@@ -48,8 +48,9 @@ import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemas;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibrary;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.module.list.Module;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
@@ -88,8 +89,9 @@ public final class LibraryModulesSchemas implements NetconfDeviceSchemas {
     private static final Logger LOG = LoggerFactory.getLogger(LibraryModulesSchemas.class);
     private static final Pattern DATE_PATTERN = Pattern.compile("(\\d{4}-\\d{2}-\\d{2})");
     private static final EffectiveModelContext LIBRARY_CONTEXT = BindingRuntimeHelpers.createEffectiveModel(
-        ModulesState.class);
+        YangLibrary.class);
 
+    // FIXME: this is legacy RFC7895, add support for RFC8525 containers, too
     private static final NodeIdentifier MODULES_STATE_NID = NodeIdentifier.create(ModulesState.QNAME);
     private static final NodeIdentifier MODULE_NID = NodeIdentifier.create(Module.QNAME);
     private static final NodeIdentifier NAME_NID = NodeIdentifier.create(QName.create(Module.QNAME, "name").intern());
index 63deb8ed6fb035a9db003e8b570751980c8d9d9d..3c055f56ffc9ef4de54ee64a8e996d43069adb34 100644 (file)
@@ -12,26 +12,33 @@ import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemasResolver;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.$YangModuleInfoImpl;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
  * Default implementation resolving schemas QNames from netconf-state or from modules-state.
  */
 public final class NetconfStateSchemasResolverImpl implements NetconfDeviceSchemasResolver {
-    private static final QName YANG_LIBRARY_CAPABILITY = QName.create(ModulesState.QNAME, "ietf-yang-library").intern();
+    private static final QName RFC8525_YANG_LIBRARY_CAPABILITY = $YangModuleInfoImpl.getInstance().getName();
+    private static final QName RFC7895_YANG_LIBRARY_CAPABILITY = RFC8525_YANG_LIBRARY_CAPABILITY
+        .bindTo(QNameModule.create(RFC8525_YANG_LIBRARY_CAPABILITY.getNamespace(), Revision.of("2016-06-21"))).intern();
 
     @Override
     public NetconfDeviceSchemas resolve(final NetconfDeviceRpc deviceRpc,
             final NetconfSessionPreferences remoteSessionCapabilities,
             final RemoteDeviceId id, final EffectiveModelContext schemaContext) {
+        // FIXME: I think we should prefer YANG library here
         if (remoteSessionCapabilities.isMonitoringSupported()) {
             return NetconfStateSchemas.create(deviceRpc, remoteSessionCapabilities, id, schemaContext);
         }
+        if (remoteSessionCapabilities.containsModuleCapability(RFC8525_YANG_LIBRARY_CAPABILITY)
+                || remoteSessionCapabilities.containsModuleCapability(RFC7895_YANG_LIBRARY_CAPABILITY)) {
+            return LibraryModulesSchemas.create(deviceRpc, id);
+        }
 
-        // FIXME: I think we should prefer YANG library here
-        return remoteSessionCapabilities.containsModuleCapability(YANG_LIBRARY_CAPABILITY)
-            ? LibraryModulesSchemas.create(deviceRpc, id) : NetconfStateSchemas.EMPTY;
+        return NetconfStateSchemas.EMPTY;
     }
 }