// 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 aether-identifier {
    type string {
        length 1..63;
        pattern '[a-z]([a-z0-9-]?[a-z0-9])*';
    }
    description "Identifier for objects in the Aether modeling";
  }

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

  typedef imei {
      type string {
          length 14..16;
          pattern '[0-9]{14,16}';
      }
    description "International Mobile Equipment Identity";
  }

  typedef iccid {
      type string {
          length 19..22;
          pattern '[0-9]{18,21}[0-9A-F]';
      }      
    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";
    }
  }

  typedef ipv4-subnet {
    type string {
      pattern
        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
      + '(/([0-9]|[1-2][0-9]|3[0-2]))';      
    }
    description "IPv4 network in CIDR notation";
  }

  typedef host-or-network {
    type union {
      type inet:host;
      type ipv4-subnet;
    }
    description "hostname, ip-address, or network";
  } 
}
 