// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module aether-subscriber {
  namespace "http://opennetworking.org/aether/subscriber";
  prefix sub;

  import apn-profile{ prefix apn; }
  import qos-profile{ prefix qos; }
  import up-profile{ prefix up; }
  import access-profile{ prefix ap; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "To generate JSON from this use command
    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
    Copied from YangUIComponents project";

  revision "2020-08-18" {
    description "An Aether Subscriber";
    reference "RFC 6087";
  }

  // User Equipment ID (UEID), Basically an IMSI range
  // examples:
  //    123456789???????  ... wildcard at the end
  //    123456???0123455  ... wildcard in the middle
  //    1234567890000000-123456789000005 ... range
  typedef ueid {
      type string {
          length 1..31;
      }
    description "The typedef for ueid";
  }

  typedef mcc {
      type uint32 {
        range 0..999;
      }
    description "The typedef for mcc";
  }

  typedef mnc {
      type uint32 {
        range 0..999;
      }
    description "The typedef for mnc";
  }

  typedef tac {
      type uint32 {
        range 0..99999999;
      }
    description "The typedef for tac";
  }

  container subscriber {
    description "The top level container";

    list ue {
      key "ueid";
      description
        "List of subscriber devices";

      leaf ueid {
	type ueid;
        description "identifier for this subscriber, may or may not be an IMSI";
      }

      container serving-plmn {
        leaf mcc {
          type mcc;
          description "mobile country code";
        }
        leaf mnc {
          type mnc;
          description "mobile network code";
        }
        leaf tac {
          type tac;
          description "type allocation code";
        }
	description "The contaiber for serving-plmn";
      }

      leaf requested-apn {
        type string {
            length 1..31;
        }
        description "requested access point name";
      }

      leaf priority {
        type uint32 {
          range 0..1000;
        }
        default 0;
        description
          "Priority for this subscriber range";
      }

      leaf enabled {
        type boolean;
        default false;
        description
          "Enable or disable this ue";
      }

      container profiles {
        leaf apn-profile {
          type leafref {
            path "/apn:apn-profile/apn:apn-profile/apn:id";
          }
          description
            "Link to apn profile";
        }
        leaf up-profile {
          type leafref {
            path "/up:up-profile/up:up-profile/up:id";
          }
          description
            "Link to user plane profile";
        }
        leaf qos-profile {
          type leafref {
            path "/qos:qos-profile/qos:qos-profile/qos:id";
          }
          description
            "Link to qos profile";
        }
        list access-profile {
          key "access-profile";
          leaf access-profile {
            type leafref {
              path "/ap:access-profile/ap:access-profile/ap:id";
            }
//            type ap:access-profile-id;
            description
                "Link to access profile";
          }
          leaf allowed {
            type boolean;
            default true;
            description
              "Allow or disallow this ue to use this access profile";
          }
          description "The list for access-profile";
        }
        description "The container for profiles";
      }
    }
  }
}
