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