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

      container monitoring {
        leaf edge-cluster-prometheus-url {
          type inet:uri;
          description
            "URL of edge cluster prometheus";
        }
        leaf edge-monitoring-prometheus-url {
          type inet:uri;
          description
            "URL of monitoring prometheus";
        }        
        list edge-device {
          key "name";
          leaf name {
            type string {
              length 1..80;
            }
            description
              "Name of edge monitoring device";
          }
          leaf display-name {
            type string {
                length 1..80;
            }
            description "display name to use in GUI or CLI";            
          }
          leaf description {
            type at:description;
            description "description of this site";
          }
          description
            "List of edge monitoring devices";
        }
      }

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