submodule openconfig-rib-bgp-attributes {

  belongs-to openconfig-rib-bgp {
    prefix "oc-rib-bgp";
  }


  // import some basic types
  import ietf-inet-types { prefix inet; }
  import openconfig-bgp-types { prefix oc-bgpt; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "This submodule contains common data definitions for BGP
    attributes for use in BGP RIB tables.";


  oc-ext:openconfig-version "0.3.0";

  revision "2016-10-17" {
    description
      "OpenConfig BGP RIB refactor";
    reference "0.3.0";
  }


  grouping bgp-as-path-attr-state {
    description
      "Data for representing BGP AS-PATH attribute";

    leaf type {
      type oc-bgpt:as-path-segment-type;
      description
        "The type of AS-PATH segment";
    }

    leaf-list member {
      type inet:as-number;
      description
        "List of the AS numbers in the AS-PATH segment";
    }
  }

  grouping bgp-as-path-attr-top {
    description
      "Top-level grouping for AS-PATH attribute data";

    container as-path {
      description
        "Enclosing container for the list of AS path segments.

        In the Adj-RIB-In or Adj-RIB-Out, this list should show
        the received or sent AS_PATH, 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 list 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";

      list segment {
        description
          "Unkeyed list of AS PATH segments";

        container state {
          config false;
          description
            "Opstate data for AS-PATH segments";

          uses bgp-as-path-attr-state;
        }
      }
    }
  }

  grouping bgp-as4-path-attr-top {
    description
      "Top-level grouping for AS4-PATH attribute data";

    container as4-path {
      description
        "This is the 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";

      list segment {
        description
          "Unkeyed list of AS PATH segments";

        container state {
          config false;
          description
            "Opstate data for AS-PATH segments";

          uses bgp-as-path-attr-state;
        }
      }
    }
  }

  grouping bgp-community-attr-state {
    description
      "Common definition of BGP community attributes";

    leaf-list community {
      type union {
        type oc-bgpt:bgp-well-known-community-type;
        type oc-bgpt:bgp-std-community-type;
      }
      description
        "List of standard or well-known BGP community
        attributes.";
    }
  }

  grouping bgp-extended-community-attr-state {
    description
      "Common definition of BGP extended community attribute";

    leaf-list ext-community {
      type oc-bgpt:bgp-ext-community-recv-type;
      description
        "List of BGP extended community attributes.  The received
        extended community may be an explicitly modeled
        type or unknown, represented by an 8-octet value
        formatted according to RFC 4360.";
      reference
        "RFC 4360 - BGP Extended Communities Attribute";
    }

  }

  grouping bgp-aggregator-attr-state {
    description
      "Operational state data for the BGP aggregator
      attribute";

    leaf as {
      type inet:as-number;
      description
          "AS number of the autnonomous system that performed the
          aggregation.";
    }

    leaf as4 {
      type inet:as-number;
      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.";
    }
  }


  grouping bgp-aggregator-attr-top {
    description
      "Common definition of the BGP aggregator attribute";

    container aggregator {
      description
        "BGP attribute indicating the prefix has been aggregated by
        the specified AS and router.";

      container state {
        config false;
        description
          "Operational state data for BGP aggregator attribute";

        uses bgp-aggregator-attr-state;
      }
    }
  }

  grouping bgp-shared-common-attr-state {
    description
      "Route attributes shared across route table entries,
      common to both LOC-Rib and Adj-RIB";


    leaf origin {
      type oc-bgpt:bgp-origin-attr-type;
      description
        "BGP attribute defining the origin of the path information.";
    }

    leaf atomic-aggregate {
      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.";
    }

    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 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 the degree of preference for externally learned
        routes.  The route with the highest local preference value
        is preferred.";
    }

    leaf originator-id {
      type inet:ipv4-address;
      description
        "BGP attribute that provides the id as an IPv4 address
        of the originator of 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 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";
    }
  }

  grouping bgp-unknown-attr-flags-state {
    description
      "Operational state data for path attribute flags";

    leaf optional {
      type boolean;
      description
        "Defines whether the attribute is optional (if
         set to true) or well-known (if set to false).
         Set in the high-order bit of the BGP attribute
         flags octet.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    }

    leaf transitive {
      type boolean;
      description
        "Defines whether an optional attribute is transitive
        (if set to true) or non-transitive (if set to false).  For
        well-known attributes, the transitive flag MUST be set to
        true.  Set in the second high-order bit of the BGP attribute
        flags octet.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    }

    leaf partial {
      type boolean;
      description
        "Defines whether the information contained in the optional
        transitive attribute is partial (if set to true) or complete
        (if set to false).  For well-known attributes and for
        optional non-transitive attributes, the partial flag
        must be set to false.  Set in the third high-order bit of
        the BGP attribute flags octet.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    }

    leaf extended {
      type boolean;
      description
        "Defines whether the attribute length is one octet
        (if set to false) or two octets (if set to true).  Set in
        the fourth high-order bit of the BGP attribute flags
        octet.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4 (BGP-4)";
    }
  }

  grouping bgp-unknown-attr-state {
    description
      "Operational state data for path attributes not shared
      across route entries, common to LOC-RIB and Adj-RIB";

    leaf attr-type {
      type uint8;
      description
        "1-octet value encoding 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 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, not including the attribute
        flags, type, or length.  The maximum length
        of the attribute value 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)";
    }
  }

  grouping bgp-unknown-attr-top {
    description
      "Unknown path attributes that are not expected to be shared
      across route entries, common to LOC-RIB and Adj-RIB";

    container unknown-attributes {
      description
        "Unknown path attributes that were received in the UPDATE
        message which contained the prefix.";

      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 leafref {
            path "../state/attr-type";
          }
          description
            "Reference to the list key";
        }

        container state {
          description
            "Operational state for unknown route attributes";

          uses bgp-unknown-attr-flags-state;
          uses bgp-unknown-attr-state;
        }
      }
    }
  }

  grouping bgp-loc-rib-attr-state {
    description
      "Path attributes that are not expected to be shared across
      route entries, specific to LOC-RIB";

  }

  grouping bgp-adj-rib-attr-state {
    description
      "Path attributes that are not expected to be shared across
      route entries, specific to Adj-RIB";

    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";
    }
  }
}
