/* autogenerated by embedmodel.py.  DO NOT EDIT */

#include <zebra.h>
#include "yang.h"

static const char model[] =
	"// SPDX-License-Identifier: BSD-3-Clause\n"
	"module ietf-routing-types {\n"
	"  namespace \"urn:ietf:params:xml:ns:yang:ietf-routing-types\";\n"
	"  prefix rt-types;\n"
	"\n"
	"  import ietf-yang-types {\n"
	"    prefix yang;\n"
	"  }\n"
	"  import ietf-inet-types {\n"
	"    prefix inet;\n"
	"  }\n"
	"\n"
	"  organization\n"
	"    \"IETF RTGWG - Routing Area Working Group\";\n"
	"  contact\n"
	"    \"WG Web:   <https://datatracker.ietf.org/wg/rtgwg/>\n"
	"     WG List:  <mailto:rtgwg@ietf.org>\n"
	"     Editors:  Xufeng Liu\n"
	"               <mailto:Xufeng_Liu@jabail.com>\n"
	"               Yingzhen Qu\n"
	"               <mailto:yingzhen.qu@huawei.com>\n"
	"               Acee Lindem\n"
	"               <mailto:acee@cisco.com>\n"
	"               Christian Hopps\n"
	"               <mailto:chopps@chopps.org>\n"
	"               Lou Berger\n"
	"               <mailto:lberger@labn.com>\";\n"
	"\n"
	"  description\n"
	"    \"This module contains a collection of YANG data types\n"
	"     considered generally useful for routing protocols.\n"
	"     Copyright (c) 2017 IETF Trust and the persons\n"
	"     identified as authors of the code.  All rights reserved.\n"
	"     Redistribution and use in source and binary forms, with or\n"
	"     without modification, is permitted pursuant to, and subject\n"
	"     to the license terms contained in, the Simplified BSD License\n"
	"     set forth in Section 4.c of the IETF Trust\'s Legal Provisions\n"
	"     Relating to IETF Documents\n"
	"     (https://trustee.ietf.org/license-info).\n"
	"     This version of this YANG module is part of RFC 8294; see\n"
	"     the RFC itself for full legal notices.\";\n"
	"   revision 2017-12-04 {\n"
	"     description \"Initial revision.\";\n"
	"     reference\n"
	"       \"RFC 8294: Common YANG Data Types for the Routing Area.\n"
	"        Section 3.\";\n"
	"  }\n"
	"\n"
	"  /*** Identities related to MPLS/GMPLS ***/\n"
	"\n"
	"  identity mpls-label-special-purpose-value {\n"
	"    description\n"
	"      \"Base identity for deriving identities describing\n"
	"       special-purpose Multiprotocol Label Switching (MPLS) label\n"
	"       values.\";\n"
	"    reference\n"
	"      \"RFC 7274: Allocating and Retiring Special-Purpose MPLS\n"
	"       Labels.\";\n"
	"  }\n"
	"\n"
	"  identity ipv4-explicit-null-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the IPv4 Explicit NULL Label.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.  Section 2.1.\";\n"
	"  }\n"
	"\n"
	"  identity router-alert-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the Router Alert Label.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.  Section 2.1.\";\n"
	"  }\n"
	"\n"
	"  identity ipv6-explicit-null-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the IPv6 Explicit NULL Label.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.  Section 2.1.\";\n"
	"  }\n"
	"\n"
	"  identity implicit-null-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the Implicit NULL Label.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.  Section 2.1.\";\n"
	"  }\n"
	"\n"
	"  identity entropy-label-indicator {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the Entropy Label Indicator.\";\n"
	"    reference\n"
	"      \"RFC 6790: The Use of Entropy Labels in MPLS Forwarding.\n"
	"       Sections 3 and 10.1.\";\n"
	"  }\n"
	"\n"
	"  identity gal-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the Generic Associated Channel\n"
	"       (G-ACh) Label (GAL).\";\n"
	"    reference\n"
	"      \"RFC 5586: MPLS Generic Associated Channel.\n"
	"       Sections 4 and 10.\";\n"
	"  }\n"
	"\n"
	"  identity oam-alert-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the OAM Alert Label.\";\n"
	"    reference\n"
	"      \"RFC 3429: Assignment of the \'OAM Alert Label\' for\n"
	"       Multiprotocol Label Switching Architecture (MPLS)\n"
	"       Operation and Maintenance (OAM) Functions.\n"
	"       Sections 3 and 6.\";\n"
	"  }\n"
	"\n"
	"  identity extension-label {\n"
	"    base mpls-label-special-purpose-value;\n"
	"    description\n"
	"      \"This identity represents the Extension Label.\";\n"
	"    reference\n"
	"      \"RFC 7274: Allocating and Retiring Special-Purpose MPLS\n"
	"       Labels.  Sections 3.1 and 5.\";\n"
	"  }\n"
	"\n"
	"  /*** Collection of types related to routing ***/\n"
	"\n"
	"  typedef router-id {\n"
	"    type yang:dotted-quad;\n"
	"    description\n"
	"      \"A 32-bit number in the dotted-quad format assigned to each\n"
	"       router.  This number uniquely identifies the router within\n"
	"       an Autonomous System.\";\n"
	"  }\n"
	"\n"
	"  /*** Collection of types related to VPNs ***/\n"
	"\n"
	"  typedef route-target {\n"
	"    type string {\n"
	"      pattern\n"
	"        \'(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|\'\n"
	"      +     \'42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|429496[0-6][0-9]{3}|\'\n"
	"      +     \'42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|429[0-3][0-9]{6}|\'\n"
	"      +     \'42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|\'\n"
	"      + \'(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|\'\n"
	"      +     \'25[0-5])\\.){3}([0-9]|[1-9][0-9]|\'\n"
	"      +     \'1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|\'\n"
	"      +     \'655[0-2][0-9]|\'\n"
	"      +     \'65[0-4][0-9]{2}|6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(2:(429496729[0-5]|42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|\'\n"
	"      +     \'429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|\'\n"
	"      +     \'429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):\'\n"
	"      +     \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(6(:[a-fA-F0-9]{2}){6})|\'\n"
	"      + \'(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):\'\n"
	"      +     \'[0-9a-fA-F]{1,12})\';\n"
	"    }\n"
	"\n"
	"    description\n"
	"      \"A Route Target is an 8-octet BGP extended community\n"
	"       initially identifying a set of sites in a BGP VPN\n"
	"       (RFC 4364).  However, it has since taken on a more general\n"
	"       role in BGP route filtering.  A Route Target consists of two\n"
	"       or three fields: a 2-octet Type field, an administrator\n"
	"       field, and, optionally, an assigned number field.\n"
	"       According to the data formats for types 0, 1, 2, and 6 as\n"
	"       defined in RFC 4360, RFC 5668, and RFC 7432, the encoding\n"
	"       pattern is defined as:\n"
	"       0:2-octet-asn:4-octet-number\n"
	"       1:4-octet-ipv4addr:2-octet-number\n"
	"       2:4-octet-asn:2-octet-number\n"
	"       6:6-octet-mac-address\n"
	"       Additionally, a generic pattern is defined for future\n"
	"       Route Target types:\n"
	"       2-octet-other-hex-number:6-octet-hex-number\n"
	"       Some valid examples are 0:100:100, 1:1.1.1.1:100,\n"
	"       2:1234567890:203, and 6:26:00:08:92:78:00.\";\n"
	"    reference\n"
	"      \"RFC 4360: BGP Extended Communities Attribute.\n"
	"       RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).\n"
	"       RFC 5668: 4-Octet AS Specific BGP Extended Community.\n"
	"       RFC 7432: BGP MPLS-Based Ethernet VPN.\";\n"
	"  }\n"
	"\n"
	"  typedef ipv6-route-target {\n"
	"    type string {\n"
	"      pattern\n"
	"          \'((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}\'\n"
	"          + \'((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|\'\n"
	"          + \'(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}\'\n"
	"          + \'(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))\'\n"
	"          + \':\'\n"
	"          + \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"          + \'6[0-4][0-9]{3}|\'\n"
	"          + \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\';\n"
	"      pattern \'((([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|\'\n"
	"          + \'((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))\'\n"
	"          + \':\'\n"
	"          + \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"          + \'6[0-4][0-9]{3}|\'\n"
	"          + \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\';\n"
	"    }\n"
	"    description\n"
	"      \"An IPv6 Route Target is a 20-octet BGP IPv6 Address\n"
	"       Specific Extended Community serving the same function\n"
	"       as a standard 8-octet Route Target, except that it only\n"
	"       allows an IPv6 address as the global administrator.\n"
	"       The format is <ipv6-address:2-octet-number>.\n"
	"       Two valid examples are 2001:db8::1:6544 and\n"
	"       2001:db8::5eb1:791:6b37:17958.\";\n"
	"    reference\n"
	"      \"RFC 5701: IPv6 Address Specific BGP Extended Community\n"
	"       Attribute.\";\n"
	"  }\n"
	"\n"
	"  typedef route-target-type {\n"
	"    type enumeration {\n"
	"      enum import {\n"
	"        value 0;\n"
	"        description\n"
	"          \"The Route Target applies to route import.\";\n"
	"      }\n"
	"      enum export {\n"
	"        value 1;\n"
	"        description\n"
	"          \"The Route Target applies to route export.\";\n"
	"      }\n"
	"\n"
	"      enum both {\n"
	"        value 2;\n"
	"        description\n"
	"          \"The Route Target applies to both route import and\n"
	"           route export.\";\n"
	"      }\n"
	"    }\n"
	"    description\n"
	"      \"Indicates the role a Route Target takes in route filtering.\";\n"
	"    reference\n"
	"      \"RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).\";\n"
	"  }\n"
	"\n"
	"  typedef route-distinguisher {\n"
	"    type string {\n"
	"      pattern\n"
	"        \'(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|\'\n"
	"      +     \'42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|429496[0-6][0-9]{3}|\'\n"
	"      +     \'42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|429[0-3][0-9]{6}|\'\n"
	"      +     \'42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|\'\n"
	"      + \'(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|\'\n"
	"      +     \'25[0-5])\\.){3}([0-9]|[1-9][0-9]|\'\n"
	"      +     \'1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|\'\n"
	"      +     \'655[0-2][0-9]|\'\n"
	"      +     \'65[0-4][0-9]{2}|6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(2:(429496729[0-5]|42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|\'\n"
	"      +     \'429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|\'\n"
	"      +     \'429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):\'\n"
	"      +     \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(6(:[a-fA-F0-9]{2}){6})|\'\n"
	"      + \'(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):\'\n"
	"      +     \'[0-9a-fA-F]{1,12})\';\n"
	"    }\n"
	"\n"
	"    description\n"
	"      \"A Route Distinguisher is an 8-octet value used to\n"
	"       distinguish routes from different BGP VPNs (RFC 4364).\n"
	"       A Route Distinguisher will have the same format as a\n"
	"       Route Target as per RFC 4360 and will consist of\n"
	"       two or three fields: a 2-octet Type field, an administrator\n"
	"       field, and, optionally, an assigned number field.\n"
	"       According to the data formats for types 0, 1, 2, and 6 as\n"
	"       defined in RFC 4360, RFC 5668, and RFC 7432, the encoding\n"
	"       pattern is defined as:\n"
	"       0:2-octet-asn:4-octet-number\n"
	"       1:4-octet-ipv4addr:2-octet-number\n"
	"       2:4-octet-asn:2-octet-number\n"
	"       6:6-octet-mac-address\n"
	"       Additionally, a generic pattern is defined for future\n"
	"       route discriminator types:\n"
	"       2-octet-other-hex-number:6-octet-hex-number\n"
	"       Some valid examples are 0:100:100, 1:1.1.1.1:100,\n"
	"       2:1234567890:203, and 6:26:00:08:92:78:00.\";\n"
	"    reference\n"
	"      \"RFC 4360: BGP Extended Communities Attribute.\n"
	"       RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).\n"
	"       RFC 5668: 4-Octet AS Specific BGP Extended Community.\n"
	"       RFC 7432: BGP MPLS-Based Ethernet VPN.\";\n"
	"  }\n"
	"\n"
	"  typedef route-origin {\n"
	"    type string {\n"
	"      pattern\n"
	"        \'(0:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(429496729[0-5]|\'\n"
	"      +     \'42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|429496[0-6][0-9]{3}|\'\n"
	"      +     \'42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|429[0-3][0-9]{6}|\'\n"
	"      +     \'42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0))|\'\n"
	"      + \'(1:((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|\'\n"
	"      +     \'25[0-5])\\.){3}([0-9]|[1-9][0-9]|\'\n"
	"      +     \'1[0-9]{2}|2[0-4][0-9]|25[0-5])):(6553[0-5]|\'\n"
	"      +     \'655[0-2][0-9]|\'\n"
	"      +     \'65[0-4][0-9]{2}|6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(2:(429496729[0-5]|42949672[0-8][0-9]|\'\n"
	"      +     \'4294967[01][0-9]{2}|\'\n"
	"      +     \'429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|\'\n"
	"      +     \'4294[0-8][0-9]{5}|\'\n"
	"      +     \'429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[01][0-9]{8}|\'\n"
	"      +     \'[1-3][0-9]{9}|[1-9][0-9]{0,8}|0):\'\n"
	"      +     \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"      +     \'6[0-4][0-9]{3}|\'\n"
	"      +     \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0))|\'\n"
	"      + \'(6(:[a-fA-F0-9]{2}){6})|\'\n"
	"      + \'(([3-57-9a-fA-F]|[1-9a-fA-F][0-9a-fA-F]{1,3}):\'\n"
	"      +    \'[0-9a-fA-F]{1,12})\';\n"
	"    }\n"
	"    description\n"
	"      \"A Route Origin is an 8-octet BGP extended community\n"
	"       identifying the set of sites where the BGP route\n"
	"       originated (RFC 4364).  A Route Origin will have the same\n"
	"       format as a Route Target as per RFC 4360 and will consist\n"
	"       of two or three fields: a 2-octet Type field, an\n"
	"       administrator field, and, optionally, an assigned number\n"
	"       field.\n"
	"       According to the data formats for types 0, 1, 2, and 6 as\n"
	"       defined in RFC 4360, RFC 5668, and RFC 7432, the encoding\n"
	"       pattern is defined as:\n"
	"       0:2-octet-asn:4-octet-number\n"
	"       1:4-octet-ipv4addr:2-octet-number\n"
	"       2:4-octet-asn:2-octet-number\n"
	"       6:6-octet-mac-address\n"
	"       Additionally, a generic pattern is defined for future\n"
	"       Route Origin types:\n"
	"       2-octet-other-hex-number:6-octet-hex-number\n"
	"       Some valid examples are 0:100:100, 1:1.1.1.1:100,\n"
	"       2:1234567890:203, and 6:26:00:08:92:78:00.\";\n"
	"    reference\n"
	"      \"RFC 4360: BGP Extended Communities Attribute.\n"
	"       RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).\n"
	"       RFC 5668: 4-Octet AS Specific BGP Extended Community.\n"
	"       RFC 7432: BGP MPLS-Based Ethernet VPN.\";\n"
	"  }\n"
	"\n"
	"  typedef ipv6-route-origin {\n"
	"    type string {\n"
	"      pattern\n"
	"          \'((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}\'\n"
	"          + \'((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|\'\n"
	"          + \'(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}\'\n"
	"          + \'(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])))\'\n"
	"          + \':\'\n"
	"          + \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"          + \'6[0-4][0-9]{3}|\'\n"
	"          + \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\';\n"
	"      pattern \'((([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|\'\n"
	"          + \'((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?))\'\n"
	"          + \':\'\n"
	"          + \'(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|\'\n"
	"          + \'6[0-4][0-9]{3}|\'\n"
	"          + \'[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\';\n"
	"    }\n"
	"    description\n"
	"      \"An IPv6 Route Origin is a 20-octet BGP IPv6 Address\n"
	"       Specific Extended Community serving the same function\n"
	"       as a standard 8-octet route, except that it only allows\n"
	"       an IPv6 address as the global administrator.  The format\n"
	"       is <ipv6-address:2-octet-number>.\n"
	"       Two valid examples are 2001:db8::1:6544 and\n"
	"       2001:db8::5eb1:791:6b37:17958.\";\n"
	"    reference\n"
	"      \"RFC 5701: IPv6 Address Specific BGP Extended Community\n"
	"       Attribute.\";\n"
	"  }\n"
	"\n"
	"  /*** Collection of types common to multicast ***/\n"
	"\n"
	"  typedef ipv4-multicast-group-address {\n"
	"    type inet:ipv4-address {\n"
	"      pattern \'(2((2[4-9])|(3[0-9]))\\.).*\';\n"
	"    }\n"
	"    description\n"
	"      \"This type represents an IPv4 multicast group address,\n"
	"       which is in the range of 224.0.0.0 to 239.255.255.255.\";\n"
	"    reference\n"
	"      \"RFC 1112: Host Extensions for IP Multicasting.\";\n"
	"  }\n"
	"\n"
	"  typedef ipv6-multicast-group-address {\n"
	"    type inet:ipv6-address {\n"
	"      pattern \'(([fF]{2}[0-9a-fA-F]{2}):).*\';\n"
	"    }\n"
	"    description\n"
	"      \"This type represents an IPv6 multicast group address,\n"
	"       which is in the range of ff00::/8.\";\n"
	"    reference\n"
	"      \"RFC 4291: IP Version 6 Addressing Architecture.  Section 2.7.\n"
	"       RFC 7346: IPv6 Multicast Address Scopes.\";\n"
	"  }\n"
	"\n"
	"  typedef ip-multicast-group-address {\n"
	"    type union {\n"
	"      type ipv4-multicast-group-address;\n"
	"      type ipv6-multicast-group-address;\n"
	"    }\n"
	"    description\n"
	"      \"This type represents a version-neutral IP multicast group\n"
	"       address.  The format of the textual representation implies\n"
	"       the IP version.\";\n"
	"  }\n"
	"\n"
	"  typedef ipv4-multicast-source-address {\n"
	"    type union {\n"
	"      type enumeration {\n"
	"        enum * {\n"
	"          description\n"
	"            \"Any source address.\";\n"
	"        }\n"
	"      }\n"
	"      type inet:ipv4-address;\n"
	"    }\n"
	"    description\n"
	"      \"Multicast source IPv4 address type.\";\n"
	"  }\n"
	"\n"
	"  typedef ipv6-multicast-source-address {\n"
	"    type union {\n"
	"      type enumeration {\n"
	"        enum * {\n"
	"          description\n"
	"            \"Any source address.\";\n"
	"        }\n"
	"      }\n"
	"      type inet:ipv6-address;\n"
	"    }\n"
	"    description\n"
	"      \"Multicast source IPv6 address type.\";\n"
	"  }\n"
	"\n"
	"  /*** Collection of types common to protocols ***/\n"
	"\n"
	"  typedef bandwidth-ieee-float32 {\n"
	"    type string {\n"
	"      pattern\n"
	"        \'0[xX](0((\\.0?)?[pP](\\+)?0?|(\\.0?))|\'\n"
	"      + \'1(\\.([0-9a-fA-F]{0,5}[02468aAcCeE]?)?)?[pP](\\+)?(12[0-7]|\'\n"
	"      + \'1[01][0-9]|0?[0-9]?[0-9])?)\';\n"
	"    }\n"
	"    description\n"
	"      \"Bandwidth in IEEE 754 floating-point 32-bit binary format:\n"
	"       (-1)**(S) * 2**(Exponent-127) * (1 + Fraction),\n"
	"       where Exponent uses 8 bits and Fraction uses 23 bits.\n"
	"       The units are octets per second.\n"
	"       The encoding format is the external hexadecimal-significant\n"
	"       character sequences specified in IEEE 754 and ISO/IEC C99.\n"
	"       The format is restricted to be normalized, non-negative, and\n"
	"       non-fraction: 0x1.hhhhhhp{+}d, 0X1.HHHHHHP{+}D, or 0x0p0,\n"
	"       where \'h\' and \'H\' are hexadecimal digits and \'d\' and \'D\' are\n"
	"       integers in the range of [0..127].\n"
	"       When six hexadecimal digits are used for \'hhhhhh\' or\n"
	"       \'HHHHHH\', the least significant digit must be an even\n"
	"       number.  \'x\' and \'X\' indicate hexadecimal; \'p\' and \'P\'\n"
	"       indicate a power of two.  Some examples are 0x0p0, 0x1p10,\n"
	"       and 0x1.abcde2p+20.\";\n"
	"    reference\n"
	"      \"IEEE Std 754-2008: IEEE Standard for Floating-Point\n"
	"       Arithmetic.\n"
	"       ISO/IEC C99: Information technology - Programming\n"
	"       Languages - C.\";\n"
	"  }\n"
	"\n"
	"  typedef link-access-type {\n"
	"    type enumeration {\n"
	"      enum broadcast {\n"
	"        description\n"
	"          \"Specify broadcast multi-access network.\";\n"
	"      }\n"
	"      enum non-broadcast-multiaccess {\n"
	"        description\n"
	"          \"Specify Non-Broadcast Multi-Access (NBMA) network.\";\n"
	"      }\n"
	"      enum point-to-multipoint {\n"
	"        description\n"
	"          \"Specify point-to-multipoint network.\";\n"
	"      }\n"
	"      enum point-to-point {\n"
	"        description\n"
	"          \"Specify point-to-point network.\";\n"
	"      }\n"
	"    }\n"
	"    description\n"
	"      \"Link access type.\";\n"
	"  }\n"
	"\n"
	"  typedef timer-multiplier {\n"
	"    type uint8;\n"
	"    description\n"
	"      \"The number of timer value intervals that should be\n"
	"       interpreted as a failure.\";\n"
	"  }\n"
	"\n"
	"  typedef timer-value-seconds16 {\n"
	"    type union {\n"
	"      type uint16 {\n"
	"        range \"1..65535\";\n"
	"      }\n"
	"      type enumeration {\n"
	"        enum infinity {\n"
	"          description\n"
	"            \"The timer is set to infinity.\";\n"
	"        }\n"
	"        enum not-set {\n"
	"          description\n"
	"            \"The timer is not set.\";\n"
	"        }\n"
	"      }\n"
	"    }\n"
	"    units \"seconds\";\n"
	"    description\n"
	"      \"Timer value type, in seconds (16-bit range).\";\n"
	"  }\n"
	"\n"
	"  typedef timer-value-seconds32 {\n"
	"    type union {\n"
	"      type uint32 {\n"
	"        range \"1..4294967295\";\n"
	"      }\n"
	"      type enumeration {\n"
	"        enum infinity {\n"
	"          description\n"
	"            \"The timer is set to infinity.\";\n"
	"        }\n"
	"        enum not-set {\n"
	"          description\n"
	"            \"The timer is not set.\";\n"
	"        }\n"
	"      }\n"
	"    }\n"
	"    units \"seconds\";\n"
	"    description\n"
	"      \"Timer value type, in seconds (32-bit range).\";\n"
	"  }\n"
	"\n"
	"  typedef timer-value-milliseconds {\n"
	"    type union {\n"
	"      type uint32 {\n"
	"        range \"1..4294967295\";\n"
	"      }\n"
	"      type enumeration {\n"
	"        enum infinity {\n"
	"          description\n"
	"            \"The timer is set to infinity.\";\n"
	"        }\n"
	"        enum not-set {\n"
	"          description\n"
	"            \"The timer is not set.\";\n"
	"        }\n"
	"      }\n"
	"    }\n"
	"    units \"milliseconds\";\n"
	"    description\n"
	"      \"Timer value type, in milliseconds.\";\n"
	"  }\n"
	"\n"
	"  typedef percentage {\n"
	"    type uint8 {\n"
	"      range \"0..100\";\n"
	"    }\n"
	"    description\n"
	"      \"Integer indicating a percentage value.\";\n"
	"  }\n"
	"\n"
	"  typedef timeticks64 {\n"
	"    type uint64;\n"
	"    description\n"
	"      \"This type is based on the timeticks type defined in\n"
	"       RFC 6991, but with 64-bit width.  It represents the time,\n"
	"       modulo 2^64, in hundredths of a second between two epochs.\";\n"
	"    reference\n"
	"      \"RFC 6991: Common YANG Data Types.\";\n"
	"  }\n"
	"\n"
	"  typedef uint24 {\n"
	"    type uint32 {\n"
	"      range \"0..16777215\";\n"
	"    }\n"
	"    description\n"
	"      \"24-bit unsigned integer.\";\n"
	"  }\n"
	"\n"
	"  /*** Collection of types related to MPLS/GMPLS ***/\n"
	"\n"
	"  typedef generalized-label {\n"
	"    type binary;\n"
	"    description\n"
	"      \"Generalized Label.  Nodes sending and receiving the\n"
	"       Generalized Label are aware of the link-specific\n"
	"       label context and type.\";\n"
	"    reference\n"
	"      \"RFC 3471: Generalized Multi-Protocol Label Switching (GMPLS)\n"
	"       Signaling Functional Description.  Section 3.2.\";\n"
	"  }\n"
	"\n"
	"  typedef mpls-label-special-purpose {\n"
	"    type identityref {\n"
	"      base mpls-label-special-purpose-value;\n"
	"    }\n"
	"    description\n"
	"      \"This type represents the special-purpose MPLS label values.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.\n"
	"       RFC 7274: Allocating and Retiring Special-Purpose MPLS\n"
	"       Labels.\";\n"
	"  }\n"
	"\n"
	"  typedef mpls-label-general-use {\n"
	"    type uint32 {\n"
	"      range \"16..1048575\";\n"
	"    }\n"
	"    description\n"
	"      \"The 20-bit label value in an MPLS label stack as specified\n"
	"       in RFC 3032.  This label value does not include the\n"
	"       encodings of Traffic Class and TTL (Time to Live).\n"
	"       The label range specified by this type is for general use,\n"
	"       with special-purpose MPLS label values excluded.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.\";\n"
	"  }\n"
	"\n"
	"  typedef mpls-label {\n"
	"    type union {\n"
	"      type mpls-label-special-purpose;\n"
	"      type mpls-label-general-use;\n"
	"    }\n"
	"    description\n"
	"      \"The 20-bit label value in an MPLS label stack as specified\n"
	"       in RFC 3032.  This label value does not include the\n"
	"       encodings of Traffic Class and TTL.\";\n"
	"    reference\n"
	"      \"RFC 3032: MPLS Label Stack Encoding.\";\n"
	"  }\n"
	"\n"
	"  /*** Groupings **/\n"
	"\n"
	"  grouping mpls-label-stack {\n"
	"    description\n"
	"      \"This grouping specifies an MPLS label stack.  The label\n"
	"       stack is encoded as a list of label stack entries.  The\n"
	"       list key is an identifier that indicates the relative\n"
	"       ordering of each entry, with the lowest-value identifier\n"
	"       corresponding to the top of the label stack.\";\n"
	"    container mpls-label-stack {\n"
	"      description\n"
	"        \"Container for a list of MPLS label stack entries.\";\n"
	"      list entry {\n"
	"        key \"id\";\n"
	"        description\n"
	"          \"List of MPLS label stack entries.\";\n"
	"        leaf id {\n"
	"          type uint8;\n"
	"          description\n"
	"            \"Identifies the entry in a sequence of MPLS label\n"
	"             stack entries.  An entry with a smaller identifier\n"
	"             value precedes an entry with a larger identifier\n"
	"             value in the label stack.  The value of this ID has\n"
	"             no semantic meaning other than relative ordering\n"
	"             and referencing the entry.\";\n"
	"        }\n"
	"        leaf label {\n"
	"          type rt-types:mpls-label;\n"
	"          description\n"
	"            \"Label value.\";\n"
	"        }\n"
	"\n"
	"        leaf ttl {\n"
	"          type uint8;\n"
	"          description\n"
	"            \"Time to Live (TTL).\";\n"
	"          reference\n"
	"            \"RFC 3032: MPLS Label Stack Encoding.\";\n"
	"        }\n"
	"        leaf traffic-class {\n"
	"          type uint8 {\n"
	"            range \"0..7\";\n"
	"          }\n"
	"          description\n"
	"            \"Traffic Class (TC).\";\n"
	"          reference\n"
	"            \"RFC 5462: Multiprotocol Label Switching (MPLS) Label\n"
	"             Stack Entry: \'EXP\' Field Renamed to \'Traffic Class\'\n"
	"             Field.\";\n"
	"        }\n"
	"      }\n"
	"    }\n"
	"  }\n"
	"\n"
	"  grouping vpn-route-targets {\n"
	"    description\n"
	"      \"A grouping that specifies Route Target import-export rules\n"
	"       used in BGP-enabled VPNs.\";\n"
	"    reference\n"
	"      \"RFC 4364: BGP/MPLS IP Virtual Private Networks (VPNs).\n"
	"       RFC 4664: Framework for Layer 2 Virtual Private Networks\n"
	"       (L2VPNs).\";\n"
	"    list vpn-target {\n"
	"      key \"route-target\";\n"
	"      description\n"
	"        \"List of Route Targets.\";\n"
	"      leaf route-target {\n"
	"        type rt-types:route-target;\n"
	"        description\n"
	"          \"Route Target value.\";\n"
	"      }\n"
	"      leaf route-target-type {\n"
	"        type rt-types:route-target-type;\n"
	"        mandatory true;\n"
	"        description\n"
	"          \"Import/export type of the Route Target.\";\n"
	"      }\n"
	"    }\n"
	"  }\n"
	"}\n"
	"";

static struct yang_module_embed embed = {
	.mod_name = "ietf-routing-types",
	.mod_rev = "2017-12-04",
	.sub_mod_name = "",
	.sub_mod_rev = "",
	.data = model,
	.format = LYS_IN_YANG,
};

static void embed_register(void) __attribute__((_CONSTRUCTOR(2000)));
static void embed_register(void)
{
	yang_module_embed(&embed);
}
