// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module service-policy {
  namespace "http://opennetworking.org/aether/service-policy";
  prefix serv;

  import service-rule { prefix sr; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "To generate JSON from this use command
    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
    Copied from YangUIComponents project";

  revision "2021-03-04" {
    description "An Aether Service";
    reference "RFC 6087";
  }

  typedef service-policy-id {
        type string {
            length 1..32;
        }
    description "The typedef for service-policy-id";
  }

  container service-policy {
    description "The top level container";

    list service-policy {
      key "id";
      description
        "List of services";

      leaf id {
        type service-policy-id;
        description "ID for this service.";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf qci {
        type uint32 {
          range 0..85;
        }
        default 9;
        description
          "QoS Class Identifier";
      }

      leaf arp {
        type uint32 {
          range 0..15;
        }
        default 9;
        description
          "Evolved-ARP";
      }

      container ambr {
        leaf uplink {
          type uint32 {
            range 0..4294967295;
          }
          units bps;
          default 0;
          description
            "Upstream aggregate maximum bit rate";
        }
        leaf downlink {
          type uint32 {
            range 0..4294967295;
          }
	  units bps;
          default 0;
          description
            "Downstream aggregate maximum bit rate";
        }
        description "The container for ambr";
      }

      list rules {
        key "rule";
        leaf rule {
          type leafref {
            path "/sr:service-rule/sr:service-rule/sr:id";
          }
          description
              "Link to service rule";
        }
        leaf enabled {
          type boolean;
          default true;
          description
            "Enable or disable this service to use this rule";
        }
        description "The list for rules";
      }

      leaf description {
        type string {
          length 1..100;
        }
        description "description of this profile";
      }      
    }
  }
}
