--- 1/draft-ietf-lisp-yang-07.txt 2018-06-30 11:13:15.491234144 -0700 +++ 2/draft-ietf-lisp-yang-08.txt 2018-06-30 11:13:15.631237518 -0700 @@ -1,25 +1,25 @@ LISP Working Group V. Ermagan Internet-Draft A. Rodriguez-Natal Intended status: Experimental F. Coras -Expires: September 6, 2018 C. Moberg +Expires: December 31, 2018 C. Moberg R. Rahman Cisco Systems A. Cabellos-Aparicio Technical University of Catalonia F. Maino Cisco Systems - March 5, 2018 + June 29, 2018 LISP YANG Model - draft-ietf-lisp-yang-07 + draft-ietf-lisp-yang-08 Abstract This document describes a YANG data model to use with the Locator/ID Separation Protocol (LISP). The YANG modules in this document conform to the Network Management Datastore Architecture (NMDA). Status of This Memo @@ -30,204 +30,274 @@ Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." - This Internet-Draft will expire on September 6, 2018. + This Internet-Draft will expire on December 31, 2018. Copyright Notice Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 - 2. LISP Module . . . . . . . . . . . . . . . . . . . . . . . . . 2 + 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 3 + 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 + 2. LISP Module . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Module Structure . . . . . . . . . . . . . . . . . . . . 3 - 2.2. Module Definition . . . . . . . . . . . . . . . . . . . . 5 - 3. LISP-ITR Module . . . . . . . . . . . . . . . . . . . . . . . 13 - 3.1. Module Structure . . . . . . . . . . . . . . . . . . . . 14 - 3.2. Module Definition . . . . . . . . . . . . . . . . . . . . 18 - 4. LISP-ETR Module . . . . . . . . . . . . . . . . . . . . . . . 21 - 4.1. Module Structure . . . . . . . . . . . . . . . . . . . . 21 - 4.2. Module Definition . . . . . . . . . . . . . . . . . . . . 23 - 5. LISP-Map-Server Module . . . . . . . . . . . . . . . . . . . 27 - 5.1. Module Structure . . . . . . . . . . . . . . . . . . . . 27 - 5.2. Module Definition . . . . . . . . . . . . . . . . . . . . 33 - 6. LISP-Map-Resolver Module . . . . . . . . . . . . . . . . . . 39 - 6.1. Module Structure . . . . . . . . . . . . . . . . . . . . 39 - 6.2. Module Definition . . . . . . . . . . . . . . . . . . . . 39 - 7. LISP-Address-Types Module . . . . . . . . . . . . . . . . . . 41 - 7.1. Module Definition . . . . . . . . . . . . . . . . . . . . 41 - 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 - 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 - 10. Security Considerations . . . . . . . . . . . . . . . . . . . 56 - 11. Normative References . . . . . . . . . . . . . . . . . . . . 56 - Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56 + 2.2. Module Definition . . . . . . . . . . . . . . . . . . . . 6 + 3. LISP-ITR Module . . . . . . . . . . . . . . . . . . . . . . . 16 + 3.1. Module Structure . . . . . . . . . . . . . . . . . . . . 16 + 3.2. Module Definition . . . . . . . . . . . . . . . . . . . . 21 + 4. LISP-ETR Module . . . . . . . . . . . . . . . . . . . . . . . 25 + 4.1. Module Structure . . . . . . . . . . . . . . . . . . . . 25 + 4.2. Module Definition . . . . . . . . . . . . . . . . . . . . 27 + 5. LISP-Map-Server Module . . . . . . . . . . . . . . . . . . . 31 + 5.1. Module Structure . . . . . . . . . . . . . . . . . . . . 32 + 5.2. Module Definition . . . . . . . . . . . . . . . . . . . . 40 + 6. LISP-Map-Resolver Module . . . . . . . . . . . . . . . . . . 46 + 6.1. Module Structure . . . . . . . . . . . . . . . . . . . . 46 + 6.2. Module Definition . . . . . . . . . . . . . . . . . . . . 47 + 7. LISP-Address-Types Module . . . . . . . . . . . . . . . . . . 49 + 7.1. Module Definition . . . . . . . . . . . . . . . . . . . . 49 + 7.2. Data Model examples . . . . . . . . . . . . . . . . . . . 63 + 7.2.1. LISP protocol instance . . . . . . . . . . . . . . . 64 + 7.2.2. LISP ITR . . . . . . . . . . . . . . . . . . . . . . 65 + 7.2.3. LISP ETR . . . . . . . . . . . . . . . . . . . . . . 65 + 7.2.4. LISP Map-Server . . . . . . . . . . . . . . . . . . . 67 + 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 68 + 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 68 + 10. Security Considerations . . . . . . . . . . . . . . . . . . . 70 + 11. Normative References . . . . . . . . . . . . . . . . . . . . 70 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 71 1. Introduction The Locator/ID Separation Protocol (LISP) defines several network elements subject to be configured. This document presents the YANG data models required for basic configuration of all major LISP [RFC6830]elements. The models also capture some essential operational data elements as well. +1.1. Requirements Language + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in BCP 14 [RFC2119] + [RFC8174] when, and only when, they appear in all capitals, as shown + here. + +1.2. Tree Diagrams + + This document uses the graphical representation of data models + defined in [RFC8340]. + 2. LISP Module This module is the base LISP module that is augmented in multiple models to represent various LISP device roles. 2.1. Module Structure module: ietf-lisp + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol: +--rw lisp +--rw locator-sets | +--rw locator-set* [locator-set-name] | +--rw locator-set-name string | +--rw (locator-type)? | +--:(local-interface) | | +--rw interface* [interface-ref] | | +--rw interface-ref if:interface-ref | | +--rw priority? uint8 | | +--rw weight? uint8 | | +--rw multicast-priority? uint8 | | +--rw multicast-weight? uint8 | +--:(general-locator) | +--rw locator* [id] | +--rw id string | +--rw locator-address - | | +--rw address-type lisp-address-family-ref - | | +--rw virtual-network-id? instance-id-type + | | +--rw address-type + | | | lisp-address-family-ref + | | +--rw virtual-network-id? + | | | instance-id-type | | +--rw (address)? | | +--:(no-address) | | | +--rw no-address? empty | | +--:(ipv4) - | | | +--rw ipv4? inet:ipv4-address + | | | +--rw ipv4? + | | | inet:ipv4-address | | +--:(ipv4-prefix) - | | | +--rw ipv4-prefix? inet:ipv4-prefix + | | | +--rw ipv4-prefix? + | | | inet:ipv4-prefix | | +--:(ipv6) - | | | +--rw ipv6? inet:ipv6-address + | | | +--rw ipv6? + | | | inet:ipv6-address | | +--:(ipv6-prefix) - | | | +--rw ipv6-prefix? inet:ipv6-prefix + | | | +--rw ipv6-prefix? + | | | inet:ipv6-prefix | | +--:(mac) - | | | +--rw mac? yang:mac-address + | | | +--rw mac? + | | | yang:mac-address | | +--:(distinguished-name) - | | | +--rw distinguished-name? distinguished-name-type + | | | +--rw distinguished-name? + | | | distinguished-name-type | | +--:(as-number) - | | | +--rw as-number? inet:as-number + | | | +--rw as-number? + | | | inet:as-number | | +--:(null-address) | | | +--rw null-address | | | +--rw address? empty | | +--:(afi-list) | | | +--rw afi-list - | | | +--rw address-list* simple-address + | | | +--rw address-list* + | | | simple-address | | +--:(instance-id) | | | +--rw instance-id - | | | +--rw iid? instance-id-type + | | | +--rw iid? + | | | | instance-id-type | | | +--rw mask-length? uint8 | | | +--rw address? simple-address | | +--:(as-number-lcaf) | | | +--rw as-number-lcaf | | | +--rw as? inet:as-number | | | +--rw address? simple-address | | +--:(application-data) | | | +--rw application-data - | | | +--rw address? simple-address + | | | +--rw address? + | | | | simple-address | | | +--rw protocol? uint8 | | | +--rw ip-tos? int32 - | | | +--rw local-port-low? inet:port-number - | | | +--rw local-port-high? inet:port-number - | | | +--rw remote-port-low? inet:port-number - | | | +--rw remote-port-high? inet:port-number + | | | +--rw local-port-low? + | | | | inet:port-number + | | | +--rw local-port-high? + | | | | inet:port-number + | | | +--rw remote-port-low? + | | | | inet:port-number + | | | +--rw remote-port-high? + | | | inet:port-number | | +--:(geo-coordinates) | | | +--rw geo-coordinates | | | +--rw latitude? bits | | | +--rw latitude-degrees? uint8 | | | +--rw latitude-minutes? uint8 | | | +--rw latitude-seconds? uint8 | | | +--rw longitude? bits | | | +--rw longitude-degrees? uint16 | | | +--rw longitude-minutes? uint8 | | | +--rw longitude-seconds? uint8 | | | +--rw altitude? int32 - | | | +--rw address? simple-address + | | | +--rw address? + | | | simple-address | | +--:(nat-traversal) | | | +--rw nat-traversal | | | +--rw ms-udp-port? uint16 | | | +--rw etr-udp-port? uint16 - | | | +--rw global-etr-rloc? simple-address - | | | +--rw ms-rloc? simple-address - | | | +--rw private-etr-rloc? simple-address - | | | +--rw rtr-rlocs* simple-address + | | | +--rw global-etr-rloc? + | | | | simple-address + | | | +--rw ms-rloc? + | | | | simple-address + | | | +--rw private-etr-rloc? + | | | | simple-address + | | | +--rw rtr-rlocs* + | | | simple-address | | +--:(explicit-locator-path) | | | +--rw explicit-locator-path | | | +--rw hop* [hop-id] | | | +--rw hop-id string | | | +--rw address? simple-address | | | +--rw lrs-bits? bits | | +--:(source-dest-key) | | | +--rw source-dest-key | | | +--rw source? simple-address | | | +--rw dest? simple-address | | +--:(key-value-address) | | | +--rw key-value-address | | | +--rw key? simple-address | | | +--rw value? simple-address | | +--:(service-path) | | +--rw service-path - | | +--rw service-path-id? service-path-id-type + | | +--rw service-path-id? + | | | service-path-id-type | | +--rw service-index? uint8 | +--rw priority? uint8 | +--rw weight? uint8 | +--rw multicast-priority? uint8 | +--rw multicast-weight? uint8 - +--rw lisp-router-instances - +--rw lisp-router-instance* [lisp-router-instance-id] - +--rw lisp-router-instance-id int32 +--rw lisp-role* [lisp-role-type] | +--rw lisp-role-type lisp-role-ref +--rw lisp-router-id - +--rw site-id? uint64 - +--rw xtr-id? lisp:xtr-id-type + | +--rw site-id? uint64 + | +--rw xtr-id? lisp:xtr-id-type + +--rw virtual-networks + +--rw virtual-network* [vni] + +--rw vni lcaf:instance-id-type + +--rw ni-name? + -> /ni:network-instances/network-instance/name 2.2. Module Definition - file "ietf-lisp@2018-03-05.yang" + file "ietf-lisp@2018-06-29.yang" module ietf-lisp { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp"; + prefix lisp; + import ietf-interfaces { prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; } + // RFC Ed.: replace occurences of XXXX with actual RFC number + // and remove this note import ietf-lisp-address-types { prefix lcaf; + reference "RFC XXXX: LISP YANG model"; } import ietf-yang-types { prefix yang; + reference "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA version)"; } + import ietf-network-instance { + prefix "ni"; + // RFC Ed.: replace occurences of YYYY with actual RFC number + // of draft-ietf-rtgwg-ni-model and remove this note + reference + "RFC YYYY: YANG Model for Network Instances"; + } + organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: Editor: Vina Ermagan Editor: Alberto Rodriguez-Natal @@ -247,30 +316,40 @@ 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 Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - // RFC Ed.: replace XXXX with actual RFC number and remove - // this note + reference "RFC XXXX"; - revision 2018-03-05 { + revision 2018-06-29 { description "Initial revision."; reference "https://tools.ietf.org/html/rfc6830"; } + + /* + * Identity definitions + */ + identity lisp { + base "rt:control-plane-protocol"; + description "LISP protocol."; + reference + "RFC 6830: The Locator/ID Separation Protocol (LISP)."; + } + identity lisp-role { description "LISP router role."; } identity itr { base lisp-role; description "LISP ITR."; } identity pitr { @@ -455,20 +533,21 @@ locators"; } leaf time-to-live { type uint32; units minutes; description "Mapping validity period in minutes."; } leaf creation-time { type yang:date-and-time; + config false; description "Time when the mapping was created."; } leaf authoritative { type bits { bit A { description "Authoritative bit."; } } @@ -520,26 +600,35 @@ list mapping { key "id"; description "List of EID to RLOCs mappings."; leaf id { type eid-id; description "Id that uniquely identifies a mapping."; } uses mapping; - } } } } + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol" { + when "derived-from-or-self(rt:type, 'lisp:lisp')" { + description + "This augmentation is only valid for a control-plane protocol + instance of LISP."; + } + description "LISP protocol ietf-routing module + control-plane-protocol augmentation."; + container lisp { description "Parameters for the LISP subsystem."; container locator-sets { description "Container that defines a named locator set which can be referenced elsewhere."; list locator-set { key "locator-set-name"; @@ -564,32 +653,20 @@ } case general-locator { uses locators-grouping; description "List of locators in this set based on lisp-address."; } } } } - container lisp-router-instances { - description - "Different LISP routers instantiated in the device"; - list lisp-router-instance { - key "lisp-router-instance-id"; - description - "Each entry contains parameters for a LISP router."; - leaf lisp-router-instance-id { - type int32; - description - "Arbitrary lisp-router id."; - } list lisp-role { key lisp-role-type; description "List of lisp device roles such as MS, MR, ITR, PITR, ETR or PETR."; leaf lisp-role-type { type lisp-role-ref; description "The type of LISP device - identity derived from the 'lisp-device' base identity."; @@ -606,243 +684,349 @@ "Site-ID and xTR-ID of the device."; leaf site-id { type uint64; description "Site ID"; } leaf xtr-id { type lisp:xtr-id-type; description "xTR ID"; } } + + container virtual-networks { + description "Virtual networks"; + list virtual-network { + key vni; + description "List of virtual networks"; + + leaf vni { + type lcaf:instance-id-type; + description + "Virtual network identifier"; + } + leaf ni-name { + type leafref { + path "/ni:network-instances/ni:network-instance/ni:name"; + } + description + "Name of Network Instance (e.g. VRF) to which a VNI is + bound. Each VNI is bound to a different Network + Instance"; + } + } } } } } 3. LISP-ITR Module This module captures the configuration data model of a LISP ITR. The model also captures some operational data elements. 3.1. Module Structure module: ietf-lisp-itr - augment /lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance: + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/lisp:lisp: +--rw itr! +--rw rloc-probing! | +--rw interval? uint16 | +--rw retries? uint8 | +--rw retries-interval? uint16 - +--rw itr-rlocs? -> /lisp:lisp/locator-sets/locator-set/locator-set-name + +--rw itr-rlocs? leafref +--rw map-resolvers | +--rw map-resolver* inet:ip-address +--rw proxy-etrs | +--rw proxy-etr-address* inet:ip-address +--rw map-cache + +--ro size? uint32 + +--ro limit? uint32 +--rw virtual-network* [vni] +--rw vni lcaf:instance-id-type +--rw mappings +--rw mapping* [id] +--rw id eid-id +--rw eid - | +--rw address-type lisp-address-family-ref - | +--rw virtual-network-id? instance-id-type + | +--rw address-type + | | lisp-address-family-ref + | +--rw virtual-network-id? + | | instance-id-type | +--rw (address)? | +--:(no-address) | | +--rw no-address? empty | +--:(ipv4) - | | +--rw ipv4? inet:ipv4-address + | | +--rw ipv4? + | | inet:ipv4-address | +--:(ipv4-prefix) - | | +--rw ipv4-prefix? inet:ipv4-prefix + | | +--rw ipv4-prefix? + | | inet:ipv4-prefix | +--:(ipv6) - | | +--rw ipv6? inet:ipv6-address + | | +--rw ipv6? + | | inet:ipv6-address | +--:(ipv6-prefix) - | | +--rw ipv6-prefix? inet:ipv6-prefix + | | +--rw ipv6-prefix? + | | inet:ipv6-prefix | +--:(mac) - | | +--rw mac? yang:mac-address + | | +--rw mac? + | | yang:mac-address | +--:(distinguished-name) - | | +--rw distinguished-name? distinguished-name-type + | | +--rw distinguished-name? + | | distinguished-name-type | +--:(as-number) - | | +--rw as-number? inet:as-number + | | +--rw as-number? + | | inet:as-number | +--:(null-address) | | +--rw null-address | | +--rw address? empty | +--:(afi-list) | | +--rw afi-list | | +--rw address-list* simple-address | +--:(instance-id) | | +--rw instance-id | | +--rw iid? instance-id-type | | +--rw mask-length? uint8 | | +--rw address? simple-address | +--:(as-number-lcaf) | | +--rw as-number-lcaf | | +--rw as? inet:as-number | | +--rw address? simple-address | +--:(application-data) | | +--rw application-data - | | +--rw address? simple-address + | | +--rw address? + | | | simple-address | | +--rw protocol? uint8 | | +--rw ip-tos? int32 - | | +--rw local-port-low? inet:port-number - | | +--rw local-port-high? inet:port-number - | | +--rw remote-port-low? inet:port-number - | | +--rw remote-port-high? inet:port-number + | | +--rw local-port-low? + | | | inet:port-number + | | +--rw local-port-high? + | | | inet:port-number + | | +--rw remote-port-low? + | | | inet:port-number + | | +--rw remote-port-high? + | | inet:port-number | +--:(geo-coordinates) | | +--rw geo-coordinates | | +--rw latitude? bits | | +--rw latitude-degrees? uint8 | | +--rw latitude-minutes? uint8 | | +--rw latitude-seconds? uint8 | | +--rw longitude? bits | | +--rw longitude-degrees? uint16 | | +--rw longitude-minutes? uint8 | | +--rw longitude-seconds? uint8 | | +--rw altitude? int32 - | | +--rw address? simple-address + | | +--rw address? + | | simple-address | +--:(nat-traversal) | | +--rw nat-traversal | | +--rw ms-udp-port? uint16 | | +--rw etr-udp-port? uint16 - | | +--rw global-etr-rloc? simple-address - | | +--rw ms-rloc? simple-address - | | +--rw private-etr-rloc? simple-address - | | +--rw rtr-rlocs* simple-address + | | +--rw global-etr-rloc? + | | | simple-address + | | +--rw ms-rloc? + | | | simple-address + | | +--rw private-etr-rloc? + | | | simple-address + | | +--rw rtr-rlocs* + | | simple-address | +--:(explicit-locator-path) | | +--rw explicit-locator-path | | +--rw hop* [hop-id] | | +--rw hop-id string | | +--rw address? simple-address | | +--rw lrs-bits? bits | +--:(source-dest-key) | | +--rw source-dest-key | | +--rw source? simple-address | | +--rw dest? simple-address | +--:(key-value-address) | | +--rw key-value-address | | +--rw key? simple-address | | +--rw value? simple-address | +--:(service-path) | +--rw service-path - | +--rw service-path-id? service-path-id-type + | +--rw service-path-id? + | | service-path-id-type | +--rw service-index? uint8 +--rw time-to-live? uint32 - +--rw creation-time? yang:date-and-time + +--ro creation-time? yang:date-and-time +--rw authoritative? bits +--rw static? boolean +--rw (locator-list)? +--:(negative-mapping) | +--rw map-reply-action? map-reply-action +--:(positive-mapping) +--rw rlocs +--rw locator* [id] +--rw id string +--rw locator-address - | +--rw address-type lisp-address-family-ref - | +--rw virtual-network-id? instance-id-type + | +--rw address-type + | | lisp-address-family-ref + | +--rw virtual-network-id? + | | instance-id-type | +--rw (address)? | +--:(no-address) - | | +--rw no-address? empty + | | +--rw no-address? + | | empty | +--:(ipv4) - | | +--rw ipv4? inet:ipv4-address + | | +--rw ipv4? + | | inet:ipv4-address | +--:(ipv4-prefix) - | | +--rw ipv4-prefix? inet:ipv4-prefix + | | +--rw ipv4-prefix? + | | inet:ipv4-prefix | +--:(ipv6) - | | +--rw ipv6? inet:ipv6-address + | | +--rw ipv6? + | | inet:ipv6-address | +--:(ipv6-prefix) - | | +--rw ipv6-prefix? inet:ipv6-prefix + | | +--rw ipv6-prefix? + | | inet:ipv6-prefix | +--:(mac) - | | +--rw mac? yang:mac-address + | | +--rw mac? + | | yang:mac-address | +--:(distinguished-name) - | | +--rw distinguished-name? distinguished-name-type + | | +--rw distinguished-name? + | | distinguished-name-type | +--:(as-number) - | | +--rw as-number? inet:as-number + | | +--rw as-number? + | | inet:as-number | +--:(null-address) | | +--rw null-address | | +--rw address? empty | +--:(afi-list) | | +--rw afi-list - | | +--rw address-list* simple-address + | | +--rw address-list* + | | simple-address | +--:(instance-id) | | +--rw instance-id - | | +--rw iid? instance-id-type + | | +--rw iid? + | | | instance-id-type | | +--rw mask-length? uint8 - | | +--rw address? simple-address + | | +--rw address? + | | simple-address | +--:(as-number-lcaf) | | +--rw as-number-lcaf - | | +--rw as? inet:as-number - | | +--rw address? simple-address + | | +--rw as? + | | | inet:as-number + | | +--rw address? + | | simple-address | +--:(application-data) | | +--rw application-data - | | +--rw address? simple-address - | | +--rw protocol? uint8 - | | +--rw ip-tos? int32 - | | +--rw local-port-low? inet:port-number - | | +--rw local-port-high? inet:port-number - | | +--rw remote-port-low? inet:port-number - | | +--rw remote-port-high? inet:port-number + | | +--rw address? + | | | simple-address + | | +--rw protocol? + | | | uint8 + | | +--rw ip-tos? + | | | int32 + | | +--rw local-port-low? + | | | inet:port-number + | | +--rw local-port-high? + | | | inet:port-number + | | +--rw remote-port-low? + | | | inet:port-number + | | +--rw remote-port-high? + | | inet:port-number | +--:(geo-coordinates) | | +--rw geo-coordinates - | | +--rw latitude? bits - | | +--rw latitude-degrees? uint8 - | | +--rw latitude-minutes? uint8 - | | +--rw latitude-seconds? uint8 - | | +--rw longitude? bits - | | +--rw longitude-degrees? uint16 - | | +--rw longitude-minutes? uint8 - | | +--rw longitude-seconds? uint8 - | | +--rw altitude? int32 - | | +--rw address? simple-address + | | +--rw latitude? + | | | bits + | | +--rw latitude-degrees? + | | | uint8 + | | +--rw latitude-minutes? + | | | uint8 + | | +--rw latitude-seconds? + | | | uint8 + | | +--rw longitude? + | | | bits + | | +--rw longitude-degrees? + | | | uint16 + | | +--rw longitude-minutes? + | | | uint8 + | | +--rw longitude-seconds? + | | | uint8 + | | +--rw altitude? + | | | int32 + | | +--rw address? + | | simple-address | +--:(nat-traversal) | | +--rw nat-traversal - | | +--rw ms-udp-port? uint16 - | | +--rw etr-udp-port? uint16 - | | +--rw global-etr-rloc? simple-address - | | +--rw ms-rloc? simple-address - | | +--rw private-etr-rloc? simple-address - | | +--rw rtr-rlocs* simple-address + | | +--rw ms-udp-port? + | | | uint16 + | | +--rw etr-udp-port? + | | | uint16 + | | +--rw global-etr-rloc? + | | | simple-address + | | +--rw ms-rloc? + | | | simple-address + | | +--rw private-etr-rloc? + | | | simple-address + | | +--rw rtr-rlocs* + | | simple-address | +--:(explicit-locator-path) | | +--rw explicit-locator-path | | +--rw hop* [hop-id] - | | +--rw hop-id string - | | +--rw address? simple-address + | | +--rw hop-id + | | | string + | | +--rw address? + | | | simple-address | | +--rw lrs-bits? bits | +--:(source-dest-key) | | +--rw source-dest-key - | | +--rw source? simple-address - | | +--rw dest? simple-address + | | +--rw source? + | | | simple-address + | | +--rw dest? + | | simple-address | +--:(key-value-address) | | +--rw key-value-address - | | +--rw key? simple-address - | | +--rw value? simple-address + | | +--rw key? + | | | simple-address + | | +--rw value? + | | simple-address | +--:(service-path) | +--rw service-path - | +--rw service-path-id? service-path-id-type - | +--rw service-index? uint8 + | +--rw service-path-id? + | | service-path-id-type + | +--rw service-index? + | uint8 +--rw priority? uint8 +--rw weight? uint8 +--rw multicast-priority? uint8 +--rw multicast-weight? uint8 3.2. Module Definition - file "ietf-lisp-itr@2018-03-05.yang" + file "ietf-lisp-itr@2018-06-29.yang" module ietf-lisp-itr { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-itr"; + prefix lisp-itr; + + // RFC Ed.: replace occurences of XXXX with actual RFC number + // and remove this note import ietf-lisp { prefix lisp; + reference "RFC XXXX: LISP YANG model"; } import ietf-inet-types { prefix inet; + reference "RFC 6991: Common YANG Data Types"; } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA version)"; + } + organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: Editor: Vina Ermagan Editor: Alberto Rodriguez-Natal @@ -857,34 +1041,34 @@ Copyright (c) 2018 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 Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - // RFC Ed.: replace XXXX with actual RFC number and remove - // this note - reference "RFC XXXX"; - revision 2018-03-05 { + reference "RFC XXXX"; + revision 2018-06-29 { description "Initial revision."; reference "https://tools.ietf.org/html/rfc6830"; } - augment "/lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance" { + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" { when "lisp:lisp-role/lisp:lisp-role-type = 'lisp:itr' or lisp:lisp-role/lisp:lisp-role-type = 'lisp:pitr'" { description "Augment is valid when LISP role type is ITR or PITR."; } description "This augments LISP devices list with (P)ITR specific parameters."; container itr { presence "LISP (P)ITR operation enabled"; @@ -905,188 +1089,240 @@ description "Number of retries for sending the probes"; } leaf retries-interval { type uint16; units "seconds"; description "Interval in seconds between retries when sending probes. The action taken if all retries fail to receive is impementation specific."; - } } leaf itr-rlocs { type leafref { - path "/lisp:lisp/lisp:locator-sets/lisp:locator-set/" - + "lisp:locator-set-name"; + path "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" + + "/lisp:locator-sets/lisp:locator-set" + + "/lisp:locator-set-name"; } description "Reference to a locator set that the (P)ITR includes in Map-Requests"; } container map-resolvers { description "Map-Resolvers that the (P)ITR uses."; leaf-list map-resolver { type inet:ip-address; - min-elements 1; description "Each Map-Resolver within the list of Map-Resolvers."; } } container proxy-etrs { when "../../lisp:lisp-role/lisp:lisp-role-type = 'lisp:itr'" { description "Container exists only when LISP role type is ITR"; } description "Proxy ETRs that the ITR uses."; leaf-list proxy-etr-address{ type inet:ip-address; description "Proxy ETR RLOC address."; } } container map-cache{ + leaf size { + type uint32; + config false; + description + "Current number of entries in the EID-to-RLOC map-cache"; + } + leaf limit { + type uint32; + config false; + description + "Maximum permissible number of entries in the EID-to-RLOC + map-cache"; + } + uses lisp:mappings; description "EID to RLOCs mappings cache."; } + } } } + 4. LISP-ETR Module This module captures the configuration data model of a LISP ETR. The model also captures some operational data elements. 4.1. Module Structure module: ietf-lisp-etr - augment /lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance: + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/lisp:lisp: +--rw etr! +--rw map-servers | +--rw map-server* [ms-address] | +--rw ms-address inet:ip-address | +--rw auth-key? string | +--rw auth-key-type? lisp:auth-key-type +--rw local-eids +--rw virtual-network* [vni] +--rw vni lcaf:instance-id-type +--rw eids +--rw local-eid* [id] +--rw id lisp:eid-id +--rw eid-address - | +--rw address-type lisp-address-family-ref - | +--rw virtual-network-id? instance-id-type + | +--rw address-type + | | lisp-address-family-ref + | +--rw virtual-network-id? + | | instance-id-type | +--rw (address)? | +--:(no-address) | | +--rw no-address? empty | +--:(ipv4) - | | +--rw ipv4? inet:ipv4-address + | | +--rw ipv4? + | | inet:ipv4-address | +--:(ipv4-prefix) - | | +--rw ipv4-prefix? inet:ipv4-prefix + | | +--rw ipv4-prefix? + | | inet:ipv4-prefix | +--:(ipv6) - | | +--rw ipv6? inet:ipv6-address + | | +--rw ipv6? + | | inet:ipv6-address | +--:(ipv6-prefix) - | | +--rw ipv6-prefix? inet:ipv6-prefix + | | +--rw ipv6-prefix? + | | inet:ipv6-prefix | +--:(mac) - | | +--rw mac? yang:mac-address + | | +--rw mac? + | | yang:mac-address | +--:(distinguished-name) - | | +--rw distinguished-name? distinguished-name-type + | | +--rw distinguished-name? + | | distinguished-name-type | +--:(as-number) - | | +--rw as-number? inet:as-number + | | +--rw as-number? + | | inet:as-number | +--:(null-address) | | +--rw null-address | | +--rw address? empty | +--:(afi-list) | | +--rw afi-list | | +--rw address-list* simple-address | +--:(instance-id) | | +--rw instance-id | | +--rw iid? instance-id-type | | +--rw mask-length? uint8 | | +--rw address? simple-address | +--:(as-number-lcaf) | | +--rw as-number-lcaf | | +--rw as? inet:as-number | | +--rw address? simple-address | +--:(application-data) | | +--rw application-data - | | +--rw address? simple-address + | | +--rw address? + | | | simple-address | | +--rw protocol? uint8 | | +--rw ip-tos? int32 - | | +--rw local-port-low? inet:port-number - | | +--rw local-port-high? inet:port-number - | | +--rw remote-port-low? inet:port-number - | | +--rw remote-port-high? inet:port-number + | | +--rw local-port-low? + | | | inet:port-number + | | +--rw local-port-high? + | | | inet:port-number + | | +--rw remote-port-low? + | | | inet:port-number + | | +--rw remote-port-high? + | | inet:port-number | +--:(geo-coordinates) | | +--rw geo-coordinates | | +--rw latitude? bits | | +--rw latitude-degrees? uint8 | | +--rw latitude-minutes? uint8 | | +--rw latitude-seconds? uint8 | | +--rw longitude? bits | | +--rw longitude-degrees? uint16 | | +--rw longitude-minutes? uint8 | | +--rw longitude-seconds? uint8 | | +--rw altitude? int32 - | | +--rw address? simple-address + | | +--rw address? + | | simple-address | +--:(nat-traversal) | | +--rw nat-traversal | | +--rw ms-udp-port? uint16 | | +--rw etr-udp-port? uint16 - | | +--rw global-etr-rloc? simple-address - | | +--rw ms-rloc? simple-address - | | +--rw private-etr-rloc? simple-address - | | +--rw rtr-rlocs* simple-address + | | +--rw global-etr-rloc? + | | | simple-address + | | +--rw ms-rloc? + | | | simple-address + | | +--rw private-etr-rloc? + | | | simple-address + | | +--rw rtr-rlocs* + | | simple-address | +--:(explicit-locator-path) | | +--rw explicit-locator-path | | +--rw hop* [hop-id] | | +--rw hop-id string | | +--rw address? simple-address | | +--rw lrs-bits? bits | +--:(source-dest-key) | | +--rw source-dest-key | | +--rw source? simple-address | | +--rw dest? simple-address | +--:(key-value-address) | | +--rw key-value-address | | +--rw key? simple-address | | +--rw value? simple-address | +--:(service-path) | +--rw service-path - | +--rw service-path-id? service-path-id-type + | +--rw service-path-id? + | | service-path-id-type | +--rw service-index? uint8 - +--rw rlocs? -> /lisp:lisp/locator-sets/locator-set/locator-set-name + +--rw rlocs? leafref +--rw record-ttl? uint32 +--rw want-map-notify? boolean +--rw proxy-reply? boolean +--rw registration-interval? uint16 4.2. Module Definition - file "ietf-lisp-etr@2018-03-05.yang" + file "ietf-lisp-etr@2018-06-29.yang" module ietf-lisp-etr { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-etr"; + prefix lisp-etr; + // RFC Ed.: replace occurences of XXXX with actual RFC number + // and remove this note import ietf-lisp { prefix lisp; + reference "RFC XXXX: LISP YANG model"; } import ietf-lisp-address-types { prefix lcaf; + reference "RFC XXXX: LISP YANG model"; } import ietf-inet-types { prefix inet; + reference "RFC 6991: Common YANG Data Types"; } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA version)"; + } + organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: Editor: Vina Ermagan Editor: Alberto Rodriguez-Natal @@ -1105,31 +1341,31 @@ 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 Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - // RFC Ed.: replace XXXX with actual RFC number and remove - // this note + reference "RFC XXXX"; - revision 2018-03-05 { + revision 2018-06-29 { description "Initial revision."; reference "https://tools.ietf.org/html/rfc6830"; } - augment "/lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance" { + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" { when "lisp:lisp-role/lisp:lisp-role-type = 'lisp:etr' or lisp:lisp-role/lisp:lisp-role-type = 'lisp:petr'" { description "Augment is valid when LISP device type is (P)ETR."; } description "This augments LISP devices list with (P)ETR specific parameters."; container etr { presence "LISP (P)ETR operation enabled"; @@ -1194,22 +1430,24 @@ description "Unique id of local EID."; } container eid-address { uses lcaf:lisp-address; description "EID address in generic LISP address format."; } leaf rlocs { type leafref { - path "/lisp:lisp/lisp:locator-sets/lisp:locator-set/" - + "lisp:locator-set-name"; + path "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" + + "/lisp:locator-sets/lisp:locator-set" + + "/lisp:locator-set-name"; } description "Locator set mapped to this local EID."; } leaf record-ttl { type uint32; units minutes; description "Validity period of the EID to RLOCs mapping provided in Map-Replies."; @@ -1236,355 +1474,480 @@ "Interval between consecutive Map-Register messages."; } } } } } } } } + 5. LISP-Map-Server Module This module captures the configuration data model of a LISP Map Server [RFC6833]. The model also captures some operational data elements. 5.1. Module Structure module: ietf-lisp-mapserver - augment /lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance: + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/lisp:lisp: +--rw map-server! +--rw sites | +--rw site* [site-id] | +--rw site-id uint64 | +--rw auth-key | +--rw auth-key-value? string | +--rw auth-key-type* lisp:auth-key-type +--rw virtual-network-ids | +--rw virtual-network-identifier* [vni] | +--rw vni lcaf:instance-id-type | +--rw mappings | | +--rw mapping* [eid-id] | | +--rw eid-id lisp:eid-id | | +--rw eid-address - | | | +--rw address-type lisp-address-family-ref - | | | +--rw virtual-network-id? instance-id-type + | | | +--rw address-type + | | | | lisp-address-family-ref + | | | +--rw virtual-network-id? + | | | | instance-id-type | | | +--rw (address)? | | | +--:(no-address) | | | | +--rw no-address? empty | | | +--:(ipv4) - | | | | +--rw ipv4? inet:ipv4-address + | | | | +--rw ipv4? + | | | | inet:ipv4-address | | | +--:(ipv4-prefix) - | | | | +--rw ipv4-prefix? inet:ipv4-prefix + | | | | +--rw ipv4-prefix? + | | | | inet:ipv4-prefix | | | +--:(ipv6) - | | | | +--rw ipv6? inet:ipv6-address + | | | | +--rw ipv6? + | | | | inet:ipv6-address | | | +--:(ipv6-prefix) - | | | | +--rw ipv6-prefix? inet:ipv6-prefix + | | | | +--rw ipv6-prefix? + | | | | inet:ipv6-prefix | | | +--:(mac) - | | | | +--rw mac? yang:mac-address + | | | | +--rw mac? + | | | | yang:mac-address | | | +--:(distinguished-name) - | | | | +--rw distinguished-name? distinguished-name-type + | | | | +--rw distinguished-name? + | | | | distinguished-name-type | | | +--:(as-number) - | | | | +--rw as-number? inet:as-number + | | | | +--rw as-number? + | | | | inet:as-number | | | +--:(null-address) | | | | +--rw null-address | | | | +--rw address? empty | | | +--:(afi-list) | | | | +--rw afi-list | | | | +--rw address-list* simple-address | | | +--:(instance-id) | | | | +--rw instance-id | | | | +--rw iid? instance-id-type | | | | +--rw mask-length? uint8 | | | | +--rw address? simple-address | | | +--:(as-number-lcaf) | | | | +--rw as-number-lcaf | | | | +--rw as? inet:as-number | | | | +--rw address? simple-address | | | +--:(application-data) | | | | +--rw application-data - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | | simple-address | | | | +--rw protocol? uint8 | | | | +--rw ip-tos? int32 - | | | | +--rw local-port-low? inet:port-number - | | | | +--rw local-port-high? inet:port-number - | | | | +--rw remote-port-low? inet:port-number - | | | | +--rw remote-port-high? inet:port-number + | | | | +--rw local-port-low? + | | | | | inet:port-number + | | | | +--rw local-port-high? + | | | | | inet:port-number + | | | | +--rw remote-port-low? + | | | | | inet:port-number + | | | | +--rw remote-port-high? + | | | | inet:port-number | | | +--:(geo-coordinates) | | | | +--rw geo-coordinates | | | | +--rw latitude? bits | | | | +--rw latitude-degrees? uint8 | | | | +--rw latitude-minutes? uint8 | | | | +--rw latitude-seconds? uint8 | | | | +--rw longitude? bits | | | | +--rw longitude-degrees? uint16 | | | | +--rw longitude-minutes? uint8 | | | | +--rw longitude-seconds? uint8 | | | | +--rw altitude? int32 - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | simple-address | | | +--:(nat-traversal) | | | | +--rw nat-traversal | | | | +--rw ms-udp-port? uint16 | | | | +--rw etr-udp-port? uint16 - | | | | +--rw global-etr-rloc? simple-address - | | | | +--rw ms-rloc? simple-address - | | | | +--rw private-etr-rloc? simple-address - | | | | +--rw rtr-rlocs* simple-address + | | | | +--rw global-etr-rloc? + | | | | | simple-address + | | | | +--rw ms-rloc? + | | | | | simple-address + | | | | +--rw private-etr-rloc? + | | | | | simple-address + | | | | +--rw rtr-rlocs* + | | | | simple-address | | | +--:(explicit-locator-path) | | | | +--rw explicit-locator-path | | | | +--rw hop* [hop-id] | | | | +--rw hop-id string | | | | +--rw address? simple-address | | | | +--rw lrs-bits? bits | | | +--:(source-dest-key) | | | | +--rw source-dest-key | | | | +--rw source? simple-address | | | | +--rw dest? simple-address | | | +--:(key-value-address) | | | | +--rw key-value-address | | | | +--rw key? simple-address | | | | +--rw value? simple-address | | | +--:(service-path) | | | +--rw service-path - | | | +--rw service-path-id? service-path-id-type + | | | +--rw service-path-id? + | | | | service-path-id-type | | | +--rw service-index? uint8 | | +--rw site-id* uint64 | | +--rw more-specifics-accepted? boolean | | +--rw mapping-expiration-timeout? int16 + | | +--ro first-registration-time? + | | | yang:date-and-time + | | +--ro last-registration-time? + | | | yang:date-and-time | | +--rw mapping-records | | +--rw mapping-record* [xtr-id] - | | +--rw xtr-id lisp:xtr-id-type + | | +--rw xtr-id + | | | lisp:xtr-id-type | | +--rw site-id? uint64 | | +--rw eid - | | | +--rw address-type lisp-address-family-ref - | | | +--rw virtual-network-id? instance-id-type + | | | +--rw address-type + | | | | lisp-address-family-ref + | | | +--rw virtual-network-id? + | | | | instance-id-type | | | +--rw (address)? | | | +--:(no-address) - | | | | +--rw no-address? empty + | | | | +--rw no-address? + | | | | empty | | | +--:(ipv4) - | | | | +--rw ipv4? inet:ipv4-address + | | | | +--rw ipv4? + | | | | inet:ipv4-address | | | +--:(ipv4-prefix) - | | | | +--rw ipv4-prefix? inet:ipv4-prefix + | | | | +--rw ipv4-prefix? + | | | | inet:ipv4-prefix | | | +--:(ipv6) - | | | | +--rw ipv6? inet:ipv6-address + | | | | +--rw ipv6? + | | | | inet:ipv6-address | | | +--:(ipv6-prefix) - | | | | +--rw ipv6-prefix? inet:ipv6-prefix + | | | | +--rw ipv6-prefix? + | | | | inet:ipv6-prefix | | | +--:(mac) - | | | | +--rw mac? yang:mac-address + | | | | +--rw mac? + | | | | yang:mac-address | | | +--:(distinguished-name) - | | | | +--rw distinguished-name? distinguished-name-type + | | | | +--rw distinguished-name? + | | | | distinguished-name-type | | | +--:(as-number) - | | | | +--rw as-number? inet:as-number + | | | | +--rw as-number? + | | | | inet:as-number | | | +--:(null-address) | | | | +--rw null-address | | | | +--rw address? empty | | | +--:(afi-list) | | | | +--rw afi-list - | | | | +--rw address-list* simple-address + | | | | +--rw address-list* + | | | | simple-address | | | +--:(instance-id) | | | | +--rw instance-id - | | | | +--rw iid? instance-id-type + | | | | +--rw iid? + | | | | | instance-id-type | | | | +--rw mask-length? uint8 - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | simple-address | | | +--:(as-number-lcaf) | | | | +--rw as-number-lcaf | | | | +--rw as? inet:as-number | | | | +--rw address? simple-address | | | +--:(application-data) | | | | +--rw application-data - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | | simple-address | | | | +--rw protocol? uint8 | | | | +--rw ip-tos? int32 - | | | | +--rw local-port-low? inet:port-number - | | | | +--rw local-port-high? inet:port-number - | | | | +--rw remote-port-low? inet:port-number - | | | | +--rw remote-port-high? inet:port-number + | | | | +--rw local-port-low? + | | | | | inet:port-number + | | | | +--rw local-port-high? + | | | | | inet:port-number + | | | | +--rw remote-port-low? + | | | | | inet:port-number + | | | | +--rw remote-port-high? + | | | | inet:port-number | | | +--:(geo-coordinates) | | | | +--rw geo-coordinates | | | | +--rw latitude? bits | | | | +--rw latitude-degrees? uint8 | | | | +--rw latitude-minutes? uint8 | | | | +--rw latitude-seconds? uint8 | | | | +--rw longitude? bits - | | | | +--rw longitude-degrees? uint16 + | | | | +--rw longitude-degrees? + | | | | | uint16 | | | | +--rw longitude-minutes? uint8 | | | | +--rw longitude-seconds? uint8 | | | | +--rw altitude? int32 - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | simple-address | | | +--:(nat-traversal) | | | | +--rw nat-traversal | | | | +--rw ms-udp-port? uint16 | | | | +--rw etr-udp-port? uint16 - | | | | +--rw global-etr-rloc? simple-address - | | | | +--rw ms-rloc? simple-address - | | | | +--rw private-etr-rloc? simple-address - | | | | +--rw rtr-rlocs* simple-address + | | | | +--rw global-etr-rloc? + | | | | | simple-address + | | | | +--rw ms-rloc? + | | | | | simple-address + | | | | +--rw private-etr-rloc? + | | | | | simple-address + | | | | +--rw rtr-rlocs* + | | | | simple-address | | | +--:(explicit-locator-path) | | | | +--rw explicit-locator-path | | | | +--rw hop* [hop-id] | | | | +--rw hop-id string - | | | | +--rw address? simple-address + | | | | +--rw address? + | | | | | simple-address | | | | +--rw lrs-bits? bits | | | +--:(source-dest-key) | | | | +--rw source-dest-key | | | | +--rw source? simple-address | | | | +--rw dest? simple-address | | | +--:(key-value-address) | | | | +--rw key-value-address | | | | +--rw key? simple-address | | | | +--rw value? simple-address | | | +--:(service-path) | | | +--rw service-path - | | | +--rw service-path-id? service-path-id-type + | | | +--rw service-path-id? + | | | | service-path-id-type | | | +--rw service-index? uint8 | | +--rw time-to-live? uint32 - | | +--rw creation-time? yang:date-and-time + | | +--ro creation-time? + | | | yang:date-and-time | | +--rw authoritative? bits | | +--rw static? boolean | | +--rw (locator-list)? | | +--:(negative-mapping) - | | | +--rw map-reply-action? map-reply-action + | | | +--rw map-reply-action? + | | | map-reply-action | | +--:(positive-mapping) | | +--rw rlocs | | +--rw locator* [id] - | | +--rw id string + | | +--rw id + | | | string | | +--rw locator-address - | | | +--rw address-type lisp-address-family-ref - | | | +--rw virtual-network-id? instance-id-type + | | | +--rw address-type + | | | | lisp-address-family-ref + | | | +--rw virtual-network-id? + | | | | instance-id-type | | | +--rw (address)? | | | +--:(no-address) - | | | | +--rw no-address? empty + | | | | +--rw no-address? + | | | | empty | | | +--:(ipv4) - | | | | +--rw ipv4? inet:ipv4-address + | | | | +--rw ipv4? + | | | | inet:ipv4-address | | | +--:(ipv4-prefix) - | | | | +--rw ipv4-prefix? inet:ipv4-prefix + | | | | +--rw ipv4-prefix? + | | | | inet:ipv4-prefix | | | +--:(ipv6) - | | | | +--rw ipv6? inet:ipv6-address + | | | | +--rw ipv6? + | | | | inet:ipv6-address | | | +--:(ipv6-prefix) - | | | | +--rw ipv6-prefix? inet:ipv6-prefix + | | | | +--rw ipv6-prefix? + | | | | inet:ipv6-prefix | | | +--:(mac) - | | | | +--rw mac? yang:mac-address + | | | | +--rw mac? + | | | | yang:mac-address | | | +--:(distinguished-name) - | | | | +--rw distinguished-name? distinguished-name-type + | | | | +--rw distinguished-name? + | | | | distinguished-name-type | | | +--:(as-number) - | | | | +--rw as-number? inet:as-number + | | | | +--rw as-number? + | | | | inet:as-number | | | +--:(null-address) | | | | +--rw null-address - | | | | +--rw address? empty + | | | | +--rw address? + | | | | empty | | | +--:(afi-list) | | | | +--rw afi-list - | | | | +--rw address-list* simple-address + | | | | +--rw address-list* + | | | | simple-address | | | +--:(instance-id) | | | | +--rw instance-id - | | | | +--rw iid? instance-id-type - | | | | +--rw mask-length? uint8 - | | | | +--rw address? simple-address + | | | | +--rw iid? + | | | | | instance-id-type + | | | | +--rw mask-length? + | | | | | uint8 + | | | | +--rw address? + | | | | simple-address | | | +--:(as-number-lcaf) | | | | +--rw as-number-lcaf - | | | | +--rw as? inet:as-number - | | | | +--rw address? simple-address + | | | | +--rw as? + | | | | | inet:as-number + | | | | +--rw address? + | | | | simple-address | | | +--:(application-data) | | | | +--rw application-data - | | | | +--rw address? simple-address - | | | | +--rw protocol? uint8 - | | | | +--rw ip-tos? int32 - | | | | +--rw local-port-low? inet:port-number - | | | | +--rw local-port-high? inet:port-number - | | | | +--rw remote-port-low? inet:port-number - | | | | +--rw remote-port-high? inet:port-number + | | | | +--rw address? + | | | | | simple-address + | | | | +--rw protocol? + | | | | | uint8 + | | | | +--rw ip-tos? + | | | | | int32 + | | | | +--rw local-port-low? + | | | | | inet:port-number + | | | | +--rw local-port-high? + | | | | | inet:port-number + | | | | +--rw remote-port-low? + | | | | | inet:port-number + | | | | +--rw remote-port-high? + | | | | inet:port-number | | | +--:(geo-coordinates) | | | | +--rw geo-coordinates - | | | | +--rw latitude? bits - | | | | +--rw latitude-degrees? uint8 - | | | | +--rw latitude-minutes? uint8 - | | | | +--rw latitude-seconds? uint8 - | | | | +--rw longitude? bits - | | | | +--rw longitude-degrees? uint16 - | | | | +--rw longitude-minutes? uint8 - | | | | +--rw longitude-seconds? uint8 - | | | | +--rw altitude? int32 - | | | | +--rw address? simple-address + | | | | +--rw latitude? + | | | | | bits + | | | | +--rw latitude-degrees? + | | | | | uint8 + | | | | +--rw latitude-minutes? + | | | | | uint8 + | | | | +--rw latitude-seconds? + | | | | | uint8 + | | | | +--rw longitude? + | | | | | bits + | | | | +--rw longitude-degrees? + | | | | | uint16 + | | | | +--rw longitude-minutes? + | | | | | uint8 + | | | | +--rw longitude-seconds? + | | | | | uint8 + | | | | +--rw altitude? + | | | | | int32 + | | | | +--rw address? + | | | | simple-address | | | +--:(nat-traversal) | | | | +--rw nat-traversal - | | | | +--rw ms-udp-port? uint16 - | | | | +--rw etr-udp-port? uint16 - | | | | +--rw global-etr-rloc? simple-address - | | | | +--rw ms-rloc? simple-address - | | | | +--rw private-etr-rloc? simple-address - | | | | +--rw rtr-rlocs* simple-address + | | | | +--rw ms-udp-port? + | | | | | uint16 + | | | | +--rw etr-udp-port? + | | | | | uint16 + | | | | +--rw global-etr-rloc? + | | | | | simple-address + | | | | +--rw ms-rloc? + | | | | | simple-address + | | | | +--rw private-etr-rloc? + | | | | | simple-address + | | | | +--rw rtr-rlocs* + | | | | simple-address | | | +--:(explicit-locator-path) | | | | +--rw explicit-locator-path | | | | +--rw hop* [hop-id] - | | | | +--rw hop-id string - | | | | +--rw address? simple-address - | | | | +--rw lrs-bits? bits + | | | | +--rw hop-id + | | | | | string + | | | | +--rw address? + | | | | | simple-address + | | | | +--rw lrs-bits? + | | | | bits | | | +--:(source-dest-key) | | | | +--rw source-dest-key - | | | | +--rw source? simple-address - | | | | +--rw dest? simple-address + | | | | +--rw source? + | | | | | simple-address + | | | | +--rw dest? + | | | | simple-address | | | +--:(key-value-address) | | | | +--rw key-value-address - | | | | +--rw key? simple-address - | | | | +--rw value? simple-address + | | | | +--rw key? + | | | | | simple-address + | | | | +--rw value? + | | | | simple-address | | | +--:(service-path) | | | +--rw service-path - | | | +--rw service-path-id? service-path-id-type - | | | +--rw service-index? uint8 - | | +--rw priority? uint8 - | | +--rw weight? uint8 - | | +--rw multicast-priority? uint8 - | | +--rw multicast-weight? uint8 + | | | +--rw service-path-id? + | | | | service-path-id-type + | | | +--rw service-index? + | | | uint8 + | | +--rw priority? + | | | uint8 + | | +--rw weight? + | | | uint8 + | | +--rw multicast-priority? + | | | uint8 + | | +--rw multicast-weight? + | | uint8 | +--ro counters - | +--ro map-registers-in? yang:counter32 - | +--ro map-registers-in-auth-failed? yang:counter32 - | +--ro map-notify-records-out? yang:counter32 - | +--ro proxy-reply-records-out? yang:counter32 - | +--ro map-requests-forwarded-out? yang:counter32 + | +--ro map-registers-in? yang:counter64 + | +--ro map-registers-in-auth-failed? yang:counter64 + | +--ro map-notify-records-out? yang:counter64 + | +--ro proxy-reply-records-out? yang:counter64 + | +--ro map-requests-forwarded-out? yang:counter64 +--rw mapping-system-type? lisp:mapping-system-ref +--ro summary | +--ro number-configured-sites? uint32 | +--ro number-registered-sites? uint32 | +--ro af-datum | +--ro af-data* [address-type] - | +--ro address-type lcaf:lisp-address-family-ref + | +--ro address-type + | | lcaf:lisp-address-family-ref | +--ro number-configured-eids? uint32 | +--ro number-registered-eids? uint32 +--ro counters - +--ro map-registers-in? yang:counter32 - +--ro map-registers-in-auth-failed? yang:counter32 - +--ro map-notify-records-out? yang:counter32 - +--ro proxy-reply-records-out? yang:counter32 - +--ro map-requests-forwarded-out? yang:counter32 + +--ro map-registers-in? yang:counter64 + +--ro map-registers-in-auth-failed? yang:counter64 + +--ro map-notify-records-out? yang:counter64 + +--ro proxy-reply-records-out? yang:counter64 + +--ro map-requests-forwarded-out? yang:counter64 5.2. Module Definition - file "ietf-lisp-mapserver@2018-03-05.yang" + file "ietf-lisp-mapserver@2018-06-29.yang" module ietf-lisp-mapserver { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-mapserver"; + prefix lisp-ms; + + // RFC Ed.: replace occurences of XXXX with actual RFC number + // and remove this note import ietf-lisp { prefix lisp; + reference "RFC XXXX: LISP YANG model"; } import ietf-lisp-address-types { prefix lcaf; + reference "RFC XXXX: LISP YANG model"; } import ietf-yang-types { prefix yang; - revision-date 2013-07-15; + reference "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA version)"; } organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: + Editor: Vina Ermagan Editor: Alberto Rodriguez-Natal Editor: Reshad Rahman "; description "This YANG module defines the generic parameters for a LISP @@ -1597,25 +1960,24 @@ 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 Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - // RFC Ed.: replace XXXX with actual RFC number and remove - // this note + reference "RFC XXXX"; - revision 2018-03-05 { + revision 2018-06-29 { description "Initial revision."; reference "https://tools.ietf.org/html/rfc6833"; } identity ms { base lisp:lisp-role; description "LISP Map-Server."; @@ -1651,22 +2014,22 @@ } leaf map-requests-forwarded-out { type yang:counter64; description "Number of outgoing Map-Requests forwarded to ETR"; } } } - augment "/lisp:lisp/lisp:lisp-router-instances" - + "/lisp:lisp-router-instance" { + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" { when "lisp:lisp-role/lisp:lisp-role-type = 'lisp-ms:ms'" { description "Augment is valid when LISP device type is Map-Server."; } description "This augments LISP devices list with Map-Server specific parameters."; container map-server { presence "LISP Map-Server operation enabled"; description @@ -1741,20 +2104,34 @@ can be registered."; } leaf mapping-expiration-timeout { type int16; units "seconds"; default "180"; //3 times the mapregister int description "Time before mapping is expired if no new registrations are received."; } + leaf first-registration-time { + type yang:date-and-time; + config false; + description + "Time at which the first registration for this EID + was received"; + } + leaf last-registration-time { + type yang:date-and-time; + config false; + description + "Time at which the last registration for this EID + was received"; + } container mapping-records { description "Datastore of registered mappings."; list mapping-record{ key xtr-id; description "Registered mapping."; leaf xtr-id { type lisp:xtr-id-type; description "xTR ID"; @@ -1818,36 +2196,51 @@ 6. LISP-Map-Resolver Module This module captures the configuration data model of a LISP Map Resolver [RFC6833]. The model also captures some operational data elements. 6.1. Module Structure module: ietf-lisp-mapresolver - augment /lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance: + augment /rt:routing/rt:control-plane-protocols + /rt:control-plane-protocol/lisp:lisp: +--rw map-resolver! +--rw mapping-system-type? lisp:mapping-system-ref +--rw ms-address? inet:ip-address 6.2. Module Definition - file "ietf-lisp-mapresolver@2018-03-05.yang" + file "ietf-lisp-mapresolver@2018-06-29.yang" module ietf-lisp-mapresolver { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-mapresolver"; + prefix lisp-mr; + + // RFC Ed.: replace occurences of XXXX with actual RFC number + // and remove this note import ietf-lisp { prefix lisp; + reference "RFC XXXX: LISP YANG model"; } import ietf-inet-types { prefix inet; + reference "RFC 6991: Common YANG Data Types"; + } + import ietf-routing { + prefix "rt"; + reference + "RFC 8349: A YANG Data Model for Routing Management + (NMDA version)"; } organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: Editor: Vina Ermagan @@ -1868,84 +2261,89 @@ 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 Simplified BSD License set forth in Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - // RFC Ed.: replace XXXX with actual RFC number and remove - // this note + reference "RFC XXXX"; - revision 2018-05-03 { + revision 2018-06-29 { description "Initial revision."; reference "https://tools.ietf.org/html/rfc6833"; } identity mr { base lisp:lisp-role; description "LISP Map-Resolver."; } - augment "/lisp:lisp/lisp:lisp-router-instances" - +"/lisp:lisp-router-instance" { + + augment "/rt:routing/rt:control-plane-protocols" + + "/rt:control-plane-protocol/lisp:lisp" { when "lisp:lisp-role/lisp:lisp-role-type = 'lisp-mr:mr'" { description "Augment is valid when LISP device type is Map-Resolver."; } description "This augments LISP devices list with Map-Resolver specific parameters."; container map-resolver { presence "LISP Map-Resolver operation enabled"; description "Map-Resolver parameters."; leaf mapping-system-type { type lisp:mapping-system-ref; description "A reference to the mapping system"; } leaf ms-address { - when "../mapping-system-type='lisp-mr:single-node-mapping-system'"; + when "../mapping-system-type='lisp:single-node-mapping-system'"; type inet:ip-address; description "address to reach the Map Server when " + "lisp-mr:single-node-mapping-system is being used."; } } } } 7. LISP-Address-Types Module This module captures the various LISP address types, and is an essential building block used in other LISP modules. 7.1. Module Definition - file "ietf-lisp-address-types@2018-03-05.yang" + file "ietf-lisp-address-types@2018-06-29.yang" module ietf-lisp-address-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-address-types"; + prefix laddr; + import ietf-inet-types { prefix inet; - revision-date 2013-07-15; + reference "RFC 6991: Common YANG Data Types"; } import ietf-yang-types { prefix yang; - revision-date 2013-07-15; + reference "RFC 6991: Common YANG Data Types"; } + organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact "WG Web: WG List: Editor: Vina Ermagan Editor: Alberto Rodriguez-Natal @@ -1969,21 +2367,21 @@ (http://trustee.ietf.org/license-info). This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; // RFC Ed.: replace XXXX with actual RFC number and remove // this note reference "RFC XXXX"; - revision 2018-03-05 { + revision 2018-06-29 { description "Initial revision."; reference "http://tools.ietf.org/html/draft-ietf-lisp-lcaf-10"; } identity lisp-address-family { description "Base identity from which identities describing LISP address families are derived."; } @@ -2183,21 +2581,21 @@ leaf virtual-network-id { type instance-id-type; description "Virtual Network Identifier (instance-id) of the address."; } choice address { description "Various LISP address types, including IP, MAC, and LCAF."; leaf no-address { - when "../address-type = 'laddr:no-addr-afi'" { + when "../address-type = 'laddr:no-address-afi'" { description "When AFI is 0."; } type empty; description "No address."; } leaf ipv4 { when "../address-type = 'laddr:ipv4-afi'" { description @@ -2617,40 +3012,328 @@ type uint8; description "Service path index for NSH header"; } } } } } +7.2. Data Model examples + + This section presents some simple and illustrative examples on how to + configure LISP. + +7.2.1. LISP protocol instance + + The following is an example configuration for a LISP protocol + instance with the name "LISP1". There are also 2 VNIs configured. + + + + + + VRF-BLUE + + true + + + VRF-RED + + true + + + + + + + lisp:lisp + + LISP1 + + + + 1000 + VRF-BLUE + + + 2000 + VRF-RED + + + + + + + +7.2.2. LISP ITR + + The following is an example configuration for ITR functionality under + "LISP1". There are 2 Map-Resolvers configured. + + + + + + + + lisp:lisp + + LISP1 + + + itr + + + + 2001:db8:203:0:113::1 + 2001:db8:204:0:113::1 + + + + + + + + +7.2.3. LISP ETR + + The following is an example configuration for ETR functionality under + "LISP1". There are 2 Map-Servers and 2 local EIDs configured. + + + + + + + + lisp:lisp + + LISP1 + + + etr + + + 1 + + + + + 2001:db8:203:0:113::1 + *Kye^$$1#gb91U04zpa! + hmac-sha-256-128 + + + 2001:db8:204:0:113::1 + *Kye^$$1#gb91U04zpa! + hmac-sha-256-128 + + + + + 1000 + + + 2001:db8:400:0:100::0 + + + laddr:ipv6-prefix-afi + + 2001:db8:400:0:100::/80 + + + + + + 2000 + + + 2001:db8:800:0:200::0 + + + laddr:ipv6-prefix-afi + + 2001:db8:800:0:200::/80 + + + + + + + + + + + + + +7.2.4. LISP Map-Server + + The following is an example configuration for Map-Server + functionality under "LISP1". There are 2 mappings configured. + + + + + + + lisp:lisp + + LISP1 + + + + lisp-ms:ms + + + + + + 1 + + *Kye^$$1#gb91U04zpa! + hmac-sha-256-128 + + + + + + 1000 + + + 1 + + + laddr:ipv6-prefix-afi + + 2001:db8:400:0:100::/80 + + + + + + 2000 + + + 1 + + + laddr:ipv6-prefix-afi + + 2001:db8:800:0:200::/80 + + + + + + + + + + + + 8. Acknowledgments The tree view and the YANG model shown in this document have been formated with the 'pyang' tool. 9. IANA Considerations - This memo includes no request to IANA. + The IANA is requested to as assign a new namespace URI from the IETF + XML registry. + + This document registers the following namesace URIs in the IETF XML + registry [RFC3688]: + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp-itr + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp-etr + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp-mapserver + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp-mapresolver + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- + + -------------------------------------------------------------------- + + URI: urn:ietf:params:xml:ns:yang:ietf-lisp-address-types + + Registrant Contact: The IESG. + + XML: N/A, the requested URI is an XML namespace. + + -------------------------------------------------------------------- 10. Security Considerations Security Considerations TBD 11. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . + [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, + DOI 10.17487/RFC3688, January 2004, + . + [RFC6830] Farinacci, D., Fuller, V., Meyer, D., and D. Lewis, "The Locator/ID Separation Protocol (LISP)", RFC 6830, DOI 10.17487/RFC6830, January 2013, . [RFC6832] Lewis, D., Meyer, D., Farinacci, D., and V. Fuller, "Interworking between Locator/ID Separation Protocol (LISP) and Non-LISP Sites", RFC 6832, DOI 10.17487/RFC6832, January 2013, . @@ -2667,21 +3350,35 @@ [RFC8060] Farinacci, D., Meyer, D., and J. Snijders, "LISP Canonical Address Format (LCAF)", RFC 8060, DOI 10.17487/RFC8060, February 2017, . [RFC8111] Fuller, V., Lewis, D., Ermagan, V., Jain, A., and A. Smirnov, "Locator/ID Separation Protocol Delegated Database Tree (LISP-DDT)", RFC 8111, DOI 10.17487/RFC8111, May 2017, . + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, . + + [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", + BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, + . + + [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for + Routing Management (NMDA Version)", RFC 8349, + DOI 10.17487/RFC8349, March 2018, + . + Authors' Addresses + Vina Ermagan Cisco Systems San Jose, CA USA Email: vermagan@cisco.com Alberto Rodriguez-Natal Cisco Systems San Jose, CA