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

  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;
          }
          default 0;
          units bps;
          description
            "Upstream aggregate maximum bit rate";
        }
        leaf downlink {
          type uint32 {
            range 0..4294967295;
          }
          default 0;
          units bps;
          description
            "Downstream aggregate maximum bit rate";
        }        
      }

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