Commit 465b3433 authored by britoj's avatar britoj
Browse files

Proposal for version 2.1.1

parent a3a7ed22
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
/* Copyright 2021 ETSI
/* Copyright 2022 ETSI
Licensed under the BSD-3 Clause (https://forge.etsi.org/legal-matters) */

module etsi-qkd-node-types {
@@ -18,7 +18,7 @@ module etsi-qkd-node-types {
  description
    "This module contains the base types created for 
    the software-defined QKD node information models
    specified in ETSI GS QKD 015 V1.1.1
    specified in ETSI GS QKD 015 V2.1.1
    - QKD-TECHNOLOGY-TYPES
    - QKDN-STATUS-TYPES
    - QKD-LINK-TYPES
@@ -27,7 +27,7 @@ module etsi-qkd-node-types {
    - Wavelength
    ";

  revision "2021-09-30" {
  revision "2022-01-30" {
    description
      "Refinement of the YANG model to make it compatible with the ETSI ISG QKD 018. Minor fixes.";
  }
@@ -139,7 +139,7 @@ module etsi-qkd-node-types {
    description "QKD module working as receiver.";
  }

  identity TRANSDUCER {
  identity TRANSCEIVER {
    base QKD-ROLE-TYPES;
    description "QKD System that can work as a transmitter or receiver.";
  }
+209 −79
Original line number Diff line number Diff line
/* Copyright 2021 ETSI
/* Copyright 2022 ETSI
Licensed under the BSD-3 Clause (https://forge.etsi.org/legal-matters) */

module etsi-qkd-sdn-node {
@@ -23,20 +23,25 @@ module etsi-qkd-sdn-node {
  description
    "This module contains the groupings and containers composing 
    the software-defined QKD node information models
    specified in ETSI GS QKD 015 V1.1.1";
    specified in ETSI GS QKD 015 V2.1.1";

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

  revision "2020-09-30" {
    description
      "First definition based on initial requirement analysis.";
    reference
      "ETSI GS QKD 015 V1.1.1 (2021-03)";
  }
  
  grouping qkdn_id {
    description "Grouping of qkdn_id leaf";
    description "Grouping of qkdn_id leaf.";
    
    leaf qkdn_id {
      type yang:uuid;
      mandatory true;
@@ -46,6 +51,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdn_version {
    description "Grouping of qkdn_version leaf.";
    
    leaf qkdn_version {
      type string;
      description "Hardware or software version of the SD-QKD node.";
@@ -53,6 +60,8 @@ module etsi-qkd-sdn-node {
  }

  grouping qkdn_location_id {
    description "Grouping of qkdn_location_id leaf.";
    
    leaf qkdn_location_id {
      type string;
      default "";
@@ -63,14 +72,18 @@ module etsi-qkd-sdn-node {
  }

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

  grouping qkdn_capabilities {
    description "Grouping of the capabilities of the SD-QKD node.";
    
    container qkdn_capabilities {
      description "Capabilities of the SD-QKD node.";

@@ -98,75 +111,91 @@ module etsi-qkd-sdn-node {
  }
  
  grouping app_id {
    description "Grouping of app_id leaf.";
    
    leaf app_id {
      type yang:uuid;
      description
        "This value uniquely identifies a pair of applications
          extracting keys from a QKD key association link. This value is similar
          to a key ID or key handle.";
        "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.";
    }
  }
  
  grouping app_basic {
    description "Grouping of app's basic parameters.";
    
    uses app_id;
        
    leaf app_status {
      config false;
      type etsi-qkdn-types:app-status-types;
      description "Status of the application";
      config false;
      description "Status of the application.";
    }
  }
  
  grouping app_priority {
    description "Grouping of app_priority leaf.";
    
    leaf app_priority {
      type uint32;
      default 0;
      
      description "Priority of the association/application.
        High value indicate high priority. This might be defined by 
        the user, but will usually assigned by a network administrator.";
      description "Priority of the association/application 
        might be defined by the user but usually 
        handled by a network administrator.";
    }
  }
  
  grouping app_details {
    description "Grouping of app's details parameters.";
    
    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
        the QKD network - e.g. multi-hop, authentication or
        the QKD - e.g. multi-hop, authentication or
        other encryption operations).";
    }
    
    leaf server_app_id {
      type inet:uri;
      description "ID of the client application connecting to 
      the local key server of the peer SD-QKD node.";
      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.";
    }

    leaf-list client_app_id {
      type inet:uri;
      description "ID of the client application connecting to 
      the local key server of the peer SD-QKD node.";
      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.";
    }

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

@@ -177,13 +206,15 @@ module etsi-qkd-sdn-node {
  }
  
  grouping app_statistics {
    description "Grouping of app's statistic parameters.";
    
    container app_statistics {
      description "Statistical information relating to a specific statistic period of time.";

      list statistics {
        description "List of statistics";
        key "end_time";
        config false;
        description "List of statistics.";

        leaf end_time {
          type yang:date-and-time;
@@ -207,6 +238,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping app_qos {
    description "Grouping of app's basic qos parameters.";
    
    container app_qos {
      description "Requested Quality of Service.";
      
@@ -244,8 +277,11 @@ module etsi-qkd-sdn-node {
  }
  
  grouping augmented_app_qos {
    description "Grouping of app's detailed qos parameters.";
    
    uses app_qos {
      augment app_qos {
        description "Augmentation of app's basic parameters with app's detailed qos parameters.";

        leaf clients_shared_path_enable {
          type boolean;
@@ -266,14 +302,16 @@ module etsi-qkd-sdn-node {
  }

  grouping qkd_applications {
    description "Grouping of the list of applications container.";
    
    container qkd_applications {
      description "List of applications container";
      description "List of applications container.";

      list qkd_app {
        key "app_id";
        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.";
        key "app_id";
   
        uses app_basic;
    
@@ -305,14 +343,18 @@ module etsi-qkd-sdn-node {
  }

  grouping qkdi_status {
    description "Grouping of qkdi_status leaf.";
    
    leaf qkdi_status {
      config false;
      type etsi-qkdn-types:iface-status-types;
      config false;
      description "Status of a QKD interface of the SD-QKD node.";
    }
  }
  
  grouping qkdi_model {
    description "Grouping of qkdi_model leaf.";
    
    leaf qkdi_model {
      type string;
      description "Device model (vendor/device).";
@@ -320,6 +362,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdi_type {
    description "Grouping of qkdi_type leaf.";
    
    leaf qkdi_type {
      type etsi-qkdn-types:qkd-technology-types;
      description "Interface type (QKD  technology).";
@@ -327,6 +371,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdi_att_point {
    description "Grouping of the interface attachment points to an optical switch.";
    
    container qkdi_att_point {
      description "Interface attachment point to an optical switch.";

@@ -345,14 +391,17 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdi_id {
    description "Grouping of qkdi_id leaf.";
    
    leaf qkdi_id {
      type uint32;
      description "It is described as a locally unique number, 
      description "Interface id. It is described as a locally unique number, 
      which is globally unique when combined with the SD-QKD node ID.";
    }
  }
  
  grouping qkd_interface_item {
    description "Grouping of the interface parameters.";
  
    uses qkdi_id;

@@ -367,7 +416,7 @@ module etsi-qkd-sdn-node {

      leaf role_support {
        type etsi-qkdn-types:qkd-role-types;
        description "Support for transmit, receive or both.";
        description "QKD node support for key relay mode services.";
      }

      leaf wavelength_range {
@@ -377,15 +426,19 @@ module etsi-qkd-sdn-node {
      }

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

      list qkd_interface {
        key "qkdi_id";
@@ -401,6 +454,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdl_id {
    description "Grouping of qkdl_id leaf.";
    
    leaf qkdl_id {
      type yang:uuid;
      description "Unique ID of the QKD link (key association).";
@@ -408,6 +463,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping qkdl_status {
    description "Grouping of qkdl_status leaf.";
    
    leaf qkdl_status {
      type etsi-qkdn-types:link-status-types;
      description "Status of the QKD key association link.";
@@ -415,11 +472,13 @@ module etsi-qkd-sdn-node {
  }

  grouping common_performance {
    description "Grouping of common performance parameters.";
    
    leaf expected_consumption {
      type uint32;
      config false;
      description "Sum of all the application's bandwidth (in bits 
        per second) that are on this particular key association link.";
      description "Sum of all the application's bandwidth (in bits per 
        second) on this particular key association link.";
    }
    
    leaf skr {
@@ -438,10 +497,12 @@ module etsi-qkd-sdn-node {
  }

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

      leaf perf_type {
        type etsi-qkdn-types:phys-perf-types;
@@ -451,7 +512,9 @@ module etsi-qkd-sdn-node {
      }

      leaf value {
        type uint32;
        type decimal64 {
          fraction-digits 3;
        }
        config false;
        description "Numerical value for the performance parameter 
          type specified above.";
@@ -460,10 +523,12 @@ module etsi-qkd-sdn-node {
  }

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

    leaf-list virt_next_hop {
@@ -475,15 +540,19 @@ module etsi-qkd-sdn-node {

    leaf virt_bandwidth {
      type uint32;
      description "Required bandwidth (bps)for the key association link. Used to
        reserve bandwidth from the physical link to support the virtual link
        as an internal application.";
      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.";
    }
  }

  grouping physical_link_spec {
    description "Grouping of the physical link's parameters.";
    
    leaf phys_channel_att {
      type uint8;
      type decimal64 {
        fraction-digits 3;
      }
      description "Expected attenuation on the quantum channel (in dB) 
        between the Source/qkd_node and Destination/qkd_node.";
      
@@ -491,26 +560,28 @@ module etsi-qkd-sdn-node {
            
    leaf phys_wavelength {
      type etsi-qkdn-types:wavelength;    
      description "Wavelength (nm) to be used for the quantum channel. If
        the interface is not tunable, this parameter can by bypassed.";
      description "Wavelength (in nm) to be used for the quantum channel. 
        If the interface is not tunable, this configuration could be bypassed";
    }

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

  grouping qkd_links {
    description "Grouping of the list of links.";
    
    container qkd_links {
      description "List of links container";
      
      list qkd_link {
        key "qkdl_id";
        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.";
        key "qkdl_id";

        uses qkdl_id;
        
@@ -525,40 +596,38 @@ module etsi-qkd-sdn-node {
        }

        container qkdl_local {
          description "Source (local) node of the QKD link.";
          description "Source (local) node of the SD-QKD link.";

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

          leaf qkdi_id {
            type uint32;
            description "Interface used to create the link.";
            description "Interface used to create the key association link.";
          }
        }

        container qkdl_remote {
          description "Destination (remote) unique QKD node.";
          description "Destination (remote) unique SD-QKD node.";

          leaf qkdn_id {
            type yang:uuid;
            description "Universally Unique ID of the remote QKD node. 
              This value is provided by the SDN controller as part 
              of the request to establish the key association link.";
            description "Unique ID of the remote SD-QKD node. This value is
              provided by the SDN controller when the key association link 
              request arrives.";
          }

          leaf qkdi_id {
            type uint32;
            description "Interface used to create the key association link.";
            description "Interface used to create the link.";
          }
        }

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

        leaf-list qkdl_applications {
@@ -580,6 +649,7 @@ module etsi-qkd-sdn-node {
        }

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

          uses common_performance;

@@ -615,6 +685,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping message {
    description "Grouping of message leaf.";
    
    leaf message {
      type string;
      description "Placeholder for the message.";
@@ -622,6 +694,8 @@ module etsi-qkd-sdn-node {
  }

  grouping severity {
    description "Grouping of severity leaf.";
    
    leaf severity {
      type etsi-qkdn-types:severity-types;
      description "Placeholder for the severity.";
@@ -629,6 +703,8 @@ module etsi-qkd-sdn-node {
  }
  
  grouping reason {
    description "Grouping of reason leaf.";
    
    leaf reason {
      type string;
      description "Auxiliary parameter to include additional
@@ -637,7 +713,14 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_application_new {
    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.";
    
    container qkd_application {
      description "'sdqkdn_application_new' notification's qkd_application parameters.";
    
      uses app_details;

@@ -649,7 +732,11 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_application_qos_update {
    description "Notification that includes information about priority or 
      QoS changes on an existing and already registered application.";
      
    container qkd_application {
      description "'sdqkdn_application_qos_update' notification's qkd_application parameters.";
    
      uses app_id;
     
@@ -661,7 +748,11 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_application_disconnected {
    description "Includes the application identifier to inform that the 
      application is no longer registered and active in the QKD node.";
      
    container qkd_application {
      description "'sdqkdn_application_disconnected' notification's qkd_application parameters.";
    
      uses app_id;
      
@@ -669,7 +760,11 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_interface_new {
    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.";
    
      uses qkd_interface_item;
      
@@ -677,7 +772,12 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_interface_down {
    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.";
    
    container qkd_interface {
      description "'sdqkdn_interface_down' notification's qkd_interface parameters.";
      
      uses qkdi_id;

@@ -687,7 +787,12 @@ module etsi-qkd-sdn-node {
  }

  notification sdqkdn_interface_out {
    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.";
    
    container qkd_interface {
      description "'sdqkdn_interface_out' notification's qkd_interface parameters.";
      
      uses qkdi_id;
      
@@ -695,7 +800,12 @@ module etsi-qkd-sdn-node {
  }

  notification sqdkdn_link_down {
    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.";
    
    container qkd_link {
      description "'sqdkdn_link_down' notification's qkd_link parameters.";

      uses qkdl_id;

@@ -705,11 +815,17 @@ module etsi-qkd-sdn-node {
  }

  notification sqdkdn_link_perf_update {
    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.";

    container qkd_link {
      description "'sqdkdn_link_perf_update' notification's qkd_link parameters.";

      uses qkdl_id;

      container performance {
      description "'sqdkdn_link_perf_update' notification's performance parameters.";

        uses common_performance;

@@ -720,11 +836,17 @@ module etsi-qkd-sdn-node {
  }

  notification sqdkdn_link_overloaded {
    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.";
    
    container qkd_link {
      description "'sqdkdn_link_overloaded' notification's qkd_link parameters.";

      uses qkdl_id;

      container performance {
      description "'sqdkdn_link_overloaded' notification's performance parameters.";

        uses common_performance;
  
@@ -733,8 +855,10 @@ module etsi-qkd-sdn-node {
  }

  notification alarm {
    description "'alarm' notification.";

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

      uses qkdl_id;

@@ -747,6 +871,7 @@ module etsi-qkd-sdn-node {
    }

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

      uses qkdi_id;
        
@@ -759,6 +884,7 @@ module etsi-qkd-sdn-node {
    }

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

      uses app_basic;

@@ -771,8 +897,10 @@ module etsi-qkd-sdn-node {
  }

  notification event {
    description "'event' notification.";

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

@@ -785,6 +913,7 @@ module etsi-qkd-sdn-node {
    }

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

      uses qkdi_id;
        
@@ -797,6 +926,7 @@ module etsi-qkd-sdn-node {
    }

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

      uses app_basic;