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

module onf-aether-types {
  namespace "http://opennetworking.org/aether/aether-types";
  prefix at;

  import ietf-inet-types { prefix inet; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "A set of base types for aether modeling.";

  revision "2021-09-10" {
    description "Aether Base Types";
    reference "RFC 6087";
  }

  typedef imsi {
      type uint64 {
      }
    description "International Mobile Subscriber Identity";
  }

  typedef imei {
      type uint64 {
      }
    description "International Mobile Equipment Identity";
  }

  typedef iccid {
      type uint64 {
      }
    description "Integrated Circuit Card ID";
  }

  typedef bitrate {
      type uint64 {
      }
    description "The typedef for bitrate";
  }

  typedef burst {
      type uint32 {
      }
      default 625000;
    description "The typedef for burst";
  }

  typedef mcc {
      type string {
        pattern '[0-9]{3}';
      }
    description "The typedef for mcc";
  }

  typedef mnc {
      type string {
        pattern '[0-9]{2,3}';
      }
    description "The typedef for mnc";
  }

  typedef tac {
      type string {
        length 4..8;
        pattern '[0-9A-F\.]*';
      }
    description "The typedef for tac";
  }

  typedef ent {
      type uint32 {
        range 0..999;
      }
    description "The typedef for ent";
  }

  typedef dnn {
      type string {
        length 1..32;
      }
    description "The typedef for dnn";
  }

  typedef sst {
      type uint8 {
        range 1..255;
      }
    description "The typedef for sst";
  }

  typedef sd {
      type uint32 {
        range 0..16777215;
      }
    description "The typedef for sd";
  }

  typedef qci {
      type uint8 {
        range 1..32;
      }
    description "The typedef for qci";
  }

  typedef arp {
      type uint8 {
        range 1..15;
      }
    description "The typedef for arp";
  }

  typedef pelr {
      type int8 {
        range 0..10;
      }
    description "The typedef for pelr";
  }

  typedef pdb {
      type uint16 {
        range 0..1000;
      }
    description "The typedef for pdb";
  }

  typedef priority {
    type uint8 {
      // priorities 201-255 are reserved for system use
      range 0..200;
    }
    description "The typedef for priority";
  }

  // "TCP" or "UDP"
  typedef protocol {
      type string {
        length 3;
        pattern "TCP|UDP";
      }
      default "TCP";
    description "The typedef for protocol";
  }

  // "ENABLE" | "MAINTENTANCE" | "DISABLE"
  typedef admin-status {
      type string {
        length 0..16;
        pattern "ENABLE|MAINTENANCE|DISABLE";
      }
      default "ENABLE";
    description "The typedef for admin-status";
  }

  typedef behavior {
      type string {
        length 0..20;
        pattern "DENY-ALL|ALLOW-ALL|ALLOW-PUBLIC";
      }
    description "The typedef for behavior";
  }

  typedef mtu {
      type inet:port-number;
      default 1492;
    description "The typedef for mtu";
  }

  typedef description {
    type string {
      length 1..1024;
    }
    description "The typedef for description";
  }

  grouping desc-display-name {
    description "reusable leafs for description and display-name";
    leaf display-name {
      type string {
          length 1..80;
      }
      description "display name to use in GUI or CLI";
    }

    leaf description {
      type description;
      description "long description field";
    }
  }
}
