// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.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";
      }
    }
  }
}
