Backup-Restore support library + tests 65/55165/15
authorDiego Granados <diego.jesus.granados.lopez@ericsson.com>
Tue, 18 Apr 2017 15:04:18 +0000 (17:04 +0200)
committerJamo Luhrsen <jluhrsen@redhat.com>
Fri, 12 May 2017 23:19:07 +0000 (23:19 +0000)
The purpose of this library is to support the generic verification
of feature correctness in backup + restore scenarios.

A library is correct from a backup+restore standpoint when,
at any provisioning point, a controller backup, followed by
a restore, can be performed, and the execution of that
procedure will not have any impact on traffic tests or
datastore state check in respect to the expected behaviour
when no backup + restore procedures are performed.

For doing so, the library provides:

- A new keyword (BackupRestoreCheck), which:
  1) Performs a complete datastore export (using Daexim export rpc)
  2) Performs a backup, then a restore (not actual script here,
     since backup&restore mechanisms are deployment - dependant; a
     placeholder is provided for this step)
  3) Performs a new datastore export
  4) Compares both config & operational datastores for differences
     (that is, pre-backup and post-restore exports for both datastores),
     optionally prefiltering those exports using pre-filter files
  5) Fails when pre-backup and post-restore exports are different
     even after removing the specified filtered parts

- A new keyword (ConditionalBackupRestoreCheck), which performs
  the same steps than BackupRestoreCheck only when a command-line flag
  ("-v BR_TESTING_ENABLED:true") is present. This allows to easily
  add backup-restore verification on existing tests, allowing to
  toggle the execution of that verification

- Some unit tests for the library

jsonpatch library (https://pypi.python.org/pypi/jsonpatch) is expected to
be installed in order for this library to work

Note: for additional details regarding this lib, please check the
README.txt file included in the commit

Change-Id: Iad758ddc362cec319c7e843c1a6e4fcf728dad10
Signed-off-by: Diego Granados <diego.jesus.granados.lopez@ericsson.com>
28 files changed:
csit/libraries/BackupRestoreKeywords.robot [new file with mode: 0644]
csit/libraries/DaeximKeywords.robot
csit/libraries/backuprestore/JsonDiffTool.py [new file with mode: 0644]
csit/libraries/backuprestore/README.txt [new file with mode: 0644]
csit/libraries/backuprestore/backuprestoretest.py [new file with mode: 0644]
csit/libraries/backuprestore/jsonpathl.py [new file with mode: 0644]
csit/libraries/backuprestore/testinput/arrayThreeNamesSorted.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/arrayTwoNames.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/arrayTwoNamesCopy.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/arrayTwoNamesReversed.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/filterThreeArray.conf [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/json_postfilter.conf [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter.conf [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_two_matches.conf [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_zero_matches.conf [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_after.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_before.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/patchAfter.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/patchBefore.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/patchReference.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/setTwoNames.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/setTwoNamesExtraAttrib.json [new file with mode: 0644]
csit/libraries/backuprestore/testinput/setTwoNamesReversed.json [new file with mode: 0644]
csit/suites/backuprestore/br-basic/010__br_library_keywords.robot [new file with mode: 0644]
csit/suites/backuprestore/br-basic/020__br_sfc_tests.robot [new file with mode: 0644]
csit/variables/backuprestore/BackupRestoreVariables.robot [new file with mode: 0644]
csit/variables/backuprestore/json_prefilter.conf [new file with mode: 0644]
csit/variables/backuprestore/json_prefilter_matching_basic.json [new file with mode: 0644]

diff --git a/csit/libraries/BackupRestoreKeywords.robot b/csit/libraries/BackupRestoreKeywords.robot
new file mode 100644 (file)
index 0000000..b2ac0f9
--- /dev/null
@@ -0,0 +1,69 @@
+*** Settings ***
+Library           OperatingSystem
+Library           SSHLibrary
+Library           Collections
+Library           RequestsLibrary
+Library           backuprestore/JsonDiffTool.py
+Resource          ClusterManagement.robot
+Resource          ../variables/daexim/DaeximVariables.robot
+Resource          DaeximKeywords.robot
+Resource          ../variables/backuprestore/BackupRestoreVariables.robot
+Resource          ../variables/Variables.robot
+Resource          Utils.robot
+
+*** Keywords ***
+Set Global Variable If It Does Not Exist
+    [Arguments]    ${name}    ${value}
+    [Documentation]    Checks whether a given variable has been defined. If it does not, sets the passed value to that global variable
+    ${status}    ${message} =    Run Keyword And Ignore Error    Variable Should Exist    ${name}
+    Run Keyword If    "${status}" == "FAIL"    Set Global Variable    ${name}    ${value}
+
+Perform Export
+    [Arguments]    ${controller_index}
+    [Documentation]    schedule a basic export/backup, waiting for completion
+    [Tags]    create backup
+    DaeximKeywords.Schedule Export    ${controller_index}
+    DaeximKeywords.Verify Export Status    ${EXPORT_SCHEDULED_STATUS}    ${controller_index}
+    Builtin.Wait Until Keyword Succeeds    10 sec    5 sec    DaeximKeywords.Verify Export Status    ${EXPORT_COMPLETE_STATUS}    ${controller_index}
+    DaeximKeywords.Verify Export Files    ${controller_index}
+
+ConditionalBackupRestoreCheck
+    [Arguments]    ${exclusionsConfigBefore}=${EMPTY}    ${exclusionsConfigAfter}=${EMPTY}    ${exclusionsOperationalBefore}=${EMPTY}    ${exclusionsOperationalAfter}=${EMPTY}    ${odlControllerIndex}=${FIRST_CONTROLLER_INDEX}
+    [Documentation]    When enabled, performs a datastore export, then a backup, then a restore, then an export. The check is considered to be failed when exports before and after are different (two different json path files can be passed in order to filter certain subtrees from the export files before / after the export)
+    Set Global Variable If It Does Not Exist    \${BR_TESTING_ENABLED}    FALSE
+    Return From Keyword If    '${BR_TESTING_ENABLED}'!='true'
+    BackupRestoreCheck    ${exclusionsConfigBefore}    ${exclusionsConfigAfter}    ${exclusionsOperationalBefore}    ${exclusionsOperationalAfter}    ${odlControllerIndex}
+
+BackupRestoreCheck
+    [Arguments]    ${exclusionsConfigBefore}=${EMPTY}    ${exclusionsConfigAfter}=${EMPTY}    ${exclusionsOperationalBefore}=${EMPTY}    ${exclusionsOperationalAfter}=${EMPTY}    ${odlControllerIndex}=${FIRST_CONTROLLER_INDEX}
+    [Documentation]    When enabled, performs a datastore export, then a backup, then a restore, then an export. The check is considered to be failed when exports before and after are different (two different json path files can be passed in order to filter certain subtrees from the export files before / after the export)
+    Log    Performing backup-restore check
+    ${ARG_CONFIG_BEFORE}=    Set Variable    ' '
+    ${ARG_CONFIG_AFTER}=    Set Variable    ' '
+    ${ARG_OPER_BEFORE}=    Set Variable    ' '
+    ${ARG_OPER_AFTER}=    Set Variable    ' '
+    ${ARG_CONFIG_BEFORE}=    Run Keyword If    '${exclusionsConfigBefore}'!='${EMPTY}'    '${exclusionsConfigBefore}'
+    ${ARG_CONFIG_AFTER}=    Run Keyword If    '${exclusionsConfigAfter}'!='${EMPTY}'    '${exclusionsConfigAfter}'
+    ${ARG_OPER_BEFORE}=    Run Keyword If    '${exclusionsOperationalBefore}'!='${EMPTY}'    Normalize Path    ${CURDIR}/${exclusionsOperationalBefore}
+    ${ARG_OPER_AFTER}=    Run Keyword If    '${exclusionsOperationalAfter}'!='${EMPTY}'    Normalize Path    ${CURDIR}/${exclusionsOperationalAfter}
+    ${controller_index}    Builtin.Convert To Integer    ${odlControllerIndex}
+    Perform Export    ${controller_index}
+    ${host}    ClusterManagement.Resolve IP Address For Member    ${controller_index}
+    ${directory_exist}    Builtin.Run Keyword And Return Status    OperatingSystem.Directory Should Exist    ${EXP_DIR}/${RELATIVE_BEFORE_BACKUP_DIR}
+    Builtin.Run Keyword If    ${directory_exist}    Cleanup Directory    ${EXP_DIR}/${RELATIVE_BEFORE_BACKUP_DIR}
+    Copy Export Directory To Test VM    ${host}
+    OperatingSystem.Move Directory    ${EXP_DIR}${host}    ${EXP_DIR}/${RELATIVE_BEFORE_BACKUP_DIR}
+    #
+    # TODO: Insert The Backup + Restore call here
+    #
+    Log    doing the second export!
+    Perform Export    ${controller_index}
+    Copy Export Directory To Test VM    ${host}
+    ${directory_exist}    Builtin.Run Keyword And Return Status    OperatingSystem.Directory Should Exist    ${EXP_DIR}/${RELATIVE_AFTER_RESTORE_DIR}
+    Builtin.Run Keyword If    ${directory_exist}    Cleanup Directory    ${EXP_DIR}/${RELATIVE_AFTER_RESTORE_DIR}
+    OperatingSystem.Move Directory    ${EXP_DIR}${host}    ${EXP_DIR}/${RELATIVE_AFTER_RESTORE_DIR}
+    log    "Performing comparison"
+    ${differencesConfigDatastore}=    Json Diff Check Keyword    ${EXP_DIR}/${RELATIVE_BEFORE_BACKUP_DIR}/${EXP_DATA_FILE}    ${EXP_DIR}/${RELATIVE_AFTER_RESTORE_DIR}/${EXP_DATA_FILE}    ${ARG_CONFIG_BEFORE}    ${ARG_CONFIG_AFTER}
+    ${differencesOperationalDatastore}=    Json Diff Check Keyword    ${EXP_DIR}/${RELATIVE_BEFORE_BACKUP_DIR}/${EXP_OPER_FILE}    ${EXP_DIR}/${RELATIVE_AFTER_RESTORE_DIR}/${EXP_OPER_FILE}    ${ARG_OPER_BEFORE}    ${ARG_OPER_AFTER}
+    Should Be Equal    '0'    '${differencesConfigDatastore}'    Error: Diferences found in the config DS before backup / after restore
+    Should Be Equal    '0'    '${differencesOperationalDatastore}'    Error: Diferences found in the config DS before backup / after restore
index e1a7fb731f3e0e6c35c72a3c1a1573aa5015e51d..e666daacd7905688c7642a9a169222a1cb47031b 100644 (file)
@@ -29,7 +29,6 @@ Cleanup The Export Files
     ${host_index}    Builtin.Convert To Integer    ${host_index}
     Builtin.Run Keyword And Ignore Error    ClusterManagement.Delete_And_Check_Member_List_Or_All    ${TOPOLOGY_URL}    ${host_index}
     ${output1}    Builtin.Run Keyword and IgnoreError    ClusterManagement.Run Bash Command On Member    sudo rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear    ${host_index}
-    # Executing the deletion without sudo prevents "sudo: no tty present and no askpass program specified" errors
     ${output2}    Builtin.Run Keyword and IgnoreError    ClusterManagement.Run Bash Command On Member    rm -rf ${WORKSPACE}/${BUNDLEFOLDER}/daexim;clear    ${host_index}
     ${output}    ClusterManagement.Run Bash Command On Member    ls -lart ${WORKSPACE}/${BUNDLEFOLDER}    ${host_index}
     Builtin.Log    ${output}
diff --git a/csit/libraries/backuprestore/JsonDiffTool.py b/csit/libraries/backuprestore/JsonDiffTool.py
new file mode 100644 (file)
index 0000000..0d24764
--- /dev/null
@@ -0,0 +1,193 @@
+import argparse
+import logging
+import jsonpatch
+import json
+from jsonpathl import jsonpath
+import types
+import sys
+
+
+"""
+Library for checking differences between json files,
+allowing pre-filtering those files using a number
+of jsonpath expressions
+This library supports the automated verification
+of backup & restore use cases for applications
+Updated: 2017-04-10
+"""
+
+__author__ = "Diego Granados"
+__copyright__ = "Copyright(c) 2017, Ericsson."
+__license__ = "New-style BSD"
+__email__ = "diego.jesus.granados.lopez@ericsson.com"
+
+
+def from_path_to_jsonpatch(matchedpath):
+    """ Given a json path (using jsonpath notation), to a json patch (RFC 6902)
+    which can be used to remove the document fragment pointed by the input path
+    Note that such conversion is not formally specified anywhere, so the conversion
+    rules are experimentation-based
+
+    :param matchedpath: the input path (using jsonpath notation, see http://goessner.net/articles/JsonPath)
+    :return: the corresponding json patch for removing the fragment
+    """
+
+    logging.info('starting. filter path: %s', matchedpath)
+
+    # First step: path format change
+    # typical input: $['ietf-yang-library:modules-state']['module'][57]
+    # desired output: /ietf-yang-library:modules-state/module/57
+
+    matchedpath = matchedpath.replace('$.', '/')
+    matchedpath = matchedpath.replace('$[\'', '/')
+    matchedpath = matchedpath.replace('\'][\'', '/')
+    matchedpath = matchedpath.replace('\']', '/')
+
+    # this one is for the $[2] pattern
+    if '$[' in matchedpath and ']' in matchedpath:
+        matchedpath = matchedpath.replace('$[', '/')
+        matchedpath = matchedpath.replace(']', '')
+
+    matchedpath = matchedpath.replace('[', '')
+    matchedpath = matchedpath.replace(']', '')
+    matchedpath = matchedpath.rstrip('/')
+
+    # Now, for input: /ietf-yang-library:modules-state/module/57
+    # desired output: [{"op":"remove","path":"/ietf-yang-library:modules-state/module/57"}]
+
+    logging.info('final filter path: %s', matchedpath)
+    as_patch = '[{{"op\":\"remove\",\"path\":\"{0}\"}}]'.format(matchedpath)
+    logging.info('generated patch line: %s', as_patch)
+    return as_patch
+
+
+def apply_filter(json_arg, filtering_line):
+    """ Filters a json document by removing the elements identified by a filtering pattern
+
+    :param json_arg: the document to filter
+    :param filtering_line: The filtering pattern. This is specified using jsonpath notation grammar
+            (see http://goessner.net/articles/JsonPath/)
+    :return: the filtered document
+    """
+
+    logging.info('apply_filter:starting. jsonPath filter=[%s]', filtering_line)
+
+    res = jsonpath(json_arg, filtering_line, result_type='PATH')
+    if isinstance(res, types.BooleanType) or len(res) == 0:
+        logging.info('apply_filter: The prefilter [%s] matched nothing', filtering_line)
+        return json_arg
+    if len(res) > 1:
+        raise AssertionError('Bad pre-filter [%s] (returned [%d] entries, should return one at most',
+                             filtering_line, len(res))
+    as_json_patch = from_path_to_jsonpatch(res[0])
+    logging.info('apply_filter: applying patch! resolved patch =%s', as_json_patch)
+    patched_json = jsonpatch.apply_patch(json_arg, as_json_patch)
+
+    logging.info('apply_filter: json after patching: %s', patched_json)
+    return patched_json
+
+
+def prefilter(json_arg, initial_prefilter):
+    """ Performs the prefiltering of a json file
+    :param json_arg: the json document to filter (as string)
+        :type json_arg: str
+    :param initial_prefilter: a file containing a number of filtering patterns (using jsonpath notation)
+    :return: the original document, python-deserialized and having the fragments
+        matched by the filtering patterns removed
+    """
+
+    if not initial_prefilter:
+        logging.info('prefilter not found!')
+        # whether it is filtered or not, return as json so it can be handled uniformly from now on
+        return json.loads(json_arg)
+
+    with open(initial_prefilter) as f:
+        lines = f.read().splitlines()
+    logging.info('prefilter:lines in prefilter file: %d ', len(lines))
+    lines = filter(lambda k: not k.startswith('#'), lines)
+    logging.info('prefilter:lines after removing comments: %d ', len(lines))
+    json_args_as_json = json.loads(json_arg)
+    for filtering_line in lines:
+        json_args_as_json = apply_filter(json_args_as_json, filtering_line)
+
+    return json_args_as_json
+
+
+def prefilter_json_files_then_compare(args):
+    """ Main function. Prefilters the input files using provided prefiltering patterns,
+        then returns number of differences (and the differences themselves, when requested)
+
+    :param args: Input arguments, already parsed
+    :return: the number of differences (from a jsonpatch standpoint) between the input
+             json files (those input files can be prefiltered using a number of patterns when
+             requested)
+    """
+
+    logging.info('prefilter_json_files_then_compare: starting!')
+    with open(args.initialFile) as f:
+        json_initial = file.read(f)
+    with open(args.finalFile) as f2:
+        json_final = file.read(f2)
+
+    patch = jsonpatch.JsonPatch.from_diff(json_initial, json_final)
+    logging.info('prefilter_json_files_then_compare:differences before patching: %d', len(list(patch)))
+
+    json_initial_filtered = prefilter(json_initial, args.initial_prefilter)
+    json_final_filtered = prefilter(json_final, args.finalPreFilter)
+
+    patch_after_filtering = jsonpatch.JsonPatch.from_diff(json_initial_filtered, json_final_filtered)
+    differences_after_patching = list(patch_after_filtering)
+    logging.info('prefilter_json_files_then_compare: differences after patching: %d', len(differences_after_patching))
+
+    if args.printDifferences:
+        for patchline in differences_after_patching:
+            print json.dumps(patchline)
+
+    print len(differences_after_patching)
+    return len(differences_after_patching)
+
+
+def Json_Diff_Check_Keyword(json_before, json_after, filter_before, filter_after):
+    input_argv = ['-i', json_before, '-f', json_after, '-ipf', filter_before, '-fpf', filter_after, '-pd']
+    sys.argv[1:] = input_argv
+    logging.info('starting. constructed command line: %s', sys.argv)
+    return Json_Diff_Check()
+
+
+def parse_args(args):
+    parser = argparse.ArgumentParser(description='both initial and final json files are compared for differences. '
+                                                 'The program returns 0 when the json contents are the same, or the '
+                                                 'number of'
+                                                 ' differences otherwise. Both json files can be prefiltered for '
+                                                 'certain patterns'
+                                                 ' before checking the differences')
+
+    parser.add_argument('-i', '--initialFile', required='true', dest='initialFile', action='store',
+                        help='initial json file')
+    parser.add_argument('-f', '--finalFile', required='true', dest='finalFile', action='store', help='final json file')
+    parser.add_argument('-ipf', '--initial_prefilter', dest='initial_prefilter',
+                        help='File with pre-filtering patterns to apply to the initial json file before comparing')
+    parser.add_argument('-fpf', '--finalPreFilter', dest='finalPreFilter',
+                        help='File with pre-filtering patterns to apply to the final json file before comparing')
+    parser.add_argument('-pd', '--printDifferences', action='store_true',
+                        help='on differences found, prints the list of paths for the found differences before exitting')
+    parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='generate log information')
+    return parser.parse_args(args)
+
+
+def Json_Diff_Check():
+    args = parse_args(sys.argv[1:])
+
+    if hasattr(args, 'verbose'):
+        if args.verbose:
+            logging.basicConfig(level=logging.DEBUG)
+
+    if args.printDifferences:
+        logging.info('(will print differences)')
+
+    result = prefilter_json_files_then_compare(args)
+    return result
+
+
+if __name__ == '__main__':
+    Json_Diff_Check()
diff --git a/csit/libraries/backuprestore/README.txt b/csit/libraries/backuprestore/README.txt
new file mode 100644 (file)
index 0000000..1f4d410
--- /dev/null
@@ -0,0 +1,232 @@
+== Backup-Restore test support library ==
+
+=== 1. Introduction ===
+
+The purpose of this library is to allow the generic verification
+of feature correctness in backup + restore scenarios.
+
+A feature is correct from a backup+restore standpoint when,
+at any provisioning point, a controller backup, followed by a
+restore, can be performed, and the execution of that procedure
+will not have any impact on traffic tests or datastore state
+check in respect to the expected behaviour when no backup + restore
+procedures are performed.
+
+The library can also be used (with minimal modifications) to check
+whether a feature is safe (continues operating correctly) in the
+event of a controller reboot (e.g. SFC is known not to, because of
+keeping certain information (rendered service paths) in the
+operational DS only and being unable to reconstruct that information
+after a reboot).
+
+=== 2. Library usage ===
+
+==== 2.1. Use as Robot Library keywords ====
+
+The library is delivered as a readily-available Robot FW library in
+the ODL integration/test repository. It provides two keywords:
+
+- A new keyword ('''BackupRestoreCheck'''), which:
+
+# Performs a complete datastore export (using Daexim export rpc)
+# Does a backup, then a restore of the backup previously
+  created. NOTE: this step is purposefully not implemented in the
+  keyword (a placeholder for concrete backup & restore scripts is
+  provided instead). ODL does not provide a comprehensive B&R implementation:
+  such implementation shall include both the datastore and certain
+  configuration files, but those configuration files depend on the
+  concrete ODL distribution / deployment, so ODL provides only some
+  pieces to implement that backup (i.e. the datastore backup RPCs).
+  This library is contributed with the purpose of easing the testing
+  of any backup&restore implementation; therefore that implementation
+  shall be incorporated to this library (by modifying this step)
+# Performs a new datastore export
+# Compares both config & operational datastores for differences (that
+  is, pre-backup and post-restore exports for both datastores), optionally
+  prefiltering those exports using pre-filter files (those prefilter files
+  are passed as parameters to the keyword)
+# Fails when pre-backup and post-restore exports are different even after
+  removing the specified filtered parts
+
+- A new keyword ('''ConditionalBackupRestoreCheck'''), which performs
+  the same steps than BackupRestoreCheck only when a command-line flag ("-v
+  BR_TESTING_ENABLED:true") is present. This allows to easily add
+backup-restore verification on existing tests, allowing to toggle
+the execution of that verification
+
+===== 2.1.1. Adding the br verification keyword to an existing robot test =====
+
+The library has been designed from the ground up to allow its use in
+existing testcases, so specific feature provisioning can be tested for
+correctness in backup-restore scenarios. The design premises for the
+library were:
+* To be very easy to incorporate into existing testcases (just one resource
+ import + the verification keyword, that shall be inserted in the existing
+ testcase just after test specific provisioning and before existing test
+verification steps)
+* To be togglable (that is, to allow whether to execute / to bypass the
+export + backup + restore + export + exports comparison block)
+
+===== 2.1.2. Steps to add backup-restore verification to an existing test suite =====
+1) Suite setup: Add ClusterManagement Setup (it is needed for Daexim export
+ to work). Hint: if the testsuite already contains an init suite keyword, you
+ can use the Run Keywords construct in order to run both initialization keywords.
+
+(Subsequent examples use diff-format):
+
+*** Settings ***
+Documentation     Test suite for SFC Service Functions, Operates functions from Restconf APIs.
+-Suite Setup       Init Suite
++Suite Setup       Run Keywords    Init Suite    ClusterManagement Setup
+Suite Teardown    Delete All Sessions
+
+2) Import Backup-Restore support library
+
+Resource          ../../../libraries/TemplatedRequests.robot
++Resource          ../../../libraries/BackupRestoreKeywords.robot
+
+3) Add the verification keyword (after provisioning, before assertions/traffic verification)
+Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+   ${elements}=    Create List    SFC1-100-Path-1    "parent-service-function-path":"SFC1-100"    "hop-number":0    "service-index":255    "ho
+...    "service-index":254    "hop-number":2    "service-index":253
++    ConditionalBackupRestoreCheck
+Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
+
+4) Execute the suite without passing the enablement flag (or pass it disabled:
+  '-v BR_TESTING_ENABLED:false'). Note how the testcase runs as always
+5)  Execute the suite, now passing the enablement flag ('-v BR_TESTING_ENABLED:true'):
+5.1. If the testcases pass, that means the suite provisioning is safe for B&R
+  (that is, both config and operational DSs are identical before and after the
+  procedure, and any assert / traffic verification the cases perform are also correct.
+5.2. If a testcase fail:
+5.2.1. If it is the ConditionalBackupRestoreCheck keyword what fails: it means
+  differences are found in the datastores before the backup / after the restore. Test
+log should include the list of differences found. Two types of differences:
+5.2.1.1. If differences are non-issues (e.g. elements whose changes are expected
+  after a backup + restore, as elements containing timestamps that are recalculated
+  after the restore, or elements showing transitory states which are not important
+  regarding B&R correctness), then create as many pre-filter entries as necessary
+  in the corresponding prefilter file (4 prefilter files can be passed to the
+  keyword: prefilter for the config DS before the backup, config DS after restore,
+  operational DS before the backup and operational DS after the restore. Repeat until
+  all unimportant DS entries are filtered
+5.2.1.2. Differences found on which the former rule is not applicable should be
+  checked carefully, as they are likely to showcase application bugs (regading B&R /
+  controller reboots)
+5.2.2 Errors in the testcase execution when the BR_TESTING_ENABLED:true flag is
+  passed, in keywords other than the verification keyword, are also candidates to
+  point to application bugs (e.g. because of using runtime-required in-memory
+  state that they fail to reconstruct after the restore), thus requiring careful revision
+
+==== 2.2. Execution as a standalone commandline utility ====
+In scenarios where Robot FW is not used for testing, the library core (this is, the
+prefiltered json comparison) can also be used from the command line. The tool is
+provided as a python commandline utility. Help follows:
+
+  odluser@odluser-VirtualBox:~/odl/test/csit/libraries/backuprestore\> python JsonDiffTool.py -h
+  usage: JsonDiffTool.py [-h] -i INITIALFILE -f FINALFILE [-ipf INITIALPREFILTER] [-fpf FINALPREFILTER] [-pd] [-v]
+  both initial and final json files are compared for differences. The program
+  returns 0 when the json contents are the same, or the number of differences
+  otherwise. Both json files can be prefiltered for certain patterns before
+  checking the differences
+  optional arguments:
+  -h, --help            show this help message and exit
+  -i INITIALFILE, --initialFile INITIALFILE
+                        initial json file
+  -f FINALFILE, --finalFile FINALFILE
+                        final json file
+  -ipf INITIALPREFILTER, --initialPreFilter INITIALPREFILTER
+                        File with pre-filtering patterns to apply to the
+                        initial json file before comparing
+  -fpf FINALPREFILTER, --finalPreFilter FINALPREFILTER
+                        File with pre-filtering patterns to apply to the final
+                        json file before comparing
+  -pd, --printDifferences
+                        on differences found, prints the list of paths for the
+                        found differences before exitting
+  -v, --verbose         generate log information
+
+===== 2.2.1. Command-line usage examples =====
+- Checking for differences between two json files (showing only the number of differences)
+  odluser@odluser-VirtualBox:~/odl/test/csit/libraries/backuprestore\> python JsonDiffTool.py -i ./testinput/arrayTwoNames.json -f ./testinput/arrayThreeNamesSorted.json
+  1
+
+- Checking for differences and displaying the differences (jsonpatch format)
+  odluser@odluser-VirtualBox:~/odl/test/csit/libraries/backuprestore\> python JsonDiffTool.py -i ./testinput/arrayTwoNames.json -f ./testinput/arrayThreeNamesSorted.json -pd
+  {"path": "/2", "value": {"Name": "Tom"}, "op": "add"}
+  1
+
+- Checking for differences (and displaying them), using a pre-filter file for the initial json file
+  odluser@odluser-VirtualBox:~/odl/test/csit/libraries/backuprestore\> python JsonDiffTool.py -i ./testinput/mainTestCase/odl_backup_operational_before.json -f testinput/mainTestCase/odl_backup_operational_after.json -ipf testinput/mainTestCase/json_prefilter.conf -pd
+  {"path": "/entity-owners:entity-owners/entity-type/2", "op": "remove"}
+  {"path": "/entity-owners:entity-owners/entity-type/4", "value": {"type": "iface", "entity": [{"owner": "member-1", "id": "/general-entity:entity[general-entity:name='iface']", "candidate": [{"name": "member-1"}]}]}, "op": "add"}
+  {"path": "/network-topology:network-topology/topology/3", "value": {"node": [{"netconf-node-topology:host": "127.0.0.1", "netconf-node-topology:port": 1830, "netconf-node-topology:connection-status": "connecting", "node-id": "CONTROLLER1"}, {"netconf-node-topology:host": "127.0.0.1", "netconf-node-topology:port": 1830, "netconf-node-topology:connection-status": "connecting", "node-id": "CONTROLLER2"}], "topology-id": "topology-netconf"}, "op": "replace"}
+  {"path": "/ietf-yang-library:modules-state/module-set-id", "value": "3", "op": "replace"}
+  {"path": "/ietf-yang-library:modules-state/module/56", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/116", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/127", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/140", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/139", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/185", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/238", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/267", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/269", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/278", "op": "remove"}
+  {"path": "/ietf-yang-library:modules-state/module/277", "op": "remove"}
+  15
+
+===== 2.2.2. Unit tests =====
+A handful of unit tests (testing both jsonpath - jsonpatch expression transformation,
+difference evaluation, use of filters and error cases) are provided. They can be
+executed as standard python unittests from the commandline:
+
+  odluser@odluser-VirtualBox:~/odl/test/csit/libraries/backuprestore\> python backuprestoretest.py
+  0
+  .2
+  .usage: backuprestoretest.py [-h] -i INITIALFILE -f FINALFILE
+                              [-ipf INITIALPREFILTER] [-fpf FINALPREFILTER]
+                              [-pd] [-v]
+  backuprestoretest.py: error: argument -i/--initialFile is required
+  .14
+  14
+  .16
+  16
+  .16
+  16
+  .1
+  ..16
+  16
+  ...
+  ----------------------------------------------------------------------
+  Ran 11 tests in 0.881s
+  OK
+
+=== 3. Prefilter file format ===
+Prefilter files:
+* Can contain any number of jsonpath expressions ([http://goessner.net/articles/JsonPath/ jsonpath expressions specification])
+* Use "#" as line prefix for comments
+Example:
+  #
+  # Pre-filter file example (removes the module from ietf-yang-library:modules-state which name is 'extension-resync-message')
+  #
+  $.ietf-yang-library:modules-state.module[?(@.name=='extension-resync-message')]
+  # $.ietf-yang-library:modules-state.module[?(@.name=='extension-switchfeatures-message')]
+
+=== 4. Dependencies / discarded alternatives ===
+
+The library includes in the commit itself the jsonpath library by Phil Budne
+(https://pypi.python.org/pypi/jsonpath/). This had to be done in order to rename
+the module (from jsonpath to jsonpathl), because RIDE fails to import a class
+from a module with the same name, which is the case for this library. The library
+license (MIT) allows for including / modifying it, so this inclusion is safe license-wise.
+
+Other alternatives to this library were explored, but were found unfit for the
+purpose. Specifically, we tried to use the popular jsonpath-rw library, but it
+does not support json query filtering by attribute values (only by field names),
+which is a must. Also objectpath, but the library does not support the return of
+the path of matching objects (only matched objects themselves). Those paths are
+required (they are the ones which are transformed into jsonpatch expressions)
+
+jsonpatch library (https://pypi.python.org/pypi/jsonpatch) is expected to be
+installed in order for this library to work. The library is used for removing json
+elements via patches
diff --git a/csit/libraries/backuprestore/backuprestoretest.py b/csit/libraries/backuprestore/backuprestoretest.py
new file mode 100644 (file)
index 0000000..85c8b1e
--- /dev/null
@@ -0,0 +1,169 @@
+import unittest
+import sys
+import JsonDiffTool
+
+"""
+Unit tests for the Json Diff Tool library
+Updated: 2017-04-24
+"""
+
+__author__ = "Diego Granados"
+__copyright__ = "Copyright(c) 2017, Ericsson."
+__license__ = "New-style BSD"
+__email__ = "diego.jesus.granados.lopez@ericsson.com"
+
+
+class PathConversionTest(unittest.TestCase):
+    """
+    Conversions from jsonpath paths to jsonpatch patches used to remove the element pointed by the path
+    """
+
+    def testArrayElementConversion(self):
+        self.assertEquals('[{"op":"remove","path":"/ietf-yang-library:modules-state/module/56"}]',
+                          JsonDiffTool.from_path_to_jsonpatch('/ietf-yang-library:modules-state/module/56'),
+                          "Array element conversion failed!")
+
+    def testMapValueElementConversion(self):
+        self.assertEquals('[{"op":"remove","path":"/ietf-yang-library:modules-state/module/blablah"}]',
+                          JsonDiffTool.from_path_to_jsonpatch('/ietf-yang-library:modules-state/module/blablah'),
+                          "Array element conversion failed!")
+
+
+class JsonDiffToolTest(unittest.TestCase):
+    """
+    Tests for the tool itself, including both command-line and RIDE keyword invokation style
+    """
+
+    def testSimpleDifferenceCountingWithoutFiltering(self):
+        """
+        Identical documents
+        """
+        self.assertEquals(0,
+                          JsonDiffTool.Json_Diff_Check_Keyword('testinput/arrayTwoNames.json',
+                                                               'testinput/arrayTwoNamesCopy.json',
+                                                               '',
+                                                               ''),
+                          'failed! (expected 0 differences)')
+
+    def testEqualFilesWithScrambledArrayOrder(self):
+        """
+        This is moving an array element from one position to other. RFC 6902 describes this as "moving
+        a value", but this jsonpatch implementation constructs a patch using remove + add. Acceptable though
+        """
+        self.assertEquals(2,
+                          JsonDiffTool.Json_Diff_Check_Keyword('testinput/arrayTwoNames.json',
+                                                               'testinput/arrayTwoNamesReversed.json',
+                                                               '',
+                                                               ''),
+                          'failed! (expected 2 differences)')
+
+    def testEqualFilesWithChangedAttributeOrder(self):
+        """
+        Attributes in different order. It's not a difference
+        """
+        self.assertEquals(0,
+                          JsonDiffTool.Json_Diff_Check_Keyword('testinput/setTwoNames.json',
+                                                               'testinput/setTwoNamesReversed.json',
+                                                               '',
+                                                               ''),
+                          'failed! (expected 0 differences)')
+
+    def testSimpleDifferenceSecondFileWithExtraAttrib(self):
+        self.assertEquals(1,
+                          JsonDiffTool.Json_Diff_Check_Keyword('testinput/setTwoNames.json',
+                                                               'testinput/setTwoNamesExtraAttrib.json',
+                                                               '',
+                                                               ''),
+                          'failed! (expected 1 differences)')
+
+    def testSimpleDifferenceCountingWithoutFiltering(self):
+        """
+        Example coming from a true daexim export. No prefilters used
+        """
+        input_argv = ['-i', 'testinput/mainTestCase/odl_backup_operational_before.json',
+                      '-f', 'testinput/mainTestCase/odl_backup_operational_after.json']
+        sys.argv[1:] = input_argv
+        self.assertEquals(16,
+                          JsonDiffTool.Json_Diff_Check(),
+                          "main failed! expected 16 differences, result was: " + str(JsonDiffTool.Json_Diff_Check()))
+
+    def testSimpleDifferenceCountingUsingSingleMatchingBeforeFilter(self):
+        """
+        Using a prefilter for the initial file The prefilter contains one expression only
+        """
+        input_argv = ['-i', 'testinput/mainTestCase/odl_backup_operational_before.json',
+                      '-f', 'testinput/mainTestCase/odl_backup_operational_after.json',
+                      '-ipf', 'testinput/mainTestCase/json_prefilter.conf', '-v']
+        sys.argv[1:] = input_argv
+        self.assertEquals(15,
+                          JsonDiffTool.Json_Diff_Check(),
+                          "main failed! expected 15 differences, result was: " + str(JsonDiffTool.Json_Diff_Check()))
+
+    def testSimpleDifferenceCountingUsingMatchingBeforeFilterMatchingTwoEntries(self):
+        """
+        Using a prefilter for the initial file The prefilter contains two expressions
+        """
+        input_argv = ['-i', 'testinput/mainTestCase/odl_backup_operational_before.json',
+                      '-f', 'testinput/mainTestCase/odl_backup_operational_after.json',
+                      '-ipf', 'testinput/mainTestCase/json_prefilter_two_matches.conf', '-v']
+        sys.argv[1:] = input_argv
+        self.assertEquals(14,
+                          JsonDiffTool.Json_Diff_Check(),
+                          "main failed! expected 14 differences, result was: " + str(JsonDiffTool.Json_Diff_Check()))
+
+    def testSimpleDifferenceCountingUsingSingleMatchingBeforeFilter(self):
+        """
+        Using a prefilter for both initial and final files
+        """
+        input_argv = ['-i', 'testinput/mainTestCase/odl_backup_operational_before.json',
+                      '-f', 'testinput/mainTestCase/odl_backup_operational_after.json',
+                      '-ipf', 'testinput/mainTestCase/json_prefilter.conf',
+                      '-fpf', 'testinput/mainTestCase/json_postfilter.conf',
+                      '-v']
+        sys.argv[1:] = input_argv
+        self.assertEquals(16,
+                          JsonDiffTool.Json_Diff_Check(),
+                          "main failed! expected 16 differences, result was: " + str(JsonDiffTool.Json_Diff_Check()))
+
+    def testUsingANonExistingFile(self):
+        """
+        The second file does not exist. Exception expected
+        """
+        self.assertRaises(IOError,
+                          JsonDiffTool.Json_Diff_Check_Keyword,
+                          'testinput/arrayTwoNames.json',
+                          'testinput/thisFileDoesNotExist.json',
+                          '',
+                          '')
+
+    def testNotPassingAMandatoryParameter(self):
+        """
+        Both initial and final json files are mandatory
+        """
+        input_argv = ['-f', 'testinput/mainTestCase/odl_backup_operational_after.json']
+        # parser = JsonDiffTool.parseArgs(input_argv)
+
+        with self.assertRaises(SystemExit) as cm:
+            JsonDiffTool.parse_args(input_argv)
+
+        # 2 for missing argument
+        self.assertEqual(cm.exception.code, 2)
+
+    def testUsingNotMatchingFilterExpressions(self):
+        """
+        Using prefilter files whose expressions match nothing
+        """
+        input_argv = ['-i', 'testinput/mainTestCase/odl_backup_operational_before.json',
+                      '-f', 'testinput/mainTestCase/odl_backup_operational_after.json',
+                      '-ipf', 'testinput/mainTestCase/json_prefilter_zero_matches.conf',
+                      '-fpf', 'testinput/mainTestCase/json_prefilter_zero_matches.conf',
+                      '-v']
+        sys.argv[1:] = input_argv
+        self.assertEquals(16,
+                          JsonDiffTool.Json_Diff_Check(),
+                          "main failed! expected 16 differences, result was: " + str(
+                              JsonDiffTool.Json_Diff_Check()))
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/csit/libraries/backuprestore/jsonpathl.py b/csit/libraries/backuprestore/jsonpathl.py
new file mode 100644 (file)
index 0000000..bf84e80
--- /dev/null
@@ -0,0 +1,367 @@
+"""
+An XPath for JSON
+
+A port of the Perl, and JavaScript versions of JSONPath
+see http://goessner.net/articles/JsonPath/
+
+Based on on JavaScript version by Stefan Goessner at:
+        http://code.google.com/p/jsonpath/
+and Perl version by Kate Rhodes at:
+        http://github.com/masukomi/jsonpath-perl/tree/master
+"""
+
+import re
+import sys
+
+__author__ = "Phil Budne"
+__revision__ = "$Revision: 1.13 $"
+__version__ = '0.54'
+
+#   Copyright (c) 2007 Stefan Goessner (goessner.net)
+#       Copyright (c) 2008 Kate Rhodes (masukomi.org)
+#       Copyright (c) 2008-2012 Philip Budne (ultimate.com)
+#   Licensed under the MIT licence:
+#
+#   Permission is hereby granted, free of charge, to any person
+#   obtaining a copy of this software and associated documentation
+#   files (the "Software"), to deal in the Software without
+#   restriction, including without limitation the rights to use,
+#   copy, modify, merge, publish, distribute, sublicense, and/or sell
+#   copies of the Software, and to permit persons to whom the
+#   Software is furnished to do so, subject to the following
+#   conditions:
+#
+#   The above copyright notice and this permission notice shall be
+#   included in all copies or substantial portions of the Software.
+#
+#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+#   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+#   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+#   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+#   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+#   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+#   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+#   OTHER DEALINGS IN THE SOFTWARE.
+
+# XXX BUGS:
+# evalx is generally a crock:
+#       handle !@.name.name???
+# there are probably myriad unexpected ways to get an exception:
+#       wrap initial "trace" call in jsonpath body in a try/except??
+
+# XXX TODO:
+# internally keep paths as lists to preserve integer types
+#       (instead of as ';' delimited strings)
+
+__all__ = ['jsonpath']
+
+
+# XXX precompile RE objects on load???
+# re_1 = re.compile(.....)
+# re_2 = re.compile(.....)
+
+def normalize(x):
+    """normalize the path expression; outside jsonpath to allow testing"""
+    subx = []
+
+    # replace index/filter expressions with placeholders
+    # Python anonymous functions (lambdas) are cryptic, hard to debug
+    def f1(m):
+        n = len(subx)  # before append
+        g1 = m.group(1)
+        subx.append(g1)
+        ret = "[#%d]" % n
+        #       print "f1:", g1, ret
+        return ret
+
+    x = re.sub(r"[\['](\??\(.*?\))[\]']", f1, x)
+
+    # added the negative lookbehind -krhodes
+    x = re.sub(r"'?(?<!@)\.'?|\['?", ";", x)
+
+    x = re.sub(r";;;|;;", ";..;", x)
+
+    x = re.sub(r";$|'?\]|'$", "", x)
+
+    # put expressions back
+    def f2(m):
+        g1 = m.group(1)
+        #       print "f2:", g1
+        return subx[int(g1)]
+
+    x = re.sub(r"#([0-9]+)", f2, x)
+
+    return x
+
+
+def jsonpath(obj, expr, result_type='VALUE', debug=0, use_eval=True):
+    """traverse JSON object using jsonpath expr, returning values or paths"""
+
+    def s(x, y):
+        """concatenate path elements"""
+        return str(x) + ';' + str(y)
+
+    def isint(x):
+        """check if argument represents a decimal integer"""
+        return x.isdigit()
+
+    def as_path(path):
+        """convert internal path representation to
+           "full bracket notation" for PATH output"""
+        p = '$'
+        for piece in path.split(';')[1:]:
+            # make a guess on how to index
+            # XXX need to apply \ quoting on '!!
+            if isint(piece):
+                p += "[%s]" % piece
+            else:
+                p += "['%s']" % piece
+        return p
+
+    def store(path, object):
+        if result_type == 'VALUE':
+            result.append(object)
+        elif result_type == 'IPATH':  # Index format path (Python ext)
+            # return list of list of indices -- can be used w/o "eval" or split
+            result.append(path.split(';')[1:])
+        else:  # PATH
+            result.append(as_path(path))
+        return path
+
+    def trace(expr, obj, path):
+        if debug:
+            print "trace", expr, "/", path
+        if expr:
+            x = expr.split(';')
+            loc = x[0]
+            x = ';'.join(x[1:])
+            if debug:
+                print "\t", loc, type(obj)
+            if loc == "*":
+                def f03(key, loc, expr, obj, path):
+                    if debug > 1:
+                        print "\tf03", key, loc, expr, path
+                    trace(s(key, expr), obj, path)
+
+                walk(loc, x, obj, path, f03)
+            elif loc == "..":
+                trace(x, obj, path)
+
+                def f04(key, loc, expr, obj, path):
+                    if debug > 1:
+                        print "\tf04", key, loc, expr, path
+                    if isinstance(obj, dict):
+                        if key in obj:
+                            trace(s('..', expr), obj[key], s(path, key))
+                    else:
+                        if key < len(obj):
+                            trace(s('..', expr), obj[key], s(path, key))
+
+                walk(loc, x, obj, path, f04)
+            elif loc == "!":
+                # Perl jsonpath extension: return keys
+                def f06(key, loc, expr, obj, path):
+                    if isinstance(obj, dict):
+                        trace(expr, key, path)
+
+                walk(loc, x, obj, path, f06)
+            elif isinstance(obj, dict) and loc in obj:
+                trace(x, obj[loc], s(path, loc))
+            elif isinstance(obj, list) and isint(loc):
+                iloc = int(loc)
+                if len(obj) >= iloc:
+                    trace(x, obj[iloc], s(path, loc))
+            else:
+                # [(index_expression)]
+                if loc.startswith("(") and loc.endswith(")"):
+                    if debug > 1:
+                        print "index", loc
+                    e = evalx(loc, obj)
+                    trace(s(e, x), obj, path)
+                    return
+
+                # ?(filter_expression)
+                if loc.startswith("?(") and loc.endswith(")"):
+                    if debug > 1:
+                        print "filter", loc
+
+                    def f05(key, loc, expr, obj, path):
+                        if debug > 1:
+                            print "f05", key, loc, expr, path
+                        if isinstance(obj, dict):
+                            eval_result = evalx(loc, obj[key])
+                        else:
+                            eval_result = evalx(loc, obj[int(key)])
+                        if eval_result:
+                            trace(s(key, expr), obj, path)
+
+                    loc = loc[2:-1]
+                    walk(loc, x, obj, path, f05)
+                    return
+
+                m = re.match(r'(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$', loc)
+                if m:
+                    if isinstance(obj, (dict, list)):
+                        def max(x, y):
+                            if x > y:
+                                return x
+                            return y
+
+                        def min(x, y):
+                            if x < y:
+                                return x
+                            return y
+
+                        objlen = len(obj)
+                        s0 = m.group(1)
+                        s1 = m.group(2)
+                        s2 = m.group(3)
+
+                        # XXX int("badstr") raises exception
+                        start = int(s0) if s0 else 0
+                        end = int(s1) if s1 else objlen
+                        step = int(s2) if s2 else 1
+
+                        if start < 0:
+                            start = max(0, start + objlen)
+                        else:
+                            start = min(objlen, start)
+                        if end < 0:
+                            end = max(0, end + objlen)
+                        else:
+                            end = min(objlen, end)
+
+                        for i in xrange(start, end, step):
+                            trace(s(i, x), obj, path)
+                    return
+
+                # after (expr) & ?(expr)
+                if loc.find(",") >= 0:
+                    # [index,index....]
+                    for piece in re.split(r"'?,'?", loc):
+                        if debug > 1:
+                            print "piece", piece
+                        trace(s(piece, x), obj, path)
+        else:
+            store(path, obj)
+
+    def walk(loc, expr, obj, path, funct):
+        if isinstance(obj, list):
+            for i in xrange(0, len(obj)):
+                funct(i, loc, expr, obj, path)
+        elif isinstance(obj, dict):
+            for key in obj:
+                funct(key, loc, expr, obj, path)
+
+    def evalx(loc, obj):
+        """eval expression"""
+
+        if debug:
+            print "evalx", loc
+
+        # a nod to JavaScript. doesn't work for @.name.name.length
+        # Write len(@.name.name) instead!!!
+        loc = loc.replace("@.length", "len(__obj)")
+
+        loc = loc.replace("&&", " and ").replace("||", " or ")
+
+        # replace !@.name with 'name' not in obj
+        # XXX handle !@.name.name.name....
+        def notvar(m):
+            return "'%s' not in __obj" % m.group(1)
+
+        loc = re.sub("!@\.([a-zA-Z@_]+)", notvar, loc)
+
+        # replace @.name.... with __obj['name']....
+        # handle @.name[.name...].length
+        def varmatch(m):
+            def brackets(elts):
+                ret = "__obj"
+                for e in elts:
+                    if isint(e):
+                        ret += "[%s]" % e  # ain't necessarily so
+                    else:
+                        ret += "['%s']" % e  # XXX beware quotes!!!!
+                return ret
+
+            g1 = m.group(1)
+            elts = g1.split('.')
+            if elts[-1] == "length":
+                return "len(%s)" % brackets(elts[1:-1])
+            return brackets(elts[1:])
+
+        loc = re.sub(r'(?<!\\)(@\.[a-zA-Z@_.]+)', varmatch, loc)
+
+        # removed = -> == translation
+        # causes problems if a string contains =
+
+        # replace @  w/ "__obj", but \@ means a literal @
+        loc = re.sub(r'(?<!\\)@', "__obj", loc).replace(r'\@', '@')
+        if not use_eval:
+            if debug:
+                print "eval disabled"
+            raise Exception("eval disabled")
+        if debug:
+            print "eval", loc
+        try:
+            # eval w/ caller globals, w/ local "__obj"!
+            v = eval(loc, caller_globals, {'__obj': obj})
+        except Exception, e:
+            if debug:
+                print e
+            return False
+
+        if debug:
+            print "->", v
+        return v
+
+    # body of jsonpath()
+
+    # Get caller globals so eval can pick up user functions!!!
+    caller_globals = sys._getframe(1).f_globals
+    result = []
+    if expr and obj:
+        cleaned_expr = normalize(expr)
+        if cleaned_expr.startswith("$;"):
+            cleaned_expr = cleaned_expr[2:]
+
+        # XXX wrap this in a try??
+        trace(cleaned_expr, obj, '$')
+
+        if len(result) > 0:
+            return result
+    return False
+
+
+if __name__ == '__main__':
+    try:
+        import json  # v2.6
+    except ImportError:
+        import simplejson as json
+
+    import sys
+
+    # XXX take options for output format, output file, debug level
+
+    if len(sys.argv) < 3 or len(sys.argv) > 4:
+        sys.stdout.write("Usage: jsonpath.py FILE PATH [OUTPUT_TYPE]\n")
+        sys.exit(1)
+
+    object = json.load(file(sys.argv[1]))
+    path = sys.argv[2]
+    format = 'VALUE'
+
+    if len(sys.argv) > 3:
+        # XXX verify?
+        format = sys.argv[3]
+
+    value = jsonpath(object, path, format)
+
+    if not value:
+        sys.exit(1)
+
+    f = sys.stdout
+    json.dump(value, f, sort_keys=True, indent=1)
+    f.write("\n")
+
+    sys.exit(0)
diff --git a/csit/libraries/backuprestore/testinput/arrayThreeNamesSorted.json b/csit/libraries/backuprestore/testinput/arrayThreeNamesSorted.json
new file mode 100644 (file)
index 0000000..8b15e47
--- /dev/null
@@ -0,0 +1 @@
+[{"Name": "John"},{"Name": "Mark"}, {"Name": "Tom"}]
diff --git a/csit/libraries/backuprestore/testinput/arrayTwoNames.json b/csit/libraries/backuprestore/testinput/arrayTwoNames.json
new file mode 100644 (file)
index 0000000..3e35dc6
--- /dev/null
@@ -0,0 +1 @@
+[{"Name": "John"},{"Name": "Mark"}]
diff --git a/csit/libraries/backuprestore/testinput/arrayTwoNamesCopy.json b/csit/libraries/backuprestore/testinput/arrayTwoNamesCopy.json
new file mode 100644 (file)
index 0000000..3e35dc6
--- /dev/null
@@ -0,0 +1 @@
+[{"Name": "John"},{"Name": "Mark"}]
diff --git a/csit/libraries/backuprestore/testinput/arrayTwoNamesReversed.json b/csit/libraries/backuprestore/testinput/arrayTwoNamesReversed.json
new file mode 100644 (file)
index 0000000..7322203
--- /dev/null
@@ -0,0 +1 @@
+[{"Name": "Mark"},{"Name": "John"}]
diff --git a/csit/libraries/backuprestore/testinput/filterThreeArray.conf b/csit/libraries/backuprestore/testinput/filterThreeArray.conf
new file mode 100644 (file)
index 0000000..1b80edf
--- /dev/null
@@ -0,0 +1,7 @@
+# $.*[1]
+$.[?(@.Name=='Tom')]
+#$[@.Name is 'Tom']
+# "$.Name"
+# $.ietf-yang-library:modules-state.module[?(@.name=='extension-resync-message')]
+# $.ietf-yang-library:modules-state.module[?(@.name=='extension-switchfeatures-message')]
+# $.ietf-yang-library:modules-state.module
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/json_postfilter.conf b/csit/libraries/backuprestore/testinput/mainTestCase/json_postfilter.conf
new file mode 100644 (file)
index 0000000..4dffd18
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# aclservice-config
+$.ietf-yang-library:modules-state.module[?(@.name=='aclservice-config')]
+# $.ietf-yang-library:modules-state.module[?(@.name=='extension-switchfeatures-message')]
+# $.ietf-yang-library:modules-state.module
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter.conf b/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter.conf
new file mode 100644 (file)
index 0000000..8b359fe
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# Pre-filter file example (removes the module from ietf-yang-library:modules-state which name is 'extension-resync-message')
+#
+$.ietf-yang-library:modules-state.module[?(@.name=='extension-resync-message')]
+# $.ietf-yang-library:modules-state.module[?(@.name=='extension-switchfeatures-message')]
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_two_matches.conf b/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_two_matches.conf
new file mode 100644 (file)
index 0000000..c553d59
--- /dev/null
@@ -0,0 +1,3 @@
+$.ietf-yang-library:modules-state.module[?(@.name=='extension-resync-message')]
+$.ietf-yang-library:modules-state.module[?(@.name=='extension-switchfeatures-message')]
+# $.ietf-yang-library:modules-state.module
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_zero_matches.conf b/csit/libraries/backuprestore/testinput/mainTestCase/json_prefilter_zero_matches.conf
new file mode 100644 (file)
index 0000000..30a1900
--- /dev/null
@@ -0,0 +1,6 @@
+#
+# Support file for a negative test case
+# none of this patterns will match anything
+#
+$.ietf-yang-library:modules-state.module[?(@.name=='blablah-name')]
+$.ietf-yang-library:modules-state.module[?(@.name=='blablah-name-two')]
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_after.json b/csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_after.json
new file mode 100644 (file)
index 0000000..776dfd8
--- /dev/null
@@ -0,0 +1 @@
+{"entity-owners:entity-owners":{"entity-type":[{"type":"bgp","entity":[{"id":"/general-entity:entity[general-entity:name='bgp']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"ovsdb-southbound-provider","entity":[{"id":"/general-entity:entity[general-entity:name='ovsdb-southbound-provider']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"org.opendaylight.mdsal.ServiceEntityType","entity":[{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER1]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"},{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER2]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"org.opendaylight.mdsal.AsyncServiceCloseEntityType","entity":[{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER1]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"},{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER2]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"iface","entity":[{"id":"/general-entity:entity[general-entity:name='iface']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"ovsdb-hwvtepsouthbound-provider","entity":[{"id":"/general-entity:entity[general-entity:name='ovsdb-hwvtepsouthbound-provider']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"arpmonitoring","entity":[{"id":"/general-entity:entity[general-entity:name='arpmonitoring']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"elan","entity":[{"id":"/general-entity:entity[general-entity:name='elan']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"netvirt-acl","entity":[{"id":"/general-entity:entity[general-entity:name='netvirt-acl']","candidate":[{"name":"member-1"}],"owner":"member-1"}]}]},"network-topology:network-topology":{"topology":[{"topology-id":"hwvtep:1"},{"topology-id":"flow:1"},{"topology-id":"ovsdb:1"},{"topology-id":"topology-netconf","node":[{"node-id":"CONTROLLER1","netconf-node-topology:connection-status":"connecting","netconf-node-topology:port":1830,"netconf-node-topology:host":"127.0.0.1"},{"node-id":"CONTROLLER2","netconf-node-topology:connection-status":"connecting","netconf-node-topology:port":1830,"netconf-node-topology:host":"127.0.0.1"}]},{"topology-id":"netvirt:1"}]},"ietf-yang-library:modules-state":{"module":[{"name":"entity-owners","revision":"2015-08-04","schema":"/modules/entity-owners/2015-08-04","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:clustering:entity-owners","conformance-type":"import"},{"name":"opendaylight-md-sal-common","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-common/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:common","conformance-type":"import"},{"name":"ietf-restconf","revision":"2017-01-26","schema":"/modules/ietf-restconf/2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-yang-types","revision":"2010-09-24","schema":"/modules/ietf-yang-types/2010-09-24","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"neutronvpn-config","revision":"2016-08-06","schema":"/modules/neutronvpn-config/2016-08-06","namespace":"urn:opendaylight:netvirt:neutronvpn:config","conformance-type":"import"},{"name":"batch-common","revision":"2016-03-22","schema":"/modules/batch-common/2016-03-22","namespace":"urn:opendaylight:service:batch:common","conformance-type":"import"},{"name":"iana-afn-safi","revision":"2013-07-04","schema":"/modules/iana-afn-safi/2013-07-04","namespace":"urn:ietf:params:xml:ns:yang:iana-afn-safi","conformance-type":"import"},{"name":"l3nexthop","revision":"2015-04-09","schema":"/modules/l3nexthop/2015-04-09","namespace":"urn:opendaylight:netvirt:l3nexthop","conformance-type":"import"},{"name":"dhcpservice-api","revision":"2015-07-10","schema":"/modules/dhcpservice-api/2015-07-10","namespace":"urn:opendaylight:params:xml:ns:yang:dhcpservice:api","conformance-type":"import"},{"name":"forwarding-rules-manager-config","revision":"2016-05-11","schema":"/modules/forwarding-rules-manager-config/2016-05-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager:config","conformance-type":"import"},{"name":"general-entity","revision":"2015-08-20","schema":"/modules/general-entity/2015-08-20","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:general-entity","conformance-type":"import"},{"name":"dhcpservice-config","revision":"2015-07-10","schema":"/modules/dhcpservice-config/2015-07-10","namespace":"urn:opendaylight:params:xml:ns:yang:dhcpservice:config","conformance-type":"import"},{"name":"aclservice-config","revision":"2016-08-06","schema":"/modules/aclservice-config/2016-08-06","namespace":"urn:opendaylight:netvirt:aclservice-config","conformance-type":"import"},{"name":"ietf-yang-types","revision":"2013-07-15","schema":"/modules/ietf-yang-types/2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"flow-errors","revision":"2013-11-16","schema":"/modules/flow-errors/2013-11-16","namespace":"urn:opendaylight:flow:errors","conformance-type":"import"},{"name":"credential-store","revision":"2015-02-26","schema":"/modules/credential-store/2015-02-26","namespace":"urn:opendaylight:params:xml:ns:yang:aaa:credential-store","conformance-type":"import"},{"name":"rpc-context","revision":"2013-06-17","schema":"/modules/rpc-context/2013-06-17","namespace":"urn:ietf:params:xml:ns:yang:rpc-context","conformance-type":"import"},{"name":"opendaylight-queue-types","revision":"2013-09-25","schema":"/modules/opendaylight-queue-types/2013-09-25","namespace":"urn:opendaylight:flow:types:queue","conformance-type":"import"},{"name":"vpn-rpc","revision":"2016-02-01","schema":"/modules/vpn-rpc/2016-02-01","namespace":"urn:opendaylight:netvirt:vpn:rpc","conformance-type":"import"},{"name":"neutron-attrs","revision":"2015-07-12","schema":"/modules/neutron-attrs/2015-07-12","namespace":"urn:opendaylight:neutron-attrs","conformance-type":"import"},{"name":"neutron-vpnaas","revision":"2015-07-12","schema":"/modules/neutron-vpnaas/2015-07-12","namespace":"urn:opendaylight:neutron-vpnaas","conformance-type":"import"},{"name":"lldp-speaker","revision":"2014-10-23","schema":"/modules/lldp-speaker/2014-10-23","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker","conformance-type":"import"},{"name":"opendaylight-port-types","revision":"2013-09-25","schema":"/modules/opendaylight-port-types/2013-09-25","namespace":"urn:opendaylight:flow:types:port","conformance-type":"import"},{"name":"neutron-bgpvpns","revision":"2015-09-03","schema":"/modules/neutron-bgpvpns/2015-09-03","namespace":"urn:opendaylight:neutron-bgpvpns","conformance-type":"import"},{"name":"openflow-types","revision":"2013-07-31","schema":"/modules/openflow-types/2013-07-31","namespace":"urn:opendaylight:openflow:common:types","conformance-type":"import"},{"name":"notifications","revision":"2008-07-14","schema":"/modules/notifications/2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"openflow-provider-config","revision":"2016-05-10","schema":"/modules/openflow-provider-config/2016-05-10","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:provider:config","conformance-type":"import"},{"name":"yang-ext","revision":"2013-07-09","schema":"/modules/yang-ext/2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"odl-fib","revision":"2015-03-30","schema":"/modules/odl-fib/2015-03-30","namespace":"urn:opendaylight:netvirt:fibmanager","conformance-type":"import"},{"name":"data-export-import","revision":"2016-09-21","schema":"/modules/data-export-import/2016-09-21","namespace":"urn:opendaylight:daexim","conformance-type":"import"},{"name":"data-export-import-internal","revision":"2016-09-21","schema":"/modules/data-export-import-internal/2016-09-21","namespace":"urn:opendaylight:daexim-internal","conformance-type":"import"},{"name":"cluster-admin","revision":"2015-10-13","schema":"/modules/cluster-admin/2015-10-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"lldp-speaker-config","revision":"2016-05-12","schema":"/modules/lldp-speaker-config/2016-05-12","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker:config","conformance-type":"import"},{"name":"aaa-encrypt-service-config","revision":"2016-09-15","schema":"/modules/aaa-encrypt-service-config/2016-09-15","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"topology-lldp-discovery-config","revision":"2016-05-11","schema":"/modules/topology-lldp-discovery-config/2016-05-11","namespace":"urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config","conformance-type":"import"},{"name":"barrier-common","revision":"2016-03-15","schema":"/modules/barrier-common/2016-03-15","namespace":"urn:opendaylight:service:barrier:common","conformance-type":"import"},{"name":"odl-general-entity","revision":"2015-09-30","schema":"/modules/odl-general-entity/2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"opendaylight-meter-types","revision":"2013-09-18","schema":"/modules/opendaylight-meter-types/2013-09-18","namespace":"urn:opendaylight:meter:types","conformance-type":"import"},{"name":"neutron-ml2-services","revision":"2014-09-30","schema":"/modules/neutron-ml2-services/2014-09-30","namespace":"urn:ericsson:neutron:ml2","conformance-type":"import"},{"name":"neutron-ml3-services","revision":"2014-09-30","schema":"/modules/neutron-ml3-services/2014-09-30","namespace":"urn:ericsson:neutron:ml3","conformance-type":"import"},{"name":"sal-remote","revision":"2014-01-14","schema":"/modules/sal-remote/2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"sal-remote-augment","revision":"2014-07-08","schema":"/modules/sal-remote-augment/2014-07-08","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"lock-manager","revision":"2016-04-13","schema":"/modules/lock-manager/2016-04-13","namespace":"urn:opendaylight:genius:lockmanager","conformance-type":"import"},{"name":"opendaylight-statistics-types","revision":"2013-09-25","schema":"/modules/opendaylight-statistics-types/2013-09-25","namespace":"urn:opendaylight:model:statistics:types","conformance-type":"import"},{"name":"neutron-sfc","revision":"2016-05-11","schema":"/modules/neutron-sfc/2016-05-11","namespace":"urn:opendaylight:neutron-sfc","conformance-type":"import"},{"name":"aaa-cert","revision":"2015-11-26","schema":"/modules/aaa-cert/2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"neutron-networks","revision":"2015-07-12","schema":"/modules/neutron-networks/2015-07-12","namespace":"urn:opendaylight:neutron-networks","conformance-type":"import"},{"name":"neutron-trunks","revision":"2017-01-18","schema":"/modules/neutron-trunks/2017-01-18","namespace":"urn:opendaylight:neutron-trunks","conformance-type":"import"},{"name":"neutron-hostconfig","revision":"2015-07-12","schema":"/modules/neutron-hostconfig/2015-07-12","namespace":"urn:opendaylight:neutron-hostconfig","conformance-type":"import"},{"name":"nc-notifications","revision":"2008-07-14","schema":"/modules/nc-notifications/2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-inet-types","revision":"2013-07-15","schema":"/modules/ietf-inet-types/2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"neutron-types","revision":"2016-05-17","schema":"/modules/neutron-types/2016-05-17","namespace":"urn:opendaylight:neutron-types","conformance-type":"import"},{"name":"ebgp","revision":"2015-09-01","schema":"/modules/ebgp/2015-09-01","namespace":"urn:ericsson:params:xml:ns:yang:ebgp","conformance-type":"import"},{"name":"opendaylight-arbitrary-bitmask-fields","revision":"2016-01-30","schema":"/modules/opendaylight-arbitrary-bitmask-fields/2016-01-30","namespace":"urn:opendaylight:arbitrary:bitmask:fields","conformance-type":"import"},{"name":"ietf-restconf","revision":"2013-10-19","schema":"/modules/ietf-restconf/2013-10-19","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"opendaylight-inventory","revision":"2013-08-19","schema":"/modules/opendaylight-inventory/2013-08-19","namespace":"urn:opendaylight:inventory","conformance-type":"import"},{"name":"neighbor-discovery","revision":"2016-06-20","schema":"/modules/neighbor-discovery/2016-06-20","namespace":"urn:opendaylight:netvirt:ipv6service:nd:packet","conformance-type":"import"},{"name":"odl-nat","revision":"2016-01-11","schema":"/modules/odl-nat/2016-01-11","namespace":"urn:opendaylight:netvirt:natservice","conformance-type":"import"},{"name":"aliveness-monitor","revision":"2016-04-11","schema":"/modules/aliveness-monitor/2016-04-11","namespace":"urn:opendaylight:genius:alivenessmonitor","conformance-type":"import"},{"name":"ietf-yang-library","revision":"2016-06-21","schema":"/modules/ietf-yang-library/2016-06-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"odl-nat-rpc","revision":"2017-02-09","schema":"/modules/odl-nat-rpc/2017-02-09","namespace":"urn:opendaylight:netvirt:natservice:rpc","conformance-type":"import"},{"name":"start-resync-download-notification","revision":"2014-02-07","schema":"/modules/start-resync-download-notification/2014-02-07","namespace":"urn:ericsson:resync:start:notification","conformance-type":"import"},{"name":"ietf-netconf","revision":"2011-06-01","schema":"/modules/ietf-netconf/2011-06-01","feature":["rollback-on-error","xpath","validate","writable-running","confirmed-commit","startup","url","candidate"],"namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import"},{"name":"neutron-provider","revision":"2015-07-12","schema":"/modules/neutron-provider/2015-07-12","namespace":"urn:opendaylight:neutron-provider","conformance-type":"import"},{"name":"sal-queue","revision":"2015-03-05","schema":"/modules/sal-queue/2015-03-05","namespace":"urn:opendaylight:queue:service","conformance-type":"import"},{"name":"openflowplugin-experimenter-types","revision":"2015-10-20","schema":"/modules/openflowplugin-experimenter-types/2015-10-20","namespace":"urn:opendaylight:openflowplugin:experimenter:types","conformance-type":"import"},{"name":"vpn-config","revision":"2016-11-30","schema":"/modules/vpn-config/2016-11-30","namespace":"urn:opendaylight:netvirt:vpn:config","conformance-type":"import"},{"name":"ietf-yang-library","revision":"2016-04-09","schema":"/modules/ietf-yang-library/2016-04-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"network-topology","revision":"2013-07-12","schema":"/modules/network-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"l3-unicast-igp-topology","revision":"2013-07-12","schema":"/modules/l3-unicast-igp-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology","conformance-type":"import"},{"name":"ietf-inet-types","revision":"2010-09-24","schema":"/modules/ietf-inet-types/2010-09-24","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"switch-features-notification","revision":"2013-08-19","schema":"/modules/switch-features-notification/2013-08-19","namespace":"urn:ericsson:switch-features:notification","conformance-type":"import"},{"name":"id-manager","revision":"2016-04-06","schema":"/modules/id-manager/2016-04-06","namespace":"urn:opendaylight:genius:idmanager","conformance-type":"import"},{"name":"system-notifications","revision":"2013-09-27","schema":"/modules/system-notifications/2013-09-27","namespace":"urn:opendaylight:openflow:system","conformance-type":"import"},{"name":"ted","revision":"2013-07-12","schema":"/modules/ted/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network:ted","conformance-type":"import"},{"name":"statistics-manager-control","revision":"2015-08-12","schema":"/modules/statistics-manager-control/2015-08-12","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:sm:control","conformance-type":"import"},{"name":"opendaylight-l2-types","revision":"2013-08-27","schema":"/modules/opendaylight-l2-types/2013-08-27","namespace":"urn:opendaylight:l2:types","conformance-type":"import"},{"name":"isis-topology","revision":"2013-07-12","schema":"/modules/isis-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network:isis-topology","conformance-type":"import"},{"name":"elan-config","revision":"2015-07-10","schema":"/modules/elan-config/2015-07-10","namespace":"urn:opendaylight:netvirt:elan:config","conformance-type":"import"},{"name":"experimenter-flow-types","revision":"2014-04-25","schema":"/modules/experimenter-flow-types/2014-04-25","namespace":"urn:ericsson:experimenter:openflow:types","conformance-type":"import"},{"name":"flow-capable-transaction","revision":"2015-03-04","schema":"/modules/flow-capable-transaction/2015-03-04","namespace":"urn:opendaylight:flow:transaction","conformance-type":"import"},{"name":"sal-port","revision":"2013-11-07","schema":"/modules/sal-port/2013-11-07","namespace":"urn:opendaylight:port:service","conformance-type":"import"},{"name":"forwardingrules-manager-reconciliation","revision":"2015-08-04","schema":"/modules/forwardingrules-manager-reconciliation/2015-08-04","namespace":"urn:ericsson:reconciliation:service","conformance-type":"import"},{"name":"node-config","revision":"2014-10-15","schema":"/modules/node-config/2014-10-15","namespace":"urn:opendaylight:module:config","conformance-type":"import"},{"name":"switch-features-extension","revision":"2014-02-07","schema":"/modules/switch-features-extension/2014-02-07","namespace":"urn:ericsson:switch-features:rpcs:notification","conformance-type":"import"},{"name":"config","revision":"2013-04-05","schema":"/modules/config/2013-04-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config","conformance-type":"import"},{"name":"openflow-provider","revision":"2014-03-26","schema":"/modules/openflow-provider/2014-03-26","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:common:config","conformance-type":"import"},{"name":"openflowplugin-extension-registry","revision":"2015-04-25","schema":"/modules/openflowplugin-extension-registry/2015-04-25","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:extension:api","conformance-type":"import"},{"name":"netty","revision":"2013-11-19","schema":"/modules/netty/2013-11-19","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty","conformance-type":"import"},{"name":"shutdown","revision":"2013-12-18","schema":"/modules/shutdown/2013-12-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:shutdown","conformance-type":"import"},{"name":"netconf-northbound-mapper","revision":"2015-01-14","schema":"/modules/netconf-northbound-mapper/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper","conformance-type":"import"},{"name":"opendaylight-config-dom-datastore","revision":"2014-06-17","schema":"/modules/opendaylight-config-dom-datastore/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:config-dom-store","conformance-type":"import"},{"name":"shutdown-impl","revision":"2013-12-18","schema":"/modules/shutdown-impl/2013-12-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:shutdown:impl","conformance-type":"import"},{"name":"opendaylight-operational-dom-datastore","revision":"2014-06-17","schema":"/modules/opendaylight-operational-dom-datastore/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store","conformance-type":"import"},{"name":"threadpool","revision":"2013-04-09","schema":"/modules/threadpool/2013-04-09","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool","conformance-type":"import"},{"name":"nicira-extension","revision":"2014-07-11","schema":"/modules/nicira-extension/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:openflowplugin:nx:config","conformance-type":"import"},{"name":"threadpool-impl-scheduled","revision":"2013-12-01","schema":"/modules/threadpool-impl-scheduled/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:scheduled","conformance-type":"import"},{"name":"netty-timer","revision":"2013-11-19","schema":"/modules/netty-timer/2013-11-19","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:timer","conformance-type":"import"},{"name":"openflow-switch-connection-provider","revision":"2014-03-28","schema":"/modules/openflow-switch-connection-provider/2014-03-28","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider","conformance-type":"import"},{"name":"netconf-northbound","revision":"2015-01-14","schema":"/modules/netconf-northbound/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound","conformance-type":"import"},{"name":"netconf-northbound-impl","revision":"2015-01-12","schema":"/modules/netconf-northbound-impl/2015-01-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl","conformance-type":"import"},{"name":"threadpool-impl-fixed","revision":"2013-12-01","schema":"/modules/threadpool-impl-fixed/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:fixed","conformance-type":"import"},{"name":"threadpool-impl-flexible","revision":"2013-12-01","schema":"/modules/threadpool-impl-flexible/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:flexible","conformance-type":"import"},{"name":"netty-event-executor","revision":"2013-11-12","schema":"/modules/netty-event-executor/2013-11-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor","conformance-type":"import"},{"name":"inter-vpn-link","revision":"2016-03-11","schema":"/modules/inter-vpn-link/2016-03-11","namespace":"urn:opendaylight:params:xml:ns:yang:netvirt:inter-vpn-link","conformance-type":"import"},{"name":"shared-schema-repository","revision":"2015-07-27","schema":"/modules/shared-schema-repository/2015-07-27","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:topology:shared:schema:repository","conformance-type":"import"},{"name":"resource-manager","revision":"2016-06-22","schema":"/modules/resource-manager/2016-06-22","namespace":"urn:opendaylight:genius:resourcemanager","conformance-type":"import"},{"name":"actor-system-provider-service","revision":"2015-10-05","schema":"/modules/actor-system-provider-service/2015-10-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:service","conformance-type":"import"},{"name":"actor-system-provider-impl","revision":"2015-10-05","schema":"/modules/actor-system-provider-impl/2015-10-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:impl","conformance-type":"import"},{"name":"protocol-framework","revision":"2014-03-13","schema":"/modules/protocol-framework/2014-03-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:protocol:framework","conformance-type":"import"},{"name":"ospf-topology","revision":"2013-07-12","schema":"/modules/ospf-topology/2013-07-12","namespace":"urn:ietf:params:xml:ns:yang:ospf-topology","conformance-type":"import"},{"name":"opendaylight-md-sal-binding-v1-codec","revision":"2016-07-14","schema":"/modules/opendaylight-md-sal-binding-v1-codec/2016-07-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec","conformance-type":"import"},{"name":"threadpool-impl","revision":"2013-04-05","schema":"/modules/threadpool-impl/2013-04-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl","conformance-type":"import"},{"name":"cluster-singleton-service-spi","revision":"2016-07-18","schema":"/modules/cluster-singleton-service-spi/2016-07-18","namespace":"urn:opendaylight:params:xml:ns:yang:md:sal:config:spi:cluster-singleton-service","conformance-type":"import"},{"name":"sal-restconf-service","revision":"2015-07-08","schema":"/modules/sal-restconf-service/2015-07-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:sal:restconf:service","conformance-type":"import"},{"name":"nicira-extension-impl","revision":"2014-07-11","schema":"/modules/nicira-extension-impl/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:nx:config:impl","conformance-type":"import"},{"name":"resync-output","revision":"2014-02-07","schema":"/modules/resync-output/2014-02-07","namespace":"urn:ericsson:resync:output:notification","conformance-type":"import"},{"name":"ietf-netconf-notifications","revision":"2012-02-06","schema":"/modules/ietf-netconf-notifications/2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"opendaylight-md-sal-binding","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-binding/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding","conformance-type":"import"},{"name":"aaa-cert-mdsal","revision":"2016-03-21","schema":"/modules/aaa-cert-mdsal/2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"cluster-admin-provider","revision":"2015-10-13","schema":"/modules/cluster-admin-provider/2015-10-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:cluster-admin-provider","conformance-type":"import"},{"name":"lockmanager-impl","revision":"2016-04-06","schema":"/modules/lockmanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:lockmanager:impl","conformance-type":"import"},{"name":"threadgroup","revision":"2013-11-07","schema":"/modules/threadgroup/2013-11-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup","conformance-type":"import"},{"name":"netconf-northbound-tcp","revision":"2015-04-23","schema":"/modules/netconf-northbound-tcp/2015-04-23","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:tcp","conformance-type":"import"},{"name":"odl-netconf-cfg","revision":"2014-04-08","schema":"/modules/odl-netconf-cfg/2014-04-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf","conformance-type":"import"},{"name":"odl-netconfig-client-cfg","revision":"2014-04-08","schema":"/modules/odl-netconfig-client-cfg/2014-04-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher","conformance-type":"import"},{"name":"opendaylight-port-statistics","revision":"2013-12-14","schema":"/modules/opendaylight-port-statistics/2013-12-14","namespace":"urn:opendaylight:port:statistics","conformance-type":"import"},{"name":"ted","revision":"2013-10-21","schema":"/modules/ted/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network:ted","conformance-type":"import"},{"name":"ietf-netconf-monitoring","revision":"2010-10-04","schema":"/modules/ietf-netconf-monitoring/2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"ietf-netconf-monitoring-extension","revision":"2013-12-10","schema":"/modules/ietf-netconf-monitoring-extension/2013-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring-extension","conformance-type":"import"},{"name":"data-export-import-spi","revision":"2016-08-16","schema":"/modules/data-export-import-spi/2016-08-16","namespace":"urn:opendaylight:daexim-spi","conformance-type":"import"},{"name":"opendaylight-md-sal-dom","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-dom/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom","conformance-type":"import"},{"name":"opendaylight-inmemory-datastore-provider","revision":"2014-06-17","schema":"/modules/opendaylight-inmemory-datastore-provider/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider","conformance-type":"import"},{"name":"distributed-datastore-provider","revision":"2014-06-12","schema":"/modules/distributed-datastore-provider/2014-06-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"opendaylight-pingpong-broker","revision":"2014-11-07","schema":"/modules/opendaylight-pingpong-broker/2014-11-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:pingpong","conformance-type":"import"},{"name":"opendaylight-rest-connector","revision":"2014-07-24","schema":"/modules/opendaylight-rest-connector/2014-07-24","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector","conformance-type":"import"},{"name":"odl-sal-netconf-connector-cfg","revision":"2015-08-03","schema":"/modules/odl-sal-netconf-connector-cfg/2015-08-03","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf","conformance-type":"import"},{"name":"netconf-topology","revision":"2015-07-27","schema":"/modules/netconf-topology/2015-07-27","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:topology","conformance-type":"import"},{"name":"opendaylight-sal-binding-broker-impl","revision":"2013-10-28","schema":"/modules/opendaylight-sal-binding-broker-impl/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl","conformance-type":"import"},{"name":"netconf-auth","revision":"2015-07-15","schema":"/modules/netconf-auth/2015-07-15","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:auth","conformance-type":"import"},{"name":"netconf-northbound-ssh","revision":"2015-01-14","schema":"/modules/netconf-northbound-ssh/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:ssh","conformance-type":"import"},{"name":"aaa-authn-netconf-plugin","revision":"2015-07-15","schema":"/modules/aaa-authn-netconf-plugin/2015-07-15","namespace":"config:aaa:authn:netconf:plugin","conformance-type":"import"},{"name":"cloud-servicechain-api","revision":"2015-12-11","schema":"/modules/cloud-servicechain-api/2015-12-11","namespace":"urn:opendaylight:netvirt:cloud-servicechain:api","conformance-type":"import"},{"name":"network-topology","revision":"2013-10-21","schema":"/modules/network-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"hwvtep","revision":"2015-09-01","schema":"/modules/hwvtep/2015-09-01","namespace":"urn:opendaylight:params:xml:ns:yang:ovsdb:hwvtep","conformance-type":"import"},{"name":"opendaylight-topology","revision":"2013-10-30","schema":"/modules/opendaylight-topology/2013-10-30","namespace":"urn:opendaylight:model:topology:general","conformance-type":"import"},{"name":"l3-unicast-igp-topology","revision":"2013-10-21","schema":"/modules/l3-unicast-igp-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology","conformance-type":"import"},{"name":"isis-topology","revision":"2013-10-21","schema":"/modules/isis-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network:isis-topology","conformance-type":"import"},{"name":"opendaylight-topology-view","revision":"2013-10-30","schema":"/modules/opendaylight-topology-view/2013-10-30","namespace":"urn:opendaylight:model:topology:view","conformance-type":"import"},{"name":"ospf-topology","revision":"2013-10-21","schema":"/modules/ospf-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:ospf-topology","conformance-type":"import"},{"name":"opendaylight-topology-inventory","revision":"2013-10-30","schema":"/modules/opendaylight-topology-inventory/2013-10-30","namespace":"urn:opendaylight:model:topology:inventory","conformance-type":"import"},{"name":"resync-notification","revision":"2014-02-07","schema":"/modules/resync-notification/2014-02-07","namespace":"urn:ericsson:resync:rpcs:notification","conformance-type":"import"},{"name":"sal-experimenter-mp-message","revision":"2015-10-20","schema":"/modules/sal-experimenter-mp-message/2015-10-20","namespace":"urn:opendaylight:experimenter-mp-message:service","conformance-type":"import"},{"name":"netconf-node-inventory","revision":"2014-01-08","schema":"/modules/netconf-node-inventory/2014-01-08","namespace":"urn:opendaylight:netconf-node-inventory","conformance-type":"import"},{"name":"netconf-northbound-notification","revision":"2015-08-06","schema":"/modules/netconf-northbound-notification/2015-08-06","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification","conformance-type":"import"},{"name":"openflowjava-nx-api-config","revision":"2014-07-11","schema":"/modules/openflowjava-nx-api-config/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:api:config","conformance-type":"import"},{"name":"openflowjava-nx-config","revision":"2014-07-11","schema":"/modules/openflowjava-nx-config/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:config","conformance-type":"import"},{"name":"flow-topology-discovery","revision":"2013-08-19","schema":"/modules/flow-topology-discovery/2013-08-19","namespace":"urn:opendaylight:flow:topology:discovery","conformance-type":"import"},{"name":"openflow-extensible-match","revision":"2015-02-25","schema":"/modules/openflow-extensible-match/2015-02-25","namespace":"urn:opendaylight:openflow:oxm","conformance-type":"import"},{"name":"experimenter-match-type","revision":"2014-03-06","schema":"/modules/experimenter-match-type/2014-03-06","namespace":"urn:experimenter:matchExp","conformance-type":"import"},{"name":"openflow-action","revision":"2015-02-03","schema":"/modules/openflow-action/2015-02-03","namespace":"urn:opendaylight:openflow:common:action","conformance-type":"import"},{"name":"openflow-instruction","revision":"2013-07-31","schema":"/modules/openflow-instruction/2013-07-31","namespace":"urn:opendaylight:openflow:common:instruction","conformance-type":"import"},{"name":"nicira-action","revision":"2014-04-21","schema":"/modules/nicira-action/2014-04-21","namespace":"urn:opendaylight:openflowjava:nx:action","conformance-type":"import"},{"name":"nicira-match","revision":"2014-04-21","schema":"/modules/nicira-match/2014-04-21","namespace":"urn:opendaylight:openflowjava:nx:match","conformance-type":"import"},{"name":"odl-mdsalutil","revision":"2016-04-06","schema":"/modules/odl-mdsalutil/2016-04-06","namespace":"urn:opendaylight:genius:mdsalutil","conformance-type":"import"},{"name":"resourcemanager-impl","revision":"2016-04-06","schema":"/modules/resourcemanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:resourcemanager:impl","conformance-type":"import"},{"name":"arputil-impl","revision":"2016-04-06","schema":"/modules/arputil-impl/2016-04-06","namespace":"urn:opendaylight:genius:arputil:impl","conformance-type":"import"},{"name":"resync-error-notification","revision":"2014-02-07","schema":"/modules/resync-error-notification/2014-02-07","namespace":"urn:ericsson:resync:error:notification","conformance-type":"import"},{"name":"sal-echo","revision":"2015-03-05","schema":"/modules/sal-echo/2015-03-05","namespace":"urn:opendaylight:echo:service","conformance-type":"import"},{"name":"remote-rpc-connector","revision":"2014-07-07","schema":"/modules/remote-rpc-connector/2014-07-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:remote-rpc-connector","conformance-type":"import"},{"name":"vpnservice-dhcp","revision":"2016-04-28","schema":"/modules/vpnservice-dhcp/2016-04-28","namespace":"urn:opendaylight:netvirt:dhcp","conformance-type":"import"},{"name":"opendaylight-ipv6-arbitrary-bitmask-fields","revision":"2016-02-24","schema":"/modules/opendaylight-ipv6-arbitrary-bitmask-fields/2016-02-24","namespace":"urn:opendaylight:opendaylight-ipv6-arbitrary-bitmask-fields","conformance-type":"import"},{"name":"opendaylight-match-types","revision":"2013-10-26","schema":"/modules/opendaylight-match-types/2013-10-26","namespace":"urn:opendaylight:model:match:types","conformance-type":"import"},{"name":"opendaylight-action-types","revision":"2013-11-12","schema":"/modules/opendaylight-action-types/2013-11-12","namespace":"urn:opendaylight:action:types","conformance-type":"import"},{"name":"experimenter-action-types","revision":"2014-02-28","schema":"/modules/experimenter-action-types/2014-02-28","namespace":"urn:ericsson:experimenter:action:types","conformance-type":"import"},{"name":"opendaylight-group-types","revision":"2013-10-18","schema":"/modules/opendaylight-group-types/2013-10-18","namespace":"urn:opendaylight:group:types","conformance-type":"import"},{"name":"sal-group","revision":"2013-09-18","schema":"/modules/sal-group/2013-09-18","namespace":"urn:opendaylight:group:service","conformance-type":"import"},{"name":"sal-groups-batch","revision":"2016-03-15","schema":"/modules/sal-groups-batch/2016-03-15","namespace":"urn:opendaylight:groups:service","conformance-type":"import"},{"name":"opendaylight-sal-dom-broker-impl","revision":"2013-10-28","schema":"/modules/opendaylight-sal-dom-broker-impl/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl","conformance-type":"import"},{"name":"odl-concurrent-data-broker-cfg","revision":"2014-11-24","schema":"/modules/odl-concurrent-data-broker-cfg/2014-11-24","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:concurrent-data-broker","conformance-type":"import"},{"name":"mdsalutil-impl","revision":"2016-04-06","schema":"/modules/mdsalutil-impl/2016-04-06","namespace":"urn:opendaylight:genius:mdsalutil:impl","conformance-type":"import"},{"name":"ietf-network","revision":"2015-06-08","schema":"/modules/ietf-network/2015-06-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-network","conformance-type":"import"},{"name":"ietf-network-topology","revision":"2015-06-08","schema":"/modules/ietf-network-topology/2015-06-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-topology","conformance-type":"import"},{"name":"sal-meters-batch","revision":"2016-03-16","schema":"/modules/sal-meters-batch/2016-03-16","namespace":"urn:opendaylight:meters:service","conformance-type":"import"},{"name":"sal-meter","revision":"2013-09-18","schema":"/modules/sal-meter/2013-09-18","namespace":"urn:opendaylight:meter:service","conformance-type":"import"},{"name":"neutron-qos","revision":"2016-06-13","schema":"/modules/neutron-qos/2016-06-13","namespace":"urn:opendaylight:neutron-qos","conformance-type":"import"},{"name":"netconf-node-topology","revision":"2015-01-14","schema":"/modules/netconf-node-topology/2015-01-14","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"neutronvpn","revision":"2015-06-02","schema":"/modules/neutronvpn/2015-06-02","namespace":"urn:opendaylight:netvirt:neutronvpn","conformance-type":"import"},{"name":"ietf-restconf-monitoring","revision":"2017-01-26","schema":"/modules/ietf-restconf-monitoring/2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"neutron-l2gateways","revision":"2015-07-12","schema":"/modules/neutron-l2gateways/2015-07-12","namespace":"urn:opendaylight:neutron-l2gateways","conformance-type":"import"},{"name":"opendaylight-flow-types","revision":"2013-10-26","schema":"/modules/opendaylight-flow-types/2013-10-26","namespace":"urn:opendaylight:flow:types","conformance-type":"import"},{"name":"fib-rpc","revision":"2016-01-21","schema":"/modules/fib-rpc/2016-01-21","namespace":"urn:opendaylight:netvirt:fib:rpc","conformance-type":"import"},{"name":"opendaylight-table-types","revision":"2013-10-26","schema":"/modules/opendaylight-table-types/2013-10-26","namespace":"urn:opendaylight:table:types","conformance-type":"import"},{"name":"experimenter-table-types","revision":"2014-03-06","schema":"/modules/experimenter-table-types/2014-03-06","namespace":"urn:ericsson:experimenter:table:types","conformance-type":"import"},{"name":"flow-node-inventory","revision":"2013-08-19","schema":"/modules/flow-node-inventory/2013-08-19","namespace":"urn:opendaylight:flow:inventory","conformance-type":"import"},{"name":"opendaylight-queue-statistics","revision":"2013-12-16","schema":"/modules/opendaylight-queue-statistics/2013-12-16","namespace":"urn:opendaylight:queue:statistics","conformance-type":"import"},{"name":"sal-flows-batch","revision":"2016-03-14","schema":"/modules/sal-flows-batch/2016-03-14","namespace":"urn:opendaylight:flows:service","conformance-type":"import"},{"name":"sal-table","revision":"2013-10-26","schema":"/modules/sal-table/2013-10-26","namespace":"urn:opendaylight:table:service","conformance-type":"import"},{"name":"packet-processing","revision":"2013-07-09","schema":"/modules/packet-processing/2013-07-09","namespace":"urn:opendaylight:packet:service","conformance-type":"import"},{"name":"experimenter-flow-types","revision":"2014-04-22","schema":"/modules/experimenter-flow-types/2014-04-22","namespace":"urn:ericsson:experimenter:flow:types","conformance-type":"import"},{"name":"sal-flat-batch","revision":"2016-03-21","schema":"/modules/sal-flat-batch/2016-03-21","namespace":"urn:opendaylight:flat-batch:service","conformance-type":"import"},{"name":"sal-flow","revision":"2013-08-19","schema":"/modules/sal-flow/2013-08-19","namespace":"urn:opendaylight:flow:service","conformance-type":"import"},{"name":"node-error","revision":"2014-04-10","schema":"/modules/node-error/2014-04-10","namespace":"urn:opendaylight:node:error:service","conformance-type":"import"},{"name":"opendaylight-group-statistics","revision":"2013-11-11","schema":"/modules/opendaylight-group-statistics/2013-11-11","namespace":"urn:opendaylight:group:statistics","conformance-type":"import"},{"name":"opendaylight-flow-table-statistics","revision":"2013-12-15","schema":"/modules/opendaylight-flow-table-statistics/2013-12-15","namespace":"urn:opendaylight:flow:table:statistics","conformance-type":"import"},{"name":"neutron-L3","revision":"2015-07-12","schema":"/modules/neutron-L3/2015-07-12","namespace":"urn:opendaylight:neutron-L3","conformance-type":"import"},{"name":"bgp","revision":"2013-07-15","schema":"/modules/bgp/2013-07-15","namespace":"urn:cisco:params:xml:ns:yang:bgp","conformance-type":"import"},{"name":"neutron-extensions","revision":"2016-06-17","schema":"/modules/neutron-extensions/2016-06-17","namespace":"urn:opendaylight:neutron-extensions","conformance-type":"import"},{"name":"neutron-constants","revision":"2015-07-12","schema":"/modules/neutron-constants/2015-07-12","namespace":"urn:opendaylight:neutron-constants","conformance-type":"import"},{"name":"neutron-fwaas","revision":"2015-07-12","schema":"/modules/neutron-fwaas/2015-07-12","namespace":"urn:opendaylight:neutron-fwaas","conformance-type":"import"},{"name":"neutron-ports","revision":"2015-07-12","schema":"/modules/neutron-ports/2015-07-12","namespace":"urn:opendaylight:neutron-ports","conformance-type":"import"},{"name":"neutron-metering","revision":"2015-07-12","schema":"/modules/neutron-metering/2015-07-12","namespace":"urn:opendaylight:neutron-metering","conformance-type":"import"},{"name":"neutron-sfc-flow-classifier","revision":"2016-05-11","schema":"/modules/neutron-sfc-flow-classifier/2016-05-11","namespace":"urn:opendaylight:neutron-sfc-flow-classifier","conformance-type":"import"},{"name":"neutron-lbaasv2","revision":"2015-07-12","schema":"/modules/neutron-lbaasv2/2015-07-12","namespace":"urn:opendaylight:neutron-lbaasv2","conformance-type":"import"},{"name":"neutron-secgroups","revision":"2015-07-12","schema":"/modules/neutron-secgroups/2015-07-12","namespace":"urn:opendaylight:neutron-secgroups","conformance-type":"import"},{"name":"idmanager-impl","revision":"2016-04-06","schema":"/modules/idmanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:idmanager:impl","conformance-type":"import"},{"name":"ietf-interfaces","revision":"2014-05-08","schema":"/modules/ietf-interfaces/2014-05-08","feature":["pre-provisioning","arbitrary-names","if-mib"],"namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import"},{"name":"l3vpn","revision":"2014-08-15","schema":"/modules/l3vpn/2014-08-15","namespace":"urn:huawei:params:xml:ns:yang:l3vpn","conformance-type":"import"},{"name":"ietf-packet-fields","revision":"2016-02-18","schema":"/modules/ietf-packet-fields/2016-02-18","namespace":"urn:ietf:params:xml:ns:yang:ietf-packet-fields","conformance-type":"import"},{"name":"elan","revision":"2015-06-02","schema":"/modules/elan/2015-06-02","namespace":"urn:opendaylight:netvirt:elan","conformance-type":"import"},{"name":"iana-if-type","revision":"2014-05-08","schema":"/modules/iana-if-type/2014-05-08","namespace":"urn:ietf:params:xml:ns:yang:iana-if-type","conformance-type":"import"},{"name":"odl-arputil","revision":"2016-04-06","schema":"/modules/odl-arputil/2016-04-06","namespace":"urn:opendaylight:genius:arputil","conformance-type":"import"},{"name":"etree","revision":"2016-06-14","schema":"/modules/etree/2016-06-14","namespace":"urn:opendaylight:netvirt:elan:etree","conformance-type":"import"},{"name":"ietf-access-control-list","revision":"2016-02-18","schema":"/modules/ietf-access-control-list/2016-02-18","namespace":"urn:ietf:params:xml:ns:yang:ietf-access-control-list","conformance-type":"import"},{"name":"aclservice","revision":"2016-06-08","schema":"/modules/aclservice/2016-06-08","namespace":"urn:opendaylight:netvirt:aclservice","conformance-type":"import"},{"name":"interface-statistics","revision":"2015-08-24","schema":"/modules/interface-statistics/2015-08-24","namespace":"urn:opendaylight:genius:interface:statistics","conformance-type":"import"},{"name":"cloud-service-chain-state","revision":"2017-05-11","schema":"/modules/cloud-service-chain-state/2017-05-11","namespace":"urn:opendaylight:netvirt:cloud-servicechain:state","conformance-type":"import"},{"name":"elan-statistics","revision":"2015-08-24","schema":"/modules/elan-statistics/2015-08-24","namespace":"urn:opendaylight:netvirt:elan:statistics","conformance-type":"import"},{"name":"odl-interface","revision":"2016-04-06","schema":"/modules/odl-interface/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager","conformance-type":"import"},{"name":"itm-config","revision":"2016-04-06","schema":"/modules/itm-config/2016-04-06","namespace":"urn:opendaylight:genius:itm:config","conformance-type":"import"},{"name":"itm","revision":"2016-04-06","schema":"/modules/itm/2016-04-06","namespace":"urn:opendaylight:genius:itm","conformance-type":"import"},{"name":"odl-l3vpn","revision":"2013-09-11","schema":"/modules/odl-l3vpn/2013-09-11","namespace":"urn:opendaylight:netvirt:l3vpn","conformance-type":"import"},{"name":"itm-state","revision":"2016-04-06","schema":"/modules/itm-state/2016-04-06","namespace":"urn:opendaylight:genius:itm:op","conformance-type":"import"},{"name":"odl-interface-rpc","revision":"2016-04-06","schema":"/modules/odl-interface-rpc/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:rpcs","conformance-type":"import"},{"name":"itm-rpc","revision":"2016-04-06","schema":"/modules/itm-rpc/2016-04-06","namespace":"urn:opendaylight:genius:itm:rpcs","conformance-type":"import"},{"name":"itm-impl","revision":"2016-04-06","schema":"/modules/itm-impl/2016-04-06","namespace":"urn:opendaylight:genius:itm:impl","conformance-type":"import"},{"name":"alivenessmonitor-impl","revision":"2016-04-06","schema":"/modules/alivenessmonitor-impl/2016-04-06","namespace":"urn:opendaylight:genius:alivenessmonitor:impl","conformance-type":"import"},{"name":"cluster-singleton-service-impl","revision":"2016-07-18","schema":"/modules/cluster-singleton-service-impl/2016-07-18","namespace":"urn:opendaylight:params:xml:ns:yang:md:sal:config:impl:cluster-singleton-service","conformance-type":"import"},{"name":"opendaylight-entity-ownership-service","revision":"2015-08-10","schema":"/modules/opendaylight-entity-ownership-service/2015-08-10","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service","conformance-type":"import"},{"name":"interfacemanager-impl","revision":"2016-04-06","schema":"/modules/interfacemanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:impl","conformance-type":"import"},{"name":"opendaylight-legacy-entity-ownership-service-provider","revision":"2016-02-26","schema":"/modules/opendaylight-legacy-entity-ownership-service-provider/2016-02-26","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:legacy-entity-ownership-service-provider","conformance-type":"import"},{"name":"openflow-provider-impl","revision":"2014-03-26","schema":"/modules/openflow-provider-impl/2014-03-26","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl","conformance-type":"import"},{"name":"overlay","revision":"2015-01-05","schema":"/modules/overlay/2015-01-05","namespace":"urn:opendaylight:params:xml:ns:yang:overlay","conformance-type":"import"},{"name":"ovsdb","revision":"2015-01-05","schema":"/modules/ovsdb/2015-01-05","namespace":"urn:opendaylight:params:xml:ns:yang:ovsdb","conformance-type":"import"},{"name":"odl-interface-meta","revision":"2016-04-06","schema":"/modules/odl-interface-meta/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:meta","conformance-type":"import"},{"name":"netconf-northbound-notification-impl","revision":"2015-08-07","schema":"/modules/netconf-northbound-notification-impl/2015-08-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification:impl","conformance-type":"import"},{"name":"neutron-subnets","revision":"2015-07-12","schema":"/modules/neutron-subnets/2015-07-12","namespace":"urn:opendaylight:neutron-subnets","conformance-type":"import"},{"name":"neutron","revision":"2015-07-12","schema":"/modules/neutron/2015-07-12","namespace":"urn:opendaylight:neutron","conformance-type":"import"},{"name":"neutron-portsecurity","revision":"2015-07-12","schema":"/modules/neutron-portsecurity/2015-07-12","namespace":"urn:opendaylight:neutron-portsecurity","conformance-type":"import"},{"name":"neutron-binding","revision":"2015-07-12","schema":"/modules/neutron-binding/2015-07-12","namespace":"urn:opendaylight:neutron-binding","conformance-type":"import"},{"name":"neutron-port-ext","revision":"2015-11-25","schema":"/modules/neutron-port-ext/2015-11-25","namespace":"urn:opendaylight:neutron-port-ext","conformance-type":"import"},{"name":"neutron-qos-ext","revision":"2016-06-13","schema":"/modules/neutron-qos-ext/2016-06-13","namespace":"urn:opendaylight:neutron-qos-ext","conformance-type":"import"},{"name":"neutron-provider-ext","revision":"2015-07-12","schema":"/modules/neutron-provider-ext/2015-07-12","namespace":"urn:opendaylight:neutron-provider-ext","conformance-type":"import"},{"name":"neutron-L3-ext","revision":"2015-07-12","schema":"/modules/neutron-L3-ext/2015-07-12","namespace":"urn:opendaylight:neutron-L3-ext","conformance-type":"import"},{"name":"subscribe-to-notification","revision":"2016-10-28","schema":"/modules/subscribe-to-notification/2016-10-28","namespace":"subscribe:to:notification","conformance-type":"import"},{"name":"instance-identifier-patch-module","revision":"2015-11-21","schema":"/modules/instance-identifier-patch-module/2015-11-21","namespace":"instance:identifier:patch:module","conformance-type":"import"},{"name":"openflow-configuration","revision":"2014-06-30","schema":"/modules/openflow-configuration/2014-06-30","namespace":"urn:opendaylight:openflow:config","conformance-type":"import"},{"name":"openflow-switch-connection-provider-impl","revision":"2014-03-28","schema":"/modules/openflow-switch-connection-provider-impl/2014-03-28","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl","conformance-type":"import"},{"name":"openflow-switch-connection-config","revision":"2016-05-06","schema":"/modules/openflow-switch-connection-config/2016-05-06","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:config","conformance-type":"import"},{"name":"sal-role","revision":"2015-07-27","schema":"/modules/sal-role/2015-07-27","namespace":"urn:opendaylight:role:service","conformance-type":"import"},{"name":"opendaylight-flow-statistics","revision":"2013-08-19","schema":"/modules/opendaylight-flow-statistics/2013-08-19","namespace":"urn:opendaylight:flow:statistics","conformance-type":"import"},{"name":"opendaylight-direct-statistics","revision":"2016-05-11","schema":"/modules/opendaylight-direct-statistics/2016-05-11","namespace":"urn:opendaylight:direct:statistics","conformance-type":"import"},{"name":"openflowplugin-extension-general","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-general/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:general","conformance-type":"import"},{"name":"openflowplugin-extension-nicira-match","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-nicira-match/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:nicira:match","conformance-type":"import"},{"name":"openflowplugin-extension-nicira-action","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-nicira-action/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:nicira:action","conformance-type":"import"},{"name":"interface-service-bindings","revision":"2016-04-06","schema":"/modules/interface-service-bindings/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:servicebinding","conformance-type":"import"},{"name":"openflow-protocol","revision":"2013-07-31","schema":"/modules/openflow-protocol/2013-07-31","namespace":"urn:opendaylight:openflow:protocol","conformance-type":"import"},{"name":"openflow-resync","revision":"2014-02-06","schema":"/modules/openflow-resync/2014-02-06","namespace":"urn:opendaylight:openflow:resync","conformance-type":"import"},{"name":"opendaylight-switch-features-extension","revision":"2014-02-06","schema":"/modules/opendaylight-switch-features-extension/2014-02-06","namespace":"urn:opendaylight:switch-features:extension","conformance-type":"import"},{"name":"openflow-augments","revision":"2015-02-25","schema":"/modules/openflow-augments/2015-02-25","namespace":"urn:opendaylight:openflow:augments","conformance-type":"import"},{"name":"openflow-approved-extensions","revision":"2016-08-02","schema":"/modules/openflow-approved-extensions/2016-08-02","namespace":"urn:opendaylight:openflow:approved:extensions","conformance-type":"import"},{"name":"experimenter-action","revision":"2014-03-06","schema":"/modules/experimenter-action/2014-03-06","namespace":"urn:ericsson:openflow:experimenter:action","conformance-type":"import"},{"name":"opendaylight-meter-statistics","revision":"2013-11-11","schema":"/modules/opendaylight-meter-statistics/2013-11-11","namespace":"urn:opendaylight:meter:statistics","conformance-type":"import"},{"name":"aaa-cert-rpc","revision":"2015-12-15","schema":"/modules/aaa-cert-rpc/2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"openflow-provider","revision":"2015-03-31","schema":"/modules/openflow-provider/2015-03-31","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:api","conformance-type":"import"},{"name":"openflow-plugin-provider-impl","revision":"2015-03-27","schema":"/modules/openflow-plugin-provider-impl/2015-03-27","namespace":"urn:opendaylight:params:xml:ns:yang:config:openflow:plugin:impl","conformance-type":"import"},{"name":"sal-experimenter-message","revision":"2015-10-20","schema":"/modules/sal-experimenter-message/2015-10-20","namespace":"urn:opendaylight:experimenter-message:service","conformance-type":"import"}],"module-set-id":"3"},"ietf-restconf-monitoring:restconf-state":{"capabilities":{"capability":["urn:ietf:params:restconf:capability:depth:1.0","urn:ietf:params:restconf:capability:fields:1.0","urn:ietf:params:restconf:capability:filter:1.0","urn:ietf:params:restconf:capability:replay:1.0","urn:ietf:params:restconf:capability:with-defaults:1.0"]}},"opendaylight-inventory:nodes":{},"aliveness-monitor:monitor-profiles":{"monitor-profile":[{"id":1,"failure-threshold":2,"monitor-interval":120000,"protocol-type":"arp","monitor-window":4}]},"lock-manager:locks":{}}
\ No newline at end of file
diff --git a/csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_before.json b/csit/libraries/backuprestore/testinput/mainTestCase/odl_backup_operational_before.json
new file mode 100644 (file)
index 0000000..6ce816d
--- /dev/null
@@ -0,0 +1 @@
+{"entity-owners:entity-owners":{"entity-type":[{"type":"bgp","entity":[{"id":"/general-entity:entity[general-entity:name='bgp']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"ovsdb-southbound-provider","entity":[{"id":"/general-entity:entity[general-entity:name='ovsdb-southbound-provider']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"iface","entity":[{"id":"/general-entity:entity[general-entity:name='iface']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"org.opendaylight.mdsal.ServiceEntityType","entity":[{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER1]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"},{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER2]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"org.opendaylight.mdsal.AsyncServiceCloseEntityType","entity":[{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER1]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"},{"id":"/odl-general-entity:entity[odl-general-entity:name='KeyedInstanceIdentifier{targetType=interface org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node, path=[org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology, org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology[key=TopologyKey [_topologyId=Uri [_value=topology-netconf]]], org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node[key=NodeKey [_nodeId=Uri [_value=CONTROLLER2]]]]}']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"ovsdb-hwvtepsouthbound-provider","entity":[{"id":"/general-entity:entity[general-entity:name='ovsdb-hwvtepsouthbound-provider']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"arpmonitoring","entity":[{"id":"/general-entity:entity[general-entity:name='arpmonitoring']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"elan","entity":[{"id":"/general-entity:entity[general-entity:name='elan']","candidate":[{"name":"member-1"}],"owner":"member-1"}]},{"type":"netvirt-acl","entity":[{"id":"/general-entity:entity[general-entity:name='netvirt-acl']","candidate":[{"name":"member-1"}],"owner":"member-1"}]}]},"network-topology:network-topology":{"topology":[{"topology-id":"hwvtep:1"},{"topology-id":"flow:1"},{"topology-id":"ovsdb:1"},{"topology-id":"topology-netconf","node":[{"node-id":"CONTROLLER1","netconf-node-topology:clustered-connection-status":{"netconf-master-node":"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550"},"netconf-node-topology:available-capabilities":{"available-capability":["(urn:opendaylight:genius:lockmanager:impl?revision=2016-04-06)lockmanager-impl","(urn:ericsson:experimenter:openflow:types?revision=2014-04-25)experimenter-flow-types","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2010-09-24)ietf-inet-types","(urn:opendaylight:params:xml:ns:yang:controller:sal:restconf:service?revision=2015-07-08)sal-restconf-service","(urn:opendaylight:genius:resourcemanager?revision=2016-06-22)resource-manager","(urn:opendaylight:meters:service?revision=2016-03-16)sal-meters-batch","(urn:opendaylight:params:xml:ns:yang:controller:threadpool?revision=2013-04-09)threadpool","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote?revision=2014-01-14)sal-remote","(urn:opendaylight:netvirt:aclservice?revision=2016-06-08)aclservice","(urn:opendaylight:params:xml:ns:yang:openflowplugin:sm:control?revision=2015-08-12)statistics-manager-control","(urn:opendaylight:openflowplugin:extension:nicira:action?revision=2014-07-14)openflowplugin-extension-nicira-action","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store?revision=2014-06-17)opendaylight-operational-dom-datastore","(urn:opendaylight:params:xml:ns:yang:controller:shutdown:impl?revision=2013-12-18)shutdown-impl","(urn:opendaylight:flows:service?revision=2016-03-14)sal-flows-batch","(urn:opendaylight:neutron-qos-ext?revision=2016-06-13)neutron-qos-ext","(urn:opendaylight:params:xml:ns:yang:aaa:credential-store?revision=2015-02-26)credential-store","(urn:ietf:params:xml:ns:yang:ietf-access-control-list?revision=2016-02-18)ietf-access-control-list","(urn:experimenter:matchExp?revision=2014-03-06)experimenter-match-type","(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology","(urn:ericsson:neutron:ml3?revision=2014-09-30)neutron-ml3-services","(urn:opendaylight:params:xml:ns:yang:config:openflow:plugin:impl?revision=2015-03-27)openflow-plugin-provider-impl","(urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor?revision=2013-11-12)netty-event-executor","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl?revision=2013-04-05)threadpool-impl","(urn:ericsson:switch-features:notification?revision=2013-08-19)switch-features-notification","(urn:opendaylight:genius:interfacemanager:meta?revision=2016-04-06)odl-interface-meta","(urn:opendaylight:groups:service?revision=2016-03-15)sal-groups-batch","(urn:opendaylight:genius:alivenessmonitor?revision=2016-04-11)aliveness-monitor","(urn:opendaylight:flow:service?revision=2013-08-19)sal-flow","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:opendaylight:queue:statistics?revision=2013-12-16)opendaylight-queue-statistics","(urn:opendaylight:model:topology:general?revision=2013-10-30)opendaylight-topology","(urn:ietf:params:xml:ns:yang:ietf-network-topology?revision=2015-06-08)ietf-network-topology","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin?revision=2015-10-13)cluster-admin","(urn:opendaylight:neutron-extensions?revision=2016-06-17)neutron-extensions","(urn:opendaylight:params:xml:ns:yang:controller:config:concurrent-data-broker?revision=2014-11-24)odl-concurrent-data-broker-cfg","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-06-21)ietf-yang-library","(urn:opendaylight:netvirt:cloud-servicechain:state?revision=2017-05-11)cloud-service-chain-state","(urn:opendaylight:flow:transaction?revision=2015-03-04)flow-capable-transaction","(urn:opendaylight:neutron-attrs?revision=2015-07-12)neutron-attrs","(urn:ericsson:neutron:ml2?revision=2014-09-30)neutron-ml2-services","(urn:opendaylight:params:xml:ns:yang:controller:protocol:framework?revision=2014-03-13)protocol-framework","(urn:opendaylight:flow:types:port?revision=2013-09-25)opendaylight-port-types","(urn:opendaylight:params:xml:ns:yang:openflow:common:config?revision=2014-03-26)openflow-provider","(urn:opendaylight:neutron-L3-ext?revision=2015-07-12)neutron-L3-ext","(urn:opendaylight:netvirt:natservice:rpc?revision=2017-02-09)odl-nat-rpc","(urn:opendaylight:vendor:extension-resync-message?revision=2016-07-13)extension-resync-message","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:clustering:entity-owners?revision=2015-08-04)entity-owners","(urn:opendaylight:neutron-sfc?revision=2016-05-11)neutron-sfc","(urn:opendaylight:genius:itm:config?revision=2016-04-06)itm-config","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:config-dom-store?revision=2014-06-17)opendaylight-config-dom-datastore","(urn:opendaylight:params:xml:ns:yang:openflowplugin:nx:config:impl?revision=2014-07-11)nicira-extension-impl","(urn:opendaylight:genius:interface:statistics?revision=2015-08-24)interface-statistics","(urn:opendaylight:neutron-hostconfig?revision=2015-07-12)neutron-hostconfig","(urn:TBD:params:xml:ns:yang:network:isis-topology?revision=2013-07-12)isis-topology","(urn:opendaylight:netvirt:vpn:rpc?revision=2016-02-01)vpn-rpc","(urn:opendaylight:netvirt:elan:statistics?revision=2015-08-24)elan-statistics","(urn:opendaylight:neutron-bgpvpns?revision=2015-09-03)neutron-bgpvpns","(urn:opendaylight:openflowplugin:extension:nicira:match?revision=2014-07-14)openflowplugin-extension-nicira-match","(urn:ericsson:experimenter:flow:types?revision=2014-04-22)experimenter-flow-types","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec?revision=2016-07-14)opendaylight-md-sal-binding-v1-codec","(urn:ericsson:params:xml:ns:yang:ebgp?revision=2015-09-01)ebgp","(urn:opendaylight:node:error:service?revision=2014-04-10)node-error","(urn:ericsson:resync:rpcs:notification?revision=2014-02-07)resync-notification","(urn:ietf:params:xml:ns:yang:ospf-topology?revision=2013-07-12)ospf-topology","(urn:opendaylight:direct:statistics?revision=2016-05-11)opendaylight-direct-statistics","(urn:TBD:params:xml:ns:yang:network:ted?revision=2013-10-21)ted","(urn:opendaylight:openflowplugin:extension:resync?revision=2016-07-13)openflowplugin-extension-resync","(urn:opendaylight:netvirt:l3vpn?revision=2013-09-11)odl-l3vpn","(urn:opendaylight:params:xml:ns:yang:controller:netconf:topology?revision=2015-07-27)netconf-topology","(urn:opendaylight:vendor:extension-switchfeatures-message?revision=2016-07-13)extension-switchfeatures-message","(urn:opendaylight:params:xml:ns:yang:ovsdb?revision=2015-01-05)ovsdb","(urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-switchfeatures-provider?revision=2016-07-13)experimenter-switchfeatures-provider","(urn:opendaylight:yang:aaa:cert:mdsal?revision=2016-03-21)aaa-cert-mdsal","(urn:opendaylight:neutron-binding?revision=2015-07-12)neutron-binding","(urn:opendaylight:openflowplugin:experimenter:types?revision=2015-10-20)openflowplugin-experimenter-types","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2014-05-08)ietf-interfaces","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?revision=2013-10-28)opendaylight-md-sal-common","(urn:opendaylight:params:xml:ns:yang:openflow:provider:config?revision=2016-05-10)openflow-provider-config","(urn:opendaylight:params:xml:ns:yang:controller:netty:timer?revision=2013-11-19)netty-timer","(urn:opendaylight:vendor:extension:resync:error:notification?revision=2016-02-07)resync-error-notification","(urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider?revision=2014-06-17)opendaylight-inmemory-datastore-provider","(urn:opendaylight:genius:resourcemanager:impl?revision=2016-04-06)resourcemanager-impl","(urn:opendaylight:params:xml:ns:yang:netvirt:inter-vpn-link?revision=2016-03-11)inter-vpn-link","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf?revision=2015-08-03)odl-sal-netconf-connector-cfg","(urn:ericsson:resync:start:notification?revision=2014-02-07)start-resync-download-notification","(urn:opendaylight:netvirt:cloud-servicechain:api?revision=2015-12-11)cloud-servicechain-api","(urn:opendaylight:netvirt:natservice?revision=2016-01-11)odl-nat","(urn:opendaylight:params:xml:ns:yang:md:sal:config:impl:cluster-singleton-service?revision=2016-07-18)cluster-singleton-service-impl","(urn:opendaylight:group:types?revision=2013-10-18)opendaylight-group-types","(urn:opendaylight:neutron-ports?revision=2015-07-12)neutron-ports","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?revision=2013-10-28)opendaylight-sal-binding-broker-impl","(urn:opendaylight:genius:interfacemanager:servicebinding?revision=2016-04-06)interface-service-bindings","(urn:opendaylight:neutron-fwaas?revision=2015-07-12)neutron-fwaas","(urn:opendaylight:params:xml:ns:yang:controller:config:legacy-entity-ownership-service-provider?revision=2016-02-26)opendaylight-legacy-entity-ownership-service-provider","(urn:opendaylight:netvirt:dhcp?revision=2016-04-28)vpnservice-dhcp","(urn:opendaylight:netvirt:ipv6service:nd:packet?revision=2016-06-20)neighbor-discovery","(urn:opendaylight:params:xml:ns:yang:controller:netty?revision=2013-11-19)netty","(urn:opendaylight:neutron-subnets?revision=2015-07-12)neutron-subnets","(urn:ericsson:openflow:experimenter:action?revision=2014-03-06)experimenter-action","(urn:opendaylight:yang:extension:yang-ext?revision=2013-07-09)yang-ext","(urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:config?revision=2014-07-11)openflowjava-nx-config","(urn:opendaylight:service:barrier:common?revision=2016-03-15)barrier-common","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2014-05-08)iana-if-type","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:ssh?revision=2015-01-14)netconf-northbound-ssh","(urn:opendaylight:module:config?revision=2014-10-15)node-config","(urn:opendaylight:netvirt:aclservice-config?revision=2016-08-06)aclservice-config","(urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:api:config?revision=2014-07-11)openflowjava-nx-api-config","(urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?revision=2014-03-26)openflow-provider-impl","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:opendaylight:params:xml:ns:yang:ovsdb:hwvtep?revision=2015-09-01)hwvtep","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:scheduled?revision=2013-12-01)threadpool-impl-scheduled","(urn:opendaylight:genius:lockmanager?revision=2016-04-13)lock-manager","(urn:ericsson:switch-features:rpcs:notification?revision=2014-02-07)switch-features-extension","(urn:opendaylight:inventory?revision=2013-08-19)opendaylight-inventory","(urn:opendaylight:neutron-l2gateways?revision=2015-07-12)neutron-l2gateways","(urn:opendaylight:echo:service?revision=2015-03-05)sal-echo","(urn:opendaylight:neutron-secgroups?revision=2015-07-12)neutron-secgroups","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service?revision=2015-08-10)opendaylight-entity-ownership-service","(urn:opendaylight:neutron-metering?revision=2015-07-12)neutron-metering","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:fixed?revision=2013-12-01)threadpool-impl-fixed","(urn:opendaylight:table:service?revision=2013-10-26)sal-table","(urn:opendaylight:group:statistics?revision=2013-11-11)opendaylight-group-statistics","(urn:opendaylight:params:xml:ns:yang:openflow:api?revision=2015-03-31)openflow-provider","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:tcp?revision=2015-04-23)netconf-northbound-tcp","(urn:opendaylight:genius:mdsalutil?revision=2016-04-06)odl-mdsalutil","(urn:huawei:params:xml:ns:yang:l3vpn?revision=2014-08-15)l3vpn","(urn:opendaylight:openflowjava:extension-switchfeatures?revision=2016-07-13)openflowjava-extension-switchfeatures","(urn:opendaylight:service:batch:common?revision=2016-03-22)batch-common","(urn:opendaylight:params:xml:ns:yang:controller:netconf:topology:shared:schema:repository?revision=2015-07-27)shared-schema-repository","(urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager:config?revision=2016-05-11)forwarding-rules-manager-config","(urn:opendaylight:action:types?revision=2013-11-12)opendaylight-action-types","(urn:opendaylight:genius:interfacemanager:impl?revision=2016-04-06)interfacemanager-impl","(urn:opendaylight:port:statistics?revision=2013-12-14)opendaylight-port-statistics","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:general-entity?revision=2015-08-20)general-entity","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:auth?revision=2015-07-15)netconf-auth","(urn:opendaylight:netvirt:elan:config?revision=2015-07-10)elan-config","(urn:opendaylight:genius:idmanager?revision=2016-04-06)id-manager","(urn:opendaylight:netvirt:l3nexthop?revision=2015-04-09)l3nexthop","(urn:opendaylight:packet:service?revision=2013-07-09)packet-processing","(urn:opendaylight:netvirt:neutronvpn:config?revision=2016-08-06)neutronvpn-config","(urn:opendaylight:genius:arputil?revision=2016-04-06)odl-arputil","(urn:opendaylight:openflowjava:nx:match?revision=2014-04-21)nicira-match","(urn:opendaylight:table:types?revision=2013-10-26)opendaylight-table-types","(urn:TBD:params:xml:ns:yang:ospf-topology?revision=2013-10-21)ospf-topology","(urn:opendaylight:port:service?revision=2013-11-07)sal-port","(urn:opendaylight:neutron-trunks?revision=2017-01-18)neutron-trunks","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector?revision=2014-07-24)opendaylight-rest-connector","(urn:opendaylight:yang:aaa:cert?revision=2015-11-26)aaa-cert","urn:ietf:params:netconf:capability:notification:1.0","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:opendaylight:neutron-portsecurity?revision=2015-07-12)neutron-portsecurity","(urn:opendaylight:openflow:oxm?revision=2015-02-25)openflow-extensible-match","(urn:opendaylight:neutron-sfc-flow-classifier?revision=2016-05-11)neutron-sfc-flow-classifier","(urn:opendaylight:neutron-networks?revision=2015-07-12)neutron-networks","(urn:opendaylight:params:xml:ns:yang:controller:shutdown?revision=2013-12-18)shutdown","(urn:opendaylight:neutron-types?revision=2016-05-17)neutron-types","(urn:opendaylight:experimenter-message:service?revision=2015-10-20)sal-experimenter-message","(urn:opendaylight:genius:mdsalutil:impl?revision=2016-04-06)mdsalutil-impl","(config:aaa:authn:netconf:plugin?revision=2015-07-15)aaa-authn-netconf-plugin","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound?revision=2015-01-14)netconf-northbound","(urn:opendaylight:params:xml:ns:yang:controller:config:cluster-admin-provider?revision=2015-10-13)cluster-admin-provider","(urn:opendaylight:flow:table:statistics?revision=2013-12-15)opendaylight-flow-table-statistics","(urn:opendaylight:neutron-provider-ext?revision=2015-07-12)neutron-provider-ext","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?revision=2013-10-28)opendaylight-md-sal-dom","(urn:opendaylight:opendaylight-ipv6-arbitrary-bitmask-fields?revision=2016-02-24)opendaylight-ipv6-arbitrary-bitmask-fields","(urn:opendaylight:neutron?revision=2015-07-12)neutron","(urn:opendaylight:netconf-node-inventory?revision=2014-01-08)netconf-node-inventory","(urn:opendaylight:daexim-spi?revision=2016-08-16)data-export-import-spi","(urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup?revision=2013-11-07)threadgroup","(urn:opendaylight:genius:itm:op?revision=2016-04-06)itm-state","(urn:opendaylight:neutron-vpnaas?revision=2015-07-12)neutron-vpnaas","(urn:ietf:params:xml:ns:yang:ietf-restconf?revision=2017-01-26)ietf-restconf","(urn:opendaylight:params:xml:ns:yang:controller:config:remote-rpc-connector?revision=2014-07-07)remote-rpc-connector","(urn:opendaylight:netvirt:vpn:config?revision=2016-11-30)vpn-config","(urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config?revision=2016-05-11)topology-lldp-discovery-config","(urn:ericsson:resync:output:notification?revision=2014-02-07)resync-output","(urn:opendaylight:params:xml:ns:yang:openflowplugin:extension:api?revision=2015-04-25)openflowplugin-extension-registry","(urn:opendaylight:openflowjava:nx:action?revision=2014-04-21)nicira-action","(urn:ietf:params:xml:ns:yang:rpc-context?revision=2013-06-17)rpc-context","(urn:opendaylight:params:xml:ns:yang:sdncconfig:impl?revision=2014-12-10)sdncconfig-impl","(urn:opendaylight:genius:arputil:impl?revision=2016-04-06)arputil-impl","(urn:cisco:params:xml:ns:yang:bgp?revision=2013-07-15)bgp","(urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:service?revision=2015-10-05)actor-system-provider-service","(urn:opendaylight:params:xml:ns:yang:controller:config:openflowplugin:nx:config?revision=2014-07-11)nicira-extension","(urn:opendaylight:params:xml:ns:yang:dhcpservice:api?revision=2015-07-10)dhcpservice-api","(subscribe:to:notification?revision=2016-10-28)subscribe-to-notification","(urn:opendaylight:flow:inventory?revision=2013-08-19)flow-node-inventory","(urn:ericsson:experimenter:action:types?revision=2014-02-28)experimenter-action-types","(urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker?revision=2014-10-23)lldp-speaker","(urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider?revision=2014-06-12)distributed-datastore-provider","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:opendaylight:model:statistics:types?revision=2013-09-25)opendaylight-statistics-types","(urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology?revision=2013-10-21)l3-unicast-igp-topology","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?revision=2013-10-28)opendaylight-sal-dom-broker-impl","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:opendaylight:neutron-provider?revision=2015-07-12)neutron-provider","(urn:opendaylight:vendor:extension:resync:output:notification?revision=2016-08-19)resync-output","(instance:identifier:patch:module?revision=2015-11-21)instance-identifier-patch-module","(urn:opendaylight:openflow:augments?revision=2015-02-25)openflow-augments","(urn:TBD:params:xml:ns:yang:network:isis-topology?revision=2013-10-21)isis-topology","(urn:opendaylight:daexim-internal?revision=2016-09-21)data-export-import-internal","(urn:opendaylight:arbitrary:bitmask:fields?revision=2016-01-30)opendaylight-arbitrary-bitmask-fields","(urn:opendaylight:netvirt:elan?revision=2015-06-02)elan","(urn:opendaylight:netvirt:elan:etree?revision=2016-06-14)etree","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf?revision=2014-04-08)odl-netconf-cfg","(urn:opendaylight:neutron-lbaasv2?revision=2015-07-12)neutron-lbaasv2","(urn:opendaylight:genius:idmanager:impl?revision=2016-04-06)idmanager-impl","(urn:ericsson:reconciliation:service?revision=2015-08-04)forwardingrules-manager-reconciliation","(urn:opendaylight:flow:errors?revision=2013-11-16)flow-errors","(urn:opendaylight:openflow:resync?revision=2014-02-06)openflow-resync","(urn:opendaylight:params:xml:ns:yang:overlay?revision=2015-01-05)overlay","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:opendaylight:genius:itm?revision=2016-04-06)itm","(urn:opendaylight:genius:interfacemanager?revision=2016-04-06)odl-interface","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl?revision=2014-03-28)openflow-switch-connection-provider-impl","(urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-resync-provider?revision=2016-07-13)experimenter-resync-provider","(urn:opendaylight:openflow:common:types?revision=2013-07-31)openflow-types","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification?revision=2015-08-06)netconf-northbound-notification","(urn:opendaylight:openflow:protocol?revision=2013-07-31)openflow-protocol","(urn:opendaylight:params:xml:ns:yang:dhcpservice:config?revision=2015-07-10)dhcpservice-config","(urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:impl?revision=2015-10-05)actor-system-provider-impl","(urn:opendaylight:yang:aaa:cert:rpc?revision=2015-12-15)aaa-cert-rpc","(urn:opendaylight:model:topology:inventory?revision=2013-10-30)opendaylight-topology-inventory","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2010-09-24)ietf-yang-types","(urn:opendaylight:genius:itm:rpcs?revision=2016-04-06)itm-rpc","urn:ietf:params:netconf:base:1.1","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:flexible?revision=2013-12-01)threadpool-impl-flexible","(urn:ietf:params:xml:ns:yang:ietf-restconf?revision=2013-10-19)ietf-restconf","(urn:opendaylight:netconf-node-topology?revision=2015-01-14)netconf-node-topology","(urn:opendaylight:meter:service?revision=2013-09-18)sal-meter","(urn:opendaylight:netvirt:fibmanager?revision=2015-03-30)odl-fib","(urn:opendaylight:netvirt:fib:rpc?revision=2016-01-21)fib-rpc","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification:impl?revision=2015-08-07)netconf-northbound-notification-impl","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:config?revision=2016-05-06)openflow-switch-connection-config","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring-extension?revision=2013-12-10)ietf-netconf-monitoring-extension","(urn:opendaylight:group:service?revision=2013-09-18)sal-group","urn:ietf:params:netconf:base:1.0","(urn:opendaylight:neutron-port-ext?revision=2015-11-25)neutron-port-ext","(urn:ietf:params:xml:ns:yang:ietf-network?revision=2015-06-08)ietf-network","(urn:opendaylight:openflow:config?revision=2014-06-30)openflow-configuration","urn:ietf:params:netconf:capability:exi:1.0","(urn:opendaylight:daexim?revision=2016-09-21)data-export-import","(urn:ietf:params:xml:ns:yang:iana-afn-safi?revision=2013-07-04)iana-afn-safi","(urn:opendaylight:genius:alivenessmonitor:impl?revision=2016-04-06)alivenessmonitor-impl","(urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker:config?revision=2016-05-12)lldp-speaker-config","(urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring?revision=2017-01-26)ietf-restconf-monitoring","(urn:opendaylight:genius:itm:impl?revision=2016-04-06)itm-impl","(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-07-12)network-topology","(urn:opendaylight:openflowplugin:extension:switchfeatures?revision=2016-07-13)openflowplugin-extension-switchfeatures","(urn:opendaylight:neutron-constants?revision=2015-07-12)neutron-constants","(urn:opendaylight:openflow:common:instruction?revision=2013-07-31)openflow-instruction","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl?revision=2015-01-12)netconf-northbound-impl","(urn:opendaylight:flat-batch:service?revision=2016-03-21)sal-flat-batch","(urn:opendaylight:params:xml:ns:yang:md:sal:config:spi:cluster-singleton-service?revision=2016-07-18)cluster-singleton-service-spi","(urn:opendaylight:flow:types?revision=2013-10-26)opendaylight-flow-types","(urn:opendaylight:meter:statistics?revision=2013-11-11)opendaylight-meter-statistics","(urn:opendaylight:model:match:types?revision=2013-10-26)opendaylight-match-types","(urn:opendaylight:genius:interfacemanager:rpcs?revision=2016-04-06)odl-interface-rpc","(urn:opendaylight:flow:statistics?revision=2013-08-19)opendaylight-flow-statistics","(urn:opendaylight:experimenter-mp-message:service?revision=2015-10-20)sal-experimenter-mp-message","(urn:opendaylight:queue:service?revision=2015-03-05)sal-queue","(urn:opendaylight:openflow:system?revision=2013-09-27)system-notifications","(urn:opendaylight:openflow:common:action?revision=2015-02-03)openflow-action","(urn:opendaylight:openflowjava:extension-resync?revision=2016-07-13)openflowjava-extension-resync","(urn:opendaylight:neutron-qos?revision=2016-06-13)neutron-qos","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?revision=2014-03-28)openflow-switch-connection-provider","(urn:TBD:params:xml:ns:yang:network:ted?revision=2013-07-12)ted","(urn:opendaylight:role:service?revision=2015-07-27)sal-role","(urn:opendaylight:vendor:extension-switchfeatures:notification?revision=2016-08-19)switch-features-notification","(urn:opendaylight:params:xml:ns:yang:controller:config?revision=2013-04-05)config","(urn:opendaylight:openflow:approved:extensions?revision=2016-08-02)openflow-approved-extensions","(urn:sal:restconf:event:subscription?revision=2014-07-08)sal-remote-augment","(urn:opendaylight:openflowplugin:extension:general?revision=2014-07-14)openflowplugin-extension-general","(config:aaa:authn:encrypt:service:config?revision=2016-09-15)aaa-encrypt-service-config","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?revision=2013-10-28)opendaylight-md-sal-binding","(urn:opendaylight:switch-features:extension?revision=2014-02-06)opendaylight-switch-features-extension","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:pingpong?revision=2014-11-07)opendaylight-pingpong-broker","(urn:opendaylight:flow:topology:discovery?revision=2013-08-19)flow-topology-discovery","(urn:ericsson:experimenter:table:types?revision=2014-03-06)experimenter-table-types","(urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology?revision=2013-07-12)l3-unicast-igp-topology","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-04-09)ietf-yang-library","(urn:opendaylight:model:topology:view?revision=2013-10-30)opendaylight-topology-view","(urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper?revision=2015-01-14)netconf-northbound-mapper","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher?revision=2014-04-08)odl-netconfig-client-cfg","(urn:ietf:params:xml:ns:yang:ietf-packet-fields?revision=2016-02-18)ietf-packet-fields","(urn:ericsson:resync:error:notification?revision=2014-02-07)resync-error-notification","urn:ietf:params:netconf:capability:candidate:1.0","(urn:opendaylight:netvirt:neutronvpn?revision=2015-06-02)neutronvpn","(urn:opendaylight:meter:types?revision=2013-09-18)opendaylight-meter-types","(urn:opendaylight:flow:types:queue?revision=2013-09-25)opendaylight-queue-types","(urn:opendaylight:l2:types?revision=2013-08-27)opendaylight-l2-types","(urn:opendaylight:neutron-L3?revision=2015-07-12)neutron-L3","(urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity?revision=2015-09-30)odl-general-entity"]},"netconf-node-topology:host":"127.0.0.1","netconf-node-topology:unavailable-capabilities":{},"netconf-node-topology:connection-status":"connected","netconf-node-topology:port":1830},{"node-id":"CONTROLLER2","netconf-node-topology:clustered-connection-status":{"netconf-master-node":"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550"},"netconf-node-topology:available-capabilities":{"available-capability":["(urn:opendaylight:genius:lockmanager:impl?revision=2016-04-06)lockmanager-impl","(urn:ericsson:experimenter:openflow:types?revision=2014-04-25)experimenter-flow-types","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2010-09-24)ietf-inet-types","(urn:opendaylight:params:xml:ns:yang:controller:sal:restconf:service?revision=2015-07-08)sal-restconf-service","(urn:opendaylight:genius:resourcemanager?revision=2016-06-22)resource-manager","(urn:opendaylight:meters:service?revision=2016-03-16)sal-meters-batch","(urn:opendaylight:params:xml:ns:yang:controller:threadpool?revision=2013-04-09)threadpool","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote?revision=2014-01-14)sal-remote","(urn:opendaylight:netvirt:aclservice?revision=2016-06-08)aclservice","(urn:opendaylight:params:xml:ns:yang:openflowplugin:sm:control?revision=2015-08-12)statistics-manager-control","(urn:opendaylight:openflowplugin:extension:nicira:action?revision=2014-07-14)openflowplugin-extension-nicira-action","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store?revision=2014-06-17)opendaylight-operational-dom-datastore","(urn:opendaylight:params:xml:ns:yang:controller:shutdown:impl?revision=2013-12-18)shutdown-impl","(urn:opendaylight:flows:service?revision=2016-03-14)sal-flows-batch","(urn:opendaylight:neutron-qos-ext?revision=2016-06-13)neutron-qos-ext","(urn:opendaylight:params:xml:ns:yang:aaa:credential-store?revision=2015-02-26)credential-store","(urn:ietf:params:xml:ns:yang:ietf-access-control-list?revision=2016-02-18)ietf-access-control-list","(urn:experimenter:matchExp?revision=2014-03-06)experimenter-match-type","(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-10-21)network-topology","(urn:ericsson:neutron:ml3?revision=2014-09-30)neutron-ml3-services","(urn:opendaylight:params:xml:ns:yang:config:openflow:plugin:impl?revision=2015-03-27)openflow-plugin-provider-impl","(urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor?revision=2013-11-12)netty-event-executor","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl?revision=2013-04-05)threadpool-impl","(urn:ericsson:switch-features:notification?revision=2013-08-19)switch-features-notification","(urn:opendaylight:genius:interfacemanager:meta?revision=2016-04-06)odl-interface-meta","(urn:opendaylight:groups:service?revision=2016-03-15)sal-groups-batch","(urn:opendaylight:genius:alivenessmonitor?revision=2016-04-11)aliveness-monitor","(urn:opendaylight:flow:service?revision=2013-08-19)sal-flow","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?revision=2010-10-04)ietf-netconf-monitoring","(urn:opendaylight:queue:statistics?revision=2013-12-16)opendaylight-queue-statistics","(urn:opendaylight:model:topology:general?revision=2013-10-30)opendaylight-topology","(urn:ietf:params:xml:ns:yang:ietf-network-topology?revision=2015-06-08)ietf-network-topology","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin?revision=2015-10-13)cluster-admin","(urn:opendaylight:neutron-extensions?revision=2016-06-17)neutron-extensions","(urn:opendaylight:params:xml:ns:yang:controller:config:concurrent-data-broker?revision=2014-11-24)odl-concurrent-data-broker-cfg","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-06-21)ietf-yang-library","(urn:opendaylight:netvirt:cloud-servicechain:state?revision=2017-05-11)cloud-service-chain-state","(urn:opendaylight:flow:transaction?revision=2015-03-04)flow-capable-transaction","(urn:opendaylight:neutron-attrs?revision=2015-07-12)neutron-attrs","(urn:ericsson:neutron:ml2?revision=2014-09-30)neutron-ml2-services","(urn:opendaylight:params:xml:ns:yang:controller:protocol:framework?revision=2014-03-13)protocol-framework","(urn:opendaylight:flow:types:port?revision=2013-09-25)opendaylight-port-types","(urn:opendaylight:params:xml:ns:yang:openflow:common:config?revision=2014-03-26)openflow-provider","(urn:opendaylight:neutron-L3-ext?revision=2015-07-12)neutron-L3-ext","(urn:opendaylight:netvirt:natservice:rpc?revision=2017-02-09)odl-nat-rpc","(urn:opendaylight:vendor:extension-resync-message?revision=2016-07-13)extension-resync-message","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:clustering:entity-owners?revision=2015-08-04)entity-owners","(urn:opendaylight:neutron-sfc?revision=2016-05-11)neutron-sfc","(urn:opendaylight:genius:itm:config?revision=2016-04-06)itm-config","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:config-dom-store?revision=2014-06-17)opendaylight-config-dom-datastore","(urn:opendaylight:params:xml:ns:yang:openflowplugin:nx:config:impl?revision=2014-07-11)nicira-extension-impl","(urn:opendaylight:genius:interface:statistics?revision=2015-08-24)interface-statistics","(urn:opendaylight:neutron-hostconfig?revision=2015-07-12)neutron-hostconfig","(urn:TBD:params:xml:ns:yang:network:isis-topology?revision=2013-07-12)isis-topology","(urn:opendaylight:netvirt:vpn:rpc?revision=2016-02-01)vpn-rpc","(urn:opendaylight:netvirt:elan:statistics?revision=2015-08-24)elan-statistics","(urn:opendaylight:neutron-bgpvpns?revision=2015-09-03)neutron-bgpvpns","(urn:opendaylight:openflowplugin:extension:nicira:match?revision=2014-07-14)openflowplugin-extension-nicira-match","(urn:ericsson:experimenter:flow:types?revision=2014-04-22)experimenter-flow-types","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec?revision=2016-07-14)opendaylight-md-sal-binding-v1-codec","(urn:ericsson:params:xml:ns:yang:ebgp?revision=2015-09-01)ebgp","(urn:opendaylight:node:error:service?revision=2014-04-10)node-error","(urn:ericsson:resync:rpcs:notification?revision=2014-02-07)resync-notification","(urn:ietf:params:xml:ns:yang:ospf-topology?revision=2013-07-12)ospf-topology","(urn:opendaylight:direct:statistics?revision=2016-05-11)opendaylight-direct-statistics","(urn:TBD:params:xml:ns:yang:network:ted?revision=2013-10-21)ted","(urn:opendaylight:openflowplugin:extension:resync?revision=2016-07-13)openflowplugin-extension-resync","(urn:opendaylight:netvirt:l3vpn?revision=2013-09-11)odl-l3vpn","(urn:opendaylight:params:xml:ns:yang:controller:netconf:topology?revision=2015-07-27)netconf-topology","(urn:opendaylight:vendor:extension-switchfeatures-message?revision=2016-07-13)extension-switchfeatures-message","(urn:opendaylight:params:xml:ns:yang:ovsdb?revision=2015-01-05)ovsdb","(urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-switchfeatures-provider?revision=2016-07-13)experimenter-switchfeatures-provider","(urn:opendaylight:yang:aaa:cert:mdsal?revision=2016-03-21)aaa-cert-mdsal","(urn:opendaylight:neutron-binding?revision=2015-07-12)neutron-binding","(urn:opendaylight:openflowplugin:experimenter:types?revision=2015-10-20)openflowplugin-experimenter-types","(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2014-05-08)ietf-interfaces","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?revision=2013-10-28)opendaylight-md-sal-common","(urn:opendaylight:params:xml:ns:yang:openflow:provider:config?revision=2016-05-10)openflow-provider-config","(urn:opendaylight:params:xml:ns:yang:controller:netty:timer?revision=2013-11-19)netty-timer","(urn:opendaylight:vendor:extension:resync:error:notification?revision=2016-02-07)resync-error-notification","(urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider?revision=2014-06-17)opendaylight-inmemory-datastore-provider","(urn:opendaylight:genius:resourcemanager:impl?revision=2016-04-06)resourcemanager-impl","(urn:opendaylight:params:xml:ns:yang:netvirt:inter-vpn-link?revision=2016-03-11)inter-vpn-link","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf?revision=2015-08-03)odl-sal-netconf-connector-cfg","(urn:ericsson:resync:start:notification?revision=2014-02-07)start-resync-download-notification","(urn:opendaylight:netvirt:cloud-servicechain:api?revision=2015-12-11)cloud-servicechain-api","(urn:opendaylight:netvirt:natservice?revision=2016-01-11)odl-nat","(urn:opendaylight:params:xml:ns:yang:md:sal:config:impl:cluster-singleton-service?revision=2016-07-18)cluster-singleton-service-impl","(urn:opendaylight:group:types?revision=2013-10-18)opendaylight-group-types","(urn:opendaylight:neutron-ports?revision=2015-07-12)neutron-ports","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?revision=2013-10-28)opendaylight-sal-binding-broker-impl","(urn:opendaylight:genius:interfacemanager:servicebinding?revision=2016-04-06)interface-service-bindings","(urn:opendaylight:neutron-fwaas?revision=2015-07-12)neutron-fwaas","(urn:opendaylight:params:xml:ns:yang:controller:config:legacy-entity-ownership-service-provider?revision=2016-02-26)opendaylight-legacy-entity-ownership-service-provider","(urn:opendaylight:netvirt:dhcp?revision=2016-04-28)vpnservice-dhcp","(urn:opendaylight:netvirt:ipv6service:nd:packet?revision=2016-06-20)neighbor-discovery","(urn:opendaylight:params:xml:ns:yang:controller:netty?revision=2013-11-19)netty","(urn:opendaylight:neutron-subnets?revision=2015-07-12)neutron-subnets","(urn:ericsson:openflow:experimenter:action?revision=2014-03-06)experimenter-action","(urn:opendaylight:yang:extension:yang-ext?revision=2013-07-09)yang-ext","(urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:config?revision=2014-07-11)openflowjava-nx-config","(urn:opendaylight:service:barrier:common?revision=2016-03-15)barrier-common","(urn:ietf:params:xml:ns:yang:iana-if-type?revision=2014-05-08)iana-if-type","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:ssh?revision=2015-01-14)netconf-northbound-ssh","(urn:opendaylight:module:config?revision=2014-10-15)node-config","(urn:opendaylight:netvirt:aclservice-config?revision=2016-08-06)aclservice-config","(urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:api:config?revision=2014-07-11)openflowjava-nx-api-config","(urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl?revision=2014-03-26)openflow-provider-impl","(urn:ietf:params:xml:ns:netconf:base:1.0?revision=2011-06-01)ietf-netconf","(urn:opendaylight:params:xml:ns:yang:ovsdb:hwvtep?revision=2015-09-01)hwvtep","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:scheduled?revision=2013-12-01)threadpool-impl-scheduled","(urn:opendaylight:genius:lockmanager?revision=2016-04-13)lock-manager","(urn:ericsson:switch-features:rpcs:notification?revision=2014-02-07)switch-features-extension","(urn:opendaylight:inventory?revision=2013-08-19)opendaylight-inventory","(urn:opendaylight:neutron-l2gateways?revision=2015-07-12)neutron-l2gateways","(urn:opendaylight:echo:service?revision=2015-03-05)sal-echo","(urn:opendaylight:neutron-secgroups?revision=2015-07-12)neutron-secgroups","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service?revision=2015-08-10)opendaylight-entity-ownership-service","(urn:opendaylight:neutron-metering?revision=2015-07-12)neutron-metering","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:fixed?revision=2013-12-01)threadpool-impl-fixed","(urn:opendaylight:table:service?revision=2013-10-26)sal-table","(urn:opendaylight:group:statistics?revision=2013-11-11)opendaylight-group-statistics","(urn:opendaylight:params:xml:ns:yang:openflow:api?revision=2015-03-31)openflow-provider","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:tcp?revision=2015-04-23)netconf-northbound-tcp","(urn:opendaylight:genius:mdsalutil?revision=2016-04-06)odl-mdsalutil","(urn:huawei:params:xml:ns:yang:l3vpn?revision=2014-08-15)l3vpn","(urn:opendaylight:openflowjava:extension-switchfeatures?revision=2016-07-13)openflowjava-extension-switchfeatures","(urn:opendaylight:service:batch:common?revision=2016-03-22)batch-common","(urn:opendaylight:params:xml:ns:yang:controller:netconf:topology:shared:schema:repository?revision=2015-07-27)shared-schema-repository","(urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager:config?revision=2016-05-11)forwarding-rules-manager-config","(urn:opendaylight:action:types?revision=2013-11-12)opendaylight-action-types","(urn:opendaylight:genius:interfacemanager:impl?revision=2016-04-06)interfacemanager-impl","(urn:opendaylight:port:statistics?revision=2013-12-14)opendaylight-port-statistics","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:general-entity?revision=2015-08-20)general-entity","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:auth?revision=2015-07-15)netconf-auth","(urn:opendaylight:netvirt:elan:config?revision=2015-07-10)elan-config","(urn:opendaylight:genius:idmanager?revision=2016-04-06)id-manager","(urn:opendaylight:netvirt:l3nexthop?revision=2015-04-09)l3nexthop","(urn:opendaylight:packet:service?revision=2013-07-09)packet-processing","(urn:opendaylight:netvirt:neutronvpn:config?revision=2016-08-06)neutronvpn-config","(urn:opendaylight:genius:arputil?revision=2016-04-06)odl-arputil","(urn:opendaylight:openflowjava:nx:match?revision=2014-04-21)nicira-match","(urn:opendaylight:table:types?revision=2013-10-26)opendaylight-table-types","(urn:TBD:params:xml:ns:yang:ospf-topology?revision=2013-10-21)ospf-topology","(urn:opendaylight:port:service?revision=2013-11-07)sal-port","(urn:opendaylight:neutron-trunks?revision=2017-01-18)neutron-trunks","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector?revision=2014-07-24)opendaylight-rest-connector","(urn:opendaylight:yang:aaa:cert?revision=2015-11-26)aaa-cert","urn:ietf:params:netconf:capability:notification:1.0","(urn:ietf:params:xml:ns:netmod:notification?revision=2008-07-14)nc-notifications","(urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?revision=2012-02-06)ietf-netconf-notifications","(urn:opendaylight:neutron-portsecurity?revision=2015-07-12)neutron-portsecurity","(urn:opendaylight:openflow:oxm?revision=2015-02-25)openflow-extensible-match","(urn:opendaylight:neutron-sfc-flow-classifier?revision=2016-05-11)neutron-sfc-flow-classifier","(urn:opendaylight:neutron-networks?revision=2015-07-12)neutron-networks","(urn:opendaylight:params:xml:ns:yang:controller:shutdown?revision=2013-12-18)shutdown","(urn:opendaylight:neutron-types?revision=2016-05-17)neutron-types","(urn:opendaylight:experimenter-message:service?revision=2015-10-20)sal-experimenter-message","(urn:opendaylight:genius:mdsalutil:impl?revision=2016-04-06)mdsalutil-impl","(config:aaa:authn:netconf:plugin?revision=2015-07-15)aaa-authn-netconf-plugin","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound?revision=2015-01-14)netconf-northbound","(urn:opendaylight:params:xml:ns:yang:controller:config:cluster-admin-provider?revision=2015-10-13)cluster-admin-provider","(urn:opendaylight:flow:table:statistics?revision=2013-12-15)opendaylight-flow-table-statistics","(urn:opendaylight:neutron-provider-ext?revision=2015-07-12)neutron-provider-ext","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?revision=2013-10-28)opendaylight-md-sal-dom","(urn:opendaylight:opendaylight-ipv6-arbitrary-bitmask-fields?revision=2016-02-24)opendaylight-ipv6-arbitrary-bitmask-fields","(urn:opendaylight:neutron?revision=2015-07-12)neutron","(urn:opendaylight:netconf-node-inventory?revision=2014-01-08)netconf-node-inventory","(urn:opendaylight:daexim-spi?revision=2016-08-16)data-export-import-spi","(urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup?revision=2013-11-07)threadgroup","(urn:opendaylight:genius:itm:op?revision=2016-04-06)itm-state","(urn:opendaylight:neutron-vpnaas?revision=2015-07-12)neutron-vpnaas","(urn:ietf:params:xml:ns:yang:ietf-restconf?revision=2017-01-26)ietf-restconf","(urn:opendaylight:params:xml:ns:yang:controller:config:remote-rpc-connector?revision=2014-07-07)remote-rpc-connector","(urn:opendaylight:netvirt:vpn:config?revision=2016-11-30)vpn-config","(urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config?revision=2016-05-11)topology-lldp-discovery-config","(urn:ericsson:resync:output:notification?revision=2014-02-07)resync-output","(urn:opendaylight:params:xml:ns:yang:openflowplugin:extension:api?revision=2015-04-25)openflowplugin-extension-registry","(urn:opendaylight:openflowjava:nx:action?revision=2014-04-21)nicira-action","(urn:ietf:params:xml:ns:yang:rpc-context?revision=2013-06-17)rpc-context","(urn:opendaylight:params:xml:ns:yang:sdncconfig:impl?revision=2014-12-10)sdncconfig-impl","(urn:opendaylight:genius:arputil:impl?revision=2016-04-06)arputil-impl","(urn:cisco:params:xml:ns:yang:bgp?revision=2013-07-15)bgp","(urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:service?revision=2015-10-05)actor-system-provider-service","(urn:opendaylight:params:xml:ns:yang:controller:config:openflowplugin:nx:config?revision=2014-07-11)nicira-extension","(urn:opendaylight:params:xml:ns:yang:dhcpservice:api?revision=2015-07-10)dhcpservice-api","(subscribe:to:notification?revision=2016-10-28)subscribe-to-notification","(urn:opendaylight:flow:inventory?revision=2013-08-19)flow-node-inventory","(urn:ericsson:experimenter:action:types?revision=2014-02-28)experimenter-action-types","(urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker?revision=2014-10-23)lldp-speaker","(urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider?revision=2014-06-12)distributed-datastore-provider","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2013-07-15)ietf-yang-types","(urn:opendaylight:model:statistics:types?revision=2013-09-25)opendaylight-statistics-types","(urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology?revision=2013-10-21)l3-unicast-igp-topology","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?revision=2013-10-28)opendaylight-sal-dom-broker-impl","(urn:ietf:params:xml:ns:netconf:notification:1.0?revision=2008-07-14)notifications","(urn:opendaylight:neutron-provider?revision=2015-07-12)neutron-provider","(urn:opendaylight:vendor:extension:resync:output:notification?revision=2016-08-19)resync-output","(instance:identifier:patch:module?revision=2015-11-21)instance-identifier-patch-module","(urn:opendaylight:openflow:augments?revision=2015-02-25)openflow-augments","(urn:TBD:params:xml:ns:yang:network:isis-topology?revision=2013-10-21)isis-topology","(urn:opendaylight:daexim-internal?revision=2016-09-21)data-export-import-internal","(urn:opendaylight:arbitrary:bitmask:fields?revision=2016-01-30)opendaylight-arbitrary-bitmask-fields","(urn:opendaylight:netvirt:elan?revision=2015-06-02)elan","(urn:opendaylight:netvirt:elan:etree?revision=2016-06-14)etree","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf?revision=2014-04-08)odl-netconf-cfg","(urn:opendaylight:neutron-lbaasv2?revision=2015-07-12)neutron-lbaasv2","(urn:opendaylight:genius:idmanager:impl?revision=2016-04-06)idmanager-impl","(urn:ericsson:reconciliation:service?revision=2015-08-04)forwardingrules-manager-reconciliation","(urn:opendaylight:flow:errors?revision=2013-11-16)flow-errors","(urn:opendaylight:openflow:resync?revision=2014-02-06)openflow-resync","(urn:opendaylight:params:xml:ns:yang:overlay?revision=2015-01-05)overlay","(urn:ietf:params:xml:ns:yang:ietf-inet-types?revision=2013-07-15)ietf-inet-types","(urn:opendaylight:genius:itm?revision=2016-04-06)itm","(urn:opendaylight:genius:interfacemanager?revision=2016-04-06)odl-interface","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl?revision=2014-03-28)openflow-switch-connection-provider-impl","(urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-resync-provider?revision=2016-07-13)experimenter-resync-provider","(urn:opendaylight:openflow:common:types?revision=2013-07-31)openflow-types","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification?revision=2015-08-06)netconf-northbound-notification","(urn:opendaylight:openflow:protocol?revision=2013-07-31)openflow-protocol","(urn:opendaylight:params:xml:ns:yang:dhcpservice:config?revision=2015-07-10)dhcpservice-config","(urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:impl?revision=2015-10-05)actor-system-provider-impl","(urn:opendaylight:yang:aaa:cert:rpc?revision=2015-12-15)aaa-cert-rpc","(urn:opendaylight:model:topology:inventory?revision=2013-10-30)opendaylight-topology-inventory","(urn:ietf:params:xml:ns:yang:ietf-yang-types?revision=2010-09-24)ietf-yang-types","(urn:opendaylight:genius:itm:rpcs?revision=2016-04-06)itm-rpc","urn:ietf:params:netconf:base:1.1","(urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:flexible?revision=2013-12-01)threadpool-impl-flexible","(urn:ietf:params:xml:ns:yang:ietf-restconf?revision=2013-10-19)ietf-restconf","(urn:opendaylight:netconf-node-topology?revision=2015-01-14)netconf-node-topology","(urn:opendaylight:meter:service?revision=2013-09-18)sal-meter","(urn:opendaylight:netvirt:fibmanager?revision=2015-03-30)odl-fib","(urn:opendaylight:netvirt:fib:rpc?revision=2016-01-21)fib-rpc","(urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification:impl?revision=2015-08-07)netconf-northbound-notification-impl","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:config?revision=2016-05-06)openflow-switch-connection-config","(urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring-extension?revision=2013-12-10)ietf-netconf-monitoring-extension","(urn:opendaylight:group:service?revision=2013-09-18)sal-group","urn:ietf:params:netconf:base:1.0","(urn:opendaylight:neutron-port-ext?revision=2015-11-25)neutron-port-ext","(urn:ietf:params:xml:ns:yang:ietf-network?revision=2015-06-08)ietf-network","(urn:opendaylight:openflow:config?revision=2014-06-30)openflow-configuration","urn:ietf:params:netconf:capability:exi:1.0","(urn:opendaylight:daexim?revision=2016-09-21)data-export-import","(urn:ietf:params:xml:ns:yang:iana-afn-safi?revision=2013-07-04)iana-afn-safi","(urn:opendaylight:genius:alivenessmonitor:impl?revision=2016-04-06)alivenessmonitor-impl","(urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker:config?revision=2016-05-12)lldp-speaker-config","(urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring?revision=2017-01-26)ietf-restconf-monitoring","(urn:opendaylight:genius:itm:impl?revision=2016-04-06)itm-impl","(urn:TBD:params:xml:ns:yang:network-topology?revision=2013-07-12)network-topology","(urn:opendaylight:openflowplugin:extension:switchfeatures?revision=2016-07-13)openflowplugin-extension-switchfeatures","(urn:opendaylight:neutron-constants?revision=2015-07-12)neutron-constants","(urn:opendaylight:openflow:common:instruction?revision=2013-07-31)openflow-instruction","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl?revision=2015-01-12)netconf-northbound-impl","(urn:opendaylight:flat-batch:service?revision=2016-03-21)sal-flat-batch","(urn:opendaylight:params:xml:ns:yang:md:sal:config:spi:cluster-singleton-service?revision=2016-07-18)cluster-singleton-service-spi","(urn:opendaylight:flow:types?revision=2013-10-26)opendaylight-flow-types","(urn:opendaylight:meter:statistics?revision=2013-11-11)opendaylight-meter-statistics","(urn:opendaylight:model:match:types?revision=2013-10-26)opendaylight-match-types","(urn:opendaylight:genius:interfacemanager:rpcs?revision=2016-04-06)odl-interface-rpc","(urn:opendaylight:flow:statistics?revision=2013-08-19)opendaylight-flow-statistics","(urn:opendaylight:experimenter-mp-message:service?revision=2015-10-20)sal-experimenter-mp-message","(urn:opendaylight:queue:service?revision=2015-03-05)sal-queue","(urn:opendaylight:openflow:system?revision=2013-09-27)system-notifications","(urn:opendaylight:openflow:common:action?revision=2015-02-03)openflow-action","(urn:opendaylight:openflowjava:extension-resync?revision=2016-07-13)openflowjava-extension-resync","(urn:opendaylight:neutron-qos?revision=2016-06-13)neutron-qos","(urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider?revision=2014-03-28)openflow-switch-connection-provider","(urn:TBD:params:xml:ns:yang:network:ted?revision=2013-07-12)ted","(urn:opendaylight:role:service?revision=2015-07-27)sal-role","(urn:opendaylight:vendor:extension-switchfeatures:notification?revision=2016-08-19)switch-features-notification","(urn:opendaylight:params:xml:ns:yang:controller:config?revision=2013-04-05)config","(urn:opendaylight:openflow:approved:extensions?revision=2016-08-02)openflow-approved-extensions","(urn:sal:restconf:event:subscription?revision=2014-07-08)sal-remote-augment","(urn:opendaylight:openflowplugin:extension:general?revision=2014-07-14)openflowplugin-extension-general","(config:aaa:authn:encrypt:service:config?revision=2016-09-15)aaa-encrypt-service-config","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?revision=2013-10-28)opendaylight-md-sal-binding","(urn:opendaylight:switch-features:extension?revision=2014-02-06)opendaylight-switch-features-extension","(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:pingpong?revision=2014-11-07)opendaylight-pingpong-broker","(urn:opendaylight:flow:topology:discovery?revision=2013-08-19)flow-topology-discovery","(urn:ericsson:experimenter:table:types?revision=2014-03-06)experimenter-table-types","(urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology?revision=2013-07-12)l3-unicast-igp-topology","(urn:ietf:params:xml:ns:yang:ietf-yang-library?revision=2016-04-09)ietf-yang-library","(urn:opendaylight:model:topology:view?revision=2013-10-30)opendaylight-topology-view","(urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper?revision=2015-01-14)netconf-northbound-mapper","(urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher?revision=2014-04-08)odl-netconfig-client-cfg","(urn:ietf:params:xml:ns:yang:ietf-packet-fields?revision=2016-02-18)ietf-packet-fields","(urn:ericsson:resync:error:notification?revision=2014-02-07)resync-error-notification","urn:ietf:params:netconf:capability:candidate:1.0","(urn:opendaylight:netvirt:neutronvpn?revision=2015-06-02)neutronvpn","(urn:opendaylight:meter:types?revision=2013-09-18)opendaylight-meter-types","(urn:opendaylight:flow:types:queue?revision=2013-09-25)opendaylight-queue-types","(urn:opendaylight:l2:types?revision=2013-08-27)opendaylight-l2-types","(urn:opendaylight:neutron-L3?revision=2015-07-12)neutron-L3","(urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity?revision=2015-09-30)odl-general-entity"]},"netconf-node-topology:host":"127.0.0.1","netconf-node-topology:unavailable-capabilities":{},"netconf-node-topology:connection-status":"connected","netconf-node-topology:port":1830}]},{"topology-id":"netvirt:1"}]},"ietf-yang-library:modules-state":{"module":[{"name":"entity-owners","revision":"2015-08-04","schema":"/modules/entity-owners/2015-08-04","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:clustering:entity-owners","conformance-type":"import"},{"name":"opendaylight-md-sal-common","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-common/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:common","conformance-type":"import"},{"name":"ietf-restconf","revision":"2017-01-26","schema":"/modules/ietf-restconf/2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"ietf-yang-types","revision":"2010-09-24","schema":"/modules/ietf-yang-types/2010-09-24","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"neutronvpn-config","revision":"2016-08-06","schema":"/modules/neutronvpn-config/2016-08-06","namespace":"urn:opendaylight:netvirt:neutronvpn:config","conformance-type":"import"},{"name":"batch-common","revision":"2016-03-22","schema":"/modules/batch-common/2016-03-22","namespace":"urn:opendaylight:service:batch:common","conformance-type":"import"},{"name":"iana-afn-safi","revision":"2013-07-04","schema":"/modules/iana-afn-safi/2013-07-04","namespace":"urn:ietf:params:xml:ns:yang:iana-afn-safi","conformance-type":"import"},{"name":"l3nexthop","revision":"2015-04-09","schema":"/modules/l3nexthop/2015-04-09","namespace":"urn:opendaylight:netvirt:l3nexthop","conformance-type":"import"},{"name":"dhcpservice-api","revision":"2015-07-10","schema":"/modules/dhcpservice-api/2015-07-10","namespace":"urn:opendaylight:params:xml:ns:yang:dhcpservice:api","conformance-type":"import"},{"name":"forwarding-rules-manager-config","revision":"2016-05-11","schema":"/modules/forwarding-rules-manager-config/2016-05-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager:config","conformance-type":"import"},{"name":"general-entity","revision":"2015-08-20","schema":"/modules/general-entity/2015-08-20","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:general-entity","conformance-type":"import"},{"name":"dhcpservice-config","revision":"2015-07-10","schema":"/modules/dhcpservice-config/2015-07-10","namespace":"urn:opendaylight:params:xml:ns:yang:dhcpservice:config","conformance-type":"import"},{"name":"aclservice-config","revision":"2016-08-06","schema":"/modules/aclservice-config/2016-08-06","namespace":"urn:opendaylight:netvirt:aclservice-config","conformance-type":"import"},{"name":"ietf-yang-types","revision":"2013-07-15","schema":"/modules/ietf-yang-types/2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"import"},{"name":"flow-errors","revision":"2013-11-16","schema":"/modules/flow-errors/2013-11-16","namespace":"urn:opendaylight:flow:errors","conformance-type":"import"},{"name":"credential-store","revision":"2015-02-26","schema":"/modules/credential-store/2015-02-26","namespace":"urn:opendaylight:params:xml:ns:yang:aaa:credential-store","conformance-type":"import"},{"name":"rpc-context","revision":"2013-06-17","schema":"/modules/rpc-context/2013-06-17","namespace":"urn:ietf:params:xml:ns:yang:rpc-context","conformance-type":"import"},{"name":"opendaylight-queue-types","revision":"2013-09-25","schema":"/modules/opendaylight-queue-types/2013-09-25","namespace":"urn:opendaylight:flow:types:queue","conformance-type":"import"},{"name":"vpn-rpc","revision":"2016-02-01","schema":"/modules/vpn-rpc/2016-02-01","namespace":"urn:opendaylight:netvirt:vpn:rpc","conformance-type":"import"},{"name":"neutron-attrs","revision":"2015-07-12","schema":"/modules/neutron-attrs/2015-07-12","namespace":"urn:opendaylight:neutron-attrs","conformance-type":"import"},{"name":"neutron-vpnaas","revision":"2015-07-12","schema":"/modules/neutron-vpnaas/2015-07-12","namespace":"urn:opendaylight:neutron-vpnaas","conformance-type":"import"},{"name":"lldp-speaker","revision":"2014-10-23","schema":"/modules/lldp-speaker/2014-10-23","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker","conformance-type":"import"},{"name":"opendaylight-port-types","revision":"2013-09-25","schema":"/modules/opendaylight-port-types/2013-09-25","namespace":"urn:opendaylight:flow:types:port","conformance-type":"import"},{"name":"neutron-bgpvpns","revision":"2015-09-03","schema":"/modules/neutron-bgpvpns/2015-09-03","namespace":"urn:opendaylight:neutron-bgpvpns","conformance-type":"import"},{"name":"openflow-types","revision":"2013-07-31","schema":"/modules/openflow-types/2013-07-31","namespace":"urn:opendaylight:openflow:common:types","conformance-type":"import"},{"name":"notifications","revision":"2008-07-14","schema":"/modules/notifications/2008-07-14","namespace":"urn:ietf:params:xml:ns:netconf:notification:1.0","conformance-type":"import"},{"name":"openflow-provider-config","revision":"2016-05-10","schema":"/modules/openflow-provider-config/2016-05-10","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:provider:config","conformance-type":"import"},{"name":"yang-ext","revision":"2013-07-09","schema":"/modules/yang-ext/2013-07-09","namespace":"urn:opendaylight:yang:extension:yang-ext","conformance-type":"import"},{"name":"odl-fib","revision":"2015-03-30","schema":"/modules/odl-fib/2015-03-30","namespace":"urn:opendaylight:netvirt:fibmanager","conformance-type":"import"},{"name":"data-export-import","revision":"2016-09-21","schema":"/modules/data-export-import/2016-09-21","namespace":"urn:opendaylight:daexim","conformance-type":"import"},{"name":"data-export-import-internal","revision":"2016-09-21","schema":"/modules/data-export-import-internal/2016-09-21","namespace":"urn:opendaylight:daexim-internal","conformance-type":"import"},{"name":"cluster-admin","revision":"2015-10-13","schema":"/modules/cluster-admin/2015-10-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin","conformance-type":"import"},{"name":"lldp-speaker-config","revision":"2016-05-12","schema":"/modules/lldp-speaker-config/2016-05-12","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:applications:lldp-speaker:config","conformance-type":"import"},{"name":"aaa-encrypt-service-config","revision":"2016-09-15","schema":"/modules/aaa-encrypt-service-config/2016-09-15","namespace":"config:aaa:authn:encrypt:service:config","conformance-type":"import"},{"name":"topology-lldp-discovery-config","revision":"2016-05-11","schema":"/modules/topology-lldp-discovery-config/2016-05-11","namespace":"urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config","conformance-type":"import"},{"name":"barrier-common","revision":"2016-03-15","schema":"/modules/barrier-common/2016-03-15","namespace":"urn:opendaylight:service:barrier:common","conformance-type":"import"},{"name":"odl-general-entity","revision":"2015-09-30","schema":"/modules/odl-general-entity/2015-09-30","namespace":"urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity","conformance-type":"import"},{"name":"opendaylight-meter-types","revision":"2013-09-18","schema":"/modules/opendaylight-meter-types/2013-09-18","namespace":"urn:opendaylight:meter:types","conformance-type":"import"},{"name":"neutron-ml2-services","revision":"2014-09-30","schema":"/modules/neutron-ml2-services/2014-09-30","namespace":"urn:ericsson:neutron:ml2","conformance-type":"import"},{"name":"neutron-ml3-services","revision":"2014-09-30","schema":"/modules/neutron-ml3-services/2014-09-30","namespace":"urn:ericsson:neutron:ml3","conformance-type":"import"},{"name":"sal-remote","revision":"2014-01-14","schema":"/modules/sal-remote/2014-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote","conformance-type":"import"},{"name":"sal-remote-augment","revision":"2014-07-08","schema":"/modules/sal-remote-augment/2014-07-08","namespace":"urn:sal:restconf:event:subscription","conformance-type":"import"},{"name":"lock-manager","revision":"2016-04-13","schema":"/modules/lock-manager/2016-04-13","namespace":"urn:opendaylight:genius:lockmanager","conformance-type":"import"},{"name":"opendaylight-statistics-types","revision":"2013-09-25","schema":"/modules/opendaylight-statistics-types/2013-09-25","namespace":"urn:opendaylight:model:statistics:types","conformance-type":"import"},{"name":"neutron-sfc","revision":"2016-05-11","schema":"/modules/neutron-sfc/2016-05-11","namespace":"urn:opendaylight:neutron-sfc","conformance-type":"import"},{"name":"aaa-cert","revision":"2015-11-26","schema":"/modules/aaa-cert/2015-11-26","namespace":"urn:opendaylight:yang:aaa:cert","conformance-type":"import"},{"name":"neutron-networks","revision":"2015-07-12","schema":"/modules/neutron-networks/2015-07-12","namespace":"urn:opendaylight:neutron-networks","conformance-type":"import"},{"name":"neutron-trunks","revision":"2017-01-18","schema":"/modules/neutron-trunks/2017-01-18","namespace":"urn:opendaylight:neutron-trunks","conformance-type":"import"},{"name":"neutron-hostconfig","revision":"2015-07-12","schema":"/modules/neutron-hostconfig/2015-07-12","namespace":"urn:opendaylight:neutron-hostconfig","conformance-type":"import"},{"name":"nc-notifications","revision":"2008-07-14","schema":"/modules/nc-notifications/2008-07-14","namespace":"urn:ietf:params:xml:ns:netmod:notification","conformance-type":"import"},{"name":"ietf-inet-types","revision":"2013-07-15","schema":"/modules/ietf-inet-types/2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"neutron-types","revision":"2016-05-17","schema":"/modules/neutron-types/2016-05-17","namespace":"urn:opendaylight:neutron-types","conformance-type":"import"},{"name":"ebgp","revision":"2015-09-01","schema":"/modules/ebgp/2015-09-01","namespace":"urn:ericsson:params:xml:ns:yang:ebgp","conformance-type":"import"},{"name":"opendaylight-arbitrary-bitmask-fields","revision":"2016-01-30","schema":"/modules/opendaylight-arbitrary-bitmask-fields/2016-01-30","namespace":"urn:opendaylight:arbitrary:bitmask:fields","conformance-type":"import"},{"name":"ietf-restconf","revision":"2013-10-19","schema":"/modules/ietf-restconf/2013-10-19","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"import"},{"name":"opendaylight-inventory","revision":"2013-08-19","schema":"/modules/opendaylight-inventory/2013-08-19","namespace":"urn:opendaylight:inventory","conformance-type":"import"},{"name":"resync-output","revision":"2016-08-19","schema":"/modules/resync-output/2016-08-19","namespace":"urn:opendaylight:vendor:extension:resync:output:notification","conformance-type":"import"},{"name":"extension-resync-message","revision":"2016-07-13","schema":"/modules/extension-resync-message/2016-07-13","namespace":"urn:opendaylight:vendor:extension-resync-message","conformance-type":"import"},{"name":"neighbor-discovery","revision":"2016-06-20","schema":"/modules/neighbor-discovery/2016-06-20","namespace":"urn:opendaylight:netvirt:ipv6service:nd:packet","conformance-type":"import"},{"name":"odl-nat","revision":"2016-01-11","schema":"/modules/odl-nat/2016-01-11","namespace":"urn:opendaylight:netvirt:natservice","conformance-type":"import"},{"name":"aliveness-monitor","revision":"2016-04-11","schema":"/modules/aliveness-monitor/2016-04-11","namespace":"urn:opendaylight:genius:alivenessmonitor","conformance-type":"import"},{"name":"ietf-yang-library","revision":"2016-06-21","schema":"/modules/ietf-yang-library/2016-06-21","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"odl-nat-rpc","revision":"2017-02-09","schema":"/modules/odl-nat-rpc/2017-02-09","namespace":"urn:opendaylight:netvirt:natservice:rpc","conformance-type":"import"},{"name":"start-resync-download-notification","revision":"2014-02-07","schema":"/modules/start-resync-download-notification/2014-02-07","namespace":"urn:ericsson:resync:start:notification","conformance-type":"import"},{"name":"ietf-netconf","revision":"2011-06-01","schema":"/modules/ietf-netconf/2011-06-01","feature":["rollback-on-error","xpath","validate","writable-running","confirmed-commit","startup","url","candidate"],"namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","conformance-type":"import"},{"name":"neutron-provider","revision":"2015-07-12","schema":"/modules/neutron-provider/2015-07-12","namespace":"urn:opendaylight:neutron-provider","conformance-type":"import"},{"name":"sal-queue","revision":"2015-03-05","schema":"/modules/sal-queue/2015-03-05","namespace":"urn:opendaylight:queue:service","conformance-type":"import"},{"name":"openflowplugin-experimenter-types","revision":"2015-10-20","schema":"/modules/openflowplugin-experimenter-types/2015-10-20","namespace":"urn:opendaylight:openflowplugin:experimenter:types","conformance-type":"import"},{"name":"vpn-config","revision":"2016-11-30","schema":"/modules/vpn-config/2016-11-30","namespace":"urn:opendaylight:netvirt:vpn:config","conformance-type":"import"},{"name":"ietf-yang-library","revision":"2016-04-09","schema":"/modules/ietf-yang-library/2016-04-09","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"import"},{"name":"network-topology","revision":"2013-07-12","schema":"/modules/network-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"l3-unicast-igp-topology","revision":"2013-07-12","schema":"/modules/l3-unicast-igp-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology","conformance-type":"import"},{"name":"ietf-inet-types","revision":"2010-09-24","schema":"/modules/ietf-inet-types/2010-09-24","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"import"},{"name":"switch-features-notification","revision":"2013-08-19","schema":"/modules/switch-features-notification/2013-08-19","namespace":"urn:ericsson:switch-features:notification","conformance-type":"import"},{"name":"id-manager","revision":"2016-04-06","schema":"/modules/id-manager/2016-04-06","namespace":"urn:opendaylight:genius:idmanager","conformance-type":"import"},{"name":"system-notifications","revision":"2013-09-27","schema":"/modules/system-notifications/2013-09-27","namespace":"urn:opendaylight:openflow:system","conformance-type":"import"},{"name":"ted","revision":"2013-07-12","schema":"/modules/ted/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network:ted","conformance-type":"import"},{"name":"statistics-manager-control","revision":"2015-08-12","schema":"/modules/statistics-manager-control/2015-08-12","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:sm:control","conformance-type":"import"},{"name":"opendaylight-l2-types","revision":"2013-08-27","schema":"/modules/opendaylight-l2-types/2013-08-27","namespace":"urn:opendaylight:l2:types","conformance-type":"import"},{"name":"isis-topology","revision":"2013-07-12","schema":"/modules/isis-topology/2013-07-12","namespace":"urn:TBD:params:xml:ns:yang:network:isis-topology","conformance-type":"import"},{"name":"elan-config","revision":"2015-07-10","schema":"/modules/elan-config/2015-07-10","namespace":"urn:opendaylight:netvirt:elan:config","conformance-type":"import"},{"name":"experimenter-flow-types","revision":"2014-04-25","schema":"/modules/experimenter-flow-types/2014-04-25","namespace":"urn:ericsson:experimenter:openflow:types","conformance-type":"import"},{"name":"flow-capable-transaction","revision":"2015-03-04","schema":"/modules/flow-capable-transaction/2015-03-04","namespace":"urn:opendaylight:flow:transaction","conformance-type":"import"},{"name":"sal-port","revision":"2013-11-07","schema":"/modules/sal-port/2013-11-07","namespace":"urn:opendaylight:port:service","conformance-type":"import"},{"name":"forwardingrules-manager-reconciliation","revision":"2015-08-04","schema":"/modules/forwardingrules-manager-reconciliation/2015-08-04","namespace":"urn:ericsson:reconciliation:service","conformance-type":"import"},{"name":"node-config","revision":"2014-10-15","schema":"/modules/node-config/2014-10-15","namespace":"urn:opendaylight:module:config","conformance-type":"import"},{"name":"switch-features-extension","revision":"2014-02-07","schema":"/modules/switch-features-extension/2014-02-07","namespace":"urn:ericsson:switch-features:rpcs:notification","conformance-type":"import"},{"name":"config","revision":"2013-04-05","schema":"/modules/config/2013-04-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config","conformance-type":"import"},{"name":"openflow-provider","revision":"2014-03-26","schema":"/modules/openflow-provider/2014-03-26","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:common:config","conformance-type":"import"},{"name":"openflowplugin-extension-registry","revision":"2015-04-25","schema":"/modules/openflowplugin-extension-registry/2015-04-25","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:extension:api","conformance-type":"import"},{"name":"netty","revision":"2013-11-19","schema":"/modules/netty/2013-11-19","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty","conformance-type":"import"},{"name":"shutdown","revision":"2013-12-18","schema":"/modules/shutdown/2013-12-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:shutdown","conformance-type":"import"},{"name":"netconf-northbound-mapper","revision":"2015-01-14","schema":"/modules/netconf-northbound-mapper/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:north:mapper","conformance-type":"import"},{"name":"opendaylight-config-dom-datastore","revision":"2014-06-17","schema":"/modules/opendaylight-config-dom-datastore/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:config-dom-store","conformance-type":"import"},{"name":"shutdown-impl","revision":"2013-12-18","schema":"/modules/shutdown-impl/2013-12-18","namespace":"urn:opendaylight:params:xml:ns:yang:controller:shutdown:impl","conformance-type":"import"},{"name":"opendaylight-operational-dom-datastore","revision":"2014-06-17","schema":"/modules/opendaylight-operational-dom-datastore/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store","conformance-type":"import"},{"name":"threadpool","revision":"2013-04-09","schema":"/modules/threadpool/2013-04-09","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool","conformance-type":"import"},{"name":"nicira-extension","revision":"2014-07-11","schema":"/modules/nicira-extension/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:openflowplugin:nx:config","conformance-type":"import"},{"name":"threadpool-impl-scheduled","revision":"2013-12-01","schema":"/modules/threadpool-impl-scheduled/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:scheduled","conformance-type":"import"},{"name":"netty-timer","revision":"2013-11-19","schema":"/modules/netty-timer/2013-11-19","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:timer","conformance-type":"import"},{"name":"openflow-switch-connection-provider","revision":"2014-03-28","schema":"/modules/openflow-switch-connection-provider/2014-03-28","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider","conformance-type":"import"},{"name":"netconf-northbound","revision":"2015-01-14","schema":"/modules/netconf-northbound/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound","conformance-type":"import"},{"name":"netconf-northbound-impl","revision":"2015-01-12","schema":"/modules/netconf-northbound-impl/2015-01-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:northbound:impl","conformance-type":"import"},{"name":"threadpool-impl-fixed","revision":"2013-12-01","schema":"/modules/threadpool-impl-fixed/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:fixed","conformance-type":"import"},{"name":"threadpool-impl-flexible","revision":"2013-12-01","schema":"/modules/threadpool-impl-flexible/2013-12-01","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl:flexible","conformance-type":"import"},{"name":"netty-event-executor","revision":"2013-11-12","schema":"/modules/netty-event-executor/2013-11-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:eventexecutor","conformance-type":"import"},{"name":"inter-vpn-link","revision":"2016-03-11","schema":"/modules/inter-vpn-link/2016-03-11","namespace":"urn:opendaylight:params:xml:ns:yang:netvirt:inter-vpn-link","conformance-type":"import"},{"name":"shared-schema-repository","revision":"2015-07-27","schema":"/modules/shared-schema-repository/2015-07-27","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:topology:shared:schema:repository","conformance-type":"import"},{"name":"resource-manager","revision":"2016-06-22","schema":"/modules/resource-manager/2016-06-22","namespace":"urn:opendaylight:genius:resourcemanager","conformance-type":"import"},{"name":"actor-system-provider-service","revision":"2015-10-05","schema":"/modules/actor-system-provider-service/2015-10-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:service","conformance-type":"import"},{"name":"actor-system-provider-impl","revision":"2015-10-05","schema":"/modules/actor-system-provider-impl/2015-10-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:actor-system-provider:impl","conformance-type":"import"},{"name":"protocol-framework","revision":"2014-03-13","schema":"/modules/protocol-framework/2014-03-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:protocol:framework","conformance-type":"import"},{"name":"ospf-topology","revision":"2013-07-12","schema":"/modules/ospf-topology/2013-07-12","namespace":"urn:ietf:params:xml:ns:yang:ospf-topology","conformance-type":"import"},{"name":"opendaylight-md-sal-binding-v1-codec","revision":"2016-07-14","schema":"/modules/opendaylight-md-sal-binding-v1-codec/2016-07-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:v1:codec","conformance-type":"import"},{"name":"threadpool-impl","revision":"2013-04-05","schema":"/modules/threadpool-impl/2013-04-05","namespace":"urn:opendaylight:params:xml:ns:yang:controller:threadpool:impl","conformance-type":"import"},{"name":"cluster-singleton-service-spi","revision":"2016-07-18","schema":"/modules/cluster-singleton-service-spi/2016-07-18","namespace":"urn:opendaylight:params:xml:ns:yang:md:sal:config:spi:cluster-singleton-service","conformance-type":"import"},{"name":"sal-restconf-service","revision":"2015-07-08","schema":"/modules/sal-restconf-service/2015-07-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:sal:restconf:service","conformance-type":"import"},{"name":"nicira-extension-impl","revision":"2014-07-11","schema":"/modules/nicira-extension-impl/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:nx:config:impl","conformance-type":"import"},{"name":"extension-switchfeatures-message","revision":"2016-07-13","schema":"/modules/extension-switchfeatures-message/2016-07-13","namespace":"urn:opendaylight:vendor:extension-switchfeatures-message","conformance-type":"import"},{"name":"resync-output","revision":"2014-02-07","schema":"/modules/resync-output/2014-02-07","namespace":"urn:ericsson:resync:output:notification","conformance-type":"import"},{"name":"ietf-netconf-notifications","revision":"2012-02-06","schema":"/modules/ietf-netconf-notifications/2012-02-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-notifications","conformance-type":"import"},{"name":"opendaylight-md-sal-binding","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-binding/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding","conformance-type":"import"},{"name":"aaa-cert-mdsal","revision":"2016-03-21","schema":"/modules/aaa-cert-mdsal/2016-03-21","namespace":"urn:opendaylight:yang:aaa:cert:mdsal","conformance-type":"import"},{"name":"cluster-admin-provider","revision":"2015-10-13","schema":"/modules/cluster-admin-provider/2015-10-13","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:cluster-admin-provider","conformance-type":"import"},{"name":"lockmanager-impl","revision":"2016-04-06","schema":"/modules/lockmanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:lockmanager:impl","conformance-type":"import"},{"name":"threadgroup","revision":"2013-11-07","schema":"/modules/threadgroup/2013-11-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netty:threadgroup","conformance-type":"import"},{"name":"netconf-northbound-tcp","revision":"2015-04-23","schema":"/modules/netconf-northbound-tcp/2015-04-23","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:tcp","conformance-type":"import"},{"name":"odl-netconf-cfg","revision":"2014-04-08","schema":"/modules/odl-netconf-cfg/2014-04-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf","conformance-type":"import"},{"name":"odl-netconfig-client-cfg","revision":"2014-04-08","schema":"/modules/odl-netconfig-client-cfg/2014-04-08","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:client:dispatcher","conformance-type":"import"},{"name":"opendaylight-port-statistics","revision":"2013-12-14","schema":"/modules/opendaylight-port-statistics/2013-12-14","namespace":"urn:opendaylight:port:statistics","conformance-type":"import"},{"name":"switch-features-notification","revision":"2016-08-19","schema":"/modules/switch-features-notification/2016-08-19","namespace":"urn:opendaylight:vendor:extension-switchfeatures:notification","conformance-type":"import"},{"name":"ted","revision":"2013-10-21","schema":"/modules/ted/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network:ted","conformance-type":"import"},{"name":"ietf-netconf-monitoring","revision":"2010-10-04","schema":"/modules/ietf-netconf-monitoring/2010-10-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring","conformance-type":"import"},{"name":"ietf-netconf-monitoring-extension","revision":"2013-12-10","schema":"/modules/ietf-netconf-monitoring-extension/2013-12-10","namespace":"urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring-extension","conformance-type":"import"},{"name":"data-export-import-spi","revision":"2016-08-16","schema":"/modules/data-export-import-spi/2016-08-16","namespace":"urn:opendaylight:daexim-spi","conformance-type":"import"},{"name":"opendaylight-md-sal-dom","revision":"2013-10-28","schema":"/modules/opendaylight-md-sal-dom/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom","conformance-type":"import"},{"name":"opendaylight-inmemory-datastore-provider","revision":"2014-06-17","schema":"/modules/opendaylight-inmemory-datastore-provider/2014-06-17","namespace":"urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider","conformance-type":"import"},{"name":"distributed-datastore-provider","revision":"2014-06-12","schema":"/modules/distributed-datastore-provider/2014-06-12","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider","conformance-type":"import"},{"name":"opendaylight-pingpong-broker","revision":"2014-11-07","schema":"/modules/opendaylight-pingpong-broker/2014-11-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:pingpong","conformance-type":"import"},{"name":"opendaylight-rest-connector","revision":"2014-07-24","schema":"/modules/opendaylight-rest-connector/2014-07-24","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector","conformance-type":"import"},{"name":"odl-sal-netconf-connector-cfg","revision":"2015-08-03","schema":"/modules/odl-sal-netconf-connector-cfg/2015-08-03","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf","conformance-type":"import"},{"name":"netconf-topology","revision":"2015-07-27","schema":"/modules/netconf-topology/2015-07-27","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:topology","conformance-type":"import"},{"name":"opendaylight-sal-binding-broker-impl","revision":"2013-10-28","schema":"/modules/opendaylight-sal-binding-broker-impl/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl","conformance-type":"import"},{"name":"sdncconfig-impl","revision":"2014-12-10","schema":"/modules/sdncconfig-impl/2014-12-10","namespace":"urn:opendaylight:params:xml:ns:yang:sdncconfig:impl","conformance-type":"import"},{"name":"experimenter-resync-provider","revision":"2016-07-13","schema":"/modules/experimenter-resync-provider/2016-07-13","namespace":"urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-resync-provider","conformance-type":"import"},{"name":"netconf-auth","revision":"2015-07-15","schema":"/modules/netconf-auth/2015-07-15","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:netconf:auth","conformance-type":"import"},{"name":"netconf-northbound-ssh","revision":"2015-01-14","schema":"/modules/netconf-northbound-ssh/2015-01-14","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:ssh","conformance-type":"import"},{"name":"aaa-authn-netconf-plugin","revision":"2015-07-15","schema":"/modules/aaa-authn-netconf-plugin/2015-07-15","namespace":"config:aaa:authn:netconf:plugin","conformance-type":"import"},{"name":"cloud-servicechain-api","revision":"2015-12-11","schema":"/modules/cloud-servicechain-api/2015-12-11","namespace":"urn:opendaylight:netvirt:cloud-servicechain:api","conformance-type":"import"},{"name":"network-topology","revision":"2013-10-21","schema":"/modules/network-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network-topology","conformance-type":"import"},{"name":"hwvtep","revision":"2015-09-01","schema":"/modules/hwvtep/2015-09-01","namespace":"urn:opendaylight:params:xml:ns:yang:ovsdb:hwvtep","conformance-type":"import"},{"name":"opendaylight-topology","revision":"2013-10-30","schema":"/modules/opendaylight-topology/2013-10-30","namespace":"urn:opendaylight:model:topology:general","conformance-type":"import"},{"name":"l3-unicast-igp-topology","revision":"2013-10-21","schema":"/modules/l3-unicast-igp-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:nt:l3-unicast-igp-topology","conformance-type":"import"},{"name":"isis-topology","revision":"2013-10-21","schema":"/modules/isis-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:network:isis-topology","conformance-type":"import"},{"name":"opendaylight-topology-view","revision":"2013-10-30","schema":"/modules/opendaylight-topology-view/2013-10-30","namespace":"urn:opendaylight:model:topology:view","conformance-type":"import"},{"name":"ospf-topology","revision":"2013-10-21","schema":"/modules/ospf-topology/2013-10-21","namespace":"urn:TBD:params:xml:ns:yang:ospf-topology","conformance-type":"import"},{"name":"opendaylight-topology-inventory","revision":"2013-10-30","schema":"/modules/opendaylight-topology-inventory/2013-10-30","namespace":"urn:opendaylight:model:topology:inventory","conformance-type":"import"},{"name":"resync-notification","revision":"2014-02-07","schema":"/modules/resync-notification/2014-02-07","namespace":"urn:ericsson:resync:rpcs:notification","conformance-type":"import"},{"name":"sal-experimenter-mp-message","revision":"2015-10-20","schema":"/modules/sal-experimenter-mp-message/2015-10-20","namespace":"urn:opendaylight:experimenter-mp-message:service","conformance-type":"import"},{"name":"netconf-node-inventory","revision":"2014-01-08","schema":"/modules/netconf-node-inventory/2014-01-08","namespace":"urn:opendaylight:netconf-node-inventory","conformance-type":"import"},{"name":"netconf-northbound-notification","revision":"2015-08-06","schema":"/modules/netconf-northbound-notification/2015-08-06","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification","conformance-type":"import"},{"name":"openflowjava-nx-api-config","revision":"2014-07-11","schema":"/modules/openflowjava-nx-api-config/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:api:config","conformance-type":"import"},{"name":"openflowjava-nx-config","revision":"2014-07-11","schema":"/modules/openflowjava-nx-config/2014-07-11","namespace":"urn:opendaylight:params:xml:ns:yang:openflowplugin:ofjava:nx:config","conformance-type":"import"},{"name":"flow-topology-discovery","revision":"2013-08-19","schema":"/modules/flow-topology-discovery/2013-08-19","namespace":"urn:opendaylight:flow:topology:discovery","conformance-type":"import"},{"name":"openflow-extensible-match","revision":"2015-02-25","schema":"/modules/openflow-extensible-match/2015-02-25","namespace":"urn:opendaylight:openflow:oxm","conformance-type":"import"},{"name":"experimenter-match-type","revision":"2014-03-06","schema":"/modules/experimenter-match-type/2014-03-06","namespace":"urn:experimenter:matchExp","conformance-type":"import"},{"name":"openflow-action","revision":"2015-02-03","schema":"/modules/openflow-action/2015-02-03","namespace":"urn:opendaylight:openflow:common:action","conformance-type":"import"},{"name":"openflow-instruction","revision":"2013-07-31","schema":"/modules/openflow-instruction/2013-07-31","namespace":"urn:opendaylight:openflow:common:instruction","conformance-type":"import"},{"name":"nicira-action","revision":"2014-04-21","schema":"/modules/nicira-action/2014-04-21","namespace":"urn:opendaylight:openflowjava:nx:action","conformance-type":"import"},{"name":"nicira-match","revision":"2014-04-21","schema":"/modules/nicira-match/2014-04-21","namespace":"urn:opendaylight:openflowjava:nx:match","conformance-type":"import"},{"name":"odl-mdsalutil","revision":"2016-04-06","schema":"/modules/odl-mdsalutil/2016-04-06","namespace":"urn:opendaylight:genius:mdsalutil","conformance-type":"import"},{"name":"resourcemanager-impl","revision":"2016-04-06","schema":"/modules/resourcemanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:resourcemanager:impl","conformance-type":"import"},{"name":"arputil-impl","revision":"2016-04-06","schema":"/modules/arputil-impl/2016-04-06","namespace":"urn:opendaylight:genius:arputil:impl","conformance-type":"import"},{"name":"resync-error-notification","revision":"2014-02-07","schema":"/modules/resync-error-notification/2014-02-07","namespace":"urn:ericsson:resync:error:notification","conformance-type":"import"},{"name":"sal-echo","revision":"2015-03-05","schema":"/modules/sal-echo/2015-03-05","namespace":"urn:opendaylight:echo:service","conformance-type":"import"},{"name":"remote-rpc-connector","revision":"2014-07-07","schema":"/modules/remote-rpc-connector/2014-07-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:remote-rpc-connector","conformance-type":"import"},{"name":"vpnservice-dhcp","revision":"2016-04-28","schema":"/modules/vpnservice-dhcp/2016-04-28","namespace":"urn:opendaylight:netvirt:dhcp","conformance-type":"import"},{"name":"opendaylight-ipv6-arbitrary-bitmask-fields","revision":"2016-02-24","schema":"/modules/opendaylight-ipv6-arbitrary-bitmask-fields/2016-02-24","namespace":"urn:opendaylight:opendaylight-ipv6-arbitrary-bitmask-fields","conformance-type":"import"},{"name":"opendaylight-match-types","revision":"2013-10-26","schema":"/modules/opendaylight-match-types/2013-10-26","namespace":"urn:opendaylight:model:match:types","conformance-type":"import"},{"name":"opendaylight-action-types","revision":"2013-11-12","schema":"/modules/opendaylight-action-types/2013-11-12","namespace":"urn:opendaylight:action:types","conformance-type":"import"},{"name":"experimenter-action-types","revision":"2014-02-28","schema":"/modules/experimenter-action-types/2014-02-28","namespace":"urn:ericsson:experimenter:action:types","conformance-type":"import"},{"name":"opendaylight-group-types","revision":"2013-10-18","schema":"/modules/opendaylight-group-types/2013-10-18","namespace":"urn:opendaylight:group:types","conformance-type":"import"},{"name":"sal-group","revision":"2013-09-18","schema":"/modules/sal-group/2013-09-18","namespace":"urn:opendaylight:group:service","conformance-type":"import"},{"name":"sal-groups-batch","revision":"2016-03-15","schema":"/modules/sal-groups-batch/2016-03-15","namespace":"urn:opendaylight:groups:service","conformance-type":"import"},{"name":"opendaylight-sal-dom-broker-impl","revision":"2013-10-28","schema":"/modules/opendaylight-sal-dom-broker-impl/2013-10-28","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl","conformance-type":"import"},{"name":"odl-concurrent-data-broker-cfg","revision":"2014-11-24","schema":"/modules/odl-concurrent-data-broker-cfg/2014-11-24","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:concurrent-data-broker","conformance-type":"import"},{"name":"mdsalutil-impl","revision":"2016-04-06","schema":"/modules/mdsalutil-impl/2016-04-06","namespace":"urn:opendaylight:genius:mdsalutil:impl","conformance-type":"import"},{"name":"ietf-network","revision":"2015-06-08","schema":"/modules/ietf-network/2015-06-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-network","conformance-type":"import"},{"name":"ietf-network-topology","revision":"2015-06-08","schema":"/modules/ietf-network-topology/2015-06-08","namespace":"urn:ietf:params:xml:ns:yang:ietf-network-topology","conformance-type":"import"},{"name":"sal-meters-batch","revision":"2016-03-16","schema":"/modules/sal-meters-batch/2016-03-16","namespace":"urn:opendaylight:meters:service","conformance-type":"import"},{"name":"sal-meter","revision":"2013-09-18","schema":"/modules/sal-meter/2013-09-18","namespace":"urn:opendaylight:meter:service","conformance-type":"import"},{"name":"resync-error-notification","revision":"2016-02-07","schema":"/modules/resync-error-notification/2016-02-07","namespace":"urn:opendaylight:vendor:extension:resync:error:notification","conformance-type":"import"},{"name":"neutron-qos","revision":"2016-06-13","schema":"/modules/neutron-qos/2016-06-13","namespace":"urn:opendaylight:neutron-qos","conformance-type":"import"},{"name":"netconf-node-topology","revision":"2015-01-14","schema":"/modules/netconf-node-topology/2015-01-14","namespace":"urn:opendaylight:netconf-node-topology","conformance-type":"import"},{"name":"neutronvpn","revision":"2015-06-02","schema":"/modules/neutronvpn/2015-06-02","namespace":"urn:opendaylight:netvirt:neutronvpn","conformance-type":"import"},{"name":"ietf-restconf-monitoring","revision":"2017-01-26","schema":"/modules/ietf-restconf-monitoring/2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"import"},{"name":"neutron-l2gateways","revision":"2015-07-12","schema":"/modules/neutron-l2gateways/2015-07-12","namespace":"urn:opendaylight:neutron-l2gateways","conformance-type":"import"},{"name":"opendaylight-flow-types","revision":"2013-10-26","schema":"/modules/opendaylight-flow-types/2013-10-26","namespace":"urn:opendaylight:flow:types","conformance-type":"import"},{"name":"fib-rpc","revision":"2016-01-21","schema":"/modules/fib-rpc/2016-01-21","namespace":"urn:opendaylight:netvirt:fib:rpc","conformance-type":"import"},{"name":"opendaylight-table-types","revision":"2013-10-26","schema":"/modules/opendaylight-table-types/2013-10-26","namespace":"urn:opendaylight:table:types","conformance-type":"import"},{"name":"experimenter-table-types","revision":"2014-03-06","schema":"/modules/experimenter-table-types/2014-03-06","namespace":"urn:ericsson:experimenter:table:types","conformance-type":"import"},{"name":"flow-node-inventory","revision":"2013-08-19","schema":"/modules/flow-node-inventory/2013-08-19","namespace":"urn:opendaylight:flow:inventory","conformance-type":"import"},{"name":"opendaylight-queue-statistics","revision":"2013-12-16","schema":"/modules/opendaylight-queue-statistics/2013-12-16","namespace":"urn:opendaylight:queue:statistics","conformance-type":"import"},{"name":"sal-flows-batch","revision":"2016-03-14","schema":"/modules/sal-flows-batch/2016-03-14","namespace":"urn:opendaylight:flows:service","conformance-type":"import"},{"name":"sal-table","revision":"2013-10-26","schema":"/modules/sal-table/2013-10-26","namespace":"urn:opendaylight:table:service","conformance-type":"import"},{"name":"packet-processing","revision":"2013-07-09","schema":"/modules/packet-processing/2013-07-09","namespace":"urn:opendaylight:packet:service","conformance-type":"import"},{"name":"experimenter-flow-types","revision":"2014-04-22","schema":"/modules/experimenter-flow-types/2014-04-22","namespace":"urn:ericsson:experimenter:flow:types","conformance-type":"import"},{"name":"sal-flat-batch","revision":"2016-03-21","schema":"/modules/sal-flat-batch/2016-03-21","namespace":"urn:opendaylight:flat-batch:service","conformance-type":"import"},{"name":"sal-flow","revision":"2013-08-19","schema":"/modules/sal-flow/2013-08-19","namespace":"urn:opendaylight:flow:service","conformance-type":"import"},{"name":"node-error","revision":"2014-04-10","schema":"/modules/node-error/2014-04-10","namespace":"urn:opendaylight:node:error:service","conformance-type":"import"},{"name":"opendaylight-group-statistics","revision":"2013-11-11","schema":"/modules/opendaylight-group-statistics/2013-11-11","namespace":"urn:opendaylight:group:statistics","conformance-type":"import"},{"name":"opendaylight-flow-table-statistics","revision":"2013-12-15","schema":"/modules/opendaylight-flow-table-statistics/2013-12-15","namespace":"urn:opendaylight:flow:table:statistics","conformance-type":"import"},{"name":"neutron-L3","revision":"2015-07-12","schema":"/modules/neutron-L3/2015-07-12","namespace":"urn:opendaylight:neutron-L3","conformance-type":"import"},{"name":"bgp","revision":"2013-07-15","schema":"/modules/bgp/2013-07-15","namespace":"urn:cisco:params:xml:ns:yang:bgp","conformance-type":"import"},{"name":"neutron-extensions","revision":"2016-06-17","schema":"/modules/neutron-extensions/2016-06-17","namespace":"urn:opendaylight:neutron-extensions","conformance-type":"import"},{"name":"neutron-constants","revision":"2015-07-12","schema":"/modules/neutron-constants/2015-07-12","namespace":"urn:opendaylight:neutron-constants","conformance-type":"import"},{"name":"neutron-fwaas","revision":"2015-07-12","schema":"/modules/neutron-fwaas/2015-07-12","namespace":"urn:opendaylight:neutron-fwaas","conformance-type":"import"},{"name":"neutron-ports","revision":"2015-07-12","schema":"/modules/neutron-ports/2015-07-12","namespace":"urn:opendaylight:neutron-ports","conformance-type":"import"},{"name":"neutron-metering","revision":"2015-07-12","schema":"/modules/neutron-metering/2015-07-12","namespace":"urn:opendaylight:neutron-metering","conformance-type":"import"},{"name":"neutron-sfc-flow-classifier","revision":"2016-05-11","schema":"/modules/neutron-sfc-flow-classifier/2016-05-11","namespace":"urn:opendaylight:neutron-sfc-flow-classifier","conformance-type":"import"},{"name":"neutron-lbaasv2","revision":"2015-07-12","schema":"/modules/neutron-lbaasv2/2015-07-12","namespace":"urn:opendaylight:neutron-lbaasv2","conformance-type":"import"},{"name":"neutron-secgroups","revision":"2015-07-12","schema":"/modules/neutron-secgroups/2015-07-12","namespace":"urn:opendaylight:neutron-secgroups","conformance-type":"import"},{"name":"idmanager-impl","revision":"2016-04-06","schema":"/modules/idmanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:idmanager:impl","conformance-type":"import"},{"name":"ietf-interfaces","revision":"2014-05-08","schema":"/modules/ietf-interfaces/2014-05-08","feature":["pre-provisioning","arbitrary-names","if-mib"],"namespace":"urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type":"import"},{"name":"l3vpn","revision":"2014-08-15","schema":"/modules/l3vpn/2014-08-15","namespace":"urn:huawei:params:xml:ns:yang:l3vpn","conformance-type":"import"},{"name":"ietf-packet-fields","revision":"2016-02-18","schema":"/modules/ietf-packet-fields/2016-02-18","namespace":"urn:ietf:params:xml:ns:yang:ietf-packet-fields","conformance-type":"import"},{"name":"elan","revision":"2015-06-02","schema":"/modules/elan/2015-06-02","namespace":"urn:opendaylight:netvirt:elan","conformance-type":"import"},{"name":"iana-if-type","revision":"2014-05-08","schema":"/modules/iana-if-type/2014-05-08","namespace":"urn:ietf:params:xml:ns:yang:iana-if-type","conformance-type":"import"},{"name":"odl-arputil","revision":"2016-04-06","schema":"/modules/odl-arputil/2016-04-06","namespace":"urn:opendaylight:genius:arputil","conformance-type":"import"},{"name":"etree","revision":"2016-06-14","schema":"/modules/etree/2016-06-14","namespace":"urn:opendaylight:netvirt:elan:etree","conformance-type":"import"},{"name":"ietf-access-control-list","revision":"2016-02-18","schema":"/modules/ietf-access-control-list/2016-02-18","namespace":"urn:ietf:params:xml:ns:yang:ietf-access-control-list","conformance-type":"import"},{"name":"aclservice","revision":"2016-06-08","schema":"/modules/aclservice/2016-06-08","namespace":"urn:opendaylight:netvirt:aclservice","conformance-type":"import"},{"name":"interface-statistics","revision":"2015-08-24","schema":"/modules/interface-statistics/2015-08-24","namespace":"urn:opendaylight:genius:interface:statistics","conformance-type":"import"},{"name":"cloud-service-chain-state","revision":"2017-05-11","schema":"/modules/cloud-service-chain-state/2017-05-11","namespace":"urn:opendaylight:netvirt:cloud-servicechain:state","conformance-type":"import"},{"name":"elan-statistics","revision":"2015-08-24","schema":"/modules/elan-statistics/2015-08-24","namespace":"urn:opendaylight:netvirt:elan:statistics","conformance-type":"import"},{"name":"odl-interface","revision":"2016-04-06","schema":"/modules/odl-interface/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager","conformance-type":"import"},{"name":"itm-config","revision":"2016-04-06","schema":"/modules/itm-config/2016-04-06","namespace":"urn:opendaylight:genius:itm:config","conformance-type":"import"},{"name":"itm","revision":"2016-04-06","schema":"/modules/itm/2016-04-06","namespace":"urn:opendaylight:genius:itm","conformance-type":"import"},{"name":"odl-l3vpn","revision":"2013-09-11","schema":"/modules/odl-l3vpn/2013-09-11","namespace":"urn:opendaylight:netvirt:l3vpn","conformance-type":"import"},{"name":"itm-state","revision":"2016-04-06","schema":"/modules/itm-state/2016-04-06","namespace":"urn:opendaylight:genius:itm:op","conformance-type":"import"},{"name":"odl-interface-rpc","revision":"2016-04-06","schema":"/modules/odl-interface-rpc/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:rpcs","conformance-type":"import"},{"name":"itm-rpc","revision":"2016-04-06","schema":"/modules/itm-rpc/2016-04-06","namespace":"urn:opendaylight:genius:itm:rpcs","conformance-type":"import"},{"name":"itm-impl","revision":"2016-04-06","schema":"/modules/itm-impl/2016-04-06","namespace":"urn:opendaylight:genius:itm:impl","conformance-type":"import"},{"name":"alivenessmonitor-impl","revision":"2016-04-06","schema":"/modules/alivenessmonitor-impl/2016-04-06","namespace":"urn:opendaylight:genius:alivenessmonitor:impl","conformance-type":"import"},{"name":"cluster-singleton-service-impl","revision":"2016-07-18","schema":"/modules/cluster-singleton-service-impl/2016-07-18","namespace":"urn:opendaylight:params:xml:ns:yang:md:sal:config:impl:cluster-singleton-service","conformance-type":"import"},{"name":"experimenter-switchfeatures-provider","revision":"2016-07-13","schema":"/modules/experimenter-switchfeatures-provider/2016-07-13","namespace":"urn:opendaylight:params:xml:ns:yang:config:openflow:experimenter-switchfeatures-provider","conformance-type":"import"},{"name":"opendaylight-entity-ownership-service","revision":"2015-08-10","schema":"/modules/opendaylight-entity-ownership-service/2015-08-10","namespace":"urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:entity-ownership-service","conformance-type":"import"},{"name":"interfacemanager-impl","revision":"2016-04-06","schema":"/modules/interfacemanager-impl/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:impl","conformance-type":"import"},{"name":"opendaylight-legacy-entity-ownership-service-provider","revision":"2016-02-26","schema":"/modules/opendaylight-legacy-entity-ownership-service-provider/2016-02-26","namespace":"urn:opendaylight:params:xml:ns:yang:controller:config:legacy-entity-ownership-service-provider","conformance-type":"import"},{"name":"openflow-provider-impl","revision":"2014-03-26","schema":"/modules/openflow-provider-impl/2014-03-26","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:common:config:impl","conformance-type":"import"},{"name":"overlay","revision":"2015-01-05","schema":"/modules/overlay/2015-01-05","namespace":"urn:opendaylight:params:xml:ns:yang:overlay","conformance-type":"import"},{"name":"ovsdb","revision":"2015-01-05","schema":"/modules/ovsdb/2015-01-05","namespace":"urn:opendaylight:params:xml:ns:yang:ovsdb","conformance-type":"import"},{"name":"odl-interface-meta","revision":"2016-04-06","schema":"/modules/odl-interface-meta/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:meta","conformance-type":"import"},{"name":"netconf-northbound-notification-impl","revision":"2015-08-07","schema":"/modules/netconf-northbound-notification-impl/2015-08-07","namespace":"urn:opendaylight:params:xml:ns:yang:controller:netconf:northbound:notification:impl","conformance-type":"import"},{"name":"neutron-subnets","revision":"2015-07-12","schema":"/modules/neutron-subnets/2015-07-12","namespace":"urn:opendaylight:neutron-subnets","conformance-type":"import"},{"name":"neutron","revision":"2015-07-12","schema":"/modules/neutron/2015-07-12","namespace":"urn:opendaylight:neutron","conformance-type":"import"},{"name":"neutron-portsecurity","revision":"2015-07-12","schema":"/modules/neutron-portsecurity/2015-07-12","namespace":"urn:opendaylight:neutron-portsecurity","conformance-type":"import"},{"name":"neutron-binding","revision":"2015-07-12","schema":"/modules/neutron-binding/2015-07-12","namespace":"urn:opendaylight:neutron-binding","conformance-type":"import"},{"name":"neutron-port-ext","revision":"2015-11-25","schema":"/modules/neutron-port-ext/2015-11-25","namespace":"urn:opendaylight:neutron-port-ext","conformance-type":"import"},{"name":"neutron-qos-ext","revision":"2016-06-13","schema":"/modules/neutron-qos-ext/2016-06-13","namespace":"urn:opendaylight:neutron-qos-ext","conformance-type":"import"},{"name":"neutron-provider-ext","revision":"2015-07-12","schema":"/modules/neutron-provider-ext/2015-07-12","namespace":"urn:opendaylight:neutron-provider-ext","conformance-type":"import"},{"name":"neutron-L3-ext","revision":"2015-07-12","schema":"/modules/neutron-L3-ext/2015-07-12","namespace":"urn:opendaylight:neutron-L3-ext","conformance-type":"import"},{"name":"subscribe-to-notification","revision":"2016-10-28","schema":"/modules/subscribe-to-notification/2016-10-28","namespace":"subscribe:to:notification","conformance-type":"import"},{"name":"instance-identifier-patch-module","revision":"2015-11-21","schema":"/modules/instance-identifier-patch-module/2015-11-21","namespace":"instance:identifier:patch:module","conformance-type":"import"},{"name":"openflow-configuration","revision":"2014-06-30","schema":"/modules/openflow-configuration/2014-06-30","namespace":"urn:opendaylight:openflow:config","conformance-type":"import"},{"name":"openflow-switch-connection-provider-impl","revision":"2014-03-28","schema":"/modules/openflow-switch-connection-provider-impl/2014-03-28","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:provider:impl","conformance-type":"import"},{"name":"openflow-switch-connection-config","revision":"2016-05-06","schema":"/modules/openflow-switch-connection-config/2016-05-06","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:switch:connection:config","conformance-type":"import"},{"name":"sal-role","revision":"2015-07-27","schema":"/modules/sal-role/2015-07-27","namespace":"urn:opendaylight:role:service","conformance-type":"import"},{"name":"opendaylight-flow-statistics","revision":"2013-08-19","schema":"/modules/opendaylight-flow-statistics/2013-08-19","namespace":"urn:opendaylight:flow:statistics","conformance-type":"import"},{"name":"opendaylight-direct-statistics","revision":"2016-05-11","schema":"/modules/opendaylight-direct-statistics/2016-05-11","namespace":"urn:opendaylight:direct:statistics","conformance-type":"import"},{"name":"openflowplugin-extension-general","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-general/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:general","conformance-type":"import"},{"name":"openflowplugin-extension-nicira-match","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-nicira-match/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:nicira:match","conformance-type":"import"},{"name":"openflowplugin-extension-nicira-action","revision":"2014-07-14","schema":"/modules/openflowplugin-extension-nicira-action/2014-07-14","namespace":"urn:opendaylight:openflowplugin:extension:nicira:action","conformance-type":"import"},{"name":"interface-service-bindings","revision":"2016-04-06","schema":"/modules/interface-service-bindings/2016-04-06","namespace":"urn:opendaylight:genius:interfacemanager:servicebinding","conformance-type":"import"},{"name":"openflow-protocol","revision":"2013-07-31","schema":"/modules/openflow-protocol/2013-07-31","namespace":"urn:opendaylight:openflow:protocol","conformance-type":"import"},{"name":"openflowjava-extension-resync","revision":"2016-07-13","schema":"/modules/openflowjava-extension-resync/2016-07-13","namespace":"urn:opendaylight:openflowjava:extension-resync","conformance-type":"import"},{"name":"openflow-resync","revision":"2014-02-06","schema":"/modules/openflow-resync/2014-02-06","namespace":"urn:opendaylight:openflow:resync","conformance-type":"import"},{"name":"opendaylight-switch-features-extension","revision":"2014-02-06","schema":"/modules/opendaylight-switch-features-extension/2014-02-06","namespace":"urn:opendaylight:switch-features:extension","conformance-type":"import"},{"name":"openflowjava-extension-switchfeatures","revision":"2016-07-13","schema":"/modules/openflowjava-extension-switchfeatures/2016-07-13","namespace":"urn:opendaylight:openflowjava:extension-switchfeatures","conformance-type":"import"},{"name":"openflow-augments","revision":"2015-02-25","schema":"/modules/openflow-augments/2015-02-25","namespace":"urn:opendaylight:openflow:augments","conformance-type":"import"},{"name":"openflow-approved-extensions","revision":"2016-08-02","schema":"/modules/openflow-approved-extensions/2016-08-02","namespace":"urn:opendaylight:openflow:approved:extensions","conformance-type":"import"},{"name":"experimenter-action","revision":"2014-03-06","schema":"/modules/experimenter-action/2014-03-06","namespace":"urn:ericsson:openflow:experimenter:action","conformance-type":"import"},{"name":"opendaylight-meter-statistics","revision":"2013-11-11","schema":"/modules/opendaylight-meter-statistics/2013-11-11","namespace":"urn:opendaylight:meter:statistics","conformance-type":"import"},{"name":"aaa-cert-rpc","revision":"2015-12-15","schema":"/modules/aaa-cert-rpc/2015-12-15","namespace":"urn:opendaylight:yang:aaa:cert:rpc","conformance-type":"import"},{"name":"openflow-provider","revision":"2015-03-31","schema":"/modules/openflow-provider/2015-03-31","namespace":"urn:opendaylight:params:xml:ns:yang:openflow:api","conformance-type":"import"},{"name":"openflow-plugin-provider-impl","revision":"2015-03-27","schema":"/modules/openflow-plugin-provider-impl/2015-03-27","namespace":"urn:opendaylight:params:xml:ns:yang:config:openflow:plugin:impl","conformance-type":"import"},{"name":"sal-experimenter-message","revision":"2015-10-20","schema":"/modules/sal-experimenter-message/2015-10-20","namespace":"urn:opendaylight:experimenter-message:service","conformance-type":"import"},{"name":"openflowplugin-extension-resync","revision":"2016-07-13","schema":"/modules/openflowplugin-extension-resync/2016-07-13","namespace":"urn:opendaylight:openflowplugin:extension:resync","conformance-type":"import"},{"name":"openflowplugin-extension-switchfeatures","revision":"2016-07-13","schema":"/modules/openflowplugin-extension-switchfeatures/2016-07-13","namespace":"urn:opendaylight:openflowplugin:extension:switchfeatures","conformance-type":"import"}],"module-set-id":"6"},"ietf-restconf-monitoring:restconf-state":{"capabilities":{"capability":["urn:ietf:params:restconf:capability:depth:1.0","urn:ietf:params:restconf:capability:fields:1.0","urn:ietf:params:restconf:capability:filter:1.0","urn:ietf:params:restconf:capability:replay:1.0","urn:ietf:params:restconf:capability:with-defaults:1.0"]}},"opendaylight-inventory:nodes":{},"aliveness-monitor:monitor-profiles":{"monitor-profile":[{"id":1,"failure-threshold":2,"monitor-interval":120000,"protocol-type":"arp","monitor-window":4}]},"lock-manager:locks":{}}
\ No newline at end of file
diff --git a/csit/libraries/backuprestore/testinput/patchAfter.json b/csit/libraries/backuprestore/testinput/patchAfter.json
new file mode 100644 (file)
index 0000000..8b1eafb
--- /dev/null
@@ -0,0 +1,3 @@
+[
+{"op":"remove","path":"/difference"}
+]
diff --git a/csit/libraries/backuprestore/testinput/patchBefore.json b/csit/libraries/backuprestore/testinput/patchBefore.json
new file mode 100644 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
diff --git a/csit/libraries/backuprestore/testinput/patchReference.json b/csit/libraries/backuprestore/testinput/patchReference.json
new file mode 100644 (file)
index 0000000..582dca5
--- /dev/null
@@ -0,0 +1,4 @@
+[
+{"op":"add","path":"/difference","value":"yes this is the difference"},
+{"op":"remove","path":"/difference"}
+]
diff --git a/csit/libraries/backuprestore/testinput/setTwoNames.json b/csit/libraries/backuprestore/testinput/setTwoNames.json
new file mode 100644 (file)
index 0000000..a4dae94
--- /dev/null
@@ -0,0 +1,11 @@
+{
+ "Name": "John",
+ "LastName1":
+   {
+     "lastName1":"ln1"
+   },
+  "LastName2":
+   {
+     "lastName2":"ln2"
+   }
+}
diff --git a/csit/libraries/backuprestore/testinput/setTwoNamesExtraAttrib.json b/csit/libraries/backuprestore/testinput/setTwoNamesExtraAttrib.json
new file mode 100644 (file)
index 0000000..e08ad91
--- /dev/null
@@ -0,0 +1,12 @@
+{
+ "Name": "John",
+ "LastName1":
+   {
+     "lastName1":"ln1"
+   },
+  "difference": "yes this is the difference",
+  "LastName2":
+   {
+     "lastName2":"ln2"
+   }
+}
diff --git a/csit/libraries/backuprestore/testinput/setTwoNamesReversed.json b/csit/libraries/backuprestore/testinput/setTwoNamesReversed.json
new file mode 100644 (file)
index 0000000..1b930a9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+ "Name": "John",
+ "LastName2":
+   {
+     "lastName2":"ln2"
+   },
+  "LastName1":
+   {
+     "lastName1":"ln1"
+   }
+}
diff --git a/csit/suites/backuprestore/br-basic/010__br_library_keywords.robot b/csit/suites/backuprestore/br-basic/010__br_library_keywords.robot
new file mode 100644 (file)
index 0000000..7e9df00
--- /dev/null
@@ -0,0 +1,50 @@
+*** Settings ***
+Documentation     Test suite for B&R support library itself
+Suite Setup       Run Keywords    Init Suite    ClusterManagement Setup
+Suite Teardown    Delete All Sessions
+Test Setup        Remove All Elements If Exist    ${SERVICE_FUNCTIONS_URI}
+Library           SSHLibrary
+Library           Collections
+Library           OperatingSystem
+Library           RequestsLibrary
+Resource          ../../../variables/Variables.robot
+Resource          ../../../libraries/Utils.robot
+Resource          ../../../libraries/TemplatedRequests.robot
+Resource          ../../../libraries/BackupRestoreKeywords.robot
+
+*** Test Cases ***
+ConditionalBackupRestoreCheck keyword
+    [Documentation]    Demostrates how the ConditionalBackupRestoreCheck keyword can be used together with the flag " -v BR_TESTING_ENABLED:false/true" in order to add backup-restore verification to existing testcases
+    Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
+    ConditionalBackupRestoreCheck
+    ${body}    OperatingSystem.Get File    ${SERVICE_FUNCTIONS_FILE}
+    ${jsonbody}    To Json    ${body}
+    ${functions}    Get From Dictionary    ${jsonbody}    service-functions
+    ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FUNCTIONS_URI}
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+    ${result}    To JSON    ${resp.content}
+    ${function}    Get From Dictionary    ${result}    service-functions
+    Lists Should be Equal    ${function}    ${functions}
+
+BackupRestoreCheck keyword
+    [Documentation]    Demostrates how the BackupRestoreCheck keyword can be used in order to create specific testcases performing backup-restore verification
+    ${body}    OperatingSystem.Get File    ${SERVICE_FUNCTIONS_FILE}
+    Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
+    Run Keyword And Expect Error    *    BackupRestoreCheck    exclusionsOperationalBefore=../variables/backuprestore/json_prefilter.conf
+    ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FUNCTIONS_URI}
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+    Remove All Elements At URI    ${SERVICE_FUNCTIONS_URI}
+    ${resp}    RequestsLibrary.Get Request    session    ${SERVICE_FUNCTIONS_URI}
+    Should Be Equal As Strings    ${resp.status_code}    404
+
+*** Keywords ***
+Init Suite
+    [Documentation]    Initialize session and ODL version specific variables
+    Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
+    log    ${ODL_STREAM}
+    Set Suite Variable    ${VERSION_DIR}    master
+    Set Suite Variable    ${SERVICE_FUNCTIONS_URI}    /restconf/config/service-function:service-functions/
+    Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-functions.json
+    Set Suite Variable    ${SF_DPI102100_URI}    /restconf/config/service-function:service-functions/service-function/dpi-102-100/
+    Set Suite Variable    ${SF_DPI102100_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sf_dpi_102_100.json
+    Set Suite Variable    ${SF_DPL101_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/sf_dpl_101.json
diff --git a/csit/suites/backuprestore/br-basic/020__br_sfc_tests.robot b/csit/suites/backuprestore/br-basic/020__br_sfc_tests.robot
new file mode 100644 (file)
index 0000000..2e8c1a5
--- /dev/null
@@ -0,0 +1,107 @@
+*** Settings ***
+Documentation     Test suite for SFC Service Functions, Operates functions from Restconf APIs.
+Suite Setup       Run Keywords    Init Suite    ClusterManagement Setup
+Suite Teardown    Delete All Sessions
+Library           SSHLibrary
+Library           Collections
+Library           OperatingSystem
+Library           RequestsLibrary
+Library           HttpLibrary.HTTP
+Resource          ../../../variables/Variables.robot
+Resource          ../../../libraries/Utils.robot
+Resource          ../../../libraries/TemplatedRequests.robot
+Resource          ../../../libraries/BackupRestoreKeywords.robot
+
+*** Test Cases ***
+Basic Environment Setup Tests
+    [Documentation]    Prepare Basic Test Environment
+    Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
+    Add Elements To URI From File    ${SERVICE_NODES_URI}    ${SERVICE_NODES_FILE}
+    Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
+    Add Elements To URI From File    ${SERVICE_CHAINS_URI}    ${SERVICE_CHAINS_FILE}
+    Add Elements To URI From File    ${SERVICE_FUNCTION_PATHS_URI}    ${SERVICE_FUNCTION_PATHS_FILE}
+
+Create and Get Rendered Service Path
+    [Documentation]    Create and Get Rendered Service Path Through RESTConf APIs
+    Post Elements To URI As JSON    ${OPERATIONS_CREATE_RSP_URI}    ${CREATE_RSP1_INPUT}
+    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_RSPS_URI}
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+    ${elements}=    Create List    SFC1-100-Path-1    "parent-service-function-path":"SFC1-100"    "hop-number":0    "service-index":255    "hop-number":1
+    ...    "service-index":254    "hop-number":2    "service-index":253
+    ConditionalBackupRestoreCheck
+    Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
+    Post Elements To URI As JSON    ${OPERATIONS_DELETE_RSP_URI}    ${DELETE_RSP1_INPUT}
+
+Create Get Rendered Service Path Failure
+    [Documentation]    Create and Get Rendered Service Path Through RESTConf APIs
+    Post Elements To URI As JSON    ${OPERATIONS_CREATE_RSP_URI}    ${CREATE_RSP1_INPUT}
+    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_RSPS_URI}
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+    ${elements}=    Create List    SFC1-100-Path-1    "parent-service-function-path":"SFC1-100"    "hop-number":0    "service-index":255    "hop-number":1
+    ...    "service-index":254    "hop-number":2    "service-index":253
+    ConditionalBackupRestoreCheck
+    Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
+    Post Elements To URI As JSON    ${OPERATIONS_DELETE_RSP_URI}    ${DELETE_RSP1_INPUT}
+
+Clean Datastore After Tests
+    [Documentation]    Clean All Items In Datastore After Tests
+    Remove All Elements If Exist    ${SERVICE_FUNCTIONS_URI}
+    Remove All Elements If Exist    ${SERVICE_FORWARDERS_URI}
+    Remove All Elements If Exist    ${SERVICE_NODES_URI}
+    Remove All Elements If Exist    ${SERVICE_CHAINS_URI}
+    Remove All Elements If Exist    ${SERVICE_FUNCTION_PATHS_URI}
+
+*** Keywords ***
+Post Elements To URI As JSON
+    [Arguments]    ${uri}    ${data}
+    ${resp}    RequestsLibrary.Post Request    session    ${uri}    data=${data}    headers=${headers}
+    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+
+Get JSON Elements From URI
+    [Arguments]    ${uri}
+    ${resp}    RequestsLibrary.Get Request    session    ${uri}
+    ${value}    To Json    ${resp.content}
+    [Return]    ${value}
+
+Init Suite
+    [Documentation]    Create session and initialize ODL version specific variables
+    Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
+    log    ${ODL_STREAM}
+    Set Suite Variable    ${VERSION_DIR}    master
+    Set Suite Variable    ${SERVICE_FUNCTIONS_URI}    /restconf/config/service-function:service-functions/
+    Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-functions.json
+    Set Suite Variable    ${SERVICE_FORWARDERS_URI}    /restconf/config/service-function-forwarder:service-function-forwarders/
+    Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-function-forwarders.json
+    Set Suite Variable    ${SERVICE_NODES_URI}    /restconf/config/service-node:service-nodes/
+    Set Suite Variable    ${SERVICE_NODES_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-nodes.json
+    Set Suite Variable    ${SERVICE_CHAINS_URI}    /restconf/config/service-function-chain:service-function-chains/
+    Set Suite Variable    ${SERVICE_CHAINS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-function-chains.json
+    Set Suite Variable    ${SERVICE_FUNCTION_PATHS_URI}    /restconf/config/service-function-path:service-function-paths/
+    Set Suite Variable    ${SERVICE_FUNCTION_PATHS_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-function-paths.json
+    Set Suite Variable    ${SERVICE_SCHED_TYPES_URI}    /restconf/config/service-function-scheduler-type:service-function-scheduler-types/
+    Set Suite Variable    ${SERVICE_SCHED_TYPE_URI_BASE}    ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:
+    Set Suite Variable    ${SERVICE_RANDOM_SCHED_TYPE_URI}    ${SERVICE_SCHED_TYPE_URI_BASE}random
+    Set Suite Variable    ${SERVICE_RANDOM_SCHED_TYPE_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-random-schedule-type.json
+    Set Suite Variable    ${SERVICE_ROUNDROBIN_SCHED_TYPE_URI}    ${SERVICE_SCHED_TYPE_URI_BASE}round-robin
+    Set Suite Variable    ${SERVICE_ROUNDROBIN_SCHED_TYPE_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-roundrobin-schedule-type.json
+    Set Suite Variable    ${SERVICE_LOADBALANCE_SCHED_TYPE_URI}    ${SERVICE_SCHED_TYPE_URI_BASE}load-balance
+    Set Suite Variable    ${SERVICE_LOADBALANCE_SCHED_TYPE_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-loadbalance-schedule-type.json
+    Set Suite Variable    ${SERVICE_SHORTESTPATH_SCHED_TYPE_URI}    ${SERVICE_SCHED_TYPE_URI_BASE}shortest-path
+    Set Suite Variable    ${SERVICE_SHORTESTPATH_SCHED_TYPE_FILE}    ${CURDIR}/../../../variables/sfc/${VERSION_DIR}/service-shortestpath-schedule-type.json
+    Set Suite Variable    ${RENDERED_SERVICE_PATHS_URI}    /restconf/config/rendered-service-path:rendered-service-paths/
+    Set Suite Variable    ${OPERATIONAL_RSPS_URI}    /restconf/operational/rendered-service-path:rendered-service-paths/
+    Set Suite Variable    ${OPERATIONS_CREATE_RSP_URI}    /restconf/operations/rendered-service-path:create-rendered-path/
+    Set Suite Variable    ${OPERATIONS_DELETE_RSP_URI}    /restconf/operations/rendered-service-path:delete-rendered-path
+    Set Suite Variable    ${CREATE_RSP1_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-1"}}
+    Set Suite Variable    ${CREATE_RSP2_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-2"}}
+    Set Suite Variable    ${CREATE_RSP3_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-3"}}
+    Set Suite Variable    ${CREATE_RSP4_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-4"}}
+    Set Suite Variable    ${CREATE_RSP5_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-5"}}
+    Set Suite Variable    ${CREATE_RSP6_INPUT}    {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-6"}}
+    Set Suite Variable    ${CREATE_RSP_FAILURE_INPUT}    {"input":{"parent-service-function-path":"SFC1-empty","name":"SFC1-empty-Path-1"}}
+    Set Suite Variable    ${DELETE_RSP1_INPUT}    {"input":{"name":"SFC1-100-Path-1"}}
+    Set Suite Variable    ${DELETE_RSP2_INPUT}    {"input":{"name":"SFC1-100-Path-2"}}
+    Set Suite Variable    ${DELETE_RSP3_INPUT}    {"input":{"name":"SFC1-100-Path-3"}}
+    Set Suite Variable    ${DELETE_RSP4_INPUT}    {"input":{"name":"SFC1-100-Path-4"}}
+    Set Suite Variable    ${DELETE_RSP5_INPUT}    {"input":{"name":"SFC1-100-Path-5"}}
+    Set Suite Variable    ${DELETE_RSP6_INPUT}    {"input":{"name":"SFC1-100-Path-6"}}
diff --git a/csit/variables/backuprestore/BackupRestoreVariables.robot b/csit/variables/backuprestore/BackupRestoreVariables.robot
new file mode 100644 (file)
index 0000000..da82d63
--- /dev/null
@@ -0,0 +1,9 @@
+*** Settings ***
+Documentation     Resource consisting purely of variable definitions useful for multiple project suites.
+
+*** Variables ***
+${EXP_DIR}        /tmp/Export
+${EXP_DATA_FILE}    odl_backup_config.json
+${EXP_OPER_FILE}    odl_backup_operational.json
+${RELATIVE_BEFORE_BACKUP_DIR}    beforeBackup
+${RELATIVE_AFTER_RESTORE_DIR}    afterRestore
diff --git a/csit/variables/backuprestore/json_prefilter.conf b/csit/variables/backuprestore/json_prefilter.conf
new file mode 100644 (file)
index 0000000..bc6e9c4
--- /dev/null
@@ -0,0 +1 @@
+$.ietf-yang-library:modules-state.module[?(@.name=='ietf-yang-types')]
diff --git a/csit/variables/backuprestore/json_prefilter_matching_basic.json b/csit/variables/backuprestore/json_prefilter_matching_basic.json
new file mode 100644 (file)
index 0000000..990f4c6
--- /dev/null
@@ -0,0 +1,3 @@
+# This example will remove an existing entry in the operational model
+
+$.ietf-yang-library:modules-state.module[@.name is 'sfc-of-renderer']