openconfig-rib-bgp

Defines a data model for representing BGP routing table (RIB) contents. The model supports 5 logical RIBs per address family: ...

  • Version: 2017-03-07

    openconfig-rib-bgp@2017-03-07


    
      module openconfig-rib-bgp {
    
        yang-version 1;
    
        namespace
          "http://openconfig.net/yang/rib/bgp";
    
        prefix oc-bgprib;
    
        import ietf-inet-types {
          prefix inet;
        }
        import ietf-yang-types {
          prefix yang;
        }
        import openconfig-bgp-types {
          prefix oc-bgpt;
        }
        import openconfig-extensions {
          prefix oc-ext;
        }
        import openconfig-rib-bgp-types {
          prefix oc-bgpribt;
        }
    
        organization "OpenConfig working group";
    
        contact
          "OpenConfig working group
    www.openconfig.net";
    
        description
          "Defines a data model for representing BGP routing table (RIB)
    contents.  The model supports 5 logical RIBs per address family:
    
    loc-rib: This is the main BGP routing table for the local routing
    instance, containing best-path selections for each prefix. The
    loc-rib table may contain multiple routes for a given prefix,
    with an attribute to indicate which was selected as the best
    path.
    
    adj-rib-in-pre: This is a per-neighbor table containing the NLRI
    updates received from the neighbor before any local input policy
    rules or filters have been applied.  This can be considered the
    'raw' updates from a given neighbor.
    
    adj-rib-in-post: This is a per-neighbor table containing the
    routes received from the neighbor that are eligible for
    best-path selection after local input policy rules have been
    applied.
    
    adj-rib-out-pre: This is a per-neighbor table containing routes
    eligible for sending (advertising) to the neighbor before output
    policy rules have been applied.
    
    adj-rib-out-post: This is a per-neighbor table containing routes
    eligible for sending (advertising) to the neighbor after output
    policy rules have been applied.";
    
        revision "2017-03-07" {
          description
            "Modified by Cisco for consistency with the
    openconfig-network-instance model.  Pending
    final version from OC team";
        }
    
        revision "2016-04-11" {
          description
            "OpenConfig public release";
          reference
            "0.2.0";
    
        }
    
        oc-ext:openconfig-version "0.2.0";
    
        grouping bgp-base-attributes {
          description
            "Route attributes defined by the BGP-4 standard";
          reference
            "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
          list next-hops {
            key "next-hop";
            description
              "List of available next-hops for this prefix";
            leaf next-hop {
              type inet:ip-address;
              description
                "BGP next hop attribute defining the IP address of the router
    that should be used as the next hop to the destination";
            }
    
            leaf origin {
              type oc-bgpt:bgp-origin-attr-type;
              description
                "BGP attribute defining the origin of the path information.";
            }
    
            leaf as-path {
              type string;
              description
                "String representation of the BGP AS path attribute as
    concatenated AS path segments.  Each segment of the AS_PATH
    should be formatted as follows based on the segment type
    (#### denotes a single AS number):
    
     AS_SEQ: #### #### #####
     AS_SET: { #### #### }
     AS_CONFED_SEQUENCE: ( #### #### )
     AS_CONFED_SET: [ #### #### ]
    
    AS_PATH segment types are described in RFC 5065.
    
    In the Adj-RIB-In or Adj-RIB-Out, this leaf should show
    the received or sent AS_PATH value, respectively.  For
    example, if the local router is not 4-byte capable, this
    value should consist of 2-octet ASNs or the AS_TRANS
    (AS 23456) values received or sent in route updates.
    
    In the Loc-RIB, this leaf should reflect the effective
    AS path for the route, e.g., a 4-octet value if the
    local router is 4-octet capable.";
              reference
                "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)
                 RFC 6793 - BGP Support for Four-octet AS Number Space
                 RFC 5065 - Autonomous System Confederations for BGP";
    
            }
    
            leaf as4-path {
              type string;
              description
                "This string represents the AS path encoded with 4-octet
    AS numbers in the optional transitive AS4_PATH attribute.
    This value is populated with the received or sent attribute
    in Adj-RIB-In or Adj-RIB-Out, respectively.  It should not
    be populated in Loc-RIB since the Loc-RIB is expected to
    store the effective AS-Path in the as-path leaf regardless
    of being 4-octet or 2-octet.";
              reference
                "RFC 6793 - BGP Support for Four-octet AS Number Space";
    
            }
    
            leaf med {
              type uint32;
              description
                "BGP multi-exit discriminator attribute used in BGP route
    selection process";
            }
    
            leaf local-pref {
              type uint32;
              description
                "BGP local preference attribute sent to internal peers to
    indicate";
            }
    
            leaf atomic-aggr {
              type boolean;
              description
                "BGP attribute indicating that the prefix is an atomic
    aggregate, i.e., the peer selected a less specific
    route without selecting a more specific route that is
    included in it.";
            }
    
            container aggregator {
              description
                "BGP attribute indicating the prefix has been aggregated by
    the specified AS and router.";
              leaf as {
                type uint32;
                description
                  "AS number of the autnonomous system that performed the
    aggregation.";
              }
    
              leaf as4 {
                type uint32;
                description
                  "AS number of the autnonomous system that performed the
    aggregation (4-octet representation).  This value is
    populated if an upstream router is not 4-octet capable.
    Its semantics are similar to the AS4_PATH optional
    transitive attribute";
                reference
                  "RFC 6793 - BGP Support for Four-octet AS Number Space";
    
              }
    
              leaf address {
                type inet:ipv4-address;
                description
                  "IP address of the router that performed the
    aggregation.";
              }
            }  // container aggregator
    
            leaf-list community {
              type oc-bgpt:bgp-std-community-type;
              description
                "List of standard BGP community attributes.";
            }
    
            leaf originator-id {
              type inet:ipv4-address;
              description
                "BGP attribute that provides the id as an IPv4 address
    of the route reflector that created the announcement";
              reference
                "RFC 4456 - BGP Route Reflection: An Alternative to Full
                Mesh Internal BGP (IBGP)";
    
            }
    
            leaf-list cluster-list {
              type inet:ipv4-address;
              description
                "Represents the reflection path that the route has passed.";
              reference
                "RFC 4456 - BGP Route Reflection: An Alternative to Full
                Mesh Internal BGP (IBGP)";
    
            }
    
            leaf-list ext-community {
              type oc-bgpt:bgp-ext-community-type;
              description
                "List of BGP extended community attributes";
              reference
                "RFC 4360 - BGP Extended Communities Attribute";
    
            }
    
            leaf aigp {
              type uint64;
              description
                "BGP path attribute representing the accumulated IGP metric
    for the path";
              reference
                "RFC 7311 - The Accumulated IGP Metric Attribute for BGP";
    
            }
    
            leaf path-id {
              type uint32;
              description
                "When the BGP speaker supports advertisement of multiple
    paths for a prefix, the path identifier is used to
    uniquely identify a route based on the combination of the
    prefix and path id.  In the Adj-RIB-In, the path-id value is
    the value received in the update message.   In the Loc-RIB,
    if used, it should represent a locally generated path-id
    value for the corresponding route.  In Adj-RIB-Out, it
    should be the value sent to a neighbor when add-paths is
    used, i.e., the capability has been negotiated.";
              reference
                "draft-ietf-idr-add-paths - Advertisement of Multiple Paths
                in BGP";
    
            }
    
            list unknown-attribute {
              key "attr-type";
              description
                "This list contains received attributes that are unrecognized
    or unsupported by the local router.  The list may be empty.";
              leaf attr-type {
                type uint16;
                description
                  "2-octet value encoding the attribute flags and the
    attribute type code";
                reference
                  "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
              }
    
              leaf attr-len {
                type uint16;
                description
                  "One or two octet attribute length field indicating the
    length of the attribute data in octets.  If the Extended
    Length attribute flag in the attribute type field is set,
    the length field is 2 octets, otherwise it is 1 octet";
                reference
                  "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
              }
    
              leaf attr-value {
                type binary {
                  length "1..65535";
                }
                description
                  "Raw attribute value data, not to exceed the length
    indicated in the attr-len field.  The maximum length
    of the attribute data is 2^16-1 per the max value of the
    attr-len field (2 octets).";
                reference
                  "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
              }
            }  // list unknown-attribute
    
            leaf last-modified-date {
              type yang:date-and-time;
              description
                "Timestamp of when this path was last changed";
            }
    
            leaf last-update-received {
              type yang:date-and-time;
              description
                "Timestamp of when the last BGP update message was received
    for this path / prefix";
            }
    
            leaf valid-route {
              type boolean;
              description
                "Indicates that the route is considered valid by the
    local router";
            }
    
            leaf invalid-reason {
              type identityref {
                base oc-bgpribt:INVALID_ROUTE_REASON;
              }
              description
                "If the route is rejected as invalid, this indicates the
    reason.";
            }
    
            leaf best-path {
              type boolean;
              description
                "Current path was selected as the best path.";
            }
          }  // list next-hops
        }  // grouping bgp-base-attributes
    
        grouping bgp-extended-attributes {
          description
            "Additional path attributes defined by various extensions
    to base BGP-4";
          leaf originator-id {
            type inet:ipv4-address;
            description
              "BGP attribute that provides the id as an IPv4 address
    of the route reflector that created the announcement";
            reference
              "RFC 4456 - BGP Route Reflection: An Alternative to Full
              Mesh Internal BGP (IBGP)";
    
          }
    
          leaf-list cluster-list {
            type inet:ipv4-address;
            description
              "Represents the reflection path that the route has passed.";
            reference
              "RFC 4456 - BGP Route Reflection: An Alternative to Full
              Mesh Internal BGP (IBGP)";
    
          }
    
          leaf-list ext-community {
            type oc-bgpt:bgp-ext-community-type;
            description
              "List of BGP extended community attributes";
            reference
              "RFC 4360 - BGP Extended Communities Attribute";
    
          }
    
          leaf aigp {
            type uint64;
            description
              "BGP path attribute representing the accumulated IGP metric
    for the path";
            reference
              "RFC 7311 - The Accumulated IGP Metric Attribute for BGP";
    
          }
    
          leaf path-id {
            type uint32;
            description
              "When the BGP speaker supports advertisement of multiple
    paths for a prefix, the path identifier is used to
    uniquely identify a route based on the combination of the
    prefix and path id.  In the Adj-RIB-In, the path-id value is
    the value received in the update message.   In the Loc-RIB,
    if used, it should represent a locally generated path-id
    value for the corresponding route.  In Adj-RIB-Out, it
    should be the value sent to a neighbor when add-paths is
    used, i.e., the capability has been negotiated.";
            reference
              "draft-ietf-idr-add-paths - Advertisement of Multiple Paths
              in BGP";
    
          }
    
          list unknown-attribute {
            key "attr-type";
            description
              "This list contains received attributes that are unrecognized
    or unsupported by the local router.  The list may be empty.";
            leaf attr-type {
              type uint16;
              description
                "2-octet value encoding the attribute flags and the
    attribute type code";
              reference
                "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
            }
    
            leaf attr-len {
              type uint16;
              description
                "One or two octet attribute length field indicating the
    length of the attribute data in octets.  If the Extended
    Length attribute flag in the attribute type field is set,
    the length field is 2 octets, otherwise it is 1 octet";
              reference
                "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
            }
    
            leaf attr-value {
              type binary {
                length "1..65535";
              }
              description
                "Raw attribute value data, not to exceed the length
    indicated in the attr-len field.  The maximum length
    of the attribute data is 2^16-1 per the max value of the
    attr-len field (2 octets).";
              reference
                "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    
            }
          }  // list unknown-attribute
        }  // grouping bgp-extended-attributes
    
        grouping common-route-annotations {
          description
            "Data definitions for flags and other information attached
    to routes";
          leaf last-modified-date {
            type yang:date-and-time;
            description
              "Timestamp of when this path was last changed";
          }
    
          leaf last-update-received {
            type yang:date-and-time;
            description
              "Timestamp of when the last BGP update message was received
    for this path / prefix";
          }
    
          leaf valid-route {
            type boolean;
            description
              "Indicates that the route is considered valid by the
    local router";
          }
    
          leaf invalid-reason {
            type identityref {
              base oc-bgpribt:INVALID_ROUTE_REASON;
            }
            description
              "If the route is rejected as invalid, this indicates the
    reason.";
          }
    
          leaf best-path {
            type boolean;
            description
              "Current path was selected as the best path.";
          }
        }  // grouping common-route-annotations
    
        grouping common-table-attrs {
          description
            "Common attributes attached to all routing tables";
          leaf num-routes {
            type uint64;
            description
              "Number of route entries in the table";
          }
        }  // grouping common-table-attrs
    
        grouping common-route-attrs {
          description
            "Common BGP route attributes and annotations";
          container attributes {
            config false;
            description
              "Base BGP route attributes associated with this route";
            uses bgp-base-attributes;
          }  // container attributes
        }  // grouping common-route-attrs
    
        grouping ipv4-routes {
          description
            "Common grouping for a list of BGP routes for IPv4 unicast";
          container routes {
            config false;
            description
              "Enclosing container for list of routes in the routing
    table.";
            list route {
              key "prefix";
              config false;
              description
                "List of routes in the table";
              leaf prefix {
                type inet:ipv4-prefix;
                description
                  "Prefix for the route";
              }
    
              uses common-route-attrs;
            }  // list route
          }  // container routes
        }  // grouping ipv4-routes
    
        grouping ipv6-routes {
          description
            "Common grouping for a list of BGP routes for IPv6 unicast";
          container routes {
            config false;
            description
              "Enclosing container for list of routes in the routing
    table.";
            list route {
              key "prefix";
              config false;
              description
                "List of routes in the table";
              leaf prefix {
                type inet:ipv6-prefix;
                description
                  "Prefix for the route";
              }
    
              uses common-route-attrs;
            }  // list route
          }  // container routes
        }  // grouping ipv6-routes
    
        grouping ip-rib-top {
          description
            "Top-level grouping for IPv4 routing tables";
          container loc-rib {
            config false;
            description
              "Main routing table on the router, containing best-path
    selections for each prefix.  The loc-rib may contain
    multiple routes for the same prefix (it is a read-only,
    unkeyed list).  The best-path leaf should be set to true
    for the route selected by the best-path selection process.
    Note that multiple paths may be used or advertised even if
    only one path is marked as best, e.g., when using BGP
    add-paths.  An implementation may choose to mark multiple
    paths in the RIB as best path by setting the flag to true for
    multiple entries.";
            uses common-table-attrs;
          }  // container loc-rib
    
          container neighbors {
            config false;
            description
              "Enclosing container for neighbor list";
            list neighbor {
              key "neighbor-address";
              description
                "List of neighbors (peers) of the local BGP speaker";
              leaf neighbor-address {
                type inet:ip-address;
                description
                  "IP address of the BGP neighbor or peer";
              }
    
              container adj-rib-in-pre {
                description
                  "Per-neighbor table containing the NLRI updates
    received from the neighbor before any local input
    policy rules or filters have been applied.  This can
    be considered the 'raw' updates from the neighbor.";
                uses common-table-attrs;
              }  // container adj-rib-in-pre
    
              container adj-rib-in-post {
                description
                  "Per-neighbor table containing the paths received from
    the neighbor that are eligible for best-path selection
    after local input policy rules have been applied.";
                uses common-table-attrs;
              }  // container adj-rib-in-post
    
              container adj-rib-out-pre {
                description
                  "Per-neighbor table containing paths eligble for
    sending (advertising) to the neighbor before output
    policy rules have been applied";
                uses common-table-attrs;
              }  // container adj-rib-out-pre
    
              container adj-rib-out-post {
                description
                  "Per-neighbor table containing paths eligble for
    sending (advertising) to the neighbor after output
    policy rules have been applied";
                uses common-table-attrs;
              }  // container adj-rib-out-post
            }  // list neighbor
          }  // container neighbors
        }  // grouping ip-rib-top
    
        grouping bgp-rib-top {
          description
            "Top-level grouping for the BGP RIB";
          container bgp-rib {
            config false;
            description
              "Top level container for BGP RIBs";
            container afi-safis {
              config false;
              description
                "Enclosing container for address family list";
              list afi-safi {
                key "afi-safi-name";
                description
                  "list of afi-safi types";
                leaf afi-safi-name {
                  type identityref {
                    base oc-bgpt:AFI_SAFI_TYPE;
                  }
                  description "AFI,SAFI";
                }
    
                container ipv4-unicast {
                  when
                    "../afi-safi-name = 'oc-bgpt:IPV4_UNICAST'" {
                    description
                      "Include this container for IPv4 unicast RIB";
                  }
                  description
                    "Routing tables for IPv4 unicast -- active when the
    afi-safi name is ipv4-unicast";
                  uses ip-rib-top;
                }  // container ipv4-unicast
    
                container ipv6-unicast {
                  when
                    "../afi-safi-name = 'oc-bgpt:IPV6_UNICAST'" {
                    description
                      "Include this container for IPv6 unicast RIB";
                  }
                  description
                    "Routing tables for IPv6 unicast -- active when the
    afi-safi name is ipv6-unicast";
                  uses ip-rib-top;
                }  // container ipv6-unicast
              }  // list afi-safi
            }  // container afi-safis
          }  // container bgp-rib
        }  // grouping bgp-rib-top
    
        uses bgp-rib-top;
    
        augment /bgp-rib/afi-safis/afi-safi/ipv4-unicast/loc-rib {
          description
            "Adds the IPv4 route list to the IPv4-unicast tables";
          uses ipv4-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv4-unicast/neighbors/neighbor/adj-rib-in-pre {
          description
            "Adds the IPv4 route list to the IPv4-unicast tables";
          uses ipv4-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv4-unicast/neighbors/neighbor/adj-rib-in-post {
          description
            "Adds the IPv4 route list to the IPv4-unicast tables";
          uses ipv4-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv4-unicast/neighbors/neighbor/adj-rib-out-pre {
          description
            "Adds the IPv4 route list to the IPv4-unicast tables";
          uses ipv4-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv4-unicast/neighbors/neighbor/adj-rib-out-post {
          description
            "Adds the IPv4 route list to the IPv4-unicast tables";
          uses ipv4-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv6-unicast/loc-rib {
          description
            "Adds the IPv6 route list to the IPv6-unicast tables";
          uses ipv6-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv6-unicast/neighbors/neighbor/adj-rib-in-pre {
          description
            "Adds the IPv6 route list to the IPv6-unicast tables";
          uses ipv6-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv6-unicast/neighbors/neighbor/adj-rib-in-post {
          description
            "Adds the IPv6 route list to the IPv6-unicast tables";
          uses ipv6-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv6-unicast/neighbors/neighbor/adj-rib-out-pre {
          description
            "Adds the IPv6 route list to the IPv6-unicast tables";
          uses ipv6-routes;
        }
    
        augment /bgp-rib/afi-safis/afi-safi/ipv6-unicast/neighbors/neighbor/adj-rib-out-post {
          description
            "Adds the IPv6 route list to the IPv6-unicast tables";
          uses ipv6-routes;
        }
      }  // module openconfig-rib-bgp
    

© 2023 YumaWorks, Inc. All rights reserved.