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

module security-profile {
  namespace "http://opennetworking.org/aether/security-profile";
  prefix sec;

  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 "2021-05-10" {
    description "An Aether Security Profile. Contains keys and other security items associated with devices. Configured by the operator.";
    reference "RFC 6087";
  }

  typedef security-profile-id {
        type string {
            length 1..32;
        }
    description "The typedef for security-profile-id";
  }

  container security-profile {
    description "The top level container";

    list security-profile {
      key "id";
      description
        "List of security profiles";

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

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

      leaf imsi-range-from {
        type uint64;
        description "Starting IMSI in range to apply this security profile to";
      }

      leaf imsi-range-to {
        type uint64;
        description "Ending IMSI in range to apply this security profile to";
      }

      leaf key {
        type string {
          length 1..32;
        }
        description "Secret key for USIM";
      }

      leaf opc {
        type string {
          length 1..32;
        }
        description "Secret key for Operator";
      }

      leaf sqn {
        type uint32;
        description "sequence number";
      }

      leaf description {
        type string {
          length 1..100;
        }
        description "description of this security profile";
      }
    }
  }
}
