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