etsi-qkd-sdn-node.yang 25.2 KB
Newer Older
britoj's avatar
britoj committed
/* Copyright 2022 ETSI
britoj's avatar
britoj committed
Licensed under the BSD-3 Clause (https://forge.etsi.org/legal-matters) */

britoj's avatar
britoj committed
module etsi-qkd-sdn-node {

  yang-version "1";

  namespace "urn:etsi:qkd:yang:etsi-qkd-node";

  prefix "etsi-qkdn";
  
  import ietf-yang-types { prefix "yang"; }
  import ietf-inet-types { prefix "inet"; }
  import etsi-qkd-node-types { prefix "etsi-qkdn-types"; }

  // meta
  organization "ETSI ISG QKD";

  contact
    "https://www.etsi.org/committee/qkd
    vicente@fi.upm.es";

  description
    "This module contains the groupings and containers composing 
    the software-defined QKD node information models
britoj's avatar
britoj committed
    specified in ETSI GS QKD 015 V2.1.1";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  revision "2022-01-30" {
britoj's avatar
britoj committed
    description
britoj's avatar
britoj committed
      "Refinement of the YANG model to make it compatible with the ETSI ISG QKD 018. Minor fixes.";
britoj's avatar
britoj committed
    reference
      "ETSI GS QKD 015 V2.1.1 (2022-01)";
britoj's avatar
britoj committed
  }

britoj's avatar
britoj committed
  revision "2020-09-30" {
britoj's avatar
britoj committed
    description
britoj's avatar
britoj committed
      "First definition based on initial requirement analysis.";
britoj's avatar
britoj committed
    reference
      "ETSI GS QKD 015 V1.1.1 (2021-03)";
britoj's avatar
britoj committed
  }
  
  grouping qkdn_id {
britoj's avatar
britoj committed
    description "Grouping of qkdn_id leaf.";
    
britoj's avatar
britoj committed
    leaf qkdn_id {
britoj's avatar
britoj committed
      type yang:uuid;
      mandatory true;
      description
        "This value reflects the unique ID of the SD-QKD node.";
    }
britoj's avatar
britoj committed
  }
  
  grouping qkdn_version {
britoj's avatar
britoj committed
    description "Grouping of qkdn_version leaf.";
    
britoj's avatar
britoj committed
    leaf qkdn_version {
      type string;
      description "Hardware or software version of the SD-QKD node.";
    }
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  grouping qkdn_location_id {
britoj's avatar
britoj committed
    description "Grouping of qkdn_location_id leaf.";
    
britoj's avatar
britoj committed
    leaf qkdn_location_id {
britoj's avatar
britoj committed
      type string;
      default "";
      description
        "This value enables the location of the secure
        area that contains the SD-QKD node to be specified.";
    }
britoj's avatar
britoj committed
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  grouping qkdn_status {
britoj's avatar
britoj committed
    description "Grouping of qkdn_status leaf.";
    
britoj's avatar
britoj committed
    leaf qkdn_status {
      type etsi-qkdn-types:qkdn-status-types;
britoj's avatar
britoj committed
      config false;
britoj's avatar
britoj committed
      description "Status of the SD-QKD node.";
britoj's avatar
britoj committed
    }
  }

britoj's avatar
britoj committed
  grouping qkdn_capabilities {
britoj's avatar
britoj committed
    description "Grouping of the capabilities of the SD-QKD node.";
    
britoj's avatar
britoj committed
    container qkdn_capabilities {
      description "Capabilities of the SD-QKD node.";

britoj's avatar
britoj committed
      leaf link_stats_support {
        type boolean;
        default true;
        description
britoj's avatar
britoj committed
          "If true, this node exposes link-related statistics (secure key 
          generation rate-SKR, link consumption, status, QBER).";
britoj's avatar
britoj committed
      }

      leaf application_stats_support {
        type boolean;
        default true;
britoj's avatar
britoj committed
        description "If true, this node exposes application related 
britoj's avatar
britoj committed
          statistics (application consumption, alerts).";
      }

      leaf key_relay_mode_enable {
        type boolean;
        default true;
britoj's avatar
britoj committed
        description "If true, this node supports key relay (multi-hop) mode services.";
britoj's avatar
britoj committed
      }
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed
  }
britoj's avatar
britoj committed
  
  grouping app_id {
britoj's avatar
britoj committed
    description "Grouping of app_id leaf.";
    
britoj's avatar
britoj committed
    leaf app_id {
      type yang:uuid;
      description
britoj's avatar
britoj committed
        "Unique ID that identifies a QKD application consisting of a set of entities 
        that are allowed to receive keys shared with each other from the SD-QKD nodes 
        they connect to. This value is similar to a key ID or key handle.";
britoj's avatar
britoj committed
    }
  }
  
  grouping app_basic {
britoj's avatar
britoj committed
    description "Grouping of app's basic parameters.";
britoj's avatar
britoj committed
    
britoj's avatar
britoj committed
    uses app_id;
        
    leaf app_status {
      type etsi-qkdn-types:app-status-types;
britoj's avatar
britoj committed
      config false;
      description "Status of the application.";
britoj's avatar
britoj committed
    }
  }
  
  grouping app_priority {
britoj's avatar
britoj committed
    description "Grouping of app_priority leaf.";
    
britoj's avatar
britoj committed
    leaf app_priority {
      type uint32;
      default 0;
britoj's avatar
britoj committed
      description "Priority of the association/application 
        might be defined by the user but usually 
        handled by a network administrator.";
britoj's avatar
britoj committed
    }
  }
  
  grouping app_details {
britoj's avatar
britoj committed
    description "Grouping of app's details parameters.";
    
britoj's avatar
britoj committed
    leaf app_type {
      type etsi-qkdn-types:qkd-app-types;
      description "Type of the registered application. These
        values, defined within the types module, can be client
        (if an external applications requesting keys)
        or internal (application is defined to maintain
britoj's avatar
britoj committed
        the QKD - e.g. multi-hop, authentication or
britoj's avatar
britoj committed
        other encryption operations).";
    }
    
    leaf server_app_id {
      type inet:uri;
britoj's avatar
britoj committed
      description "ID that identifies the entity that initiated the 
      creation of the QKD application to receive keys shared with one 
      or more specified target entity identified by client_app_id.  
      It is a client in the interface to the SD-QKD node and the name 
      server_app_id reflects that it requested the QKD application to 
      be initiated.";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    leaf-list client_app_id {
      type inet:uri;
britoj's avatar
britoj committed
      description "List of IDs that identifies the one or more 
      entities that are allowed to receive keys from SD-QKD 
      node(s) under the QKD application in addition to the 
      initiating entity identified by server_app_id.";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses app_priority;
  }
  
  grouping local_qkdn_id {
britoj's avatar
britoj committed
    description "Grouping of local_qkdn_id leaf.";
    
britoj's avatar
britoj committed
    leaf local_qkdn_id {
      type yang:uuid;
britoj's avatar
britoj committed
      description "Unique ID of the local SD-QKD node which
britoj's avatar
britoj committed
        is providing QKD keys to the local application.";
    }
  }
  
  grouping app_time {
britoj's avatar
britoj committed
    description "Grouping of app's time parameters.";
    
britoj's avatar
britoj committed
    leaf creation_time {
      type yang:date-and-time;
britoj's avatar
britoj committed
      config false;
britoj's avatar
britoj committed
      description "Date and time of the service creation.";
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    leaf expiration_time {
      type yang:date-and-time;
      description "Date and time of the service expiration.";
    }
  }
  
  grouping app_statistics {
britoj's avatar
britoj committed
    description "Grouping of app's statistic parameters.";
    
britoj's avatar
britoj committed
    container app_statistics {
      description "Statistical information relating to a specific statistic period of time.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      list statistics {
        key "end_time";
        config false;
britoj's avatar
britoj committed
        description "List of statistics.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf end_time {
          type yang:date-and-time;
          config false;
          description "End time for the statistic period.";
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        leaf start_time {
          type yang:date-and-time;
          config false;
          description "Start time for the statistic period.";
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        leaf consumed_bits {
britoj's avatar
britoj committed
          type uint32;
          config false;
britoj's avatar
britoj committed
          description "Consumed secret key amount (in bits) for a statistics collection period of time.";
britoj's avatar
britoj committed
        }
britoj's avatar
britoj committed
      }
    }
  }
  
  grouping app_qos {
britoj's avatar
britoj committed
    description "Grouping of app's basic qos parameters.";
    
britoj's avatar
britoj committed
    container app_qos {
      description "Requested Quality of Service.";
      
      leaf max_bandwidth {
        type uint32;
        description "Maximum bandwidth (in bits per second) allowed for 
        this specific application. Exceeding this value will raise an 
        error from the local key store to the appl. This value might 
        be internally configured (or by an admin) with a default value.";
      }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      leaf min_bandwidth {
        type uint32;
        description "This value is an optional QoS parameter which 
          enables to require a minimum key rate (in bits per second) 
          for the application.";
      }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      leaf jitter {
        type uint32;
        description "This value allows to specify the maximum jitter 
          (in msec) to be provided by the key delivery API for 
          applications requiring fast rekeying. This value can be 
          coordinated with the other QoS to provide a wide enough 
          QoS definition.";
      }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      leaf ttl {
        type uint32;
        description "This value is used to specify the maximum time 
          (in seconds) that a key could be kept in the key store for 
          a given application without being used.";
britoj's avatar
britoj committed
      }
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed
  }
britoj's avatar
britoj committed
  
  grouping augmented_app_qos {
britoj's avatar
britoj committed
    description "Grouping of app's detailed qos parameters.";
    
britoj's avatar
britoj committed
    uses app_qos {
      augment app_qos {
britoj's avatar
britoj committed
        description "Augmentation of app's basic parameters with app's detailed qos parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf clients_shared_path_enable {
          type boolean;
          default false;
          description "If true, multiple clients for this 
            application might share keys to reduce service 
            impact (consumption).";
        }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf clients_shared_keys_required {
          type boolean;
          default false;
          description "If true, multiple clients for this application
            might share keys to reduce service impact (consumption).";
        }
britoj's avatar
britoj committed
      }
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed
  }

britoj's avatar
britoj committed
  grouping qkd_applications {
britoj's avatar
britoj committed
    description "Grouping of the list of applications container.";
    
britoj's avatar
britoj committed
    container qkd_applications {
britoj's avatar
britoj committed
      description "List of applications container.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      list qkd_app {
britoj's avatar
britoj committed
        key "app_id";
britoj's avatar
britoj committed
        description "List of applications that are currently registered
          in the SD-QKD node. Any entity consuming QKD-derived keys (either 
          for internal or external purposes) is considered an application.";
   
        uses app_basic;
    
        uses app_details;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        uses app_time;
        
        uses app_statistics;
        
        uses augmented_app_qos;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf-list backing_qkdl_id {
          type yang:uuid;
          description "Unique ID of the key association link which is 
            providing QKD keys to these applications.";
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        uses local_qkdn_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf remote_qkdn_id {
          type yang:uuid;
          description "Unique ID of the remote SD-QKD node which 
            is providing QKD keys to the remote application. 
            While unknown, the local SD-QKD will not be able to 
            provide keys to the local application.";
        }
britoj's avatar
britoj committed
      }
    }
britoj's avatar
britoj committed
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  grouping qkdi_status {
britoj's avatar
britoj committed
    description "Grouping of qkdi_status leaf.";
    
britoj's avatar
britoj committed
    leaf qkdi_status {
      type etsi-qkdn-types:iface-status-types;
britoj's avatar
britoj committed
      config false;
britoj's avatar
britoj committed
      description "Status of a QKD interface of the SD-QKD node.";
    }
  }
  
  grouping qkdi_model {
britoj's avatar
britoj committed
    description "Grouping of qkdi_model leaf.";
    
britoj's avatar
britoj committed
    leaf qkdi_model {
britoj's avatar
britoj committed
      type string;
      description "Device model (vendor/device).";
    }
britoj's avatar
britoj committed
  }
  
  grouping qkdi_type {
britoj's avatar
britoj committed
    description "Grouping of qkdi_type leaf.";
    
britoj's avatar
britoj committed
    leaf qkdi_type {
      type etsi-qkdn-types:qkd-technology-types;
britoj's avatar
britoj committed
      description "Interface type (QKD  technology).";
    }
britoj's avatar
britoj committed
  }
  
  grouping qkdi_att_point {
britoj's avatar
britoj committed
    description "Grouping of the interface attachment points to an optical switch.";
    
britoj's avatar
britoj committed
    container qkdi_att_point {
britoj's avatar
britoj committed
      description "Interface attachment point to an optical switch.";

      leaf device {
        type string;
        description "Unique ID of the optical switch (or
        passive component) to which the interface is connected.";
      }

      leaf port {
        type uint32;
        description "Port ID of the device to which the interface
        is connected.";
      }
    }
  }
britoj's avatar
britoj committed
  
  grouping qkdi_id {
britoj's avatar
britoj committed
    description "Grouping of qkdi_id leaf.";
    
britoj's avatar
britoj committed
    leaf qkdi_id {
      type uint32;
britoj's avatar
britoj committed
      description "Interface id. It is described as a locally unique number, 
britoj's avatar
britoj committed
      which is globally unique when combined with the SD-QKD node ID.";
    }
  }
  
  grouping qkd_interface_item {
britoj's avatar
britoj committed
    description "Grouping of the interface parameters.";
britoj's avatar
britoj committed
  
    uses qkdi_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdi_model;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdi_type;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdi_att_point;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    container qkdi_capabilities {
      description "Capabilities of the QKD system (interface).";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      leaf role_support {
        type etsi-qkdn-types:qkd-role-types;
britoj's avatar
britoj committed
        description "QKD node support for key relay mode services.";
britoj's avatar
britoj committed
      }

britoj's avatar
britoj committed
      leaf wavelength_range {
        type etsi-qkdn-types:wavelength-range-type;
        description "Range of supported wavelengths (nm) (multiple
          if it contains a tunable laser).";
britoj's avatar
britoj committed
      }

britoj's avatar
britoj committed
      leaf max_absorption {
britoj's avatar
britoj committed
        type decimal64 {
          fraction-digits 3;
        }
britoj's avatar
britoj committed
        description "Maximum absorption supported (in dB).";
britoj's avatar
britoj committed
      }
britoj's avatar
britoj committed
    }
  }
  
  grouping qkd_interfaces {
britoj's avatar
britoj committed
    description "Grouping of the list of interfaces.";
  
britoj's avatar
britoj committed
    container qkd_interfaces {
britoj's avatar
britoj committed
      description "List of interfaces container.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      list qkd_interface {
        key "qkdi_id";
        description "List of physical QKD modules in a secure location,
          abstracted as interfaces of the SD-QKD node.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        uses qkd_interface_item;
        
        uses qkdi_status;
        
britoj's avatar
britoj committed
      }
britoj's avatar
britoj committed
    }
  }
  
  grouping qkdl_id {
britoj's avatar
britoj committed
    description "Grouping of qkdl_id leaf.";
    
britoj's avatar
britoj committed
    leaf qkdl_id {
      type yang:uuid;
      description "Unique ID of the QKD link (key association).";
    }
  }
  
  grouping qkdl_status {
britoj's avatar
britoj committed
    description "Grouping of qkdl_status leaf.";
    
britoj's avatar
britoj committed
    leaf qkdl_status {
      type etsi-qkdn-types:link-status-types;
      description "Status of the QKD key association link.";
britoj's avatar
britoj committed
    }
  }

  grouping common_performance {
britoj's avatar
britoj committed
    description "Grouping of common performance parameters.";
    
britoj's avatar
britoj committed
    leaf expected_consumption {
britoj's avatar
britoj committed
      type uint32;
      config false;
britoj's avatar
britoj committed
      description "Sum of all the application's bandwidth (in bits per 
        second) on this particular key association link.";
britoj's avatar
britoj committed
    }
    
    leaf skr {
britoj's avatar
britoj committed
      type uint32;
      config false;
      description "Secret key rate generation (in bits per second) 
        of the key association link.";
britoj's avatar
britoj committed
    }

    leaf eskr {
britoj's avatar
britoj committed
      type uint32;
      config false;
      description "Effective secret key rate (in bits per second) generation 
        of the key association link available after internal consumption.";
britoj's avatar
britoj committed
    }
  }

  grouping physical_link_perf {
britoj's avatar
britoj committed
    description "Grouping of the list of physical performance parameters.";
    
britoj's avatar
britoj committed
    list phys_perf {
britoj's avatar
britoj committed
      key "perf_type";
      config false;
britoj's avatar
britoj committed
      description "List of physical performance parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      leaf perf_type {
        type etsi-qkdn-types:phys-perf-types;
        config false;
        description "Type of the physical performance value to be
          exposed to the controller.";
britoj's avatar
britoj committed
      }

      leaf value {
britoj's avatar
britoj committed
        type decimal64 {
          fraction-digits 3;
        }
britoj's avatar
britoj committed
        config false;
        description "Numerical value for the performance parameter 
          type specified above.";
britoj's avatar
britoj committed
      }
    }
  }

  grouping virtual_link_spec {
britoj's avatar
britoj committed
    description "Grouping of the virtual link's parameters.";
    
britoj's avatar
britoj committed
    leaf virt_prev_hop {
      type yang:uuid;
britoj's avatar
britoj committed
      description "Previous hop in a multi-hop/virtual key
        association link config.";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    leaf-list virt_next_hop {
      type yang:uuid;
      description "Next hop(s) in a multihop/virtual key 
        association link config. Defined as a list for multicast 
        over shared sub-paths.";
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    leaf virt_bandwidth {
      type uint32;
britoj's avatar
britoj committed
      description "Required bandwidth (in bits per second) for that key association link. 
        Used to reserve bandwidth from the physical QKD links to support the virtual key 
        association link as an internal application.";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed
  }

  grouping physical_link_spec {
britoj's avatar
britoj committed
    description "Grouping of the physical link's parameters.";
    
britoj's avatar
britoj committed
    leaf phys_channel_att {
britoj's avatar
britoj committed
      type decimal64 {
        fraction-digits 3;
      }
britoj's avatar
britoj committed
      description "Expected attenuation on the quantum channel (in dB) 
        between the Source/qkd_node and Destination/qkd_node.";
britoj's avatar
britoj committed
      
britoj's avatar
britoj committed
    }
            
    leaf phys_wavelength {
      type etsi-qkdn-types:wavelength;    
britoj's avatar
britoj committed
      description "Wavelength (in nm) to be used for the quantum channel. 
        If the interface is not tunable, this configuration could be bypassed";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    leaf phys_qkd_role {
      type etsi-qkdn-types:qkd-role-types;
britoj's avatar
britoj committed
      description "Transmitter/receiver mode for the QKD module. 
        If there is no multi-role support, this could be ignored.";
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed
  }

britoj's avatar
britoj committed
  grouping qkd_links {
britoj's avatar
britoj committed
    description "Grouping of the list of links.";
    
britoj's avatar
britoj committed
    container qkd_links {
      description "List of links container";
      
      list qkd_link {
britoj's avatar
britoj committed
        key "qkdl_id";
britoj's avatar
britoj committed
        description "List of (key association) links to other SD-QKD nodes in the network.
          The links can be physical (direct quantum channel) or virtual multi-hop 
          connection doing key-relay through several nodes.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        uses qkdl_id;
        
        uses qkdl_status;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        leaf qkdl_enable {
          type boolean;
          default true;
          description "This value allows to enable of disable the key generation 
            process for a given link.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
        container qkdl_local {
britoj's avatar
britoj committed
          description "Source (local) node of the SD-QKD link.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
          leaf qkdn_id {
            type yang:uuid;
britoj's avatar
britoj committed
            description "Unique ID of the local SD-QKD node.";
britoj's avatar
britoj committed
          }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
          leaf qkdi_id {
            type uint32;
britoj's avatar
britoj committed
            description "Interface used to create the key association link.";
britoj's avatar
britoj committed
          }
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        container qkdl_remote {
britoj's avatar
britoj committed
          description "Destination (remote) unique SD-QKD node.";
britoj's avatar
britoj committed

          leaf qkdn_id {
            type yang:uuid;
britoj's avatar
britoj committed
            description "Unique ID of the remote SD-QKD node. This value is
              provided by the SDN controller when the key association link 
              request arrives.";
britoj's avatar
britoj committed
          }

          leaf qkdi_id {
            type uint32;
britoj's avatar
britoj committed
            description "Interface used to create the link.";
britoj's avatar
britoj committed
          }
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        leaf qkdl_type {
          type etsi-qkdn-types:qkd-link-types;
britoj's avatar
britoj committed
          description "Key Association Link type: Virtual (multi-hop) or Direct.";
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        leaf-list qkdl_applications {
          type yang:uuid;
          description "Applications which are consuming keys from
           this key association link.";
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        uses virtual_link_spec {
          when "qkdl_type = 'VIRT'" {
            description "Virtual key association link specific configuration.";
          }
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        uses physical_link_spec {
          when "qkdl_type = 'PHYS'" {
            description "Physical key association link specific configuration.";
          }
britoj's avatar
britoj committed
        }

britoj's avatar
britoj committed
        container qkdl_performance {
britoj's avatar
britoj committed
          description "Container of link's performace parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
          uses common_performance;

          uses physical_link_perf {
            when "../qkdl_type = 'PHYS'" {
              description "Performance of the specific physical link.";
            }
          }
britoj's avatar
britoj committed
  container qkd_node {
    description
      "Top module describing a software-defined QKD node (SD-QKD node).";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdn_id;
    
    uses qkdn_status;
    
    uses qkdn_version;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdn_location_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkdn_capabilities;
    
    uses qkd_applications;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkd_interfaces;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
    uses qkd_links;
  }
  
  grouping message {
britoj's avatar
britoj committed
    description "Grouping of message leaf.";
    
britoj's avatar
britoj committed
    leaf message {
      type string;
      description "Placeholder for the message.";
    }
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  grouping severity {
britoj's avatar
britoj committed
    description "Grouping of severity leaf.";
    
britoj's avatar
britoj committed
    leaf severity {
      type etsi-qkdn-types:severity-types;
      description "Placeholder for the severity.";
    }
  }
  
  grouping reason {
britoj's avatar
britoj committed
    description "Grouping of reason leaf.";
    
britoj's avatar
britoj committed
    leaf reason {
      type string;
      description "Auxiliary parameter to include additional
        information about the reason for link failure.";
    }
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  notification sdqkdn_application_new {
britoj's avatar
britoj committed
    description "Defined for the controller to detect new applications 
      requesting keys from a QKD node. This maps with the workflow shown 
      in clause 5.2 'QKD Application Registration'. Parameters such as 
      client and server app IDs, local QKD node identifier, priority and 
      QoS are sent in the notification.";
    
britoj's avatar
britoj committed
    container qkd_application {
britoj's avatar
britoj committed
      description "'sdqkdn_application_new' notification's qkd_application parameters.";
britoj's avatar
britoj committed
    
      uses app_details;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses local_qkdn_id;
     
      uses augmented_app_qos;
      
    }
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  notification sdqkdn_application_qos_update {
britoj's avatar
britoj committed
    description "Notification that includes information about priority or 
      QoS changes on an existing and already registered application.";
      
britoj's avatar
britoj committed
    container qkd_application {
britoj's avatar
britoj committed
      description "'sdqkdn_application_qos_update' notification's qkd_application parameters.";
britoj's avatar
britoj committed
    
      uses app_id;
     
      uses augmented_app_qos;

      uses app_priority;
      
britoj's avatar
britoj committed
    }
  }

  notification sdqkdn_application_disconnected {
britoj's avatar
britoj committed
    description "Includes the application identifier to inform that the 
      application is no longer registered and active in the QKD node.";
      
britoj's avatar
britoj committed
    container qkd_application {
britoj's avatar
britoj committed
      description "'sdqkdn_application_disconnected' notification's qkd_application parameters.";
britoj's avatar
britoj committed
    
      uses app_id;
      
britoj's avatar
britoj committed
    }
  }

  notification sdqkdn_interface_new {
britoj's avatar
britoj committed
    description "Includes all the information about the new QKD system 
      installed in the secure location of a given QKD node.";
    
    container qkd_interface {
      description "'sdqkdn_interface_new' notification's qkd_interface parameters.";
britoj's avatar
britoj committed
    
      uses qkd_interface_item;
      
britoj's avatar
britoj committed
    }
  }

  notification sdqkdn_interface_down {
britoj's avatar
britoj committed
    description "Identifies an interface within a QKD node which is not 
      working as expected, allowing additional information to be included 
      in a 'reason' string field.";
    
britoj's avatar
britoj committed
    container qkd_interface {
britoj's avatar
britoj committed
      description "'sdqkdn_interface_down' notification's qkd_interface parameters.";
britoj's avatar
britoj committed
      
britoj's avatar
britoj committed
      uses qkdi_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses reason;
      
britoj's avatar
britoj committed
    }
  }

  notification sdqkdn_interface_out {
britoj's avatar
britoj committed
    description "Contains the ID of an interface which is switch off and 
      uninstall from a QKD node. This information can be gathered from this 
      notification or from regular polling from the controller's side.";
    
britoj's avatar
britoj committed
    container qkd_interface {
britoj's avatar
britoj committed
      description "'sdqkdn_interface_out' notification's qkd_interface parameters.";
britoj's avatar
britoj committed
      
britoj's avatar
britoj committed
      uses qkdi_id;
      
britoj's avatar
britoj committed
    }
  }

britoj's avatar
britoj committed
  notification sdqkdn_link_down {
britoj's avatar
britoj committed
    description "As in the interface down event, this notification contains
      the identifier of a given link which has gone down unexpectedly. 
      In addition, further information can be sent in the 'reason' field.";
    
britoj's avatar
britoj committed
    container qkd_link {
britoj's avatar
britoj committed
      description "'sdqkdn_link_down' notification's qkd_link parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses reason;
      
britoj's avatar
britoj committed
    }
  }

britoj's avatar
britoj committed
  notification sdqkdn_link_perf_update {
britoj's avatar
britoj committed
    description "This notification allows to inform of any mayor 
      modification in the performance of an active link. The identifier 
      of the link is sent together with the performance parameters of the link.";

britoj's avatar
britoj committed
    container qkd_link {
britoj's avatar
britoj committed
      description "'sdqkdn_link_perf_update' notification's qkd_link parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_id;
britoj's avatar
britoj committed

      container performance {
britoj's avatar
britoj committed
      description "'sdqkdn_link_perf_update' notification's performance parameters.";
britoj's avatar
britoj committed

        uses common_performance;

        uses physical_link_perf;
  
      }   
    }
  }

britoj's avatar
britoj committed
  notification sdqkdn_link_overloaded {
britoj's avatar
britoj committed
    description "This notification is sent when the link cannot cope with the 
      demand. The link identifier is sent with the expected consumption and 
      general performance parameters.";
    
britoj's avatar
britoj committed
    container qkd_link {
britoj's avatar
britoj committed
      description "'sdqkdn_link_overloaded' notification's qkd_link parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_id;
britoj's avatar
britoj committed

      container performance {
britoj's avatar
britoj committed
      description "'sdqkdn_link_overloaded' notification's performance parameters.";
britoj's avatar
britoj committed

        uses common_performance;
  
      }   
    }
  }

  notification alarm {
britoj's avatar
britoj committed
    description "'alarm' notification.";
britoj's avatar
britoj committed

    container link {
britoj's avatar
britoj committed
      description "'alarm' notification's link parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_status;  
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }

    container interface {
britoj's avatar
britoj committed
      description "'alarm' notification's interface parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdi_id;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses qkdi_status;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }

    container application {
britoj's avatar
britoj committed
      description "'alarm' notification's application parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses app_basic;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }

  }

  notification event {
britoj's avatar
britoj committed
    description "'event' notification.";
britoj's avatar
britoj committed

    container link {
britoj's avatar
britoj committed
      description "'alarm' notification's link parameters.";
      
      uses qkdl_id;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdl_status;    
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }

    container interface {
britoj's avatar
britoj committed
      description "'alarm' notification's interface parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses qkdi_id;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses qkdi_status;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }

    container application {
britoj's avatar
britoj committed
      description "'alarm' notification's application parameters.";
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses app_basic;
britoj's avatar
britoj committed

britoj's avatar
britoj committed
      uses message;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
      uses severity;
britoj's avatar
britoj committed
        
britoj's avatar
britoj committed
    }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
  }
britoj's avatar
britoj committed

britoj's avatar
britoj committed
}