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

module site {
  namespace "http://opennetworking.org/aether/site";
  prefix st;

  import aether-types{ prefix at; }
  import enterprise{ prefix ent; }
  import ietf-yang-types{ prefix yg; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description
    "An Aether site is a location where resources are deployed.";

  revision "2021-06-02" {
    description "An Aether Site.";
    reference "RFC 6087";
  }

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

  container site {
    description "The top level container";

    list site {
      key "id";
      description
        "List of site";

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

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

      leaf enterprise {
        type leafref {
          path "/ent:enterprise/ent:enterprise/ent:id";
        }
        mandatory true;
        description
          "Link to enterprise that owns this site";
      }

      container imsi-definition {
        leaf mcc {
          type at:mcc;
	  mandatory true;
          description "mobile country code";
        }
        leaf mnc {
          type at:mnc;
	  mandatory true;
          description "mobile network code";
        }
        leaf enterprise {
          type at:ent;
	  mandatory true;
          description "enterprise-specific identifier";
        }
        leaf format {
          type string {
            length 15;
          }
          mandatory true;
          description "IMSI format specifier, describes how fields are packed into an IMSI. Must be exactly 15 characters long. For example, CCCNNNEEESSSSSS.";
          // Format specifiers:
          //   C = MCC
          //   N = MNC
          //   E = Enterprise
          //   0 = Forced Zero
          //   S = Subscriber ID
          // default is
          //   3 digit MCC
          //   3 digit MNC
          //   3 digit enterprise ID
          //   5 digit subscriber ID
        }
        description "The container for imsi-definition";
      }

      leaf description {
        type at:description;
        description "description of this site";
      }
    }
  }
}
