| Internet-Draft | FANN YANG | July 2026 |
| Tantsura & Qu | Expires 7 January 2027 | [Page] |
This document defines a YANG data model to Fast Network Notifictions.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 7 January 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
This document defines a YANG [RFC7950] data model for the support of fast network notifications.¶
The configuration in the model allows network operators to config the network conditions to generate notifications. For example, when a queue-depth reaches to a configured threshold. The grouping of "recipient" allows the configuration of various recipients so a notification can be sent to different recipients based on requirement, such as to a link or to a list of subsribers.¶
Notifications are sent when the configured conditions are met.¶
The meanings of the symbols in the YANG tree diagrams are defined in [RFC8340].¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document defines a YANG module to support fast network notifications.¶
module: ietf-fann
+--rw fann
+--rw fast-network-notification* [notification-id]
+--rw notification-id string
+--rw source-id? inet:uri
+--rw receivers
| +--rw (receiver)?
| +--:(link)
| | +--rw link? string
| +--:(path)
| | +--rw path? string
| +--:(domain)
| | +--rw domain? empty
| +--:(subscribe-nodes)
| +--rw subscribe-nodes* inet:uri
+--rw (condition)
+--:(link-congestion)
| +--rw link? string
| +--rw utilization-level? decimal64
| +--rw congestion-threshold? uint8
+--:(microburst)
| +--rw duration? yang:timeticks
| +--rw intensity? decimal64
| +--rw affected-resource? string
+--:(sla-violation)
| +--rw sla-reference? string
| +--rw violated-metric? string
| +--rw measured-value? decimal64
| +--rw threshold? decimal64
+--:(queue-build-up)
| +--rw queue-id? string
| +--rw depth? uint64
| +--rw queue-threshold? uint8
+--:(local-impairment)
+--rw impairment-type? string
+--rw description? string
+--rw domain-id? string
+--rw node-id? string
+--rw path-id? string
+--rw link-id? string
notifications:
+---n fast-network-notification-event
+--ro notification-id? string
+--ro timestamp yang:date-and-time
+--ro source-id? inet:uri
+--ro receivers
| +--ro (receiver)?
| +--:(link)
| | +--ro link? string
| +--:(path)
| | +--ro path? string
| +--:(domain)
| | +--ro domain? empty
| +--:(subscribe-nodes)
| +--ro subscribe-nodes* inet:uri
+--ro condition
+--ro (condition-type)
+--:(link-congestion)
| +--ro link? string
| +--ro utilization-level? decimal64
+--:(microburst)
| +--ro duration? yang:timeticks
| +--ro intensity? decimal64
| +--ro affected-resource? string
+--:(sla-violation)
| +--ro sla-reference? string
| +--ro violated-metric? string
| +--ro measured-value? decimal64
+--:(queue-build-up)
| +--ro queue-id? string
| +--ro depth? uint64
+--:(local-impairment)
+--ro impairment-type? string
+--ro description? string
+--ro domain-id? string
+--ro node-id? string
+--ro path-id? string
+--ro link-id? string
¶
<CODE BEGINS> file "ietf-fann@2026-07-05.yang"
module ietf-fann {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-fann";
prefix fann;
import ietf-yang-types {
prefix yang;
reference "RFC 6991: Common YANG Data Types";
}
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
organization
"IETF FANN - Fast Network Notifications Working Group";
contact
"WG Web: https://datatracker.ietf.org/wg/fantel/
WG List: fann@ietf.org
Author: Yingzhen Qu
<mailto:yingzhen.ietf@gmail.com>
Author: Jeff Tantsura
<mailto:jeff.ietf@gmail.com>
";
description
"This YANG module defines fast notifications of fine-grained
network status information. It structures real-time network
condition data for dissemination to nodes and applications
that perform traffic engineering, load balancing, flow control,
and protection switching.
Copyright (c) 2026 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Revised BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
All revisions of IETF and IANA published modules can be found
at the YANG Parameters registry group
(https://www.iana.org/assignments/yang-parameters).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
revision 2026-07-05 {
description
"Initial revision.";
reference
"RFC XXXX: A YANG Data Model for Fast Network
Notifications";
}
/*
* Type definitions
*/
typedef time-scale-type {
type enumeration {
enum microseconds {
description
"Time scale in microseconds.";
}
enum sub-millisecond {
description
"Time scale below one millisecond.";
}
}
description
"Granularity of the notification or condition in time.";
}
typedef notification-scope-type {
type enumeration {
enum link {
description
"Scope limited to a single link.";
}
enum path {
description
"Scope along a path.";
}
enum domain {
description
"Scope within a domain.";
}
enum subscribe {
description
"Scope based on subscription.";
}
}
description
"Scope of the fast network notification.";
}
typedef severity-level-type {
type enumeration {
enum low {
description "Low severity.";
}
enum medium {
description "Medium severity.";
}
enum high {
description "High severity.";
}
enum critical {
description "Critical severity.";
}
}
description
"Severity of the network condition.";
}
/*
* Groupings
*/
grouping network-location {
description
"Network location context for the notification or condition.";
leaf domain-id {
type string;
description
"Identifier of the domain.";
}
leaf node-id {
type string;
description
"Node identifiers.";
}
leaf path-id {
type string;
description
"Optional path identifier.";
}
leaf link-id {
type string;
description
"Optional link identifier.";
}
}
grouping recipient {
container receivers {
choice receiver {
leaf link {
type string;
description
"Uniquely identify the link where the notification
will be sent to.";
}
leaf path {
type string;
description
"Scope along a path.";
}
leaf domain {
type empty;
description
"Scope within a domain.";
}
leaf-list subscribe-nodes {
type inet:uri;
description
"List of recipient nodes based on subscription.";
}
description
"Receivers of the fast network notification.";
}
description
"Notification receivers.";
}
description
"Target recipient of the fast network notification.";
}
grouping link-congestion {
description "Link congestion condition.";
leaf link {
type string;
description "Identifier of the congested link.";
}
leaf utilization-level {
type decimal64 {
fraction-digits 2;
range "0..100";
}
units "percent";
description "Link utilization level.";
}
leaf congestion-threshold {
type uint8 {
range "0..100";
}
units "percent";
description
"A configured threshold. A notification should be
generated when the threshold is exceeded.";
}
}
grouping microburst {
description "Microburst condition.";
leaf duration {
type yang:timeticks;
description "Duration of the microburst.";
}
leaf intensity {
type decimal64 {
fraction-digits 4;
}
description "Intensity metric of the microburst.";
}
leaf affected-resource {
type string;
description "Identifier of the affected resource.";
}
}
grouping sla-violation {
description "SLA violation condition.";
leaf sla-reference {
type string;
description "Reference to the SLA that was violated.";
}
leaf violated-metric {
type string;
description "Type of metric that was violated.";
}
leaf measured-value {
type decimal64 {
fraction-digits 4;
}
description "Measured value that caused the violation.";
}
leaf threshold {
type decimal64 {
fraction-digits 4;
}
description "Threshold that was exceeded.";
}
}
grouping queue-build-up {
description "Queue build-up condition.";
leaf queue-id {
type string;
description "Identifier of the queue.";
}
leaf depth {
type uint64;
description "Current queue depth (e.g., bytes or packets).";
}
leaf queue-threshold {
type uint8 {
range "0..100";
}
units "percent";
description
"A configured threshold. A notification should be
generated when the threshold is exceeded.";
}
}
grouping local-impairment {
description "Local impairment condition.";
leaf impairment-type {
type string;
description "Type of local impairment.";
}
leaf description {
type string;
description "Human-readable description of the impairment.";
}
uses network-location;
}
grouping network-condition-status {
description
"Structured network condition data. One of the condition types
must be present.";
choice condition-type {
mandatory true;
description "Type of network condition.";
case link-congestion {
leaf link {
type string;
description "Identifier of the congested link.";
}
leaf utilization-level {
type decimal64 {
fraction-digits 2;
range "0..100";
}
units "percent";
description "Link utilization level.";
}
}
case microburst {
uses microburst;
}
case sla-violation {
leaf sla-reference {
type string;
description "Reference to the SLA that was violated.";
}
leaf violated-metric {
type string;
description "Type of metric that was violated.";
}
leaf measured-value {
type decimal64 {
fraction-digits 4;
}
description "Measured value that caused the violation.";
}
}
case queue-build-up {
leaf queue-id {
type string;
description "Identifier of the queue.";
}
leaf depth {
type uint64;
description "Current queue depth (e.g., bytes or packets).";
}
}
case local-impairment {
uses local-impairment;
}
}
}
grouping fast-network-notification {
description
"Fast network notification: on-demand, fine-grained network
status information for prompt actions by recipients.";
leaf notification-id {
type string;
description "Unique identifier of the notification.";
}
leaf timestamp {
type yang:date-and-time;
mandatory true;
description "Time when the notification was generated.";
}
leaf source-id {
type inet:uri;
description
"Identifier for a node, uniquely identifies a node.";
}
uses recipient;
container condition {
uses network-condition-status;
description "Network condition conveyed by this notification.";
}
}
/*
* Configuration and status
*/
container fann {
description
"Top-level container for FANN configuration and state.";
list fast-network-notification {
key "notification-id";
description "A fast network notification entry.";
leaf notification-id {
type string;
description "Unique identifier of the notification.";
}
leaf source-id {
type inet:uri;
description
"Identifier for a node, uniquely identifies a node.";
}
uses recipient;
choice condition {
mandatory true;
description "Type of network condition.";
case link-congestion {
uses link-congestion;
}
case microburst {
uses microburst;
}
case sla-violation {
uses sla-violation;
}
case queue-build-up {
uses queue-build-up;
}
case local-impairment {
uses local-impairment;
}
}
}
}
/*
* notification
*/
notification fast-network-notification-event {
description
"Fast network notification event for real-time dissemination
of fine-grained network status.";
uses fast-network-notification;
}
}
<CODE ENDS>¶
This section is modeled after the template described in Section 3.7.1 of [RFC9907].¶
The YANG modules defined in this document are designed to be accessed via YANG-based management protocols, such as NETCONF [RFC6241] and RESTCONF [RFC8040]. These protocols have to use a secure transport layer (e.g., SSH [RFC4252], TLS [I-D.ietf-tls-rfc8446bis], and QUIC [RFC9000]) and have to use mutual authentication.¶
The Network Configuration Access Control Model (NACM) [RFC8341] provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.¶
There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., "config true", which is the default). All writable data nodes are likely to be reasonably sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) and delete operations to these data nodes without proper protection or authentication can have a negative effect on network operations. The following subtrees and data nodes have particular sensitivities/vulnerabilities:¶
Some of the readable data nodes in the modules may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. The exposure of the network conditions will expose the detailed operaton state of the network. This may be undesirable since exposure may facilitate other attacks.¶
The notification defined in this document may reveal information about network status. Access to this notification SHOULD be restricted using NACM [RFC8341] to authorized management stations.¶
The YANG modules defined in this document do not include any RPC or action operations. Hence, there are no security considerations associated with these YANG constructs.¶
This document registers two URIs in the IETF XML registry [RFC3688]. Following the format in [RFC3688], the following registrations are requested:¶
URI: urn:ietf:params:xml:ns:yang:ietf-fann Registrant Contact: The IESG. XML: N/A, the requested URI is an XML namespace.¶
This document registers the YANG modules in the YANG Module Names registry [RFC7950].¶
name: ietf-fann Maintained by IANA? N namespace: urn:ietf:params:xml:ns:yang:ietf-fann prefix: fann reference: RFC XXXX¶
TBD.¶