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

submodule onf-ip-domain {
  belongs-to onf-enterprise { prefix ent; }

  import ietf-inet-types { prefix inet; }
  import ietf-yang-types{ prefix yg; }
  import onf-aether-types { prefix at; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether IP-Domain. This is a list of available subnets
     that may be assigned to UEs, as well as DNS servers and other
     metadata";

  revision "2022-01-14" {
    description "Refactored as submodule";
    reference "RFC 6020";
  }

  revision "2021-06-02" {
    description "An Aether IP and Domain Specification";
    reference "RFC 6087";
  }

  typedef ip-domain-id {
        type yg:yang-identifier {
            length 1..32;
        }
    description "The typedef for ip-domain-id";
  }

  grouping ip-domain {
    description "The ip-domain grouping";

    list ip-domain {
      key "ip-id";
      description
        "List of ip domains";

      leaf ip-id {
        type ip-domain-id;
        description "ID for this ip domain.";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      leaf dnn {
        type at:dnn;
        mandatory true;
        description "DNN/APN";
      }

      leaf dns-primary {
        type inet:ip-address;
        description "primary dns server name";
      }

      leaf dns-secondary {
        type inet:ip-address;
        description "secondary dns server name";
      }

      // Note: Cannot use a subnet as a list key. Dropped support from a
      // list of subnets to a single subnet. Revisit in the future.
      leaf subnet {
        type inet:ipv4-prefix;
        mandatory true;
        description "subnet to allocate ip addresses from";
      }

      leaf admin-status {
        type at:admin-status;
        description "administrative status";
      }

      leaf mtu {
        type at:mtu;
        description "maximum transmission unit";
      }

      leaf description {
        type at:description;
        description "description of this ip domain";
      }
    }
  }
}
