submodule openconfig-bgp-neighbor {

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

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

  // Include the common submodule
  include openconfig-bgp-common;
  include openconfig-bgp-common-multiprotocol;
  include openconfig-bgp-peer-group;
  include openconfig-bgp-common-structure;

  // meta
  organization
    "OpenConfig working group";

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

  description
    "This sub-module contains groupings that are specific to the
    neighbor context of the OpenConfig BGP module.";

  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-neighbor-config {
    description
      "Configuration parameters relating to a base BGP neighbor that
      are not also applicable to any other context
      (e.g., peer group)";

    leaf peer-group {
      type leafref {
        path "../../../../peer-groups/peer-group/peer-group-name";
      }
      description
        "The peer-group with which this neighbor is associated";
    }

    leaf neighbor-address {
        type oc-inet:ip-address;
        description
          "Address of the BGP peer, either in IPv4 or IPv6";
    }

    leaf enabled {
        type boolean;
        default true;
        description
          "Whether the BGP peer is enabled. In cases where the
          enabled leaf is set to false, the local system should not
          initiate connections to the neighbor, and should not
          respond to TCP connections attempts from the neighbor. If
          the state of the BGP session is ESTABLISHED at the time
          that this leaf is set to false, the BGP session should be
          ceased.";
    }
  }

  grouping bgp-neighbor-use-multiple-paths {
    description
      "Multipath configuration and state applicable to a BGP
      neighbor";

    container use-multiple-paths {
      description
        "Parameters related to the use of multiple-paths for the same
        NLRI when they are received only from this neighbor";

      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 configuration for eBGP";
        container config {
          description
            "Configuration parameters relating to eBGP multipath";
          uses bgp-common-use-multiple-paths-ebgp-as-options-config;
        }
        container state {
          config false;
          description
            "State information relating to eBGP multipath";
          uses bgp-common-use-multiple-paths-ebgp-as-options-config;
        }
      }
    }
  }

  grouping bgp-neighbor-state {
    description
      "Operational state parameters relating only to a BGP neighbor";

    leaf session-state {
      type enumeration {
          enum IDLE {
            description
              "neighbor is down, and in the Idle state of the
              FSM";
          }
          enum CONNECT {
            description
              "neighbor is down, and the session is waiting for
              the underlying transport session to be established";
          }
          enum ACTIVE {
            description
              "neighbor is down, and the local system is awaiting
              a conncetion from the remote peer";
          }
          enum OPENSENT {
            description
              "neighbor is in the process of being established.
              The local system has sent an OPEN message";
          }
          enum OPENCONFIRM {
            description
              "neighbor is in the process of being established.
              The local system is awaiting a NOTIFICATION or
              KEEPALIVE message";
          }
          enum ESTABLISHED {
            description
              "neighbor is up - the BGP session with the peer is
              established";
          }
        }
      description
        "Operational state of the BGP peer";
    }

    leaf last-established {
      type oc-types:timeticks64;
      description
        "This timestamp indicates the time that the
        BGP session last transitioned in or out of the Established
        state.  The value is the timestamp in seconds relative to
        the Unix Epoch (Jan 1, 1970 00:00:00 UTC).

        The BGP session uptime can be computed by clients as the
        difference between this value and the current time in UTC
        (assuming the session is in the ESTABLISHED state, per the
        session-state leaf).";
    }

    leaf established-transitions {
      type oc-yang:counter64;
      description
        "Number of transitions to the Established state for
        the neighbor session.  This value is analogous to the
        bgpPeerFsmEstablishedTransitions object from the standard
        BGP-4 MIB";
      reference
        "RFC 4273 - Definitions of Managed Objects for BGP-4";
    }

    leaf-list supported-capabilities {
      type identityref {
        base oc-bgp-types:BGP_CAPABILITY;
      }
      description
        "BGP capabilities negotiated as supported with the peer";
    }

    container messages {
      description
        "Counters for BGP messages sent and received from the
        neighbor";
      container sent {
        description
          "Counters relating to BGP messages sent to the neighbor";
        uses bgp-neighbor-counters-message-types-state;
        }

      container received {
        description
          "Counters for BGP messages received from the neighbor";
        uses bgp-neighbor-counters-message-types-state;
      }
    }

    container queues {
      description
        "Counters related to queued messages associated with the
        BGP neighbor";
      uses bgp-neighbor-queue-counters-state;
    }

    leaf dynamically-configured {
      type boolean;
      default false;
      description
        "When this leaf is set to true, the peer was configured dynamically
        due to an inbound connection request from a specified source prefix
        within a dynamic-neighbor-prefix.";
    }
  }

  grouping bgp-neighbor-counters-message-types-state {
    description
      "Grouping of BGP message types, included for re-use
      across counters";

    leaf UPDATE {
      type uint64;
      description
        "Number of BGP UPDATE messages announcing, withdrawing
        or modifying paths exchanged.";
    }

    leaf NOTIFICATION {
      type uint64;
      description
        "Number of BGP NOTIFICATION messages indicating an
        error condition has occurred exchanged.";
    }

    leaf last-notification-time {
      type oc-types:timeticks64;
      description
        "This timestamp indicates the time that a NOTIFICATION
        message was sent or received on the peering session
        (based on whether this leaf is associated with
        sent or received messages).

        The value is the timestamp in seconds relative to
        the Unix Epoch (Jan 1, 1970 00:00:00 UTC).";
    }

    leaf last-notification-error-code {
      type identityref {
        base oc-bgp-types:BGP_ERROR_CODE;
      }
      description
        "Indicates the last BGP error sent or received on the peering
        session (based on whether this leaf is associated with
        sent or received messages).";
    }

    leaf last-notification-error-subcode {
      type identityref {
        base oc-bgp-types:BGP_ERROR_SUBCODE;
      }
      description
        "Indicates the last BGP error subcode sent or received on
        the peering session (based on whether this leaf is associated
        with sent or received messages)";
    }
  }

  grouping bgp-neighbor-queue-counters-state {
    description
      "Counters relating to the message queues associated with the
      BGP peer";

    leaf input {
      type uint32;
      description
        "The number of messages received from the peer currently
        queued";
    }

    leaf output {
      type uint32;
      description
        "The number of messages queued to be sent to the peer";
    }
  }

  grouping bgp-neighbor-transport-state {
    description
      "Operational state parameters relating to the transport session
      used for the BGP session";

    leaf local-port {
      type oc-inet:port-number;
      description
        "Local TCP port being used for the TCP session supporting
        the BGP session";
    }

    leaf remote-address {
      type oc-inet:ip-address;
      description
        "Remote address to which the BGP session has been
        established";
    }

    leaf remote-port {
      type oc-inet:port-number;
      description
        "Remote port being used by the peer for the TCP session
        supporting the BGP session";
    }
  }

  grouping bgp-neighbor-error-handling-state {
    description
      "Operational state parameters relating to enhanced error
      error handling for BGP";

    leaf erroneous-update-messages {
      type uint32;
      description
        "The number of BGP UPDATE messages for which the
        treat-as-withdraw mechanism has been applied based
        on erroneous message contents";
    }
  }

  grouping bgp-neighbor-timers-state {
    description
      "Operational state parameters relating to BGP timers associated
      with the BGP session";

    leaf negotiated-hold-time {
      type decimal64 {
        fraction-digits 2;
      }
      description
        "The negotiated hold-time for the BGP session";
    }
  }

  grouping bgp-neighbor-afi-safi-graceful-restart-state {
    description
      "Operational state variables relating to the graceful-restart
      mechanism on a per-AFI-SAFI basis";

    leaf received {
      type boolean;
      description
        "This leaf indicates whether the neighbor advertised the
        ability to support graceful-restart for this AFI-SAFI";
    }

    leaf advertised {
      type boolean;
      description
        "This leaf indicates whether the ability to support
        graceful-restart has been advertised to the peer";
    }
  }

  grouping bgp-neighbor-graceful-restart-state {
    description
      "Operational state information relevant to graceful restart
      for BGP";

    leaf peer-restart-time {
      type uint16 {
        range 0..4096;
      }
      description
        "The period of time (advertised by the peer) that
        the peer expects a restart of a BGP session to
        take";
    }

    leaf peer-restarting {
      type boolean;
      description
        "This flag indicates whether the remote neighbor is currently
        in the process of restarting, and hence received routes are
        currently stale";
    }

    leaf local-restarting {
      type boolean;
      description
        "This flag indicates whether the local neighbor is currently
        restarting. The flag is unset after all NLRI have been
        advertised to the peer, and the End-of-RIB (EOR) marker has
        been unset";
    }

    leaf mode {
      type enumeration {
        enum HELPER_ONLY {
          description
            "The local router is operating in helper-only mode, and
            hence will not retain forwarding state during a local
            session restart, but will do so during a restart of the
            remote peer";
        }
        enum BILATERAL {
          description
            "The local router is operating in both helper mode, and
            hence retains forwarding state during a remote restart,
            and also maintains forwarding state during local session
            restart";
        }
        enum REMOTE_HELPER {
          description
            "The local system is able to retain routes during restart
            but the remote system is only able to act as a helper";
        }
      }
      description
        "Ths leaf indicates the mode of operation of BGP graceful
        restart with the peer";
    }
  }

  grouping bgp-neighbor-afi-safi-state {
    description
      "Operational state parameters relating to an individual AFI,
      SAFI for a neighbor";

    leaf active {
      type boolean;
      description
        "This value indicates whether a particular AFI-SAFI has
        been succesfully negotiated with the peer. An AFI-SAFI
        may be enabled in the current running configuration, but a
        session restart may be required in order to negotiate the new
        capability.";
    }

    container prefixes {
      description "Prefix counters for the BGP session";
      leaf received {
        type uint32;
        description
          "The number of prefixes received from the neighbor";
      }

      leaf sent {
        type uint32;
        description
          "The number of prefixes advertised to the neighbor";
      }

      leaf installed {
        type uint32;
        description
          "The number of advertised prefixes installed in the
          Loc-RIB";
      }
    }
  }

  grouping bgp-neighbor-afi-safi-list {
    description
      "List of address-families associated with the BGP neighbor";

    list afi-safi {
      key "afi-safi-name";

      description
        "AFI,SAFI configuration available for the
        neighbour or group";


      leaf afi-safi-name {
        type leafref {
          path "../config/afi-safi-name";
        }
        description
          "Reference to the AFI-SAFI name used as a key
          for the AFI-SAFI list";
      }

      container config {
        description
          "Configuration parameters for the AFI-SAFI";
        uses bgp-common-mp-afi-safi-config;
      }
      container state {
        config false;
        description
          "State information relating to the AFI-SAFI";
        uses bgp-common-mp-afi-safi-config;
        uses bgp-neighbor-afi-safi-state;
      }


      container graceful-restart {
        description
          "Parameters relating to BGP graceful-restart";
        container config {
          description
            "Configuration options for BGP graceful-restart";
          uses bgp-common-mp-afi-safi-graceful-restart-config;
        }
        container state {
          config false;
          description
            "State information for BGP graceful-restart";
          uses bgp-common-mp-afi-safi-graceful-restart-config;
          uses bgp-neighbor-afi-safi-graceful-restart-state;
        }
      }

      uses bgp-common-structure-neighbor-group-add-paths;
      uses bgp-common-mp-all-afi-safi-list-contents;
      uses bgp-neighbor-use-multiple-paths;
    }
  }

  grouping bgp-neighbor-base {
    description
      "Parameters related to a BGP neighbor";

    container config {
      description
        "Configuration parameters relating to the BGP neighbor or
        group";
      uses bgp-neighbor-config;
      uses bgp-common-neighbor-group-config;
    }
    container state {
      config false;
      description
        "State information relating to the BGP neighbor";
      uses bgp-neighbor-config;
      uses bgp-common-neighbor-group-config;
      uses bgp-neighbor-state;
    }

    container timers {
      description
        "Timers related to a BGP neighbor";
      container config {
        description
          "Configuration parameters relating to timers used for the
          BGP neighbor";
        uses bgp-common-neighbor-group-timers-config;
      }
      container state {
        config false;
        description
          "State information relating to the timers used for the BGP
          neighbor";
        uses bgp-common-neighbor-group-timers-config;
        uses bgp-neighbor-timers-state;
      }
    }

    container transport {
      description
        "Transport session parameters for the BGP neighbor";
      container config {
        description
          "Configuration parameters relating to the transport
          session(s) used for the BGP neighbor";
        uses bgp-common-neighbor-group-transport-config;
      }
      container state {
        config false;
        description
          "State information relating to the transport session(s)
          used for the BGP neighbor";
        uses bgp-common-neighbor-group-transport-config;
        uses bgp-neighbor-transport-state;
      }
    }

    container error-handling {
      description
        "Error handling parameters used for the BGP neighbor or
        group";
      container config {
        description
          "Configuration parameters enabling or modifying the
          behavior or enhanced error handling mechanisms for the BGP
          neighbor";
        uses bgp-common-neighbor-group-error-handling-config;
      }
      container state {
        config false;
        description
          "State information relating to enhanced error handling
          mechanisms for the BGP neighbor";
        uses bgp-common-neighbor-group-error-handling-config;
        uses bgp-neighbor-error-handling-state;
      }
    }

    container graceful-restart {
      description
        "Parameters relating the graceful restart mechanism for BGP";
      container config {
        description
          "Configuration parameters relating to graceful-restart";
        uses bgp-common-graceful-restart-config;
      }
      container state {
        config false;
        description
          "State information associated with graceful-restart";
        uses bgp-common-graceful-restart-config;
        uses bgp-neighbor-graceful-restart-state;
      }
    }

    uses bgp-common-structure-neighbor-group-logging-options;
    uses bgp-common-structure-neighbor-group-ebgp-multihop;
    uses bgp-common-structure-neighbor-group-route-reflector;
    uses bgp-common-structure-neighbor-group-as-path-options;
    uses bgp-neighbor-use-multiple-paths;
    uses oc-rpol:apply-policy-group;

    container afi-safis {
      description
        "Per-address-family configuration parameters associated with
        the neighbor";
      uses bgp-neighbor-afi-safi-list;
    }
  }

  grouping bgp-neighbor-list {
    description
      "The list of BGP neighbors";

    list neighbor {
      key "neighbor-address";
      description
        "List of BGP neighbors configured on the local system,
        uniquely identified by peer IPv[46] address";

      leaf neighbor-address {
        type leafref {
          path "../config/neighbor-address";
        }
        description
          "Reference to the address of the BGP neighbor used as
          a key in the neighbor list";
      }

      uses bgp-neighbor-base;
    }

  }


}
