Internet DRAFT - draft-pels-grow-yang-bgp-communities

draft-pels-grow-yang-bgp-communities







Network Working Group                                            M. Pels
Internet-Draft                                                  RIPE NCC
Intended status: Informational                           5 November 2023
Expires: 8 May 2024


                    YANG Module for BGP Communities
                draft-pels-grow-yang-bgp-communities-00

Abstract

   This document provides a YANG module for describing BGP communities.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   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 8 May 2024.

Copyright Notice

   Copyright (c) 2023 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.

Table of Contents

   1.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Rationale . . . . . . . . . . . . . . . . . . . . . . . . . .   3
   4.  Tree view . . . . . . . . . . . . . . . . . . . . . . . . . .   4
   5.  Data elements . . . . . . . . . . . . . . . . . . . . . . . .   5



Pels                       Expires 8 May 2024                   [Page 1]

Internet-Draft             BGP Community YANG              November 2023


     5.1.  The "serial" leaf . . . . . . . . . . . . . . . . . . . .   5
     5.2.  The "uri" leaf  . . . . . . . . . . . . . . . . . . . . .   5
     5.3.  The "description" leaf  . . . . . . . . . . . . . . . . .   6
     5.4.  The "contacturl" leaf . . . . . . . . . . . . . . . . . .   6
     5.5.  The "contacts" list . . . . . . . . . . . . . . . . . . .   6
       5.5.1.  The "emailaddress" leaf . . . . . . . . . . . . . . .   6
       5.5.2.  The "name" leaf . . . . . . . . . . . . . . . . . . .   6
       5.5.3.  The "role" leaf . . . . . . . . . . . . . . . . . . .   6
       5.5.4.  The "organization" leaf . . . . . . . . . . . . . . .   6
       5.5.5.  The "organizationalunit" leaf . . . . . . . . . . . .   6
     5.6.  The "regular" list  . . . . . . . . . . . . . . . . . . .   6
       5.6.1.  The "name" leaf . . . . . . . . . . . . . . . . . . .   7
       5.6.2.  The "description" leaf  . . . . . . . . . . . . . . .   7
       5.6.3.  The "globaladmin" leaf  . . . . . . . . . . . . . . .   7
       5.6.4.  The "localadmin" container  . . . . . . . . . . . . .   7
     5.7.  The "extended" list . . . . . . . . . . . . . . . . . . .   8
       5.7.1.  The "name" leaf . . . . . . . . . . . . . . . . . . .   8
       5.7.2.  The "description" leaf  . . . . . . . . . . . . . . .   8
       5.7.3.  The "type" leaf . . . . . . . . . . . . . . . . . . .   8
       5.7.4.  The "subtype" leaf  . . . . . . . . . . . . . . . . .   8
       5.7.5.  The "asn" leaf  . . . . . . . . . . . . . . . . . . .   8
       5.7.6.  The "asn4" leaf . . . . . . . . . . . . . . . . . . .   9
       5.7.7.  The "localadmin" container  . . . . . . . . . . . . .   9
     5.8.  The "large" list  . . . . . . . . . . . . . . . . . . . .   9
       5.8.1.  The "name" leaf . . . . . . . . . . . . . . . . . . .   9
       5.8.2.  The "description" leaf  . . . . . . . . . . . . . . .   9
       5.8.3.  The "globaladmin" leaf  . . . . . . . . . . . . . . .  10
       5.8.4.  The "localdatapart1" container  . . . . . . . . . . .  10
       5.8.5.  The "localdatapart2" container  . . . . . . . . . . .  10
   6.  Operational guidelines  . . . . . . . . . . . . . . . . . . .  11
     6.1.  Publishing guidelines . . . . . . . . . . . . . . . . . .  11
     6.2.  Parsing guidelines  . . . . . . . . . . . . . . . . . . .  11
   7.  IANA considerations . . . . . . . . . . . . . . . . . . . . .  11
     7.1.  YANG Namespace Registration . . . . . . . . . . . . . . .  11
     7.2.  YANG Module Registration  . . . . . . . . . . . . . . . .  11
     7.3.  YANG SID Allocation . . . . . . . . . . . . . . . . . . .  12
   8.  Security considerations . . . . . . . . . . . . . . . . . . .  12
   9.  Normative References  . . . . . . . . . . . . . . . . . . . .  12
   10. Informative References  . . . . . . . . . . . . . . . . . . .  12
   Appendix A.  YANG Module  . . . . . . . . . . . . . . . . . . . .  13
   Appendix B.  JSON Examples  . . . . . . . . . . . . . . . . . . .  20
     B.1.  RFC8195 Selective NO_EXPORT definition  . . . . . . . . .  20
     B.2.  RFC4384 Data Collection definition  . . . . . . . . . . .  21
   Appendix C.  Acknowledgements . . . . . . . . . . . . . . . . . .  22
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  23






Pels                       Expires 8 May 2024                   [Page 2]

Internet-Draft             BGP Community YANG              November 2023


1.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "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.

2.  Introduction

   ISP operators use BGP communities[RFC1997][RFC4360][RFC8092] to add
   information to prefix announcements or to let customers influence
   routing behaviour inside the network of the ISP.  Each ISP defines
   for itself which BGP communities to support and how the structure of
   these communities should be interpreted.  This document provides a
   YANG[RFC7950] module for describing the structure and meaning of BGP
   communities, Extended BGP communities and Large BGP communities.  ISP
   operators can use this to publish their community definitions in a
   well-defined format.

3.  Rationale

   ISP operators may define various BGP communities that have local
   significance inside of their network.  These communities could be
   used to add miscellaneous information to a prefix announcement.  For
   example, a community "64501:1:528" may signify that AS64501 is
   originating a prefix from a point of presence in The Netherlands (ISO
   3166-1 code 528).  Alternatively, communities could be used to allow
   customers of an ISP to control routing behavior of their prefixes
   inside the ISP.  For example, a community "64501:4:64498" attached to
   a prefix advertised to AS64501 by a customer may be interpreted by
   AS64501 to mean that this prefix must not be propagated to AS64498.

   For both use cases it is necessary for the ISP to communicate the
   meaning of their locally defined communities to others.  Currently
   this is typically done by publishing a list of communities on a web
   page, or as a remark inside an autnum object in the Internet Routing
   Registry.  This makes it cumbersome to determine if and where an ISP
   publishes community information.  The lack of a well-defined
   structure makes it hard to develop tools for parsing community
   information.

   The purpose of the YANG model defined in this document is to provide
   a standardized format for publishing community definitions.  These
   definitions help applications to interpret the structure and purpose
   of BGP communities.  For example, looking glasses may use the
   published definitions to parse communities seen in BGP announcements
   and display their meaning.  Another potential use case is in



Pels                       Expires 8 May 2024                   [Page 3]

Internet-Draft             BGP Community YANG              November 2023


   generating routing policy configurations based on community
   definitions published by an upstream ASN.  This could be done
   automatically using external tooling to generate router
   configurations, or inside a router's command-line interface by
   importing the definitions and providing the CLI-user with available
   choices for manual configuration.

   Note that this document only describes a model for the publishing
   format of community definitions.  The publishing location and
   publishing mechanism used are outside the scope of this
   specification.

4.  Tree view

   The following tree diagram provides an overview of the ietf-bgp-
   communities.yang data model.

   module: draft-pels-grow-yang-bgp-communities
     +--rw bgp-communities
        +--rw serial         uint32
        +--rw uri?           string
        +--rw description?   string
        +--rw contacturl?    string
        +--rw contacts* [emailaddress]
        |  +--rw emailaddress          string
        |  +--rw name?                 string
        |  +--rw role?                 string
        |  +--rw organization?         string
        |  +--rw organizationalunit?   string
        +--rw regular* [name]
        |  +--rw name           string
        |  +--rw description?   string
        |  +--rw globaladmin    uint16
        |  +--rw localadmin
        |     +--rw format?   string
        |     +--rw fields* [name]
        |        +--rw name           string
        |        +--rw length?        uint8
        |        +--rw pattern        string
        |        +--rw description?   string
        +--rw extended* [name]
        |  +--rw name             string
        |  +--rw description?     string
        |  +--rw type             uint8
        |  +--rw subtype          uint8
        |  +--rw (globaladmin)
        |  |  +--:(asn)
        |  |  |  +--rw asn?   uint16



Pels                       Expires 8 May 2024                   [Page 4]

Internet-Draft             BGP Community YANG              November 2023


        |  |  +--:(asn4)
        |  |     +--rw asn4?   uint32
        |  +--rw localadmin
        |     +--rw format?   string
        |     +--rw fields* [name]
        |        +--rw name           string
        |        +--rw length?        uint8
        |        +--rw pattern        string
        |        +--rw description?   string
        +--rw large* [name]
           +--rw name              string
           +--rw description?      string
           +--rw globaladmin       uint32
           +--rw localdatapart1
           |  +--rw format?   string
           |  +--rw fields* [name]
           |     +--rw name           string
           |     +--rw length?        uint8
           |     +--rw pattern        string
           |     +--rw description?   string
           +--rw localdatapart2
              +--rw format?   string
              +--rw fields* [name]
                 +--rw name           string
                 +--rw length?        uint8
                 +--rw pattern        string
                 +--rw description?   string

                                  Figure 1

5.  Data elements

   The BGP Communities YANG Module contains the elements described in
   this section.  The full contents of the module can be found in
   Appendix A.

5.1.  The "serial" leaf

   A required value of type "uint32", containing the version number for
   the community set.  This value wraps and should be compared using
   sequence space arithmetic.

5.2.  The "uri" leaf

   An optional value of type "string", describing the publication point
   for the community set.





Pels                       Expires 8 May 2024                   [Page 5]

Internet-Draft             BGP Community YANG              November 2023


5.3.  The "description" leaf

   An optional value of type "string", providing information about the
   specified set of communities.

5.4.  The "contacturl" leaf

   An optional value of type "string", describing a webpage where
   maintainer contact information may be found.

5.5.  The "contacts" list

   A list of objects defining contact information for the maintainer(s)
   of the community set.  Each object contains the following elements.

5.5.1.  The "emailaddress" leaf

   A required value of type "string", containing the e-mail address of
   the contact.

5.5.2.  The "name" leaf

   An optional value of type "string", containing the name of the
   contact.

5.5.3.  The "role" leaf

   An optional value of type "string", describing the role of the
   contact.

5.5.4.  The "organization" leaf

   An optional value of type "string", containing the organization of
   the contact.

5.5.5.  The "organizationalunit" leaf

   An optional value of type "string", containing the organizational
   unit of the contact.

5.6.  The "regular" list

   A list of objects defining Regular ([RFC1997]) BGP communities.  Each
   object contains the following elements.







Pels                       Expires 8 May 2024                   [Page 6]

Internet-Draft             BGP Community YANG              November 2023


5.6.1.  The "name" leaf

   A required value of type "string", containing the name of this
   community.  Names may be up to 255 characters long and MUST NOT
   contain spaces or tabs.

5.6.2.  The "description" leaf

   An optional value of type "string", providing a description of the
   community.

5.6.3.  The "globaladmin" leaf

   A required value of type "uint16", containing the Autonomous Sytem
   Number set in the Global Administrator part of this community.

5.6.4.  The "localadmin" container

   A group of elements that describe the Local Administrator part of the
   community.  This object contains the following elements.

5.6.4.1.  The "format" leaf

   An optional value of type "string", describing the format in which
   fields are encoded.  Possible encodings are "decimal" for decimal
   numbers and "binary" for bit strings.  If this leaf is not defined,
   the default "decimal" encoding is assumed.

5.6.4.2.  The "fields" list

   A list of objects that together form the Local Administrator part of
   the community.  The combined length values of all fields MUST not
   exceed the maximum length of the Local Administrator part of the
   community.

5.6.4.2.1.  The "name" leaf

   A required value of type "string", containing the name of the field.
   Names may be up to 255 characters long and MUST NOT contain spaces or
   tabs.

5.6.4.2.2.  The "length" leaf

   An optional value of type "uint8", containing the length of the
   field.  If the expected field format (Section 5.6.4.1) is "decimal",
   this is a number of digits.  In case the expected field format is
   "binary", this is a number of bits.




Pels                       Expires 8 May 2024                   [Page 7]

Internet-Draft             BGP Community YANG              November 2023


   If this leaf is not defined, the length is assumed to be the maximum
   allowed length of the entire field list.  In this case the field list
   MUST NOT contain more than one element.

5.6.4.2.3.  The "pattern" leaf

   A required value of type "string", containing a pattern used for
   matching the field's contents.  Patterns are described as POSIX
   Extended Regular Expressions (see [IEEE.1003-2.1992], section 2.8.4).

5.6.4.2.4.  The "description" leaf

   An optional value of type "string", containing a description of the
   pattern.  This description can be used to provide meaning to specific
   values for a field.

5.7.  The "extended" list

   A list of objects defining Extended ([RFC4360]) BGP communities.
   Two-Octet and Four-Octet AS Specific communities are supported by
   this specification.  Each object contains the following elements.

5.7.1.  The "name" leaf

   A required value of type "string", containing the name of this
   community.  Names may be up to 255 characters long and MUST NOT
   contain spaces or tabs.

5.7.2.  The "description" leaf

   An optional value of type "string", providing a description of the
   community.

5.7.3.  The "type" leaf

   A required value of type "uint8", containing the high-order Type of
   the community.

5.7.4.  The "subtype" leaf

   A required value of type "uint8", containing the low-order Sub-Type
   of the community.

5.7.5.  The "asn" leaf

   For Two-Octet AS Specific communities: A required value of type
   "uint16", containing the Autonomous Sytem Number set in the Global
   Administrator part of this community.



Pels                       Expires 8 May 2024                   [Page 8]

Internet-Draft             BGP Community YANG              November 2023


5.7.6.  The "asn4" leaf

   For Four-Octet AS Specific communities: A required value of type
   "uint32", containing the Autonomous Sytem Number set in the Global
   Administrator part of this community.

5.7.7.  The "localadmin" container

   A group of elements that describe the Local Administrator part of the
   community.  This object contains the following elements.

5.7.7.1.  The "format" leaf

   An optional value of type "string", describing the format in which
   fields are to be parsed (see Section 6.2).  Possible encodings are
   "decimal" for decimal numbers and "binary" for strings of zeros and
   ones.  If this leaf is not defined, the default "decimal" encoding is
   assumed.

5.7.7.2.  The "fields" list

   A list of objects that together form the Local Administrator part of
   the community.  The combined length values of all fields MUST not
   exceed the maximum length of the Local Administrator part of the
   community.

   The supported leafs in this list are identical to those described in
   Section 5.6.4.2.

5.8.  The "large" list

   A list of objects defining Large ([RFC8092]) BGP communities.  Each
   object contains the following elements.

5.8.1.  The "name" leaf

   A required value of type "string", containing the name of this
   community.  Names may be up to 255 characters long and MUST NOT
   contain spaces or tabs.

5.8.2.  The "description" leaf

   An optional value of type "string", providing a description of the
   community.







Pels                       Expires 8 May 2024                   [Page 9]

Internet-Draft             BGP Community YANG              November 2023


5.8.3.  The "globaladmin" leaf

   A required value of type "uint32", containing the Autonomous Sytem
   Number set in the Global Administrator part of this community.

5.8.4.  The "localdatapart1" container

   A group of elements that describe the Local Data Part 1 section of
   the community.  This object contains the following elements.

5.8.4.1.  The "format" leaf

   An optional value of type "string", describing the format in which
   fields are encoded.  Possible encodings are "decimal" for decimal
   numbers and "binary" for bit strings.  If this leaf is not defined,
   the default "decimal" encoding is assumed.

5.8.4.2.  The "fields" list

   A list of objects that together form the Local Data Part 1 section of
   the community.  The combined length values of all fields MUST not
   exceed the maximum length of the "Local Data Part 1" section of the
   community.

   The supported leafs in this list are identical to those described in
   Section 5.6.4.2.

5.8.5.  The "localdatapart2" container

   A group of elements that describe the Local Data Part 2 section of
   the community.  This object contains the following elements.

5.8.5.1.  The "format" leaf

   An optional value of type "string", describing the format in which
   fields are encoded.  Possible encodings are "decimal" for decimal
   numbers and "binary" for bit strings.  If this leaf is not defined,
   the default "decimal" encoding is assumed.

5.8.5.2.  The "fields" list

   A list of objects that together form the Local Data Part 2 section of
   the community.  The combined length values of all fields MUST not
   exceed the maximum length of the "Local Data Part 2" section of the
   community.

   The supported leafs in this list are identical to those described in
   Section 5.6.4.2.



Pels                       Expires 8 May 2024                  [Page 10]

Internet-Draft             BGP Community YANG              November 2023


6.  Operational guidelines

6.1.  Publishing guidelines

   Operators SHOULD only publish BGP community definitions for networks
   they control.  This may include communities where the Global
   Administrator field contains a private ASN, if this community has a
   local meaning inside the network of the publisher.

   When publishing community definitions with overlapping field patterns
   these MUST be ordered from most to least specific, to ensure parsers
   can perform deterministic matching.

6.2.  Parsing guidelines

   A published BGP community definition can be used by parsers to
   display information about a received community.  If a received
   community matches multiple published community definitions, the first
   community in the published order takes precedence.

   By default, communities are compared using the decimal representation
   of the fields.  If "format" for a Local Administrator or Local Data
   Part is set to "binary", the fields in the received community are
   converted to strings of zeros and ones before comparison.

   Applications that parse these community definitions SHOULD reject
   objects that do not comply with the rules described in this document.
   Furthermore, parsers SHOULD check that the sum of the specified Local
   Administrator or Local Data Part field lengths in each community
   definition does not exceed the local part size of the specified
   community type.  For example: A Regular BGP community definition with
   format "decimal" containing a field of length 4 and a field of length
   2 would be illegal, as the Local Administrator field has a maximum
   length of 65535 (5 digits).

7.  IANA considerations

7.1.  YANG Namespace Registration

   This document registers the following XML namespace URN in the "IETF
   XML Registry", following the format defined in [RFC3688]:

   TODO

7.2.  YANG Module Registration

   This document registers the following YANG module in the "YANG Module
   Names" registry [RFC6020]:



Pels                       Expires 8 May 2024                  [Page 11]

Internet-Draft             BGP Community YANG              November 2023


   TODO

7.3.  YANG SID Allocation

   This document registers the following entry in the "IETF YANG SID"
   registry [I-D.ietf-core-sid]:

   TODO

8.  Security considerations

   The YANG module described in this document may be used to specify BGP
   community definitions in different encoding formats, such as XML,
   JSON or CBOR.  Applications that parse these community definitions
   SHOULD reject objects that do not comply with the rules described in
   this document.  Furthermore, parsers SHOULD check that the sum of the
   specified Local Administrator or Local Data Part field lengths in
   each community definition does not exceed the local part size of the
   specified community type.

9.  Normative References

   [I-D.ietf-core-sid]
              Veillette, M., Pelov, A., Petrov, I., Bormann, C., and M.
              Richardson, "YANG Schema Item iDentifier (YANG SID)", Work
              in Progress, Internet-Draft, draft-ietf-core-sid-20, 1
              March 2023, <https://datatracker.ietf.org/doc/html/draft-
              ietf-core-sid-20>.

   [RFC1997]  Chandra, R., Traina, P., and T. Li, "BGP Communities
              Attribute", RFC 1997, DOI 10.17487/RFC1997, August 1996,
              <https://www.rfc-editor.org/info/rfc1997>.

   [RFC4360]  Sangli, S., Tappan, D., and Y. Rekhter, "BGP Extended
              Communities Attribute", RFC 4360, DOI 10.17487/RFC4360,
              February 2006, <https://www.rfc-editor.org/info/rfc4360>.

   [RFC7950]  Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
              RFC 7950, DOI 10.17487/RFC7950, August 2016,
              <https://www.rfc-editor.org/info/rfc7950>.

   [RFC8092]  Heitz, J., Ed., Snijders, J., Ed., Patel, K., Bagdonas,
              I., and N. Hilliard, "BGP Large Communities Attribute",
              RFC 8092, DOI 10.17487/RFC8092, February 2017,
              <https://www.rfc-editor.org/info/rfc8092>.

10.  Informative References




Pels                       Expires 8 May 2024                  [Page 12]

Internet-Draft             BGP Community YANG              November 2023


   [IEEE.1003-2.1992]
              Institute of Electrical and Electronics Engineers,
              "Information Technology - Portable Operating System
              Interface (POSIX) - Part 2: Shell and Utilities (Vol. 1)",
              IEEE Standard 1003.2, IEEE 1003.2-1992, IEEE ieee-1003-2,
              1992.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
              DOI 10.17487/RFC3688, January 2004,
              <https://www.rfc-editor.org/info/rfc3688>.

   [RFC4384]  Meyer, D., "BGP Communities for Data Collection", BCP 114,
              RFC 4384, DOI 10.17487/RFC4384, February 2006,
              <https://www.rfc-editor.org/info/rfc4384>.

   [RFC6020]  Bjorklund, M., Ed., "YANG - A Data Modeling Language for
              the Network Configuration Protocol (NETCONF)", RFC 6020,
              DOI 10.17487/RFC6020, October 2010,
              <https://www.rfc-editor.org/info/rfc6020>.

   [RFC7951]  Lhotka, L., "JSON Encoding of Data Modeled with YANG",
              RFC 7951, DOI 10.17487/RFC7951, August 2016,
              <https://www.rfc-editor.org/info/rfc7951>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8195]  Snijders, J., Heasley, J., and M. Schmidt, "Use of BGP
              Large Communities", RFC 8195, DOI 10.17487/RFC8195, June
              2017, <https://www.rfc-editor.org/info/rfc8195>.

   [RFC8792]  Watsen, K., Auerswald, E., Farrel, A., and Q. Wu,
              "Handling Long Lines in Content of Internet-Drafts and
              RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
              <https://www.rfc-editor.org/info/rfc8792>.

Appendix A.  YANG Module

   This section contains the complete YANG module defined in this
   document.

   NOTE: '\' line wrapping per [RFC8792]



Pels                       Expires 8 May 2024                  [Page 13]

Internet-Draft             BGP Community YANG              November 2023


 module draft-pels-grow-yang-bgp-communities {

   yang-version 1.1;

   namespace "urn:to-be-defined";

   prefix bgpcomm;

   organization
     "To be defined";

   contact
     "To be defined";

   description
     "This module describes a structure for BGP Communities";

   revision "2023-08-01" {
     description
       "Initial version.";
     reference "0.0.2";
   }

   grouping localadmin-fields {
     list fields {
       ordered-by user;
       key "name";

       leaf name {
         type string {
           length "1..255";
           pattern "[^ \t\n]+";
         }
         mandatory "true";
         description
           "The name of the field";
       }

       leaf length {
         type uint8;
         description
           "Length of the field";
       }

       leaf pattern {
         type string;
         mandatory "true";
         description



Pels                       Expires 8 May 2024                  [Page 14]

Internet-Draft             BGP Community YANG              November 2023


           "Regular Expression describing the expected contents of the \
 field";
       }

       leaf description {
         type string;
         description
           "A text description of the field contents";
       }
     }
   }

   container bgp-communities {

     leaf serial {
       type "uint32";
       mandatory "true";
       description
         "Version number of the community set.";
     }

     leaf uri {
       type string;
       description
         "Publication point for the community set";
     }

     leaf description {
       type string;
       description
         "A description for the community set";
     }

     leaf contacturl {
       type string;
       description
         "A reference to a webpage with maintainer contact information";
     }

     list contacts {
       key "emailaddress";

       leaf emailaddress {
         type string;
         description
           "Maintainer contact e-mail address";
       }




Pels                       Expires 8 May 2024                  [Page 15]

Internet-Draft             BGP Community YANG              November 2023


       leaf name {
         type string;
         description
           "Maintainer contact name";
       }

       leaf role {
         type string;
         description
           "Maintainer contact role";
       }

       leaf organization {
         type string;
         description
           "Maintainer contact organization";
       }

       leaf organizationalunit {
         type string;
         description
           "Maintainer contact organizational unit";
       }
     }

     list regular {
       key "name";

       leaf name {
         type string {
           length 1..255;
           pattern "[^ \t\n]+";
         }
         mandatory "true";
         description
           "Community name.";
       }

       leaf description {
         type string;
         description
           "Description for the community";
       }

       leaf globaladmin {
         type "uint16";
         mandatory "true";
         description



Pels                       Expires 8 May 2024                  [Page 16]

Internet-Draft             BGP Community YANG              November 2023


           "Global Administrator field";
       }

       container localadmin {
         leaf format {
           type "string" {
             pattern
               'decimal|binary';
           }
           default "decimal";
           description
             "Format used for parsing localadmin fields";
         }

         uses localadmin-fields;
       }
     }

     list extended {
       key "name";

       leaf name {
         type string {
           length 1..255;
           pattern "[^ \t\n]+";
         }
         mandatory "true";
         description
           "Community name";
       }

       leaf description {
         type string;
         description
           "Description for the community";
       }

       leaf type {
         type uint8;
         mandatory "true";
         description
           "Type Field";
       }
       leaf subtype {
         type uint8;
         mandatory "true";
         description
           "Sub-Type Field";



Pels                       Expires 8 May 2024                  [Page 17]

Internet-Draft             BGP Community YANG              November 2023


       }

       choice globaladmin {
         mandatory "true";
         case asn {
           leaf asn {
             type "uint16";
             description
               "Two-Octet AS";
           }
         }
         case asn4 {
           leaf asn4 {
             type "uint32";
             description
               "Four-Octet AS";
           }
         }
       }

       container localadmin {
         leaf format {
           type "string" {
             pattern
               'decimal|binary';
           }
           default "decimal";
           description
             "Format used for parsing localadmin fields";
         }

         uses localadmin-fields;
       }
     }

     list large {
       key "name";

       leaf name {
         type string {
           length 1..255;
           pattern "[^ \t\n]+";
         }
         mandatory "true";
         description
           "Community name.";
       }




Pels                       Expires 8 May 2024                  [Page 18]

Internet-Draft             BGP Community YANG              November 2023


       leaf description {
         type string;
         description
           "Description for the community";
       }

       leaf globaladmin {
         type "uint32";
         mandatory "true";
         description
           "Global Administrator field";
       }

       container localdatapart1 {
         leaf format {
           type "string" {
             pattern
               'decimal|binary';
           }
           default "decimal";
           description
             "Format used for parsing localadmin fields";
         }

         uses localadmin-fields;
       }

       container localdatapart2 {
         leaf format {
           type "string" {
             pattern
               'decimal|binary';
           }
           default "decimal";
           description
             "Format used for parsing localadmin fields";
         }

         uses localadmin-fields;
       }
     }
   }
 }

                                Figure 2






Pels                       Expires 8 May 2024                  [Page 19]

Internet-Draft             BGP Community YANG              November 2023


Appendix B.  JSON Examples

   This section shows example use cases for the YANG module defined in
   this document, using JSON[RFC7951] encoding.

B.1.  RFC8195 Selective NO_EXPORT definition

   A JSON definition for the example Large BGP community described in
   [RFC8195], section 4.1.1 looks as follows.










































Pels                       Expires 8 May 2024                  [Page 20]

Internet-Draft             BGP Community YANG              November 2023


   {
     "draft-pels-grow-yang-bgp-communities:bgp-communities": {
       "serial": 2023080101,
       "uri": "http://example.net/peering/communities",
       "description": "BGP Community example for ASN-Based Selective \
   NO_EXPORT",
       "contacts": [
         {
           "emailaddress": "noc@example.net",
           "name": "Example.net contact",
           "role": "Administrative contact",
           "organization": "Example.net",
           "organizationalunit": "NOC"
         }
       ],
       "large": [
         {
           "name": "RFC8195-NOEXPORT-ASN",
           "description": "Do not export route to ASN",
           "globaladmin": 65539,
           "localdatapart1": {
             "fields": [
               {
                 "name": "Function",
                 "pattern": "4",
                 "description": "ASN-No-Export"
               }
             ]
           },
           "localdatapart2": {
             "fields": [
               {
                 "name": "ASN",
                 "pattern": ".*"
               }
             ]
           }
         }
       ]
     }
   }

                                  Figure 3

B.2.  RFC4384 Data Collection definition

   A JSON definition for the example Regular BGP community described in
   [RFC4384], section 4 looks as follows.



Pels                       Expires 8 May 2024                  [Page 21]

Internet-Draft             BGP Community YANG              November 2023


   NOTE: '\' line wrapping per [RFC8792]

 {
   "draft-pels-grow-yang-bgp-communities:bgp-communities": {
     "serial": 2023080101,
     "uri": "http://example.net/peering/communities",
     "description": "BGP Community example for Data Collection",
     "contacturl": "https://example.net/contact",
     "regular": [
       {
         "name": "RFC4384-ORIGIN-OC/FJ",
         "description": "A national route over a terrestrial link from \
 the Fiji Islands",
         "globaladmin": 64497,
         "localadmin": {
           "format": "binary",
           "fields": [
             {
               "name": "Region",
               "length": 5,
               "pattern": "00010",
               "description": "OC"
             },
             {
               "name": "Satellite",
               "length": 1,
               "pattern": "0"
             },
             {
               "name": "Country",
               "length": 10,
               "pattern": "0011110010",
               "description": "FJ"
             }
           ]
         }
       }
     ]
   }
 }

                                Figure 4

Appendix C.  Acknowledgements

   The author would like to thank Jeffrey Haas, Luuk Hendriks, Jasper
   den Hertog and Teun Vink for contributing ideas and feedback to this
   document.



Pels                       Expires 8 May 2024                  [Page 22]

Internet-Draft             BGP Community YANG              November 2023


Author's Address

   Martin Pels
   RIPE NCC
   Netherlands
   Email: mpels@ripe.net













































Pels                       Expires 8 May 2024                  [Page 23]