// 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";
      }
    }
  }
}
