module cord-service-vsg {
  namespace "urn:onlab:cord:service:volt";
  prefix volt;
  yang-version 1.1;

  import ietf-yang-types { prefix yang; }
  import xos-core { prefix xos; }
  import cord-service-volt { prefix volt; }

  organization
   "Open Networking Lab (CORD) / Corenova Technologies";

  contact
    "Larry Peterson <llp@onlab.us>
     Peter K. Lee <peter@corenova.com>";

  revision 2016-09-09 {
    description "Initial revision.";
  }

  identity vsg-service { base xos:service; }

  typedef subscriber-flow {
    type leafref {
      path "/vsg:service/vsg:provider/vsg:port/vsg:id";
    }
  }

  grouping provider {
    description
      "This grouping represents a VSG agent/provider which manages multiple
       VSG gateways. The VSG agent provides agregate abstraction of
       the entire NFaaS as a single switch to the controller. Each
       port entry of the agent represents each VSG endpoint as a
       separate openflow port.";

    list gateway {
      description
        "Each entry represents a VSG instance managed by the agent.";

      leaf id { type yang:uuid; }
      container services {
        description
          "Contains various services provided by the gateway.";
        container cdn {
          if-feature cdn;
        }
        container firewall {
          if-feature firewall;
          leaf-list rules { type string; }
        }
        container url-filter {
          if-feature url-filter;
          leaf level {
            type enumeration {
              enum "PG";
              // others...
            }
          }
          leaf-list rules { type string; }
        }
        container uverse {
          if-feature uverse;
        }
      }
    }
    list port {
      description
        "Each entry represents a VSG endpoint connected across VSG gateways.";
      key id;
      leaf id {
        description "OpenFlow Port ID";
        type yang:uuid;
        mandatory true;
      }
      leaf link {
        type leafref {
          path '../../gateway/id';
        }
        mandatory true;
      }
    }
  }
  grouping subscriber {
    description
      "This grouping represents a VSG service subscriber along with
       reference to fabric flows used by the subscriber.";

    leaf status {
      type enumeration {
        enum "enabled" {
          description "Enabled";
          value 1;
        }
        enum "suspended" {
          description "Suspended";
        }
        enum "delinquent" {
          description "Delinquent";
        }
        enum "violation" {
          description "Copyright Violation";
        }
      }
      default enabled;
    }
    leaf demo { type boolean; default false; }
    leaf uplink-speed   { type volt:bandwidth; }
    leaf downlink-speed { type volt:bandwidth; }
    
    list tag {
      description
        "Each entry represents a unique openflow port ID that the subscriber
         connects to the VSG service from the fabric.";
      
      key flow;
      leaf flow {
        type union {
          type volt:subscriber-flow;
          type vsg:subscriber-flow {
            description "can be an output flow from the VSG service.";
          }
          type yang:uuid {
            description "supports a generic openflow port ID";
          }
        }
      }
    }
    leaf-list flows {
      description
        "Each entry represents a unique openflow port ID that the subscriber
         uses to connect into the fabric from the VSG service.";
      config false;
      type subscriber-flow;
    }
  }
  
  /*
   * Configuration data
   */
  container service {
    uses xos:service {
      refine kind { default vsg-service; }
      augment "provider"   { uses vsg:provider; }
      augment "subscriber" { uses vsg:subscriber; }
    }
  }
}
