module openconfig-openflow {

  yang-version "1";

  namespace "http://openconfig.net/yang/openflow";

  prefix "openflow";

  import openconfig-extensions { prefix oc-ext; }
  import openconfig-inet-types { prefix oc-inet; }
  import openconfig-interfaces { prefix oc-if; }
  import openconfig-openflow-types { prefix of-types; }
  import openconfig-system { prefix oc-sys; }

  organization "OpenConfig working group";

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

  description
    "This module defines configuration and operational state data for
    Openflow.";

  oc-ext:openconfig-version "0.1.0";

  revision "2017-06-01" {
    description
      "Initial revision";
    reference "0.1.0";
  }

  grouping openflow-controller-config {
    description
      "Openflow controller config";

    leaf name {
      type string;
      description "Name of this Openflow controller. All connections
      for the same controller need to have the same name.";
    }
  }

  grouping openflow-controller-state {
    description
      "Openflow controller state";
  }

  grouping openflow-controllers-top {
    description
      "Top-level for the Openflow controllers model";

    container controllers {
      description
        "Container for the Openflow controllers model";

      list controller {
        key "name";

        description
          "The Openflow Switch connects to all Openflow controllers
          configured";

        leaf name {
          type leafref {
            path "../config/name";
          }
          description
            "The name identifies the controller.";
        }

        container config {
          description
            "Container for the Openflow controller config.";

          uses openflow-controller-config;
        }

        container state {
          config false;

          description
            "Container for the Openflow controller state.";

          uses openflow-controller-config;
          uses openflow-controller-state;
        }

        uses openflow-connections-top;
      }
    }
  }


  grouping openflow-connections-config {
    description
      "Configuration data for OpenFlow controller connections";

    leaf aux-id {
      type of-types:auxiliary-id;
      description
        "Controller auxiliary ID. Must be 0 for the main controller.
        One controller may have multiple auxiliary connections as
        specified by the Openflow protocol. Besides configuring the
        main controller, it is also possible to configure auxiliary
        connections. The main controller must have the aux-id
        set to zero. All others must have an aux-id different
        from 0.";
    }

    leaf priority {
      type uint8;
      description
        "Optional value for servicing auxiliary connections with
        different priorities.";
    }

    leaf address {
      type oc-inet:ip-address;
      description
        "The IP address of the controller.";
    }

    leaf port {
      type oc-inet:port-number;
      default 6653;
      description
        "Controller port to use.";
    }

    leaf transport {
      type of-types:transport;
      default TCP;
      description
        "Controller transport protocol used.";
    }

    leaf source-interface {
      type oc-if:base-interface-ref;
      description
        "Optionally specify the source interface for the
        controller connection.";
    }
  }

  grouping openflow-connections-state {
    description
      "Operational state data for OpenFlow controller connections";

    leaf connected {
      type boolean;
      description
        "When set to true, indicates the connection between the
        switch and controller is established.";
    }
  }

  grouping openflow-connections-top {
    description
      "Top-level grouping for OpenFlow controller connections";

    container connections {
      description
        "Enclosing container for list of controller connections";

      list connection {
        key "aux-id";
        description
          "List of connections to the OpenFlow controller.
          The Openflow switch always connects to configured Openflow
          controllers. Each controller can have more than one
          connection, called auxiliary Openflow connections.";

        leaf aux-id {
          type leafref {
            path "../config/aux-id";
          }
          description
            "Reference to auxiliary id list key";
        }

        container config {
          description
            "Configuration data for OpenFlow controller connections";

          uses openflow-connections-config;
        }

        container state {

          config false;

          description
            "Operational state data for OpenFlow controller
            connections";

          uses openflow-connections-config;
          uses openflow-connections-state;
        }
      }
    }
  }


  grouping openflow-agent-config {
    description
      "Openflow agent config";
 
    leaf datapath-id {
      type of-types:datapath-id;
      description
        "Datapath unique ID. The lower 48-bits are for
        a MAC address, while the upper 16-bits are
        implementer-defined.";
    }

    leaf failure-mode {
      type of-types:failure-mode;
      description
        "Failure mode for Openflow.";
    }

    leaf backoff-interval {
      type uint32;
      units seconds;
      description
        "Openflow agent connection backoff interval.";
    }

    leaf max-backoff {
      type uint32;
      units seconds;
      description
        "Openflow agent max backoff time.";
    }

    leaf inactivity-probe {
      type uint32;
      units seconds;
      description
        "Openflow agent inactivity probe period.";
    }
  }

  grouping openflow-agent-state {
    description
      "Openflow agent state";
  }

  grouping openflow-agent-top {
    description
      "Top-level for the Openflow agent model";

    container agent {
      description
        "Container for the Openflow agent model.";

      container config {
        description
          "Container for the Openflow agent config.";

        uses openflow-agent-config;
      }

      container state {
        config false;

        description
          "Container for the Openflow agent state.";

        uses openflow-agent-config;
        uses openflow-agent-state;
      }
    }
  }


  grouping openflow-top {
    description
      "Top-level for the Openflow model";

    container openflow {
      description
        "Container for Openflow model";


      uses openflow-controllers-top;
      uses openflow-agent-top;
    }
  }


  augment "/oc-sys:system" {
    description
      "Adding OpenConfig data to the system model";

    uses openflow-top;
  }

}
