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