<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="exp"
  docName="draft-fl-nmop-device-yang-vendor-mapping-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
  <front>
    <title abbrev="ietf-mapping-vendors">An Experiment: Mapping IETF Device YANG Models to Vendors</title>
    <seriesInfo name="Internet-Draft" value="draft-fl-nmop-device-yang-vendor-mapping-00"/>
    <author fullname="Ian Farrer" initials="I." surname="Farrer">
      <organization>Deutsche Telekom AG</organization>
      <address>
        <postal>
          <city>Bonn</city>
          <code>53227</code>
          <country>DE</country>
        </postal>
        <email>ian.farrer@telekom.de</email>
      </address>
    </author>
    <author fullname="Kris Lambrechts" initials="K." surname="Lambrechts">
      <organization>Intwine</organization>
      <address>
        <email>kris@intwine.net</email>
        <uri>https://www.intwine.net</uri>
      </address>
    </author>

    <date day="27" month="October" year="2026"/>

    <area>Operations and Management</area>
    <workgroup>NMOP</workgroup>
    <keyword>NETCONF, YANG, device, models, vendor, proprietary</keyword>
    <abstract>
      <t>This document describes an experimental implementation of a YANG to YANG translation function layer
        providing a northbound interface for configuring networking devices using a set of IETF 'device' YANG modules.
        The southbound interface of the function implements the proprietary, vendor YANG modules which are implemented natively on
        devices to be configured. The expected benefits of such an approach are the ability to provide a stable, standardised, and
        vendor/device agnostic interface for the configuration and maintenance of devices.
        The main purposes for this experiment is to validate the overall approach, and to identify,
        and describe the different YANG-to-YANG translation techniques that can be used.</t>
    </abstract>
  </front>

  <middle>
    <section>
      <name>Introduction</name>

        <t>IETF device YANG models provide a standardized interface for configuring
          network devices. However, devices may implement vendor-specific YANG models
          natively, requiring management systems to accommodate differences between
          vendors. A translation layer between these models could allow
          management systems to use IETF device models while interacting with devices
          through their native models.</t>

        <t>The need for tooling to support this approach was highlighted at the IAB
          Workshop on the Next Era of Network Management Operations (NEMOPS).
          Section 3.1.1 of the workshop report <xref target="RFC9968"/> notes:</t>

        <blockquote>
          <t>Additionally, the lack of open-source Network Management System (NMS)
            implementations, tools, and device model implementations was
            identified as a significant barrier to advancing standardization
            efforts. The IETF could play a key role in fostering and enabling
            collaborations to address these challenges. While the IETF does not
            itself build tools, it was suggested that having a translation tool
            that runs outside the network device to map IETF device models to
            vendor-specific ones would be beneficial.</t>
        </blockquote>

        <t>This document explores the suggested approach through an experimental
          implementation of a YANG-to-YANG translation layer.
          The layer runs outside the network device and exposes a northbound
          interface based on IETF device YANG modules. Its southbound interface
          uses the vendor-specific YANG modules implemented natively on the
          device.</t>

        <t>The experiment aims to assess whether this approach can provide a stable,
          standardized configuration interface across vendors and devices, and to
          identify and describe the YANG-to-YANG translation techniques needed to
          support it.</t>
    </section>

    <section anchor="status" title="Status of this document">
      <t>This document is experimental. Its main goal is to evaluate a
        translation layer between IETF device YANG models and vendor-specific
        YANG models implemented natively on network devices, and to identify
        and describe the YANG-to-YANG translation techniques needed to
        support this approach.</t>

      <t>The experiment consists of verifying whether the translation layer
        can support device configuration through an interface based on IETF
        device YANG models in operational use cases. The experiment can be
        deemed successful if at least one open-source implementation
        demonstrates correct translation and application of configuration
        on network devices from multiple vendors.</t>
    </section>

    <section>
      <name>Terminology</name>
      <t>Layer: A logical abstraction representing a level of interaction between the management system and the network device, typically used to describe the northbound and southbound interfaces in the YANG-to-YANG translation experiment.</t>
      <t>Northbound interface: The interface exposed by the translation layer to the management system, based on IETF device YANG modules.</t>
      <t>Southbound interface: The interface used by the translation layer to interact with the network device, based on vendor-specific YANG modules.</t>
      <t>Device model: TBD RFC8969</t>
    </section>

     <section>
        <name>Problem Statement</name>
          <t>Since the publication of the original YANG modeling language <xref target="RFC6020"/> in 2010, the IETF has
           standardized a large number of 'device' YANG modules. <xref target="RFC8969"/> defines device models as follows:
          </t>

          <blockquote>
            <t>Refers to the Network Element YANG data model described in <xref target="RFC8199"/> or the device configuration
              model disucssed in <xref target="RFC8309"/>.</t>

            <t>Device models are also used to refer to model a function embedded in a device (e.g., Network
              Address Translation (NAT) <xref target="RFC8512"/>, Access Control Lists (ACLs)
              <xref target="RFC8519"/>).</t>
          </blockquote>

          <t>The experiment described in this document is specifically concerned with model implementations that
            are separate from the device being managed.</t>

          <t>These models cover the configuration and management of a very diverse set of protocols
            and technologies, and generally take the approach of modelling the necessary parameters
            and options for a particular technology as defined by the relevant the technical specification
            which defines that technology. Therefore, the IETF's YANG device models contain a common set of
            configuration and mangement nodes that are relevant for any standard compliant implementation.
          </t>

          <t>Despite the number of available device YANG models, there has been a low rate of implementation
            in devices and software either available commercially, or as open-source. In many cases, no publically
            available implementations exist.
          </t>

          <t>However, native implementations of NETCONF/YANG management in commercially available
            networking devices have become commonplace. These implementations are generally based on proprietary
            YANG modules defined by the vendor and supplied as part of a software release. The structures
            of such YANG modules differ vastly from the IETF's device models, from vendor to vendor,
            and often across different platforms and device families from the same vendor.
          </t>

          <t>Vendors' proprietary YANG implementations tend to be comprehensive, in that they expose
            configuration and state for all of the functionality that a given device offers.
            This may be a superset of the functions defined in the IETF's device YANG models for
            any given technolgy. Unique functionality offered by one vendor's implementation
            of a technology versus another's is often a key factor in a customer's decision to purchase.
            The chosen vendor's native YANG models contain the necessary nodes for this functionality, so
            it is ready to use on delivery of the device.
         </t>

         <t>This does not easily align with the IETF's processes for publishing and updating YANG models,
           which may take a number of years. In addition, a vendor's proprietary features or extensions
           to a given technology that are not standardized are unlikely to be included in an IETF
           device model.
         </t>

         <t>The work which is necessary to integrate vendor's proprietary models into an
           automation system is significant. Multiple vendors and platforms, each with their own
        disparate proprietary models make this problem significantly worse. Vendor's model also change quite
        regularly with each release of the device's operating software as features and capabilites
        are added and removed bringing a high maintenance overhead.</t>

<!-- Probably need to describe problems of not having a vendor agnostic RFS here as well -->

      <t>From the perspective of the automation implementer, this presents a dichotomy: the IETF's device models
        present a stable, device and vendor agnostic interface, but they are not widely implemented and
        do not offer differentiating, vendor specific functionality. Vendor proprietary models are comprehensive
        in their nature, but have a high cost for implementation and maintainance.</t>

      <t>The solution which proposed by this document is to produce an abstraction layer, implementing
        the applicable IETF device YANG models at its northbound interface, and integrating with vendor's
        proprietary YANG models at the southbound side. The abstraction layer is implemented as a software
        function using a 'middle-box' approach, which is separated  from the device(s) which
        it is responsible for managing.</t>
      <figure>
        <name>Offbox YANG Translation Function Between Orchestrator and Device</name>
        <artwork type="ascii-art"><![CDATA[
         +----------------------------------------------+
         |                 Orchestrator                 |
         |            (IETF device models)              |
         +----------------------------+-----------------+
                                      |
                                      | Northbound
                                      | (IETF device YANG)
                                      v
         +----------------------------------------------+
         |          Offbox Translation Function         |
         |                 (YANG -> YANG)               |
         +----------------------------+-----------------+
                                      |
                                      | Southbound
                                      | (Vendor YANG)
                                      v
         +----------------------------------------------+
         |            Network Device (Native)           |
         |         (Vendor-specific YANG modules)       |
         +----------------------------------------------+
        ]]></artwork>
      </figure>

      <section>
        <name>Advantages of the Approach</name>
          <t>A common, IETF defined northbound interface provides a stable interface which higher
            layers in the automation architecture can interface with. This interface is vendor and
            device agnostic.</t>

          <t>The common, YANG northbound interface simplifies the integration of layered
            implementations.</t>

          <t>Using a middle-box approach, combined with open-source implementations gives the integrator control
           and flexibility to adapt the implemenation according to their requirements. If an integration
           requires proprietary</t>
      </section>
    </section>

    <!-- </section> -->

    <section anchor="overview">
      <name>Overview</name>
      <t>The experiment selects a representative set of IETF device YANG modules for an
        MPLS Label Edge Router (LER) providing Layer 3 VPN services. Its service logic produces device
        configuration expressed using the IETF models. A translation layer, running as part of the
        orchestration system, converts this configuration into instance data for the native YANG models
        used by each device. The resulting native configuration is applied through the existing NETCONF
        southbound interface. The current implementation targets Cisco IOS XR and Juniper Junos (cRPD).
      </t>

      <table anchor="implemented-models">
        <name>IETF Device Modules with Implemented Configuration Mappings</name>
        <thead>
          <tr><th>Technology</th><th>IETF YANG Module</th><th>Specification</th></tr>
        </thead>
        <tbody>
          <tr><td>System management</td><td>ietf-system</td><td><xref target="RFC7317"/></td></tr>
          <tr><td>Interfaces</td><td>ietf-interfaces</td><td><xref target="RFC8343"/></td></tr>
          <tr><td>IPv4 addressing</td><td>ietf-ip</td><td><xref target="RFC8344"/></td></tr>
          <tr><td>Subinterfaces</td><td>ietf-if-extensions</td><td><xref target="I-D.ietf-netmod-intf-ext-yang"/></td></tr>
          <tr><td>VLAN encapsulation</td><td>ietf-if-vlan-encapsulation</td><td><xref target="I-D.ietf-netmod-sub-intf-vlan-model"/></td></tr>
          <tr><td>Network instances</td><td>ietf-network-instance</td><td><xref target="RFC8529"/></td></tr>
          <tr><td>Routing framework</td><td>ietf-routing</td><td><xref target="RFC8349"/></td></tr>
          <tr><td>MPLS interfaces</td><td>ietf-mpls</td><td><xref target="RFC8960"/></td></tr>
          <tr><td>IS-IS</td><td>ietf-isis</td><td><xref target="RFC9130"/></td></tr>
          <tr><td>LDP</td><td>ietf-mpls-ldp</td><td><xref target="RFC9070"/></td></tr>
          <tr><td>BGP</td><td>ietf-bgp</td><td><xref target="I-D.ietf-idr-bgp-model"/></td></tr>
          <tr><td>Key chains</td><td>ietf-key-chain</td><td><xref target="RFC8177"/></td></tr>
          <tr><td>Routing policy</td><td>ietf-routing-policy</td><td><xref target="RFC9067"/></td></tr>
          <tr><td>BGP policy</td><td>ietf-bgp-policy</td><td><xref target="I-D.ietf-idr-bgp-model"/></td></tr>
        </tbody>
      </table>

      <t><xref target="implemented-models"/> lists the main modules whose configuration data is
        consumed by the mappings. Supporting imports used only for types, identities, or groupings,
        and the constituent BGP submodules, are not listed separately. The implementation uses
        the latest available revisions of the respective modules at the time of implementation.
        The implementation is suffciently complete to configure the involved devices to perform
        their role in the network. Further work may be needed to cover the full mapping
        of each module.
        </t>

      <section anchor="declarative-mapping">
        <name>Declarative Configuration Mapping</name>

        <t>The mapping expresses the native configuration that corresponds to a desired IETF
          configuration. YANG schemas provide typed data bindings for both sides, and mapping
          functions written in Acton construct native configuration trees from the source trees.
          These functions are deterministic and retain no state between evaluations. Device
          sessions, persistence, and the calculation and application of configuration changes
          are handled by the surrounding orchestration system. A mapping therefore describes
          the required configuration without prescribing a sequence of device commands.</t>

        <t>The translation runs after the configuration contributions from resource-facing
          services have been merged for a device. Related source trees are processed together:
          interfaces, routing protocols, network instances, and key chains can refer to one
          another. For example, a BGP neighbour can reference a peer group and a key chain, while
          a VPN interface references its network instance. Resolving these relationships against
          the combined input avoids making the result depend on the order in which individual
          services contribute their configuration.</t>

        <t>Mapping can involve renaming and restructuring nodes, converting values, or producing
          several native objects from one source object. For example, an IPv4 address and prefix
          length become an address and dotted-decimal netmask in the IOS XR model, and an address
          with a prefix length on a logical interface in the Junos model. IETF routing policy
          statements become structured Junos policy configuration or routing policy language
          text carried in IOS XR YANG leaves. These differences are contained in the vendor
          mappings, allowing the service logic to use the common IETF models.</t>

      </section>

      <section anchor="model-augments">
        <name>Extending the Models with Augments</name>

        <t>A standard model may lack a node needed to express a particular deployment requirement
          or a vendor-specific behaviour. The YANG augment mechanism <xref target="RFC7950"/>
          allows a separate module to add nodes to an existing schema. This makes it possible to
          keep the published IETF modules unchanged while providing the additional inputs required
          by the translation.
        </t>

        <t>The current implementation uses augmentations to add BGP/MPLS L3VPN attributes to
          the IETF network instance model. It also illustrates the use of augmentations to handle
          vendor behaviour. It adds ios-xr-policy-type to select regular, hierarchical, or both forms
          of a policy on IOS XR, and Junos-match-type to select regular, inverted, or both forms
          of a community set on Junos. These are implementation extensions, not IETF-standardised
          nodes. Augments preserve access to such capabilities while keeping the common policy
          structure.</t>
      </section>

      <section anchor="multiple-vendors">
        <name>Supporting Additional Vendors and Releases</name>

        <t>Each supported device type registers mappings from the common IETF models to its
          native schema. Adding a vendor, platform, or software release consists of providing
          the appropriate target schema and implementing and testing the mappings for the
          required configuration subset. Shared source bindings and value conversion helpers
          can be reused. The existing IOS XR and Junos mappings demonstrate how the same device
          model can support different native hierarchies without duplicating the service logic.</t>

        <t>This separation confines many changes in vendor models to the translation layer.
          It also permits gradual adoption: translated configuration can coexist with
          contributions expressed directly in native models, provided that thee results
          are mergeable. Common service logic can move to the IETF models as mappings become
          available, while vendor-specific configuration remains accessible.</t>
      </section>

      <section anchor="offbox-sharing">
        <name>Offbox Translation and Shared Implementation</name>

        <t>Running the translation offbox allows operators to use IETF device models with
          equipment that exposes only native YANG models. Mapping fixes, additional model
          coverage, and local augments can be deployed independently of the device software
          release cycle. The operator controls the translation code and can inspect and test
          the generated native configuration before deployment. Higher layers gain a common
          interface through the IETF device models, reducing their dependence on individual
          vendor model revisions.</t>

        <t>The StratoWeave implementation is published as open source
         <xref target="STRATOWEAVE-TRANSLATE"/>, with the vendor
          mapping modules carrying a BSD-3-Clause licence. Operators can inspect, adapt, and
          contribute mappings and tests, including fixes for differences discovered in actual
          deployments. Sharing this work allows operators using the same platforms to build
          on a common implementation instead of each maintaining an independent integration.
          We intend to make the mapping functions useable independently of the orchestration
          runtime, making them reusable in other integrations.</t>

        <t>A shared implementation can provide executable examples of how IETF models apply
          to real devices. Comparing mappings and test cases across operators and vendors
          helps expose ambiguous semantics, missing nodes, and differences in feature support.
          That evidence can inform both improvements to the mappings and further development
          of the IETF models.</t>
      </section>

      <section anchor="standalone-translation">
        <name>Standalone Translation Function</name>
        <t>Under the current experimental implementation, the tranlation logic can only
          usefully be executed as part of a StratoWeave orchestrator runtime. It is the
          author's explicit intention to make the translation logic reusable with other
          orchestration / automation solutions and tools.</t>

        <t>The standalone translation function we propose would be realized in the form of
          a standalone binary that accepts a complete device configuration as input. That
          configuration would be according to the IETF device models, possibly combined with
          with vendor-modeled YANG modules where desired. The output would be a
          device-specific configuration suitable for direct application to the target device.</t>

          <t>We welcome feedback and contributions from the community on how they would want
            make us of and integrate it in their own automation solutions and tools.</t>
      </section>

    </section>

    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <t>This section discusses various considerations for implementing the translation logic in
        a reusable manner.</t>

      <section anchor="multiple-versions">
        <name>Handling Multiple Versions</name>
        <t>The current Acton YANG framework compiles a set of vendor YANG modules into a device
          type built around named Acton classes that represent each schema node in the YANG source.
          The resulting nominal type equivalence means that for another device adapter with a
          near-identical YANG schema, the compiled Acton classes would be distinct, even if the source
          YANG schemas were 99% identical.
        </t>
        <t>For a translation framework to easily handle the translation of IETF Device models
          to dozens of versions of vendor YANG modules, structural type equivalence is required.
          It then becomes trivial to express minor mapping adjustments between different versions
          of the vendor YANG modules.</t>
      </section>

      <section anchor="complete-configuration-generation">
        <name>Complete Configuration Generation</name>
        <t>The output of the translation function is always a complete device configuration that
          represents the desired state of the device.</t>
        <t>Inside of a StratoWeave-based orchestrator, the diff engine can take this as input and
          efficiently compute the necessary changes to apply to the running configuration of the device.
          In other integration scenarios, this complete configuration can be applied directly
          to the target device using e.g. a NETCONF &lt;replace&gt; operation.</t>
      </section>

    </section>

    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This memo includes no request to IANA.</t>
    </section>

    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
      <t>This document should not affect the security of the Internet.</t>
    </section>
  </middle>

  <back>
    <displayreference target="I-D.ietf-netmod-intf-ext-yang" to="IF-EXT"/>
    <displayreference target="I-D.ietf-netmod-sub-intf-vlan-model" to="IF-VLAN"/>
    <displayreference target="I-D.ietf-idr-bgp-model" to="BGP-MODEL"/>
    <references>
      <name>References</name>

      <references>
        <name>Informative References</name>

        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7317.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8177.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8199.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8309.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8343.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8344.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8349.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8512.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8519.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8529.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8960.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8969.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9067.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9070.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9130.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9968.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-netmod-intf-ext-yang-18.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-netmod-sub-intf-vlan-model-18.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-idr-bgp-model-21.xml"/>
        <reference anchor="STRATOWEAVE-TRANSLATE" target="https://github.com/stratoweave/sorespo/tree/translate">
          <front>
            <title>StratoWeave: IETF Device Model Translation Experiment</title>
            <author fullname="Kris Lambrechts" initials="K." surname="Lambrechts"/>
          </front>
        </reference>
      </references>
    </references>

    <section anchor="Acknowledgements" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Alex Huang Feng for his review and valuable comments.</t>
    </section>
 </back>
</rfc>
