Commit d97cdd23 authored by lengyelb's avatar lengyelb
Browse files

Reliable notification transfer

parent 91ad7419
Loading
Loading
Loading
Loading
Loading
+171 −2
Original line number Diff line number Diff line
@@ -5,12 +5,14 @@ module _3gpp-common-subscription-control {
    
  import _3gpp-common-top { prefix top3gpp; }
  import _3gpp-common-yang-extensions { prefix yext3gpp; }
  import _3gpp-common-yang-types { prefix types3gpp; }
  import ietf-yang-types { prefix yang; }

  organization "3GPP SA5";
  contact "https://www.3gpp.org/DynaReport/TSG-WG--S5--officials.htm?Itemid=464";
    
  description "Defines IOCs for subscription and heartbeat control.
    Copyright 2024, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, 
    Copyright 2025, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, 
    TTA, TTC). All rights reserved.";
  reference "3GPP TS 28.623
      Generic Network Resource Model (NRM)
@@ -18,6 +20,7 @@ module _3gpp-common-subscription-control {
      Solution Set (SS) definitions
      3GPP TS 28.623";
  
  revision 2025-01-19 { reference CR-xxxx ; } 
  revision 2024-05-18 { reference CR-0359 ; } 
  revision 2024-01-18 { reference "CR-0309 CR-0329" ; } 
  revision 2023-09-18 { reference CR-0271 ; } 
@@ -27,6 +30,38 @@ module _3gpp-common-subscription-control {
  revision 2020-08-26 { reference "CR-0106"; }
  revision 2019-11-29 { reference "S5-197648 S5-197647 S5-197829 S5-197828"; }

  feature ReliableNotificationTransfer {
    description "Reliable notification transfer allows a consumer to detect 
      missing notifications and in some cases retrieve them.";
  }
  
  typedef NotificationTypes {
    description "An extensible enumeration of notification types";
    type union {
      type enumeration {
        enum NOTIFY_MOI_CREATION;
        enum NOTIFY_MOI_DELETION;
        enum NOTIFY_MOI_ATTRIBUTE_VALUE_CHANGES;
        enum NOTIFY_MOI_CHANGES;
        enum NOTIFY_EVENT;
        enum NOTIFY_NEW_ALARM;
        enum NOTIFY_CHANGED_ALARM;
        enum NOTIFY_ACKSTATE_CHANGED;
        enum NOTIFY_COMMENTS;
        enum NOTIFY_CORRELATED_NOTIFICATION_CHANGED;
        enum NOTIFY_CHANGED_ALARM_GENERAL;
        enum NOTIFY_CLEARED_ALARM;
        enum NOTIFY_ALARMLIST_REBUILT;
        enum NOTIFY_POTENTIAL_FAULTY_ALARMLIST;
        enum NOTIFY_FILEREADY;
        enum NOTIFY_FILE_PREPARATION_ERROR;
        enum NOTIFY_THRESHOLD_CROSSING;
        enum NOTIFY_NOTIFICATION_ERROR;
      }
      type string;
    }
  }
  
  grouping ScopeGrp {
    description "This <<dataType>> allows to select data nodes in an object 
      tree whose root is identified by the so called base managed object 
@@ -103,7 +138,7 @@ module _3gpp-common-subscription-control {
    }
    
    leaf-list notificationTypes {
      type string;
      type NotificationTypes;
      description "Defines the types of notifications that are candidates 
        for being forwarded to the notification recipient.
        If the notificationTypes attribute is not supported or not present 
@@ -132,6 +167,81 @@ module _3gpp-common-subscription-control {
        JSON expressions (Jex) 'JexConditionsExpr'";
      reference "3GPP TS 32.161";
    }
    
    leaf operationalState {
      if-feature ReliableNotificationTransfer;
      type types3gpp:OperationalState;
      mandatory true;
      config false;
    }
    
    leaf-list availabilityStatus {
      if-feature ReliableNotificationTransfer;
      type types3gpp:AvailabilityStatus;
      config false;
      description "Provides additional information about the operation status 
        of a resource. ";
    }

    leaf-list missedNotificationTypes {
      if-feature ReliableNotificationTransfer;
      type NotificationTypes;
      config false;
      description "If a producer knows or suspects that it failed to prepare 
        some notifications, the types of these notifications should be listed 
        here.";
    }
  }

  grouping SentNotificationsGrp {
   description "Attributes of SentNotifications.";
  
    leaf oldestSequenceNo {
      type uint64 ;
      config false;
      description "The sequence number of the oldest notification in the 
        sentNotificationList.";
    }
    
    leaf oldestEventTime {
      type yang:date-and-time;
      config false;
      description "The eventTime of the oldest notification in the 
        sentNotificationList";
    }
    
    leaf newestSequenceNo {
      type uint64 ;
      config false;
      description "The sequence number of the newest notification in the 
        sentNotificationList.";
    }
    
    leaf newestEventTime {
      type yang:date-and-time;
      config false;
      description "The eventTime of the newest notification in the 
        sentNotificationList.";
    }
    
    leaf numberOfStoredNotifications {
      type uint32 ;
      config false;
      description "The number of notifications in the sentNotificationList.";
    }
    
    leaf-list sentNotificationList {
      type string ;
      config false;
      description "An in-sequence, ordered set of notification messages, 
        each containing the representation of a notification as encoded in 
        the HTTP body (excluding the HTTP headers).

        The order shall be oldest first.

        Note: Whether a filtered retrival is needed is FFS. In that case the 
        attribute may have a strucutured type.";
    }
 }
  
  grouping HeartbeatControlGrp {
@@ -223,6 +333,38 @@ module _3gpp-common-subscription-control {
        the last notification sent related to the subscription shall report 
        the deletion of the NtfSubscriptionControl instance.
        
        If multiple NtfSubscriptionControl instances are configured to send 
        the same notification to the same notificationRecipientAddress, then 
        a separate notification message shall be sent according to each such 
        NtfSubscriptionControl instance.

        The 'reliable notification transfer feature' ensures detection of 
        failure of notification transfer. It handles two separate error cases:
        - the notification was prepared by the producer, but could not be 
        delivered to the consumer
        - the producer could not prepare the notification e.g. due to overload 
        or internal error.
        
        If the feature is supported this implies support for all of the 
        following:
        - operationalState, availabilityStatus and missedNotificationTypes 
        attributes 
        - all notifications carry the sequenceNo and the subscriptionId 
        parameters 
        - the IOC SentNotifications is supported. 
        - the notification notifyNotificationError is supported
        
        If notifications are prepared by the producer but their delivery to 
        the recipient is unsuccessful, the consumer should detect this based 
        on the sequenceNo and the subscriptionId and retrieve the missing 
        notifications from the SentNotifications MOI. 
        
        If MnS producer is not able to prepare notifications this is indicated 
        by the operationalState, availabilityStatus and missedNotificationTypes 
        attributes and the notifyNotificationError notification. The 
        notifyNotificationError notification type notifyNotificationError 
        shall be automatically included in all subscriptions.

        Creation and deletion of NtfSubscriptionControl instances by MnS 
        consumers is optional; when not supported, the NtfSubscriptionControl 
        instances may be created and deleted by the system or be 
@@ -282,6 +424,33 @@ module _3gpp-common-subscription-control {
          uses HeartbeatControlGrp;
        }
      }
      
      list SentNotifications {
        if-feature ReliableNotificationTransfer;
        description "This IOC represents the set of notifications prepared for 
          a specific NtfSubscriptionControl subscription. Notifications are 
          available independent whether they are successfully delivered to 
          the consumer or not. The MnS producers shall always maintain an 
          in-sequence continuous set of notifications for the subscription 
          starting with the newest notification, and may limit the number of 
          notifications.

          It is the responsibility of the consumer to create the MOI and 
          thus enable its functionality. If the MOI is present the producer 
          will update the attributes.

          The IOC shall be supported if and only if the reliable notification 
          transfer feature supported.";
          
        yext3gpp:notNotifyable;
        max-elements 1;
        key id;
        uses top3gpp:Top_Grp;
        
        container attributes {
          uses SentNotificationsGrp;
        }
      }
    }
  }