| module openconfig-bgp-types { |
| yang-version "1"; |
| |
| namespace "http://openconfig.net/yang/bgp-types"; |
| |
| prefix "oc-bgp-types"; |
| |
| import openconfig-types { prefix "oc-types"; } |
| import openconfig-inet-types { prefix "oc-inet"; } |
| import openconfig-extensions { prefix "oc-ext"; } |
| |
| // Include definitions of BGP error notifications |
| include openconfig-bgp-errors; |
| |
| // meta |
| organization |
| "OpenConfig working group"; |
| |
| contact |
| "OpenConfig working group |
| netopenconfig@googlegroups.com"; |
| |
| description |
| "This module contains general data definitions for use in BGP |
| policy. It can be imported by modules that make use of BGP |
| attributes"; |
| |
| oc-ext:openconfig-version "4.0.1"; |
| |
| revision "2017-07-30" { |
| description |
| "Clarification of add-paths send-max leaf"; |
| reference "4.0.1"; |
| } |
| |
| revision "2017-07-10" { |
| description |
| "Add error notifications; moved add-paths config; add AS |
| prepend policy features; removed unneeded config leaves"; |
| reference "4.0.0"; |
| } |
| |
| revision "2017-02-02" { |
| description |
| "Bugfix to remove remaining global-level policy data"; |
| reference "3.0.1"; |
| } |
| |
| revision "2017-01-26" { |
| description |
| "Add dynamic neighbor support, migrate to OpenConfig types"; |
| reference "3.0.0"; |
| } |
| |
| revision "2016-06-21" { |
| description |
| "OpenConfig BGP refactor"; |
| reference "2.1.1"; |
| } |
| |
| |
| identity BGP_CAPABILITY { |
| description "Base identity for a BGP capability"; |
| } |
| |
| identity MPBGP { |
| base BGP_CAPABILITY; |
| description |
| "Multi-protocol extensions to BGP"; |
| reference "RFC2858"; |
| } |
| |
| identity ROUTE_REFRESH { |
| base BGP_CAPABILITY; |
| description |
| "The BGP route-refresh functionality"; |
| reference "RFC2918"; |
| } |
| |
| identity ASN32 { |
| base BGP_CAPABILITY; |
| description |
| "4-byte (32-bit) AS number functionality"; |
| reference "RFC6793"; |
| } |
| |
| identity GRACEFUL_RESTART { |
| base BGP_CAPABILITY; |
| description |
| "Graceful restart functionality"; |
| reference "RFC4724"; |
| } |
| |
| identity ADD_PATHS { |
| base BGP_CAPABILITY; |
| description |
| "BGP add-paths"; |
| reference "draft-ietf-idr-add-paths"; |
| } |
| |
| identity AFI_SAFI_TYPE { |
| description |
| "Base identity type for AFI,SAFI tuples for BGP-4"; |
| reference "RFC4760 - multiprotocol extensions for BGP-4"; |
| } |
| |
| identity IPV4_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "IPv4 unicast (AFI,SAFI = 1,1)"; |
| reference "RFC4760"; |
| } |
| |
| identity IPV6_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "IPv6 unicast (AFI,SAFI = 2,1)"; |
| reference "RFC4760"; |
| } |
| |
| identity IPV4_LABELED_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Labeled IPv4 unicast (AFI,SAFI = 1,4)"; |
| reference "RFC3107"; |
| } |
| |
| identity IPV6_LABELED_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Labeled IPv6 unicast (AFI,SAFI = 2,4)"; |
| reference "RFC3107"; |
| } |
| |
| identity L3VPN_IPV4_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Unicast IPv4 MPLS L3VPN (AFI,SAFI = 1,128)"; |
| reference "RFC4364"; |
| } |
| |
| identity L3VPN_IPV6_UNICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Unicast IPv6 MPLS L3VPN (AFI,SAFI = 2,128)"; |
| reference "RFC4659"; |
| } |
| |
| identity L3VPN_IPV4_MULTICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Multicast IPv4 MPLS L3VPN (AFI,SAFI = 1,129)"; |
| reference "RFC6514"; |
| } |
| |
| identity L3VPN_IPV6_MULTICAST { |
| base AFI_SAFI_TYPE; |
| description |
| "Multicast IPv6 MPLS L3VPN (AFI,SAFI = 2,129)"; |
| reference "RFC6514"; |
| } |
| |
| identity L2VPN_VPLS { |
| base AFI_SAFI_TYPE; |
| description |
| "BGP-signalled VPLS (AFI,SAFI = 25,65)"; |
| reference "RFC4761"; |
| } |
| |
| identity L2VPN_EVPN { |
| base AFI_SAFI_TYPE; |
| description |
| "BGP MPLS Based Ethernet VPN (AFI,SAFI = 25,70)"; |
| } |
| |
| identity BGP_WELL_KNOWN_STD_COMMUNITY { |
| description |
| "Reserved communities within the standard community space |
| defined by RFC1997. These communities must fall within the |
| range 0x00000000 to 0xFFFFFFFF"; |
| reference "RFC1997"; |
| } |
| |
| identity NO_EXPORT { |
| base BGP_WELL_KNOWN_STD_COMMUNITY; |
| description |
| "Do not export NLRI received carrying this community outside |
| the bounds of this autonomous system, or this confederation if |
| the local autonomous system is a confederation member AS. This |
| community has a value of 0xFFFFFF01."; |
| reference "RFC1997"; |
| } |
| |
| identity NO_ADVERTISE { |
| base BGP_WELL_KNOWN_STD_COMMUNITY; |
| description |
| "All NLRI received carrying this community must not be |
| advertised to other BGP peers. This community has a value of |
| 0xFFFFFF02."; |
| reference "RFC1997"; |
| } |
| |
| identity NO_EXPORT_SUBCONFED { |
| base BGP_WELL_KNOWN_STD_COMMUNITY; |
| description |
| "All NLRI received carrying this community must not be |
| advertised to external BGP peers - including over confederation |
| sub-AS boundaries. This community has a value of 0xFFFFFF03."; |
| reference "RFC1997"; |
| } |
| |
| identity NOPEER { |
| base BGP_WELL_KNOWN_STD_COMMUNITY; |
| description |
| "An autonomous system receiving NLRI tagged with this community |
| is advised not to readvertise the NLRI to external bi-lateral |
| peer autonomous systems. An AS may also filter received NLRI |
| from bilateral peer sessions when they are tagged with this |
| community value"; |
| reference "RFC3765"; |
| } |
| |
| typedef bgp-session-direction { |
| type enumeration { |
| enum INBOUND { |
| description |
| "Refers to all NLRI received from the BGP peer"; |
| } |
| enum OUTBOUND { |
| description |
| "Refers to all NLRI advertised to the BGP peer"; |
| } |
| } |
| description |
| "Type to describe the direction of NLRI transmission"; |
| } |
| |
| typedef bgp-well-known-community-type { |
| type identityref { |
| base BGP_WELL_KNOWN_STD_COMMUNITY; |
| } |
| description |
| "Type definition for well-known IETF community attribute |
| values"; |
| reference |
| "IANA Border Gateway Protocol (BGP) Well Known Communities"; |
| } |
| |
| |
| typedef bgp-std-community-type { |
| // TODO: further refine restrictions and allowed patterns |
| // 4-octet value: |
| // <as number> 2 octets |
| // <community value> 2 octets |
| type union { |
| type uint32 { |
| // per RFC 1997, 0x00000000 - 0x0000FFFF and 0xFFFF0000 - |
| // 0xFFFFFFFF are reserved |
| } |
| type string { |
| pattern '^(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| } |
| description |
| "Type definition for standard commmunity attributes represented as |
| a integer value, or a string of the form N:M where N and M are |
| integers between 0 and 65535."; |
| reference "RFC 1997 - BGP Communities Attribute"; |
| } |
| |
| typedef bgp-ext-community-type { |
| type union { |
| type string { |
| // Type 1: 2-octet global and 4-octet local |
| // (AS number) (Integer) |
| pattern '^(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + |
| '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9])$'; |
| } |
| type string { |
| // Type 2: 4-octet global and 2-octet local |
| // (ipv4-address) (integer) |
| pattern '^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + |
| '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + |
| '2[0-4][0-9]|25[0-5]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| type string { |
| // RFC5668: 4-octet global and 2-octet local |
| // (AS number) (integer) |
| pattern '^(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| type string { |
| // route-target with Type 1 |
| // route-target:(ASN):(local-part) |
| pattern '^route\-target:' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + |
| '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9])$'; |
| } |
| type string { |
| // route-target with Type 2 |
| // route-target:(IPv4):(local-part) |
| pattern '^route\-target:' + |
| '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + |
| '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + |
| '2[0-4][0-9]|25[0-5]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| type string { |
| // 4-byte AS Type 1 route-target |
| pattern '^route\-target:' + |
| '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| type string { |
| // route-origin with Type 1 |
| pattern '^route\-origin:' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + |
| '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9])$'; |
| } |
| type string { |
| // route-origin with Type 2 |
| pattern '^route\-origin:' + |
| '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|' + |
| '25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|' + |
| '2[0-4][0-9]|25[0-5]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| type string { |
| // 4-byte AS Type 1 route-origin |
| pattern '^route\-origin:' + |
| '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + |
| '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + |
| '429[0-3][0-9]{6}|4[0-1][0-9]{7}|[1-3][0-9]{9}|' + |
| '[1-9][0-9]{1,8}|[0-9]):' + |
| '(6553[0-5]|655[0-2][0-9]|654[0-9]{2}|65[0-4][0-9]{2}' + |
| '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$'; |
| } |
| } |
| description |
| "Type definition for extended community attributes. In the case that |
| common communities are utilised, they are represented as a string |
| of the form: |
| - <2b AS>:<4b value> per RFC4360 section 3.1 |
| - <4b IPv4>:<2b value> per RFC4360 section 3.2 |
| - <4b AS>:<2b value> per RFC5668 section 2. |
| - route-target:<2b AS>:<4b value> per RFC4360 section 4 |
| - route-target:<4b IPv4>:<2b value> per RFC4360 section 4 |
| - route-origin:<2b ASN>:<4b value> per RFC4360 section 5 |
| - route-origin:<4b IPv4>:<2b value> per RFC4360 section 5"; |
| reference |
| "RFC 4360 - BGP Extended Communities Attribute |
| RFC 5668 - 4-Octet AS Specific BGP Extended Community"; |
| } |
| |
| typedef bgp-ext-community-recv-type { |
| type union { |
| type bgp-ext-community-type; |
| type binary { |
| length 8; |
| } |
| } |
| description |
| "A type definition utilised to define the extended community |
| in a context where the system is receiving the extended |
| community from an external source, such that the value may be |
| unknown. In the case that the received extended community is |
| unknown it is defined to be a 8-octet quantity formatted |
| according to RFC4360: |
| |
| Type Field: 1 or 2 octets. |
| Value Field: Remaining octets. |
| |
| The high-order octet of the type field is encoded such that |
| bit 0 indicates whether the extended community type is IANA |
| assigned; and bit 1 indicates whether the extended community |
| is transitive. The remaining bits of the high-order type |
| field must be interpreted to determine whether the low-order |
| type field should be parsed, or whether the entire remainder |
| of the extended community is a value."; |
| reference |
| "RFC 4360 - BGP Extended Communities Attribute |
| RFC 5668 - 4-Octet AS Specific BGP Extended Community"; |
| } |
| |
| typedef bgp-community-regexp-type { |
| // TODO: needs more work to decide what format these regexps can |
| // take. |
| type oc-types:std-regexp; |
| description |
| "Type definition for communities specified as regular |
| expression patterns"; |
| } |
| |
| typedef bgp-origin-attr-type { |
| type enumeration { |
| enum IGP { |
| description |
| "Origin of the NLRI is internal"; |
| } |
| enum EGP { |
| description |
| "Origin of the NLRI is EGP"; |
| } |
| enum INCOMPLETE { |
| description |
| "Origin of the NLRI is neither IGP or EGP"; |
| } |
| } |
| description |
| "Type definition for standard BGP origin attribute"; |
| reference "RFC 4271 - A Border Gateway Protocol 4 (BGP-4), |
| Sec 4.3"; |
| } |
| |
| typedef peer-type { |
| type enumeration { |
| enum INTERNAL { |
| description |
| "Internal (iBGP) peer"; |
| } |
| enum EXTERNAL { |
| description |
| "External (eBGP) peer"; |
| } |
| } |
| description |
| "Labels a peer or peer group as explicitly internal or |
| external"; |
| } |
| |
| identity REMOVE_PRIVATE_AS_OPTION { |
| description |
| "Base identity for options for removing private autonomous |
| system numbers from the AS_PATH attribute"; |
| } |
| |
| identity PRIVATE_AS_REMOVE_ALL { |
| base REMOVE_PRIVATE_AS_OPTION; |
| description |
| "Strip all private autonmous system numbers from the AS_PATH. |
| This action is performed regardless of the other content of the |
| AS_PATH attribute, and for all instances of private AS numbers |
| within that attribute."; |
| } |
| |
| identity PRIVATE_AS_REPLACE_ALL { |
| base REMOVE_PRIVATE_AS_OPTION; |
| description |
| "Replace all instances of private autonomous system numbers in |
| the AS_PATH with the local BGP speaker's autonomous system |
| number. This action is performed regardless of the other |
| content of the AS_PATH attribute, and for all instances of |
| private AS number within that attribute."; |
| } |
| |
| typedef remove-private-as-option { |
| type identityref { |
| base REMOVE_PRIVATE_AS_OPTION; |
| } |
| description |
| "Set of options for configuring how private AS path numbers |
| are removed from advertisements"; |
| } |
| |
| typedef rr-cluster-id-type { |
| type union { |
| type uint32; |
| type oc-inet:ipv4-address; |
| } |
| description |
| "Union type for route reflector cluster ids: |
| option 1: 4-byte number |
| option 2: IP address"; |
| } |
| |
| typedef community-type { |
| type enumeration { |
| enum STANDARD { |
| description "Send only standard communities"; |
| } |
| enum EXTENDED { |
| description "Send only extended communities"; |
| } |
| enum BOTH { |
| description "Send both standard and extended communities"; |
| } |
| enum NONE { |
| description "Do not send any community attribute"; |
| } |
| } |
| description |
| "type describing variations of community attributes: |
| STANDARD: standard BGP community [rfc1997] |
| EXTENDED: extended BGP community [rfc4360] |
| BOTH: both standard and extended community"; |
| } |
| |
| |
| typedef as-path-segment-type { |
| type enumeration { |
| enum AS_SEQ { |
| description |
| "Ordered set of autonomous systems that a route in |
| the UPDATE message has traversed"; |
| } |
| enum AS_SET { |
| description |
| "Unordered set of autonomous systems that a route in |
| the UPDATE message has traversed"; |
| } |
| enum AS_CONFED_SEQUENCE { |
| description |
| "Ordered set of Member Autonomous |
| Systems in the local confederation that the UPDATE message |
| has traversed"; |
| } |
| enum AS_CONFED_SET { |
| description |
| "Unordered set of Member Autonomous Systems |
| in the local confederation that the UPDATE message has |
| traversed"; |
| } |
| } |
| description |
| "Defines the types of BGP AS path segments."; |
| } |
| } |