diff --git a/.gitbook/assets b/.gitbook/assets
deleted file mode 120000
index e4c5bd02..00000000
--- a/.gitbook/assets
+++ /dev/null
@@ -1 +0,0 @@
-../images/
\ No newline at end of file
diff --git a/images/gb-cover-final.png b/.gitbook/assets/gb-cover-final.png
similarity index 100%
rename from images/gb-cover-final.png
rename to .gitbook/assets/gb-cover-final.png
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 261eeb9e..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/README.md b/README.md
index 984c1ca2..9a5f64a4 100644
--- a/README.md
+++ b/README.md
@@ -1,42 +1,40 @@
---
-description: Get started with the Cisco Crosswork NSO documentation guides.
-icon: power-off
-cover: images/gb-cover-final.png
-coverY: -33.22891656662665
+description: Cisco-provided NED documentation.
+icon: paper-plane
+cover: .gitbook/assets/gb-cover-final.png
+coverY: -34.02798619447779
---
-# Start
+# Overview
-Use this page to navigate your way through the NSO documentation and access the resources most relevant to your role.
+**Cisco NSO (Network Services Orchestrator) NEDs (Network Element Drivers)** are software components that enable Cisco NSO to communicate with and configure network devices from different vendors using their native CLI, NETCONF, RESTCONF, or other proprietary interfaces.\
+NEDs translate the NSO service models into device-specific commands, allowing NSO to manage multi-vendor networks efficiently.
-## NSO Roles
+## NSO NED Administration
-An NSO deployment typically consists of the following roles:
+See the [NSO Administration Guide](https://cisco-tailf.gitbook.io/nso-docs/guides/administration/management/ned-administration) to learn about Cisco-provided NEDs and how to manage them.
-
| | | |
|---|
| Administrators | Personnel who deploy & manage an NSO deployment. | | |
| Operators | Personnel who use & operate an NSO deployment. | | |
| Developers | Personnel who develop NSO services, packages, & more. | | |
+## The NED `README.md` File
-## Learn NSO
+Each NED package comes with a `README.md` file that provides essential documentation and details, including:
-For users new to NSO or wanting to explore it further.
+1. **Overview of the NED**
+ * A brief introduction to the NED, including its supported device types and software versions.
+2. **Installation Instructions**
+ * Steps for installing and configuring the NED in Cisco NSO.
+3. **Supported Interfaces and Protocols**
+ * Specifies whether the NED supports CLI, NETCONF, RESTCONF, or other management protocols.
+4. **Feature Support List**
+ * Lists supported commands, configurations, and features for the device.
+5. **Limitations and Known Issues**
+ * Any constraints, unsupported features, or known bugs related to the NED.
+6. **Usage Instructions**
+ * Example commands, data models, and guidelines on how to interact with the NED.
+7. **Upgrade and Compatibility Information**
+ * Details on how to upgrade the NED and which Cisco NSO versions it is compatible with.
+8. **Licensing and Support Information**
+ * Guidelines on licensing requirements and where to get support.
-
+## Cisco NSO NED Changelog Explorer
-{% hint style="info" %}
-A more comprehensive list of learning resources and associated material is available on the [Learning Paths](https://nso-docs.cisco.com/learn-nso/learning-paths) page.
-{% endhint %}
-
-## Work with NSO
-
-For users working in a production-wide NSO deployment.
-
-### Administration
-
-
-
-### Operation and Usage
-
- | | | |
|---|
| CLI | Get started with the NSO CLI and base concepts. | #cli | |
| Web UI | Operate & interact with NSO using the Web UI. | #web-ui | |
| Operations | Perform different NSO operations. | #operations | |
-
-### Development
-
-
+The [NED Changelog Explorer](https://developer.cisco.com/docs/nso/ned-changelog-explorer/) allows you to quickly search for changes when upgrading to a specific NED version. This information is also available in the CHANGES file, packaged with each NSO NED release.
diff --git a/SUMMARY.md b/SUMMARY.md
index 736ea8f5..066585cf 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -1,200 +1,369 @@
# Table of contents
-* [Start](README.md)
-* [What's New](whats-new.md)
-
-## Administration
-
-* [Get Started](administration/get-started.md)
-* [Installation and Deployment](administration/installation-and-deployment/README.md)
- * [Local Install](administration/installation-and-deployment/local-install.md)
- * [System Install](administration/installation-and-deployment/system-install.md)
- * [Post-Install Actions](administration/installation-and-deployment/post-install-actions/README.md)
- * [Explore the Installation](administration/installation-and-deployment/post-install-actions/explore-the-installation.md)
- * [Start and Stop NSO](administration/installation-and-deployment/post-install-actions/start-stop-nso.md)
- * [Create NSO Instance](administration/installation-and-deployment/post-install-actions/create-nso-instance.md)
- * [Enable Development Mode](administration/installation-and-deployment/post-install-actions/enable-development-mode.md)
- * [Running NSO Examples](administration/installation-and-deployment/post-install-actions/running-nso-examples.md)
- * [Migrate to System Install](administration/installation-and-deployment/post-install-actions/migrate-to-system-install.md)
- * [Modify Examples for System Install](administration/installation-and-deployment/post-install-actions/modify-examples-for-system-install.md)
- * [Uninstall Local Install](administration/installation-and-deployment/post-install-actions/uninstall-local-install.md)
- * [Uninstall System Install](administration/installation-and-deployment/post-install-actions/uninstall-system-install.md)
- * [Containerized NSO](administration/installation-and-deployment/containerized-nso.md)
- * [Development to Production Deployment](administration/installation-and-deployment/development-to-production-deployment/README.md)
- * [Develop and Deploy a Nano Service](administration/installation-and-deployment/deployment/develop-and-deploy-a-nano-service.md)
- * [Secure Deployment](administration/installation-and-deployment/deployment/secure-deployment.md)
- * [Deployment Example](administration/installation-and-deployment/deployment/deployment-example.md)
- * [Upgrade NSO](administration/installation-and-deployment/upgrade-nso.md)
-* [Management](administration/management/README.md)
- * [System Management](administration/management/system-management/README.md)
- * [Cisco Smart Licensing](administration/management/system-management/cisco-smart-licensing.md)
- * [Log Messages and Formats](administration/management/system-management/log-messages-and-formats.md)
- * [Alarm Types](administration/management/system-management/alarms.md)
- * [Package Management](administration/management/package-mgmt.md)
- * [High Availability](administration/management/high-availability.md)
- * [AAA Infrastructure](administration/management/aaa-infrastructure.md)
- * [NED Administration](administration/management/ned-administration.md)
-* [Advanced Topics](administration/advanced-topics/README.md)
- * [Locks](administration/advanced-topics/locks.md)
- * [CDB Persistence](administration/advanced-topics/cdb-persistence.md)
- * [IPC Connection](administration/advanced-topics/ipc-connection.md)
- * [Cryptographic Keys](administration/advanced-topics/cryptographic-keys.md)
- * [Service Manager Restart](administration/advanced-topics/restart-strategies-for-service-manager.md)
- * [IPv6 on Northbound Interfaces](administration/advanced-topics/ipv6-on-northbound-interfaces.md)
- * [Layered Service Architecture](administration/advanced-topics/layered-service-architecture.md)
-
-## Operation & Usage
-
-* [Get Started](operation-and-usage/get-started.md)
-* [CLI](operation-and-usage/cli/README.md)
- * [Introduction to NSO CLI](operation-and-usage/cli/introduction-to-nso-cli.md)
- * [CLI Commands](operation-and-usage/cli/cli-commands.md)
-* [Web UI](operation-and-usage/webui/README.md)
- * [Home](operation-and-usage/webui/home.md)
- * [Devices](operation-and-usage/webui/devices.md)
- * [Services](operation-and-usage/webui/services.md)
- * [Config Editor](operation-and-usage/webui/config-editor.md)
- * [Tools](operation-and-usage/webui/tools.md)
-* [Operations](operation-and-usage/operations/README.md)
- * [Basic Operations](operation-and-usage/operations/basic-operations.md)
- * [NEDs and Adding Devices](operation-and-usage/operations/neds-and-adding-devices.md)
- * [Manage Network Services](operation-and-usage/operations/managing-network-services.md)
- * [Device Manager](operation-and-usage/operations/nso-device-manager.md)
- * [Out-of-band Interoperation](operation-and-usage/operations/out-of-band-interoperation.md)
- * [SSH Key Management](operation-and-usage/operations/ssh-key-management.md)
- * [Alarm Manager](operation-and-usage/operations/alarm-manager.md)
- * [Plug-and-Play Scripting](operation-and-usage/operations/plug-and-play-scripting.md)
- * [Compliance Reporting](operation-and-usage/operations/compliance-reporting.md)
- * [Listing Packages](operation-and-usage/operations/listing-packages.md)
- * [Lifecycle Operations](operation-and-usage/operations/lifecycle-operations.md)
- * [Network Simulator](operation-and-usage/operations/network-simulator-netsim.md)
-
-## Development
-
-* [Get Started](development/get-started.md)
-* [Introduction to Automation](development/introduction-to-automation/README.md)
- * [CDB and YANG](development/introduction-to-automation/cdb-and-yang.md)
- * [Basic Automation with Python](development/introduction-to-automation/basic-automation-with-python.md)
- * [Develop a Simple Service](development/introduction-to-automation/develop-a-simple-service.md)
- * [Applications in NSO](development/introduction-to-automation/applications-in-nso.md)
-* [Core Concepts](development/core-concepts/README.md)
- * [Services](development/core-concepts/services.md)
- * [Implementing Services](development/core-concepts/implementing-services.md)
- * [Templates](development/core-concepts/templates.md)
- * [Nano Services](development/core-concepts/nano-services.md)
- * [Packages](development/core-concepts/packages.md)
- * [Using CDB](development/core-concepts/using-cdb.md)
- * [YANG](development/core-concepts/yang.md)
- * [NSO Concurrency Model](development/core-concepts/nso-concurrency-model.md)
- * [Service Handling of Ambiguous Device Models](development/core-concepts/service-handling-of-ambiguous-device-models.md)
- * [NSO Virtual Machines](development/core-concepts/nso-virtual-machines/README.md)
- * [NSO Python VM](development/core-concepts/nso-virtual-machines/nso-python-vm.md)
- * [NSO Java VM](development/core-concepts/nso-virtual-machines/nso-java-vm.md)
- * [Embedded Erlang Applications](development/core-concepts/nso-virtual-machines/embedded-erlang-applications.md)
- * [API Overview](development/core-concepts/api-overview/README.md)
- * [Python API Overview](development/core-concepts/api-overview/python-api-overview.md)
- * [Java API Overview](development/core-concepts/api-overview/java-api-overview.md)
- * [Northbound APIs](development/core-concepts/northbound-apis/README.md)
- * [NSO NETCONF Server](development/core-concepts/northbound-apis/nso-netconf-server.md)
- * [RESTCONF API](development/core-concepts/northbound-apis/restconf-api.md)
- * [NSO SNMP Agent](development/core-concepts/northbound-apis/nso-snmp-agent.md)
-* [Advanced Development](development/advanced-development/README.md)
- * [Development Environment and Resources](development/advanced-development/development-environment-and-resources.md)
- * [Developing Services](development/advanced-development/developing-services/README.md)
- * [Services Deep Dive](development/advanced-development/developing-services/services-deep-dive.md)
- * [Service Development Using Java](development/advanced-development/developing-services/service-development-using-java.md)
- * [NSO Developer Studio](https://nso-docs.cisco.com/resources/platform-tools/nso-developer-studio)
- * [Developing Packages](development/advanced-development/developing-packages.md)
- * [Developing NEDs](development/advanced-development/developing-neds/README.md)
- * [NETCONF NED Development](development/advanced-development/developing-neds/netconf-ned-development.md)
- * [CLI NED Development](development/advanced-development/developing-neds/cli-ned-development.md)
- * [Generic NED Development](development/advanced-development/developing-neds/generic-ned-development.md)
- * [SNMP NED](development/advanced-development/developing-neds/snmp-ned.md)
- * [NED Upgrades and Migration](development/advanced-development/developing-neds/ned-upgrades-and-migration.md)
- * [Developing Alarm Applications](development/advanced-development/developing-alarm-applications.md)
- * [Kicker](development/advanced-development/kicker.md)
- * [Scaling and Performance Optimization](development/advanced-development/scaling-and-performance-optimization.md)
- * [Progress Trace](development/advanced-development/progress-trace.md)
- * [Web UI Development](development/advanced-development/web-ui-development/README.md)
- * [JSON-RPC API](development/advanced-development/web-ui-development/json-rpc-api.md)
-* [Connected Topics](development/connected-topics/README.md)
- * [SNMP Notification Receiver](development/connected-topics/snmp-notification-receiver.md)
- * [Web Server](development/connected-topics/web-server.md)
- * [Scheduler](development/connected-topics/scheduler.md)
- * [External Logging](development/connected-topics/external-logging.md)
- * [Encrypted Strings](development/connected-topics/encryption-keys.md)
-
-## Resources
-
-* [Manual Pages](resources/man/README.md)
- * [clispec](resources/man/clispec.5.md)
- * [confd\_lib](resources/man/confd_lib.3.md)
- * [confd\_lib\_cdb](resources/man/confd_lib_cdb.3.md)
- * [confd\_lib\_dp](resources/man/confd_lib_dp.3.md)
- * [confd\_lib\_events](resources/man/confd_lib_events.3.md)
- * [confd\_lib\_ha](resources/man/confd_lib_ha.3.md)
- * [confd\_lib\_lib](resources/man/confd_lib_lib.3.md)
- * [confd\_lib\_maapi](resources/man/confd_lib_maapi.3.md)
- * [confd\_types](resources/man/confd_types.3.md)
- * [mib\_annotations](resources/man/mib_annotations.5.md)
- * [ncs](resources/man/ncs.1.md)
- * [ncs-backup](resources/man/ncs-backup.1.md)
- * [ncs-collect-tech-report](resources/man/ncs-collect-tech-report.1.md)
- * [ncs-installer](resources/man/ncs-installer.1.md)
- * [ncs-maapi](resources/man/ncs-maapi.1.md)
- * [ncs-make-package](resources/man/ncs-make-package.1.md)
- * [ncs-netsim](resources/man/ncs-netsim.1.md)
- * [ncs-project](resources/man/ncs-project.1.md)
- * [ncs-project-create](resources/man/ncs-project-create.1.md)
- * [ncs-project-export](resources/man/ncs-project-export.1.md)
- * [ncs-project-git](resources/man/ncs-project-git.1.md)
- * [ncs-project-setup](resources/man/ncs-project-setup.1.md)
- * [ncs-project-update](resources/man/ncs-project-update.1.md)
- * [ncs-setup](resources/man/ncs-setup.1.md)
- * [ncs-uninstall](resources/man/ncs-uninstall.1.md)
- * [ncs.conf](resources/man/ncs.conf.5.md)
- * [ncs\_cli](resources/man/ncs_cli.1.md)
- * [ncs\_cmd](resources/man/ncs_cmd.1.md)
- * [ncs\_load](resources/man/ncs_load.1.md)
- * [ncsc](resources/man/ncsc.1.md)
- * [tailf\_yang\_cli\_extensions](resources/man/tailf_yang_cli_extensions.5.md)
- * [tailf\_yang\_extensions](resources/man/tailf_yang_extensions.5.md)
-
-## Developer Reference
-
-* [Python API Reference](developer-reference/pyapi/README.md)
- * [ncs Module](developer-reference/pyapi/ncs.md)
- * [ncs.alarm Module](developer-reference/pyapi/ncs.alarm.md)
- * [ncs.application Module](developer-reference/pyapi/ncs.application.md)
- * [ncs.cdb Module](developer-reference/pyapi/ncs.cdb.md)
- * [ncs.dp Module](developer-reference/pyapi/ncs.dp.md)
- * [ncs.experimental Module](developer-reference/pyapi/ncs.experimental.md)
- * [ncs.log Module](developer-reference/pyapi/ncs.log.md)
- * [ncs.maagic Module](developer-reference/pyapi/ncs.maagic.md)
- * [ncs.maapi Module](developer-reference/pyapi/ncs.maapi.md)
- * [ncs.progress Module](developer-reference/pyapi/ncs.progress.md)
- * [ncs.service\_log Module](developer-reference/pyapi/ncs.service_log.md)
- * [ncs.template Module](developer-reference/pyapi/ncs.template.md)
- * [ncs.util Module](developer-reference/pyapi/ncs.util.md)
- * [\_ncs Module](developer-reference/pyapi/_ncs.md)
- * [\_ncs.cdb Module](developer-reference/pyapi/_ncs.cdb.md)
- * [\_ncs.dp Module](developer-reference/pyapi/_ncs.dp.md)
- * [\_ncs.error Module](developer-reference/pyapi/_ncs.error.md)
- * [\_ncs.events Module](developer-reference/pyapi/_ncs.events.md)
- * [\_ncs.ha Module](developer-reference/pyapi/_ncs.ha.md)
- * [\_ncs.maapi Module](developer-reference/pyapi/_ncs.maapi.md)
-* [Java API Reference](developer-reference/java-api-reference.md)
-* [Erlang API Reference](developer-reference/erlang/README.md)
- * [econfd Module](developer-reference/erlang/econfd.md)
- * [econfd_cdb Module](developer-reference/erlang/econfd_cdb.md)
- * [econfd_ha Module](developer-reference/erlang/econfd_ha.md)
- * [econfd_logsyms Module](developer-reference/erlang/econfd_logsyms.md)
- * [econfd_maapi Module](developer-reference/erlang/econfd_maapi.md)
- * [econfd_notif Module](developer-reference/erlang/econfd_notif.md)
- * [econfd_schema Module](developer-reference/erlang/econfd_schema.md)
-* [RESTCONF API](developer-reference/restconf-api/README.md)
- * [Sample RESTCONF API Docs](https://developer.cisco.com/docs/nso/overview/)
-* [NETCONF Interface](developer-reference/netconf-interface.md)
-* [JSON-RPC API](developer-reference/json-rpc-api.md)
-* [SNMP Agent](developer-reference/snmp-agent.md)
-* [XPath](developer-reference/xpath.md)
+* [Overview](README.md)
+
+## Cisco-provided NEDs
+* a10-acos
+ * [README-ned-settings](a10-acos/README-ned-settings.md)
+ * [README v3.26 2025-11-12](a10-acos/README.md)
+
+* accedian-nid
+ * [README-ned-settings](accedian-nid/README-ned-settings.md)
+ * [README v4.6.1 2025-07-03](accedian-nid/README.md)
+
+* accedian-skylight_rc
+ * [README-ned-settings](accedian-skylight_rc/README-ned-settings.md)
+ * [README-rebuild](accedian-skylight_rc/README-rebuild.md)
+ * [README v3.0.4 2025-08-07](accedian-skylight_rc/README.md)
+
+* accedian-spp
+ * [README-ned-settings](accedian-spp/README-ned-settings.md)
+ * [README v1.7 2025-07-23](accedian-spp/README.md)
+
+* actelis-ead
+ * [README-ned-settings](actelis-ead/README-ned-settings.md)
+ * [README v1.0.8 2025-01-16](actelis-ead/README.md)
+
+* adtran-dpoe
+ * [README-ned-settings](adtran-dpoe/README-ned-settings.md)
+ * [README v1.0.2 2025-08-11](adtran-dpoe/README.md)
+
+* adva-825
+ * [README-ned-settings](adva-825/README-ned-settings.md)
+ * [README v4.1.22 2025-07-02](adva-825/README.md)
+
+* alu-isam
+ * [README-ned-settings](alu-isam/README-ned-settings.md)
+ * [README v1.5.2 2025-11-11](alu-isam/README.md)
+
+* alu-omniswitch-6k
+ * [README v2.5.7 2024-10-03](alu-omniswitch-6k/README.md)
+
+* alu-sr
+ * [README-ned-settings](alu-sr/README-ned-settings.md)
+ * [README v8.65.2 2025-11-11](alu-sr/README.md)
+
+* arista-dcs
+ * [README-ned-settings](arista-dcs/README-ned-settings.md)
+ * [README v5.30.7 2025-10-31](arista-dcs/README.md)
+
+* arris-cmts
+ * [README-ned-settings](arris-cmts/README-ned-settings.md)
+ * [README v1.10.11 2025-08-26](arris-cmts/README.md)
+
+* brocade-ironware
+ * [README-ned-settings](brocade-ironware/README-ned-settings.md)
+ * [README v4.2.4 2024-10-03](brocade-ironware/README.md)
+
+* casa-ccap
+ * [README-ned-settings](casa-ccap/README-ned-settings.md)
+ * [README v1.4.10 2024-09-24](casa-ccap/README.md)
+
+* ceragon-ip20
+ * [README-ned-settings](ceragon-ip20/README-ned-settings.md)
+ * [README v1.10.1 2025-10-02](ceragon-ip20/README.md)
+
+* checkpoint-gaiaos_rest
+ * [README-ned-settings](checkpoint-gaiaos_rest/README-ned-settings.md)
+ * [README v1.11.4 2025-04-04](checkpoint-gaiaos_rest/README.md)
+
+* ciena-acos
+ * [README-ned-settings](ciena-acos/README-ned-settings.md)
+ * [README v6.6.3 2025-06-05](ciena-acos/README.md)
+
+* ciena-mcp
+ * [README-ned-settings](ciena-mcp/README-ned-settings.md)
+ * [README.TSM](ciena-mcp/README.TSM.md)
+ * [README v1.9.22 2025-07-29](ciena-mcp/README.md)
+
+* ciena-saos_nc
+ * [README-ned-settings](ciena-saos_nc/README-ned-settings.md)
+ * [README-rebuild](ciena-saos_nc/README-rebuild.md)
+ * [README v1.1 2025-10-08](ciena-saos_nc/README.md)
+
+* cisco-aireos
+ * [README-ned-settings](cisco-aireos/README-ned-settings.md)
+ * [README v3.9.26 2025-08-15](cisco-aireos/README.md)
+
+* cisco-apicdc
+ * [README-ned-settings](cisco-apicdc/README-ned-settings.md)
+ * [README v3.21.3 2025-08-29](cisco-apicdc/README.md)
+
+* cisco-asa
+ * [README-ned-settings](cisco-asa/README-ned-settings.md)
+ * [README v6.18.29 2025-08-27](cisco-asa/README.md)
+
+* cisco-cnc_rc
+ * [README-ned-settings](cisco-cnc_rc/README-ned-settings.md)
+ * [README-rebuild](cisco-cnc_rc/README-rebuild.md)
+ * [README v1.0.10 2025-08-15](cisco-cnc_rc/README.md)
+
+* cisco-esa
+ * [README-ned-settings](cisco-esa/README-ned-settings.md)
+ * [README v2.0.12 2025-08-13](cisco-esa/README.md)
+
+* cisco-fmc
+ * [README-ned-settings](cisco-fmc/README-ned-settings.md)
+ * [README v1.7.3 2025-11-07](cisco-fmc/README.md)
+
+* cisco-ftd
+ * [README-ned-settings](cisco-ftd/README-ned-settings.md)
+ * [README v1.11.10 2024-10-21](cisco-ftd/README.md)
+
+* cisco-fxos
+ * [README-ned-settings](cisco-fxos/README-ned-settings.md)
+ * [README v1.1.13 2025-09-26](cisco-fxos/README.md)
+
+* cisco-ios
+ * [README-ned-settings](cisco-ios/README-ned-settings.md)
+ * [README v6.110.4 2025-11-04](cisco-ios/README.md)
+
+* cisco-iosxr
+ * [README-ned-settings](cisco-iosxr/README-ned-settings.md)
+ * [README v7.74.5 2025-11-11](cisco-iosxr/README.md)
+
+* cisco-iosxr_gnmi
+ * [README-ned-settings](cisco-iosxr_gnmi/README-ned-settings.md)
+ * [README-rebuild](cisco-iosxr_gnmi/README-rebuild.md)
+ * [README v1.1.12 2025-11-05](cisco-iosxr_gnmi/README.md)
+
+* cisco-iosxr_nc
+ * [README-ned-settings](cisco-iosxr_nc/README-ned-settings.md)
+ * [README-rebuild](cisco-iosxr_nc/README-rebuild.md)
+ * [README v1.1.1 2025-10-21](cisco-iosxr_nc/README.md)
+
+* cisco-iosxr_netconf
+ * [README v25.2.1 2025-06-30](cisco-iosxr_netconf/README.md)
+
+* cisco-ise
+ * [README-ned-settings](cisco-ise/README-ned-settings.md)
+ * [README v1.1.2 2024-08-29](cisco-ise/README.md)
+
+* cisco-nx
+ * [README-ned-settings](cisco-nx/README-ned-settings.md)
+ * [README v5.31 2025-10-28](cisco-nx/README.md)
+
+* cisco-sma
+ * [README-ned-settings](cisco-sma/README-ned-settings.md)
+ * [README v2.1.2 2025-08-13](cisco-sma/README.md)
+
+* cisco-staros
+ * [README-ned-settings](cisco-staros/README-ned-settings.md)
+ * [README v5.57.5 2025-11-07](cisco-staros/README.md)
+
+* citrix-netscaler
+ * [README-ned-settings](citrix-netscaler/README-ned-settings.md)
+ * [README v4.5.12 2025-02-21](citrix-netscaler/README.md)
+
+* eci-muse
+ * [README-ned-settings](eci-muse/README-ned-settings.md)
+ * [README v1.7.3 2025-11-04](eci-muse/README.md)
+
+* ericsson-efn324
+ * [README-ned-settings](ericsson-efn324/README-ned-settings.md)
+ * [README v2.1.7 2025-07-14](ericsson-efn324/README.md)
+
+* ericsson-enm
+ * [README-ned-settings](ericsson-enm/README-ned-settings.md)
+ * [README v1.1.1 2025-07-15](ericsson-enm/README.md)
+
+* ericsson-minilink6352
+ * [README-ned-settings](ericsson-minilink6352/README-ned-settings.md)
+ * [README v1.2.4 2025-03-19](ericsson-minilink6352/README.md)
+
+* ericsson-minilink6600
+ * [README-ned-settings](ericsson-minilink6600/README-ned-settings.md)
+ * [README v1.3.0 2025-03-25](ericsson-minilink6600/README.md)
+
+* etsi-sol003
+ * [README-ned-settings](etsi-sol003/README-ned-settings.md)
+ * [README v1.13.20 2025-04-07](etsi-sol003/README.md)
+
+* extreme-xos
+ * [README-ned-settings](extreme-xos/README-ned-settings.md)
+ * [README v1.5.5 2024-08-29](extreme-xos/README.md)
+
+* f5-bigip
+ * [README-ned-settings](f5-bigip/README-ned-settings.md)
+ * [README v3.24.5 2025-08-28](f5-bigip/README.md)
+
+* fireeye-cms
+ * [README-ned-settings](fireeye-cms/README-ned-settings.md)
+ * [README v1.0.6 2024-08-23](fireeye-cms/README.md)
+
+* fortinet-fmg
+ * [README-ned-settings](fortinet-fmg/README-ned-settings.md)
+ * [README v4.3.40 2025-10-31](fortinet-fmg/README.md)
+
+* fortinet-fortios
+ * [README-ned-settings](fortinet-fortios/README-ned-settings.md)
+ * [README v5.11.27 2025-11-07](fortinet-fortios/README.md)
+
+* furukawa-fx1
+ * [README-ned-settings](furukawa-fx1/README-ned-settings.md)
+ * [README v2.0.5 2025-08-22](furukawa-fx1/README.md)
+
+* hpe-ihss
+ * [README-ned-settings](hpe-ihss/README-ned-settings.md)
+ * [README v1.2.7.1 2024-09-02](hpe-ihss/README.md)
+
+* huawei-ias
+ * [README-ned-settings](huawei-ias/README-ned-settings.md)
+ * [README v2.9 2025-11-07](huawei-ias/README.md)
+
+* huawei-imanager
+ * [README-ned-settings](huawei-imanager/README-ned-settings.md)
+ * [README v1.3.15 2024-12-02](huawei-imanager/README.md)
+
+* huawei-imanagertl1
+ * [README-ned-settings](huawei-imanagertl1/README-ned-settings.md)
+ * [README v1.7.10 2024-10-03](huawei-imanagertl1/README.md)
+
+* huawei-nce
+ * [README-ned-settings](huawei-nce/README-ned-settings.md)
+ * [README v1.0.28 2025-10-02](huawei-nce/README.md)
+
+* huawei-vrp
+ * [README-ned-settings](huawei-vrp/README-ned-settings.md)
+ * [README v6.81.1 2025-11-12](huawei-vrp/README.md)
+
+* huawei-vrp_nc
+ * [README-ned-settings](huawei-vrp_nc/README-ned-settings.md)
+ * [README-rebuild](huawei-vrp_nc/README-rebuild.md)
+ * [README v1.2 2025-10-08](huawei-vrp_nc/README.md)
+
+* infoblox-nios
+ * [README-ned-settings](infoblox-nios/README-ned-settings.md)
+ * [README v4.0.11 2024-10-01](infoblox-nios/README.md)
+
+* juniper-junos
+ * [README v4.18.27 2025-11-06](juniper-junos/README.md)
+
+* juniper-junos_nc
+ * [README-ned-settings](juniper-junos_nc/README-ned-settings.md)
+ * [README-rebuild](juniper-junos_nc/README-rebuild.md)
+ * [README v1.1.27 2025-11-04](juniper-junos_nc/README.md)
+
+* mrv-masteros
+ * [README-ned-settings](mrv-masteros/README-ned-settings.md)
+ * [README v3.8.19 2025-07-08](mrv-masteros/README.md)
+
+* nec-ipasolink-vr
+ * [README-ned-settings](nec-ipasolink-vr/README-ned-settings.md)
+ * [README v1.0.0 2025-02-03](nec-ipasolink-vr/README.md)
+
+* nokia-apc
+ * [README-ned-settings](nokia-apc/README-ned-settings.md)
+ * [README v1.0.10 2024-10-02](nokia-apc/README.md)
+
+* nokia-srlinux_gnmi
+ * [README-ned-settings](nokia-srlinux_gnmi/README-ned-settings.md)
+ * [README-rebuild](nokia-srlinux_gnmi/README-rebuild.md)
+ * [README v1.2.15 2025-08-15](nokia-srlinux_gnmi/README.md)
+
+* nokia-sros_nc
+ * [README-ned-settings](nokia-sros_nc/README-ned-settings.md)
+ * [README-rebuild](nokia-sros_nc/README-rebuild.md)
+ * [README v1.0.29 2025-11-05](nokia-sros_nc/README.md)
+
+* oneaccess-oneos
+ * [README-ned-settings](oneaccess-oneos/README-ned-settings.md)
+ * [README v3.4.11 2025-06-12](oneaccess-oneos/README.md)
+
+* onf-tapi_rc
+ * [README-ned-settings](onf-tapi_rc/README-ned-settings.md)
+ * [README-rebuild](onf-tapi_rc/README-rebuild.md)
+ * [README v2.0.51 2025-11-05](onf-tapi_rc/README.md)
+
+* openstack-cos
+ * [README-ned-settings](openstack-cos/README-ned-settings.md)
+ * [README v4.2.35 2025-05-09](openstack-cos/README.md)
+
+* overture-1400
+ * [README-ned-settings](overture-1400/README-ned-settings.md)
+ * [README v4.1.6 2025-06-05](overture-1400/README.md)
+
+* paloalto-panos_cli
+ * [README-ned-settings](paloalto-panos_cli/README-ned-settings.md)
+ * [README v4.11.17 2025-09-25](paloalto-panos_cli/README.md)
+
+* pica8-picos
+ * [README-ned-settings](pica8-picos/README-ned-settings.md)
+ * [README v1.4.10 2025-03-07](pica8-picos/README.md)
+
+* proxmox-ve
+ * [README-ned-settings](proxmox-ve/README-ned-settings.md)
+ * [README v1.0.5 2024-08-29](proxmox-ve/README.md)
+
+* quagga-bgp
+ * [README-ned-settings](quagga-bgp/README-ned-settings.md)
+ * [README v4.2.15 2025-09-01](quagga-bgp/README.md)
+
+* rad-vx
+ * [README-ned-settings](rad-vx/README-ned-settings.md)
+ * [README v1.18.16 2025-01-24](rad-vx/README.md)
+
+* radware-cc
+ * [README v1.0.0.1 2025-09-26](radware-cc/README.md)
+
+* redback-se
+ * [README-ned-settings](redback-se/README-ned-settings.md)
+ * [README v1.6 2025-10-22](redback-se/README.md)
+
+* redhat-ansible
+ * [README-ned-settings](redhat-ansible/README-ned-settings.md)
+ * [README v1.0.13 2024-09-06](redhat-ansible/README.md)
+
+* redhat-dir389
+ * [README-ned-settings](redhat-dir389/README-ned-settings.md)
+ * [README v1.2.6 2025-01-07](redhat-dir389/README.md)
+
+* riverbed-steelhead
+ * [README-ned-settings](riverbed-steelhead/README-ned-settings.md)
+ * [README v4.0.4.1 2025-09-25](riverbed-steelhead/README.md)
+
+* sfr-nbe300
+ * [README-ned-settings](sfr-nbe300/README-ned-settings.md)
+ * [README v2.2.4 2025-03-07](sfr-nbe300/README.md)
+
+* siae-smdc_rc
+ * [README-ned-settings](siae-smdc_rc/README-ned-settings.md)
+ * [README-rebuild](siae-smdc_rc/README-rebuild.md)
+ * [README v1.0.16 2025-07-02](siae-smdc_rc/README.md)
+
+* tejas-nms5500
+ * [README-ned-settings](tejas-nms5500/README-ned-settings.md)
+ * [README v1.0.7 2024-08-29](tejas-nms5500/README.md)
+
+* tilgin-tgem
+ * [README-ned-settings](tilgin-tgem/README-ned-settings.md)
+ * [README v1.0.1 2025-04-17](tilgin-tgem/README.md)
+
+* unix-bind
+ * [README-ned-settings](unix-bind/README-ned-settings.md)
+ * [README v2.2.1 2025-07-08](unix-bind/README.md)
+
+* vecima-eac
+ * [README-ned-settings](vecima-eac/README-ned-settings.md)
+ * [README v1.0.2 2025-01-07](vecima-eac/README.md)
+
+* vecima-rpd
+ * [README-ned-settings](vecima-rpd/README-ned-settings.md)
+ * [README v1.0.2 2025-10-14](vecima-rpd/README.md)
+
+* viptela-vmanage
+ * [README-ned-settings](viptela-vmanage/README-ned-settings.md)
+ * [README v1.6.28 2025-09-03](viptela-vmanage/README.md)
+
+* vmware-vsphere
+ * [README-ned-settings](vmware-vsphere/README-ned-settings.md)
+ * [README v3.3.18 2025-03-03](vmware-vsphere/README.md)
+
+* zte-xpon
+ * [README-ned-settings](zte-xpon/README-ned-settings.md)
+ * [README v4.4.5 2025-11-07](zte-xpon/README.md)
+
+* zte-zxros
+ * [README-ned-settings](zte-zxros/README-ned-settings.md)
+ * [README v1.2.6 2025-07-07](zte-zxros/README.md)
+
diff --git a/a10-acos/README-ned-settings.md b/a10-acos/README-ned-settings.md
new file mode 100644
index 00000000..2dbb5444
--- /dev/null
+++ b/a10-acos/README-ned-settings.md
@@ -0,0 +1,397 @@
+# NED settings details
+----------------------
+
+ This NED is equipped with a number of runtime configuration options "NED settings" allowing for
+ customization by the end user. All options are configurable using the NSO API for NED settings.
+ Most NED settings can be configured globally, per device profile or per device instance in the
+ following locations:
+
+ global
+ /ncs:devices/global-settings/ned-settings/a10-acos/
+ profile
+ /ncs:devices/ncs:profiles/profile:/ned-settings/a10-acos/
+ device
+ /ncs:/device/devices/device:/ned-settings/a10-acos/
+
+ Profiles setting overrides global-settings and device settings override profile settings,
+ hence the narrowest scope of the setting is used by the device.
+
+ If user changes a ned-setting, then user must reconnect to the device, i.e.
+ disconnect and connect in order for the new setting to take effect.
+
+ From the NSO CLI the device instance NED settings for this NED are available under:
+
+ ```
+ # config
+ # devices device dev-1 ned-settings a10-acos
+
+ Press TAB to see all the NED settings.
+
+ ```
+
+
+# Table of contents
+-------------------
+
+ ```
+ 1. ned-settings a10-acos
+ 2. a10-connection-settings
+ 3. live-status
+ 4. connection
+ 5. proxy
+ 6. developer
+ 7. rpc-actions
+ 7.1. expect-patterns
+ 8. dynamic-errors
+ 9. logger
+ 10. transaction
+ ```
+
+
+# 1. ned-settings a10-acos
+--------------------------
+
+ a10-acos device specific NED settings.
+
+
+ - a10-acos aflex-scripts-support (default disabled)
+
+ Enable this ned-settings in order to fetch and manage (create/update/delete) aFlex scripts. By
+ default, this feature is disabled.
+
+ enabled - enabled.
+
+ disabled - disabled.
+
+
+ - a10-acos trans-id-method (default config-hash)
+
+ Configure how the NED shall calculate the transaction id. Typically used after each commit and
+ for check-sync operations.
+
+ config-hash - Use a snapshot of the running config for calculation.(default).
+
+ last-modified-timestamp - Use the 'time last modified' time stamp generated by the device for
+ calculation. Note, this time stamp is not available on all devices.
+ See README.
+
+ last-saved-timestamp - Use the 'time last saved' time stamp generated by the device for
+ calculation. Note, this method is not reliable. See README.
+
+
+ - a10-acos a10-active-partition
+
+ Active partition.
+
+
+ - a10-acos a10-abort-when-config-session-exist (default false)
+
+ Active partition.
+
+
+ - a10-acos a10-write-memory-all-partitions (default true)
+
+ Set to true if the device supports write memory all-partitions.
+
+
+ - a10-acos extended-parser (default auto)
+
+ Make the a10-acos NED handle CLI parsing (i.e. transform the running-config from the device to
+ the model based config tree).
+
+ disabled - Load configuration the standard way.
+
+ robust-mode - The configuration dump is run through a pre-parser which is cleaning it
+ from all elements currently not supported in the YANG model (default).
+
+ turbo-mode - The NED executes the whole command parsing by itself, completely bypassing
+ the NSO CLI parser. The configuration dump is transferred to NSO using a
+ Maapi SetValues() call.
+
+ turbo-xml-mode - The NED executes the whole command parsing by itself, completely bypassing
+ the NSO CLI parser. The configuration dump is transferred to NSO in XML
+ format.
+
+ old-robust-mode - Makes the NED alter the config dump such that all mode switches are always
+ done from top and down instead of from below and up (with the 'exit'
+ command) before given to the NCS/NSO parser.
+The number of lines in the
+ config dump will increase a lot with this feature enabled. (default).
+
+ auto - Uses turbo-mode when available, will use fastest availablemethod to load
+ data to NSO. If NSO doesn't support data-loading from CLI NED, robust-mode
+ is used.
+
+
+ - a10-acos partial-show-method (default full-config)
+
+ Configure partial show method execution.
+
+ full-config - Fetch full configuration from the device and filter the config. This method
+ should be used for devices not supporting partial show commands, eg show
+ running-config access-list 100.
+
+ partial-config - Sends partial show commands to the device to fetch onlythe needed part of
+ the config.
+
+
+ - a10-acos shared-partition-mode (default in-config)
+
+ Set the shared partition location: directly under config or under partition-config.
+
+ in-partition-config - Shared partition placed under partition-config.
+
+ in-config - Shared partition directly under root config.
+
+
+# 2. ned-settings a10-acos a10-connection-settings
+--------------------------------------------------
+
+ Configure settings specific to the connection between NED and device.
+
+
+ - a10-connection-settings device-output-delay (default 0)
+
+ Delay in milliseconds after each config command output to the device.
+
+
+# 3. ned-settings a10-acos live-status
+--------------------------------------
+
+ Configure NED settings related to live-status.
+
+
+ - live-status time-to-live (default 50)
+
+ Define time-to-live for data fetched from the device via live-status.(default 50).
+
+
+# 4. ned-settings a10-acos connection
+-------------------------------------
+
+ Connection configuration.
+
+
+ - connection ssh client (default ganymed)
+
+ Configure the SSH client to use. Relevant only when using the NED with NSO 5.6 or later.
+
+ ganymed - The legacy SSH client. Used on all older versions of NSO.
+
+ sshj - The new SSH client with support for the latest crypto features. This is the default
+ when using the NED on NSO 5.6 or later.
+
+
+ - connection ssh host-key known-hosts-file
+
+ Path to openssh formatted 'known_hosts' file containing valid host keys.
+
+
+ - connection ssh host-key public-key-file
+
+ Path to openssh formatted public (.pub) host key file.
+
+
+ - connection ssh auth-key private-key-file
+
+ Path to openssh formatted private key file.
+
+
+ - connection number-of-retries (default 0)
+
+ Configure max number of extra retries the NED will try to connect to the device before giving
+ up. Default 0.
+
+
+ - connection time-between-retry (default 1)
+
+ Configure the time in seconds the NED will wait between each connect retry. Default 1s.
+
+
+ - connection send-login-newline (default false)
+
+
+# 5. ned-settings a10-acos proxy
+--------------------------------
+
+ Configure NED to access device via a proxy.
+
+
+ - proxy remote-connection
+
+ Connection type between proxy and device.
+
+ ssh - ssh.
+
+ telnet - telnet.
+
+ serial - serial.
+
+
+ - proxy remote-address
+
+ Address of host behind the proxy.
+
+
+ - proxy remote-port
+
+ Port of host behind the proxy.
+
+
+ - proxy remote-name
+
+ User name on the device behind the proxy.
+
+
+ - proxy remote-password
+
+ Password on the device behind the proxy.
+
+
+ - proxy remote-secondary-password
+
+ Password on the device behind the proxy.
+
+
+ - proxy proxy-prompt
+
+ Prompt pattern on the proxy host.
+
+
+ - proxy remote-ssh-args
+
+ Additional arguments used to establish proxy connection.
+
+
+# 6. ned-settings a10-acos developer
+------------------------------------
+
+ Contains settings used by the NED developers.
+
+
+ - developer load-from-file
+
+ Make the NED load a file containing raw device config when doing sync-from. Does only work on
+ NETSIM targets.
+
+
+ - developer load-native-config allow-delete (default false)
+
+ Enable this setting to be able to handle limited delete operations with 'load-native-config'.
+ Please note that not all syntax available on a real device works, some delete operations can
+ not be parsed by the NED. Use the 'verbose' flag to 'load-native-config' to see if delete
+ commands can be parsed. Currently this is only supported when 'extended-parser' is set to
+ 'turbo-xml-mode'.
+
+
+ - developer load-native-config delete-with-remove (default false)
+
+ Enable this setting to use 'remove' instead of 'delete' when sending delete operations to NSO.
+ This is useful when doing delete commands for data that might not be present in CDB. Please
+ note that deletes for missing data will still be part of transaction, and will be sent to
+ device. Use with care, and do proper testing to understand behaviour.
+
+
+ - developer trace-connection (default false)
+
+ Enable developer connection tracing. WARNING: may choke NSO with large printouts.
+
+
+ - developer platform model
+
+ Override device model name/number.
+
+
+ - developer platform name
+
+ Override device name.
+
+
+ - developer platform version
+
+ Override device version.
+
+
+# 7. ned-settings a10-acos rpc-actions
+--------------------------------------
+
+ RPC actions related configurations.
+
+
+## 7.1. ned-settings a10-acos rpc-actions expect-patterns
+---------------------------------------------------------
+
+ List of expected patterns and prompts when executing commands. It can be used to define custom
+ expected patterns, for example to wait for a number of characters (eg .....) in order to implement
+ an automatic time-out reset mechanism. NOTE: the patterns represent regular expressions.
+
+ - rpc-actions expect-patterns
+
+ - pattern
+
+
+# 8. ned-settings a10-acos dynamic-errors
+-----------------------------------------
+
+ List of device errors. The NED will throw error when it encounter a message from this list.
+
+ - a10-acos dynamic-errors
+
+ - error
+
+
+# 9. ned-settings a10-acos logger
+---------------------------------
+
+ Settings for controlling logs generated.
+
+
+ - logger level (default info)
+
+ Set level of logging.
+
+ error - error.
+
+ info - info.
+
+ verbose - verbose.
+
+ debug - debug.
+
+
+ - logger java (default true)
+
+ Toggle logs to be added to ncs-java-vm.log.
+
+
+# 10. ned-settings a10-acos transaction
+---------------------------------------
+
+
+ - transaction cleartext-provisioning (default enabled)
+
+ Enable this to allow for cleartext key/passwords provisioning without going out-of-sync(i.e.
+ where device obfuscates/encrypts value in running-config).
+
+ enabled - enabled.
+
+ disabled - disabled.
+
+
+ - transaction cleartext-stored-encrypted (default disabled)
+
+ When 'cleartext-provisioning' is enabled, enable this setting to enforce keys/passwords CDB
+ storedvalues to be encrypted using NSO's built in encryption types (e.g.
+ 'tailf:aes-cfb-128-encrypted-string').NOTE: the type of the values in the yang-model of alu-sr
+ is NOT the encrypted type by default, it is still plain 'string'. However, the service
+ template/code used to set the values must use an encrypted type.The NED can be instructed to
+ use tailf:aes-cfb-128-encrypted-string for passwords by default and hence to do
+ auto-encryption of the passwords, but this requires to recompile the NED with
+ NEDCOM_SECRET_TYPE flag set (eg 'make NEDCOM_SECRET_TYPE="tailf:aes-cfb-128-encrypted-string"
+ clean all').
+
+ enabled - enabled.
+
+ disabled - disabled.
+
+
diff --git a/a10-acos/README.md b/a10-acos/README.md
new file mode 100644
index 00000000..80e138b6
--- /dev/null
+++ b/a10-acos/README.md
@@ -0,0 +1,1109 @@
+# Table of contents
+-------------------
+
+ ```
+ 1. General
+ 1.1 Extract the NED package
+ 1.2 Install the NED package
+ 1.2.1 Local install
+ 1.2.2 System install
+ 1.3 Configure the NED in NSO
+ 2. Optional debug and trace setup
+ 3. Dependencies
+ 4. Sample device configuration
+ 5. Built in live-status actions
+ 6. Built in live-status show
+ 7. Limitations
+ 8. How to report NED issues and feature requests
+ 9. How to rebuild a NED
+ 10. Configure the NED to use ssh multi factor authentication
+ 11. Aflex scripts
+ 12. NED Secrets - Securing your Secrets
+ ```
+
+
+# 1. General
+------------
+
+ This document describes the a10-acos NED.
+
+ Additional README files bundled with this NED package
+ ```
+ +---------------------------+------------------------------------------------------------------------------+
+ | Name | Info |
+ +---------------------------+------------------------------------------------------------------------------+
+ | README-ned-settings.md | Information about all run time settings supported by this NED. |
+ +---------------------------+------------------------------------------------------------------------------+
+ ```
+
+ Common NED Features
+ ```
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | Feature | Supported | Info |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | netsim | yes | Default emulated device: AX Series Advanced Traffic Manager |
+ | | | v2.6.1-GR1 |
+ | | | |
+ | check-sync | yes | check-sing using trans-id |
+ | | | |
+ | partial-sync-from | yes | This feature is supported by filtering the needed config from a |
+ | | | full show (device does not support partial show) |
+ | | | |
+ | live-status actions | yes | Supports most of the device needed actions |
+ | | | |
+ | live-status show | no | The NED does not implement TTL-based data |
+ | | | |
+ | load-native-config | no | |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ ```
+ Custom NED Features
+ ```
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | Feature | Supported | Info |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | device partitions | yes | The NED supports device partitions by using config active- |
+ | | | partition list |
+ | | | |
+ | ned-secrets | yes | NED supports device-enctypted password caching. Please check |
+ | | | README.md |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ ```
+
+ Verified target systems
+ ```
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ | Model | Version | OS | Info |
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ | Thunder Series TH3030S | 2.7.1-GR1 | ACOS | Hardware device |
+ | (th3030s-1) | | | |
+ | | | | |
+ | Thunder Series TH3030S | 2.7.2-P7-SP3 | ACOS | Hardware device |
+ | (th3030s-2) | | | |
+ | | | | |
+ | Thunder Series Unified | 5.2.0 | ACOS | Virtual device |
+ | Application Service | | | |
+ | Gateway vThunder | | | |
+ | (vThunder-1) | | | |
+ | | | | |
+ | Thunder Series Unified | 5.2.0 | ACOS | Virtual device |
+ | Application Service | | | |
+ | Gateway vThunder | | | |
+ | (vThunder-2) | | | |
+ | | | | |
+ | Thunder Series Unified | 2.7.2-P4-SP1 | ACOS | Virtual device |
+ | Application Service | | | |
+ | Gateway vThunder | | | |
+ | (vThunder-27) | | | |
+ | | | | |
+ | AX Series Advanced | 2.7.2-P10 | ACOS | Virtual device |
+ | Traffic Manager vThunder | | | |
+ | (vThunder-7) | | | |
+ | | | | |
+ | Thunder Series Unified | 4.1.4-GR1-P1 | ACOS | Virtual device |
+ | Application Service | | | |
+ | Gateway vThunder | | | |
+ | (vThunder-8) | | | |
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ ```
+
+
+## 1.1 Extract the NED package
+------------------------------
+
+ It is assumed the NED package `ncs--a10-acos-.signed.bin` has already
+ been downloaded from software.cisco.com.
+
+ In this instruction the following example settings will be used:
+
+ - NSO version: 6.0
+ - NED version: 1.0.1
+ - NED package downloaded to: /tmp/ned-package-store
+
+ 1. Extract the NED package and verify its signature:
+
+ ```
+ > cd /tmp/ned-package-store
+ > chmod u+x ncs-6.0-a10-acos-1.0.1.signed.bin
+ > ./ncs-6.0-a10-acos-1.0.1.signed.bin
+ ```
+
+ 2. In case the signature can not be verified (for instance if no internet connection),
+ do as below instead:
+
+ ```
+ > ./ncs-6.0-a10-acos-1.0.1.signed.bin --skip-verification
+ ```
+
+ 3. The result of the extraction shall be a tar.gz file with the same name as the .bin file:
+
+ ```
+ > ls *.tar.gz
+ ncs-6.0-a10-acos-1.0.1.tar.gz
+ ```
+
+
+## 1.2 Install the NED package
+------------------------------
+
+ There are two alternative ways to install this NED package.
+ Which one to use depends on how NSO itself is setup.
+
+ In the instructions below the following example settings will be used:
+
+ - NSO version: 6.0
+ - NED version: 1.0.1
+ - NED download directory: /tmp/ned-package-store
+ - NSO run time directory: ~/nso-lab-rundir
+
+ A prerequisite is to set the environment variable NSO_RUNDIR to point at the NSO run time directory:
+
+ ```
+ > export NSO_RUNDIR=~/nso-lab-rundir
+ ```
+
+
+### 1.2.1 Local install
+-----------------------
+
+ This section describes how to install a NED package on a locally installed NSO
+ (see "NSO Local Install" in the NSO Installation guide).
+
+ It is assumed the NED package has been been unpacked to a tar.gz file as described in 1.1.
+
+ 1. Untar the tar.gz file. This creates a new sub-directory named:
+ `a10-acos-.`:
+
+ ```
+ > tar xfz ncs-6.0-a10-acos-1.0.1.tar.gz
+ > ls -d */
+ a10-acos-cli-1.0
+ ```
+
+ 2. Install the NED into NSO, using the ncs-setup tool:
+
+ ```
+ > ncs-setup --package a10-acos-cli-1.0 --dest $NSO_RUNDIR
+ ```
+
+ 3. Open a NSO CLI session and load the new NED package like below:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# packages reload
+ reload-result {
+ package a10-acos-cli-1.0
+ result true
+ }
+ ```
+
+ Alternatively the tar.gz file can be installed directly into NSO. Then skip steps 1 and 2 and do like
+ below instead:
+
+ ```
+ > ncs-setup --package ncs-6.0-a10-acos-1.0.1.tar.gz --dest $NSO_RUNDIR
+ > ncs_cli -C -u admin
+ admin@ncs# packages reload
+ reload-result {
+ package a10-acos-cli-1.0
+ result true
+ }
+ ```
+
+ Set the environment variable NED_ROOT_DIR to point at the NSO NED package:
+
+ ```
+ > export NED_ROOT_DIR=$NSO_RUNDIR/packages/a10-acos-cli-1.0
+ ```
+
+
+### 1.2.2 System install
+------------------------
+
+ This section describes how to install a NED package on a system installed NSO (see "NSO System
+ Install" in the NSO Installation Guide).
+
+ It is assumed the NED package has been been unpacked to a tar.gz file as described in 1.1.
+
+ 1. Do a NSO backup before installing the new NED package:
+
+ ```
+ > $NCS_DIR/bin/ncs-backup
+ ```
+
+ 2. Start a NSO CLI session and fetch the NED package:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# software packages fetch package-from-file \
+ /tmp/ned-package-store/ncs-6.0-a10-acos-1.0.tar.gz
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-a10-acos-1.0.tar.gz
+ installable
+ }
+ ```
+
+ 3. Install the NED package (add the argument replace-existing if a previous version has been loaded):
+
+ ```
+ admin@ncs# software packages install a10-acos-1.0
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-a10-acos-1.0.tar.gz
+ installed
+ }
+ ```
+
+ 4. Load the NED package
+
+ ```
+ admin@ncs# packages reload
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-a10-acos-cli-1.0
+ loaded
+ }
+ ```
+
+
+## 1.3 Configure the NED in NSO
+-------------------------------
+
+ This section describes the steps for configuring a device instance
+ using the newly installed NED package.
+
+ - Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ - Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ - Configure a new authentication group (my-group) to be used for this device:
+
+ ```
+ admin@ncs(config)# devices authgroup group my-group default-map remote-name \
+ remote-password
+ ```
+
+ - Configure a new device instance (example: dev-1):
+
+ ```
+ admin@ncs(config)# devices device dev-1 address
+ admin@ncs(config)# devices device dev-1 port
+ admin@ncs(config)# devices device dev-1 device-type cli ned-id a10-acos-cli-1.0
+ admin@ncs(config)# devices device dev-1 state admin-state unlocked
+ admin@ncs(config)# devices device dev-1 authgroup my-group
+ ```
+ ```
+ admin@ncs(config)# devices device dev-1 protocol
+ ```
+
+ - If configured protocol is ssh, do fetch the host keys now:
+
+ ```
+ admin@ncs(config)# devices device dev-1 ssh fetch-host-keys
+ ```
+
+ - Finally commit the configuration
+
+ ```
+ admin@ncs(config)# commit
+ ```
+
+ - Verify configuration, using a sync-from.
+
+ ```
+ admin@ncs(config)# devices device dev-1 sync-from
+ result true
+ ```
+
+ If the sync-from was not successful, check the NED configuration again.
+
+
+# 2. Optional debug and trace setup
+-----------------------------------
+
+ It is often desirable to see details from when and how the NED interacts with the device(Example: troubleshooting)
+
+ This can be achieved by configuring NSO to generate a trace file for the NED. A trace file
+ contains information about all interactions with the device. Messages sent and received as well
+ as debug printouts, depending on the log level configured.
+
+ NSO creates one separate trace file for each device instance with tracing enabled.
+ Stored in the following location:
+
+ `$NSO_RUNDIR/logs/ned-a10-acos-cli-1.0-.trace`
+
+ Do as follows to enable tracing in one specific device instance in NSO:
+
+
+ 1. Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ 2. Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ 3. Enable trace raw:
+
+ ```
+ admin@ncs(config)# devices device dev-1 trace raw
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively, tracing can be enabled globally affecting all configured device instances:
+
+ ```
+ admin@ncs(config)# devices global-settings trace raw
+ admin@ncs(config)# commit
+ ```
+
+ 4. Configure the log level for printouts to the trace file:
+
+ ```
+ admin@ncs(config)# devices device dev-1 ned-settings a10-acos logger \
+ level [debug | verbose | info | error]
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively the log level can be set globally affecting all configured
+ device instances using this NED package.
+
+ ```
+ admin@ncs(config)# devices device global-settings ned-settings a10-acos logger \
+ level [debug | verbose | info | error]
+ admin@ncs(config)# commit
+ ```
+
+ The log level 'info' is used by default and the 'debug' level is the most verbose.
+
+ **IMPORTANT**:
+ Tracing shall be used with caution. This feature does increase the number of IPC messages sent
+ between the NED and NSO. In some cases this can affect the performance in NSO. Hence, tracing should
+ normally be disabled in production systems.
+
+
+ An alternative method for generating printouts from the NED is to enable the Java logging mechanism.
+ This makes the NED print log messages to common NSO Java log file.
+
+ `$NSO_RUNDIR/logs/ncs-java-vm.log`
+
+ Do as follows to enable Java logging in the NED
+
+ 1. Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ 2. Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ 3. Enable Java logging with level all from the NED package:
+
+ ```
+ admin@ncs(config)# java-vm java-logging logger com.tailf.packages.ned.a10 \
+ level level-all
+ admin@ncs(config)# commit
+ ```
+
+ 4. Configure the NED to log to the Java logger
+
+ ```
+ admin@ncs(config)# devices device dev-1 ned-settings a10-acos logger java true
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively Java logging can be enabled globally affecting all configured
+ device instances using this NED package.
+
+ ```
+ admin@ncs(config)# devices global-settings ned-settings a10-acos logger java true
+ admin@ncs(config)# commit
+ ```
+
+ **IMPORTANT**:
+ Java logging does not use any IPC messages sent to NSO. Consequently, NSO performance is not
+ affected. However, all log printouts from all log enabled devices are saved in one single file.
+ This means that the usability is limited. Typically single device use cases etc.
+
+
+# 3. Dependencies
+-----------------
+
+ This NED has the following host environment dependencies:
+
+ - Java 1.8 (NSO version < 6.2)
+ - Java 17 (NSO version >= 6.2)
+ - Gnu Sed
+
+ Dependencies for NED recompile:
+
+ - Apache Ant
+ - Bash
+ - Gnu Sort
+ - Gnu awk
+ - Grep
+ - Python3 (with packages: re, sys, getopt, subprocess, argparse, os, glob)
+
+
+# 4. Sample device configuration
+--------------------------------
+
+ The following is an example of configuration data (CLI NED commands) that can be sent to an a10-acos device:
+ ```
+ system resource-usage class-list-ipv6-addr-count 600000
+ system per-vlan-limit mcast 10000
+ system per-vlan-limit unknown-ucast 10000
+
+ snmp-server enable traps slb application-buffer-limit
+ snmp-server enable traps slb server-conn-limit
+ snmp-server enable traps slb server-conn-resume
+ snmp-server enable traps slb server-down
+ snmp-server enable traps slb server-up
+ snmp-server enable traps slb service-conn-limit
+ snmp-server enable traps slb service-conn-resume
+ snmp-server enable traps slb service-down
+ snmp-server enable traps slb service-up
+ snmp-server enable traps slb vip-connlimit
+ snmp-server enable traps slb vip-connratelimit
+ snmp-server enable traps slb vip-port-connlimit
+ snmp-server enable traps slb vip-port-connratelimit
+ snmp-server enable traps slb vip-port-down
+ snmp-server enable traps slb vip-port-up
+ snmp-server enable traps system control-cpu-high
+ snmp-server enable traps system fan
+ snmp-server enable traps system high-disk-use
+ snmp-server enable traps system high-memory-use
+ snmp-server enable traps system high-temp
+ snmp-server enable traps system pri-disk
+ snmp-server enable traps system sec-disk
+ snmp-server enable traps system shutdown
+ snmp-server enable traps system start
+ snmp-server enable traps vrrp-a active
+ snmp-server enable traps vrrp-a standby
+
+ access-list 100 permit ip any any
+
+ interface ethernet 1
+ l3-vlan-fwd-disable
+ load-interval 200
+ enable
+ icmp-rate-limit 1000 lockup 2000 200
+ access-list 100 in
+ ip cache-spoofing-port
+ ip helper-address 2.2.2.1
+ ip helper-address 2.2.3.1
+ ip nat inside
+ ip nat outside
+ ip router isis ASD
+ ipv6 address fe01::/64 anycast
+ ipv6 address fe02::/64 anycast
+ ipv6 nat inside
+ ipv6 nat outside
+
+ interface ethernet 2
+ icmp-rate-limit 1000
+
+ slb server SERVER-COVERAGE-1 1.1.1.1
+ slb server SERVER-COVERAGE-2 2.1.1.1
+
+ slb service-group SERV-GROUP-COVERAGE-1 tcp
+ slb service-group SERV-GROUP-COVERAGE-2 tcp
+ slb service-group SERV-GROUP-COVERAGE-3 tcp
+ slb service-group SERV-GROUP-COVERAGE-4 tcp
+ slb service-group SERV-GROUP-COVERAGE-5 tcp
+ slb service-group SERV-GROUP-COVERAGE-6 tcp
+ slb service-group SERV-GROUP-COVERAGE-7 tcp
+ slb service-group SERV-GROUP-COVERAGE-8 tcp
+ slb service-group SERV-GROUP-COVERAGE-9 tcp
+ slb service-group SERV-GROUP-COVERAGE-10 tcp
+ slb service-group SERV-GROUP-COVERAGE-11 tcp
+ slb service-group SERV-GROUP-COVERAGE-12 tcp
+ slb service-group SERV-GROUP-COVERAGE-13 tcp
+ slb service-group SERV-GROUP-COVERAGE-14 tcp
+ slb service-group SERV-GROUP-COVERAGE-15 tcp
+ slb service-group SERV-GROUP-COVERAGE-16 tcp
+ slb service-group SERV-GROUP-COVERAGE-17 tcp
+
+ slb template persist cookie SLB-PERSIST-COOKIE-1
+ slb template persist cookie SLB-PERSIST-COOKIE-2
+ slb template persist cookie SLB-PERSIST-COOKIE-3
+ slb template persist source-ip SLB-PERSIST-SRCIP-1
+ slb template persist source-ip SLB-PERSIST-SRCIP-2
+ slb template persist source-ip SLB-PERSIST-SRCIP-3
+ slb template persist source-ip SLB-PERSIST-SRCIP-4
+ slb template persist source-ip SLB-PERSIST-SRCIP-5
+ slb template port SLB-TMP-PORT-1
+ slb template port SLB-TMP-PORT-2
+ slb template port SLB-TMP-PORT-3
+ slb template port SLB-TMP-PORT-4
+
+ slb virtual-server SLB-VIRT-SERVER-COVERAGE-1 5.1.1.1
+ slb virtual-server SLB-VIRT-SERVER-COVERAGE-2 5.2.1.1
+ slb virtual-server SLB-VIRT-SERVER-COVERAGE-3 5.3.1.1 /24
+ slb virtual-server SLB-VIRT-SERVER-COVERAGE-4 5.4.1.1
+ slb virtual-server SLB-VIRT-SERVER-COVERAGE-5 5.5.1.1
+
+ health monitor COVERAGE-HEALTH-1
+ retry 5
+ up-retry 5
+ override-ipv4 1.2.3.5
+ override-ipv6 fe01::1
+ override-port 1000
+ method https expect ASDASD
+
+ health monitor COVERAGE-HEALTH-2
+ method https expect response-code 100
+
+ health monitor COVERAGE-HEALTH-3
+ method tcp port 1 send ASDASD response contains ASDASD
+ ```
+
+
+# 5. Built in live-status actions
+---------------------------------
+
+ There are two main categories of commands that can be sent using a10-acos NED: configuration commands (RPC's that are sent from the device configuration) and privileged commands (RPC's that are sent from privileged mode).
+
+ Following RPC's exemplify the two categories:
+ ```
+ top devices device a10-0 config config-actions action { action-payload "show running-config" }
+ top devices device a10-0 live-status exec nonconfig-actions action { action-payload "show interface" }
+ ```
+
+ Each main RPC category also divides in the following sub-categories: simple commands that does not use additional prompts (eg "show configuration"), interactive commands that uses additional prompts (eg a RPC's that requests username/password or any other prompts) and internal NED commands, that does not interact with the device but with the NED.
+
+ The last category is supported but not implemented for a specific feature.
+ Simple command format is as follows:
+ ```
+ action { action-payload "RPC CLI command" }
+ ```
+
+ Interactive command contains the simple command and adds the following list:
+ ```
+ action { action-payload "import bw-list bl1 use-mgmt-port scp://11.11.11.11/file" interaction { prompt-pattern "User name.*" value myuser } interaction { prompt-pattern Password.* value mypassword } interaction { prompt-pattern "Do you want to overwrite.*" value yes } interaction { prompt-pattern \"Do you want to save the remote host information.*\" value no } }
+ ```
+
+ In the above command, the interaction list defines each prompt that it is expected from the device, along with its corresponding value. Note that prompt-pattern is compiled in a regular expression, so special characters that are expected from prompts should be escaped.
+ The order of the interaction list definition is not important, but all the possible expected prompts should be defined. For example, in the above command, the prompt "Do you want to overwrite.*" is only active when the file exists.
+
+ Internal commands looks the same as simple commands, but also contain the keyword "internal":
+ ```
+ action { action-payload "Internal RPC" internal }
+ ```
+
+ All the above command sub-categories can be chained and sent in the same request, by defining a list of actions:
+ ```
+ top devices device a10-0 live-status exec nonconfig-actions action { action-payload "show route" } action { action-payload "show interfaces" } action { action-payload "Internal RPC" internal }
+ ```
+
+ The new implementation of RPC action execution allows a more structured way of sending multiple RPC's, by using its XML format:
+ ```
+
+
+ import bw-list bl1 use-mgmt-port scp://11.11.11.11/file
+
+ User name.*
+ admin
+
+
+ Password.*
+ admin
+
+
+ Do you want to overwrite.*
+ yes
+
+
+ Do you want to save the remote host information.*
+ no
+
+
+
+ show running
+
+
+ ```
+
+
+# 6. Built in live-status show
+------------------------------
+
+ The NED does not support TTL-based live-status data
+
+
+# 7. Limitations
+----------------
+
+ The NED CLI does not implement the device behavior 1 to 1, since the device is not a netconf-compatible device. Also, the NED may use yang model workarounds (like node alternative naming) in order to support device behavior.
+
+
+# 8. How to report NED issues and feature requests
+--------------------------------------------------
+
+ **Issues like bugs and errors shall always be reported to the Cisco NSO NED team through
+ the Cisco Support channel:**
+
+ -
+ -
+
+ The following information is required for the Cisco NSO NED team to be able
+ to investigate an issue:
+
+ - A detailed recipe with steps to reproduce the issue.
+ - A raw trace file generated when the issue is reproduced.
+ - SSH/TELNET access to a device where the issue can be reproduced by the Cisco NSO NED team.
+ This typically means both read and write permissions are required.
+ Pseudo access via tools like Webex, Zoom etc is not acceptable.
+ However, it is ok with device access through VPNs, jump servers etc though.
+
+ Do as follows to gather the necessary information needed for your device, here named 'dev-1':
+
+ 1. Enable full debug logging in the NED
+
+ ```
+ ncs_cli -C -u admin
+ admin@ncs# configure
+ admin@ncs(config)# devices device dev-1 ned-settings a10-acos logging level debug
+ admin@ncs(config)# commit
+ ```
+
+ 2. Configure the NSO to generate a raw trace file from the NED
+
+ ```
+ admin@ncs(config)# devices device dev-1 trace raw
+ admin@ncs(config)# commit
+ ```
+
+ 3. If the NED already had trace enabled, clear it in order to submit only relevant information
+
+ Do as follows for NSO 6.4 or newer:
+
+ ```
+ admin@ncs(config)# devices device dev-1 clear-trace
+ ```
+
+ Do as follows for older NSO versions:
+
+ ```
+ admin@ncs(config)# devices clear-trace
+ ```
+
+ 4. Run a compare-config to populate the trace with initial device config
+
+ ```
+ admin@ncs(config)# devices device dev-1 compare-config
+ ```
+
+ 5. Reproduce the found issue using ncs_cli or your NSO service.
+ Write down each necessary step in a reproduction report.
+
+ In addition to this, it helps if you can show how it should work
+ by manually logging into the device using SSH/TELNET and type
+ the relevant commands showing a successful operation.
+
+ 6. Gather the reproduction report and a copy of the raw trace file
+ containing data recorded when the issue happened.
+
+ 7. Contact the Cisco support and request to open a case. Provide the gathered files
+ together with access details for a device that can be used by the
+ Cisco NSO NED when investigating the issue.
+
+
+ **Requests for new features and extensions of the NED are handled by the Cisco NSO NED team when
+ applicable. Such requests shall also go through the Cisco support channel.**
+
+ The following information is required for feature requests and extensions:
+
+ 1. Set the config on the real device including all existing dependent config
+ and run sync-from to show it in the trace.
+
+ 2. Run sync-from # devices device dev-1 sync-from
+
+ 3. Attach the raw trace to the ticket
+
+ 4. List the config you want implemented in the same syntax as shown on the device
+
+ 5. SSH/TELNET access to a device that can be used by the Cisco NSO NED team for testing and verification
+ of the new feature. This usually means that both read and write permissions are required.
+ Pseudo access via tools like Webex, Zoom etc is not acceptable. However, it is ok with access
+ through VPNs, jump servers etc as long as we can connect to the NED via SSH/TELNET.
+
+
+# 9. How to rebuild a NED
+--------------------------
+
+ To rebuild the NED do as follows:
+
+ ```
+ > cd $NED_ROOT_DIR/src
+ > make clean all
+ ```
+
+ When the NED has been successfully rebuilt, it is necessary to reload the package into NSO.
+
+ ```
+ admin@ncs# packages reload
+ ```
+
+
+# 10. Configure the NED to use ssh multi factor authentication
+---------------------------------------------------------------
+
+ This NED supports multi factor authentication (MFA) using the ssh authentication
+ method 'keyboard-interactive'.
+
+ Some additional steps are required to enable the MFA support:
+
+ 1. Verify that your NSO version supports MFA. This is configurable as additional
+ settings in the authentication group used by the device instance.
+
+ Enter a NSO CLI and enter the following and do tab completion:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# show running-config devices authgroups group default default-map
+ Possible completions:
+ action-name The action to call when a notification is received.
+ callback-node Invoke a standalone action to retrieve login credentials for managed devices on the 'callback-node' instance.
+ mfa Settings for handling multi-factor authentication towards the device
+ public-key Use public-key authentication
+ remote-name Specify device user name
+ remote-password Specify the remote password
+ remote-secondary-password Second password for configuration
+ same-pass Use the local NCS password as the remote password
+ same-secondary-password Use the local NCS password as the remote secondary password
+ same-user Use the local NCS user name as the remote user name
+ ```
+
+ If 'mfa' is displayed in the output like above, NSO has MFA support enabled.
+ In case MFA is not supported it is necessary to upgrade NSO before proceeding.
+
+ 2. Implement the authenticator executable. The MFA feature relies on an external executable to take care of the client part
+ of the multi factor authentication. The NED will automatically call this executable for each challenge presented by the
+ ssh server and expects to get a proper response in return.
+
+ The executable can be a simple shell script or a program implemented in any programming language.
+
+ The required behaviour is like this:
+ - read one line from stdin
+ The line passed from the NED will be a semi colon separated string containing the following info:
+ ```
+ [;;;;;;;]
+ ```
+ The elements for device name, user, password and opaque corresponds to what has been configured in NSO.
+ The ssh server name, instruction and prompt are given by the ssh server during the authentication step.
+
+ Each individual element in the semi colon separated list is Base64 encoded.
+
+ - Extract the challenge based on the contents above.
+
+ - Print a response matching the challenge to stdout and exit with code 0
+
+ - In case a matching response can not be given do exit with code 2
+
+ Below is a simple example of an MFA authenticator implemented in Python3:
+
+ ```
+ #!/usr/bin/env python3
+ import sys
+ import base64
+
+ # This is an example on how to implement an external multi factor authentication handler
+ # that will be called by the NED upon a ssh 'keyboard-interactive' authentication
+ # The handler is reading a line from stdin with the following expected format:
+ # [;;;;;;;]
+ # All elements are base64 encoded.
+
+ def decode(arg):
+ return str(base64.b64decode(arg))[2:-1]
+
+ if __name__ == '__main__':
+ query_challenges = {
+ "admin@localhost's password: ":'admin',
+ 'Enter SMS passcode:':'secretSMScode',
+ 'Press secret key: ':'2'
+ }
+ # read line from stdin and trim brackets
+ line = sys.stdin.readline().strip()[1:-1]
+ args = line.split(';')
+ prompt = decode(args[6])
+ if prompt in query_challenges.keys():
+ print(query_challenges[prompt])
+ exit(0)
+ else:
+ exit(2)
+ ```
+
+ 3. Configure the authentication group used by the device instance to enable MFA. There
+ are two configurables available:
+ - executable The path to the external multi factor authentication executable (mandatory).
+ - opaque Opaque data that will passed as a cookie element to the executable (optional).
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# config
+ Entering configuration mode terminal
+ admin@ncs(config)# devices authgroups group default-map mfa executable
+ admin@ncs(config)# devices authgroups group default-map mfa opaque
+ admin@ncs(config)# commit
+ ```
+
+ 4. Try connecting to the device.
+
+
+## 10.1 Trouble shooting
+------------------------
+ In case of connection problems the following steps can help for debugging:
+
+ Enable the NED trace in debug level:
+
+ ```
+ > devices device dev-1 trace raw
+ > devices device dev-1 ned-settings a10-acos logger level debug
+ > commit
+ ```
+
+ Try connect again
+
+ Inspect the generated trace file.
+
+ Verify that the ssh client is using the external authenticator executable:
+
+ ```
+ using ssh external mfa executable:
+ ```
+
+ Verify that the executable is called with the challenges presented by the ssh server:
+
+ ```
+ calling external mfa executable with ssh server given name: '', instruction: '', prompt ''
+ ```
+
+ Check for any errors reported by the NED when calling the executable
+
+ ```
+ ERROR: external mfa executable failed <....>
+ ```
+
+# 11. Aflex scripts
+-------------------
+
+In order to activate aflex scripts support, run the following command:
+
+```
+admin@ncs(config-config)# config-actions action { action-payload "running-config display aflex" }
+```
+Note: after running this command, it is mandatory to do a sync-from, since the device will introduce the aflex section in the running-config
+
+Once the aflex is activated, aflex scripts can be managed.
+Note: since the device aflex scripts are multi-liners, the script payload needs to be properly escaped by replacing newlines - eg '\n' character with '\\n'. Also double quote - eg " needs to be escaped: '"' -> '\"'
+Also, every script should end in a '\n'
+Note2: since aflex script is a type string leaf in the NED, the script content needs to be quoted:
+```
+admin@ncs(config-config)# aflex test2
+admin@ncs(config-aflex-test2)# script "script-content\n"
+```
+
+For example, to create a new script that would look like this on the device:
+```
+vThunder(NOLICENSE)#show aflex test4
+Name: test4
+Syntax: Check
+Virtual port: No
+Content:
+when HTTP_RESPONSE {
+ # Check Content-Data to avoid unnecessary collects
+ if { [HTTP::header "Content-Type"] contains "text" } {
+ HTTP::collect
+ }
+}
+```
+the equivalent config on the NED will look like this:
+```
+admin@ncs(config-config)# aflex test2
+admin@ncs(config-aflex-test2)# script "when HTTP_RESPONSE {\n # Check Content-Data to avoid unnecessary collects\n if { [HTTP::header \"Content-Type\"] contains \"text\" } {\n HTTP::collect\n }\n}\n"
+admin@ncs(config-aflex-test2)# commit dry-run outformat native
+native {
+ device {
+ name vThunder-8
+ data aflex create test2
+ when HTTP_RESPONSE {
+ # Check Content-Data to avoid unnecessary collects
+ if { [HTTP::header "Content-Type"] contains "text" } {
+ HTTP::collect
+ }
+ }
+ .
+ }
+```
+
+Disabling aflex support is done by the following command:
+```
+admin@ncs(config-config)# config-actions action { action-payload "no running-config display aflex" }
+```
+
+# 12. NED Secrets - Securing your Secrets
+-----------------------------------------
+
+ It is best practice to avoid storing your secrets (e.g. passwords and
+ shared keys) in plain-text, either on NSO or on the device. In NSO we
+ support multiple encrypted datatypes that are encrypted using a local
+ key, similarly many devices such as ALU-SR supports automatically
+ encrypting all passwords stored on the device.
+
+ Naturally, for security reasons, NSO in general has no way of
+ encrypting/decrypting passwords with the secret key on the
+ device. This means that if nothing is done about this we will
+ become out of sync once we write secrets to the device.
+
+ In order to avoid becoming out of sync the NED reads back these elements
+ immediately after set and stores the encrypted value(s) in a special
+ `secrets` table in oper data. Later on, when config is read from the
+ device, the NED replaces all cached encrypted values with their plaintext
+ values; effectively avoiding all config diffs in this area. If the values
+ are changed on the device, the new encrypted value will not match the
+ cached pair and no replacement will take place. This is desired, since out
+ of band changes should be detected.
+
+ This handles the device-side encryption, but passwords are still unencrypted
+ in NSO. To deal with this we support using NSO-encrypted strings instead of
+ plaintext passwords in the NSO data model.
+
+ --- Handling auto-encryption
+
+ Let us say that we have password-encryption on and we want to write a new
+ user to our device:
+
+ system
+ security
+ user admin
+ access console
+ console
+ member administrative
+ exit
+ password
+
+ this will be automatically encrypted by the device
+
+ *A:VSR-7750>config# system security user "admin"
+ *A:VSR-7750>config>system>security>user# info
+ ----------------------------------------------
+ password "$2y$10$fBSDYG2MHpdpCTDQhq7BE.ojwFR5z10g61PUqWaXb52GXg0Ge8d8W"
+ access console
+ console
+ member "administrative"
+ exit
+ ----------------------------------------------
+
+ But the secrets management will store this new encrypted value in our `secrets` table:
+
+ admin@ncs# show devices device dev-1 ned-settings secrets
+ ID ENCRYPTED REGEX
+ ---------------------------------------------------------------------------------------------------------------
+ /system/security/user_admin_/password/id $2y$10$fBSDYG2MHpdpCTDQhq7BE.ojwFR5z10g61PUqWaXb52GXg0Ge8d8W -
+
+ which means that compare-config or sync-from will not show any
+ changes and will not result in any updates to CDB". In fact, we can
+ still see the unencrypted value in the device tree:
+
+ admin@ncs(config-config)# show full sys sec user
+ devices device dev-1
+ config
+ system
+ security
+ user admin
+ access console
+ console
+ member administrative
+ !
+ password
+
+ --- Increasing security with NSO-side encryption
+
+ We have two alternatives, either we can manually encrypt our values using
+ one of the NSO-encrypted types (e.g `aes-256-cfb-128-encrypted-string`) and
+ set them to the tree, or we can recompile the NED to always encrypt secrets.
+
+ --- Setting encrypted value
+
+ Let us say we know that the NSO-encrypted string
+ `$2y$10$7ova9fF/bRe9B9GUtjVpA.w5mfeXJXRHyV0KsSfg4XWE9j3Fcq3Qi`, we
+ can then set it in the device tree as normal
+
+ admin@ncs(config-config)# system security user admin password $2y$10$7ova9fF/bRe9B9GUtjVpA.w5mfeXJXRHyV0KsSfg4XWE9j3Fcq3Qi
+ admin@ncs(config-config)# commit
+
+ when commiting this value it will be decrypted and the plaintext will be written to the device.
+ Unlike the previous example the plaintext is not visible in the device tree:
+
+ admin@ncs(config-config)# show full sys sec user
+ devices device dev-1
+ config
+ system
+ security
+ user admin
+ access console
+ console
+ member administrative
+ !
+ password $2y$10$7ova9fF/bRe9B9GUtjVpA.w5mfeXJXRHyV0KsSfg4XWE9j3Fcq3Qi
+
+ On the device side this plaintext value is of course encrypted
+ with the device key, and just as before we store it in our
+ `secrets` table:
+
+ admin@ncs# show devices device dev-1 ned-settings secrets
+ ID ENCRYPTED REGEX
+ ---------------------------------------------------------------------------------------------------------------
+ /system/security/user_admin_/password/id $2y$10$fBSDYG2MHpdpCTDQhq7BE.ojwFR5z10g61PUqWaXb52GXg0Ge8d8W -
+
+ We can see that this corresponds to the value set on the device.
+
+ --- Auto-encrypting passwords in NSO
+
+ To avoid having to pre-encrypt your passwords you can rebuild your NED in your OS
+ command shell specifying an encrypted type for secrets using a command like:
+
+ yourhost:~/ned-folder$ NEDCOM_SECRET_TYPE="tailf:aes-cfb-128-encrypted-string" make -C src/ clean all
+
+ Or by adding the line `NED_EXTRA_BUILDFLAGS ?= NEDCOM_SECRET_TYPE=tailf:aes-cfb-128-encrypted-string`
+ in top of the `Makefile` located in /src directory.
+
+ Doing this means that even if the input to a password is a plaintext string, NSO will always
+ encrypt it, and you will never see plain text secrets in the device tree.
+
+ If we reload our example with the new NED all of the secrets are now encrypted:
+
+ admin@ncs(config-config)# show full sys sec user
+ devices device dev-1
+ config
+ system
+ security
+ user admin
+ access console
+ console
+ member administrative
+ !
+ password $2y$10$7ova9fF/bRe9B9GUtjVpA.w5mfeXJXRHyV0KsSfg4XWE9j3Fcq3Qi
diff --git a/accedian-nid/README-ned-settings.md b/accedian-nid/README-ned-settings.md
new file mode 100644
index 00000000..c76d9e2c
--- /dev/null
+++ b/accedian-nid/README-ned-settings.md
@@ -0,0 +1,186 @@
+# NED settings details
+----------------------
+
+ This NED is equipped with a number of runtime configuration options "NED settings" allowing for
+ customization by the end user. All options are configurable using the NSO API for NED settings.
+ Most NED settings can be configured globally, per device profile or per device instance in the
+ following locations:
+
+ global
+ /ncs:devices/global-settings/ned-settings/accedian-nid/
+ profile
+ /ncs:devices/ncs:profiles/profile:/ned-settings/accedian-nid/
+ device
+ /ncs:/device/devices/device:/ned-settings/accedian-nid/
+
+ Profiles setting overrides global-settings and device settings override profile settings,
+ hence the narrowest scope of the setting is used by the device.
+
+ If user changes a ned-setting, then user must reconnect to the device, i.e.
+ disconnect and connect in order for the new setting to take effect.
+
+ From the NSO CLI the device instance NED settings for this NED are available under:
+
+ ```
+ # config
+ # devices device dev-1 ned-settings accedian-nid
+
+ Press TAB to see all the NED settings.
+
+ ```
+
+
+# Table of contents
+-------------------
+
+ ```
+ 1. ned-settings accedian-nid
+ 2. connection
+ 3. deprecated
+ 4. logger
+ 5. transaction
+ 6. sfp-ports
+ 7. developer
+ ```
+
+
+# 1. ned-settings accedian-nid
+------------------------------
+
+ Configure settings specific to the connection between NED and device.
+
+
+ - extended-parser (default auto)
+
+ Make the NED handle CLI parsing (i.e. transform the running-config from the device to the
+ model based config tree).
+
+ auto - Uses turbo-mode when available, will use fastest availablemethod to load
+ data to NSO. If NSO doesn't support data-loading from CLI NED, robust-mode
+ is used.
+
+ turbo-mode - The NED executes the whole command parsing by itself, completely bypassing
+ the NSO CLI parser. The configuration dump is transferred to NSO using maapi
+ setvalues call.
+
+ turbo-xml-mode - The NED executes the whole command parsing by itself, completely bypassing
+ the NSO CLI parser. The configuration dump is transferred to NSO in XML
+ format.
+
+ robust-mode - Makes the NED filter the configuration so that unmodeled content is removed
+ before being passed to the NSO CLI-engine. This protects against
+ configuration ending up at the wrong level when NSO CLI parser fallbacks
+ (which potentially can cause following config to be skipped).
+
+
+# 2. ned-settings accedian-nid connection
+-----------------------------------------
+
+ Configure settings specific to the connection between NED and device.
+
+
+ - number-of-retries (default 0)
+
+ Configure max number of retries the NED will try to connect to the device before giving up.
+ Default 0.
+
+
+ - time-between-retry (default 1)
+
+ Configure the time in seconds the NED will wait between each connect retry. Default 1s.
+
+
+ - connector
+
+ Change the default connector, e.g. 'ned-connector-default.json'.
+
+
+# 3. ned-settings accedian-nid deprecated
+-----------------------------------------
+
+ Deprecated ned-settings.
+
+
+ - connection legacy-mode (default disabled)
+
+ enabled - enabled.
+
+ disabled - disabled.
+
+
+# 4. ned-settings accedian-nid logger
+-------------------------------------
+
+ Settings for controlling logs generated.
+
+
+ - level (default info)
+
+ Set level of logging.
+
+ error - error.
+
+ info - info.
+
+ verbose - verbose.
+
+ debug - debug.
+
+
+ - java (default true)
+
+ Toggle logs to be added to ncs-java-vm.log.
+
+
+# 5. ned-settings accedian-nid transaction
+------------------------------------------
+
+ Transaction specific settings.
+
+
+ - trans-id-method (default modeled-config)
+
+ Select the method for calculating transaction-id.
+
+ modeled-config - Use a snapshot of the data of only the modeled parts of running config for
+ calculation.
+
+ full-config - Use a snapshot of the full running config for calculation.
+
+ device-custom - Use a device custom method to get a value to use for trans-id.
+
+
+# 6. ned-settings accedian-nid sfp-ports
+----------------------------------------
+
+ This list contains port names that will keep 'force-tx-on'. If the list is empty 'force-tx-on'
+ will be left as it is.
+
+ - sfp-ports
+
+ - port
+
+ Port name,case sensitive.
+
+
+# 7. ned-settings accedian-nid developer
+----------------------------------------
+
+ Contains settings used for debugging (intended for NED developers).
+
+
+ - progress-verbosity (default debug)
+
+ Maximum NED verbosity level which will get written in devel.log file.
+
+ disabled - disabled.
+
+ normal - normal.
+
+ verbose - verbose.
+
+ very-verbose - very-verbose.
+
+ debug - debug.
+
+
diff --git a/accedian-nid/README.md b/accedian-nid/README.md
new file mode 100644
index 00000000..7db43332
--- /dev/null
+++ b/accedian-nid/README.md
@@ -0,0 +1,700 @@
+# Table of contents
+-------------------
+
+ ```
+ 1. General
+ 1.1 Extract the NED package
+ 1.2 Install the NED package
+ 1.2.1 Local install
+ 1.2.2 System install
+ 1.3 Configure the NED in NSO
+ 2. Optional debug and trace setup
+ 3. Dependencies
+ 4. Sample device configuration
+ 5. Built in live-status actions
+ 6. Built in live-status show
+ 7. Limitations
+ 8. How to report NED issues and feature requests
+ 9. How to rebuild a NED
+ 10. Configure the NED to use ssh multi factor authentication
+ ```
+
+
+# 1. General
+------------
+
+ This document describes the accedian-nid NED.
+
+ Additional README files bundled with this NED package
+ ```
+ +---------------------------+------------------------------------------------------------------------------+
+ | Name | Info |
+ +---------------------------+------------------------------------------------------------------------------+
+ | README-ned-settings.md | Information about all run time settings supported by this NED. |
+ +---------------------------+------------------------------------------------------------------------------+
+ ```
+
+ Common NED Features
+ ```
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | Feature | Supported | Info |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ | netsim | yes | - |
+ | | | |
+ | check-sync | yes | - |
+ | | | |
+ | partial-sync-from | yes | - |
+ | | | |
+ | live-status actions | yes | - |
+ | | | |
+ | live-status show | no | - |
+ | | | |
+ | load-native-config | no | - |
+ +---------------------------+-----------+------------------------------------------------------------------+
+ ```
+
+ Verified target systems
+ ```
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ | Model | Version | OS | Info |
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ | accedian-GT | 7.1 | | - |
+ | | | | |
+ | accedian-LT | 7.1 | | - |
+ | | | | |
+ | accedian-TE | 7.1 | | - |
+ +---------------------------+-----------------+--------+---------------------------------------------------+
+ ```
+
+
+## 1.1 Extract the NED package
+------------------------------
+
+ It is assumed the NED package `ncs--accedian-nid-.signed.bin` has already
+ been downloaded from software.cisco.com.
+
+ In this instruction the following example settings will be used:
+
+ - NSO version: 6.0
+ - NED version: 1.0.1
+ - NED package downloaded to: /tmp/ned-package-store
+
+ 1. Extract the NED package and verify its signature:
+
+ ```
+ > cd /tmp/ned-package-store
+ > chmod u+x ncs-6.0-accedian-nid-1.0.1.signed.bin
+ > ./ncs-6.0-accedian-nid-1.0.1.signed.bin
+ ```
+
+ 2. In case the signature can not be verified (for instance if no internet connection),
+ do as below instead:
+
+ ```
+ > ./ncs-6.0-accedian-nid-1.0.1.signed.bin --skip-verification
+ ```
+
+ 3. The result of the extraction shall be a tar.gz file with the same name as the .bin file:
+
+ ```
+ > ls *.tar.gz
+ ncs-6.0-accedian-nid-1.0.1.tar.gz
+ ```
+
+
+## 1.2 Install the NED package
+------------------------------
+
+ There are two alternative ways to install this NED package.
+ Which one to use depends on how NSO itself is setup.
+
+ In the instructions below the following example settings will be used:
+
+ - NSO version: 6.0
+ - NED version: 1.0.1
+ - NED download directory: /tmp/ned-package-store
+ - NSO run time directory: ~/nso-lab-rundir
+
+ A prerequisite is to set the environment variable NSO_RUNDIR to point at the NSO run time directory:
+
+ ```
+ > export NSO_RUNDIR=~/nso-lab-rundir
+ ```
+
+
+### 1.2.1 Local install
+-----------------------
+
+ This section describes how to install a NED package on a locally installed NSO
+ (see "NSO Local Install" in the NSO Installation guide).
+
+ It is assumed the NED package has been been unpacked to a tar.gz file as described in 1.1.
+
+ 1. Untar the tar.gz file. This creates a new sub-directory named:
+ `accedian-nid-.`:
+
+ ```
+ > tar xfz ncs-6.0-accedian-nid-1.0.1.tar.gz
+ > ls -d */
+ accedian-nid-cli-1.0
+ ```
+
+ 2. Install the NED into NSO, using the ncs-setup tool:
+
+ ```
+ > ncs-setup --package accedian-nid-cli-1.0 --dest $NSO_RUNDIR
+ ```
+
+ 3. Open a NSO CLI session and load the new NED package like below:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# packages reload
+ reload-result {
+ package accedian-nid-cli-1.0
+ result true
+ }
+ ```
+
+ Alternatively the tar.gz file can be installed directly into NSO. Then skip steps 1 and 2 and do like
+ below instead:
+
+ ```
+ > ncs-setup --package ncs-6.0-accedian-nid-1.0.1.tar.gz --dest $NSO_RUNDIR
+ > ncs_cli -C -u admin
+ admin@ncs# packages reload
+ reload-result {
+ package accedian-nid-cli-1.0
+ result true
+ }
+ ```
+
+ Set the environment variable NED_ROOT_DIR to point at the NSO NED package:
+
+ ```
+ > export NED_ROOT_DIR=$NSO_RUNDIR/packages/accedian-nid-cli-1.0
+ ```
+
+
+### 1.2.2 System install
+------------------------
+
+ This section describes how to install a NED package on a system installed NSO (see "NSO System
+ Install" in the NSO Installation Guide).
+
+ It is assumed the NED package has been been unpacked to a tar.gz file as described in 1.1.
+
+ 1. Do a NSO backup before installing the new NED package:
+
+ ```
+ > $NCS_DIR/bin/ncs-backup
+ ```
+
+ 2. Start a NSO CLI session and fetch the NED package:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# software packages fetch package-from-file \
+ /tmp/ned-package-store/ncs-6.0-accedian-nid-1.0.tar.gz
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-accedian-nid-1.0.tar.gz
+ installable
+ }
+ ```
+
+ 3. Install the NED package (add the argument replace-existing if a previous version has been loaded):
+
+ ```
+ admin@ncs# software packages install accedian-nid-1.0
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-accedian-nid-1.0.tar.gz
+ installed
+ }
+ ```
+
+ 4. Load the NED package
+
+ ```
+ admin@ncs# packages reload
+ admin@ncs# software packages list
+ package {
+ name ncs-6.0-accedian-nid-cli-1.0
+ loaded
+ }
+ ```
+
+
+## 1.3 Configure the NED in NSO
+-------------------------------
+
+ This section describes the steps for configuring a device instance
+ using the newly installed NED package.
+
+ - Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ - Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ - Configure a new authentication group (my-group) to be used for this device:
+
+ ```
+ admin@ncs(config)# devices authgroup group my-group default-map remote-name \
+ remote-password
+ ```
+
+ - Configure a new device instance (example: dev-1):
+
+ ```
+ admin@ncs(config)# devices device dev-1 address
+ admin@ncs(config)# devices device dev-1 port
+ admin@ncs(config)# devices device dev-1 device-type cli ned-id accedian-nid-cli-1.0
+ admin@ncs(config)# devices device dev-1 state admin-state unlocked
+ admin@ncs(config)# devices device dev-1 authgroup my-group
+ ```
+ ```
+ admin@ncs(config)# devices device dev-1 protocol
+ ```
+
+ - If configured protocol is ssh, do fetch the host keys now:
+
+ ```
+ admin@ncs(config)# devices device dev-1 ssh fetch-host-keys
+ ```
+
+ - Finally commit the configuration
+
+ ```
+ admin@ncs(config)# commit
+ ```
+
+ - Verify configuration, using a sync-from.
+
+ ```
+ admin@ncs(config)# devices device dev-1 sync-from
+ result true
+ ```
+
+ If the sync-from was not successful, check the NED configuration again.
+
+
+# 2. Optional debug and trace setup
+-----------------------------------
+
+ It is often desirable to see details from when and how the NED interacts with the device(Example: troubleshooting)
+
+ This can be achieved by configuring NSO to generate a trace file for the NED. A trace file
+ contains information about all interactions with the device. Messages sent and received as well
+ as debug printouts, depending on the log level configured.
+
+ NSO creates one separate trace file for each device instance with tracing enabled.
+ Stored in the following location:
+
+ `$NSO_RUNDIR/logs/ned-accedian-nid-cli-1.0-.trace`
+
+ Do as follows to enable tracing in one specific device instance in NSO:
+
+
+ 1. Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ 2. Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ 3. Enable trace raw:
+
+ ```
+ admin@ncs(config)# devices device dev-1 trace raw
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively, tracing can be enabled globally affecting all configured device instances:
+
+ ```
+ admin@ncs(config)# devices global-settings trace raw
+ admin@ncs(config)# commit
+ ```
+
+ 4. Configure the log level for printouts to the trace file:
+
+ ```
+ admin@ncs(config)# devices device dev-1 ned-settings accedian-nid logger \
+ level [debug | verbose | info | error]
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively the log level can be set globally affecting all configured
+ device instances using this NED package.
+
+ ```
+ admin@ncs(config)# devices device global-settings ned-settings accedian-nid logger \
+ level [debug | verbose | info | error]
+ admin@ncs(config)# commit
+ ```
+
+ The log level 'info' is used by default and the 'debug' level is the most verbose.
+
+ **IMPORTANT**:
+ Tracing shall be used with caution. This feature does increase the number of IPC messages sent
+ between the NED and NSO. In some cases this can affect the performance in NSO. Hence, tracing should
+ normally be disabled in production systems.
+
+
+ An alternative method for generating printouts from the NED is to enable the Java logging mechanism.
+ This makes the NED print log messages to common NSO Java log file.
+
+ `$NSO_RUNDIR/logs/ncs-java-vm.log`
+
+ Do as follows to enable Java logging in the NED
+
+ 1. Start a NSO CLI session:
+
+ ```
+ > ncs_cli -C -u admin
+ ```
+
+ 2. Enter configuration mode:
+
+ ```
+ admin@ncs# configure
+ Entering configuration mode terminal
+ admin@ncs(config)#
+ ```
+
+ 3. Enable Java logging with level all from the NED package:
+
+ ```
+ admin@ncs(config)# java-vm java-logging logger com.tailf.packages.ned.accediannid \
+ level level-all
+ admin@ncs(config)# commit
+ ```
+
+ 4. Configure the NED to log to the Java logger
+
+ ```
+ admin@ncs(config)# devices device dev-1 ned-settings accedian-nid logger java true
+ admin@ncs(config)# commit
+ ```
+
+ Alternatively Java logging can be enabled globally affecting all configured
+ device instances using this NED package.
+
+ ```
+ admin@ncs(config)# devices global-settings ned-settings accedian-nid logger java true
+ admin@ncs(config)# commit
+ ```
+
+ **IMPORTANT**:
+ Java logging does not use any IPC messages sent to NSO. Consequently, NSO performance is not
+ affected. However, all log printouts from all log enabled devices are saved in one single file.
+ This means that the usability is limited. Typically single device use cases etc.
+
+
+# 3. Dependencies
+-----------------
+
+ This NED has the following host environment dependencies:
+
+ - Java 1.8 (NSO version < 6.2)
+ - Java 17 (NSO version >= 6.2)
+ - Gnu Sed
+
+ Dependencies for NED recompile:
+
+ - Apache Ant
+ - Bash
+ - Gnu Sort
+ - Gnu awk
+ - Grep
+ - Python3 (with packages: re, sys, getopt, subprocess, argparse, os, glob)
+
+
+# 4. Sample device configuration
+--------------------------------
+
+ NONE
+
+
+# 5. Built in live-status actions
+---------------------------------
+
+ NONE
+
+
+# 6. Built in live-status show
+------------------------------
+
+ NONE
+
+
+# 7. Limitations
+----------------
+
+ NONE
+
+
+# 8. How to report NED issues and feature requests
+--------------------------------------------------
+
+ **Issues like bugs and errors shall always be reported to the Cisco NSO NED team through
+ the Cisco Support channel:**
+
+ -
+ -
+
+ The following information is required for the Cisco NSO NED team to be able
+ to investigate an issue:
+
+ - A detailed recipe with steps to reproduce the issue.
+ - A raw trace file generated when the issue is reproduced.
+ - SSH/TELNET access to a device where the issue can be reproduced by the Cisco NSO NED team.
+ This typically means both read and write permissions are required.
+ Pseudo access via tools like Webex, Zoom etc is not acceptable.
+ However, it is ok with device access through VPNs, jump servers etc though.
+
+ Do as follows to gather the necessary information needed for your device, here named 'dev-1':
+
+ 1. Enable full debug logging in the NED
+
+ ```
+ ncs_cli -C -u admin
+ admin@ncs# configure
+ admin@ncs(config)# devices device dev-1 ned-settings accedian-nid logging level debug
+ admin@ncs(config)# commit
+ ```
+
+ 2. Configure the NSO to generate a raw trace file from the NED
+
+ ```
+ admin@ncs(config)# devices device dev-1 trace raw
+ admin@ncs(config)# commit
+ ```
+
+ 3. If the NED already had trace enabled, clear it in order to submit only relevant information
+
+ Do as follows for NSO 6.4 or newer:
+
+ ```
+ admin@ncs(config)# devices device dev-1 clear-trace
+ ```
+
+ Do as follows for older NSO versions:
+
+ ```
+ admin@ncs(config)# devices clear-trace
+ ```
+
+ 4. Run a compare-config to populate the trace with initial device config
+
+ ```
+ admin@ncs(config)# devices device dev-1 compare-config
+ ```
+
+ 5. Reproduce the found issue using ncs_cli or your NSO service.
+ Write down each necessary step in a reproduction report.
+
+ In addition to this, it helps if you can show how it should work
+ by manually logging into the device using SSH/TELNET and type
+ the relevant commands showing a successful operation.
+
+ 6. Gather the reproduction report and a copy of the raw trace file
+ containing data recorded when the issue happened.
+
+ 7. Contact the Cisco support and request to open a case. Provide the gathered files
+ together with access details for a device that can be used by the
+ Cisco NSO NED when investigating the issue.
+
+
+ **Requests for new features and extensions of the NED are handled by the Cisco NSO NED team when
+ applicable. Such requests shall also go through the Cisco support channel.**
+
+ The following information is required for feature requests and extensions:
+
+ 1. Set the config on the real device including all existing dependent config
+ and run sync-from to show it in the trace.
+
+ 2. Run sync-from # devices device dev-1 sync-from
+
+ 3. Attach the raw trace to the ticket
+
+ 4. List the config you want implemented in the same syntax as shown on the device
+
+ 5. SSH/TELNET access to a device that can be used by the Cisco NSO NED team for testing and verification
+ of the new feature. This usually means that both read and write permissions are required.
+ Pseudo access via tools like Webex, Zoom etc is not acceptable. However, it is ok with access
+ through VPNs, jump servers etc as long as we can connect to the NED via SSH/TELNET.
+
+
+# 9. How to rebuild a NED
+--------------------------
+
+ To rebuild the NED do as follows:
+
+ ```
+ > cd $NED_ROOT_DIR/src
+ > make clean all
+ ```
+
+ When the NED has been successfully rebuilt, it is necessary to reload the package into NSO.
+
+ ```
+ admin@ncs# packages reload
+ ```
+
+
+# 10. Configure the NED to use ssh multi factor authentication
+---------------------------------------------------------------
+
+ This NED supports multi factor authentication (MFA) using the ssh authentication
+ method 'keyboard-interactive'.
+
+ Some additional steps are required to enable the MFA support:
+
+ 1. Verify that your NSO version supports MFA. This is configurable as additional
+ settings in the authentication group used by the device instance.
+
+ Enter a NSO CLI and enter the following and do tab completion:
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# show running-config devices authgroups group default default-map
+ Possible completions:
+ action-name The action to call when a notification is received.
+ callback-node Invoke a standalone action to retrieve login credentials for managed devices on the 'callback-node' instance.
+ mfa Settings for handling multi-factor authentication towards the device
+ public-key Use public-key authentication
+ remote-name Specify device user name
+ remote-password Specify the remote password
+ remote-secondary-password Second password for configuration
+ same-pass Use the local NCS password as the remote password
+ same-secondary-password Use the local NCS password as the remote secondary password
+ same-user Use the local NCS user name as the remote user name
+ ```
+
+ If 'mfa' is displayed in the output like above, NSO has MFA support enabled.
+ In case MFA is not supported it is necessary to upgrade NSO before proceeding.
+
+ 2. Implement the authenticator executable. The MFA feature relies on an external executable to take care of the client part
+ of the multi factor authentication. The NED will automatically call this executable for each challenge presented by the
+ ssh server and expects to get a proper response in return.
+
+ The executable can be a simple shell script or a program implemented in any programming language.
+
+ The required behaviour is like this:
+ - read one line from stdin
+ The line passed from the NED will be a semi colon separated string containing the following info:
+ ```
+ [;;;;;;;]
+ ```
+ The elements for device name, user, password and opaque corresponds to what has been configured in NSO.
+ The ssh server name, instruction and prompt are given by the ssh server during the authentication step.
+
+ Each individual element in the semi colon separated list is Base64 encoded.
+
+ - Extract the challenge based on the contents above.
+
+ - Print a response matching the challenge to stdout and exit with code 0
+
+ - In case a matching response can not be given do exit with code 2
+
+ Below is a simple example of an MFA authenticator implemented in Python3:
+
+ ```
+ #!/usr/bin/env python3
+ import sys
+ import base64
+
+ # This is an example on how to implement an external multi factor authentication handler
+ # that will be called by the NED upon a ssh 'keyboard-interactive' authentication
+ # The handler is reading a line from stdin with the following expected format:
+ # [;;;;;;;]
+ # All elements are base64 encoded.
+
+ def decode(arg):
+ return str(base64.b64decode(arg))[2:-1]
+
+ if __name__ == '__main__':
+ query_challenges = {
+ "admin@localhost's password: ":'admin',
+ 'Enter SMS passcode:':'secretSMScode',
+ 'Press secret key: ':'2'
+ }
+ # read line from stdin and trim brackets
+ line = sys.stdin.readline().strip()[1:-1]
+ args = line.split(';')
+ prompt = decode(args[6])
+ if prompt in query_challenges.keys():
+ print(query_challenges[prompt])
+ exit(0)
+ else:
+ exit(2)
+ ```
+
+ 3. Configure the authentication group used by the device instance to enable MFA. There
+ are two configurables available:
+ - executable The path to the external multi factor authentication executable (mandatory).
+ - opaque Opaque data that will passed as a cookie element to the executable (optional).
+
+ ```
+ > ncs_cli -C -u admin
+ admin@ncs# config
+ Entering configuration mode terminal
+ admin@ncs(config)# devices authgroups group default-map mfa executable
+ admin@ncs(config)# devices authgroups group default-map mfa opaque
+ admin@ncs(config)# commit
+ ```
+
+ 4. Try connecting to the device.
+
+
+## 10.1 Trouble shooting
+------------------------
+ In case of connection problems the following steps can help for debugging:
+
+ Enable the NED trace in debug level:
+
+ ```
+ > devices device dev-1 trace raw
+ > devices device dev-1 ned-settings accedian-nid logger level debug
+ > commit
+ ```
+
+ Try connect again
+
+ Inspect the generated trace file.
+
+ Verify that the ssh client is using the external authenticator executable:
+
+ ```
+ using ssh external mfa executable:
+ ```
+
+ Verify that the executable is called with the challenges presented by the ssh server:
+
+ ```
+ calling external mfa executable with ssh server given name: '', instruction: '', prompt ''
+ ```
+
+ Check for any errors reported by the NED when calling the executable
+
+ ```
+ ERROR: external mfa executable failed <....>
+ ```
diff --git a/accedian-skylight_rc/README-ned-settings.md b/accedian-skylight_rc/README-ned-settings.md
new file mode 100644
index 00000000..082d38a0
--- /dev/null
+++ b/accedian-skylight_rc/README-ned-settings.md
@@ -0,0 +1,979 @@
+# NED settings details
+----------------------
+
+ This NED is equipped with a number of runtime configuration options "NED settings" allowing for
+ customization by the end user. All options are configurable using the NSO API for NED settings.
+ Most NED settings can be configured globally, per device profile or per device instance in the
+ following locations:
+
+ global
+ /ncs:devices/global-settings/ned-settings/accedian-skylight_rc/
+ profile
+ /ncs:devices/ncs:profiles/profile:/ned-settings/accedian-skylight_rc/
+ device
+ /ncs:/device/devices/device:/ned-settings/accedian-skylight_rc/
+
+ Profiles setting overrides global-settings and device settings override profile settings,
+ hence the narrowest scope of the setting is used by the device.
+
+ If user changes a ned-setting, then user must reconnect to the device, i.e.
+ disconnect and connect in order for the new setting to take effect.
+
+ From the NSO CLI the device instance NED settings for this NED are available under:
+
+ ```
+ # config
+ # devices device dev-1 ned-settings accedian-skylight_rc
+
+ Press TAB to see all the NED settings.
+
+ ```
+
+
+# Table of contents
+-------------------
+
+ ```
+ 1. ned-settings accedian-skylight_rc
+ 2. connection
+ 2.1. authentication
+ 2.1.1. token-request
+ 2.1.2. token-revoke
+ 2.2. ssl
+ 2.2.1. mtls
+ 3. live-status
+ 4. restconf
+ 4.1. cache
+ 4.2. config
+ 4.2.1. deviations
+ 4.3. live-status
+ 4.4. notif
+ 4.5. yang-push
+ 5. logger
+ 6. general
+ 6.1. capabilities
+ 6.2. config
+ 6.3. live-status
+ 6.4. notif
+ ```
+
+
+# 1. ned-settings accedian-skylight_rc
+--------------------------------------
+
+
+# 2. ned-settings accedian-skylight_rc connection
+-------------------------------------------------
+
+ Settings for the RESTCONF connection.
+
+
+ - connection use-host-name (default false)
+
+ Configure the NED whether to use the host name or the ip address to the device when
+ connecting. If set to true the host name will be used if possible.
+
+
+ - connection custom-hostname
+
+ The hostname of the device. This is used to connect to the device.
+
+
+## 2.1. ned-settings accedian-skylight_rc connection authentication
+-------------------------------------------------------------------
+
+ Authentication related settings.
+
+
+ - authentication method (default basic)
+
+ Configure authentication method to use when the NED interacts with the RESTCONF device.
+
+ basic - Use standard 'Basic' authentication.
+
+ none - No additional authentication is done. This option shall for instance be used
+ on devices that only rely on authentication via mTLS.
+
+ bearer-token - Use a 'bearer token' based authentication. This does require additional
+ configurations. Either a static token or address info etc to a token broker.
+
+
+ - authentication use-token-cache (default false)
+
+ When set to true, the NED will cache the negotiated authentication token for later use in any subsequent connections.
+ The cache reduces the number of round trips needed when connecting to the target. Applicable token based mechanisms
+ like the "bearer-token".
+ The feature do require adaptions of the NED to detect when cached token is regarded as expired by the device, I.e the
+ NED needs to be instrumented with pattern for typical device replies that indicate "token expired".
+ Use with caution when NED is interacting with any other device.
+
+
+ - authentication mode
+
+ The bearer-token method has the following additional settings.
+
+ probe - Do a dynamic probe for the bearer token to be used via a token broker. This
+ does require the additional 'token-request' settings to be configured.
+
+ static-token - Use a statically configured token configured in the 'token-value' setting.
+
+
+ - authentication token-value
+
+ Configure a static token value.
+
+
+### 2.1.1. ned-settings accedian-skylight_rc connection authentication token-request
+------------------------------------------------------------------------------------
+
+ Bearer token request settings.
+
+
+ - token-request url (default /restconf/auth)
+
+ URL path to bearer token broker. This does not use the base-url. Default: /restconf/auth.
+
+
+ - token-request port
+
+ Port used used by bearer token broker. Default: use same as restconf connection.
+
+
+ - token-request address
+
+ Address used used by bearer token broker. Default: use same as restconf connection.
+
+
+ - token-request username-parameter
+
+ Username parameter name if different from 'username' in configured auth group.
+
+
+ - token-request password-parameter
+
+ Password parameter name if different from 'password' in configured auth group.
+
+
+### 2.1.2. ned-settings accedian-skylight_rc connection authentication token-revoke
+-----------------------------------------------------------------------------------
+
+ Bearer token revoke settings. If configured, the used token will be automatically closed when the
+ NED is closing.
+
+
+ - token-revoke url
+
+ URL path to bearer token broker. This does not use the base-url.
+
+
+ - token-revoke port
+
+ Port used used by bearer token broker. Default: use same as for requesting token.
+
+
+ - token-revoke address
+
+ Address used used by bearer token broker. Default: use same as for requesting token.
+
+
+ - token-revoke query
+
+ Additional query parameter(s) used when doing the token revokation.
+
+
+## 2.2. ned-settings accedian-skylight_rc connection ssl
+--------------------------------------------------------
+
+ Settings related to SSL/TLS enabled connections.
+
+
+ - ssl accept-any
+
+ Accept any SSL certificate presented by the device.
+ Warning! This enables Man in the Middle attacks and should only be used for testing and troubleshooting.
+
+
+ - ssl hostname
+
+ Device hostname/fqdn. Useful when SSL certificate CN verification fails because NSO uses IP
+ address instead of hostname. Note: when accept-any = false and there is no
+ connection/ssl/certificate defined, the NED will automatically fetch the server certificate.
+
+
+ - ssl ciphers
+
+ Configure permitted ciphers to use when doing TLS handshake. Leave empty to use system
+ default.
+
+
+ - ssl protocols
+
+ Configure permitted protocol versions to use when doing TLS handshake. Leave empty to use
+ system default.
+
+
+ - ssl certificate
+
+ Configure a certificate to be used for identifying the device to connect to. It can be either
+ a host certificate identifying the device or a self signed root certificate that has been used
+ for signing the certificate on the device.
+
+ SSL certificate stored in DER format but since it is entered as Base64 it is very similar to PEM but
+ without banners like:
+ "----- BEGIN CERTIFICATE -----".
+
+ Default uses the default trusted certificates installed in Java JVM.
+
+ An easy way to get the PEM of a server:
+ openssl s_client -connect HOST:PORT
+
+
+### 2.2.1. ned-settings accedian-skylight_rc connection ssl mtls
+----------------------------------------------------------------
+
+ Settings related to mutual TLS (mTLS) Note, if mTLS is to be used without any further
+ authentication mechanism, then ned-settings accedian-skylight_rc connection authentication must be
+ configured to 'none'.
+
+
+ - mtls client certificate
+
+ Configure a certificate to be used by the NED in a mutual TLS (mTLS) setup. This certificate
+ will be used for identifying the NED by the device.
+
+ SSL/TLS certificate stored in DER format but since it is entered as Base64 it is very similar to
+ PEM but without banners like:
+ "----- BEGIN CERTIFICATE -----".
+
+
+ - mtls client private-key
+
+ Private key stored in DER format but since it is entered as Base64 it is very similar to PEM but
+ without banners like:
+ "----- BEGIN PRIVATE KEY -----".
+
+ The private key is stored encrypted in NSO.
+
+
+ - mtls client key-password
+
+ Configure a optional password to the private key from the previous step. The password is
+ stored encrypted in NSO.
+
+
+# 3. ned-settings accedian-skylight_rc live-status
+--------------------------------------------------
+
+ Configure NED settings related to live-status.
+
+
+ - live-status time-to-live (default 50)
+
+ Define time-to-live for data fetched from the device via live-status.(default 50).
+
+
+# 4. ned-settings accedian-skylight_rc restconf
+-----------------------------------------------
+
+ Settings related to the RESTCONF API.
+
+
+ - restconf url-base (default auto)
+
+ Device RESTCONF API URL base. Note: this setting is automatically configured when one of the
+ pre-set RESTCONF profiles is used.
+
+
+ - restconf get ignore-http-status-code <[ ... ]>
+
+ Configure additional HTTP status codes that shall not trigger and error when the
+ NED checks the device response upon a RESTCONF GET call. By default the NED will
+ not trigger an HTTP status codes 400 (bad request) and 404 (not found) when trying
+ to fetch configuration and/or operational data from the device.
+
+ In case a device returns another status code meaning "no data was found", it needs
+ to be configured with this setting to make the NED fully operational.
+
+
+ - restconf model-discovery (default enabled)
+
+ Configure the NED to auto probe for models supported by the device. This API call is part of
+ the RESTCONF specification, but is not supported by all devices. Note: this setting is
+ automatically configured when one of the pre-set RESTCONF profiles is used.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+ - restconf capability-discovery (default enabled)
+
+ Configure the NED to auto probe for capabilities supported by the device. This API call is
+ part of the RESTCONF specification, but is not supported by all devices. Note: this setting
+ is automatically configured when one of the pre-set RESTCONF profiles is used.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+ - restconf protocol (default default)
+
+ Configure the protocol to be used by the NED when applying config to the device. By default
+ the standard RESTCONF protocol is used. For devices supporting the newer YANG-PACH extension
+ it is recommended to use "yang-patch" or "auto". The YANG-PATCH extension is superior to
+ standard RESTCONF since it does provide full transactionality when applying config to the device.
+ The setting "auto" does require that capability-discovery is enabled as well.
+
+ default - Use standard RESTCONF.
+
+ yang-patch - Use the YANG-PATCH extension. Only works with devices supporting YANG-PATCH.
+
+ auto - Enable YANG-PATCH if device advertises support for it. Otherwise use default
+ RESTCONF.
+
+
+ - restconf model-download accept-header (default application/yang)
+
+ Configure accept header to use by the built-in YANG downloader tool when fetching the models
+ from the device.
+
+
+## 4.1. ned-settings accedian-skylight_rc restconf cache
+--------------------------------------------------------
+
+ The NED is able to cache certain data that is typically probed for when a new connection is setup.
+ Caching has good impact on performance, since reduces the number of necessary round trips to the
+ device on fro subsequent connections.
+
+
+ - cache model (default disabled)
+
+ Configure the NED to cache the list of models supported by the device. Using the cache in
+ combination with models discovery enabled does save one additional round trip to the device
+ upon each connect.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+ - cache capability (default disabled)
+
+ Configure the NED to cache the list of capabilities supported by the device. Using the cache
+ in combination with capabilities discovery enabled does save one additional round trip to the
+ device upon each connect.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+ - cache url-base (default disabled)
+
+ Configure the NED to cache the url base used by the device. Using the cache in combination
+ with url-base set to 'auto' does save one additional round trip to the device upon each
+ connect.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+## 4.2. ned-settings accedian-skylight_rc restconf config
+---------------------------------------------------------
+
+ Settings related to RESTCONF operations on config.
+
+
+ - config update-method (default patch)
+
+ Configure NED behaviour when updating config on the device.
+
+ patch - Update using merge. A RESTCONF PATCH call is used.
+
+ put - Update using replace. A RESTCONF PUT call is used.
+
+
+ - config gather-updates-into-single-patch (default false)
+
+ When set to true the NED tries to gather updates on leafs with the same parent into one single
+ PATCH call. When set to false the NED generates one PATCH for each update. Default: false.
+
+
+ - config force-top-node-prefix on-create (default true)
+
+ On create operations.
+
+
+ - config force-top-node-prefix on-update (default false)
+
+ On update operations (PATCH / PUT).
+
+
+ - config yang-patch update-method (default merge)
+
+ Configure NED behaviour when updating config on the device.
+
+ merge - Update using YANG-PATCH merge.
+
+ replace - Update using YANG-PATCH replace.
+
+
+ - config get-method (default default)
+
+ Configure NED behaviour when fetching config from the device when doing sync-from etc.
+
+ default - A full depth RESTCONF GET call is issued on each top node in the
+ config tree.
+
+ use-custom-get-callpoints - Configure custom call points in the schema model. These will used
+ as paths when reading operational data. See chapter 'Configuring
+ Custom Call Points' for more information.
+
+
+ - config device-requires-consecutive-gets (default true)
+
+ A device with custom call points might require the NED to execute additional consecutive GET
+ calls on sub levels to fetch all data. Then configure this setting to true. Note: this setting
+ is automatically configured when one of the pre-set RESTCONF profiles is used.
+
+
+ - config custom-get-call-points
+
+ Specify schema paths to be used as call points when the NED is doing RESTCONF GET calls. See
+ chapter 'Configuring Custom Call Points' for more information. Note: this setting is
+ automatically configured when one of the pre-set RESTCONF profiles is used.
+
+ - path
+
+ - query depth
+
+ Used to limit the number of levels of child nodes returned by the server.
+
+ - query fields
+
+ Used to identify data nodes within the target resource to be retrieved (see RFC8040 for
+ format details).
+
+ - list-entry query depth
+
+ Used to limit the number of levels of child nodes returned by the server.
+
+ - list-entry query fields
+
+ Used to identify data nodes within the target resource to be retrieved (see RFC8040 for
+ format details).
+
+ - sub-nodes
+
+ Use this call point to populate one of its sub nodes. When a request for the path that
+ corresponds to the sub node, the NED will use this call point instead, together with a query
+ composed by the path as a fields query and optionally a depth query configured for this
+ entry.
+
+ - fields
+
+
+ - config append-content-config-query (default false)
+
+ Appends the content=config query to the url on all GET calls. This instructs the device to
+ filter out operational data from the dumps to be returned. This can have good impact on
+ sync-from performance. Required that the content query feature is supported by the device.
+
+
+### 4.2.1. ned-settings accedian-skylight_rc restconf config deviations
+-----------------------------------------------------------------------
+
+ Configure NED adaptions for device deviations.
+
+
+ - deviations list-entry move method (default default)
+
+ The RESTCONF protocol does specify special REST operations to use when moving or inserting
+ entries in lists that are ordered by user (a certain YANG annotation). Some devices
+ can not handle move operations properly. This does apply to older versions of ConfD.
+ For such devices the NED can be configured to implement a move by doing a delete on the entry
+ followed by a insert on the right position.
+
+ delete-and-insert - delete-and-insert.
+
+ default - default.
+
+
+ - deviations list-entry update wrap-in-list (default true)
+
+ When updating configuration inside a list entry, the NED by default wraps the payload in a list.
+
+ Example:
+ Updating the leaf X inside the entry with key KEY=100 in the list LIST.
+ The HTTP PATCH is used:
+
+ RESTCONF PATCH :: /restconf/data/LIST=100
+ {
+ "LIST":[{
+ "KEY":"100",
+ "X":"FOO"
+ }]
+ }
+
+ Some devices require the payload to point at the entry itself. Example:
+
+ RESTCONF PATCH :: /restconf/data/LIST=100
+ {
+ "LIST":{
+ "KEY":"100",
+ "X":"FOO"
+ }
+ }
+
+ This NED setting makes the NED adapt accordingly.
+
+
+## 4.3. ned-settings accedian-skylight_rc restconf live-status
+--------------------------------------------------------------
+
+ NED settings related to RESTCONF operations for operational data.
+
+
+ - live-status get-method (default nearest-container)
+
+ Configure NED behaviour when fetching operational data from the device.
+
+ nearest-container - Execute a RESTCONF GET using a path representing nearest
+ container / list entry in the requested path.
+
+ top-nodes - Execute a RESTCONF GET using a path representing the top node of
+ the requested path.
+
+ use-custom-get-callpoints - Configure custom call points in the schema model. These will be
+ used as paths when reading operational data.
+
+
+ - live-status append-content-nonconfig-query (default false)
+
+ Appends the content=nonconfig query to the url on all live-status GET calls. This instructs
+ the device to filter out config data from the dumps to be returned. Required that the content
+ query feature is supported by the device.
+
+
+ - live-status device-requires-consecutive-gets (default true)
+
+ A device with custom call points might require the NED to execute additional consecutive GET
+ calls on sub levels to fetch all data. Then configure this setting to true. Note: this setting
+ is automatically configured when one of the pre-set RESTCONF profiles is used.
+
+
+ - live-status custom-get-call-points
+
+ Specify schema paths to be used as call points when the NED is doing RESTCONF GET calls. See
+ chapter 'Configuring Custom Call Points' for more information. Note: this setting is
+ automatically configured when one of the pre-set RESTCONF profiles is used.
+
+ - path
+
+ - query depth
+
+ Used to limit the number of levels of child nodes returned by the server.
+
+ - query fields
+
+ Used to identify data nodes within the target resource to be retrieved (see RFC8040 for
+ format details).
+
+ - list-entry query depth
+
+ Used to limit the number of levels of child nodes returned by the server.
+
+ - list-entry query fields
+
+ Used to identify data nodes within the target resource to be retrieved (see RFC8040 for
+ format details).
+
+ - sub-nodes
+
+ Use this call point to populate one of its sub nodes. When a request for the path that
+ corresponds to the sub node, the NED will use this call point instead, together with a query
+ composed by the path as a fields query and optionally a depth query configured for this
+ entry.
+
+ - fields
+
+
+## 4.4. ned-settings accedian-skylight_rc restconf notif
+--------------------------------------------------------
+
+ Configure notification streams available on the device.
+
+
+ - notif inactive-stream-reset timeout (default 0)
+
+ Configure the maximum allowed number of seconds of inactivity on a stream. The value 0 means
+ indefinite time.
+
+
+ - notif automatic-stream-discovery (default enabled)
+
+ Let the NED automatically probe the device for supported streams.
+
+ enabled - Enabled.
+
+ disabled - Disabled.
+
+
+ - notif preferred-encoding (default xml)
+
+ json - JSON encoding.
+
+ xml - XML encoding.
+
+
+ - notif stream
+
+ Manually configure info about stream on the device. This is useful when interacting with
+ devices not capable of advertising the supported streams automatically.
+
+ - name
+
+ Name of the stream.
+
+ - path
+
+ The path to access the stream.
+
+ - replay-support (default false)
+
+ Replay support. Set to true if device supports it.
+
+ - description
+
+ Description of this stream.
+
+
+## 4.5. ned-settings accedian-skylight_rc restconf yang-push
+------------------------------------------------------------
+
+ Experimental feature. Configure yang-push enabled streams / datastores available on the device.
+
+ - restconf yang-push
+
+ - name
+
+ Name of emulated YANG-PUSH telemetry stream.
+
+ - subscription-type
+
+ Spceify type of subscription for this emulated stream.
+
+ periodic - periodic.
+
+ on-change - on-change.
+
+ - xpath-filter
+
+ Specify the xpath to the location in the device datatree to subscribe events from.
+
+ - encoding (default xml)
+
+ Specify the encoding type to be used for the telemetry data delivered as a notification to
+ NSO.
+
+ json - json.
+
+ xml - xml.
+
+
+ Either of:
+
+ - devices device ned-settings accedian-skylight_rc restconf yang-push device datastore
+
+ OR:
+
+ - devices device ned-settings accedian-skylight_rc restconf yang-push device stream
+
+ - on-change-settings dampening-period (default 0)
+
+ Specify dampening period a dampening period to be used to specify the interval that has to
+ pass before successive update records for the same subscription are generated.
+
+ - on-change-settings sync-on-start (default true)
+
+ When set to 'true' (default), in order to facilitate a receiver's synchronization, a full
+ update is sent, via a 'push-update' notification, when the subscription starts.
+
+ - on-change-settings excluded-change
+
+ Used to restrict which changes trigger an update. For example, if a 'replace' operation is
+ excluded, only thecreation and deletion of objects are reported.
+
+ create - A change that refers to the creation of a new
+ datastore node.
+
+ delete - A change that refers to the deletion of a
+ datastore node.
+
+ insert - A change that refers to the insertion of a new
+ user-ordered datastore
+ node.
+
+ move - A change that refers to a reordering of the target
+ datastore node.
+
+ replace - A change that refers to a replacement of the target
+ datastore node's
+ value.
+
+ - periodic-settings period
+
+ Specify the periodicity of the telemetry updates sent on this subscription.
+
+ - periodic-settings anchor-time
+
+ Designates a timestamp before or after which a series of periodic push updates are
+ determined. The next update will take place at a point in time that is a multiple of a
+ period from the 'anchor-time'.
+
+
+# 5. ned-settings accedian-skylight_rc logger
+---------------------------------------------
+
+ Settings for controlling logs generated.
+
+
+ - logger level (default info)
+
+ Set level of logging.
+
+ error - error.
+
+ info - info.
+
+ verbose - verbose.
+
+ debug - debug.
+
+
+ - logger java (default true)
+
+ Toggle logs to be added to ncs-java-vm.log.
+
+
+# 6. ned-settings accedian-skylight_rc general
+----------------------------------------------
+
+ General NED settings.
+
+
+## 6.1. ned-settings accedian-skylight_rc general capabilities
+--------------------------------------------------------------
+
+ Settings related to device capabilities.
+
+
+ - capabilities strict-model-revision-check (default true)
+
+ Configure the NED to do a strict revision check of the models published if possible. With this setting
+ enabled the exact revision needs to match the corresponding model built into the NED. Otherwise support
+ for it will be dropped by NSO. I.e not possible to read or write config using that model.
+
+
+ - capabilities defaults-mode-override
+
+ Configure default value mode.
+
+ report-all - Default mode 'report-all'.
+
+ explicit - Default mode 'explicit'.
+
+ trim - Default mode 'trim'.
+
+
+ - capabilities regex-exclude
+
+ Configure a pattern for matching models to exclude from the capabilities list advertised by the device.
+ To be used to limit the scope of models registered into NSO by the NED.
+
+ - pattern
+
+
+ - capabilities regex-include
+
+ Configure a pattern for matching models to include from the capabilities list advertised by the device.
+ To be used to limit the scope of models registered into NSO by the NED.
+
+ - pattern
+
+
+ - capabilities inject
+
+ Configure additional names of models / urn:s to include in the capabilities list. If a device
+ is not able to advertise any capability list, the names of the models to be used must be
+ manually added to this inject list.
+
+ - capa
+
+
+## 6.2. ned-settings accedian-skylight_rc general config
+--------------------------------------------------------
+
+ General settings related to config handling.
+
+
+ - config trans-id-method (default disabled)
+
+ A transaction id is a hash that the NED optionally can calculate upon operations like commit and
+ check-sync. This NED does by default have trans-id calculation disabled.
+ If the NED is connected to a RESTCONF device that supports the "Last-Modified" time stamp header it can
+ use this feature to calculate a transaction id. This is a fast trans-id method.
+
+ If the NED is connected to a RESTCONF device that supports the "Etag" header it can use this feature to
+ calculate a transaction id. This is also a fast trans-id method.
+
+ If the NED is connected to a RESTCONF device that supports the "content=config" query, the config-hash
+ method can be used instead. This method does however require a full fetch of config. I.e it is much
+ slower than the time stamp and etag methods.
+
+ last-modified-timestamp - Use the 'Last-Modified' http header in the response from a RESTCONF
+ GET call. Use this setting only with devices that supports it.
+
+ etag - Use the 'Etag' http header in the response from a RESTCONF GET
+ call. Use this setting only with devices that supports it.
+
+ config-hash - Calculate a transaction id based on the config dumps received from
+ the device.
+
+ disabled - Disable the calculation of transaction id completely.
+
+
+ - config inbound-transforms
+
+ Configure the following built-in transforms to be applied on the inbound payload before it is
+ passed to NSO.
+
+ sort-keys - sort-keys.
+
+ trim-namespace - trim-namespace.
+
+ restore-namespace - restore-namespace.
+
+ restore-identityrefs - restore-identityrefs.
+
+
+ - config filter-unmodeled (default false)
+
+ Filter all nodes that are not represented in the YANG schema from the JSON payload received
+ from the device, before passing it to NSO. This can be useful if config applied to the device
+ is not displayed properly in NSO. Some versions of NSO have problems reading JSON payloads
+ containing unmodelled data.
+
+
+ - config filter-invalid-list-entries (default false)
+
+ Filter all config data list entry nodes containing incomplete key sets. A list entry that does
+ not contain complete key sets will make NSO bail out the read operation completely. This
+ setting will prevent such issues.
+
+
+ - config partial-sync-from do-full-sync-from-on-error (default true)
+
+ If a partial-sync-from operation fails, the NED can automatically try a full sync-from instead. This is
+ the default behaviour. The main reason is that the partial show feature is used internally by NSO during
+ abort. I.e when a commit has failed and NSO tries to calculate a reverse diff for restoring the device
+ to its original state. In this case it is better to let the NED revert to a full sync-from instead of
+ bailing out. The latter would result in a device in unknown state. Set this setting to false to instead
+ let the NED bail out on error.
+
+
+## 6.3. ned-settings accedian-skylight_rc general live-status
+-------------------------------------------------------------
+
+ General settings related to live-status.
+
+
+ - live-status show-stats-filter (default false)
+
+ Use the filter API from NSO to do live-status requests. This API is more flexible and will
+ result in fewer round-trips to the device and possibly less data transferred from the device.
+ The live-status time-to-live settings are not applicable when using this API.
+
+
+ - live-status restore-namespaces-and-identityrefs (default true)
+
+ Make the NED go through the operational data dump and fix/restore the namespace information
+ and prefixes on identityref values etc. This is a common problem on many Skylight devices. NSO
+ is very strict about namespaces and will typically bail out the operation completely if it
+ finds a namespace issue. This setting will prevent such issues. Enabled by default.
+
+
+ - live-status filter-unmodeled (default false)
+
+ Filter all nodes that are not represented in the YANG schema from the JSON payload received
+ from the device, before passing it to NSO. This can be useful if config applied to the device
+ is not displayed properly in NSO. Some versions of NSO have problems reading JSON payloads
+ containing unmodelled data.
+
+
+ - live-status inbound-transforms (default sort-keys)
+
+ Configure the following built-in transforms to be applied on the inbound payload before it is
+ passed to NSO.
+
+ sort-keys - sort-keys.
+
+ trim-namespace - trim-namespace.
+
+ restore-namespace - restore-namespace.
+
+ restore-identityrefs - restore-identityrefs.
+
+
+ - live-status filter-invalid-list-entries (default false)
+
+ Filter all config data list entry nodes containing incomplete key sets. A list entry that does
+ not contain complete key sets will make NSO bail out the read operation completely. This
+ setting will prevent such issues.
+
+
+## 6.4. ned-settings accedian-skylight_rc general notif
+-------------------------------------------------------
+
+ General settings related to notifications.
+
+
+ - notif filter-unmodeled (default false)
+
+ Filter all nodes that are not represented in the YANG schema from the JSON payload received
+ from the device, before passing it to NSO. This can be useful if config applied to the device
+ is not displayed properly in NSO. Some versions of NSO have problems reading JSON payloads
+ containing unmodelled data.
+
+
+ - notif inbound-transforms (default sort-keys)
+
+ Configure the following built-in transforms to be applied on the inbound payload before it is
+ passed to NSO.
+
+ sort-keys - sort-keys.
+
+ trim-namespace - trim-namespace.
+
+ restore-namespace - restore-namespace.
+
+ restore-identityrefs - restore-identityrefs.
+
+
+ - notif filter-invalid-list-entries (default false)
+
+ Filter all config data list entry nodes containing incomplete key sets. A list entry that does
+ not contain complete key sets will make NSO bail out the read operation completely. This
+ setting will prevent such issues.
+
+
+ - notif restore-namespaces-and-identityrefs (default true)
+
+ Make the NED go through the operational data dump and fix/restore the namespace information
+ and prefixes on identityref values etc. This is a common problem on many Skylight devices. NSO
+ is very strict about namespaces and will typically bail out the operation completely if it
+ finds a namespace issue. This setting will prevent such issues. Enabled by default.
+
+
diff --git a/accedian-skylight_rc/README-rebuild.md b/accedian-skylight_rc/README-rebuild.md
new file mode 100644
index 00000000..c65e1d12
--- /dev/null
+++ b/accedian-skylight_rc/README-rebuild.md
@@ -0,0 +1,787 @@
+# Table of contents
+-------------------
+```
+ 1. General
+ 1.1 Overview
+ 1.2 Using the built-in tool for YANG download
+ 1.3 Rebuild the NED with the downloaded YANG models
+ 1.4 Reload the NED package in NSO
+ 2. Removing all downloaded YANG models
+ 3. Using the built-in downloader tool for a custom download
+ 3.1 Creating a custom download
+ 4. Alternative download methods
+ 4.1 Copy the files into the NED source directory
+ 5. Rebuilding the NED using a custom NED-ID
+ 5.1 Rebuild with a custom NED-ID
+ 5.2 Exporting the rebuilt NED package
+ 6. YANG fixes applied when rebuilding the NED
+ 6.1 General
+ 6.2 Fixes listed by schema paths
+ 6.3 Fixes listed by YANG file paths
+ 6.4 Other fixes
+ 7. Advanced: repairing YANG modules
+ 7.1 Different kinds of YANG related issues
+ 7.2 Compile-time issues
+ 7.3 Run-time issues
+```
+
+
+# 1. General
+------------
+
+## 1.1 Overview
+
+The accedian-skylight_rc NED is delivered without any YANG models in the package.
+
+The models do need to be downloaded, followed by a rebuild and reload of the package before the NED can be fully operational.
+
+This NED contains an optional built-in tool that makes downloading of the device models easy.
+
+Alternatively, manual download is possible as described in chapter 4.
+
+The NED package (i.e with no device models) must first be properly configured in a running NSO environment prior to usage of the downloader tool. The steps described in chapter 1.1 through 1.3 in the README.md must be done prior to this step.
+
+## 1.2 Using the built-in tool for simple YANG download
+
+The downloader tool is implemented as an NSO RPC which can be invoked for instance from the NSO CLI.
+
+When the tool is executed the NED will automatically connect to the device for which the YANG models shall be downloaded. The device will be requested to return a list of supported models when the NED is probing it for capabilities.
+
+This list of models will be the base used by the tool when downloading the models. During operation the tool will also scan each downloaded YANG file for additional dependencies through import/include found. The tool will try to download all such dependency YANG files as well.
+
+ Since currently all Accedian-skylight devices tested with this NED do not support direct YANG model download from the device, the models need to be fetched from elsewhere.
+
+ By default the Accedian-skylight repository on github is used as source for all YANG files.
+
+### Simple Usage
+
+ The Accedian-skylight device does not support model discovery as specified by RFC8040.
+ In order to download the yang models for the device, several configuration needs to be done on the NED side to be able to pull the model from the GIT repo.
+
+ 1. Disabling auto-discovery features of the NED:
+ By default, NED will try to discover the RESTCONF URL base, along with capabilities and yang models. Since the device does not support these features, they need to be disabled:
+ ```
+ ned-settings accedian-skylight_rc restconf url-base "/restconf"
+ ned-settings accedian-skylight_rc restconf model-discovery disabled
+ ned-settings accedian-skylight_rc restconf capability-discovery disabled
+
+ ```
+ Commit the changes and proceed to the next step.
+
+ 2. Inject modules that needs to be downloaded.
+ By default, the NED has no knowledge of the yang module names that are needed, since the module names are not advertised by Accedian Skylight gateway.
+ In order to make the module names known to the NED, they have to be manually injected using ned-settings:
+ ```
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-alert
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-alert-metric
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-extensions
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-metadata
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-net-type
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-sat
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-sat-capabilities
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service-endpoint
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service-endpoint-ne
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service-endpoint-nid
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service-endpoint-ssc
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-service-endpoint-unmanaged
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-session-rfc2544
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-session-throughput
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-session-twamp-light
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-session-y1564
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-throughput-capabilities
+ ned-settings accedian-skylight_rc general capabilities inject Accedian-twamp-light-capabilities
+ ```
+ Note: this is the extensive list of modules. It is not mandatory to use all the modules - eg if Accedian-session-y1564 is not actually needed, it can be ommited in the list, thus NED will skip it for download. Once done, commit the ned-settings.
+
+ 3. List the download profiles
+ To ease the download process, the NED implements necessary information to download the Accedian Skylight yang model from the following GIT repository: https://github.com/Accedian/skylight-yang.git
+ To list the download profile, run the following RPC:
+ ```
+ admin@ncs# devices device rpc rpc-list-profiles list-profiles
+ profile {
+ name Accedian-skylight-git
+ description Download the Accedian-skylight models. Download is done from the Accedian Skylight github repo.
+ }
+ admin@ncs#
+ ```
+ NOTE: the download profile is based on the 'release/24.09' tag. If another GIT tag is needed, please check chapter 3 for additional options
+
+ 4. Downloading the models:
+ ```
+ admin@ncs# devices device accsky-1 rpc rpc-get-modules get-modules profile Accedian-skylight-git
+ result
+ Fetching modules:
+ Accedian-alert - http://accedian.com/ns/yang/alert (4387 bytes)
+ fetching imported module Accedian-alert-type
+ skipping import 'ietf-yang-types', matches '(ietf-.*)'
+ Accedian-alert-metric - http://accedian.com/ns/yang/alert/metric (6328 bytes)
+ Accedian-extensions - http://accedian.com/ns/yang/extensions (1064 bytes)
+ Accedian-metadata - http://accedian.com/ns/yang/metadata (1700 bytes)
+ Accedian-net-type - http://accedian.com/ns/yang/types/net (3294 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ Accedian-sat - http://accedian.com/ns/yang/session/sat (2531 bytes)
+ Accedian-sat-capabilities - http://accedian.com/ns/yang/session/cap/sat (2374 bytes)
+ fetching imported module Accedian-service-endpoint
+ fetching imported module Accedian-session-type
+ Accedian-service - http://accedian.com/ns/yang/service (6835 bytes)
+ fetching imported module Accedian-session
+ fetching imported module Accedian-service-endpoint-type
+ fetching imported module Accedian-service-type
+ fetching imported module Accedian-type
+ Accedian-service-endpoint - http://accedian.com/ns/yang/service/endpoint (6369 bytes)
+ Accedian-service-endpoint-ne - http://accedian.com/ns/yang/service/endpoint/ne (3053 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ Accedian-service-endpoint-nid - http://accedian.com/ns/yang/service/endpoint/nid (2368 bytes)
+ Accedian-service-endpoint-ssc - http://accedian.com/ns/yang/service/endpoint/ssc (1707 bytes)
+ Accedian-service-endpoint-unmanaged - http://accedian.com/ns/yang/service/endpoint/unmanaged (1308 bytes)
+ Accedian-session-rfc2544 - http://accedian.com/ns/yang/session/sat/rfc2544 (13283 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ skipping import 'ietf-yang-types', matches '(ietf-.*)'
+ Accedian-session-throughput - http://accedian.com/ns/yang/session/throughput (5999 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ Accedian-session-twamp-light - http://accedian.com/ns/yang/session/twamp/light (8493 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ Accedian-session-y1564 - http://accedian.com/ns/yang/session/sat/y1564 (14384 bytes)
+ skipping import 'ietf-inet-types', matches '(ietf-.*)'
+ skipping import 'ietf-yang-types', matches '(ietf-.*)'
+ Accedian-throughput-capabilities - http://accedian.com/ns/yang/session/cap/throughput (2692 bytes)
+ Accedian-twamp-light-capabilities - http://accedian.com/ns/yang/session/cap/twamp/light (2710 bytes)
+ Accedian-alert-type - http://accedian.com/ns/yang/alert/type (1366 bytes)
+ Accedian-session-type - http://accedian.com/ns/yang/session/type (3153 bytes)
+ Accedian-session - http://accedian.com/ns/yang/session (6067 bytes)
+ Accedian-service-endpoint-type - http://accedian.com/ns/yang/service/endpoint/type (3496 bytes)
+ Accedian-service-type - http://accedian.com/ns/yang/service/type (823 bytes)
+ Accedian-type - http://accedian.com/ns/yang/types (2199 bytes)
+ fetched and saved 25 yang module(s) to /Users/lpanduru/01_WORK/03_STASH/accedian-skylight_rc/test/drned/drned-ncs/packages/accedian-skylight_rc/src/yang
+ admin@ncs#
+ ```
+ After this step, the NED contains the Accedian Skylight yang models in the proper location, which means the NED needs to be rebuilt with the new model.
+
+For more advanced options using the downloader tool, see chapter 3.
+
+Chapter 5('rpc get-modules') in README.md describes more details about the downloader tool, including all available command line arguments.
+
+## 1.3 Rebuild the NED with the downloaded YANG models
+The NED must be rebuilt when the device models have been downloaded and stored properly.
+
+Very often there are known issues related to building the device YANG models. Such issues
+typically cause compiler errors or unwanted runtime errors/behaviours in NSO.
+
+The NED is configured to take care of all currently known build/runtime issues. It will automatically
+patch the problematic files such that they do build properly for NSO. This is done using a set of YANG
+build recipes bundled with the NED package.
+
+Note that the work with adapting the YANG build recipes is an ongoing process. If new issues are found
+the Cisco NSO NED team will update the recipes accordingly and then release a new version of the NED.
+
+It is strongly recommended that end users report new YANG build issues found back to the Cisco NSO NED team
+through a support request
+
+The NED provides two alternatives for rebuilding. It can be done either through NSO using a built-in tool, or by invoking gnu make in an external shell.
+
+### Rebuild using the built-in tool
+
+The built-in rpc *rebuild-package* does rebuild the NED package by automatically invoking gnu make in the source directory of the package installation root.
+
+```
+admin@ncs# devices device dev-1 rpc rpc-rebuild-package rebuild-package
+```
+
+Note: this rpc can take a long time to finish. This is because compiling YANG models is a very time consuming task.
+
+Additional arguments:
+
+```
+verbose : Print the full output returned from gnu make. By default the output is only printed upon errors.
+profile : Apply a certain build profile when rebuilding.
+ned-id : Parameters relevant for customizing the NED ID. See chapter 5 for further info.
+```
+
+### Rebuild using a separate shell
+
+The NED must be rebuilt from inside the NED package installation root (i.e $NED_ROOT_DIR configured in chapter 1.1 in README.md).
+
+To rebuild the NED do as follows:
+
+```
+> cd $NED_ROOT_DIR/src
+> make clean all
+```
+
+
+## 1.4 Reload the NED package in NSO
+When the NED has been successfully rebuilt with the device models it is necessary to reload the package
+into NSO.
+
+### Reloading
+
+Use the following NSO CLI command:
+
+```
+admin@ncs# packages reload
+```
+
+Note, if the NED packages has been rebuilt with a new NED-ID as described in chapter 5 it will
+be necessary to add 'force' to the reload command:
+
+```
+admin@ncs# packages reload force
+```
+
+
+
+# 2. Removing all downloaded YANG models
+
+If a new set of YANG models is going to be downloaded for an already installed and reloaded NED it is highly recommended to first remove all old device YANG models from the previous download.
+
+
+## 2.1 Clean the NED source directory
+
+Use the following make target to remove all previously downloaded YANG.
+
+### Clean using the built-in tool
+
+```
+admin@ncs# devices device dev-1 rpc rpc-clean-package clean-package
+```
+
+### Clean using a separate shell
+
+```
+> cd $NED_ROOT_DIR/src
+> make distclean
+```
+
+
+
+# 3. Using the built-in downloader tool for a custom download
+
+Using a pre-configured download profile is the easiest way for downloading the device YANG models.
+
+In case this is not a suitable approach, the downloader tool has a number of additional arguments that allows
+for doing a custom download. For instance by limiting the scope for downloading the YANG models.
+
+## 3.1 Creating a custom download
+
+Use the 'module-include-regex' and 'module-exclude-regex' to customize the download scope.
+Both arguments shall be specified as regular expressions.
+
+The easiest way to get the arguments right is by using the RPC named 'list-modules'
+
+ Note: the Accedian Skylight does not support model discovery for listing modules. For this reason, the modules needs to be specified using ned-settings. Please check chapter 1.2 to see how to inject modules. Once the models are known to the NED, custom download procedure can be follwed.
+ By default, the NED implements a download profile that is based on the Accedian Skylight yang model git repo, for the tag release/24.09.
+ If another git tag is needed, a custom download RPC can be used from the NED side:
+
+ ```
+ admin@ncs# devices device accsky-1 rpc rpc-get-modules get-modules remote { git { repository https://github.com/Accedian/skylight-yang.git checkout origin/release/24.09 dir skylight-gateway/accedian/public } } module-exclude-regex "(ietf-.*)"
+ ```
+
+ Explanations:
+ - remote: this is the method of download. in the above example, we are using git method
+ - repository: this is the git repository
+ - checkout: this is the git tag or branch to be used for the model
+ - dir: the path in the git repo where the models are stored
+ - module-exclude-regex: regular expression for modules to be excluded from the download. in the above example, all modules matching ietf-.* are excluded because they are already included in NSO distribution
+
+See chapter 5 in README.md for more details about the RPC commands get-modules and list-modules.
+
+
+
+# 4. Alternative download methods
+
+The device models can of course also be downloaded manually. To use this option the NED package
+must first be unpacked. The steps described in README.md chapter 1.1 must be done first. It is preferred to do
+the chapter 1.2 and 1.3 steps in README.md as well.
+
+
+## 4.1 Copy the files into the NED source directory
+
+When the YANG models have been downloaded manually, all the files need to be copied into the source
+directory of the NED installation:
+
+```
+> cp /*.yang $NED_ROOT_DIR/src/yang
+```
+
+Note, YANG files with names like `@.yang` need to be renamed to .yang.
+This is because of a limitation in the current NED make system.
+
+This manual procedure is equivalent to using the downloader tool with a path to local directory
+as remote source. See chapter 5('rpc get-modules') in README.md for more info.
+
+Please do not remove any of the the yang files used internally by the NED in the $NED_ROOT_DIR/src/yang
+
+This applies to the following files:
+
+```
+tailf-internal-rpcs.yang
+tailf-internal-rpcs-custom.yang
+tailf-ned-accedian-skylight_rc-meta.yang
+tailf-ned-accedian-skylight_rc-meta-custom.yang
+tailf-ned-accedian-skylight_rc-oper.yang
+tailf-ned-accedian-skylight_rc-stats.yang
+```
+
+The best way to clean the source directory is to follow the steps in chapter 5.
+
+# 5. Rebuilding the NED using a custom NED-ID
+
+A common use case is to have many different versions of the same device in the network controlled
+by NSO. Each device will then have its unique set of YANG files which this NED has to be rebuilt for.
+
+To setup NSO for this kind of scenario, each built flavour of the built NED must have its own unique NED-ID.
+
+This will make NSO allow multiple versions of the same NED package to co-exist.
+
+Rebuilding with a custom NED-ID can be done in the alternative ways:
+
+1. Through the built-in rpc, using the following additional arguments:
+ - suffix
+ - major
+ - minor
+2. Through gmake in a separate shell, using the following additional make variables:
+ - NED_ID_SUFFIX
+ - NED_ID_MAJOR
+ - NED_ID_MINOR
+
+The default NED-ID is: accedian-skylight_rc-gen-3.0
+
+
+## 5.1 Rebuild with a custom NED-ID
+
+Do as follows to build each flavour of the accedian-skylight_rc NED. Do it in iterations, one at the time:
+
+ 1. Follow the instructions in chapter 1.1 to 1.3 in README.md to unpack the NED and install a device instance
+ using it. Make sure a unique location is selected and update the environment variable $NED_ROOT_DIR
+ accordingly and configure a device instance.
+
+ 2. Follow the instructions in chapter 1.2 to download the YANG models matching the configured
+ device.
+
+ 3. Follow the instructions in chapter 1.3 to rebuild the NED.
+
+ #### Alternative 1: Use the built-in rpc to rebuild with custom NED-ID
+
+ Use any combination of the additional *ned-id* arguments *major, minor* and *suffix*
+
+ Two examples showing NED-ID adapted for "device version" 21.6:
+
+ ```
+ admin@ncs# devices device dev-1 rpc rpc-rebuild-package rebuild-package ned-id suffix -21.6
+ ```
+
+ This will generate a NED-ID like: 'accedian-skylight_rc-r21.6-gen-1.0'
+
+ ```
+ admin@ncs# devices device dev-1 rpc rpc-rebuild-package rebuild-package ned-id major 21 minor 6
+ ```
+
+ This will generate a NED-ID like: 'accedian-skylight_rc-gen-21.6'
+
+ #### Alternative 2: Rebuild the NED using gnu make from a shell
+
+ Add any combination of the additional make variables 'NED_ID_SUFFIX','NED_ID_MAJOR' and 'NED_ID_MINOR' to the command line.
+
+ Two examples showing NED-ID adapted for "device version" 21.6:
+
+ ```
+ > make NED_ID_SUFFIX=-r21.6 clean all
+ ```
+
+ This will generate a NED-ID like: 'accedian-skylight_rc-r21.6-gen-1.0'
+
+ ```
+ > make NED_ID_MAJOR=21 NED_ID_MINOR=6 clean all
+ ```
+
+ This will generate a NED-ID like: 'accedian-skylight_rc-gen-21.6'
+
+ 4. Follow the instructions in chapter 1.4 to reload the NED package. The rebuilt NED package
+ will now have the NED-ID: `accedian-skylight_rc-gen-.`
+
+ This is detected by NSO and will have the following side effects:
+
+ - The default NED-ID will no longer exist after the packages has been reloaded
+ in NSO. Hence, any devices configured with the default NED-ID can no longer exist either.
+
+ - It is recommended to delete all device instances using the default NED-ID before
+ reloading the packages in NSO.
+
+ - It is necessary to use 'packages reload force' when reloading the packages in NSO.
+
+ 5. Reconfigure the device instance from step #1 in this list. Now use the new NED-ID
+
+ 6. Verify functionality by executing a 'sync-from' on the configured device instance.
+
+
+
+## 5.2 Exporting the rebuilt NED package
+
+When the NED has been rebuilt with a new NED-ID, it typically needs to be exported as a separate NED package. This new package will then be a ready to use NED containing the raw as well as the customized and compiled versions of the third party YANG models. This package can then be loaded into a new NSO instance etc just like any other NED.
+
+The NED has a built-in tool to make the export procedure easy. It is implemented as an additional rpc which can be invoked through the NSO CLI or any other northbound NSO interface.
+
+It copies all relevant elements from the "source" directory of rebuilt NED into a tar.gz archive file. The top dir of the archive will be named in accordance with the generated NED-ID, i.e. accedian-skylight_rc