From 3cb345044738b742be165a49398779fcd96d5fe4 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Thu, 1 Mar 2018 16:44:53 +0100 Subject: Move ietf-routing-types to routing-api Current routing implementation does not use it, but other features planned for 18.04 (e.g. SRv6) will do. Change-Id: I0124ea27b5d24c1ac2e5ad196dc05df3a970d1c7 Signed-off-by: Marek Gradzki --- .../yang/hc2vpp-ietf-routing-types@2017-02-27.yang | 725 --------------------- .../yang/hc2vpp-ietf-routing-types@2017-02-27.yang | 725 +++++++++++++++++++++ 2 files changed, 725 insertions(+), 725 deletions(-) delete mode 100644 mpls/api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang create mode 100644 routing/routing-api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang diff --git a/mpls/api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang b/mpls/api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang deleted file mode 100644 index 6d0f853a8..000000000 --- a/mpls/api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang +++ /dev/null @@ -1,725 +0,0 @@ -module hc2vpp-ietf-routing-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-routing-types"; - prefix "rt-types"; - - import ietf-yang-types { - prefix "yang"; - } - - import ietf-inet-types { - prefix "inet"; - } - - organization "IETF Routing Area Working Group (rtgwg)"; - - contact - "Routing Area Working Group - "; - - description - "This module contains a collection of YANG data types - considered generally useful for routing protocols."; - - revision 2017-02-27 { - description - "Initial revision."; - reference - "RFC TBD: Routing YANG Data Types"; - } - - /*** collection of types related to routing ***/ - typedef router-id { - type yang:dotted-quad; - description - "A 32-bit number in the dotted quad format assigned to each - router. This number uniquely identifies the router within an - Autonomous System."; - } - - // address-family - identity address-family { - description - "Base identity from which identities describing address - families are derived."; - } - - identity ipv4 { - base address-family; - description - "This identity represents IPv4 address family."; - } - - identity ipv6 { - base address-family; - description - "This identity represents IPv6 address family."; - } - - //The rest of the values deinfed in the IANA registry - - identity nsap { - base address-family; - description - "Address family from IANA registry."; - } - identity hdlc { - base address-family; - description - "(8-bit multidrop) - Address family from IANA registry."; - } - identity bbn1822 { - base address-family; - description - "AHIP (BBN report #1822) - Address family from IANA registry."; - } - identity ieee802 { - base address-family; - description - "(includes all 802 media plus Ethernet canonical format) - Address family from IANA registry."; - } - identity e163 { - base address-family; - description - "Address family from IANA registry."; - } - identity e164 { - base address-family; - description - "SMDS, Frame Relay, ATM - Address family from IANA registry."; - } - identity f69 { - base address-family; - description - "(Telex) - Address family from IANA registry."; - } - identity x121 { - base address-family; - description - "(X.25, Frame Relay) - Address family from IANA registry."; - } - identity ipx { - base address-family; - description - "Address family from IANA registry."; - } - identity appletalk { - base address-family; - description - "Address family from IANA registry."; - } - identity decnet-iv { - base address-family; - description - "Decnet IV - Address family from IANA registry."; - } - identity vines { - base address-family; - description - "Banyan Vines - Address family from IANA registry."; - } - identity e164-nsap { - base address-family; - description - "E.164 with NSAP format subaddress - Address family from IANA registry."; - } - identity dns { - base address-family; - description - "Domain Name System - Address family from IANA registry."; - } - identity dn { - base address-family; - description - "Distinguished Name - Address family from IANA registry."; - } - identity as-num { - base address-family; - description - "AS Number - Address family from IANA registry."; - } - identity xtp-v4 { - base address-family; - description - "XTP over IPv4 - Address family from IANA registry."; - } - identity xtp-v6 { - base address-family; - description - "XTP over IPv6 - Address family from IANA registry."; - } - identity xtp { - base address-family; - description - "XTP native mode XTP - Address family from IANA registry."; - } - identity fc-port { - base address-family; - description - "Fibre Channel World-Wide Port Name - Address family from IANA registry."; - } - identity fc-node { - base address-family; - description - "Fibre Channel World-Wide Node Name - Address family from IANA registry."; - } - identity gwid { - base address-family; - description - "Address family from IANA registry."; - } - identity l2vpn { - base address-family; - description - "Address family from IANA registry."; - } - identity mpls-tp-section-eid { - base address-family; - description - "MPLS-TP Section Endpoint Identifier - Address family from IANA registry."; - } - identity mpls-tp-lsp-eid { - base address-family; - description - "MPLS-TP LSP Endpoint Identifier - Address family from IANA registry."; - } - identity mpls-tp-pwe-eid { - base address-family; - description - "MPLS-TP Pseudowire Endpoint Identifier - Address family from IANA registry."; - } - identity mt-v4 { - base address-family; - description - "Multi-Topology IPv4. - Address family from IANA registry."; - } - identity mt-v6 { - base address-family; - description - "Multi-Topology IPv6. - Address family from IANA registry."; - } - - /*** collection of types related to VPN ***/ - typedef route-target { - type string { - pattern - '(0:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' - + '[0-5]?\d{0,3}\d):(429496729[0-5]|42949672[0-8]\d|' - + '4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|' - + '4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|' - + '[0-3]?\d{0,8}\d))|' - + '(1:(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|' - + '1\d{2}|2[0-4]\d|25[0-5])):(6553[0-5]|655[0-2]\d|' - + '65[0-4]\d{2}|6[0-4]\d{3}|[0-5]?\d{0,3}\d))|' - + '(2:(429496729[0-5]|42949672[0-8]\d|4294967[01]\d{2}|' - + '429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|' - + '429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[0-3]?\d{0,8}\d):' - + '(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' - + '[0-5]?\d{0,3}\d))'; - } - description - "A route target is an 8-octet BGP extended community - initially identifying a set of sites in a BGP - VPN (RFC 4364). However, it has since taken on a more - general role in BGP route filtering. - A route target consists of three fields: - a 2-octet type field, an administrator field, - and an assigned number field. - According to the data formats for type 0, 1, and 2 defined in - RFC4360 and RFC5668, the encoding pattern is defined as: - - 0:2-octet-asn:4-octet-number - 1:4-octet-ipv4addr:2-octet-number - 2:4-octet-asn:2-octet-number. - - Some valid examples are: 0:100:100, 1:1.1.1.1:100, and - 2:1234567890:203."; - reference - "RFC4360: BGP Extended Communities Attribute. - RFC5668: 4-Octet AS Specific BGP Extended Community."; - } - - typedef route-target-type { - type enumeration { - enum "import" { - value "0"; - description - "The route target applies to route import."; - } - enum "export" { - value "1"; - description - "The route target applies to route export."; - } - enum "both" { - value "2"; - description - "The route target applies to both route import and - route export."; - } - } - description - "Indicates the role a route target takes - in route filtering."; - reference - "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; - } - - typedef route-distinguisher { - type string { - pattern - '(0:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' - + '[0-5]?\d{0,3}\d):(429496729[0-5]|42949672[0-8]\d|' - + '4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|' - + '4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|' - + '[0-3]?\d{0,8}\d))|' - + '(1:(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|' - + '1\d{2}|2[0-4]\d|25[0-5])):(6553[0-5]|655[0-2]\d|' - + '65[0-4]\d{2}|6[0-4]\d{3}|[0-5]?\d{0,3}\d))|' - + '(2:(429496729[0-5]|42949672[0-8]\d|4294967[01]\d{2}|' - + '429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|' - + '429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[0-3]?\d{0,8}\d):' - + '(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' - + '[0-5]?\d{0,3}\d))|' - + '(([3-9a-fA-F]|[1-9a-fA-F][\da-fA-F]{1,3}):' - + '[\da-fA-F]{1,12})'; - } - description - "A route distinguisher is an 8-octet value used to distinguish - routes from different BGP VPNs (RFC 4364). A route - distinguisher consists of three fields: A 2-octet type field, - an administrator field, and an assigned number field. - According to the data formats for type 0, 1, and 2 defined in - RFC4364, the encoding pattern is defined as: - - 0:2-octet-asn:4-octet-number - 1:4-octet-ipv4addr:2-octet-number - 2:4-octet-asn:2-octet-number. - 2-octet-other-hex-number:6-octet-hex-number - - Some valid examples are: 0:100:100, 1:1.1.1.1:100, and - 2:1234567890:203."; - reference - "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; - } - - /*** collection of types common to multicast ***/ - typedef ipv4-multicast-group-address { - type inet:ipv4-address { - pattern '(2((2[4-9])|(3[0-9]))\.).*'; - } - description - "This type represents an IPv4 multicast group address, - which is in the range from 224.0.0.0 to 239.255.255.255."; - reference - "RFC1112: Host Extensions for IP Multicasting."; - } - - typedef ipv6-multicast-group-address { - type inet:ipv6-address { - pattern - '(([fF]{2}[0-9a-fA-F]{2}):).*'; - } - description - "This type represents an IPv6 multicast group address, - which is in the range of FF00::/8."; - reference - "RFC4291: IP Version 6 Addressing Architecture. Sec 2.7. - RFC7346: IPv6 Multicast Address Scopes."; - } - - typedef ip-multicast-group-address { - type union { - type ipv4-multicast-group-address; - type ipv6-multicast-group-address; - } - description - "This type represents an IP multicast group address and is IP - version neutral. The format of the textual representation - implies the IP version."; - } - - typedef ipv4-multicast-source-address { - type union { - type enumeration { - enum 'any' { - /* - ODL does not support * as enum name (how it should be named to java identifier?) - enum '*' { - */ - description - "Any source address."; - } - } - type inet:ipv4-address; - } - description - "Multicast source IPv4 address type."; - } - - typedef ipv6-multicast-source-address { - type union { - type enumeration { - enum 'any' { - /* - ODL does not support * as enum name (how it should be named to java identifier?) - enum '*' { - */ - description - "Any source address."; - } - } - type inet:ipv6-address; - } - description - "Multicast source IPv6 address type."; - } - - /*** collection of types common to protocols ***/ - typedef bandwidth-ieee-float32 { - type string { - pattern - '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' - + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|' - + '1[01]\d|0?\d?\d)?)'; - } - description - "Bandwidth in IEEE 754 floating point 32-bit binary format: - (-1)**(S) * 2**(Exponent-127) * (1 + Fraction), - where Exponent uses 8 bits, and Fraction uses 23 bits. - The units are octets per second. - The encoding format is the external hexadecimal-significand - character sequences specified in IEEE 754 and C99, - restricted to be normalized, non-negative, and non-fraction: - 0x1.hhhhhhp{+}d or 0X1.HHHHHHP{+}D - where 'h' and 'H' are hexadecimal digits, 'd' and 'D' are - integers in the range of [0..127]. - When six hexadecimal digits are used for 'hhhhhh' or 'HHHHHH', - the least significant digit must be an even number. - 'x' and 'X' indicate hexadecimal; 'p' and 'P' indicate power - of two. - Some examples are: 0x0p0, 0x1p10, and 0x1.abcde2p+20"; - reference - "IEEE Std 754-2008: IEEE Standard for Floating-Point - Arithmetic."; - } - - typedef link-access-type { - type enumeration { - enum "broadcast" { - description - "Specify broadcast multi-access network."; - } - enum "non-broadcast-multiaccess" { - description - "Specify Non-Broadcast Multi-Access (NBMA) network."; - } - enum "point-to-multipoint" { - description - "Specify point-to-multipoint network."; - } - enum "point-to-point" { - description - "Specify point-to-point network."; - } - } - description - "Link access type."; - } - - typedef timer-multiplier { - type uint8; - description - "The number of timer value intervals that should be - interpreted as a failure."; - } - - typedef timer-value-seconds16 { - type union { - type uint16 { - range "1..65535"; - } - type enumeration { - enum "infinity" { - description "The timer is set to infinity."; - } - enum "not-set" { - description "The timer is not set."; - } - } - } - units seconds; - description "Timer value type, in seconds (16 bit range)."; - } - - typedef timer-value-seconds32 { - type union { - type uint32 { - range "1..4294967295"; - } - type enumeration { - enum "infinity" { - description "The timer is set to infinity."; - } - enum "not-set" { - description "The timer is not set."; - } - } - } - units seconds; - description "Timer value type, in seconds (32 bit range)."; - } - - typedef timer-value-milliseconds { - type union { - type uint32{ - range "1..4294967295"; - } - type enumeration { - enum "infinity" { - description "The timer is set to infinity."; - } - enum "not-set" { - description "The timer is not set."; - } - } - } - units milliseconds; - description "Timer value type, in milliseconds."; - } - - /*** collection of types related to MPLS/GMPLS ***/ - typedef generalized-label { - type binary; - description - "Generalized label. Nodes sending and receiving the - Generalized Label know the kinds of link they are - using. Hence, the Generalized Label does not identify - its type. Instead, nodes are expected to know from - the context and type of label to expect."; - reference "RFC3471: Section 3.2"; - } - - identity mpls-label-special-purpose-value { - description - "Base identity for deriving identities describing - special-purpose Multiprotocol Label Switching (MPLS) label - values."; - reference - "RFC7274: Allocating and Retiring Special-Purpose MPLS - Labels."; - } - - identity ipv4-explicit-null-label { - base mpls-label-special-purpose-value; - description - "This identity represents the IPv4 Explicit NULL Label."; - reference - "RFC3032: MPLS Label Stack Encoding. Section 2.1."; - } - - identity router-alert-label { - base mpls-label-special-purpose-value; - description - "This identity represents the Router Alert Label."; - reference - "RFC3032: MPLS Label Stack Encoding. Section 2.1."; - } - - identity ipv6-explicit-null-label { - base mpls-label-special-purpose-value; - description - "This identity represents the IPv6 Explicit NULL Label."; - reference - "RFC3032: MPLS Label Stack Encoding. Section 2.1."; - } - - identity implicit-null-label { - base mpls-label-special-purpose-value; - description - "This identity represents the Implicit NULL Label."; - reference - "RFC3032: MPLS Label Stack Encoding. Section 2.1."; - } - - identity entropy-label-indicator { - base mpls-label-special-purpose-value; - description - "This identity represents the Entropy Label Indicator."; - reference - "RFC6790: The Use of Entropy Labels in MPLS Forwarding. - Sections 3 and 10.1."; - } - - identity gal-label { - base mpls-label-special-purpose-value; - description - "This identity represents the Generic Associated Channel Label - (GAL)."; - reference - "RFC5586: MPLS Generic Associated Channel. - Sections 4 and 10."; - } - - identity oam-alert-label { - base mpls-label-special-purpose-value; - description - "This identity represents the OAM Alert Label."; - reference - "RFC3429: Assignment of the 'OAM Alert Label' for Multiprotocol - Label Switching Architecture (MPLS) Operation and Maintenance - (OAM) Functions. - Sections 3 and 6."; - } - - identity extension-label { - base mpls-label-special-purpose-value; - description - "This identity represents the Extension Label."; - reference - "RFC7274: Allocating and Retiring Special-Purpose MPLS Labels. - Sections 3.1 and 5."; - } - - typedef mpls-label-special-purpose { - type identityref { - base mpls-label-special-purpose-value; - } - description - "This type represents the special-purpose Multiprotocol Label - Switching (MPLS) label values."; - reference - "RFC3032: MPLS Label Stack Encoding. - RFC7274: Allocating and Retiring Special-Purpose MPLS - Labels."; - } - - typedef mpls-label-general-use { - type uint32 { - range "16..1048575"; - } - description - "The 20 bits label values in an MPLS label stack entry, - specified in RFC3032. This label value does not include - the encodings of Traffic Class and TTL (time to live). - The label range specified by this type is for general use, - with special-purpose MPLS label values excluded."; - reference - "RFC3032: MPLS Label Stack Encoding."; - } - - - typedef mpls-label { -/* -TODO: binding generator creates invalid type bindings, so we changed type to uint32. -Change back after https://jira.opendaylight.org/browse/MDSAL-269 is resolved. - type union { - type mpls-label-special-purpose; - type mpls-label-general-use; - } -*/ - type uint32 { - range "0..1048575"; - } - description - "The 20 bits label values in an MPLS label stack entry, - specified in RFC3032. This label value does not include - the encodings of Traffic Class and TTL (time to live)."; - reference - "RFC3032: MPLS Label Stack Encoding."; - } - - /* - * Groupings - */ - grouping mpls-label-stack { - description - "A grouping that specifies an MPLS label stack."; - container mpls-label-stack { - description - "Container for a list of MPLS label stack entries."; - list entry { - key "id"; - description - "List of MPLS label stack entries."; - leaf id { - type uint8; - description - "Identifies the sequence of an MPLS label stack entries. - An entry with smaller ID value is precedes an entry in - the label stack with a smaller ID."; - } - leaf label { - type rt-types:mpls-label; - description - "Label value."; - } - leaf ttl { - type uint8; - description - "Time to Live (TTL)."; - reference - "RFC3032: MPLS Label Stack Encoding."; - } - leaf traffic-class { - type uint8 { - range "0..7"; - } - description - "Traffic Class (TC)."; - reference - "RFC5462: Multiprotocol Label Switching (MPLS) Label - Stack Entry: 'EXP' Field Renamed to 'Traffic Class' - Field."; - } - } - } - } // mpls-label-stack - - grouping vpn-route-targets { - description - "A grouping that specifies Route Target import-export rules - used in the BGP enabled Virtual Private Networks (VPNs)."; - reference - "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs). - RFC4664: Framework for Layer 2 Virtual Private Networks - (L2VPNs)"; - list vpn-target { - key route-target; - description - "List of Route Targets."; - leaf route-target { - type rt-types:route-target; - description - "Route Target value"; - } - leaf route-target-type { - type rt-types:route-target-type; - mandatory true; - description - "Import/export type of the Route Target."; - } - } - } // vpn-route-targets -} diff --git a/routing/routing-api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang b/routing/routing-api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang new file mode 100644 index 000000000..6d0f853a8 --- /dev/null +++ b/routing/routing-api/src/main/yang/hc2vpp-ietf-routing-types@2017-02-27.yang @@ -0,0 +1,725 @@ +module hc2vpp-ietf-routing-types { + + namespace "urn:ietf:params:xml:ns:yang:ietf-routing-types"; + prefix "rt-types"; + + import ietf-yang-types { + prefix "yang"; + } + + import ietf-inet-types { + prefix "inet"; + } + + organization "IETF Routing Area Working Group (rtgwg)"; + + contact + "Routing Area Working Group - "; + + description + "This module contains a collection of YANG data types + considered generally useful for routing protocols."; + + revision 2017-02-27 { + description + "Initial revision."; + reference + "RFC TBD: Routing YANG Data Types"; + } + + /*** collection of types related to routing ***/ + typedef router-id { + type yang:dotted-quad; + description + "A 32-bit number in the dotted quad format assigned to each + router. This number uniquely identifies the router within an + Autonomous System."; + } + + // address-family + identity address-family { + description + "Base identity from which identities describing address + families are derived."; + } + + identity ipv4 { + base address-family; + description + "This identity represents IPv4 address family."; + } + + identity ipv6 { + base address-family; + description + "This identity represents IPv6 address family."; + } + + //The rest of the values deinfed in the IANA registry + + identity nsap { + base address-family; + description + "Address family from IANA registry."; + } + identity hdlc { + base address-family; + description + "(8-bit multidrop) + Address family from IANA registry."; + } + identity bbn1822 { + base address-family; + description + "AHIP (BBN report #1822) + Address family from IANA registry."; + } + identity ieee802 { + base address-family; + description + "(includes all 802 media plus Ethernet canonical format) + Address family from IANA registry."; + } + identity e163 { + base address-family; + description + "Address family from IANA registry."; + } + identity e164 { + base address-family; + description + "SMDS, Frame Relay, ATM + Address family from IANA registry."; + } + identity f69 { + base address-family; + description + "(Telex) + Address family from IANA registry."; + } + identity x121 { + base address-family; + description + "(X.25, Frame Relay) + Address family from IANA registry."; + } + identity ipx { + base address-family; + description + "Address family from IANA registry."; + } + identity appletalk { + base address-family; + description + "Address family from IANA registry."; + } + identity decnet-iv { + base address-family; + description + "Decnet IV + Address family from IANA registry."; + } + identity vines { + base address-family; + description + "Banyan Vines + Address family from IANA registry."; + } + identity e164-nsap { + base address-family; + description + "E.164 with NSAP format subaddress + Address family from IANA registry."; + } + identity dns { + base address-family; + description + "Domain Name System + Address family from IANA registry."; + } + identity dn { + base address-family; + description + "Distinguished Name + Address family from IANA registry."; + } + identity as-num { + base address-family; + description + "AS Number + Address family from IANA registry."; + } + identity xtp-v4 { + base address-family; + description + "XTP over IPv4 + Address family from IANA registry."; + } + identity xtp-v6 { + base address-family; + description + "XTP over IPv6 + Address family from IANA registry."; + } + identity xtp { + base address-family; + description + "XTP native mode XTP + Address family from IANA registry."; + } + identity fc-port { + base address-family; + description + "Fibre Channel World-Wide Port Name + Address family from IANA registry."; + } + identity fc-node { + base address-family; + description + "Fibre Channel World-Wide Node Name + Address family from IANA registry."; + } + identity gwid { + base address-family; + description + "Address family from IANA registry."; + } + identity l2vpn { + base address-family; + description + "Address family from IANA registry."; + } + identity mpls-tp-section-eid { + base address-family; + description + "MPLS-TP Section Endpoint Identifier + Address family from IANA registry."; + } + identity mpls-tp-lsp-eid { + base address-family; + description + "MPLS-TP LSP Endpoint Identifier + Address family from IANA registry."; + } + identity mpls-tp-pwe-eid { + base address-family; + description + "MPLS-TP Pseudowire Endpoint Identifier + Address family from IANA registry."; + } + identity mt-v4 { + base address-family; + description + "Multi-Topology IPv4. + Address family from IANA registry."; + } + identity mt-v6 { + base address-family; + description + "Multi-Topology IPv6. + Address family from IANA registry."; + } + + /*** collection of types related to VPN ***/ + typedef route-target { + type string { + pattern + '(0:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' + + '[0-5]?\d{0,3}\d):(429496729[0-5]|42949672[0-8]\d|' + + '4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|' + + '4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|' + + '[0-3]?\d{0,8}\d))|' + + '(1:(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|' + + '1\d{2}|2[0-4]\d|25[0-5])):(6553[0-5]|655[0-2]\d|' + + '65[0-4]\d{2}|6[0-4]\d{3}|[0-5]?\d{0,3}\d))|' + + '(2:(429496729[0-5]|42949672[0-8]\d|4294967[01]\d{2}|' + + '429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|' + + '429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[0-3]?\d{0,8}\d):' + + '(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' + + '[0-5]?\d{0,3}\d))'; + } + description + "A route target is an 8-octet BGP extended community + initially identifying a set of sites in a BGP + VPN (RFC 4364). However, it has since taken on a more + general role in BGP route filtering. + A route target consists of three fields: + a 2-octet type field, an administrator field, + and an assigned number field. + According to the data formats for type 0, 1, and 2 defined in + RFC4360 and RFC5668, the encoding pattern is defined as: + + 0:2-octet-asn:4-octet-number + 1:4-octet-ipv4addr:2-octet-number + 2:4-octet-asn:2-octet-number. + + Some valid examples are: 0:100:100, 1:1.1.1.1:100, and + 2:1234567890:203."; + reference + "RFC4360: BGP Extended Communities Attribute. + RFC5668: 4-Octet AS Specific BGP Extended Community."; + } + + typedef route-target-type { + type enumeration { + enum "import" { + value "0"; + description + "The route target applies to route import."; + } + enum "export" { + value "1"; + description + "The route target applies to route export."; + } + enum "both" { + value "2"; + description + "The route target applies to both route import and + route export."; + } + } + description + "Indicates the role a route target takes + in route filtering."; + reference + "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; + } + + typedef route-distinguisher { + type string { + pattern + '(0:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' + + '[0-5]?\d{0,3}\d):(429496729[0-5]|42949672[0-8]\d|' + + '4294967[01]\d{2}|429496[0-6]\d{3}|42949[0-5]\d{4}|' + + '4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|' + + '[0-3]?\d{0,8}\d))|' + + '(1:(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|' + + '1\d{2}|2[0-4]\d|25[0-5])):(6553[0-5]|655[0-2]\d|' + + '65[0-4]\d{2}|6[0-4]\d{3}|[0-5]?\d{0,3}\d))|' + + '(2:(429496729[0-5]|42949672[0-8]\d|4294967[01]\d{2}|' + + '429496[0-6]\d{3}|42949[0-5]\d{4}|4294[0-8]\d{5}|' + + '429[0-3]\d{6}|42[0-8]\d{7}|4[01]\d{8}|[0-3]?\d{0,8}\d):' + + '(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|' + + '[0-5]?\d{0,3}\d))|' + + '(([3-9a-fA-F]|[1-9a-fA-F][\da-fA-F]{1,3}):' + + '[\da-fA-F]{1,12})'; + } + description + "A route distinguisher is an 8-octet value used to distinguish + routes from different BGP VPNs (RFC 4364). A route + distinguisher consists of three fields: A 2-octet type field, + an administrator field, and an assigned number field. + According to the data formats for type 0, 1, and 2 defined in + RFC4364, the encoding pattern is defined as: + + 0:2-octet-asn:4-octet-number + 1:4-octet-ipv4addr:2-octet-number + 2:4-octet-asn:2-octet-number. + 2-octet-other-hex-number:6-octet-hex-number + + Some valid examples are: 0:100:100, 1:1.1.1.1:100, and + 2:1234567890:203."; + reference + "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs)."; + } + + /*** collection of types common to multicast ***/ + typedef ipv4-multicast-group-address { + type inet:ipv4-address { + pattern '(2((2[4-9])|(3[0-9]))\.).*'; + } + description + "This type represents an IPv4 multicast group address, + which is in the range from 224.0.0.0 to 239.255.255.255."; + reference + "RFC1112: Host Extensions for IP Multicasting."; + } + + typedef ipv6-multicast-group-address { + type inet:ipv6-address { + pattern + '(([fF]{2}[0-9a-fA-F]{2}):).*'; + } + description + "This type represents an IPv6 multicast group address, + which is in the range of FF00::/8."; + reference + "RFC4291: IP Version 6 Addressing Architecture. Sec 2.7. + RFC7346: IPv6 Multicast Address Scopes."; + } + + typedef ip-multicast-group-address { + type union { + type ipv4-multicast-group-address; + type ipv6-multicast-group-address; + } + description + "This type represents an IP multicast group address and is IP + version neutral. The format of the textual representation + implies the IP version."; + } + + typedef ipv4-multicast-source-address { + type union { + type enumeration { + enum 'any' { + /* + ODL does not support * as enum name (how it should be named to java identifier?) + enum '*' { + */ + description + "Any source address."; + } + } + type inet:ipv4-address; + } + description + "Multicast source IPv4 address type."; + } + + typedef ipv6-multicast-source-address { + type union { + type enumeration { + enum 'any' { + /* + ODL does not support * as enum name (how it should be named to java identifier?) + enum '*' { + */ + description + "Any source address."; + } + } + type inet:ipv6-address; + } + description + "Multicast source IPv6 address type."; + } + + /*** collection of types common to protocols ***/ + typedef bandwidth-ieee-float32 { + type string { + pattern + '0[xX](0((\.0?)?[pP](\+)?0?|(\.0?))|' + + '1(\.([\da-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\+)?(12[0-7]|' + + '1[01]\d|0?\d?\d)?)'; + } + description + "Bandwidth in IEEE 754 floating point 32-bit binary format: + (-1)**(S) * 2**(Exponent-127) * (1 + Fraction), + where Exponent uses 8 bits, and Fraction uses 23 bits. + The units are octets per second. + The encoding format is the external hexadecimal-significand + character sequences specified in IEEE 754 and C99, + restricted to be normalized, non-negative, and non-fraction: + 0x1.hhhhhhp{+}d or 0X1.HHHHHHP{+}D + where 'h' and 'H' are hexadecimal digits, 'd' and 'D' are + integers in the range of [0..127]. + When six hexadecimal digits are used for 'hhhhhh' or 'HHHHHH', + the least significant digit must be an even number. + 'x' and 'X' indicate hexadecimal; 'p' and 'P' indicate power + of two. + Some examples are: 0x0p0, 0x1p10, and 0x1.abcde2p+20"; + reference + "IEEE Std 754-2008: IEEE Standard for Floating-Point + Arithmetic."; + } + + typedef link-access-type { + type enumeration { + enum "broadcast" { + description + "Specify broadcast multi-access network."; + } + enum "non-broadcast-multiaccess" { + description + "Specify Non-Broadcast Multi-Access (NBMA) network."; + } + enum "point-to-multipoint" { + description + "Specify point-to-multipoint network."; + } + enum "point-to-point" { + description + "Specify point-to-point network."; + } + } + description + "Link access type."; + } + + typedef timer-multiplier { + type uint8; + description + "The number of timer value intervals that should be + interpreted as a failure."; + } + + typedef timer-value-seconds16 { + type union { + type uint16 { + range "1..65535"; + } + type enumeration { + enum "infinity" { + description "The timer is set to infinity."; + } + enum "not-set" { + description "The timer is not set."; + } + } + } + units seconds; + description "Timer value type, in seconds (16 bit range)."; + } + + typedef timer-value-seconds32 { + type union { + type uint32 { + range "1..4294967295"; + } + type enumeration { + enum "infinity" { + description "The timer is set to infinity."; + } + enum "not-set" { + description "The timer is not set."; + } + } + } + units seconds; + description "Timer value type, in seconds (32 bit range)."; + } + + typedef timer-value-milliseconds { + type union { + type uint32{ + range "1..4294967295"; + } + type enumeration { + enum "infinity" { + description "The timer is set to infinity."; + } + enum "not-set" { + description "The timer is not set."; + } + } + } + units milliseconds; + description "Timer value type, in milliseconds."; + } + + /*** collection of types related to MPLS/GMPLS ***/ + typedef generalized-label { + type binary; + description + "Generalized label. Nodes sending and receiving the + Generalized Label know the kinds of link they are + using. Hence, the Generalized Label does not identify + its type. Instead, nodes are expected to know from + the context and type of label to expect."; + reference "RFC3471: Section 3.2"; + } + + identity mpls-label-special-purpose-value { + description + "Base identity for deriving identities describing + special-purpose Multiprotocol Label Switching (MPLS) label + values."; + reference + "RFC7274: Allocating and Retiring Special-Purpose MPLS + Labels."; + } + + identity ipv4-explicit-null-label { + base mpls-label-special-purpose-value; + description + "This identity represents the IPv4 Explicit NULL Label."; + reference + "RFC3032: MPLS Label Stack Encoding. Section 2.1."; + } + + identity router-alert-label { + base mpls-label-special-purpose-value; + description + "This identity represents the Router Alert Label."; + reference + "RFC3032: MPLS Label Stack Encoding. Section 2.1."; + } + + identity ipv6-explicit-null-label { + base mpls-label-special-purpose-value; + description + "This identity represents the IPv6 Explicit NULL Label."; + reference + "RFC3032: MPLS Label Stack Encoding. Section 2.1."; + } + + identity implicit-null-label { + base mpls-label-special-purpose-value; + description + "This identity represents the Implicit NULL Label."; + reference + "RFC3032: MPLS Label Stack Encoding. Section 2.1."; + } + + identity entropy-label-indicator { + base mpls-label-special-purpose-value; + description + "This identity represents the Entropy Label Indicator."; + reference + "RFC6790: The Use of Entropy Labels in MPLS Forwarding. + Sections 3 and 10.1."; + } + + identity gal-label { + base mpls-label-special-purpose-value; + description + "This identity represents the Generic Associated Channel Label + (GAL)."; + reference + "RFC5586: MPLS Generic Associated Channel. + Sections 4 and 10."; + } + + identity oam-alert-label { + base mpls-label-special-purpose-value; + description + "This identity represents the OAM Alert Label."; + reference + "RFC3429: Assignment of the 'OAM Alert Label' for Multiprotocol + Label Switching Architecture (MPLS) Operation and Maintenance + (OAM) Functions. + Sections 3 and 6."; + } + + identity extension-label { + base mpls-label-special-purpose-value; + description + "This identity represents the Extension Label."; + reference + "RFC7274: Allocating and Retiring Special-Purpose MPLS Labels. + Sections 3.1 and 5."; + } + + typedef mpls-label-special-purpose { + type identityref { + base mpls-label-special-purpose-value; + } + description + "This type represents the special-purpose Multiprotocol Label + Switching (MPLS) label values."; + reference + "RFC3032: MPLS Label Stack Encoding. + RFC7274: Allocating and Retiring Special-Purpose MPLS + Labels."; + } + + typedef mpls-label-general-use { + type uint32 { + range "16..1048575"; + } + description + "The 20 bits label values in an MPLS label stack entry, + specified in RFC3032. This label value does not include + the encodings of Traffic Class and TTL (time to live). + The label range specified by this type is for general use, + with special-purpose MPLS label values excluded."; + reference + "RFC3032: MPLS Label Stack Encoding."; + } + + + typedef mpls-label { +/* +TODO: binding generator creates invalid type bindings, so we changed type to uint32. +Change back after https://jira.opendaylight.org/browse/MDSAL-269 is resolved. + type union { + type mpls-label-special-purpose; + type mpls-label-general-use; + } +*/ + type uint32 { + range "0..1048575"; + } + description + "The 20 bits label values in an MPLS label stack entry, + specified in RFC3032. This label value does not include + the encodings of Traffic Class and TTL (time to live)."; + reference + "RFC3032: MPLS Label Stack Encoding."; + } + + /* + * Groupings + */ + grouping mpls-label-stack { + description + "A grouping that specifies an MPLS label stack."; + container mpls-label-stack { + description + "Container for a list of MPLS label stack entries."; + list entry { + key "id"; + description + "List of MPLS label stack entries."; + leaf id { + type uint8; + description + "Identifies the sequence of an MPLS label stack entries. + An entry with smaller ID value is precedes an entry in + the label stack with a smaller ID."; + } + leaf label { + type rt-types:mpls-label; + description + "Label value."; + } + leaf ttl { + type uint8; + description + "Time to Live (TTL)."; + reference + "RFC3032: MPLS Label Stack Encoding."; + } + leaf traffic-class { + type uint8 { + range "0..7"; + } + description + "Traffic Class (TC)."; + reference + "RFC5462: Multiprotocol Label Switching (MPLS) Label + Stack Entry: 'EXP' Field Renamed to 'Traffic Class' + Field."; + } + } + } + } // mpls-label-stack + + grouping vpn-route-targets { + description + "A grouping that specifies Route Target import-export rules + used in the BGP enabled Virtual Private Networks (VPNs)."; + reference + "RFC4364: BGP/MPLS IP Virtual Private Networks (VPNs). + RFC4664: Framework for Layer 2 Virtual Private Networks + (L2VPNs)"; + list vpn-target { + key route-target; + description + "List of Route Targets."; + leaf route-target { + type rt-types:route-target; + description + "Route Target value"; + } + leaf route-target-type { + type rt-types:route-target-type; + mandatory true; + description + "Import/export type of the Route Target."; + } + } + } // vpn-route-targets +} -- cgit