// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module 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-06-02" {
    description "Aether Base Types";
    reference "RFC 6087";
  }

  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 pelr {
      type int8 {
        range 0..10;
      }
    description "The typedef for pelr";
  }

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

  // "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 mtu {
      type inet:port-number;
      default 1492;
    description "The typedef for mtu";
  }

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