+-----------------+ | Customer | +--------+--------+ Customer Service Models | (e.g., L3SM, L2SM) | +--------+--------+ | Service | | Orchestration | +------+---+------+ Network Models | | SAP Network Model (e.g., L3NM, L2NM) | | +------+---+------+ | Network | | Controller | +--------+--------+ | +---------------------+---------------------+ | Network | +-------------------------------------------+
.---------. .---------. | PE1 | | PE2 | '---------' '---------' \ / \------/ ( ) ( ) ( ) /------\ / \ .---------. .---------. | PE3 | | PE4 | '---------' '---------'
.-+-. .-+-. .-+-. .-+-. .-+-. .-|sap|-|sap|-|sap|-. .-|sap|-------|sap|-. | '---' '---' '---' | | '---' '---' | .---. | | | |sap| PE1 | | PE2 | '---' | | | | | | | '-------------------' '-------------------' .-------------------. .-------------------. | | | | | | | .---. | PE3 | | PE4 |sap| | | | '---' | .---. .---. .---. | | .---. .---. .---. | '-|sap|-|sap|-|sap|-' '-|sap|-|sap|-|sap|-' '-+-' '-+-' '-+-' '-+-' '-+-' '-+-'
.---. |CE2| '-+-' | .-+-. .-+-. .-+-. .-+-. .-+-. .-|sap|-|sap|-|sap|-. .-|sap|-------|sap|-. | '---' '---' '---' | | '---' '---' | .---. .---. | | | |CE1+--+sap| PE1 | | PE2 | '---' '---' | | | | | | | '-------------------' '-------------------' .-------------------. .-------------------. | | | | | | | .---. .---. | PE3 | | PE4 |sap+--+CE5| | | | '---' '---' | .---. .---. .---. | | .---. .---. .---. | '-|sap|-|sap|-|sap|-' '-|sap|-|sap|-|sap|-' '-+-' '-+-' '-+-' '-+-' '-+-' '-+-' | | | .-+-. | .-+-. |CE3+---------------' |CE4| '---' '---'
+-------------------------+ | | | Abstract Network Model | | | +------------+------------+ | +---------+---------+ | | +------V------+ +------V------+ | Abstract | | Inventory | | Network | | Models | | Topology | | (e.g., SAP | | Model | | Network | | | | Model) | +-----+-------+ +-------------+ | +-----------+-----------+ | | | +----V----+ +----V----+ +----V----+ |TE Topo | |L3 Topo | |L2 Topo | | Model | | Model | | Model | ... +---------+ +---------+ +---------+
module: ietf-sap-ntw augment /nw:networks/nw:network/nw:network-types: +--rw sap-network! +--rw service-type* identityref augment /nw:networks/nw:network/nw:node: +--rw service* [service-type] +--rw service-type identityref +--rw sap* [sap-id] +--rw sap-id string +--rw description? string +--rw parent-termination-point? nt:tp-id +--rw attachment-interface? string +--rw interface-type? identityref +--rw encapsulation-type? identityref +--rw role? identityref +--rw allows-child-saps? boolean +--rw peer-sap-id* string +--ro sap-status | +--ro status? identityref | +--ro last-change? yang:date-and-time +--rw service-status +--rw admin-status | +--rw status? identityref | +--rw last-change? yang:date-and-time +--ro oper-status +--ro status? identityref +--ro last-change? yang:date-and-time
module ietf-sap-ntw { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-sap-ntw"; prefix sap; import ietf-network-topology { prefix nt; reference "RFC 8345: A YANG Data Model for Network Topologies, Section 6.2"; } import ietf-network { prefix nw; reference "RFC 8345: A YANG Data Model for Network Topologies, Section 6.1"; } import ietf-vpn-common { prefix vpn-common; reference "RFC 9181: A Common YANG Data Model for Layer 2 and Layer 3 VPNs"; } import ietf-yang-types { prefix yang; reference "RFC 6991: Common YANG Data Types, Section 3"; } organization "IETF OPSA (Operations and Management Area) Working Group"; contact "WG Web: <https://datatracker.ietf.org/wg/opsawg/> WG List: <mailto:opsawg@ietf.org> Editor: Mohamed Boucadair <mailto:mohamed.boucadair@orange.com> Author: Oscar Gonzalez de Dios <mailto:oscar.gonzalezdedios@telefonica.com> Author: Samier Barguil <mailto:samier.barguil_giraldo@nokia.com> Author: Qin Wu <mailto:bill.wu@huawei.com> Author: Victor Lopez <mailto:victor.lopez@nokia.com>"; description "This YANG module defines a model for representing, managing, and controlling the Service Attachment Points (SAPs) in the network topology. Copyright (c) 2023 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or without modification, is permitted pursuant to, and subject to the license terms contained in, the Revised BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info). This version of this YANG module is part of RFC 9408; see the RFC itself for full legal notices."; revision 2023-06-20 { description "Initial version."; reference "RFC 9408: A YANG Network Data Model for Service Attachment Points (SAPs)"; } identity virtual-network { base vpn-common:service-type; description "Virtual network. Refers to a logical network instance that is built over a physical network."; reference "RFC 8453: Framework for Abstraction and Control of TE Networks (ACTN)"; } identity enhanced-vpn { base vpn-common:service-type; description "Enhanced VPN (VPN+). VPN+ is an approach that is based on existing VPN and Traffic Engineering (TE) technologies but adds characteristics that specific services require over and above conventional VPNs."; reference "draft-ietf-teas-enhanced-vpn: A Framework for Enhanced Virtual Private Network (VPN+)"; } identity network-slice { base vpn-common:service-type; description "IETF Network Slice. An IETF Network Slice is a logical network topology connecting a number of endpoints using a set of shared or dedicated network resources that are used to satisfy specific service objectives."; reference "draft-ietf-teas-ietf-network-slices: A Framework for IETF Network Slices"; } identity sdwan { base vpn-common:service-type; description "PE-based Software-Defined Wide-Area Network (SD-WAN)."; reference "draft-ietf-bess-bgp-sdwan-usage: BGP Usage for SD-WAN Overlay Networks"; } identity basic-connectivity { base vpn-common:service-type; description "Basic IP connectivity. This is, for example, a plain form of connectivity offered to enterprises over a dedicated or shared MPLS infrastructure."; } identity interface-role { description "Base identity for the network role of an interface."; } identity uni { base interface-role; description "User-to-Network Interface (UNI)."; } identity nni { base interface-role; description "Network-to-Network Interface (NNI)."; } identity interface-type { description "Base identity for the interface type."; } identity phy { base interface-type; description "Physical port."; } identity loopback { base interface-type; description "Loopback interface."; } identity lag { base interface-type; description "Link Aggregation Group (LAG) interface."; } identity irb { base interface-type; description "Integrated Routing and Bridging (IRB) interface. An IRB interface typically connects an IP Virtual Routing and Forwarding (IP-VRF) entity to a bridge domain."; } identity local-bridge { base interface-type; description "A local bridge reference to accommodate (for example) implementations that require internal bridging. When such a type is used, a reference to a local bridge domain is used to identify the interface."; } identity logical { base interface-type; description "Refers to a logical sub-interface that is typically used to bind a service. This type is used only if none of the other more specific types (i.e., 'loopback', 'lag', 'irb', or 'local-bridge') can be used."; } grouping sap-entry { description "Service Attachment Point (SAP) entry information."; leaf sap-id { type string; description "Indicates an identifier that uniquely identifies a SAP."; } leaf description { type string; description "A textual description of the SAP."; } leaf parent-termination-point { type nt:tp-id; description "Indicates the parent termination point to which the SAP is attached. A termination point can be a physical port, an interface, etc."; } leaf attachment-interface { type string; description "Indicates the interface to which the SAP is bound."; } leaf interface-type { type identityref { base interface-type; } description "The type of the interface to which the SAP is bound."; } leaf encapsulation-type { type identityref { base vpn-common:encapsulation-type; } description "Encapsulation type of the interface to which the SAP is bound."; } leaf role { type identityref { base interface-role; } description "Indicates the role of a SAP."; } leaf allows-child-saps { type boolean; description "Indicates whether the attachment interface of this SAP is capable of hosting per-service sub-interfaces."; } leaf-list peer-sap-id { type string; description "Indicates an identifier of the peer's termination identifier (e.g., a Customer Edge (CE)). This information can be used for correlation purposes, such as identifying the SAP that is attached to an endpoint that is provided in a service request."; } } grouping sap-list { description "SAP information."; list sap { key "sap-id"; description "The SAPs are an abstraction of the points to which network services such as L3VPNs, L2VPNs, or network slices can be attached."; uses sap-entry; container sap-status { config false; description "Indicates the operational status of the SAP, independent of any service provisioned over it."; uses vpn-common:oper-status-timestamp; } container service-status { description "Indicates the service status."; container admin-status { description "Administrative service status."; leaf status { type identityref { base vpn-common:administrative-status; } description "Administrative status of the service provisioned at the SAP."; } leaf last-change { type yang:date-and-time; description "Indicates the actual date and time of the service status change."; } } container oper-status { config false; description "Operational status of the service provisioned at the SAP."; uses vpn-common:oper-status-timestamp; } } } } augment "/nw:networks/nw:network/nw:network-types" { description "Introduces a new network type for a SAP network."; container sap-network { presence "Indicates the SAP network type."; description "The presence of the container node indicates the SAP network type."; leaf-list service-type { type identityref { base vpn-common:service-type; } description "Indicates the set of supported service types."; } } } augment "/nw:networks/nw:network/nw:node" { when '../nw:network-types/sap:sap-network' { description "Augmentation parameters apply only for SAP networks."; } description "SAP parameters for the node level."; list service { key "service-type"; description "A list of supported service types for the node."; leaf service-type { type identityref { base vpn-common:service-type; } description "Indicates a service type."; } uses sap-list; } } }
{ "ietf-network:networks": { "network": [ { "network-types": { "ietf-sap-ntw:sap-network": { "service-type": [ "ietf-vpn-common:l3vpn", "ietf-vpn-common:vpls" ] } }, "network-id": "example:an-id", "node": [ { "node-id": "example:pe1", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#11", "peer-sap-id": ["ce-1"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } }, { "sap-id": "sap#12", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#13", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#14", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } } ] } ] }, { "node-id": "example:pe2", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#21", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#22", "peer-sap-id": ["ce-2"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] }, { "node-id": "example:pe3", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#31", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#32", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#33", "peer-sap-id": ["ce-3"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] }, { "node-id": "example:pe4", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#41", "peer-sap-id": ["ce-3"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } }, { "sap-id": "sap#42", "peer-sap-id": ["ce-4"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } }, { "sap-id": "sap#43", "sap-status": { "status": "ietf-vpn-common:op-down" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-down" } } }, { "sap-id": "sap#44", "peer-sap-id": ["ce-5"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] } ] } ] } }
.-------------------------. | GE0/6/4 | | PE1 .----+----. | |sap#2 |GE0/6/4.1 | | .--+--. | | |sap#3| | | '--+--' | | |GE0/6/4.2 | | .--+--. | | |sap#4| | | '--+--' | | | | +----+----+ | | | GE0/6/1| | .----+----. | |sap#1 | | '----+----' | | '-------------------------'
{ "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#1", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/1", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#2", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/4", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#3", "description": "A first SAP description", "parent-termination-point": "GE0/6/4", "attachment-interface": "GE0/6/4.1", "interface-type": "ietf-sap-ntw:logical", "encapsulation-type": "ietf-vpn-common:vlan-type", "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] }, { "service-type": "ietf-vpn-common:vpls", "sap": [ { "sap-id": "sap#1", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/1", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#2", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/4", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#4", "description": "Another description", "parent-termination-point": "GE0/6/4", "attachment-interface": "GE0/6/4.2", "interface-type": "ietf-sap-ntw:logical", "encapsulation-type": "ietf-vpn-common:vlan-type", "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] }
{ "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#1", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/1", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#2", "description": "Ready to host SAPs", "attachment-interface": "GE0/6/4", "interface-type": "ietf-sap-ntw:phy", "role": "ietf-sap-ntw:uni", "allows-child-saps": true, "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#3", "description": "A first SAP description", "parent-termination-point": "GE0/6/4", "attachment-interface": "GE0/6/4.1", "interface-type": "ietf-sap-ntw:logical", "encapsulation-type": "ietf-vpn-common:vlan-type", "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] }
.--------------------. .--------------------. | | | | | A .--+--. .--+--. A | | S | +================+ | S | | B | (VRF1)----(VPN1)----(VRF1) | B | | R | | | | R | | | (VRF2)----(VPN2)----(VRF2) | | | a | +================+ | b | | 1 '--+--' '--+--' 1 | | AS A | | AS B | | A .--+--. .--+--. A | | S | +================+ | S | | B | (VRF1)----(VPN1)----(VRF1) | B | | R | | | | R | | | (VRF2)----(VPN2)----(VRF2) | | | a | +================+ | b | | 2 '--+--' '--+--' 2 | | | | | '--------------------' '--------------------'
{ "ietf-network:networks": { "network": [ { "network-types": { "ietf-sap-ntw:sap-network": { "service-type": [ "ietf-vpn-common:l3vpn" ] } }, "network-id": "example:an-id", "node": [ { "node-id": "example:asbr-a1", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#11", "description": "parent inter-as link#1", "role": "ietf-sap-ntw:nni", "allows-child-saps": true, "peer-sap-id": ["asbr-b1"], "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#12", "description": "parent inter-as link#2", "role": "ietf-sap-ntw:nni", "allows-child-saps": true, "peer-sap-id": ["asbr-b1"], "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#13", "description": "vpn1", "role": "ietf-sap-ntw:nni", "peer-sap-id": ["asbr-b1"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } }, { "sap-id": "sap#14", "description": "vpn2", "role": "ietf-sap-ntw:nni", "peer-sap-id": ["asbr-b1"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] }, { "node-id": "example:asbr-a2", "ietf-sap-ntw:service": [ { "service-type": "ietf-vpn-common:l3vpn", "sap": [ { "sap-id": "sap#11", "description": "parent inter-as link#1", "role": "ietf-sap-ntw:nni", "allows-child-saps": true, "peer-sap-id": ["asbr-b2"], "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#12", "description": "parent inter-as link#2", "role": "ietf-sap-ntw:nni", "allows-child-saps": true, "peer-sap-id": ["asbr-b2"], "sap-status": { "status": "ietf-vpn-common:op-up" } }, { "sap-id": "sap#21", "description": "vpn1", "role": "ietf-sap-ntw:nni", "peer-sap-id": ["asbr-b2"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } }, { "sap-id": "sap#22", "description": "vpn2", "role": "ietf-sap-ntw:nni", "peer-sap-id": ["asbr-b2"], "sap-status": { "status": "ietf-vpn-common:op-up" }, "service-status": { "admin-status": { "status": "ietf-vpn-common:admin-up" }, "oper-status": { "status": "ietf-vpn-common:op-up" } } } ] } ] } ] } ] } }