diff options
Diffstat (limited to 'doc/rfc/rfc9244.txt')
-rw-r--r-- | doc/rfc/rfc9244.txt | 5635 |
1 files changed, 5635 insertions, 0 deletions
diff --git a/doc/rfc/rfc9244.txt b/doc/rfc/rfc9244.txt new file mode 100644 index 0000000..5a43552 --- /dev/null +++ b/doc/rfc/rfc9244.txt @@ -0,0 +1,5635 @@ + + + + +Internet Engineering Task Force (IETF) M. Boucadair, Ed. +Request for Comments: 9244 Orange +Category: Standards Track T. Reddy.K, Ed. +ISSN: 2070-1721 Akamai + E. Doron + Radware Ltd. + M. Chen + CMCC + J. Shallow + June 2022 + + + Distributed Denial-of-Service Open Threat Signaling (DOTS) Telemetry + +Abstract + + This document aims to enrich the Distributed Denial-of-Service Open + Threat Signaling (DOTS) signal channel protocol with various + telemetry attributes, allowing for optimal Distributed Denial-of- + Service (DDoS) attack mitigation. It specifies the normal traffic + baseline and attack traffic telemetry attributes a DOTS client can + convey to its DOTS server in the mitigation request, the mitigation + status telemetry attributes a DOTS server can communicate to a DOTS + client, and the mitigation efficacy telemetry attributes a DOTS + client can communicate to a DOTS server. The telemetry attributes + can assist the mitigator in choosing the DDoS mitigation techniques + and performing optimal DDoS attack mitigation. + + This document specifies two YANG modules: one for representing DOTS + telemetry message types and one for sharing the attack mapping + details over the DOTS data channel. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 7841. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + https://www.rfc-editor.org/info/rfc9244. + +Copyright Notice + + Copyright (c) 2022 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. + +Table of Contents + + 1. Introduction + 2. Terminology + 3. DOTS Telemetry: Overview and Purpose + 3.1. Need for More Visibility + 3.2. Enhanced Detection + 3.3. Efficient Mitigation + 4. Design Overview + 4.1. Overview of Telemetry Operations + 4.2. Block-Wise Transfers + 4.3. DOTS Multihoming Considerations + 4.4. YANG Considerations + 5. Generic Considerations + 5.1. DOTS Client Identification + 5.2. DOTS Gateways + 5.3. Uri-Path Parameters and Empty Values + 5.4. Controlling Configuration Data + 5.5. Message Validation + 5.6. A Note about Examples + 6. Telemetry Operation Paths + 7. DOTS Telemetry Setup Configuration + 7.1. Telemetry Configuration + 7.1.1. Retrieving the Current DOTS Telemetry Configuration + 7.1.2. Conveying the DOTS Telemetry Configuration + 7.1.3. Retrieving the Installed DOTS Telemetry Configuration + 7.1.4. Deleting the DOTS Telemetry Configuration + 7.2. Total Pipe Capacity + 7.2.1. Conveying DOTS Client Domain Pipe Capacity + 7.2.2. Retrieving Installed DOTS Client Domain Pipe Capacity + 7.2.3. Deleting Installed DOTS Client Domain Pipe Capacity + 7.3. Telemetry Baseline + 7.3.1. Conveying DOTS Client Domain Baseline Information + 7.3.2. Retrieving Installed Normal Traffic Baseline + Information + 7.3.3. Deleting Installed Normal Traffic Baseline Information + 7.4. Resetting the Installed Telemetry Setup + 7.5. Conflict with Other DOTS Clients of the Same Domain + 8. DOTS Pre-or-Ongoing-Mitigation Telemetry + 8.1. Pre-or-Ongoing-Mitigation DOTS Telemetry Attributes + 8.1.1. Target + 8.1.2. Total Traffic + 8.1.3. Total Attack Traffic + 8.1.4. Total Attack Connections + 8.1.5. Attack Details + 8.1.6. Vendor Attack Mapping + 8.2. From DOTS Clients to DOTS Servers + 8.3. From DOTS Servers to DOTS Clients + 9. DOTS Telemetry Mitigation Status Update + 9.1. From DOTS Clients to DOTS Servers: Mitigation Efficacy DOTS + Telemetry Attributes + 9.2. From DOTS Servers to DOTS Clients: Mitigation Status DOTS + Telemetry Attributes + 10. Error Handling + 11. YANG Modules + 11.1. DOTS Signal Channel Telemetry YANG Module + 11.2. Vendor Attack Mapping Details YANG Module + 12. YANG/JSON Mapping Parameters to CBOR + 13. IANA Considerations + 13.1. DOTS Signal Channel CBOR Key Values + 13.2. DOTS Signal Channel Conflict Cause Codes + 13.3. DOTS Telemetry URIs and YANG Module Registrations + 14. Security Considerations + 14.1. DOTS Signal Channel Telemetry + 14.2. Vendor Attack Mapping + 15. References + 15.1. Normative References + 15.2. Informative References + Acknowledgments + Contributors + Authors' Addresses + +1. Introduction + + IT organizations and service providers are facing Distributed Denial- + of-Service (DDoS) attacks that fall into two broad categories: + + 1. Network-layer and transport-layer attacks target the victim's + infrastructure. These attacks are not necessarily aimed at + taking down the actual delivered services; rather, these attacks + prevent various network elements (routers, switches, firewalls, + transit links, and so on) from serving legitimate users' traffic. + + The main method of such attacks is to send a large volume of + traffic (e.g., high-pps (packets per second) traffic) toward the + victim's infrastructure. Typically, attack volumes may vary from + a few hundred Mbps to hundreds of Gbps or even Tbps. Attacks are + commonly carried out leveraging botnets and attack reflectors for + amplification attacks (Section 3.1 of [RFC4732]) such as NTP + (Network Time Protocol), DNS (Domain Name System), SNMP (Simple + Network Management Protocol), or SSDP (Simple Service Discovery + Protocol). + + 2. Application-layer attacks target various applications. Typical + examples include attacks against HTTP/HTTPS, DNS, SIP (Session + Initiation Protocol), or SMTP (Simple Mail Transfer Protocol). + However, all applications with their port numbers open at network + edges can be attractive attack targets. + + Application-layer attacks are considered more complex and harder + to categorize and are therefore harder to detect and mitigate + efficiently. + + To compound the problem, attackers also leverage multi-vectored + attacks. These attacks are assembled from dynamic network-layer and + application-layer attack vectors and other tactics. As such, + multiple attack vectors formed by multiple attack types and volumes + are launched simultaneously toward a victim. Multi-vector attacks + are harder to detect and defend against. Multiple and simultaneous + mitigation techniques are needed to defeat such attack campaigns. It + is also common for attackers to change attack vectors right after a + successful mitigation, burdening their opponents with changing their + defense methods. + + The conclusion derived from the aforementioned attack scenarios is + that modern attack detection and mitigation are most certainly + complicated and highly convoluted tasks. They demand a comprehensive + knowledge of the attack attributes and the normal behavior of the + targeted systems (including normal traffic patterns), as well as the + attacker's ongoing and past actions. Even more challenging, + retrieving all the analytics needed for detecting these attacks is + not simple with the industry's current reporting capabilities. + + The Distributed Denial-of-Service Open Threat Signaling (DOTS) signal + channel protocol [RFC9132] is used to carry information about a + network resource or a network (or a part thereof) that is under a + DDoS attack. Such information is sent by a DOTS client to one or + multiple DOTS servers so that appropriate mitigation actions are + undertaken on traffic deemed suspicious. Various use cases are + discussed in [RFC8903]. + + DOTS clients can be integrated within a DDoS attack detector or + within network and security elements that have been actively engaged + with ongoing attacks. The DOTS client mitigation environment + determines that it is no longer possible or practical for it to + handle these attacks itself. This can be due to a lack of resources + or security capabilities, as derived from the complexities and + intensity of these attacks. In this circumstance, the DOTS client + has invaluable knowledge about the actual attacks that need to be + handled by its DOTS server(s). By enabling the DOTS client to share + this comprehensive knowledge of an ongoing attack under specific + circumstances, the DOTS server can drastically increase its ability + to accomplish successful mitigation. While the attack is being + handled by the mitigation resources associated with the DOTS server, + the DOTS server has knowledge about the ongoing attack mitigation. + The DOTS server can share this information with the DOTS client so + that the client can better assess and evaluate the actual mitigation + realized. + + DOTS clients can send mitigation hints derived from attack details to + DOTS servers, with the full understanding that a DOTS server may + ignore mitigation hints, as described in [RFC8612] (Gen-004). + Mitigation hints will be transmitted across the DOTS signal channel, + as the data channel may not be functional during an attack. How a + DOTS server handles normal and attack traffic attributes, and + mitigation hints, is implementation specific. + + Both DOTS clients and servers can benefit from this information by + presenting various information details in relevant management, + reporting, and portal systems. + + This document defines DOTS telemetry attributes that can be conveyed + by DOTS clients to DOTS servers, and vice versa. The DOTS telemetry + attributes are not mandatory attributes of the DOTS signal channel + protocol [RFC9132]. When no limitation policy is provided to a DOTS + agent, it can signal available telemetry attributes to its peers in + order to optimize the overall mitigation service provisioned using + DOTS. The aforementioned policy can be, for example, agreed upon + during a service subscription (which is out of scope for this + document) to identify a subset of DOTS clients among those deployed + in a DOTS client domain that are allowed to send or receive telemetry + data. + + Section 11.2 of this document specifies a YANG module that augments + the DOTS data channel [RFC8783] with information related to attack + details. Sharing such details during 'idle' time is meant to + optimize the data exchanged over the DOTS signal channel. + +2. Terminology + + 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. + + The reader should be familiar with the terms defined in [RFC8612]. + + "DOTS telemetry" is defined as the collection of attributes that are + used to characterize the normal traffic baseline, attacks and their + mitigation measures, and any related information that may help in + enforcing countermeasures. "DOTS telemetry" is an optional set of + attributes that can be signaled in the DOTS signal channel protocol. + + The Telemetry Setup Identifier (tsid) is an identifier that is + generated by DOTS clients to uniquely identify DOTS telemetry setup + configuration data. See Section 7.1.2 for more details. + + The Telemetry Identifier (tmid) is an identifier that is generated by + DOTS clients to uniquely identify DOTS telemetry data that is + communicated prior to or during a mitigation. See Section 8.2 for + more details. + + "Overlapped" lower numeric 'tsid' (or 'tmid') refers to the lower + 'tsid' (or 'tmid') value of two overlapping telemetry requests. + + The term "pipe" represents the maximum level of traffic that the DOTS + client domain can receive. Whether a "pipe" is mapped to one or a + group of network interfaces is deployment specific. For example, + each interconnection link may be considered as a specific pipe if the + DOTS server is hosted by each upstream provider, while the aggregate + of all links to connect to upstream network providers can be + considered by a DOTS client domain as a single pipe when + communicating with a DOTS server not hosted by these upstream + providers. + + This document uses IANA-assigned Enterprise Numbers. These numbers + are also known as "Private Enterprise Numbers" and "SMI (Structure of + Management Information) Network Management Private Enterprise Codes" + [Private-Enterprise-Numbers]. + + The meanings of the symbols in YANG tree diagrams are defined in + [RFC8340] and [RFC8791]. + + Consistent with the convention set in Section 2 of [RFC8783], the + examples in Section 8.1.6 use "/restconf" as the discovered RESTCONF + API root path. Within these examples, some protocol header lines are + split into multiple lines for display purposes only. When a line + ends with a backslash ("\") as the last character, the line is + wrapped for display purposes. It is considered to be joined to the + next line by deleting the backslash, the following line break, and + the leading whitespace of the next line. + +3. DOTS Telemetry: Overview and Purpose + + Timely and effective signaling of up-to-date DDoS telemetry to all + elements involved in the mitigation process is essential and improves + the overall DDoS mitigation service's effectiveness. Bidirectional + feedback between DOTS agents is required for increased awareness by + each party of the attack and mitigation efforts, supporting a + superior and highly efficient attack mitigation service. + +3.1. Need for More Visibility + + When signaling a mitigation request, it is most certainly beneficial + for DOTS clients to signal to DOTS servers any knowledge regarding + ongoing attacks. This can happen in cases where DOTS clients are + asking DOTS servers for support in defending against attacks that + they have already detected and/or (partially) mitigated. + + If attacks are already detected and categorized within a DOTS client + domain, the DOTS server, and its associated mitigation services, can + proactively benefit from this information and optimize the overall + service delivery. It is important to note that DOTS client domains' + and DOTS server domains' detection and mitigation approaches can be + different and can potentially result in different results and attack + classifications. The DDoS mitigation service treats the ongoing + attack details received from DOTS clients as hints and cannot + completely rely on or trust the attack details conveyed by DOTS + clients. + + In addition to the DOTS server directly using telemetry data as + operational hints, the DOTS server's security operation team also + benefits from telemetry data. A basic requirement of security + operation teams is to be aware of and get visibility into the attacks + they need to handle. This holds especially for the case of ongoing + attacks, where DOTS telemetry provides data about the current attack + status. Even if some mitigation can be automated, operational teams + can use the DOTS telemetry information to be prepared for attack + mitigation and to assign the correct resources (e.g., operation + staff, networking resources, mitigation resources) for the specific + service. Similarly, security operations personnel at the DOTS client + side ask for feedback about their requests for protection. + Therefore, it is valuable for DOTS servers to share DOTS telemetry + with DOTS clients. + + Mutual sharing of information is thus crucial for "closing the + mitigation loop" between DOTS clients and servers. For the server- + side team, it is important to confirm that the same attacks that the + DOTS server's mitigation resources are seeing are those for which a + DOTS client is requesting mitigation. For the DOTS client-side team, + it is important to realize that the DOTS clients receive the required + service -- for example, understanding that "I asked for mitigation of + two attacks, and my DOTS server detects and mitigates only one of + them." Cases of inconsistency in attack classification between DOTS + clients and servers can be highlighted, and maybe handled, using the + DOTS telemetry attributes. + + In addition, management and orchestration systems, at both the DOTS + client and server sides, can use DOTS telemetry as feedback to + automate various control and management activities derived from + signaled telemetry information. + + If the DOTS server's mitigation resources have the capabilities to + facilitate the DOTS telemetry, the DOTS server adapts its protection + strategy and activates the required countermeasures immediately + (automation enabled) for the sake of optimized attack mitigation + decisions and actions. Discussion regarding the interface from the + DOTS server to the mitigator to signal the telemetry data is out of + scope for this document. + +3.2. Enhanced Detection + + DOTS telemetry can also be used as input for determining what values + to use for the tuning parameters available on the mitigation + resources. During the last few years, DDoS attack detection + technologies have evolved from threshold-based detection (that is, + cases when all or specific parts of traffic cross a predefined + threshold for a certain period of time is considered as an attack) to + an "anomaly detection" approach. For the latter, it is required to + maintain rigorous learning of "normal" behavior, and an "anomaly" (or + an attack) is identified and categorized based on the knowledge about + the normal behavior and a deviation from this normal behavior. + Statistical and artificial intelligence algorithms (e.g., machine + learning) are used such that the actual traffic thresholds are + automatically calculated by learning the protected entity's normal + traffic behavior during 'idle' time (i.e., no mitigation is active). + The normal traffic characterization learned is referred to as the + "normal traffic baseline". An attack is detected when the victim's + actual traffic is deviating from this normal baseline pattern. + + In addition, subsequent activities toward mitigating an attack are + much more challenging. The ability to distinguish legitimate traffic + from attacker traffic on a per-packet basis is complex. For example, + a packet may look "legitimate" and no attack signature can be + identified. The anomaly can be identified only after detailed + statistical analysis. DDoS attack mitigators use the normal baseline + during the mitigation of an attack to identify and categorize the + expected appearance of a specific traffic pattern. Particularly, the + mitigators use the normal baseline to recognize the "level of + normality" that needs to be achieved during the various mitigation + processes. + + Normal baseline calculation is performed based on continuous learning + of the normal behavior of the protected entities. The minimum + learning period varies from hours to days and even weeks, depending + on the protected applications' behavior. The baseline cannot be + learned during active attacks because attack conditions do not + characterize the protected entities' normal behavior. + + If the DOTS client has calculated the normal baseline of its + protected entities, signaling such information to the DOTS server + along with the attack traffic levels provides value. The DOTS server + benefits from this telemetry by tuning its mitigation resources with + the DOTS client's normal baseline. The DOTS server's mitigators use + the baseline to familiarize themselves with the attack victim's + normal behavior and target the baseline as the level of normality + they need to achieve. Fed with this information, the overall + mitigation performance is expected to be improved in terms of time to + mitigate, accuracy, and false-negative and false-positive rates. + + Mitigation of attacks without having certain knowledge of normal + traffic can be inaccurate at best. This is especially true for + recursive signaling (see Section 3.2.3 of [RFC8811]). Given that + DOTS clients can be integrated in a highly diverse set of scenarios + and use cases, this emphasizes the need for knowledge of the behavior + of each DOTS client domain -- especially given that common global + thresholds for attack detection can almost never be realized. Each + DOTS client domain can have its own levels of traffic and normal + behavior. Without facilitating normal baseline signaling, it may be + very difficult for DOTS servers in some cases to detect and mitigate + the attacks accurately: + + * It is important to emphasize that it is practically impossible for + the DOTS server's mitigators to calculate the normal baseline in + cases where they do not have any knowledge of the traffic + beforehand. + + Of course, this information can be provided using out-of-band + mechanisms or manual configuration, at the risk of unmaintained + information becoming inaccurate as the network evolves and "normal" + patterns change. The use of a dynamic and collaborative means + between the DOTS client and server to identify and share key + parameters for the sake of efficient DDoS protection is valuable. + +3.3. Efficient Mitigation + + During a high-volume attack, DOTS client pipes can be totally + saturated. DOTS clients ask their DOTS servers to handle the attack + upstream so that DOTS client pipes return to a reasonable load level + (normal pattern, ideally). At this point, it is essential to ensure + that the mitigator does not overwhelm the DOTS client pipes by + sending back large volumes of "clean traffic", or what it believes is + "clean". This can happen when the mitigator has not managed to + detect and mitigate all the attacks launched toward the DOTS client + domain. + + In this case, it can be valuable to DOTS clients to signal to DOTS + servers the total pipe capacity, which is the level of traffic the + DOTS client domain can absorb from its upstream network. This is + usually the circuit size, which includes all the packet overheads. + Dynamic updates of the condition of pipes between DOTS agents while + they are under a DDoS attack are essential (e.g., where multiple DOTS + clients share the same physical connectivity pipes). The DOTS server + should activate other mechanisms to ensure that it does not allow the + DOTS client domain's pipes to be saturated unintentionally. The + rate-limit action defined in [RFC8783] is a reasonable candidate to + achieve this objective; the DOTS client can indicate the type(s) of + traffic (such as ICMP, UDP, TCP port number 80) it prefers to limit. + The rate-limit action can be controlled via the signal channel + [RFC9133] even when the pipe is overwhelmed. + +4. Design Overview + +4.1. Overview of Telemetry Operations + + The DOTS protocol suite is divided into two logical channels: the + signal channel [RFC9132] and data channel [RFC8783]. This division + is due to the vastly different requirements placed upon the traffic + they carry. The DOTS signal channel must remain available and usable + even in the face of attack traffic that might, for example, saturate + one direction of the links involved, rendering acknowledgment-based + mechanisms unreliable and strongly incentivizing messages to be small + enough to be contained in a single IP packet (Section 2.2 of + [RFC8612]). In contrast, the DOTS data channel is available for + high-bandwidth data transfer before or after an attack, using more + conventional transport protocol techniques (Section 2.3 of + [RFC8612]). It is generally preferable to perform advance + configuration over the DOTS data channel, including configuring + aliases for static or nearly static data sets such as sets of network + addresses/prefixes that might be subject to related attacks. This + design helps to optimize the use of the DOTS signal channel for the + small messages that are important to deliver during an attack. As a + reminder, the DOTS signal channel and data channel both require + secure communication channels (Section 11 of [RFC9132] and Section 10 + of [RFC8783]). + + Telemetry information has aspects that correspond to both operational + modes (i.e., signal channel and data channel): there is certainly a + need to convey updated information about ongoing attack traffic and + targets during an attack, so as to convey detailed information about + mitigation status and inform updates to mitigation strategy in the + face of adaptive attacks. However, it is also useful to provide + mitigation services with a picture of normal or "baseline" traffic + toward potential targets to aid in detecting when incoming traffic + deviates from normal into being an attack. Also, one might populate + a "database" of classifications of known types of attacks so that a + short attack identifier can be used during an attack period to + describe an observed attack. This specification does make provision + for use of the DOTS data channel for the latter function + (Section 8.1.6) but otherwise retains most telemetry functionality in + the DOTS signal channel. + + Note that it is a functional requirement to convey information about + ongoing attack traffic during an attack, and information about + baseline traffic uses an essentially identical data structure that is + naturally defined to sit next to the description of attack traffic. + The related telemetry setup information used to parameterize actual + traffic data is also sent over the signal channel, out of expediency. + + This document specifies an extension to the DOTS signal channel + protocol. Considerations about how to establish, maintain, and make + use of the DOTS signal channel are specified in [RFC9132]. + + Once the DOTS signal channel is established, DOTS clients that + support the DOTS telemetry extension proceed with the telemetry setup + configuration (e.g., measurement interval, telemetry notification + interval, pipe capacity, normal traffic baseline) as detailed in + Section 7. DOTS agents can then include DOTS telemetry attributes + using the DOTS signal channel (Section 8.1). A DOTS client can use + separate messages to share with its DOTS server(s) a set of telemetry + data bound to an ongoing mitigation (Section 8.2). Also, a DOTS + client that is interested in receiving telemetry notifications + related to some of its resources follows the procedure defined in + Section 8.3. A DOTS client that receives such notifications can then + decide to send a mitigation request if an attack cannot be mitigated + locally within the DOTS client domain. + + Aggregate DOTS telemetry data can also be included in efficacy update + (Section 9.1) or mitigation update (Section 9.2) messages. + +4.2. Block-Wise Transfers + + DOTS clients can use a block-wise transfer [RFC7959] with the + recommendation detailed in Section 4.4.2 of [RFC9132] to control the + size of a response when the data to be returned does not fit within a + single datagram. + + DOTS clients can also use the Constrained Application Protocol (CoAP) + Block1 Option in a PUT request (Section 2.5 of [RFC7959]) to initiate + large transfers, but these Block1 transfers are likely to fail if the + inbound "pipe" is running full because the transfer requires a + message from the server for each block, which would likely be lost in + the incoming flood. Consideration needs to be made to try to fit + this PUT into a single transfer or to separate out the PUT into + several discrete PUTs where each of them fits into a single packet. + + Q-Block1 and Q-Block2 Options that are similar to the CoAP Block1 and + Block2 Options, but enable robust transmissions of big blocks of data + with less packet interchanges using NON messages, are defined in + [RFC9177]. DOTS implementations can consider the use of Q-Block1 and + Q-Block2 Options [DOTS-Robust-Blocks]. + +4.3. DOTS Multihoming Considerations + + Considerations for multihomed DOTS clients to select which DOTS + server to contact and which IP prefixes to include in a telemetry + message to a given peer DOTS server are discussed in + [DOTS-Multihoming]. For example, if each upstream network exposes a + DOTS server and the DOTS client maintains DOTS channels with all of + them, only the information related to prefixes assigned by an + upstream network to the DOTS client domain will be signaled via the + DOTS channel established with the DOTS server of that upstream + network. + + Considerations related to whether (and how) a DOTS client gleans some + telemetry information (e.g., attack details) it receives from a first + DOTS server and shares it with a second DOTS server are + implementation and deployment specific. + +4.4. YANG Considerations + + Telemetry messages exchanged between DOTS agents are serialized using + Concise Binary Object Representation (CBOR) [RFC8949]. CBOR-encoded + payloads are used to carry signal-channel-specific payload messages + that convey request parameters and response information such as + errors. + + This document specifies a YANG module [RFC7950] for representing DOTS + telemetry message types (Section 11.1). All parameters in the + payload of the DOTS signal channel are mapped to CBOR types as + specified in Section 12. As a reminder, Section 3 of [RFC9132] + defines the rules for mapping YANG-modeled data to CBOR. + + The DOTS telemetry module (Section 11.1) is not intended to be used + via the Network Configuration Protocol (NETCONF) / RESTCONF for DOTS + server management purposes. It serves only to provide a data model + and encoding following [RFC8791]. Server deviations (Section 5.6.3 + of [RFC7950]) are strongly discouraged, as the peer DOTS agent does + not have the means to retrieve the list of deviations and thus + interoperability issues are likely to be encountered. + + The DOTS telemetry module (Section 11.1) uses "enumerations" rather + than "identities" to define units, samples, and intervals because + otherwise the namespace identifier "ietf-dots-telemetry" must be + included when a telemetry attribute is included (e.g., in a + mitigation efficacy update). The use of "identities" is thus + suboptimal from the standpoint of message compactness, as message + compactness is one of the key requirements for DOTS signal channel + messages. + + The DOTS telemetry module (Section 11.1) includes some lists for + which no "key" statement is included. This behavior is compliant + with [RFC8791]. The reason for not including these keys is that they + are not included in the message body of DOTS requests; such keys are + included as mandatory Uri-Paths in requests (Sections 7 and 8). + Otherwise, whenever a "key" statement is used in the module, the same + definition as the definition provided in Section 7.8.2 of [RFC7950] + is assumed. + + Some parameters (e.g., low-percentile values) may be associated with + different YANG types (e.g., decimal64 and yang:gauge64). To easily + distinguish the types of these parameters while using meaningful + names, the following suffixes are used: + + +========+==============+==================+ + | Suffix | YANG Type | Example | + +========+==============+==================+ + | -g | yang:gauge64 | low-percentile-g | + +--------+--------------+------------------+ + | -c | container | connection-c | + +--------+--------------+------------------+ + | -ps | per second | connection-ps | + +--------+--------------+------------------+ + + Table 1: Suffixes and YANG Types + + The full tree diagram of the DOTS telemetry module can be generated + using the "pyang" tool [PYANG]. That tree is not included here + because it is too long (Section 3.3 of [RFC8340]). Instead, subtrees + are provided for the reader's convenience. + + In order to optimize the data exchanged over the DOTS signal channel, + this document specifies a second YANG module ("ietf-dots-mapping"; + see Section 11.2) that augments the DOTS data channel [RFC8783]. + This augmentation can be used during 'idle' time to share the attack + mapping details (Section 8.1.5). DOTS clients can use tools, e.g., + the YANG Library [RFC8525], to retrieve the list of features and + deviations supported by the DOTS server over the data channel. + +5. Generic Considerations + +5.1. DOTS Client Identification + + Following the rules in Section 4.4.1 of [RFC9132], a unique + identifier is generated by a DOTS client to prevent request + collisions ('cuid'). + + As a reminder, Section 4.4.1.3 of [RFC9132] forbids 'cuid' to be + returned in a response message body. + +5.2. DOTS Gateways + + DOTS gateways may be located between DOTS clients and servers. The + considerations elaborated in Section 4.4.1 of [RFC9132] must be + followed. In particular, the 'cdid' attribute is used to + unambiguously identify a DOTS client domain. + + As a reminder, Section 4.4.1.3 of [RFC9132] forbids 'cdid' (if + present) to be returned in a response message body. + +5.3. Uri-Path Parameters and Empty Values + + Uri-Path parameters and attributes with empty values MUST NOT be + present in a request. The presence of such an empty value renders + the entire containing message invalid. + +5.4. Controlling Configuration Data + + The DOTS server follows the same considerations discussed in + Section 4.5.3 of [RFC9132] for managing DOTS telemetry configuration + freshness and notifications. + + Likewise, a DOTS client may control the selection of configuration + and non-configuration data nodes when sending a GET request by means + of the 'c' (content) Uri-Query option and following the procedure + specified in Section 4.4.2 of [RFC9132]. These considerations are + not reiterated in the following sections. + +5.5. Message Validation + + The authoritative references for validating telemetry messages + exchanged over the DOTS signal channel are Sections 7, 8, and 9 + together with the mapping table provided in Section 12. The + structure of telemetry message bodies is represented as a YANG data + structure (Section 11.1). + +5.6. A Note about Examples + + Examples are provided for illustration purposes. This document does + not aim to provide a comprehensive list of message examples. + + JSON encoding of YANG-modeled data is used to illustrate the various + telemetry operations. To ease readability, parameter names and their + JSON types are thus used in the examples rather than their CBOR key + values and CBOR types following the mappings in Section 12. These + conventions are inherited from [RFC9132]. + + The examples use Enterprise Number 32473, which is defined for + documentation use; see [RFC5612]. + +6. Telemetry Operation Paths + + As discussed in Section 4.2 of [RFC9132], each DOTS operation is + indicated by a path suffix that indicates the intended operation. + The operation path is appended to the path prefix to form the URI + used with a CoAP request to perform the desired DOTS operation. The + following telemetry path suffixes are defined (Table 2): + + +=================+================+===========+ + | Operation | Operation Path | Details | + +=================+================+===========+ + | Telemetry Setup | /tm-setup | Section 7 | + +-----------------+----------------+-----------+ + | Telemetry | /tm | Section 8 | + +-----------------+----------------+-----------+ + + Table 2: DOTS Telemetry Operations + + Consequently, the "ietf-dots-telemetry" YANG module defined in + Section 11.1 defines a data structure to represent new DOTS message + types called 'telemetry-setup' and 'telemetry'. The tree structure + is shown in Figure 1. More details are provided in Sections 7 and 8 + about the exact structure of 'telemetry-setup' and 'telemetry' + message types. + + structure dots-telemetry: + +-- (telemetry-message-type)? + +--:(telemetry-setup) + | ... + | +-- telemetry* [] + | ... + | +-- (setup-type)? + | +--:(telemetry-config) + | | ... + | +--:(pipe) + | | ... + | +--:(baseline) + | ... + +--:(telemetry) + ... + + Figure 1: New DOTS Message Types (YANG Tree Structure) + + DOTS implementations MUST support the Observe Option [RFC7641] for + 'tm' (Section 8). + +7. DOTS Telemetry Setup Configuration + + In reference to Figure 1, a DOTS telemetry setup message MUST include + only telemetry-related configuration parameters (Section 7.1), + information about DOTS client domain pipe capacity (Section 7.2), or + information about the telemetry traffic baseline (Section 7.3). As + such, requests that include a mix of telemetry configuration, pipe + capacity, and traffic baseline information MUST be rejected by DOTS + servers with a 4.00 (Bad Request) Response Code. + + A DOTS client can reset all installed DOTS telemetry setup + configuration data following the considerations detailed in + Section 7.4. + + A DOTS server may detect conflicts when processing requests related + to DOTS client domain pipe capacity or telemetry traffic baseline + information with requests from other DOTS clients of the same DOTS + client domain. More details are included in Section 7.5. + + Telemetry setup configuration is bound to a DOTS client domain. DOTS + servers MUST NOT expect DOTS clients to send regular requests to + refresh the telemetry setup configuration. Any available telemetry + setup configuration is valid until the DOTS server ceases to service + a DOTS client domain. DOTS servers MUST NOT reset 'tsid' because a + session failed with a DOTS client. DOTS clients update their + telemetry setup configuration upon change of a parameter that may + impact attack mitigation. + + DOTS telemetry setup configuration request and response messages are + marked as Confirmable messages (Section 2.1 of [RFC7252]). + +7.1. Telemetry Configuration + + DOTS telemetry uses several percentile values to provide a picture of + a traffic distribution overall, as opposed to just a single snapshot + of observed traffic at a single point in time. Modeling raw traffic + flow data as a distribution and describing that distribution entails + choosing a measurement period that the distribution will describe, + and a number of sampling intervals, or "buckets", within that + measurement period. Traffic within each bucket is treated as a + single event (i.e., averaged), and then the distribution of buckets + is used to describe the distribution of traffic over the measurement + period. A distribution can be characterized by statistical measures + (e.g., mean, median, and standard deviation) and also by reporting + the value of the distribution at various percentile levels of the + data set in question (e.g., "quartiles" that correspond to 25th, + 50th, and 75th percentiles). More details about percentile values + and their computation are found in Section 11.3 of [RFC2330]. + + DOTS telemetry uses up to three percentile values, plus the overall + peak, to characterize traffic distributions. Which percentile + thresholds are used for these "low-percentile", "mid-percentile", and + "high-percentile" values is configurable. Default values are defined + in Section 7.1.2. + + A DOTS client can negotiate with its server(s) a set of telemetry + configuration parameters to be used for telemetry. Such parameters + include: + + * Percentile-related measurement parameters. In particular, + 'measurement-interval' defines the period during which percentiles + are computed, while 'measurement-sample' defines the time + distribution for measuring values that are used to compute + percentiles. + + * Measurement units. + + * Acceptable percentile values. + + * Telemetry notification interval. + + * Acceptable server-originated telemetry. + +7.1.1. Retrieving the Current DOTS Telemetry Configuration + + A GET request is used to obtain acceptable and current telemetry + configuration parameters on the DOTS server. This request may + include a 'cdid' Uri-Path when the request is relayed by a DOTS + gateway. An example of such a GET request (without a gateway) is + depicted in Figure 2. + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + + Figure 2: GET to Retrieve the Current and Acceptable DOTS Telemetry + Configuration + + Upon receipt of such a request, and assuming that no error is + encountered when processing the request, the DOTS server replies with + a 2.05 (Content) response that conveys the telemetry parameters that + are acceptable to the DOTS server, any pipe information + (Section 7.2), and the current baseline information (Section 7.3) + maintained by the DOTS server for this DOTS client. The tree + structure of the response message body is provided in Figure 3. + + DOTS servers that support the capability of sending telemetry + information to DOTS clients prior to or during a mitigation + (Section 9.2) set 'server-originated-telemetry' under 'max-config- + values' to 'true' ('false' is used otherwise). If 'server- + originated-telemetry' is not present in a response, this is + equivalent to receiving a response with 'server-originated-telemetry' + set to 'false'. + + structure dots-telemetry: + +-- (telemetry-message-type)? + +--:(telemetry-setup) + | +-- (direction)? + | | +--:(server-to-client-only) + | | +-- max-config-values + | | | +-- measurement-interval? interval + | | | +-- measurement-sample? sample + | | | +-- low-percentile? percentile + | | | +-- mid-percentile? percentile + | | | +-- high-percentile? percentile + | | | +-- server-originated-telemetry? boolean + | | | +-- telemetry-notify-interval? uint16 + | | +-- min-config-values + | | | +-- measurement-interval? interval + | | | +-- measurement-sample? sample + | | | +-- low-percentile? percentile + | | | +-- mid-percentile? percentile + | | | +-- high-percentile? percentile + | | | +-- telemetry-notify-interval? uint16 + | | +-- supported-unit-classes + | | | +-- unit-config* [unit] + | | | +-- unit unit-class + | | | +-- unit-status boolean + | | +-- supported-query-type* query-type + | +-- telemetry* [] + | +-- (direction)? + | | +--:(server-to-client-only) + | | +-- tsid? uint32 + | +-- (setup-type)? + | +--:(telemetry-config) + | | +-- current-config + | | +-- measurement-interval? interval + | | +-- measurement-sample? sample + | | +-- low-percentile? percentile + | | +-- mid-percentile? percentile + | | +-- high-percentile? percentile + | | +-- unit-config* [unit] + | | | +-- unit unit-class + | | | +-- unit-status boolean + | | +-- server-originated-telemetry? boolean + | | +-- telemetry-notify-interval? uint16 + | +--:(pipe) + | | ... + | +--:(baseline) + | ... + +--:(telemetry) + ... + + Figure 3: Telemetry Configuration Tree Structure + + When both 'min-config-values' and 'max-config-values' attributes are + present, the values carried in 'max-config-values' attributes MUST be + greater than or equal to their counterparts in 'min-config-values' + attributes. + +7.1.2. Conveying the DOTS Telemetry Configuration + + A PUT request is used to convey the configuration parameters for the + telemetry data (e.g., low-, mid-, or high-percentile values). For + example, a DOTS client may contact its DOTS server to change the + default percentile values used as the baseline for telemetry data. + Figure 3 lists the attributes that can be set by a DOTS client in + such a PUT request. An example of a DOTS client that modifies all + percentile reference values is shown in Figure 4. + + | Note: The payload of the message depicted in Figure 4 is CBOR- + | encoded as indicated by setting the Content-Format entry to + | "application/dots+cbor" (Section 10.3 of [RFC9132]). However, + | and for the sake of better readability, the example (and other + | similar figures depicting a DOTS telemetry message body) + | follows the conventions set in Section 5.6: use the JSON names + | and types defined in Section 12. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=123" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "current-config": { + "low-percentile": "5.00", + "mid-percentile": "65.00", + "high-percentile": "95.00" + } + } + ] + } + } + + Figure 4: PUT to Convey the DOTS Telemetry Configuration, + Depicted as per Section 5.6 + + 'cuid' is a mandatory Uri-Path parameter for PUT requests. + + The following additional Uri-Path parameter is defined: + + tsid: The Telemetry Setup Identifier is an identifier for the DOTS + telemetry setup configuration data represented as an integer. + This identifier MUST be generated by DOTS clients. 'tsid' values + MUST increase monotonically whenever new configuration parameters + (not just for changed values) need to be conveyed by the DOTS + client. + + The procedure specified in Section 4.4.1 of [RFC9132] for 'mid' + rollover MUST also be followed for 'tsid' rollover. + + This is a mandatory attribute. 'tsid' MUST appear after 'cuid' in + the Uri-Path options. + + 'cuid' and 'tsid' MUST NOT appear in the PUT request message body. + + At least one configurable attribute MUST be present in the PUT + request. + + A PUT request with a higher numeric 'tsid' value overrides the DOTS + telemetry configuration data installed by a PUT request with a lower + numeric 'tsid' value. To avoid maintaining a long list of 'tsid' + requests for requests carrying telemetry configuration data from a + DOTS client, the lower numeric 'tsid' MUST be automatically deleted + and no longer be available at the DOTS server. + + The DOTS server indicates the result of processing the PUT request + using the following Response Codes: + + * If the request is missing a mandatory attribute, does not include + 'cuid' or 'tsid' Uri-Path parameters, or contains one or more + invalid or unknown parameters, a 4.00 (Bad Request) Response Code + MUST be returned in the response. + + * If the DOTS server does not find the 'tsid' parameter value + conveyed in the PUT request in its configuration data and if the + DOTS server has accepted the configuration parameters, then a 2.01 + (Created) Response Code MUST be returned in the response. + + * If the DOTS server finds the 'tsid' parameter value conveyed in + the PUT request in its configuration data and if the DOTS server + has accepted the updated configuration parameters, a 2.04 + (Changed) Response Code MUST be returned in the response. + + * If any of the enclosed configurable attribute values are not + acceptable to the DOTS server (Section 7.1.1), a 4.22 + (Unprocessable Entity) Response Code MUST be returned in the + response. + + The DOTS client may retry and send the PUT request with updated + attribute values acceptable to the DOTS server. + + By default, low-percentile (10th percentile), mid-percentile (50th + percentile), high-percentile (90th percentile), and peak (100th + percentile) values are used to represent telemetry data. + Nevertheless, a DOTS client can disable some percentile types (low, + mid, high). In particular, setting 'low-percentile' to "0.00" + indicates that the DOTS client is not interested in receiving low- + percentiles. Likewise, setting 'mid-percentile' (or 'high- + percentile') to the same value as 'low-percentile' (or 'mid- + percentile') indicates that the DOTS client is not interested in + receiving mid-percentiles (or high-percentiles). For example, a DOTS + client can send the request depicted in Figure 5 to inform the server + that it is interested in receiving only high-percentiles. This + assumes that the client will only use that percentile type when + sharing telemetry data with the server. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=124" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "current-config": { + "low-percentile": "0.00", + "mid-percentile": "0.00", + "high-percentile": "95.00" + } + } + ] + } + } + + Figure 5: PUT to Disable Low- and Mid-Percentiles, Depicted as + per Section 5.6 + + DOTS clients can also configure the unit class(es) to be used for + traffic-related telemetry data among the following supported unit + classes: packets per second, bits per second, and bytes per second. + Supplying both bits per second and bytes per second unit classes is + allowed for a given set of telemetry data. However, receipt of + conflicting values is treated as invalid parameters and rejected with + a 4.00 (Bad Request) Response Code. + + DOTS clients that are interested in receiving pre-or-ongoing- + mitigation telemetry ('pre-or-ongoing-mitigation') information from a + DOTS server (Section 9.2) MUST set 'server-originated-telemetry' to + 'true'. If 'server-originated-telemetry' is not present in a PUT + request, this is equivalent to receiving a request with 'server- + originated-telemetry' set to 'false'. An example of a request to + enable pre-or-ongoing-mitigation telemetry from DOTS servers is shown + in Figure 6. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=125" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "current-config": { + "server-originated-telemetry": true + } + } + ] + } + } + + Figure 6: PUT to Enable Pre-or-Ongoing-Mitigation Telemetry from + the DOTS Server, Depicted as per Section 5.6 + +7.1.3. Retrieving the Installed DOTS Telemetry Configuration + + A DOTS client may issue a GET message with a 'tsid' Uri-Path + parameter to retrieve the current DOTS telemetry configuration. An + example of such a request is depicted in Figure 7. + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=123" + + Figure 7: GET to Retrieve the Current DOTS Telemetry Configuration + + If the DOTS server does not find the 'tsid' Uri-Path value conveyed + in the GET request in its configuration data for the requesting DOTS + client, it MUST respond with a 4.04 (Not Found) error Response Code. + +7.1.4. Deleting the DOTS Telemetry Configuration + + A DELETE request is used to delete the installed DOTS telemetry + configuration data (Figure 8). 'cuid' and 'tsid' are mandatory Uri- + Path parameters for such DELETE requests. + + Header: DELETE (Code=0.04) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=123" + + Figure 8: Deleting the Telemetry Configuration + + The DOTS server resets the DOTS telemetry configuration back to the + default values and acknowledges a DOTS client's request to remove the + DOTS telemetry configuration using a 2.02 (Deleted) Response Code. A + 2.02 (Deleted) Response Code is returned even if the 'tsid' parameter + value conveyed in the DELETE request does not exist in its + configuration data before the request. + + Section 7.4 discusses the procedure to reset all DOTS telemetry setup + configuration data. + +7.2. Total Pipe Capacity + + A DOTS client can communicate to the DOTS server(s) its DOTS client + domain pipe information. The tree structure of the pipe information + is shown in Figure 9. + + structure dots-telemetry: + +-- (telemetry-message-type)? + +--:(telemetry-setup) + | ... + | +-- telemetry* [] + | +-- (direction)? + | | +--:(server-to-client-only) + | | +-- tsid? uint32 + | +-- (setup-type)? + | +--:(telemetry-config) + | | ... + | +--:(pipe) + | | +-- total-pipe-capacity* [link-id unit] + | | +-- link-id nt:link-id + | | +-- capacity uint64 + | | +-- unit unit + | +--:(baseline) + | ... + +--:(telemetry) + ... + + Figure 9: Pipe Tree Structure + + A DOTS client domain pipe is defined as a list of limits on + (incoming) traffic volume ('total-pipe-capacity') that can be + forwarded over ingress interconnection links of a DOTS client domain. + Each of these links is identified with a 'link-id' [RFC8345]. + + The unit used by a DOTS client when conveying pipe information is + captured in the 'unit' attribute. The DOTS client MUST auto-scale so + that the appropriate unit is used. That is, for a given unit class, + the DOTS client uses the largest unit that gives a value greater than + one. As such, only one unit per unit class is allowed. + +7.2.1. Conveying DOTS Client Domain Pipe Capacity + + Considerations similar to those specified in Section 7.1.2 are + followed, with one exception: + + * The relative order of two PUT requests carrying DOTS client domain + pipe attributes from a DOTS client is determined by comparing + their respective 'tsid' values. If these two requests have + overlapping 'link-id' and 'unit' settings, the PUT request with a + higher numeric 'tsid' value will override the request with a lower + numeric 'tsid' value. The overlapped lower numeric 'tsid' MUST be + automatically deleted and no longer be available. + + DOTS clients SHOULD minimize the number of active 'tsid's used for + pipe information. In order to avoid maintaining a long list of + 'tsid's for pipe information, it is RECOMMENDED that DOTS clients + include in any request to update information related to a given link + the information regarding other links (already communicated using a + lower 'tsid' value). By doing so, this update request will override + these existing requests and hence optimize the number of 'tsid' + requests per DOTS client. + + | Note: This assumes that all link information can fit in one + | single message. + + As an example of configuring pipe information, a DOTS client managing + a single-homed domain (Figure 10) can send a PUT request (shown in + Figure 11) to communicate the capacity of "link1" used to connect to + its ISP. + + ,--,--,--. ,--,--,--. + ,-' `-. ,-' `-. + ( DOTS Client )=====( ISP#A ) + `-. Domain ,-' link1 `-. ,-' + `--'--'--' `--'--'--' + + Figure 10: Single-Homed DOTS Client Domain + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=126" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "total-pipe-capacity": [ + { + "link-id": "link1", + "capacity": "500", + "unit": "megabit-ps" + } + ] + } + ] + } + } + + Figure 11: Example of a PUT Request to Convey Pipe Information + (Single-Homed), Depicted as per Section 5.6 + + DOTS clients may be instructed to signal a link aggregate instead of + individual links. For example, a DOTS client that manages a DOTS + client domain having two interconnection links with an upstream ISP + (Figure 12) can send a PUT request (shown in Figure 13) to + communicate the aggregate link capacity with its ISP. Signaling + individual or aggregate link capacity is deployment specific. + + ,--,--,--. ,--,--,--. + ,-' `-.===== ,-' `-. + ( DOTS Client ) ( ISP#C ) + `-. Domain ,-'====== `-. ,-' + `--'--'--' `--'--'--' + + Figure 12: DOTS Client Domain with Two Interconnection Links + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=hmcpH87lmPGsSTjkhXCbin" + Uri-Path: "tsid=896" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "total-pipe-capacity": [ + { + "link-id": "aggregate", + "capacity": "700", + "unit": "megabit-ps" + } + ] + } + ] + } + } + + Figure 13: Example of a PUT Request to Convey Pipe Information + (Aggregated Link), Depicted as per Section 5.6 + + Now consider that the DOTS client domain was upgraded to connect to + an additional ISP (e.g., ISP#B in Figure 14); the DOTS client can + inform a DOTS server that is not hosted with ISP#A and ISP#B domains + about this update by sending the PUT request depicted in Figure 15. + This request also includes information related to "link1" even if + that link is not upgraded. Upon receipt of this request, the DOTS + server removes the request with 'tsid=126' and updates its + configuration base to maintain two links (link1 and link2). + + ,--,--,--. + ,-' `-. + ( ISP#B ) + `-. ,-' + `--'--'--' + || + || link2 + ,--,--,--. ,--,--,--. + ,-' `-. ,-' `-. + ( DOTS Client )=====( ISP#A ) + `-. Domain ,-' link1 `-. ,-' + `--'--'--' `--'--'--' + + Figure 14: Multihomed DOTS Client Domain + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=127" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "total-pipe-capacity": [ + { + "link-id": "link1", + "capacity": "500", + "unit": "megabit-ps" + }, + { + "link-id": "link2", + "capacity": "500", + "unit": "megabit-ps" + } + ] + } + ] + } + } + + Figure 15: Example of a PUT Request to Convey Pipe Information + (Multihomed), Depicted as per Section 5.6 + + A DOTS client can delete a link by sending a PUT request with the + 'capacity' attribute set to "0" if other links are still active for + the same DOTS client domain. For example, if a DOTS client domain + re-homes (that is, it changes its ISP), the DOTS client can inform + its DOTS server about this update (e.g., from the network + configuration in Figure 10 to the network configuration shown in + Figure 16) by sending the PUT request depicted in Figure 17. Upon + receipt of this request, and assuming that no error is encountered + when processing the request, the DOTS server removes "link1" from its + configuration bases for this DOTS client domain. Note that if the + DOTS server receives a PUT request with a 'capacity' attribute set to + "0" for all included links, it MUST reject the request with a 4.00 + (Bad Request) Response Code. Instead, the DOTS client can use a + DELETE request to delete all links (Section 7.2.3). + + ,--,--,--. + ,-' `-. + ( ISP#B ) + `-. ,-' + `--'--'--' + || + || link2 + ,--,--,--. + ,-' `-. + ( DOTS Client ) + `-. Domain ,-' + `--'--'--' + + Figure 16: Multihomed DOTS Client Domain + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=128" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "total-pipe-capacity": [ + { + "link-id": "link1", + "capacity": "0", + "unit": "megabit-ps" + }, + { + "link-id": "link2", + "capacity": "500", + "unit": "megabit-ps" + } + ] + } + ] + } + } + + Figure 17: Example of a PUT Request to Convey Pipe Information + (Multihomed), Depicted as per Section 5.6 + +7.2.2. Retrieving Installed DOTS Client Domain Pipe Capacity + + A GET request with a 'tsid' Uri-Path parameter is used to retrieve + the specific information related to an installed DOTS client domain + pipe. The same procedure as that defined in Section 7.1.3 is + followed. + + To retrieve all pipe information bound to a DOTS client, the DOTS + client proceeds as specified in Section 7.1.1. + +7.2.3. Deleting Installed DOTS Client Domain Pipe Capacity + + A DELETE request is used to delete the specific information related + to an installed DOTS client domain pipe. The same procedure as that + defined in Section 7.1.4 is followed. + +7.3. Telemetry Baseline + + A DOTS client can communicate to its DOTS server(s) its normal + traffic baseline and connection capacity: + + Total traffic normal baseline: Total traffic normal baseline data + provides the percentile values representing the total traffic + normal baseline. It can be represented for a target using 'total- + traffic-normal'. + + The traffic normal per-protocol ('total-traffic-normal-per- + protocol') baseline is represented for a target and is transport- + protocol specific. + + The traffic normal per-port-number ('total-traffic-normal-per- + port') baseline is represented for each port number bound to a + target. + + If the DOTS client negotiated percentile values and units + (Section 7.1), these negotiated parameters will be used instead of + the default parameters. For each unit class used, the DOTS client + MUST auto-scale so that the appropriate unit is used. + + Total connection capacity: If the target is susceptible to resource- + consuming DDoS attacks, the following optional attributes for the + target per transport protocol are useful for detecting resource- + consuming DDoS attacks: + + * The maximum number of simultaneous connections that are allowed + to the target. + + * The maximum number of simultaneous connections that are allowed + to the target per client. + + * The maximum number of simultaneous embryonic connections that + are allowed to the target. The term "embryonic connection" + refers to a connection whose connection handshake is not + finished. Embryonic connections are only possible in + connection-oriented transport protocols like TCP or the Stream + Control Transmission Protocol (SCTP) [RFC9260]. + + * The maximum number of simultaneous embryonic connections that + are allowed to the target per client. + + * The maximum number of connections allowed per second to the + target. + + * The maximum number of connections allowed per second to the + target per client. + + * The maximum number of requests (e.g., HTTP/DNS/SIP requests) + allowed per second to the target. + + * The maximum number of requests allowed per second to the target + per client. + + * The maximum number of outstanding partial requests allowed to + the target. Attacks relying upon partial requests create a + connection with a target but do not send a complete request + (e.g., an HTTP request). + + * The maximum number of outstanding partial requests allowed to + the target per client. + + The aggregate per transport protocol is captured in 'total- + connection-capacity', while port-specific capabilities are + represented using 'total-connection-capacity-per-port'. + + Note that a target resource is identified using the attributes + 'target-prefix', 'target-port-range', 'target-protocol', 'target- + fqdn', 'target-uri', or 'alias-name' as defined in Section 4.4.1.1 of + [RFC9132]. + + The tree structure of the normal traffic baseline is shown in + Figure 18. + + structure dots-telemetry: + +-- (telemetry-message-type)? + +--:(telemetry-setup) + | ... + | +-- telemetry* [] + | +-- (direction)? + | | +--:(server-to-client-only) + | | +-- tsid? uint32 + | +-- (setup-type)? + | +--:(telemetry-config) + | | ... + | +--:(pipe) + | | ... + | +--:(baseline) + | +-- baseline* [id] + | +-- id uint32 + | +-- target-prefix* + | | inet:ip-prefix + | +-- target-port-range* [lower-port] + | | +-- lower-port inet:port-number + | | +-- upper-port? inet:port-number + | +-- target-protocol* uint8 + | +-- target-fqdn* + | | inet:domain-name + | +-- target-uri* + | | inet:uri + | +-- alias-name* + | | string + | +-- total-traffic-normal* [unit] + | | +-- unit unit + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | +-- total-traffic-normal-per-protocol* + | | [unit protocol] + | | +-- protocol uint8 + | | +-- unit unit + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | +-- total-traffic-normal-per-port* [unit port] + | | +-- port inet:port-number + | | +-- unit unit + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | +-- total-connection-capacity* [protocol] + | | +-- protocol uint8 + | | +-- connection? uint64 + | | +-- connection-client? uint64 + | | +-- embryonic? uint64 + | | +-- embryonic-client? uint64 + | | +-- connection-ps? uint64 + | | +-- connection-client-ps? uint64 + | | +-- request-ps? uint64 + | | +-- request-client-ps? uint64 + | | +-- partial-request-max? uint64 + | | +-- partial-request-client-max? uint64 + | +-- total-connection-capacity-per-port* + | [protocol port] + | +-- port + | | inet:port-number + | +-- protocol uint8 + | +-- connection? uint64 + | +-- connection-client? uint64 + | +-- embryonic? uint64 + | +-- embryonic-client? uint64 + | +-- connection-ps? uint64 + | +-- connection-client-ps? uint64 + | +-- request-ps? uint64 + | +-- request-client-ps? uint64 + | +-- partial-request-max? uint64 + | +-- partial-request-client-max? uint64 + +--:(telemetry) + ... + + Figure 18: Telemetry Baseline Tree Structure + + A DOTS client can share one or multiple normal traffic baselines + (e.g., aggregate or per-prefix baselines); each is uniquely + identified within the DOTS client domain with an identifier ('id'). + This identifier can be used to update a baseline entry, delete a + specific entry, etc. + +7.3.1. Conveying DOTS Client Domain Baseline Information + + Considerations similar to those specified in Section 7.1.2 are + followed, with one exception: + + * The relative order of two PUT requests carrying DOTS client domain + baseline attributes from a DOTS client is determined by comparing + their respective 'tsid' values. If these two requests have + overlapping targets, the PUT request with a higher numeric 'tsid' + value will override the request with a lower numeric 'tsid' value. + The overlapped lower numeric 'tsid' MUST be automatically deleted + and no longer be available. + + Two PUT requests from a DOTS client have overlapping targets if there + is a common IP address, IP prefix, FQDN, URI, or alias name. Also, + two PUT requests from a DOTS client have overlapping targets from the + perspective of the DOTS server if the addresses associated with the + FQDN, URI, or alias are overlapping with each other or with 'target- + prefix'. + + DOTS clients SHOULD minimize the number of active 'tsid's used for + baseline information. In order to avoid maintaining a long list of + 'tsid's for baseline information, it is RECOMMENDED that DOTS clients + include in any request to update information related to a given + target the information regarding other targets (already communicated + using a lower 'tsid' value) (assuming that this information fits + within one single datagram). This update request will override these + existing requests and hence optimize the number of 'tsid' requests + per DOTS client. + + If no target attribute is included in the request, this is an + indication that the baseline information applies for the DOTS client + domain as a whole. + + An example of a PUT request to convey the baseline information is + shown in Figure 19. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=129" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "baseline": [ + { + "id": 1, + "target-prefix": [ + "2001:db8:6401::1/128", + "2001:db8:6401::2/128" + ], + "total-traffic-normal": [ + { + "unit": "megabit-ps", + "peak-g": "60" + } + ] + } + ] + } + ] + } + } + + Figure 19: PUT to Convey DOTS Traffic Baseline Information, + Depicted as per Section 5.6 + + The DOTS client may share protocol-specific baseline information + (e.g., TCP and UDP) as shown in Figure 20. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tsid=130" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry-setup": { + "telemetry": [ + { + "baseline": [ + { + "id": 1, + "target-prefix": [ + "2001:db8:6401::1/128", + "2001:db8:6401::2/128" + ], + "total-traffic-normal-per-protocol": [ + { + "unit": "megabit-ps", + "protocol": 6, + "peak-g": "50" + }, + { + "unit": "megabit-ps", + "protocol": 17, + "peak-g": "10" + } + ] + } + ] + } + ] + } + } + + Figure 20: PUT to Convey DOTS Traffic Baseline Information (2), + Depicted as per Section 5.6 + + The normal traffic baseline information should be updated to reflect + legitimate overloads (e.g., flash crowds) to prevent unnecessary + mitigation. + +7.3.2. Retrieving Installed Normal Traffic Baseline Information + + A GET request with a 'tsid' Uri-Path parameter is used to retrieve a + specific installed DOTS client domain's baseline traffic information. + The same procedure as that defined in Section 7.1.3 is followed. + + To retrieve all baseline information bound to a DOTS client, the DOTS + client proceeds as specified in Section 7.1.1. + +7.3.3. Deleting Installed Normal Traffic Baseline Information + + A DELETE request is used to delete the installed DOTS client domain's + normal traffic baseline information. The same procedure as that + defined in Section 7.1.4 is followed. + +7.4. Resetting the Installed Telemetry Setup + + Upon bootstrapping (or reboot or any other event that may alter the + DOTS client setup), a DOTS client MAY send a DELETE request to set + the telemetry parameters to default values. Such a request does not + include any 'tsid' parameters. An example of such a request is + depicted in Figure 21. + + Header: DELETE (Code=0.04) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm-setup" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + + Figure 21: Deleting the Telemetry Configuration + +7.5. Conflict with Other DOTS Clients of the Same Domain + + A DOTS server may detect conflicts between requests conveying pipe + and baseline information received from DOTS clients of the same DOTS + client domain. 'conflict-information' is used to report the conflict + to the DOTS client, following guidelines for conflict handling + similar to those discussed in Section 4.4.1 of [RFC9132]. The + conflict cause can be set to one of these values: + + 1: Overlapping targets (Section 4.4.1 of [RFC9132]). + + 5: Overlapping pipe scope (see Section 13). + +8. DOTS Pre-or-Ongoing-Mitigation Telemetry + + There are two broad types of DDoS attacks: bandwidth-consuming + attacks and target-resource-consuming attacks. This section outlines + the set of DOTS telemetry attributes (Section 8.1) that covers both + types of attacks. The objective of these attributes is to allow for + the complete knowledge of attacks and the various particulars that + can best characterize attacks. + + The "ietf-dots-telemetry" YANG module (Section 11.1) defines the data + structure of a new message type called 'telemetry'. The tree + structure of the 'telemetry' message type is shown in Figure 22. + + structure dots-telemetry: + +-- (telemetry-message-type)? + +--:(telemetry-setup) + | ... + | +-- telemetry* [] + | +-- (direction)? + | | +--:(server-to-client-only) + | | +-- tsid? uint32 + | +-- (setup-type)? + | +--:(telemetry-config) + | | ... + | +--:(pipe) + | | ... + | +--:(baseline) + | ... + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | ... + +-- total-traffic* [unit] + | ... + +-- total-traffic-protocol* [unit protocol] + | ... + +-- total-traffic-port* [unit port] + | ... + +-- total-attack-traffic* [unit] + | ... + +-- total-attack-traffic-protocol* [unit protocol] + | ... + +-- total-attack-traffic-port* [unit port] + | ... + +-- total-attack-connection-protocol* [protocol] + | ... + +-- total-attack-connection-port* [protocol port] + | ... + +-- attack-detail* [vendor-id attack-id] + ... + + Figure 22: Telemetry Message Type Tree Structure + + The pre-or-ongoing-mitigation telemetry attributes are indicated by + the path suffix '/tm'. '/tm' is appended to the path prefix to form + the URI used with a CoAP request to signal the DOTS telemetry. Pre- + or-ongoing-mitigation telemetry attributes as specified in + Section 8.1 can be signaled between DOTS agents. + + Pre-or-ongoing-mitigation telemetry attributes may be sent by a DOTS + client or a DOTS server. + + DOTS agents SHOULD bind pre-or-ongoing-mitigation telemetry data to + mitigation requests associated with the resources under attack. In + particular, a telemetry PUT request sent after a mitigation request + may include a reference to that mitigation request ('mid-list') as + shown in Figure 23. An example illustrating request correlation by + means of 'target-prefix' is shown in Figure 24. + + Much of the pre-or-ongoing-mitigation telemetry data uses a unit that + falls under the unit class that is configured following the procedure + described in Section 7.1.2. When generating telemetry data to send + to a peer, the DOTS agent MUST auto-scale so that one or more + appropriate units are used. + + +-----------+ +-----------+ + |DOTS client| |DOTS server| + +-----------+ +-----------+ + | | + |==============Mitigation Request (mid)==============>| + | | + |==============Telemetry (mid-list{mid})=============>| + | | + + Figure 23: Example of Request Correlation Using 'mid' + + +-----------+ +-----------+ + |DOTS client| |DOTS server| + +-----------+ +-----------+ + | | + |<===============Telemetry (target-prefix)============| + | | + |========Mitigation Request (target-prefix)==========>| + | | + + Figure 24: Example of Request Correlation Using 'target-prefix' + + DOTS agents MUST NOT send pre-or-ongoing-mitigation telemetry + notifications to the same peer more frequently than once every + 'telemetry-notify-interval' (Section 7.1). If a telemetry + notification is sent using a block-like transfer mechanism (e.g., + [RFC9177]), this rate-limit policy MUST NOT consider these individual + blocks as separate notifications, but as a single notification. + + DOTS pre-or-ongoing-mitigation telemetry request and response + messages MUST be marked as Non-confirmable messages (Section 2.1 of + [RFC7252]). + +8.1. Pre-or-Ongoing-Mitigation DOTS Telemetry Attributes + + Section 3 discusses the motivation for using the DOTS telemetry + attributes. These attributes are specified in the following + subsections. + +8.1.1. Target + + A target resource (Figure 25) is identified using the attributes + 'target-prefix', 'target-port-range', 'target-protocol', 'target- + fqdn', 'target-uri', 'alias-name', or a pointer to a mitigation + request ('mid-list'). + + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | +-- target-prefix* inet:ip-prefix + | +-- target-port-range* [lower-port] + | | +-- lower-port inet:port-number + | | +-- upper-port? inet:port-number + | +-- target-protocol* uint8 + | +-- target-fqdn* inet:domain-name + | +-- target-uri* inet:uri + | +-- alias-name* string + | +-- mid-list* uint32 + +-- total-traffic* [unit] + | ... + +-- total-traffic-protocol* [unit protocol] + | ... + +-- total-traffic-port* [unit port] + | ... + +-- total-attack-traffic* [unit] + | ... + +-- total-attack-traffic-protocol* [unit protocol] + | ... + +-- total-attack-traffic-port* [unit port] + | ... + +-- total-attack-connection-protocol* [protocol] + | ... + +-- total-attack-connection-port* [protocol port] + | ... + +-- attack-detail* [vendor-id attack-id] + ... + + Figure 25: Target Tree Structure + + At least one of the attributes 'target-prefix', 'target-fqdn', + 'target-uri', 'alias-name', or 'mid-list' MUST be present in the + target definition. + + If the target is susceptible to bandwidth-consuming attacks, the + attributes representing the percentile values of the 'attack-id' + attack traffic are included. + + If the target is susceptible to resource-consuming DDoS attacks, the + attributes defined in Section 8.1.4 are applicable for representing + the attack. + + At least the 'target' attribute and one other pre-or-ongoing- + mitigation attribute MUST be present in the DOTS telemetry message. + +8.1.2. Total Traffic + + The 'total-traffic' attribute (Figure 26) conveys the percentile + values (including peak and current observed values) of the total + observed traffic. More fine-grained information about the total + traffic can be conveyed in the 'total-traffic-protocol' and 'total- + traffic-port' attributes. + + The 'total-traffic-protocol' attribute represents the total traffic + for a target and is transport-protocol specific. + + The 'total-traffic-port' attribute represents the total traffic for a + target per port number. + + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | ... + +-- total-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-traffic-protocol* [unit protocol] + | +-- protocol uint8 + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-traffic-port* [unit port] + | +-- port inet:port-number + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-traffic* [unit] + | ... + +-- total-attack-traffic-protocol* [unit protocol] + | ... + +-- total-attack-traffic-port* [unit port] + | ... + +-- total-attack-connection-protocol* [protocol] + | ... + +-- total-attack-connection-port* [protocol port] + | ... + +-- attack-detail* [vendor-id attack-id] + ... + + Figure 26: Total Traffic Tree Structure + +8.1.3. Total Attack Traffic + + The 'total-attack-traffic' attribute (Figure 27) conveys the total + observed attack traffic. More fine-grained information about the + total attack traffic can be conveyed in the 'total-attack-traffic- + protocol' and 'total-attack-traffic-port' attributes. + + The 'total-attack-traffic-protocol' attribute represents the total + attack traffic for a target and is transport-protocol specific. + + The 'total-attack-traffic-port' attribute represents the total attack + traffic for a target per port number. + + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | ... + +-- total-traffic* [unit] + | ... + +-- total-traffic-protocol* [unit protocol] + | ... + +-- total-traffic-port* [unit port] + | ... + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-traffic-protocol* [unit protocol] + | +-- protocol uint8 + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-traffic-port* [unit port] + | +-- port inet:port-number + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-connection-protocol* [protocol] + | ... + +-- total-attack-connection-port* [protocol port] + | ... + +-- attack-detail* [vendor-id attack-id] + ... + + Figure 27: Total Attack Traffic Tree Structure + +8.1.4. Total Attack Connections + + If the target is susceptible to resource-consuming DDoS attacks, the + 'total-attack-connection-protocol' attribute is used to convey the + percentile values (including peak and current observed values) of + various attributes related to the total attack connections. The + following optional sub-attributes for the target per transport + protocol are included to represent the attack characteristics: + + * The number of simultaneous attack connections to the target. + + * The number of simultaneous embryonic connections to the target. + + * The number of attack connections per second to the target. + + * The number of attack requests per second to the target. + + * The number of attack partial requests to the target. + + The total attack connections per port number are represented using + the 'total-attack-connection-port' attribute. + + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | ... + +-- total-traffic* [unit] + | ... + +-- total-traffic-protocol* [unit protocol] + | ... + +-- total-traffic-port* [unit port] + | ... + +-- total-attack-traffic* [unit] + | ... + +-- total-attack-traffic-protocol* [unit protocol] + | ... + +-- total-attack-traffic-port* [unit port] + | ... + +-- total-attack-connection-protocol* [protocol] + | +-- protocol uint8 + | +-- connection-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- embryonic-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- connection-ps-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- request-ps-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- partial-request-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-connection-port* [protocol port] + | +-- protocol uint8 + | +-- port inet:port-number + | +-- connection-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- embryonic-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- connection-ps-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- request-ps-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- partial-request-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- attack-detail* [vendor-id attack-id] + ... + + Figure 28: Total Attack Connections Tree Structure + +8.1.5. Attack Details + + This attribute (depicted in Figure 29) is used to signal a set of + details characterizing an attack. The following sub-attributes + describing the ongoing attack can be signaled as attack details: + + vendor-id: Vendor ID. This parameter represents a security vendor's + enterprise number as registered in the IANA "Private Enterprise + Numbers" registry [Private-Enterprise-Numbers]. + + attack-id: Unique identifier assigned for the attack by a vendor. + This parameter MUST be present, independently of whether 'attack- + description' is included or not. + + description-lang: Indicates the language tag that is used for the + text that is included in the 'attack-description' attribute. This + attribute is encoded following the rules in Section 2.1 of + [RFC5646]. The default language tag is "en-US". + + attack-description: Textual representation of the attack + description. This description is related to the class of attack + rather than a specific instance of it. Natural Language + Processing techniques (e.g., word embedding) might provide some + utility in mapping the attack description to an attack type. + Textual representation of an attack solves two problems: it avoids + the need to (a) create mapping tables manually between vendors and + (b) standardize attack types that keep evolving. + + attack-severity: Attack severity level. This attribute takes one of + the values defined in Section 3.12.2 of [RFC7970]. + + start-time: The time the attack started. The attack's start time is + expressed in seconds relative to 1970-01-01T00:00Z (Section 3.4.2 + of [RFC8949]). The CBOR encoding is modified so that the leading + tag 1 (epoch-based date/time) MUST be omitted. + + end-time: The time the attack ended. The attack's end time is + expressed in seconds relative to 1970-01-01T00:00Z (Section 3.4.2 + of [RFC8949]). The CBOR encoding is modified so that the leading + tag 1 (epoch-based date/time) MUST be omitted. + + source-count: A count of sources involved in the attack targeting + the victim. + + top-talker: A list of attack sources that are involved in an attack + and that are generating an important part of the attack traffic. + The top talkers are represented using 'source-prefix'. + + 'spoofed-status' indicates whether a top talker is a spoofed IP + address (e.g., reflection attacks) or not. If no 'spoofed-status' + data node is included, this means that the spoofing status is + unknown. + + If the target is being subjected to a bandwidth-consuming attack, + a statistical profile of the attack traffic from each of the top + talkers is included ('total-attack-traffic'; see Section 8.1.3). + + If the target is being subjected to a resource-consuming DDoS + attack, the same attributes as those defined in Section 8.1.4 are + applicable for characterizing the attack on a per-talker basis. + + +--:(telemetry) + +-- pre-or-ongoing-mitigation* [] + +-- (direction)? + | +--:(server-to-client-only) + | +-- tmid? uint32 + +-- target + | ... + +-- total-traffic* [unit] + | ... + +-- total-traffic-protocol* [unit protocol] + | ... + +-- total-traffic-port* [unit port] + | ... + +-- total-attack-traffic* [unit] + | ... + +-- total-attack-traffic-protocol* [unit protocol] + | ... + +-- total-attack-traffic-port* [unit port] + | ... + +-- total-attack-connection-protocol* [protocol] + | ... + +-- total-attack-connection-port* [protocol port] + | ... + +-- attack-detail* [vendor-id attack-id] + +-- vendor-id uint32 + +-- attack-id uint32 + +-- description-lang? string + +-- attack-description? string + +-- attack-severity? attack-severity + +-- start-time? uint64 + +-- end-time? uint64 + +-- source-count + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- top-talker + +-- talker* [source-prefix] + +-- spoofed-status? boolean + +-- source-prefix inet:ip-prefix + +-- source-port-range* [lower-port] + | +-- lower-port inet:port-number + | +-- upper-port? inet:port-number + +-- source-icmp-type-range* [lower-type] + | +-- lower-type uint8 + | +-- upper-type? uint8 + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-connection-protocol* + [protocol] + +-- protocol uint8 + +-- connection-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- embryonic-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- connection-ps-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- request-ps-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- partial-request-c + +-- low-percentile-g? yang:gauge64 + +-- mid-percentile-g? yang:gauge64 + +-- high-percentile-g? yang:gauge64 + +-- peak-g? yang:gauge64 + +-- current-g? yang:gauge64 + + Figure 29: Attack Details Tree Structure + + In order to optimize the size of telemetry data conveyed over the + DOTS signal channel, DOTS agents MAY use the DOTS data channel + [RFC8783] to exchange vendor-specific attack mapping details (that + is, {vendor identifier, attack identifier} ==> textual representation + of the attack description). As such, DOTS agents do not have to + convey an attack description systematically in their telemetry + messages over the DOTS signal channel. Refer to Section 8.1.6. + +8.1.6. Vendor Attack Mapping + + Multiple mappings for different vendor identifiers may be used; the + DOTS agent transmitting telemetry information can elect to use one or + more vendor mappings even in the same telemetry message. + + | Note: It is possible that a DOTS server is making use of + | multiple DOTS mitigators, each from a different vendor. How + | telemetry information and vendor mappings are exchanged between + | DOTS servers and DOTS mitigators is outside the scope of this + | document. + + DOTS clients and servers may be provided with mappings from different + vendors and so have their own different sets of vendor attack + mappings. A DOTS agent MUST accept receipt of telemetry data with a + vendor identifier that is different than the identifier it uses to + transmit telemetry data. Furthermore, it is possible that the DOTS + client and DOTS server are provided by the same vendor but the vendor + mapping tables are at different revisions. The DOTS client SHOULD + transmit telemetry information using any vendor mapping(s) that it + provided to the DOTS server (e.g., using a POST as depicted in + Figure 30), and the DOTS server SHOULD use any vendor mappings(s) + provided to the DOTS client when transmitting telemetry data to the + peer DOTS agent. + + POST /restconf/data/ietf-dots-data-channel:dots-data\ + /dots-client=dz6pHjaADkaFTbjr0JGBpw HTTP/1.1 + Host: example.com + Content-Type: application/yang-data+json + + { + "ietf-dots-mapping:vendor-mapping": { + "vendor": [ + { + "vendor-id": 345, + "vendor-name": "mitigator-c", + "last-updated": "1629898958", + "attack-mapping": [ + { + "attack-id": 1, + "attack-description": + "Include a description of this attack" + }, + { + "attack-id": 2, + "attack-description": + "Again, include a description of the attack" + } + ] + } + ] + } + } + + Figure 30: POST to Install Vendor Attack Mapping Details + + The "ietf-dots-mapping" YANG module defined in Section 11.2 augments + the "ietf-dots-data-channel" module [RFC8783]. The tree structure of + the "ietf-dots-mapping" module is shown in Figure 31. + + module: ietf-dots-mapping + augment /data-channel:dots-data/data-channel:dots-client: + +--rw vendor-mapping {dots-telemetry}? + +--rw vendor* [vendor-id] + +--rw vendor-id uint32 + +--rw vendor-name? string + +--rw description-lang? string + +--rw last-updated uint64 + +--rw attack-mapping* [attack-id] + +--rw attack-id uint32 + +--rw attack-description string + augment /data-channel:dots-data/data-channel:capabilities: + +--ro vendor-mapping-enabled? boolean {dots-telemetry}? + augment /data-channel:dots-data: + +--ro vendor-mapping {dots-telemetry}? + +--ro vendor* [vendor-id] + +--ro vendor-id uint32 + +--ro vendor-name? string + +--ro description-lang? string + +--ro last-updated uint64 + +--ro attack-mapping* [attack-id] + +--ro attack-id uint32 + +--ro attack-description string + + Figure 31: Vendor Attack Mapping Tree Structure + + A DOTS client sends a GET request over the DOTS data channel to + retrieve the capabilities supported by a DOTS server as per + Section 7.1 of [RFC8783]. This request is meant to assess whether + the capability of sharing vendor attack mapping details is supported + by the server (i.e., check the value of 'vendor-mapping-enabled'). + + If 'vendor-mapping-enabled' is set to 'true', a DOTS client MAY send + a GET request to retrieve the DOTS server's vendor attack mapping + details. An example of such a GET request is shown in Figure 32. + + GET /restconf/data/ietf-dots-data-channel:dots-data\ + /ietf-dots-mapping:vendor-mapping HTTP/1.1 + Host: example.com + Accept: application/yang-data+json + + Figure 32: GET to Retrieve the Vendor Attack Mappings of a DOTS + Server + + A DOTS client can retrieve only the list of vendors supported by the + DOTS server. It does so by setting the "depth" parameter + (Section 4.8.2 of [RFC8040]) to "3" in the GET request as shown in + Figure 33. An example of a response body received from the DOTS + server as a response to such a request is illustrated in Figure 34. + + GET /restconf/data/ietf-dots-data-channel:dots-data\ + /ietf-dots-mapping:vendor-mapping?depth=3 HTTP/1.1 + Host: example.com + Accept: application/yang-data+json + + Figure 33: GET to Retrieve the Vendors List Used by a DOTS Server + + { + "ietf-dots-mapping:vendor-mapping": { + "vendor": [ + { + "vendor-id": 32473, + "vendor-name": "mitigator-s", + "last-updated": "1629898758", + "attack-mapping": [] + } + ] + } + } + + Figure 34: Response Message Body to a GET to Retrieve the Vendors + List Used by a DOTS Server + + The DOTS client repeats the above procedure regularly (e.g., once a + week) to update the DOTS server's vendor attack mapping details. + + If the DOTS client concludes that the DOTS server does not have any + reference to the specific vendor attack mapping details, the DOTS + client uses a POST request to install its vendor attack mapping + details. An example of such a POST request is depicted in Figure 30. + + The DOTS server indicates the result of processing the POST request + using the status-line. A "201 Created" status-line MUST be returned + in the response if the DOTS server has accepted the vendor attack + mapping details. If the request is missing a mandatory attribute or + contains an invalid or unknown parameter, a "400 Bad Request" status- + line MUST be returned by the DOTS server in the response. The error- + tag is set to "missing-attribute", "invalid-value", or "unknown- + element" as a function of the encountered error. + + If the request is received via a server-domain DOTS gateway but the + DOTS server does not maintain a 'cdid' for this 'cuid' while a 'cdid' + is expected to be supplied, the DOTS server MUST reply with a "403 + Forbidden" status-line and the error-tag "access-denied". Upon + receipt of this message, the DOTS client MUST register (Section 5.1 + of [RFC8783]). + + The DOTS client uses the PUT request to modify its vendor attack + mapping details maintained by the DOTS server (e.g., add a new + mapping entry, update an existing mapping). + + A DOTS client uses a GET request to retrieve its vendor attack + mapping details as maintained by the DOTS server (Figure 35). + + GET /restconf/data/ietf-dots-data-channel:dots-data\ + /dots-client=dz6pHjaADkaFTbjr0JGBpw\ + /ietf-dots-mapping:vendor-mapping?\ + content=all HTTP/1.1 + Host: example.com + Accept: application/yang-data+json + + Figure 35: GET to Retrieve Installed Vendor Attack Mapping Details + + When conveying attack details in DOTS telemetry messages + (Sections 8.2, 8.3, and 9), DOTS agents MUST NOT include the 'attack- + description' attribute unless the corresponding attack mapping + details were not previously shared with the peer DOTS agent. + +8.2. From DOTS Clients to DOTS Servers + + DOTS clients use PUT requests to signal pre-or-ongoing-mitigation + telemetry to DOTS servers. An example of such a request is shown in + Figure 36. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tmid=123" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry": { + "pre-or-ongoing-mitigation": [ + { + "target": { + "target-prefix": [ + "2001:db8::1/128" + ] + }, + "total-attack-traffic-protocol": [ + { + "protocol": 17, + "unit": "megabit-ps", + "mid-percentile-g": "900" + } + ], + "attack-detail": [ + { + "vendor-id": 32473, + "attack-id": 77, + "start-time": "1608336568", + "attack-severity": "high" + } + ] + } + ] + } + } + + Figure 36: PUT to Send Pre-or-Ongoing-Mitigation Telemetry, + Depicted as per Section 5.6 + + 'cuid' is a mandatory Uri-Path parameter for DOTS PUT requests. + + The following additional Uri-Path parameter is defined: + + tmid: The Telemetry Identifier is an identifier for the DOTS pre-or- + ongoing-mitigation telemetry data represented as an integer. This + identifier MUST be generated by DOTS clients. 'tmid' values MUST + increase monotonically whenever a DOTS client needs to convey a + new set of pre-or-ongoing-mitigation telemetry data. + + The procedure specified in Section 4.4.1 of [RFC9132] for 'mid' + rollover MUST be followed for 'tmid' rollover. + + This is a mandatory attribute. 'tmid' MUST appear after 'cuid' in + the Uri-Path options. + + 'cuid' and 'tmid' MUST NOT appear in the PUT request message body. + + At least the 'target' attribute and another pre-or-ongoing-mitigation + attribute (Section 8.1) MUST be present in the PUT request. If only + the 'target' attribute is present, this request is handled as per + Section 8.3. + + The relative order of two PUT requests carrying DOTS pre-or-ongoing- + mitigation telemetry from a DOTS client is determined by comparing + their respective 'tmid' values. If these two requests have an + overlapping 'target', the PUT request with a higher numeric 'tmid' + value will override the request with a lower numeric 'tmid' value. + The overlapped lower numeric 'tmid' MUST be automatically deleted and + no longer be available. + + The DOTS server indicates the result of processing a PUT request + using CoAP Response Codes. In particular, the 2.04 (Changed) + Response Code is returned if the DOTS server has accepted the pre-or- + ongoing-mitigation telemetry. The 5.03 (Service Unavailable) + Response Code is returned if the DOTS server has erred. The 5.03 + Response Code uses the Max-Age Option to indicate the number of + seconds after which to retry. + + How long a DOTS server maintains a 'tmid' as active or logs the + enclosed telemetry information is implementation specific. Note that + if a 'tmid' is still active, then logging details are updated by the + DOTS server as a function of the updates received from the peer DOTS + client. + + A DOTS client that lost the state of its active 'tmid's or has to set + 'tmid' back to zero (e.g., crash or restart) MUST send a GET request + to the DOTS server to retrieve the list of active 'tmid' values. The + DOTS client may then delete 'tmid's that should not be active anymore + (Figure 37). Sending a DELETE with no 'tmid' indicates that all + 'tmid's must be deactivated (Figure 38). + + Header: DELETE (Code=0.04) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tmid=123" + + Figure 37: Deleting Specific Pre-or-Ongoing-Mitigation Telemetry + Information + + Header: DELETE (Code=0.04) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + + Figure 38: Deleting All Pre-or-Ongoing-Mitigation Telemetry + Information + +8.3. From DOTS Servers to DOTS Clients + + The pre-or-ongoing-mitigation data (attack details in particular) can + also be signaled from DOTS servers to DOTS clients. For example, a + DOTS server co-located with a DDoS detector can collect monitoring + information from the target network, identify a DDoS attack using + statistical analysis or deep learning techniques, and signal the + attack details to the DOTS client. + + The DOTS client can use the attack details to decide whether to + trigger a DOTS mitigation request or not. Furthermore, the security + operations personnel at the DOTS client domain can use the attack + details to determine the protection strategy and select the + appropriate DOTS server for mitigating the attack. + + In order to receive pre-or-ongoing-mitigation telemetry notifications + from a DOTS server, a DOTS client MUST send a PUT (followed by a GET) + with the target filter. An example of such a PUT request is shown in + Figure 39. In order to avoid maintaining a long list of such + requests, it is RECOMMENDED that DOTS clients include all targets in + the same request (assuming that this information fits within one + single datagram). DOTS servers may be instructed to restrict the + number of pre-or-ongoing-mitigation requests per DOTS client domain. + The pre-or-ongoing-mitigation requests MUST be maintained in an + active state by the DOTS server until a DELETE request is received + from the same DOTS client to clear this pre-or-ongoing-mitigation + telemetry or when the DOTS client is considered inactive (e.g., + Section 3.5 of [RFC8783]). + + The relative order of two PUT requests carrying DOTS pre-or-ongoing- + mitigation telemetry from a DOTS client is determined by comparing + their respective 'tmid' values. If these two requests have an + overlapping 'target', the PUT request with a higher numeric 'tmid' + value will override the request with a lower numeric 'tmid' value. + The overlapped lower numeric 'tmid' MUST be automatically deleted and + no longer be available. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tmid=567" + Content-Format: "application/dots+cbor" + + { + "ietf-dots-telemetry:telemetry": { + "pre-or-ongoing-mitigation": [ + { + "target": { + "target-prefix": [ + "2001:db8::/32" + ] + } + } + ] + } + } + + Figure 39: PUT to Request Pre-or-Ongoing-Mitigation Telemetry, + Depicted as per Section 5.6 + + DOTS clients of the same domain can ask to receive pre-or-ongoing- + mitigation telemetry bound to the same target without being + considered to be "overlapping" and in conflict. + + Once the PUT request to instantiate request state on the server has + succeeded, the DOTS client issues a GET request to receive ongoing + telemetry updates. The client uses the Observe Option, set to "0" + (register), in the GET request to receive asynchronous notifications + carrying pre-or-ongoing-mitigation telemetry data from the DOTS + server. The GET request can specify a specific 'tmid' (Figure 40) or + omit the 'tmid' (Figure 41) to receive updates on all active requests + from that client. + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "tmid=567" + Observe: 0 + + Figure 40: GET to Subscribe to Telemetry Asynchronous + Notifications for a Specific 'tmid' + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Observe: 0 + + Figure 41: GET to Subscribe to Telemetry Asynchronous + Notifications for All 'tmid's + + The DOTS client can use a filter to request a subset of the + asynchronous notifications from the DOTS server by indicating one or + more Uri-Query options in its GET request. A Uri-Query option can + include the following parameters to restrict the notifications based + on the attack target: 'target-prefix', 'target-port', 'target- + protocol', 'target-fqdn', 'target-uri', 'alias-name', 'mid', and 'c' + (content) (Section 5.4). Furthermore: + + * If more than one Uri-Query option is included in a request, these + options are interpreted in the same way as when multiple target + attributes are included in a message body (Section 4.4.1 of + [RFC9132]). + + * If multiple values of a query parameter are to be included in a + request, these values MUST be included in the same Uri-Query + option and separated by a "," character without any spaces. + + * Range values (i.e., a contiguous inclusive block) can be included + for the 'target-port', 'target-protocol', and 'mid' parameters by + indicating the two boundary values separated by a "-" character. + + * Wildcard names (i.e., a name with the leftmost label is the "*" + character) can be included in 'target-fqdn' or 'target-uri' + parameters. DOTS clients MUST NOT include a name in which the "*" + character is included in a label other than the leftmost label. + "*.example.com" is an example of a valid wildcard name that can be + included as a value of the 'target-fqdn' parameter in a Uri-Query + option. + + DOTS clients may also filter out the asynchronous notifications from + the DOTS server by indicating information about a specific attack + source. To that aim, a DOTS client may include 'source-prefix', + 'source-port', or 'source-icmp-type' in a Uri-Query option. The same + considerations (ranges, multiple values) specified for target + attributes apply for source attributes. Special care SHOULD be taken + when using these filters, as their use may cause some attacks to be + hidden from the requesting DOTS client (e.g., if the attack changes + its source information). + + Requests with invalid query types (e.g., not supported, malformed) + received by the DOTS server MUST be rejected with a 4.00 (Bad + Request) Response Code. + + An example of a request to subscribe to asynchronous telemetry + notifications regarding UDP traffic is shown in Figure 42. This + filter will be applied for all 'tmid's. + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "tm" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Query: "target-protocol=17" + Observe: 0 + + Figure 42: GET Request to Receive Telemetry Asynchronous + Notifications Filtered Using Uri-Query + + The DOTS server will send asynchronous notifications to the DOTS + client when an attack event is detected, following considerations + similar to those discussed in Section 4.4.2.1 of [RFC9132]. An + example of a pre-or-ongoing-mitigation telemetry notification is + shown in Figure 43. + + { + "ietf-dots-telemetry:telemetry": { + "pre-or-ongoing-mitigation": [ + { + "tmid": 567, + "target": { + "target-prefix": [ + "2001:db8::1/128" + ] + }, + "target-protocol": [ + 17 + ], + "total-attack-traffic": [ + { + "unit": "megabit-ps", + "mid-percentile-g": "900" + } + ], + "attack-detail": [ + { + "vendor-id": 32473, + "attack-id": 77, + "start-time": "1618339785", + "attack-severity": "high" + } + ] + } + ] + } + } + + Figure 43: Message Body of a Pre-or-Ongoing-Mitigation Telemetry + Notification from the DOTS Server, Depicted as per Section 5.6 + + A DOTS server sends the aggregate data for a target using the 'total- + attack-traffic' attribute. The aggregate assumes that Uri-Query + filters are applied on the target. The DOTS server MAY include more + fine-grained data when needed (that is, 'total-attack-traffic- + protocol' and 'total-attack-traffic-port'). If a port filter (or + protocol filter) is included in a request, 'total-attack-traffic- + protocol' (or 'total-attack-traffic-port') conveys the data with the + port (or protocol) filter applied. + + A DOTS server may aggregate pre-or-ongoing-mitigation data (e.g., + 'top-talker') for all targets of a domain or, when justified, send + specific information (e.g., 'top-talker') for a specific target. + + The DOTS client may log pre-or-ongoing-mitigation telemetry data with + an alert sent to an administrator or a network controller. The DOTS + client may send a mitigation request if the attack cannot be handled + locally. + + A DOTS client that is not interested in receiving pre-or-ongoing- + mitigation telemetry data for a target sends a DELETE request similar + to the DELETE request depicted in Figure 37. + +9. DOTS Telemetry Mitigation Status Update + +9.1. From DOTS Clients to DOTS Servers: Mitigation Efficacy DOTS + Telemetry Attributes + + The mitigation efficacy telemetry attributes can be signaled from + DOTS clients to DOTS servers as part of the periodic mitigation + efficacy updates to the server (Section 4.4.3 of [RFC9132]). + + Total attack traffic: The overall attack traffic as observed from + the DOTS client's perspective during an active mitigation. See + Figure 27. + + Attack details: The overall attack details as observed from the DOTS + client's perspective during an active mitigation. See + Section 8.1.5. + + The "ietf-dots-telemetry" YANG module (Section 11.1) augments the + 'mitigation-scope' message type defined in the "ietf-dots-signal- + channel" module [RFC9132] so that these attributes can be signaled by + a DOTS client in a mitigation efficacy update (Figure 44). + + augment-structure /dots-signal:dots-signal/dots-signal:message-type + /dots-signal:mitigation-scope/dots-signal:scope: + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- attack-detail* [vendor-id attack-id] + +-- vendor-id uint32 + +-- attack-id uint32 + +-- attack-description? string + +-- attack-severity? attack-severity + +-- start-time? uint64 + +-- end-time? uint64 + +-- source-count + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- top-talker + +-- talker* [source-prefix] + +-- spoofed-status? boolean + +-- source-prefix inet:ip-prefix + +-- source-port-range* [lower-port] + | +-- lower-port inet:port-number + | +-- upper-port? inet:port-number + +-- source-icmp-type-range* [lower-type] + | +-- lower-type uint8 + | +-- upper-type? uint8 + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-connection + +-- connection-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- embryonic-c + | ... + +-- connection-ps-c + | ... + +-- request-ps-c + | ... + +-- partial-request-c + ... + + Figure 44: Telemetry Efficacy Update Tree Structure + + In order to signal telemetry data in a mitigation efficacy update, it + is RECOMMENDED that the DOTS client have already established a DOTS + telemetry setup session with the server in 'idle' time. Such a + session is primarily meant to assess whether the peer DOTS server + supports telemetry extensions and to thus prevent message processing + failure (Section 3.1 of [RFC9132]). + + An example of an efficacy update with telemetry attributes is + depicted in Figure 45. + + Header: PUT (Code=0.03) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "mitigate" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "mid=123" + If-Match: + Content-Format: "application/dots+cbor" + + { + "ietf-dots-signal-channel:mitigation-scope": { + "scope": [ + { + "alias-name": [ + "https1", + "https2" + ], + "attack-status": "under-attack", + "ietf-dots-telemetry:total-attack-traffic": [ + { + "unit": "megabit-ps", + "mid-percentile-g": "900" + } + ] + } + ] + } + } + + Figure 45: Example of Mitigation Efficacy Update with Telemetry + Attributes, Depicted as per Section 5.6 + +9.2. From DOTS Servers to DOTS Clients: Mitigation Status DOTS + Telemetry Attributes + + The mitigation status telemetry attributes can be signaled from the + DOTS server to the DOTS client as part of the periodic mitigation + status update (Section 4.4.2 of [RFC9132]). In particular, DOTS + clients can receive asynchronous notifications of the attack details + from DOTS servers using the Observe Option defined in [RFC7641]. + + In order to make use of this feature, DOTS clients MUST establish a + telemetry session with the DOTS server in 'idle' time and MUST set + the 'server-originated-telemetry' attribute to 'true'. + + DOTS servers MUST NOT include telemetry attributes in mitigation + status updates sent to DOTS clients for telemetry sessions in which + the 'server-originated-telemetry' attribute is set to 'false'. + + As defined in [RFC8612], the actual mitigation activities can include + several countermeasure mechanisms. The DOTS server signals the + current operational status of relevant countermeasures. A list of + attacks detected by these countermeasures MAY also be included. The + same attributes as those defined in Section 8.1.5 are applicable for + describing the attacks detected and mitigated at the DOTS server + domain. + + The "ietf-dots-telemetry" YANG module (Section 11.1) augments the + 'mitigation-scope' message type defined in the "ietf-dots-signal- + channel" module [RFC9132] with telemetry data as depicted in + Figure 46. + + augment-structure /dots-signal:dots-signal/dots-signal:message-type + /dots-signal:mitigation-scope/dots-signal:scope: + +-- (direction)? + | +--:(server-to-client-only) + | +-- total-traffic* [unit] + | | +-- unit unit + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- total-attack-connection + | +-- connection-c + | | +-- low-percentile-g? yang:gauge64 + | | +-- mid-percentile-g? yang:gauge64 + | | +-- high-percentile-g? yang:gauge64 + | | +-- peak-g? yang:gauge64 + | | +-- current-g? yang:gauge64 + | +-- embryonic-c + | | ... + | +-- connection-ps-c + | | ... + | +-- request-ps-c + | | ... + | +-- partial-request-c + | ... + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- attack-detail* [vendor-id attack-id] + +-- vendor-id uint32 + +-- attack-id uint32 + +-- attack-description? string + +-- attack-severity? attack-severity + +-- start-time? uint64 + +-- end-time? uint64 + +-- source-count + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- top-talker + +-- talker* [source-prefix] + +-- spoofed-status? boolean + +-- source-prefix inet:ip-prefix + +-- source-port-range* [lower-port] + | +-- lower-port inet:port-number + | +-- upper-port? inet:port-number + +-- source-icmp-type-range* [lower-type] + | +-- lower-type uint8 + | +-- upper-type? uint8 + +-- total-attack-traffic* [unit] + | +-- unit unit + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- total-attack-connection + +-- connection-c + | +-- low-percentile-g? yang:gauge64 + | +-- mid-percentile-g? yang:gauge64 + | +-- high-percentile-g? yang:gauge64 + | +-- peak-g? yang:gauge64 + | +-- current-g? yang:gauge64 + +-- embryonic-c + | ... + +-- connection-ps-c + | ... + +-- request-ps-c + | ... + +-- partial-request-c + ... + + Figure 46: DOTS Server-to-Client Mitigation Status Telemetry Tree + Structure + + Figure 47 shows an example of an asynchronous notification of attack + mitigation status from the DOTS server. This notification signals + both the mid-percentile value of processed attack traffic and the + peak count of unique sources involved in the attack. + + { + "ietf-dots-signal-channel:mitigation-scope": { + "scope": [ + { + "mid": 12332, + "mitigation-start": "1507818434", + "alias-name": [ + "https1", + "https2" + ], + "lifetime": 1600, + "status": "attack-successfully-mitigated", + "bytes-dropped": "134334555", + "bps-dropped": "43344", + "pkts-dropped": "333334444", + "pps-dropped": "432432", + "ietf-dots-telemetry:total-attack-traffic": [ + { + "unit": "megabit-ps", + "mid-percentile-g": "752" + } + ], + "ietf-dots-telemetry:attack-detail": [ + { + "vendor-id": 32473, + "attack-id": 77, + "source-count": { + "peak-g": "12683" + } + } + ] + } + ] + } + } + + Figure 47: Response Body of a Mitigation Status with Telemetry + Attributes, Depicted as per Section 5.6 + + DOTS clients can filter out the asynchronous notifications from the + DOTS server by indicating one or more Uri-Query options in its GET + request. A Uri-Query option can include the following parameters: + 'target-prefix', 'target-port', 'target-protocol', 'target-fqdn', + 'target-uri', 'alias-name', and 'c' (content) (Section 5.4). The + considerations discussed in Section 8.3 MUST be followed to include + multiple query values, ranges ('target-port', 'target-protocol'), and + wildcard names ('target-fqdn', 'target-uri'). + + An example of a request to subscribe to asynchronous notifications + bound to the "https1" alias is shown in Figure 48. + + Header: GET (Code=0.01) + Uri-Path: ".well-known" + Uri-Path: "dots" + Uri-Path: "mitigate" + Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" + Uri-Path: "mid=12332" + Uri-Query: "target-alias=https1" + Observe: 0 + + Figure 48: GET Request to Receive Asynchronous Notifications + Filtered Using Uri-Query + + If the target query does not match the target of the enclosed 'mid' + as maintained by the DOTS server, the latter MUST respond with a 4.04 + (Not Found) error Response Code. The DOTS server MUST NOT add a new + Observe entry if this query overlaps with an existing Observe entry. + In such a case, the DOTS server replies with a 4.09 (Conflict) + Response Code. + +10. Error Handling + + A list of common CoAP errors that are implemented by DOTS servers is + provided in Section 9 of [RFC9132]. The following additional error + cases apply for the telemetry extension: + + * 4.00 (Bad Request) is returned by the DOTS server when the DOTS + client has sent a request that violates the DOTS telemetry + extension. + + * 4.04 (Not Found) is returned by the DOTS server when the DOTS + client is requesting a 'tsid' or 'tmid' that is not valid. + + * 4.00 (Bad Request) is returned by the DOTS server when the DOTS + client has sent a request with invalid query types (e.g., not + supported, malformed). + + * 4.04 (Not Found) is returned by the DOTS server when the DOTS + client has sent a request with a target query that does not match + the target of the enclosed 'mid' as maintained by the DOTS server. + + As indicated in Section 9 of [RFC9132], an additional plaintext + diagnostic payload (Section 5.5.2 of [RFC7252]) to help with + troubleshooting is returned in the body of the response. + +11. YANG Modules + +11.1. DOTS Signal Channel Telemetry YANG Module + + This module uses types defined in [RFC6991] and [RFC8345]. It also + reuses a grouping from [RFC8783]. + + <CODE BEGINS> file "ietf-dots-telemetry@2022-06-20.yang" + module ietf-dots-telemetry { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dots-telemetry"; + prefix dots-telemetry; + + import ietf-dots-signal-channel { + prefix dots-signal; + reference + "RFC 9132: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Signal Channel Specification"; + } + import ietf-dots-data-channel { + prefix data-channel; + reference + "RFC 8783: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Data Channel Specification"; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types, Section 3"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types, Section 4"; + } + import ietf-network-topology { + prefix nt; + reference + "RFC 8345: A YANG Data Model for Network Topologies, + Section 6.2"; + } + import ietf-yang-structure-ext { + prefix sx; + reference + "RFC 8791: YANG Data Structure Extensions"; + } + + organization + "IETF DDoS Open Threat Signaling (DOTS) Working Group"; + contact + "WG Web: <https://datatracker.ietf.org/wg/dots/> + WG List: <mailto:dots@ietf.org> + + Author: Mohamed Boucadair + <mailto:mohamed.boucadair@orange.com> + + Author: Konda, Tirumaleswar Reddy.K + <mailto:kondtir@gmail.com>"; + description + "This module contains YANG definitions for the signaling + of DOTS telemetry data exchanged between a DOTS client and + a DOTS server by means of the DOTS signal channel. + + Copyright (c) 2022 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). + + This version of this YANG module is part of RFC 9244; see the + RFC itself for full legal notices."; + + revision 2022-06-20 { + description + "Initial revision."; + reference + "RFC 9244: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Telemetry"; + } + + typedef attack-severity { + type enumeration { + enum none { + value 1; + description + "No effect on the DOTS client domain."; + } + enum low { + value 2; + description + "Minimal effect on the DOTS client domain."; + } + enum medium { + value 3; + description + "A subset of DOTS client domain resources is + out of service."; + } + enum high { + value 4; + description + "The DOTS client domain is under extremely severe + conditions."; + } + enum unknown { + value 5; + description + "The impact of the attack is not known."; + } + } + description + "Enumeration for attack severity."; + reference + "RFC 7970: The Incident Object Description Exchange + Format Version 2, Section 3.12.2"; + } + + typedef unit-class { + type enumeration { + enum packet-ps { + value 1; + description + "Packets per second (pps)."; + } + enum bit-ps { + value 2; + description + "Bits per second (bps)."; + } + enum byte-ps { + value 3; + description + "Bytes per second (Bps)."; + } + } + description + "Enumeration to indicate which unit class is used. + These classes are supported: pps, bps, and Bps."; + } + + typedef unit { + type enumeration { + enum packet-ps { + value 1; + description + "Packets per second (pps)."; + } + enum bit-ps { + value 2; + description + "Bits per second (bps)."; + } + enum byte-ps { + value 3; + description + "Bytes per second (Bps)."; + } + enum kilopacket-ps { + value 4; + description + "Kilo packets per second (kpps)."; + } + enum kilobit-ps { + value 5; + description + "Kilobits per second (kbps)."; + } + enum kilobyte-ps { + value 6; + description + "Kilobytes per second (kBps)."; + } + enum megapacket-ps { + value 7; + description + "Mega packets per second (Mpps)."; + } + enum megabit-ps { + value 8; + description + "Megabits per second (Mbps)."; + } + enum megabyte-ps { + value 9; + description + "Megabytes per second (MBps)."; + } + enum gigapacket-ps { + value 10; + description + "Giga packets per second (Gpps)."; + } + enum gigabit-ps { + value 11; + description + "Gigabits per second (Gbps)."; + } + enum gigabyte-ps { + value 12; + description + "Gigabytes per second (GBps)."; + } + enum terapacket-ps { + value 13; + description + "Tera packets per second (Tpps)."; + } + enum terabit-ps { + value 14; + description + "Terabits per second (Tbps)."; + } + enum terabyte-ps { + value 15; + description + "Terabytes per second (TBps)."; + } + enum petapacket-ps { + value 16; + description + "Peta packets per second (Ppps)."; + } + enum petabit-ps { + value 17; + description + "Petabits per second (Pbps)."; + } + enum petabyte-ps { + value 18; + description + "Petabytes per second (PBps)."; + } + enum exapacket-ps { + value 19; + description + "Exa packets per second (Epps)."; + } + enum exabit-ps { + value 20; + description + "Exabits per second (Ebps)."; + } + enum exabyte-ps { + value 21; + description + "Exabytes per second (EBps)."; + } + enum zettapacket-ps { + value 22; + description + "Zetta packets per second (Zpps)."; + } + enum zettabit-ps { + value 23; + description + "Zettabits per second (Zbps)."; + } + enum zettabyte-ps { + value 24; + description + "Zettabytes per second (ZBps)."; + } + } + description + "Enumeration to indicate which unit is used. + Only one unit per unit class is used owing to + unit auto-scaling."; + } + + typedef interval { + type enumeration { + enum 5-minutes { + value 1; + description + "5 minutes."; + } + enum 10-minutes { + value 2; + description + "10 minutes."; + } + enum 30-minutes { + value 3; + description + "30 minutes."; + } + enum hour { + value 4; + description + "Hour."; + } + enum day { + value 5; + description + "Day."; + } + enum week { + value 6; + description + "Week."; + } + enum month { + value 7; + description + "Month."; + } + } + description + "Enumeration to indicate the overall measurement period."; + } + + typedef sample { + type enumeration { + enum second { + value 1; + description + "One-second measurement period."; + } + enum 5-seconds { + value 2; + description + "5-second measurement period."; + } + enum 30-seconds { + value 3; + description + "30-second measurement period."; + } + enum minute { + value 4; + description + "One-minute measurement period."; + } + enum 5-minutes { + value 5; + description + "5-minute measurement period."; + } + enum 10-minutes { + value 6; + description + "10-minute measurement period."; + } + enum 30-minutes { + value 7; + description + "30-minute measurement period."; + } + enum hour { + value 8; + description + "One-hour measurement period."; + } + } + description + "Enumeration to indicate the sampling period."; + } + + typedef percentile { + type decimal64 { + fraction-digits 2; + } + description + "The nth percentile of a set of data is the + value at which n percent of the data is below it."; + } + + typedef query-type { + type enumeration { + enum target-prefix { + value 1; + description + "Query based on target prefix."; + } + enum target-port { + value 2; + description + "Query based on target port number."; + } + enum target-protocol { + value 3; + description + "Query based on target protocol."; + } + enum target-fqdn { + value 4; + description + "Query based on target FQDN."; + } + enum target-uri { + value 5; + description + "Query based on target URI."; + } + enum target-alias { + value 6; + description + "Query based on target alias."; + } + enum mid { + value 7; + description + "Query based on mitigation identifier (mid)."; + } + enum source-prefix { + value 8; + description + "Query based on source prefix."; + } + enum source-port { + value 9; + description + "Query based on source port number."; + } + enum source-icmp-type { + value 10; + description + "Query based on ICMP type."; + } + enum content { + value 11; + description + "Query based on the 'c' (content) Uri-Query option, + which is used to control the selection of configuration + and non-configuration data nodes."; + reference + "RFC 9132: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Signal Channel + Specification, Section 4.4.2"; + } + } + description + "Enumeration of support for query types that can be used + in a GET request to filter out data. Requests with + invalid query types (e.g., not supported, malformed) + received by the DOTS server are rejected with + a 4.00 (Bad Request) Response Code."; + } + + grouping telemetry-parameters { + description + "A grouping that includes a set of parameters that + are used to prepare the reported telemetry data. + + The grouping indicates a measurement interval, + a measurement sample period, and + low-percentile/mid-percentile/high-percentile values."; + leaf measurement-interval { + type interval; + description + "Defines the period during which percentiles are + computed."; + } + leaf measurement-sample { + type sample; + description + "Defines the time distribution for measuring + values that are used to compute percentiles. + + The measurement sample value must be less than the + measurement interval value."; + } + leaf low-percentile { + type percentile; + default "10.00"; + description + "Low-percentile. If set to '0', this means that + the use of low-percentile values is disabled."; + } + leaf mid-percentile { + type percentile; + must '. >= ../low-percentile' { + error-message + "The mid-percentile must be greater than + or equal to the low-percentile."; + } + default "50.00"; + description + "Mid-percentile. If set to the same value as + 'low-percentile', this means that the use of + mid-percentile values is disabled."; + } + leaf high-percentile { + type percentile; + must '. >= ../mid-percentile' { + error-message + "The high-percentile must be greater than + or equal to the mid-percentile."; + } + default "90.00"; + description + "High-percentile. If set to the same value as + 'mid-percentile', this means that the use of + high-percentile values is disabled."; + } + } + + grouping percentile-and-peak { + description + "Generic grouping for percentile and peak values."; + leaf low-percentile-g { + type yang:gauge64; + description + "Low-percentile value."; + } + leaf mid-percentile-g { + type yang:gauge64; + description + "Mid-percentile value."; + } + leaf high-percentile-g { + type yang:gauge64; + description + "High-percentile value."; + } + leaf peak-g { + type yang:gauge64; + description + "Peak value."; + } + } + + grouping percentile-peak-and-current { + description + "Generic grouping for percentile and peak values."; + uses percentile-and-peak; + leaf current-g { + type yang:gauge64; + description + "Current value."; + } + } + + grouping unit-config { + description + "Generic grouping for unit configuration."; + list unit-config { + key "unit"; + description + "Controls which unit classes are allowed when sharing + telemetry data."; + leaf unit { + type unit-class; + description + "Can be 'packet-ps', 'bit-ps', or 'byte-ps'."; + } + leaf unit-status { + type boolean; + mandatory true; + description + "Enable/disable the use of the measurement unit class."; + } + } + } + + grouping traffic-unit { + description + "Grouping of traffic as a function of the + measurement unit."; + leaf unit { + type unit; + description + "The traffic can be measured using unit classes: + 'packet-ps', 'bit-ps', or 'byte-ps'. DOTS agents + auto-scale to the appropriate units (e.g., 'megabit-ps', + 'kilobit-ps')."; + } + uses percentile-and-peak; + } + + grouping traffic-unit-all { + description + "Grouping of traffic as a function of the measurement unit, + including current values."; + uses traffic-unit; + leaf current-g { + type yang:gauge64; + description + "Current observed value."; + } + } + + grouping traffic-unit-protocol { + description + "Grouping of traffic of a given transport protocol as + a function of the measurement unit."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>. + + For example, this parameter contains 6 for TCP, + 17 for UDP, 33 for the Datagram Congestion Control + Protocol (DCCP), or 132 for the Stream Control + Transmission Protocol (SCTP)."; + } + uses traffic-unit; + } + + grouping traffic-unit-protocol-all { + description + "Grouping of traffic of a given transport protocol as + a function of the measurement unit, including current + values."; + uses traffic-unit-protocol; + leaf current-g { + type yang:gauge64; + description + "Current observed value."; + } + } + + grouping traffic-unit-port { + description + "Grouping of traffic bound to a port number as + a function of the measurement unit."; + leaf port { + type inet:port-number; + description + "Port number used by a transport protocol."; + } + uses traffic-unit; + } + + grouping traffic-unit-port-all { + description + "Grouping of traffic bound to a port number as + a function of the measurement unit, including + current values."; + uses traffic-unit-port; + leaf current-g { + type yang:gauge64; + description + "Current observed value."; + } + } + + grouping total-connection-capacity { + description + "Total connection capacities for various types of + connections, as well as overall capacity. These data nodes + are useful for detecting resource-consuming DDoS attacks."; + leaf connection { + type uint64; + description + "The maximum number of simultaneous connections that + are allowed to the target server."; + } + leaf connection-client { + type uint64; + description + "The maximum number of simultaneous connections that + are allowed to the target server per client."; + } + leaf embryonic { + type uint64; + description + "The maximum number of simultaneous embryonic connections + that are allowed to the target server. The term + 'embryonic connection' refers to a connection whose + connection handshake is not finished. Embryonic + connections are only possible in connection-oriented + transport protocols like TCP or SCTP."; + } + leaf embryonic-client { + type uint64; + description + "The maximum number of simultaneous embryonic connections + that are allowed to the target server per client."; + } + leaf connection-ps { + type uint64; + description + "The maximum number of new connections allowed per second + to the target server."; + } + leaf connection-client-ps { + type uint64; + description + "The maximum number of new connections allowed per second + to the target server per client."; + } + leaf request-ps { + type uint64; + description + "The maximum number of requests allowed per second + to the target server."; + } + leaf request-client-ps { + type uint64; + description + "The maximum number of requests allowed per second + to the target server per client."; + } + leaf partial-request-max { + type uint64; + description + "The maximum number of outstanding partial requests + that are allowed to the target server."; + } + leaf partial-request-client-max { + type uint64; + description + "The maximum number of outstanding partial requests + that are allowed to the target server per client."; + } + } + + grouping total-connection-capacity-protocol { + description + "Total connection capacity per protocol. These data nodes + are useful for detecting resource-consuming DDoS attacks."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>."; + } + uses total-connection-capacity; + } + + grouping connection-percentile-and-peak { + description + "A set of data nodes that represent the attack + characteristics."; + container connection-c { + uses percentile-and-peak; + description + "The number of simultaneous attack connections to + the target server."; + } + container embryonic-c { + uses percentile-and-peak; + description + "The number of simultaneous embryonic connections to + the target server."; + } + container connection-ps-c { + uses percentile-and-peak; + description + "The number of attack connections per second to + the target server."; + } + container request-ps-c { + uses percentile-and-peak; + description + "The number of attack requests per second to + the target server."; + } + container partial-request-c { + uses percentile-and-peak; + description + "The number of attack partial requests to + the target server."; + } + } + + grouping connection-all { + description + "Total attack connections, including current values."; + container connection-c { + uses percentile-peak-and-current; + description + "The number of simultaneous attack connections to + the target server."; + } + container embryonic-c { + uses percentile-peak-and-current; + description + "The number of simultaneous embryonic connections to + the target server."; + } + container connection-ps-c { + uses percentile-peak-and-current; + description + "The number of attack connections per second to + the target server."; + } + container request-ps-c { + uses percentile-peak-and-current; + description + "The number of attack requests per second to + the target server."; + } + container partial-request-c { + uses percentile-peak-and-current; + description + "The number of attack partial requests to + the target server."; + } + } + + grouping connection-protocol { + description + "Total attack connections."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>."; + } + uses connection-percentile-and-peak; + } + + grouping connection-port { + description + "Total attack connections per port number."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>."; + } + leaf port { + type inet:port-number; + description + "Port number."; + } + uses connection-percentile-and-peak; + } + + grouping connection-protocol-all { + description + "Total attack connections per protocol, including current + values."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>."; + } + uses connection-all; + } + + grouping connection-protocol-port-all { + description + "Total attack connections per port number, including current + values."; + leaf protocol { + type uint8; + description + "The transport protocol. + Values are taken from the IANA 'Protocol Numbers' + registry: + <https://www.iana.org/assignments/protocol-numbers/>."; + } + leaf port { + type inet:port-number; + description + "Port number."; + } + uses connection-all; + } + + grouping attack-detail { + description + "Various details that describe the ongoing + attacks that need to be mitigated by the DOTS server. + The attack details need to cover well-known and common + attacks (such as a SYN flood) along with new emerging or + vendor-specific attacks."; + leaf vendor-id { + type uint32; + description + "The Vendor ID is a security vendor's Private Enterprise + Number as registered with IANA."; + reference + "IANA: Private Enterprise Numbers + (https://www.iana.org/assignments/enterprise-numbers/)"; + } + leaf attack-id { + type uint32; + description + "Unique identifier assigned by the vendor for the attack."; + } + leaf description-lang { + type string { + pattern '((([A-Za-z]{2,3}(-[A-Za-z]{3}(-[A-Za-z]{3})' + + '{0,2})?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-[A-Za-z]{4})' + + '?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}' + + '|([0-9][A-Za-z0-9]{3})))*(-[0-9A-WYZa-wyz]' + + '(-([A-Za-z0-9]{2,8}))+)*(-[Xx](-([A-Za-z0-9]' + + '{1,8}))+)?|[Xx](-([A-Za-z0-9]{1,8}))+|' + + '(([Ee][Nn]-[Gg][Bb]-[Oo][Ee][Dd]|[Ii]-' + + '[Aa][Mm][Ii]|[Ii]-[Bb][Nn][Nn]|[Ii]-' + + '[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Ii]-' + + '[Ee][Nn][Oo][Cc][Hh][Ii][Aa][Nn]' + + '|[Ii]-[Hh][Aa][Kk]|' + + '[Ii]-[Kk][Ll][Ii][Nn][Gg][Oo][Nn]|' + + '[Ii]-[Ll][Uu][Xx]|[Ii]-[Mm][Ii][Nn][Gg][Oo]|' + + '[Ii]-[Nn][Aa][Vv][Aa][Jj][Oo]|[Ii]-[Pp][Ww][Nn]|' + + '[Ii]-[Tt][Aa][Oo]|[Ii]-[Tt][Aa][Yy]|' + + '[Ii]-[Tt][Ss][Uu]|[Ss][Gg][Nn]-[Bb][Ee]-[Ff][Rr]|' + + '[Ss][Gg][Nn]-[Bb][Ee]-[Nn][Ll]|[Ss][Gg][Nn]-' + + '[Cc][Hh]-[Dd][Ee])|([Aa][Rr][Tt]-' + + '[Ll][Oo][Jj][Bb][Aa][Nn]|[Cc][Ee][Ll]-' + + '[Gg][Aa][Uu][Ll][Ii][Ss][Hh]|' + + '[Nn][Oo]-[Bb][Oo][Kk]|[Nn][Oo]-' + + '[Nn][Yy][Nn]|[Zz][Hh]-[Gg][Uu][Oo][Yy][Uu]|' + + '[Zz][Hh]-[Hh][Aa][Kk][Kk][Aa]|[Zz][Hh]-' + + '[Mm][Ii][Nn]|[Zz][Hh]-[Mm][Ii][Nn]-' + + '[Nn][Aa][Nn]|[Zz][Hh]-[Xx][Ii][Aa][Nn][Gg])))'; + } + default "en-US"; + description + "Indicates the language tag that is used for + 'attack-description'."; + reference + "RFC 5646: Tags for Identifying Languages, Section 2.1"; + } + leaf attack-description { + type string; + description + "Textual representation of the attack description. + Natural Language Processing techniques (e.g., + word embedding) might provide some utility in mapping + the attack description to an attack type."; + } + leaf attack-severity { + type attack-severity; + description + "Severity level of an attack. How this level is + determined is implementation specific."; + } + leaf start-time { + type uint64; + description + "The time the attack started. The start time is + represented in seconds relative to + 1970-01-01T00:00:00Z."; + } + leaf end-time { + type uint64; + description + "The time the attack ended. The end time is represented + in seconds relative to 1970-01-01T00:00:00Z."; + } + container source-count { + description + "Indicates the count of unique sources involved + in the attack."; + uses percentile-and-peak; + leaf current-g { + type yang:gauge64; + description + "Current observed value."; + } + } + } + + grouping talker { + description + "Defines generic data related to top talkers."; + leaf spoofed-status { + type boolean; + description + "When set to 'true', it indicates whether this address + is spoofed."; + } + leaf source-prefix { + type inet:ip-prefix; + description + "IPv4 or IPv6 prefix identifying the attacker(s)."; + } + list source-port-range { + key "lower-port"; + description + "Port range. When only 'lower-port' is + present, it represents a single port number."; + leaf lower-port { + type inet:port-number; + description + "Lower port number of the port range."; + } + leaf upper-port { + type inet:port-number; + must '. >= ../lower-port' { + error-message + "The upper port number must be greater than + or equal to the lower port number."; + } + description + "Upper port number of the port range."; + } + } + list source-icmp-type-range { + key "lower-type"; + description + "ICMP type range. When only 'lower-type' is + present, it represents a single ICMP type."; + leaf lower-type { + type uint8; + description + "Lower ICMP type of the ICMP type range."; + } + leaf upper-type { + type uint8; + must '. >= ../lower-type' { + error-message + "The upper ICMP type must be greater than + or equal to the lower ICMP type."; + } + description + "Upper type of the ICMP type range."; + } + } + list total-attack-traffic { + key "unit"; + description + "Total attack traffic issued from this source."; + uses traffic-unit-all; + } + } + + grouping top-talker-aggregate { + description + "An aggregate of top attack sources. This aggregate is + typically used when included in a mitigation request."; + list talker { + key "source-prefix"; + description + "Refers to a top talker that is identified by an IPv4 + or IPv6 prefix identifying the attacker(s)."; + uses talker; + container total-attack-connection { + description + "Total attack connections issued from this source."; + uses connection-all; + } + } + } + + grouping top-talker { + description + "Top attack sources with detailed per-protocol + structure."; + list talker { + key "source-prefix"; + description + "Refers to a top talker that is identified by an IPv4 + or IPv6 prefix identifying the attacker(s)."; + uses talker; + list total-attack-connection-protocol { + key "protocol"; + description + "Total attack connections issued from this source."; + uses connection-protocol-all; + } + } + } + + grouping baseline { + description + "Grouping for the telemetry baseline."; + uses data-channel:target; + leaf-list alias-name { + type string; + description + "An alias name that points to an IP resource. + An IP resource can be a router, a host, + an Internet of Things (IoT) object, a server, etc."; + } + list total-traffic-normal { + key "unit"; + description + "Total traffic normal baselines."; + uses traffic-unit; + } + list total-traffic-normal-per-protocol { + key "unit protocol"; + description + "Total traffic normal baselines per protocol."; + uses traffic-unit-protocol; + } + list total-traffic-normal-per-port { + key "unit port"; + description + "Total traffic normal baselines per port number."; + uses traffic-unit-port; + } + list total-connection-capacity { + key "protocol"; + description + "Total connection capacity."; + uses total-connection-capacity-protocol; + } + list total-connection-capacity-per-port { + key "protocol port"; + description + "Total connection capacity per port number."; + leaf port { + type inet:port-number; + description + "The target port number."; + } + uses total-connection-capacity-protocol; + } + } + + grouping pre-or-ongoing-mitigation { + description + "Grouping for the telemetry data."; + list total-traffic { + key "unit"; + description + "Total traffic."; + uses traffic-unit-all; + } + list total-traffic-protocol { + key "unit protocol"; + description + "Total traffic per protocol."; + uses traffic-unit-protocol-all; + } + list total-traffic-port { + key "unit port"; + description + "Total traffic per port number."; + uses traffic-unit-port-all; + } + list total-attack-traffic { + key "unit"; + description + "Total attack traffic."; + uses traffic-unit-all; + } + list total-attack-traffic-protocol { + key "unit protocol"; + description + "Total attack traffic per protocol."; + uses traffic-unit-protocol-all; + } + list total-attack-traffic-port { + key "unit port"; + description + "Total attack traffic per port number."; + uses traffic-unit-port-all; + } + list total-attack-connection-protocol { + key "protocol"; + description + "Total attack connections."; + uses connection-protocol-all; + } + list total-attack-connection-port { + key "protocol port"; + description + "Total attack connections per target port number."; + uses connection-protocol-port-all; + } + list attack-detail { + key "vendor-id attack-id"; + description + "Provides a set of attack details."; + uses attack-detail; + container top-talker { + description + "Lists the top attack sources."; + uses top-talker; + } + } + } + + sx:augment-structure "/dots-signal:dots-signal" + + "/dots-signal:message-type" + + "/dots-signal:mitigation-scope" + + "/dots-signal:scope" { + description + "Extends mitigation scope with telemetry update data."; + choice direction { + description + "Indicates the communication direction in which the + data nodes can be included."; + case server-to-client-only { + description + "These data nodes appear only in a mitigation message + sent from the server to the client."; + list total-traffic { + key "unit"; + description + "Total traffic."; + uses traffic-unit-all; + } + container total-attack-connection { + description + "Total attack connections."; + uses connection-all; + } + } + } + list total-attack-traffic { + key "unit"; + description + "Total attack traffic."; + uses traffic-unit-all; + } + list attack-detail { + key "vendor-id attack-id"; + description + "Attack details."; + uses attack-detail; + container top-talker { + description + "Top attack sources."; + uses top-talker-aggregate; + } + } + } + sx:structure dots-telemetry { + description + "Main structure for DOTS telemetry messages."; + choice telemetry-message-type { + description + "Can be 'telemetry-setup' or telemetry data."; + case telemetry-setup { + description + "Indicates that the message is about telemetry setup."; + choice direction { + description + "Indicates the communication direction in which the + data nodes can be included."; + case server-to-client-only { + description + "These data nodes appear only in a telemetry message + sent from the server to the client."; + container max-config-values { + description + "Maximum acceptable configuration values."; + uses telemetry-parameters; + leaf server-originated-telemetry { + type boolean; + default "false"; + description + "Indicates whether the DOTS server can be + instructed to send pre-or-ongoing-mitigation + telemetry. If set to 'false' or the data node + is not present, this is an indication that + the server does not support this capability."; + } + leaf telemetry-notify-interval { + type uint16 { + range "1 .. 3600"; + } + units "seconds"; + must '. >= ../../min-config-values' + + '/telemetry-notify-interval' { + error-message + "The value must be greater than or equal + to the 'telemetry-notify-interval' value in + the 'min-config-values' attribute"; + } + description + "Minimum number of seconds between successive + telemetry notifications."; + } + } + container min-config-values { + description + "Minimum acceptable configuration values."; + uses telemetry-parameters; + leaf telemetry-notify-interval { + type uint16 { + range "1 .. 3600"; + } + units "seconds"; + description + "Minimum number of seconds between successive + telemetry notifications."; + } + } + container supported-unit-classes { + description + "Supported unit classes and default activation + status."; + uses unit-config; + } + leaf-list supported-query-type { + type query-type; + description + "Indicates which query types are supported by + the server. If the server does not announce + the query types it supports, the client will + be unable to use any of the potential + 'query-type' values to reduce the returned data + content from the server."; + } + } + } + list telemetry { + description + "The telemetry data per DOTS client. The keys + of the list are 'cuid' and 'tsid', but these keys are + not represented here because these keys are conveyed + as mandatory Uri-Paths in requests. Omitting keys + is compliant with RFC 8791."; + reference + "RFC 8791: YANG Data Structure Extensions"; + choice direction { + description + "Indicates the communication direction in which the + data nodes can be included."; + case server-to-client-only { + description + "These data nodes appear only in a telemetry + message sent from the server to the client."; + leaf tsid { + type uint32; + description + "A client-assigned identifier for the DOTS + telemetry setup data."; + } + } + } + choice setup-type { + description + "Can be a mitigation configuration, a pipe capacity, + or a baseline message."; + case telemetry-config { + description + "Used to set telemetry parameters such as setting + low-, mid-, and high-percentile values."; + container current-config { + description + "Current telemetry configuration values."; + uses telemetry-parameters; + uses unit-config; + leaf server-originated-telemetry { + type boolean; + description + "Used by a DOTS client to enable/disable + whether it requests pre-or-ongoing-mitigation + telemetry from the DOTS server."; + } + leaf telemetry-notify-interval { + type uint16 { + range "1 .. 3600"; + } + units "seconds"; + description + "Minimum number of seconds between successive + telemetry notifications."; + } + } + } + case pipe { + description + "Total pipe capacity of a DOTS client domain."; + list total-pipe-capacity { + key "link-id unit"; + description + "Total pipe capacity of a DOTS client domain."; + leaf link-id { + type nt:link-id; + description + "Identifier of an interconnection link of + the DOTS client domain."; + } + leaf capacity { + type uint64; + mandatory true; + description + "Pipe capacity. This attribute is mandatory + when 'total-pipe-capacity' is included in a + message."; + } + leaf unit { + type unit; + description + "The traffic can be measured using unit + classes: packets per second (pps), bits per + second (bps), and/or bytes per second + (Bps). + + For a given unit class, the DOTS agents + auto-scale to the appropriate units (e.g., + 'megabit-ps', 'kilobit-ps')."; + } + } + } + case baseline { + description + "Traffic baseline information related to a DOTS + client domain."; + list baseline { + key "id"; + description + "Traffic baseline information related to a DOTS + client domain."; + leaf id { + type uint32; + must '. >= 1'; + description + "An identifier that uniquely identifies a + baseline entry communicated by a + DOTS client."; + } + uses baseline; + } + } + } + } + } + case telemetry { + description + "Telemetry information."; + list pre-or-ongoing-mitigation { + description + "Pre-or-ongoing-mitigation telemetry per DOTS client. + The keys of the list are 'cuid' and 'tmid', but these + keys are not represented here because these keys are + conveyed as mandatory Uri-Paths in requests. + Omitting keys is compliant with RFC 8791."; + reference + "RFC 8791: YANG Data Structure Extensions"; + choice direction { + description + "Indicates the communication direction in which the + data nodes can be included."; + case server-to-client-only { + description + "These data nodes appear only in a telemetry + message sent from the server to the client."; + leaf tmid { + type uint32; + description + "A client-assigned identifier for the DOTS + telemetry data."; + } + } + } + container target { + description + "Indicates the target. At least one of the + attributes 'target-prefix', 'target-fqdn', + 'target-uri', 'alias-name', or 'mid-list' + must be present in the target definition."; + uses data-channel:target; + leaf-list alias-name { + type string; + description + "An alias name that points to a resource."; + } + leaf-list mid-list { + type uint32; + description + "Reference to a list of associated mitigation + requests."; + reference + "RFC 9132: Distributed Denial-of-Service Open + Threat Signaling (DOTS) Signal Channel + Specification, Section 4.4.1"; + } + } + uses pre-or-ongoing-mitigation; + } + } + } + } + } + <CODE ENDS> + +11.2. Vendor Attack Mapping Details YANG Module + + <CODE BEGINS> file "ietf-dots-mapping@2022-06-20.yang" + module ietf-dots-mapping { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dots-mapping"; + prefix dots-mapping; + + import ietf-dots-data-channel { + prefix data-channel; + reference + "RFC 8783: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Data Channel Specification"; + } + + organization + "IETF DDoS Open Threat Signaling (DOTS) Working Group"; + contact + "WG Web: <https://datatracker.ietf.org/wg/dots/> + WG List: <mailto:dots@ietf.org> + + Author: Mohamed Boucadair + <mailto:mohamed.boucadair@orange.com> + + Author: Jon Shallow + <mailto:supjps-ietf@jpshallow.com>"; + description + "This module contains YANG definitions for the sharing + of DDoS attack mapping details between a DOTS client and + a DOTS server by means of the DOTS data channel. + + Copyright (c) 2022 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). + + This version of this YANG module is part of RFC 9244; see the + RFC itself for full legal notices."; + + revision 2022-06-20 { + description + "Initial revision."; + reference + "RFC 9244: Distributed Denial-of-Service Open Threat + Signaling (DOTS) Telemetry"; + } + + feature dots-telemetry { + description + "This feature indicates that DOTS telemetry data can be + shared between DOTS clients and servers."; + } + + grouping attack-mapping { + description + "A set of information used for sharing vendor attack mapping + information with a peer."; + list vendor { + key "vendor-id"; + description + "Vendor attack mapping information related to the + client/server."; + leaf vendor-id { + type uint32; + description + "The Vendor ID is a security vendor's Private Enterprise + Number as registered with IANA."; + reference + "IANA: Private Enterprise Numbers + (https://www.iana.org/assignments/enterprise-numbers/)"; + } + leaf vendor-name { + type string; + description + "The name of the vendor (e.g., company A)."; + } + leaf description-lang { + type string { + pattern '((([A-Za-z]{2,3}(-[A-Za-z]{3}(-[A-Za-z]{3})' + + '{0,2})?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-[A-Za-z]{4})' + + '?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}' + + '|([0-9][A-Za-z0-9]{3})))*(-[0-9A-WYZa-wyz]' + + '(-([A-Za-z0-9]{2,8}))+)*(-[Xx](-([A-Za-z0-9]' + + '{1,8}))+)?|[Xx](-([A-Za-z0-9]{1,8}))+|' + + '(([Ee][Nn]-[Gg][Bb]-[Oo][Ee][Dd]|[Ii]-' + + '[Aa][Mm][Ii]|[Ii]-[Bb][Nn][Nn]|[Ii]-' + + '[Dd][Ee][Ff][Aa][Uu][Ll][Tt]|[Ii]-' + + '[Ee][Nn][Oo][Cc][Hh][Ii][Aa][Nn]' + + '|[Ii]-[Hh][Aa][Kk]|' + + '[Ii]-[Kk][Ll][Ii][Nn][Gg][Oo][Nn]|' + + '[Ii]-[Ll][Uu][Xx]|[Ii]-[Mm][Ii][Nn][Gg][Oo]|' + + '[Ii]-[Nn][Aa][Vv][Aa][Jj][Oo]|[Ii]-[Pp][Ww][Nn]|' + + '[Ii]-[Tt][Aa][Oo]|[Ii]-[Tt][Aa][Yy]|' + + '[Ii]-[Tt][Ss][Uu]|[Ss][Gg][Nn]-[Bb][Ee]-[Ff][Rr]|' + + '[Ss][Gg][Nn]-[Bb][Ee]-[Nn][Ll]|[Ss][Gg][Nn]-' + + '[Cc][Hh]-[Dd][Ee])|([Aa][Rr][Tt]-' + + '[Ll][Oo][Jj][Bb][Aa][Nn]|[Cc][Ee][Ll]-' + + '[Gg][Aa][Uu][Ll][Ii][Ss][Hh]|' + + '[Nn][Oo]-[Bb][Oo][Kk]|[Nn][Oo]-' + + '[Nn][Yy][Nn]|[Zz][Hh]-[Gg][Uu][Oo][Yy][Uu]|' + + '[Zz][Hh]-[Hh][Aa][Kk][Kk][Aa]|[Zz][Hh]-' + + '[Mm][Ii][Nn]|[Zz][Hh]-[Mm][Ii][Nn]-' + + '[Nn][Aa][Nn]|[Zz][Hh]-[Xx][Ii][Aa][Nn][Gg])))'; + } + default "en-US"; + description + "Indicates the language tag that is used for + 'attack-description'."; + reference + "RFC 5646: Tags for Identifying Languages, Section 2.1"; + } + leaf last-updated { + type uint64; + mandatory true; + description + "The time the mapping table was updated. It is + represented in seconds relative to + 1970-01-01T00:00:00Z."; + } + list attack-mapping { + key "attack-id"; + description + "Attack mapping details."; + leaf attack-id { + type uint32; + description + "Unique identifier assigned by the vendor for the + attack."; + } + leaf attack-description { + type string; + mandatory true; + description + "Textual representation of the attack description. + Natural Language Processing techniques (e.g., + word embedding) might provide some utility in + mapping the attack description to an attack type."; + } + } + } + } + + augment "/data-channel:dots-data/data-channel:dots-client" { + if-feature "dots-telemetry"; + description + "Augments the data channel with a vendor attack + mapping table of the DOTS client."; + container vendor-mapping { + description + "Used by DOTS clients to share their vendor + attack mapping information with DOTS servers."; + uses attack-mapping; + } + } + + augment "/data-channel:dots-data/data-channel:capabilities" { + if-feature "dots-telemetry"; + description + "Augments the DOTS server capabilities with a + parameter to indicate whether they can share + attack mapping details."; + leaf vendor-mapping-enabled { + type boolean; + config false; + description + "Indicates that the DOTS server supports sharing + attack vendor mapping details with DOTS clients."; + } + } + + augment "/data-channel:dots-data" { + if-feature "dots-telemetry"; + description + "Augments the data channel with a vendor attack + mapping table of the DOTS server."; + container vendor-mapping { + config false; + description + "Includes the list of vendor attack mapping details + that will be shared with DOTS clients upon request."; + uses attack-mapping; + } + } + } + <CODE ENDS> + +12. YANG/JSON Mapping Parameters to CBOR + + All DOTS telemetry parameters in the payload of the DOTS signal + channel MUST be mapped to CBOR types as shown in Table 3: + + | Note: Implementers must check that the mapping output provided + | by their YANG-to-CBOR encoding schemes is aligned with the + | contents of Table 3. + + +======================+==============+======+=============+========+ + |Parameter Name |YANG Type |CBOR |CBOR Major | JSON | + | | |Key |Type & | Type | + | | | |Information | | + +======================+==============+======+=============+========+ + |tsid |uint32 |128 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |telemetry |list |129 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |low-percentile |decimal64 |130 |6 tag 4 [-2, | String | + | | | |integer] | | + +----------------------+--------------+------+-------------+--------+ + |mid-percentile |decimal64 |131 |6 tag 4 [-2, | String | + | | | |integer] | | + +----------------------+--------------+------+-------------+--------+ + |high-percentile |decimal64 |132 |6 tag 4 [-2, | String | + | | | |integer] | | + +----------------------+--------------+------+-------------+--------+ + |unit-config |list |133 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |unit |enumeration |134 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |unit-status |boolean |135 |7 bits 20 | False | + | | | +-------------+--------+ + | | | |7 bits 21 | True | + +----------------------+--------------+------+-------------+--------+ + |total-pipe-capacity |list |136 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |link-id |string |137 |3 text string| String | + +----------------------+--------------+------+-------------+--------+ + |pre-or-ongoing- |list |138 |4 array | Array | + |mitigation | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-traffic-normal |list |139 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |low-percentile-g |yang:gauge64 |140 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |mid-percentile-g |yang:gauge64 |141 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |high-percentile-g |yang:gauge64 |142 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |peak-g |yang:gauge64 |143 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |total-attack-traffic |list |144 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |total-traffic |list |145 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |total-connection- |list |146 |4 array | Array | + |capacity | | | | | + +----------------------+--------------+------+-------------+--------+ + |connection |uint64 |147 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |connection-client |uint64 |148 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |embryonic |uint64 |149 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |embryonic-client |uint64 |150 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |connection-ps |uint64 |151 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |connection-client-ps |uint64 |152 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |request-ps |uint64 |153 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |request-client-ps |uint64 |154 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |partial-request-max |uint64 |155 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |partial-request- |uint64 |156 |0 unsigned | String | + |client-max | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-attack- |container |157 |5 map | Object | + |connection | | | | | + +----------------------+--------------+------+-------------+--------+ + |connection-c |container |158 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |embryonic-c |container |159 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |connection-ps-c |container |160 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |request-ps-c |container |161 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |attack-detail |list |162 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |id |uint32 |163 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |attack-id |uint32 |164 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |attack-description |string |165 |3 text string| String | + +----------------------+--------------+------+-------------+--------+ + |attack-severity |enumeration |166 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |start-time |uint64 |167 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |end-time |uint64 |168 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |source-count |container |169 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |top-talker |container |170 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |spoofed-status |boolean |171 |7 bits 20 | False | + | | | +-------------+--------+ + | | | |7 bits 21 | True | + +----------------------+--------------+------+-------------+--------+ + |partial-request-c |container |172 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |total-attack- |list |173 |4 array | Array | + |connection-protocol | | | | | + +----------------------+--------------+------+-------------+--------+ + |baseline |list |174 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |current-config |container |175 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |max-config-values |container |176 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |min-config-values |container |177 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |supported-unit-classes|container |178 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |server-originated- |boolean |179 |7 bits 20 | False | + |telemetry | | +-------------+--------+ + | | | |7 bits 21 | True | + +----------------------+--------------+------+-------------+--------+ + |telemetry-notify- |uint16 |180 |0 unsigned | Number | + |interval | | | | | + +----------------------+--------------+------+-------------+--------+ + |tmid |uint32 |181 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |measurement-interval |enumeration |182 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |measurement-sample |enumeration |183 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |talker |list |184 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |source-prefix |inet:ip-prefix|185 |3 text string| String | + +----------------------+--------------+------+-------------+--------+ + |mid-list |leaf-list |186 |4 array | Array | + | +--------------+------+-------------+--------+ + | |uint32 | |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |source-port-range |list |187 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |source-icmp-type-range|list |188 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |target |container |189 |5 map | Object | + +----------------------+--------------+------+-------------+--------+ + |capacity |uint64 |190 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |protocol |uint8 |191 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |total-traffic-normal- |list |192 |4 array | Array | + |per-protocol | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-traffic-normal- |list |193 |4 array | Array | + |per-port | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-connection- |list |194 |4 array | Array | + |capacity-per-port | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-traffic-protocol|list |195 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |total-traffic-port |list |196 |4 array | Array | + +----------------------+--------------+------+-------------+--------+ + |total-attack-traffic- |list |197 |4 array | Array | + |protocol | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-attack-traffic- |list |198 |4 array | Array | + |port | | | | | + +----------------------+--------------+------+-------------+--------+ + |total-attack- |list |199 |4 array | Array | + |connection-port | | | | | + +----------------------+--------------+------+-------------+--------+ + |port |inet:port- |200 |0 unsigned | Number | + | |number | | | | + +----------------------+--------------+------+-------------+--------+ + |supported-query-type |leaf-list |201 |4 array | Array | + | +--------------+------+-------------+--------+ + | | | |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |vendor-id |uint32 |202 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |container |203 |5 map | Object | + |telemetry:telemetry- | | | | | + |setup | | | | | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |list |204 |4 array | Array | + |telemetry:total- | | | | | + |traffic | | | | | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |list |205 |4 array | Array | + |telemetry:total- | | | | | + |attack-traffic | | | | | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |container |206 |5 map | Object | + |telemetry:total- | | | | | + |attack-connection | | | | | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |list |207 |4 array | Array | + |telemetry:attack- | | | | | + |detail | | | | | + +----------------------+--------------+------+-------------+--------+ + |ietf-dots- |container |208 |5 map | Object | + |telemetry:telemetry | | | | | + +----------------------+--------------+------+-------------+--------+ + |current-g |yang:gauge64 |209 |0 unsigned | String | + +----------------------+--------------+------+-------------+--------+ + |description-lang |string |210 |3 text string| String | + +----------------------+--------------+------+-------------+--------+ + |lower-type |uint8 |32771 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + |upper-type |uint8 |32772 |0 unsigned | Number | + +----------------------+--------------+------+-------------+--------+ + + Table 3: YANG/JSON Mapping Parameters to CBOR + +13. IANA Considerations + +13.1. DOTS Signal Channel CBOR Key Values + + This specification registers the following comprehension-optional + parameters in the IANA "DOTS Signal Channel CBOR Key Values" registry + [Key-Map]. + + +======================+==========+=======+============+===========+ + | Parameter Name | CBOR Key | CBOR | Change | Reference | + | | Value | Major | Controller | | + | | | Type | | | + +======================+==========+=======+============+===========+ + | tsid | 128 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | telemetry | 129 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | low-percentile | 130 | 6tag4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | mid-percentile | 131 | 6tag4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | high-percentile | 132 | 6tag4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | unit-config | 133 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | unit | 134 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | unit-status | 135 | 7 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-pipe-capacity | 136 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | link-id | 137 | 3 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | pre-or-ongoing- | 138 | 4 | IESG | RFC 9244 | + | mitigation | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-traffic-normal | 139 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | low-percentile-g | 140 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | mid-percentile-g | 141 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | high-percentile-g | 142 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | peak-g | 143 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-attack-traffic | 144 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-traffic | 145 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-connection- | 146 | 4 | IESG | RFC 9244 | + | capacity | | | | | + +----------------------+----------+-------+------------+-----------+ + | connection | 147 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | connection-client | 148 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | embryonic | 149 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | embryonic-client | 150 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | connection-ps | 151 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | connection-client-ps | 152 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | request-ps | 153 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | request-client-ps | 154 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | partial-request-max | 155 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | partial-request- | 156 | 0 | IESG | RFC 9244 | + | client-max | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-attack- | 157 | 5 | IESG | RFC 9244 | + | connection | | | | | + +----------------------+----------+-------+------------+-----------+ + | connection-c | 158 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | embryonic-c | 159 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | connection-ps-c | 160 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | request-ps-c | 161 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | attack-detail | 162 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | id | 163 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | attack-id | 164 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | attack-description | 165 | 3 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | attack-severity | 166 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | start-time | 167 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | end-time | 168 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | source-count | 169 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | top-talker | 170 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | spoofed-status | 171 | 7 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | partial-request-c | 172 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-attack- | 173 | 4 | IESG | RFC 9244 | + | connection-protocol | | | | | + +----------------------+----------+-------+------------+-----------+ + | baseline | 174 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | current-config | 175 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | max-config-values | 176 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | min-config-values | 177 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | supported-unit- | 178 | 5 | IESG | RFC 9244 | + | classes | | | | | + +----------------------+----------+-------+------------+-----------+ + | server-originated- | 179 | 7 | IESG | RFC 9244 | + | telemetry | | | | | + +----------------------+----------+-------+------------+-----------+ + | telemetry-notify- | 180 | 0 | IESG | RFC 9244 | + | interval | | | | | + +----------------------+----------+-------+------------+-----------+ + | tmid | 181 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | measurement-interval | 182 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | measurement-sample | 183 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | talker | 184 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | source-prefix | 185 | 3 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | mid-list | 186 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | source-port-range | 187 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | source-icmp-type- | 188 | 4 | IESG | RFC 9244 | + | range | | | | | + +----------------------+----------+-------+------------+-----------+ + | target | 189 | 5 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | capacity | 190 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | protocol | 191 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-traffic- | 192 | 4 | IESG | RFC 9244 | + | normal-per-protocol | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-traffic- | 193 | 4 | IESG | RFC 9244 | + | normal-per-port | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-connection- | 194 | 4 | IESG | RFC 9244 | + | capacity-per-port | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-traffic- | 195 | 4 | IESG | RFC 9244 | + | protocol | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-traffic-port | 196 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | total-attack- | 197 | 4 | IESG | RFC 9244 | + | traffic-protocol | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-attack- | 198 | 4 | IESG | RFC 9244 | + | traffic-port | | | | | + +----------------------+----------+-------+------------+-----------+ + | total-attack- | 199 | 4 | IESG | RFC 9244 | + | connection-port | | | | | + +----------------------+----------+-------+------------+-----------+ + | port | 200 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | supported-query-type | 201 | 4 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | vendor-id | 202 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 203 | 5 | IESG | RFC 9244 | + | telemetry:telemetry- | | | | | + | setup | | | | | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 204 | 4 | IESG | RFC 9244 | + | telemetry:total- | | | | | + | traffic | | | | | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 205 | 4 | IESG | RFC 9244 | + | telemetry:total- | | | | | + | attack-traffic | | | | | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 206 | 5 | IESG | RFC 9244 | + | telemetry:total- | | | | | + | attack-connection | | | | | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 207 | 4 | IESG | RFC 9244 | + | telemetry:attack- | | | | | + | detail | | | | | + +----------------------+----------+-------+------------+-----------+ + | ietf-dots- | 208 | 5 | IESG | RFC 9244 | + | telemetry:telemetry | | | | | + +----------------------+----------+-------+------------+-----------+ + | current-g | 209 | 0 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + | description-lang | 210 | 3 | IESG | RFC 9244 | + +----------------------+----------+-------+------------+-----------+ + + Table 4: Registered DOTS Signal Channel CBOR Key Values + +13.2. DOTS Signal Channel Conflict Cause Codes + + Per this document, IANA has assigned a new code from the "DOTS Signal + Channel Conflict Cause Codes" registry [Cause]. + + +======+===================+========================+===========+ + | Code | Label | Description | Reference | + +======+===================+========================+===========+ + | 5 | overlapping-pipes | Overlapping pipe scope | RFC 9244 | + +------+-------------------+------------------------+-----------+ + + Table 5: Registered DOTS Signal Channel Conflict Cause Code + +13.3. DOTS Telemetry URIs and YANG Module Registrations + + Per this document, IANA has registered the following URIs in the "ns" + subregistry within the "IETF XML Registry" [RFC3688]: + + URI: urn:ietf:params:xml:ns:yang:ietf-dots-telemetry + Registrant Contact: The IESG. + XML: N/A; the requested URI is an XML namespace. + + URI: urn:ietf:params:xml:ns:yang:ietf-dots-mapping + Registrant Contact: The IESG. + XML: N/A; the requested URI is an XML namespace. + + Per this document, IANA has registered the following YANG modules in + the "YANG Module Names" subregistry [RFC6020] within the "YANG + Parameters" registry. + + Name: ietf-dots-telemetry + Namespace: urn:ietf:params:xml:ns:yang:ietf-dots-telemetry + Maintained by IANA: N + Prefix: dots-telemetry + Reference: RFC 9244 + + Name: ietf-dots-mapping + Namespace: urn:ietf:params:xml:ns:yang:ietf-dots-mapping + Maintained by IANA: N + Prefix: dots-mapping + Reference: RFC 9244 + +14. Security Considerations + +14.1. DOTS Signal Channel Telemetry + + The security considerations for the DOTS signal channel protocol are + discussed in Section 11 of [RFC9132]. The following discusses the + security considerations that are specific to the DOTS signal channel + extension defined in this document. + + The DOTS telemetry information includes DOTS client network topology, + DOTS client domain pipe capacity, normal traffic baseline and + connection capacity, and threat and mitigation information. Such + information is sensitive; it MUST be protected at rest by the DOTS + server domain to prevent data leakage. Note that sharing this + sensitive data with a trusted DOTS server does not introduce any new + significant considerations other than the need for the aforementioned + protection. Such a DOTS server is already trusted to have access to + that kind of information by being in the position to observe and + mitigate attacks. + + DOTS clients are typically considered to be trusted devices by the + DOTS client domain. DOTS clients may be co-located on network + security services (e.g., firewall devices), and a compromised + security service potentially can do a lot more damage to the network + than just the DOTS client component. This assumption differs from + the often-held view (often referred to as the "zero-trust model") + that devices are untrusted. A compromised DOTS client can send fake + DOTS telemetry data to a DOTS server to mislead the DOTS server. + This attack can be prevented by monitoring and auditing DOTS clients + to detect misbehavior and to deter misuse, and by only authorizing + the DOTS client to convey DOTS telemetry information for specific + target resources (e.g., an application server is authorized to + exchange DOTS telemetry for its IP addresses but a DDoS mitigator can + exchange DOTS telemetry for any target resource in the network). As + a reminder, this is a variation of dealing with compromised DOTS + clients as discussed in Section 11 of [RFC9132]. + + DOTS servers must be capable of defending themselves against DoS + attacks from compromised DOTS clients. The following non- + comprehensive list of mitigation techniques can be used by a DOTS + server to handle misbehaving DOTS clients: + + * The probing rate (defined in Section 4.5 of [RFC9132]) can be used + to limit the average data rate to the DOTS server. + + * Rate-limiting DOTS telemetry, including packets with new 'tmid' + values from the same DOTS client, defends against DoS attacks that + would result in varying the 'tmid' to exhaust DOTS server + resources. Likewise, the DOTS server can enforce a quota and time + limit on the number of active pre-or-ongoing-mitigation telemetry + data items (identified by 'tmid') from the DOTS client. + + Note also that the telemetry notification interval may be used to + rate-limit the pre-or-ongoing-mitigation telemetry notifications + received by a DOTS client domain. + +14.2. Vendor Attack Mapping + + The security considerations for the DOTS data channel protocol are + discussed in Section 10 of [RFC8783]. The following discusses the + security considerations that are specific to the DOTS data channel + extension defined in this document. + + All data nodes defined in the YANG module specified in Section 11.2 + that can be created, modified, and deleted (i.e., config true, which + is the default) are considered sensitive. Write operations to these + data nodes without proper protection can have a negative effect on + network operations. Appropriate security measures are recommended to + prevent illegitimate users from invoking DOTS data channel primitives + as discussed in [RFC8783]. Nevertheless, an attacker who can access + a DOTS client is technically capable of undertaking various attacks, + such as: + + * Communicating invalid attack mapping details to the server + ('/data-channel:dots-data/data-channel:dots-client/dots- + telemetry:vendor-mapping'), which will mislead the server when + correlating attack details. + + Some of the readable data nodes in the YANG module specified in + Section 11.2 may be considered sensitive. It is thus important to + control read access to these data nodes. These are the data nodes + and their sensitivity: + + * '/data-channel:dots-data/data-channel:dots-client/dots- + telemetry:vendor-mapping' can be misused to infer the DDoS + protection technology deployed in a DOTS client domain. + + * '/data-channel:dots-data/dots-telemetry:vendor-mapping' can be + used by a compromised DOTS client to leak the attack detection + capabilities of the DOTS server. This is a variation of the + compromised DOTS client attacks discussed in Section 14.1. + +15. References + +15.1. Normative References + + [Private-Enterprise-Numbers] + IANA, "Private Enterprise Numbers", + <https://www.iana.org/assignments/enterprise-numbers/>. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, + DOI 10.17487/RFC2119, March 1997, + <https://www.rfc-editor.org/info/rfc2119>. + + [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, + DOI 10.17487/RFC3688, January 2004, + <https://www.rfc-editor.org/info/rfc3688>. + + [RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying + Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, + September 2009, <https://www.rfc-editor.org/info/rfc5646>. + + [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for + the Network Configuration Protocol (NETCONF)", RFC 6020, + DOI 10.17487/RFC6020, October 2010, + <https://www.rfc-editor.org/info/rfc6020>. + + [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", + RFC 6991, DOI 10.17487/RFC6991, July 2013, + <https://www.rfc-editor.org/info/rfc6991>. + + [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained + Application Protocol (CoAP)", RFC 7252, + DOI 10.17487/RFC7252, June 2014, + <https://www.rfc-editor.org/info/rfc7252>. + + [RFC7641] Hartke, K., "Observing Resources in the Constrained + Application Protocol (CoAP)", RFC 7641, + DOI 10.17487/RFC7641, September 2015, + <https://www.rfc-editor.org/info/rfc7641>. + + [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", + RFC 7950, DOI 10.17487/RFC7950, August 2016, + <https://www.rfc-editor.org/info/rfc7950>. + + [RFC7959] Bormann, C. and Z. Shelby, Ed., "Block-Wise Transfers in + the Constrained Application Protocol (CoAP)", RFC 7959, + DOI 10.17487/RFC7959, August 2016, + <https://www.rfc-editor.org/info/rfc7959>. + + [RFC7970] Danyliw, R., "The Incident Object Description Exchange + Format Version 2", RFC 7970, DOI 10.17487/RFC7970, + November 2016, <https://www.rfc-editor.org/info/rfc7970>. + + [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF + Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, + <https://www.rfc-editor.org/info/rfc8040>. + + [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC + 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, + May 2017, <https://www.rfc-editor.org/info/rfc8174>. + + [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., + Ananthakrishnan, H., and X. Liu, "A YANG Data Model for + Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March + 2018, <https://www.rfc-editor.org/info/rfc8345>. + + [RFC8783] Boucadair, M., Ed. and T. Reddy.K, Ed., "Distributed + Denial-of-Service Open Threat Signaling (DOTS) Data + Channel Specification", RFC 8783, DOI 10.17487/RFC8783, + May 2020, <https://www.rfc-editor.org/info/rfc8783>. + + [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data + Structure Extensions", RFC 8791, DOI 10.17487/RFC8791, + June 2020, <https://www.rfc-editor.org/info/rfc8791>. + + [RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object + Representation (CBOR)", STD 94, RFC 8949, + DOI 10.17487/RFC8949, December 2020, + <https://www.rfc-editor.org/info/rfc8949>. + + [RFC9132] Boucadair, M., Ed., Shallow, J., and T. Reddy.K, + "Distributed Denial-of-Service Open Threat Signaling + (DOTS) Signal Channel Specification", RFC 9132, + DOI 10.17487/RFC9132, September 2021, + <https://www.rfc-editor.org/info/rfc9132>. + +15.2. Informative References + + [Cause] IANA, "DOTS Signal Channel Conflict Cause Codes", + <https://www.iana.org/assignments/dots/>. + + [DOTS-Multihoming] + Boucadair, M., Reddy.K, T., and W. Pan, "Multi-homing + Deployment Considerations for Distributed-Denial-of- + Service Open Threat Signaling (DOTS)", Work in Progress, + Internet-Draft, draft-ietf-dots-multihoming-13, 26 April + 2022, <https://datatracker.ietf.org/doc/html/draft-ietf- + dots-multihoming-13>. + + [DOTS-Robust-Blocks] + Boucadair, M. and J. Shallow, "Distributed Denial-of- + Service Open Threat Signaling (DOTS) Signal Channel + Configuration Attributes for Robust Block Transmission", + Work in Progress, Internet-Draft, draft-ietf-dots-robust- + blocks-03, 11 February 2022, + <https://datatracker.ietf.org/doc/html/draft-ietf-dots- + robust-blocks-03>. + + [DOTS-Telemetry-Specs] + Doron, E., Reddy, T., Andreasen, F., Xia, L., and K. + Nishizuka, "Distributed Denial-of-Service Open Threat + Signaling (DOTS) Telemetry Specifications", Work in + Progress, Internet-Draft, draft-doron-dots-telemetry-00, + 30 October 2016, <https://datatracker.ietf.org/doc/html/ + draft-doron-dots-telemetry-00>. + + [Key-Map] IANA, "DOTS Signal Channel CBOR Key Values", + <https://www.iana.org/assignments/dots/>. + + [PYANG] "pyang", commit dad5c68, April 2022, + <https://github.com/mbj4668/pyang>. + + [RFC2330] Paxson, V., Almes, G., Mahdavi, J., and M. Mathis, + "Framework for IP Performance Metrics", RFC 2330, + DOI 10.17487/RFC2330, May 1998, + <https://www.rfc-editor.org/info/rfc2330>. + + [RFC4732] Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet + Denial-of-Service Considerations", RFC 4732, + DOI 10.17487/RFC4732, December 2006, + <https://www.rfc-editor.org/info/rfc4732>. + + [RFC5612] Eronen, P. and D. Harrington, "Enterprise Number for + Documentation Use", RFC 5612, DOI 10.17487/RFC5612, August + 2009, <https://www.rfc-editor.org/info/rfc5612>. + + [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", + BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, + <https://www.rfc-editor.org/info/rfc8340>. + + [RFC8525] Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., + and R. Wilton, "YANG Library", RFC 8525, + DOI 10.17487/RFC8525, March 2019, + <https://www.rfc-editor.org/info/rfc8525>. + + [RFC8612] Mortensen, A., Reddy, T., and R. Moskowitz, "DDoS Open + Threat Signaling (DOTS) Requirements", RFC 8612, + DOI 10.17487/RFC8612, May 2019, + <https://www.rfc-editor.org/info/rfc8612>. + + [RFC8811] Mortensen, A., Ed., Reddy.K, T., Ed., Andreasen, F., + Teague, N., and R. Compton, "DDoS Open Threat Signaling + (DOTS) Architecture", RFC 8811, DOI 10.17487/RFC8811, + August 2020, <https://www.rfc-editor.org/info/rfc8811>. + + [RFC8903] Dobbins, R., Migault, D., Moskowitz, R., Teague, N., Xia, + L., and K. Nishizuka, "Use Cases for DDoS Open Threat + Signaling", RFC 8903, DOI 10.17487/RFC8903, May 2021, + <https://www.rfc-editor.org/info/rfc8903>. + + [RFC9133] Nishizuka, K., Boucadair, M., Reddy.K, T., and T. Nagata, + "Controlling Filtering Rules Using Distributed Denial-of- + Service Open Threat Signaling (DOTS) Signal Channel", + RFC 9133, DOI 10.17487/RFC9133, September 2021, + <https://www.rfc-editor.org/info/rfc9133>. + + [RFC9177] Boucadair, M. and J. Shallow, "Constrained Application + Protocol (CoAP) Block-Wise Transfer Options Supporting + Robust Transmission", RFC 9177, DOI 10.17487/RFC9177, + March 2022, <https://www.rfc-editor.org/info/rfc9177>. + + [RFC9260] Stewart, R., Tüxen, M., and K. Nielsen, "Stream Control + Transmission Protocol", RFC 9260, DOI 10.17487/RFC9260, + June 2022, <https://www.rfc-editor.org/info/rfc9260>. + +Acknowledgments + + The authors would like to thank Flemming Andreasen, Liang Xia, and + Kaname Nishizuka, coauthors of [DOTS-Telemetry-Specs], and everyone + who had contributed to that document. + + Thanks to Kaname Nishizuka, Yuhei Hayashi, and Tom Petch for comments + and review. + + Special thanks to Jon Shallow and Kaname Nishizuka for their + implementation and interoperability work. + + Many thanks to Jan Lindblad for the yangdoctors review, Nagendra + Nainar for the opsdir review, James Gruessing for the artart review, + Michael Scharf for the tsv-art review, Ted Lemon for the int-dir + review, and Robert Sparks for the gen-art review. + + Thanks to Benjamin Kaduk for the detailed AD review. + + Thanks to Roman Danyliw, Éric Vyncke, Francesca Palombini, Warren + Kumari, Erik Kline, Lars Eggert, and Robert Wilton for the IESG + review. + +Contributors + + The following individuals have contributed to this document: + + Li Su + CMCC + Email: suli@chinamobile.com + + + Pan Wei + Huawei + Email: william.panwei@huawei.com + + +Authors' Addresses + + Mohamed Boucadair (editor) + Orange + 35000 Rennes + France + Email: mohamed.boucadair@orange.com + + + Tirumaleswar Reddy.K (editor) + Akamai + Embassy Golf Link Business Park + Bangalore 560071 + Karnataka + India + Email: kondtir@gmail.com + + + Ehud Doron + Radware Ltd. + Raoul Wallenberg Street + Tel-Aviv 69710 + Israel + Email: ehudd@radware.com + + + Meiling Chen + CMCC + 32 Xuanwumen West Street + Beijing + 100053 + China + Email: chenmeiling@chinamobile.com + + + Jon Shallow + United Kingdom + Email: supjps-ietf@jpshallow.com |