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

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

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

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

  revision "2021-09-10" {
    description "An Aether Site.";
    reference "RFC 6087";
  }

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

  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";
      }

      list small-cell {
        key "name";
        leaf name {
          type yg:yang-identifier;
          description
            "Name of small cell";
        }        
        leaf address {
          type inet:host;
          description
            "Address of small cell";
        }
        leaf tac {
          type at:tac;
          mandatory true;
          description
              "Type Allocation Code";
        }        
        leaf enable {
          type boolean;
          default true;
          description
            "Enable this small cell";
        }
        description
          "List of small cell addresses";
      }        

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

      container imsi-definition {
        leaf mcc {
          type at:mcc;
          description "mobile country code";
          mandatory true;
        }
        leaf mnc {
          type at:mnc;
          description "mobile network code";
          mandatory true;
        }
        leaf enterprise {
          type at:ent;
          description "enterprise-specific identifier";
          mandatory true;
        }
        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
        }
      }

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