// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0

module qos-profile {
  namespace "http://opennetworking.org/aether/qos-profile";
  prefix pro;

  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 "2020-10-22" {
    description "An Aether qos Profile";
    reference "RFC 6087";
  }

  // TODO: Think more on whether this should be a UUID or
  // simply a unique name. If it's a UUID, could fix the
  // string length.
  typedef qos-profile-id {
        type string {
            length 1..32;
        }
    description "The typedef for qos-profile-id";
  }

  container qos-profile {
    description "The top level container";

    list qos-profile {
      key "id";
      description
        "List of qos profiles";

      leaf id {
        type qos-profile-id;
        description "ID for this qos profile.";
      }

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

      container apn-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 apn-ambr";
      }

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

      container arp {
        leaf priority {
          type uint32 {
            range 0..15;
          }
          default 0;
          description
            "Priority";
        }
        leaf preemption-capability {
          type boolean;
          default true;
          description
            "True if a bearer with lower priority should be dropped";
        }
        leaf preemption-vulnerability {
          type boolean;
          default true;
          description
            "This bearer may be dropped for a bearer with higher priority";
        }
        description "Evolved-ARP";
      }

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