submodule openconfig-bgp-common {

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

  import openconfig-extensions { prefix oc-ext; }
  import openconfig-bgp-types { prefix oc-bgp-types; }
  import openconfig-routing-policy { prefix oc-rpol; }
  import openconfig-types { prefix oc-types; }
  import openconfig-inet-types { prefix oc-inet; }

  // meta
  organization
    "OpenConfig working group";

  contact
    "OpenConfig working group
    netopenconfig@googlegroups.com";

  description
    "This sub-module contains common groupings that are common across
    multiple contexts within the BGP module. That is to say that they
    may be application to a subset of global, peer-group or neighbor
    contexts.";

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

  grouping bgp-common-neighbor-group-timers-config {
    description
      "Config parameters related to timers associated with the BGP
      peer";

    leaf connect-retry {
      type decimal64 {
        fraction-digits 2;
      }
      default 30;
      description
        "Time interval in seconds between attempts to establish a
        session with the peer.";
    }

    leaf hold-time {
      type decimal64 {
        fraction-digits 2;
      }
      default 90;
      description
        "Time interval in seconds that a BGP session will be
        considered active in the absence of keepalive or other
        messages from the peer.  The hold-time is typically
        set to 3x the keepalive-interval.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4, Sec. 10";
    }

    leaf keepalive-interval {
      type decimal64 {
        fraction-digits 2;
      }
      default 30;
      description
        "Time interval in seconds between transmission of keepalive
        messages to the neighbor.  Typically set to 1/3 the
        hold-time.";
    }

    leaf minimum-advertisement-interval {
      type decimal64 {
        fraction-digits 2;
      }
      default 30;
      description
        "Minimum time which must elapse between subsequent UPDATE
        messages relating to a common set of NLRI being transmitted
        to a peer. This timer is referred to as
        MinRouteAdvertisementIntervalTimer by RFC 4721 and serves to
        reduce the number of UPDATE messages transmitted when a
        particular set of NLRI exhibit instability.";
      reference
        "RFC 4271 - A Border Gateway Protocol 4, Sec 9.2.1.1";
    }
  }

  grouping bgp-common-neighbor-group-config {
    description
      "Neighbor level configuration items.";

    leaf peer-as {
      type oc-inet:as-number;
      description
        "AS number of the peer.";
    }

    leaf local-as {
      type oc-inet:as-number;
      description
        "The local autonomous system number that is to be used
        when establishing sessions with the remote peer or peer
        group, if this differs from the global BGP router
        autonomous system number.";
    }

    leaf peer-type {
        type oc-bgp-types:peer-type;
        description
          "Explicitly designate the peer or peer group as internal
          (iBGP) or external (eBGP).";
    }

    leaf auth-password {
      type oc-types:routing-password;
      description
        "Configures an MD5 authentication password for use with
        neighboring devices.";
    }

    leaf remove-private-as {
      // could also make this a container with a flag to enable
      // remove-private and separate option.  here, option implies
      // remove-private is enabled.
      type oc-bgp-types:remove-private-as-option;
      description
        "Remove private AS numbers from updates sent to peers - when
        this leaf is not specified, the AS_PATH attribute should be
        sent to the peer unchanged";
    }

    leaf route-flap-damping {
      type boolean;
      default false;
      description
        "Enable route flap damping.";
    }

    leaf send-community {
      type oc-bgp-types:community-type;
      default "NONE";
      description
        "Specify which types of community should be sent to the
        neighbor or group. The default is to not send the
        community attribute";
    }

    leaf description {
      type string;
      description
        "An optional textual description (intended primarily for use
        with a peer or group";
    }
  }

  grouping bgp-common-neighbor-group-transport-config {
    description
      "Configuration parameters relating to the transport protocol
      used by the BGP session to the peer";

    leaf tcp-mss {
      type uint16;
      description
        "Sets the max segment size for BGP TCP sessions.";
    }

    leaf mtu-discovery {
      type boolean;
      default false;
      description
        "Turns path mtu discovery for BGP TCP sessions on (true)
        or off (false)";
    }

    leaf passive-mode {
      type boolean;
      default false;
      description
        "Wait for peers to issue requests to open a BGP session,
        rather than initiating sessions from the local router.";
    }

    leaf local-address {
      type union {
        type oc-inet:ip-address;
        type string;
      }
      //TODO:  the string should be converted to a leafref type
      //to point to an interface when YANG 1.1 is available with
      //leafrefs in union types.
      description
        "Set the local IP (either IPv4 or IPv6) address to use
        for the session when sending BGP update messages.  This
        may be expressed as either an IP address or reference
        to the name of an interface.";
    }
  }

  grouping bgp-common-neighbor-group-error-handling-config {
    description
      "Configuration parameters relating to enhanced error handling
      behaviours for BGP";

    leaf treat-as-withdraw {
      type boolean;
      default "false";
      description
        "Specify whether erroneous UPDATE messages for which the
        NLRI can be extracted are reated as though the NLRI is
        withdrawn - avoiding session reset";
      reference "draft-ietf-idr-error-handling-16";
    }
  }

  grouping bgp-common-neighbor-group-logging-options-config {
    description
      "Configuration parameters specifying the logging behaviour for
      BGP sessions to the peer";

    leaf log-neighbor-state-changes {
      type boolean;
      default "true";
      description
        "Configure logging of peer state changes.  Default is
        to enable logging of peer state changes.";
    }
  }

  grouping bgp-common-neighbor-group-multihop-config {
    description
      "Configuration parameters specifying the multihop behaviour for
      BGP sessions to the peer";

    leaf enabled {
      type boolean;
      default "false";
      description
        "When enabled the referenced group or neighbors are permitted
        to be indirectly connected - including cases where the TTL
        can be decremented between the BGP peers";
    }

    leaf multihop-ttl {
      type uint8;
      description
        "Time-to-live value to use when packets are sent to the
        referenced group or neighbors and ebgp-multihop is enabled";
    }
  }

  grouping bgp-common-neighbor-group-route-reflector-config {
    description
      "Configuration parameters determining whether the behaviour of
      the local system when acting as a route-reflector";

    leaf route-reflector-cluster-id {
      type oc-bgp-types:rr-cluster-id-type;
      description
        "route-reflector cluster id to use when local router is
        configured as a route reflector.  Commonly set at the group
        level, but allows a different cluster
        id to be set for each neighbor.";
    }

    leaf route-reflector-client {
      type boolean;
      default "false";
      description
        "Configure the neighbor as a route reflector client.";
    }
  }

  grouping bgp-common-neighbor-group-as-path-options-config {
    description
      "Configuration parameters allowing manipulation of the AS_PATH
      attribute";

    leaf allow-own-as {
      type uint8;
      default 0;
      description
        "Specify the number of occurrences of the local BGP speaker's
        AS that can occur within the AS_PATH before it is rejected.";
    }

    leaf replace-peer-as {
      type boolean;
      default "false";
      description
        "Replace occurrences of the peer's AS in the AS_PATH
        with the local autonomous system number";
    }

    leaf disable-peer-as-filter {
      type boolean;
      default "false";
      description
        "When set to true, the system advertises routes to a peer
        even if the peer's AS was in the AS path.  The default
        behavior (false) suppresses advertisements to peers if
        their AS number is in the AS path of the route.";
    }
  }

  grouping bgp-common-neighbor-group-add-paths-config {
    description
      "Configuration parameters specfying whether the local system
      will send or receive multiple paths using ADD_PATHS";

    leaf receive {
      type boolean;
      default false;
      description
        "Enable capability negotiation to receive multiple path
        advertisements for an NLRI from the neighbor or group";
      reference
        "RFC 7911 - Advertisement of Multiple Paths in BGP";
    }

    leaf send {
      type boolean;
      default false;
      description
        "Enable capability negotiation to send multiple path
        advertisements for an NLRI from the neighbor or group";
      reference
        "RFC 7911 - Advertisement of Multiple Paths in BGP";
    }

    leaf send-max {
      type uint8;
      description
        "The maximum total number of paths to advertise to neighbors
        for a single NLRI.  This includes the single best path as
        well as additional paths advertised when add-paths is
        enabled.";
    }

    leaf eligible-prefix-policy {
      type leafref {
        path "/oc-rpol:routing-policy/oc-rpol:policy-definitions/" +
          "oc-rpol:policy-definition/oc-rpol:name";
      }
      description
        "A reference to a routing policy which can be used to
        restrict the prefixes for which add-paths is enabled";
    }
  }

  grouping bgp-common-graceful-restart-config {
    description
      "Configuration parameters relating to BGP graceful restart.";

    leaf enabled {
      type boolean;
      description
        "Enable or disable the graceful-restart capability.";
    }

    leaf restart-time {
      type uint16 {
        range 0..4096;
      }
      description
        "Estimated time (in seconds) for the local BGP speaker to
        restart a session. This value is advertise in the graceful
        restart BGP capability.  This is a 12-bit value, referred to
        as Restart Time in RFC4724.  Per RFC4724, the suggested
        default value is <= the hold-time value.";
    }

    leaf stale-routes-time {
      type decimal64 {
        fraction-digits 2;
      }
      description
        "An upper-bound on the time thate stale routes will be
        retained by a router after a session is restarted. If an
        End-of-RIB (EOR) marker is received prior to this timer
        expiring stale-routes will be flushed upon its receipt - if
        no EOR is received, then when this timer expires stale paths
        will be purged. This timer is referred to as the
        Selection_Deferral_Timer in RFC4724";
    }

    leaf helper-only {
      type boolean;
      description
        "Enable graceful-restart in helper mode only. When this
        leaf is set, the local system does not retain forwarding
        its own state during a restart, but supports procedures
        for the receiving speaker, as defined in RFC4724.";
    }
  }

  grouping bgp-common-use-multiple-paths-config {
    description
      "Generic configuration options relating to use of multiple
      paths for a referenced AFI-SAFI, group or neighbor";

    leaf enabled {
      type boolean;
      default false;
      description
        "Whether the use of multiple paths for the same NLRI is
        enabled for the neighbor. This value is overridden by
        any more specific configuration value.";
    }
  }

  grouping bgp-common-use-multiple-paths-ebgp-as-options-config {
    description
      "Configuration parameters specific to eBGP multipath applicable
      to all contexts";

    leaf allow-multiple-as {
     type boolean;
     default "false";
     description
      "Allow multipath to use paths from different neighbouring
      ASes.  The default is to only consider multiple paths from
      the same neighbouring AS.";
    }
  }

  grouping bgp-common-global-group-use-multiple-paths {
    description
      "Common grouping used for both global and groups which provides
      configuration and state parameters relating to use of multiple
      paths";

    container use-multiple-paths {
      description
        "Parameters related to the use of multiple paths for the
        same NLRI";

      container config {
        description
          "Configuration parameters relating to multipath";
        uses bgp-common-use-multiple-paths-config;
      }
      container state {
        config false;
        description
          "State parameters relating to multipath";
        uses bgp-common-use-multiple-paths-config;
      }

      container ebgp {
        description
          "Multipath parameters for eBGP";
        container config {
          description
            "Configuration parameters relating to eBGP multipath";
          uses bgp-common-use-multiple-paths-ebgp-config;
        }
        container state {
          config false;
          description
            "State information relating to eBGP multipath";
          uses bgp-common-use-multiple-paths-ebgp-config;
        }
      }

      container ibgp {
        description
          "Multipath parameters for iBGP";
        container config {
          description
            "Configuration parameters relating to iBGP multipath";
          uses bgp-common-use-multiple-paths-ibgp-config;
        }
        container state {
          config false;
          description
            "State information relating to iBGP multipath";
          uses bgp-common-use-multiple-paths-ibgp-config;
        }
      }
    }
  }

  grouping bgp-common-use-multiple-paths-ebgp-config {
    description
      "Configuration parameters relating to multipath for eBGP";

    leaf allow-multiple-as {
     type boolean;
     default "false";
     description
      "Allow multipath to use paths from different neighbouring
      ASes.  The default is to only consider multiple paths from
      the same neighbouring AS.";
    }

    leaf maximum-paths {
     type uint32;
     default 1;
     description
      "Maximum number of parallel paths to consider when using
      BGP multipath. The default is use a single path.";
    }
  }

  grouping bgp-common-use-multiple-paths-ibgp-config {
    description
      "Configuration parmaeters relating to multipath for iBGP";

    leaf maximum-paths {
      type uint32;
      default 1;
      description
        "Maximum number of parallel paths to consider when using
        iBGP multipath. The default is to use a single path";
    }
  }

  grouping bgp-common-route-selection-options-config {
    description
      "Set of configuration options that govern best
       path selection.";

    leaf always-compare-med {
      type boolean;
      default "false";
      description
        "Compare multi-exit discriminator (MED) value from
        different ASes when selecting the best route.  The
        default behavior is to only compare MEDs for paths
        received from the same AS.";
    }

    leaf ignore-as-path-length {
      type boolean;
      default "false";
      description
        "Ignore the AS path length when selecting the best path.
        The default is to use the AS path length and prefer paths
        with shorter length.";
    }

    leaf external-compare-router-id {
      type boolean;
      default "true";
      description
        "When comparing similar routes received from external
        BGP peers, use the router-id as a criterion to select
        the active path.";
    }

    leaf advertise-inactive-routes {
      type boolean;
      default "false";
      description
        "Advertise inactive routes to external peers.  The
        default is to only advertise active routes.";
    }

    leaf enable-aigp {
      type boolean;
      default false;
      description
        "Flag to enable sending / receiving accumulated IGP
        attribute in routing updates";
    }

    leaf ignore-next-hop-igp-metric {
      type boolean;
      default "false";
      description
        "Ignore the IGP metric to the next-hop when calculating
        BGP best-path. The default is to select the route for
        which the metric to the next-hop is lowest";
    }
  }

  grouping bgp-common-route-selection-options {
    description
      "Configuration and state relating to route selection options";

    container route-selection-options {
      description
        "Parameters relating to options for route selection";
      container config {
        description
          "Configuration parameters relating to route selection
          options";
        uses bgp-common-route-selection-options-config;
      }
      container state {
        config false;
        description
          "State information for the route selection options";
        uses bgp-common-route-selection-options-config;
      }
    }
  }

  grouping bgp-common-state {
    description
      "Grouping containing common counters relating to prefixes and
      paths";

    leaf total-paths {
      type uint32;
      description
        "Total number of BGP paths within the context";
    }

    leaf total-prefixes {
      type uint32;
      description
        "Total number of BGP prefixes received within the context";
    }
  }


}

